Welcome, Guest. Please login or register.


Author Topic: Raytrace (Read 7001 times)

Offline IstvanV

  • EP addict
  • *
  • Posts: 4806
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 58.0 Firefox 58.0
    • View Profile
Re: Raytrace
« Reply #30 on: 2018.October.15. 19:35:34 »
EP-s verzió SDCC-vel fordítva, de ez nagyon lassú:
* ray2sdcc.com (6.42 kB - downloaded 91 times.)
Saját fejlesztésű float rutinokkal (floatlib.c és float.s) már használhatóbb sebességű, ez 40:44 alatt fut le, a felbontás 42x27 EXOS karakter, azaz 336x243 pixel:
* ray2fast.com (3.97 kB - downloaded 93 times.)
A float.s még nem tökéletes, kissé pontatlan (elsősorban az összeadás és kivonás), előfordulhatnak hibák, és a sebességen is lehetne tovább javítani. :oops:

A kimenet összehasonlítása, az első kép a ray2sdcc.com, a második pedig a ray2fast.com:
21926-2

21928-3

Forráskód:
* src.zip (10.23 kB - downloaded 94 times.)

* ray2sdcc.map (15.49 kB - downloaded 89 times.)
* ray2fast.map (13.7 kB - downloaded 87 times.)

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13519
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Firefox 62.0 Firefox 62.0
    • View Profile
    • http://enterprise.iko.hu/
Re: Raytrace
« Reply #31 on: 2018.October.15. 20:04:03 »
A BASIC-hez képest már ez is übergyors! :smt038

Offline IstvanV

  • EP addict
  • *
  • Posts: 4806
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 58.0 Firefox 58.0
    • View Profile
Re: Raytrace
« Reply #32 on: 2018.October.15. 22:26:29 »
Ha van egyébként valahol már kész, jól optimalizált IEEE 754 32 bites float rutin gyűjtemény, azt talán fel lehetne használni. Meglepő lenne, ha még senki nem írt volna ilyesmit Spectrumra vagy CPC-re. :)

Sebesség összehasonlítás a jelenlegi verzióval:
             ray2sdcc    ray2fast
----------------------------------
__fsadd:    2447.325 s   306.651 s
__fssub:    1679.457 s   217.501 s
__fsmul:   11810.507 s  1061.920 s
__fsdiv:    1999.392 s   260.163 s
__fseq:       11.287 s     3.429 s
__fslt:      236.658 s    50.373 s
__sint2fs:   207.031 s    14.179 s
ldexpf:       58.940 s     5.914 s
frexpf:       22.945 s     2.520 s
floorf:      252.169 s    14.956 s
----------------------------------


* subrtimer.lua (1.81 kB - downloaded 95 times.)

marha jól néz ki, mindig csak ámulok és bámulok, hogy dither-rel milyen szépet lehet csinálni (és hogy van olyan, aki érti, hogy kell lekódolni, de előbb-utóbb most már erőt veszek magamon, és kielemzem a kódot :-) )

A ditherelt pixel rajzolást ez valósítja meg, de a korábbi circle.asm is tartalmaz ilyen rutint (PutPixelD):
Code: C
  1. static const unsigned char dither_table[64] = {
  2.   0x00, 0x30, 0x0C, 0x3C, 0x03, 0x33, 0x0F, 0x3F,
  3.   0x20, 0x10, 0x2C, 0x1C, 0x23, 0x13, 0x2F, 0x1F,
  4.   0x08, 0x38, 0x04, 0x34, 0x0B, 0x3B, 0x07, 0x37,
  5.   0x28, 0x18, 0x24, 0x14, 0x2B, 0x1B, 0x27, 0x17,
  6.   0x02, 0x32, 0x0E, 0x3E, 0x01, 0x31, 0x0D, 0x3D,
  7.   0x22, 0x12, 0x2E, 0x1E, 0x21, 0x11, 0x2D, 0x1D,
  8.   0x0A, 0x3A, 0x06, 0x36, 0x09, 0x39, 0x05, 0x35,
  9.   0x2A, 0x1A, 0x26, 0x16, 0x29, 0x19, 0x25, 0x15
  10. };
  11.  
  12. void plot(unsigned int x, unsigned int y, unsigned char c)
  13. {
  14.   if (x >= (scr_width * 32) || y >= (scr_height * 36))
  15.     return;
  16.   x = x >> 2;
  17.   y = (scr_height * 9 - 1) - (y >> 2);
  18.   c = ((c + dither_table[((y & 7) << 3) | (x & 7)]) >> 6) & 3;
  19.   {
  20.     unsigned char m = 0x88 >> (x & 3);
  21.     unsigned char b = (!(c & 1) ? 0x00 : 0xF0) | (!(c & 2) ? 0x00 : 0x0F);
  22.     unsigned char p3saved = port_page_3;
  23.     unsigned int  addr = line_addr_table[y] + (x >> 2);
  24.     port_page_3 = 0xFC | (unsigned char) (addr >> 14);
  25.     addr |= 0xC000U;
  26.     *((unsigned char *) addr) = (*((unsigned char *) addr) & ~m) | (b & m);
  27.     port_page_3 = p3saved;
  28.   }
  29. }
A lényeg a c = ((c + dither_table[((y & 7) << 3) | (x & 7)]) >> 6) & 3; sor.

Offline Z80System

  • EP addict
  • *
  • Posts: 3926
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Chrome 69.0.3497.100 Chrome 69.0.3497.100
    • View Profile
Re: Raytrace
« Reply #33 on: 2018.October.15. 22:35:54 »

Nade kérem, ez mikor lesz 50 FPS ? ! :)
Z80 System

Offline IstvanV

  • EP addict
  • *
  • Posts: 4806
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 58.0 Firefox 58.0
    • View Profile
Re: Raytrace
« Reply #34 on: 2018.October.15. 22:43:55 »
Nade kérem, ez mikor lesz 50 FPS ? !

A PC-s verzió lehetne. :) Akár GPU (shader) alapú is, mint az itt látható Mandelbrot példa, szerintem így növelhető lenne a felbontás. EP-n néhány előre renderelt képkockát lehetne megjeleníteni animációként.

Offline endi

  • EP addict
  • *
  • Posts: 7305
  • Country: hu
  • grafikus, játékfejlesztõ, programozás, scifi, tudományok, vallás
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Chrome 69.0.3497.100 Chrome 69.0.3497.100
    • View Profile
    • Honlapom
Re: Raytrace
« Reply #35 on: 2018.October.15. 23:15:41 »
A PC-s verzió lehetne. :) Akár GPU (shader) alapú is, mint az itt látható Mandelbrot példa, szerintem így növelhető lenne a felbontás. EP-n néhány előre renderelt képkockát lehetne megjeleníteni animációként.

a shadertoy.com oldalon érdemes nézegetni, weben futtat brutál shadereket. figyelem! csak erős géppel nézzétek, ugyanis be tudja dönteni a rendszert is!
brutál shaderek vannak ott
Vigyázat! Szektás vagyok! :)

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13519
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Firefox 62.0 Firefox 62.0
    • View Profile
    • http://enterprise.iko.hu/
Re: Raytrace
« Reply #36 on: 2018.October.15. 23:16:08 »
Ehhez lenne értelme a kooprocit összebarkácsolni?

Offline endi

  • EP addict
  • *
  • Posts: 7305
  • Country: hu
  • grafikus, játékfejlesztõ, programozás, scifi, tudományok, vallás
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Chrome 69.0.3497.100 Chrome 69.0.3497.100
    • View Profile
    • Honlapom
Re: Raytrace
« Reply #37 on: 2018.October.15. 23:16:46 »
amúgy ezzel a programmal lehetne sprite animot is számolni játékba. egy 32x32-es vagy ilyesmi kisebb dolog hamar leszámolódna és mehet a game :)
Vigyázat! Szektás vagyok! :)

Offline IstvanV

  • EP addict
  • *
  • Posts: 4806
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 58.0 Firefox 58.0
    • View Profile
Re: Raytrace
« Reply #38 on: 2018.October.15. 23:31:04 »
Ehhez lenne értelme a kooprocit összebarkácsolni?

Ha támogat szabványos 32 bites float formátumot (pl. 1.0 = 3F800000h), akkor valószínűleg használható lenne. Csak meg kell valósítani a különböző alap műveleteket (például float __fsadd(float a1, float a2) az a1 és a2 összeadása, asm-ben az a1 és a2 a veremből olvasható, a visszatérési érték pedig a DEHL-be kerül), és utána bármilyen SDCC-vel fordított C programba egyszerűen beépíthető.

Offline geco

  • EP addict
  • *
  • Posts: 5430
  • Country: hu
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 52.0 Firefox 52.0
    • View Profile
Re: Raytrace
« Reply #39 on: 2018.October.16. 08:34:33 »
Sebesség összehasonlítás a jelenlegi verzióval:
            ray2sdcc    ray2fast
----------------------------------
__fsadd:    2447.325 s   306.651 s
__fssub:    1679.457 s   217.501 s
__fsmul:   11810.507 s  1061.920 s
__fsdiv:    1999.392 s   260.163 s
__fseq:       11.287 s     3.429 s
__fslt:      236.658 s    50.373 s
__sint2fs:   207.031 s    14.179 s
ldexpf:       58.940 s     5.914 s
frexpf:       22.945 s     2.520 s
floorf:      252.169 s    14.956 s
----------------------------------

Nem semmi gyorsulást sikerült elérni, amúgy a két kép között nem is vettem észre különbséget, igaz váltogatva néztem.

Offline Povi

  • EP addict
  • *
  • Posts: 1873
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Chrome 69.0.3497.100 Chrome 69.0.3497.100
    • View Profile
    • http://povi.fw.hu
Re: Raytrace
« Reply #40 on: 2018.October.16. 10:15:56 »
Ehhez lenne értelme a kooprocit összebarkácsolni?

érdemes lenne!!!

főleg, hogy a HiSoft Pascal tud arra is fordítani! :-)
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 1873
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Chrome 69.0.3497.100 Chrome 69.0.3497.100
    • View Profile
    • http://povi.fw.hu
Re: Raytrace
« Reply #41 on: 2018.October.16. 12:49:45 »
Ha támogat szabványos 32 bites float formátumot (pl. 1.0 = 3F800000h), akkor valószínűleg használható lenne.
Sajnos nem azt használ, de bitforgatásokkal elég könnyen át lehetne alakítani az AMD-s formátumra (7 bites kitevő, 24 bites mantissza).
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 1873
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Chrome 69.0.3497.100 Chrome 69.0.3497.100
    • View Profile
    • http://povi.fw.hu
Re: Raytrace
« Reply #42 on: 2018.October.16. 13:08:42 »
Pascal-ban (32 bites float) 46:28 a 42x27-es képernyőn, egyelőre dither nélkül, globális változókkal.
« Last Edit: 2018.October.16. 14:04:10 by Povi »
*** Speicherplatz zu klein

Offline IstvanV

  • EP addict
  • *
  • Posts: 4806
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 58.0 Firefox 58.0
    • View Profile
Re: Raytrace
« Reply #43 on: 2018.October.16. 16:26:30 »
Egy keveset még sikerült gyorsítani, ezt a verziót hamarosan feltöltöm.

A PC-s változat animálva és kétszeres felbontással:
* ray2.c (5.14 kB - downloaded 91 times.)

Offline endi

  • EP addict
  • *
  • Posts: 7305
  • Country: hu
  • grafikus, játékfejlesztõ, programozás, scifi, tudományok, vallás
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Chrome 69.0.3497.100 Chrome 69.0.3497.100
    • View Profile
    • Honlapom
Re: Raytrace
« Reply #44 on: 2018.October.16. 16:31:17 »
érdemes lenne!!!
főleg, hogy a HiSoft Pascal tud arra is fordítani! :-)

akkor már nem csak kooproci, hanem vannak valami direkt 3d számolásra való extra utasítások is. bár lehet hogy manapság ez már rég benne van a cooprociban :)
de ez érdekes dolog amúgy, mert ezt nem tartom "csalásnak" ep bővítés ügyben, míg a sprite, extra grafika meg ilyesmiket valahogy igen. nekem az már nem az igazi EP (főleg, hogy akkor már miért nem full 3d kártyát kötünk hozzá az ep-hez?).
valahogy a cooprocit nem tartom rendszeridegennek :)
Vigyázat! Szektás vagyok! :)