Welcome, Guest. Please login or register.


Author Topic: Raytrace (Read 81203 times)

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Raytrace
« Reply #30 on: 2018.October.15. 19:35:34 »
EP-s verzió SDCC-vel fordítva, de ez nagyon lassú:
[ Guests cannot view attachments ]
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:
[ Guests cannot view attachments ]
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:
[ Guests cannot view attachments ]

[ Guests cannot view attachments ]

Forráskód:
[ Guests cannot view attachments ]

[ Guests cannot view attachments ]
[ Guests cannot view attachments ]

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14775
  • Country: hu
    • 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: 4822
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
----------------------------------


[ Guests cannot view attachments ]

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: 3848
  • Country: hu
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: 4822
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: 7298
  • Country: hu
  • grafikus, játékfejlesztõ, programozás, scifi, tudományok, vallás
    • 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

  • Global Moderator
  • EP addict
  • *
  • Posts: 14775
  • Country: hu
    • 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: 7298
  • Country: hu
  • grafikus, játékfejlesztõ, programozás, scifi, tudományok, vallás
    • 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: 4822
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: 7218
  • Country: hu
    • Támogató Támogató
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: 2307
  • Country: hu
    • 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: 2307
  • Country: hu
    • 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: 2307
  • Country: hu
    • 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: 4822
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:
[ Guests cannot view attachments ]

Offline endi

  • EP addict
  • *
  • Posts: 7298
  • Country: hu
  • grafikus, játékfejlesztõ, programozás, scifi, tudományok, vallás
    • 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! :)