Enterprise Forever

:HUN => VIDEO: => Topic started by: Povi on 2018.October.08. 14:36:24

Title: Raytrace
Post by: Povi on 2018.October.08. 14:36:24
facebook-on lévő raytracer EP-re Pascalban:
Title: Re:Raytrace
Post by: Zozosoft on 2018.October.08. 14:45:06
facebook-on lévő raytracer EP-re Pascalban:
Átírtad? Mennyi idő alatt fut le?
A BASIC az kb másfél óra ALT+W-vel :oops:

Mondjuk ha jól nézem a tiéd az nem max képernyős.
[attach=2]
Title: Re:Raytrace
Post by: endi on 2018.October.08. 14:55:03
durva! raytrace ep-n!

amúgy az alt+w sokkal gyorsabb, ha a z80 clock is maxra van állítva
Title: Re:Raytrace
Post by: Povi on 2018.October.08. 15:05:27
Átírtad? Mennyi idő alatt fut le?
A BASIC az kb másfél óra ALT+W-vel :oops:

Mondjuk ha jól nézem a tiéd az nem max képernyős.
(Attachment Link)
24 perc 56 mp, out 191,12-vel

a felbontás ugyanannyi, mint a Speccy változatban (256x176)

http://povi.uw.hu/ray.pas (http://povi.uw.hu/ray.pas)
Title: Re:Raytrace
Post by: IstvanV on 2018.October.08. 15:05:42
Talán érdekes lenne még C-re átírni egész számos aritmetikával, vagy 4 színű módban ditherelt színátmenetre módosítani, ha az eredeti algoritmus azt lehetővé teszi.
Title: Re:Raytrace
Post by: Povi on 2018.October.08. 15:06:11
Átírtad? Mennyi idő alatt fut le?
A BASIC az kb másfél óra ALT+W-vel :oops:

Mondjuk ha jól nézem a tiéd az nem max képernyős.
(Attachment Link)
ó, látom, te hires kétszínű módot használtál!
Title: Re:Raytrace
Post by: Povi on 2018.October.08. 15:08:50
Talán érdekes lenne még C-re átírni egész számos aritmetikával, vagy 4 színű módban ditherelt színátmenetre módosítani, ha az eredeti algoritmus azt lehetővé teszi.
nekem is eszembe jutott, a program eredeti szerzője készített egy 16 bites float rutint, azzal 6 perc a speccy-n, állítja, hogy annál még a fixpontos se lenne gyorsabb.

Az igazat megvallva nem értem az algoritmust, csak átkódoltam BASIC-ről Pascal-ra :oops:
Title: Re:Raytrace
Post by: Zozosoft on 2018.October.08. 15:10:07
ó, látom, te hires kétszínű módot használtál!
És azt is 27x42-es lapon :-)
Title: Re:Raytrace
Post by: Povi on 2018.October.08. 15:10:20
Átírtad? Mennyi idő alatt fut le?
A BASIC az kb másfél óra ALT+W-vel :oops:

Mondjuk ha jól nézem a tiéd az nem max képernyős.
(Attachment Link)
Zozó, mik a paraméterek a max felbontáshoz? (a fő ciklusban a i, j és dz?)
szerk: közben látom, fölraktad a forrást is
Title: Re:Raytrace
Post by: endi on 2018.October.08. 22:24:24
lehetne olyat csinálni, hogy animot renderel, de úgy, hogy minden anim frame-be egyenként, és közben váltogatná az így felépülő képeket.
Title: Re:Raytrace
Post by: Zozosoft on 2018.October.09. 09:07:35
Talán érdekes lenne még C-re átírni egész számos aritmetikával, vagy 4 színű módban ditherelt színátmenetre módosítani, ha az eredeti algoritmus azt lehetővé teszi.
Igen, érdekes lenne megnézni többféle programnyelvben.
Title: Re:Raytrace
Post by: endi on 2018.October.09. 16:31:04
most nézem az eredeti basic forrást... hát, ez nem semmi. én mindig is hülye voltam a 3d matekhoz, de ilyen rövid kóddal lehet raytrace-lni egy kockás síkot, két tükröződő gömbbel és árnyékkal? hát... elképesztő...
Title: Re:Raytrace
Post by: endi on 2018.October.11. 14:08:50
gyorsan rákerestem, de nem találtam semmiféle raytrace dolgot specyre vagy hasonló régi gépre! durva :)
Title: Re:Raytrace
Post by: Povi on 2018.October.11. 14:11:28
gyorsan rákerestem, de nem találtam semmiféle raytrace dolgot specyre vagy hasonló régi gépre! durva :)
A Spectrum Mánia nevű facebook csoportba rakta ki az eredeti kódot a Daniel A. Nagy nevű fickó, ő írta a 16 bites float rutinokat is:

"Naszóval, az előző postban közölt BASIC program csak egy előtanulmány volt ahhoz, amit igazándiból akartam csinálni, nevezetesen egy demo alkalmazást az alacsonypontosságú lebegőpontos kalkulátoromhoz, meg úgy általában egy bizonyítékot arra, hogy az alacsony pontosságú lebegőpontos számítások, amik könnyen és olcsón implementálhatóak mind hardverben, mint a legegyszerűbb mikrokontrollereken szoftverben valójában igen hasznosak és jelentősen csökkenthetik különböző projektek erőforrásigényét. A dolog messze túlmutat a retrón és a Spectrumon.

Ma este, munka után végre összeraktam! Az eredmény a csatolt képen látható.

Megfigyelhető, hogy egy kicsit zajosabb, mint a négyszerekkora számábrázolási pontosságot használó BASIC program, viszont cserébe 8 és fél óra helyett 6 perc 42 másodperc alatt lefut. Valószínüleg simán felgyorsítható a duplájára is, mert egy csomó mindent többször kiszámol feleslegesen. Egyszer majd kioptimalizálom.

Amit viszont érdemes megjegyezni, hogy néhány dolgot alacsony pontossággal óvatosabban kell számolni. Például a nagyon gyakori (a+ε)²-a² jellegű kifejezéseket mindig ε(2a+ε) alakban kell írni, különben pontatlan lesz. Két egységvektor által bezárt szög szinusznégyzetét nem szabad a skalárszorzatukból 1-(a⋅b)² képlettel számolni, hanem mindig az (a⋅b)a-b önmagával vett skalárszorzatát kell használni, ami ugyan jóval több művelet, de cserébe pontos.

https://github.com/nagydani/lpfp/"


https://www.facebook.com/groups/1708388329425895/
Title: Re:Raytrace
Post by: Povi on 2018.October.11. 14:15:24
és ha már raytrace, Kapitány ma rakta be valamelyik retró computeres facebook csoportba Bisqwit videóját, raytrace DOS-on:
https://www.youtube.com/watch?v=N8elxpSu9pw

Bisqwit-re érdemes föliratkozni, elborult videói vannak (pl. hogyan írjunk compiler-t, a boundary tracing-es Mandelbrot rajzoló algoritmust tőle loptam), nekem LGB mutatta a csatornáját, valamelyik random péntek esti sörözés közben :-)
Title: Re:Raytrace
Post by: endi on 2018.October.11. 14:49:29
akkor úgy mondom, hogy eddig még nem voltak ilyen raytrace dolgok régi 8 bites gépekre.
Title: Re:Raytrace
Post by: endi on 2018.October.11. 14:50:22
6 perc alatt lefut specyn BASICBEN?????? jól értem?
Title: Re:Raytrace
Post by: Povi on 2018.October.11. 14:55:00
6 perc alatt lefut specyn BASICBEN?????? jól értem?
neeem, 8 és fél óra BASIC-ben, 6 perc assembly-ben, 16 bites float-tal
Title: Re:Raytrace
Post by: endi on 2018.October.11. 15:53:40
neeem, 8 és fél óra BASIC-ben, 6 perc assembly-ben, 16 bites float-tal

ja értem. na azért, már kezdtem megijedni hogy ennyire hülye vagyok a 3d matekhoz :D
amúgy 6 perc az már nem rossz. vajon mi lenne kisebb felbontással? pl ep-n 256 színben? na persze ott meg már színeket lesz érdemes számolni...

azért nem semmi, ezt is megértük, megint valami tök új dolog régi gépeinken :) eszembe se jutott hogy ilyen lesz valaha...
Title: Re:Raytrace
Post by: endi on 2018.October.11. 16:47:17
ez a raytrace téma megérne egy saját topikot
Title: Re:Raytrace
Post by: IstvanV on 2018.October.12. 17:07:47
Ez egyelőre PC (SDL 1.2) átirat kísérletezés céljára, ha helyesen működik, ugyanaz a kimenete mint az IS-BASIC változatnak:
[attachurl=1]
Title: Re:Raytrace
Post by: IstvanV on 2018.October.12. 17:39:30
Ez a módosítás elvileg működhetne EP-n is 4 színű módban, a Z változó alapján állítja a színt (196. sor), ami talán javítja a 3D effektust:
[attachurl=1]

[attachthumb=2]
Title: Re:Raytrace
Post by: geco on 2018.October.14. 09:27:48
Nagyon jól néz ki, gondolom itt azért több szín van a képen.
Title: Re:Raytrace
Post by: endi on 2018.October.14. 12:30:05
Nagyon jól néz ki, gondolom itt azért több szín van a képen.

lehet hogy mobilon nézed, ez 4 szín, ditherelve
Title: Re:Raytrace
Post by: Zozosoft on 2018.October.14. 18:15:03
Tegnap mintha lett volna itt egy EP verzió is... :oops:
Title: Re:Raytrace
Post by: endi on 2018.October.14. 22:30:55
egyébként a 3d grafika terén van kétféle renderelési típus: biased és unbiased.
a lényeg, hogy a biased render egy menetben végleges eredményt hoz.
az unbiased meg nem így dolgozik, hanem egy képpontot x pontossággal leszámol, és minél többször rendereljük a képpontot, annál jobb lesz az eredmény.
értelemszerűen ez utóbbinak az az értelme, hogy bizonyos dolgokat csak így lehetséges számolni értelmesen. pl. a raytrace ilyen, és mindenféle komolyabb renderelési dolog.
na ez csak azért jutott eszembe, mert ez amit csináltok is lehetne unbiased :)
Title: Re:Raytrace
Post by: Povi on 2018.October.15. 11:36:05
Ez a módosítás elvileg működhetne EP-n is 4 színű módban, a Z változó alapján állítja a színt (196. sor), ami talán javítja a 3D effektust:
(Attachment Link)

(Attachment Link)

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 :-) )

kiváncsi vagyok, mennyi lesz majd az EP-n a futási ideje (ha lesz EP változat :-))

és tényleg jó lenne egy külön raytrace topikba szétszedni :-)
Title: Re:Raytrace
Post by: Zozosoft on 2018.October.15. 12:09:20
és tényleg jó lenne egy külön raytrace topikba szétszedni :-)
Szétszedtem :-)
Title: Re: Raytrace
Post by: endi on 2018.October.15. 15:17:48
még mindig ezen csodálkozok. raytrace ep-n, specy-n :)
Title: Re: Raytrace
Post by: Zozosoft on 2018.October.15. 17:43:42
még mindig ezen csodálkozok. raytrace ep-n, specy-n :)
Primora és Zx81-re is átírták :-)
Title: Re: Raytrace
Post by: IstvanV on 2018.October.15. 19:35:34
EP-s verzió SDCC-vel fordítva, de ez nagyon lassú:
[attachurl=1]
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:
[attachurl=2]
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:
[attachthumb=3]

[attachthumb=4]

Forráskód:
[attachurl=5]

[attachurl=6]
[attachurl=7]
Title: Re: Raytrace
Post by: Zozosoft on 2018.October.15. 20:04:03
A BASIC-hez képest már ez is übergyors! :smt038
Title: Re: Raytrace
Post by: IstvanV 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
----------------------------------


[attachurl=1]

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.
Title: Re: Raytrace
Post by: Z80System on 2018.October.15. 22:35:54

Nade kérem, ez mikor lesz 50 FPS ? ! :)
Title: Re: Raytrace
Post by: IstvanV 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 (https://enterpriseforever.com/ep128emu/plus4emu/msg64027/#msg64027) 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.
Title: Re: Raytrace
Post by: endi on 2018.October.15. 23:15:41
A PC-s verzió lehetne. :) Akár GPU (shader) alapú is, mint az itt (https://enterpriseforever.com/ep128emu/plus4emu/msg64027/#msg64027) 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
Title: Re: Raytrace
Post by: Zozosoft on 2018.October.15. 23:16:08
Ehhez lenne értelme a kooprocit összebarkácsolni? (http://ep.homeserver.hu/Hardware/Cooprocessor/cooprocessor.htm)
Title: Re: Raytrace
Post by: endi 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 :)
Title: Re: Raytrace
Post by: IstvanV on 2018.October.15. 23:31:04
Ehhez lenne értelme a kooprocit összebarkácsolni? (http://ep.homeserver.hu/Hardware/Cooprocessor/cooprocessor.htm)

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ő.
Title: Re: Raytrace
Post by: geco 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.
Title: Re: Raytrace
Post by: Povi on 2018.October.16. 10:15:56
Ehhez lenne értelme a kooprocit összebarkácsolni? (http://ep.homeserver.hu/Hardware/Cooprocessor/cooprocessor.htm)

érdemes lenne!!!

főleg, hogy a HiSoft Pascal tud arra is fordítani! :-)
Title: Re: Raytrace
Post by: Povi 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).
Title: Re: Raytrace
Post by: Povi 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.
Title: Re: Raytrace
Post by: IstvanV 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:
[attachurl=1]
Title: Re: Raytrace
Post by: endi 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 :)
Title: Re: Raytrace
Post by: Povi on 2018.October.16. 16:38:17
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 :)
Ez a koproci, amiről szó van, a 70-es évek találmánya, ma már nem is kapható, legfeljebb bontottan aranyáron, vagy Kínából, hamisítványként. Viszont Z80-hoz nagyon könnyen társítható (valójában arra találták ki, vagy inkább az Intel 8080-hoz). 3D utasításokat nem tud, de az alapműveleteken kívül van benne sin, cos, gyökvonás stb.
Title: Re: Raytrace
Post by: endi on 2018.October.16. 17:42:02
Ez a koproci, amiről szó van, a 70-es évek találmánya, ma már nem is kapható, legfeljebb bontottan aranyáron, vagy Kínából, hamisítványként. Viszont Z80-hoz nagyon könnyen társítható (valójában arra találták ki, vagy inkább az Intel 8080-hoz). 3D utasításokat nem tud, de az alapműveleteken kívül van benne sin, cos, gyökvonás stb.
ű

na ja, gondolom itt inkább az egyszerű társítás a lényeg, mert ennyi erővel egy olcsó mai procit is társíthatnánk brutál számítási kapacitással :D
Title: Re: Raytrace
Post by: Z80System on 2018.October.16. 21:02:15
Quote
Nem semmi gyorsulást sikerült elérni,

Na de kérem ... az 50 FPS kérem ... azzal mileszkérem ... kérdemén kérem ...

Tiltakozom ! :)
Title: Re: Raytrace
Post by: IstvanV on 2018.October.17. 14:55:39
Egyelőre 39:36 lett az előző ray2fast.com-hoz képest változatlan kimenettel (az osztás pontossága elvileg javult, de ez nem eredményezett látható változást), elsősorban a szorzáson sikerült gyorsítani. Készült még pontosabb összeadó rutin is, ami azonban 43:12-re növelné a futásidőt. Talán lehetne még próbálkozni gyorsabb sqrtf (https://sourceforge.net/p/sdcc/code/HEAD/tree/trunk/sdcc/device/lib/sqrtf.c)() függvénnyel is, vagy a raytrace program módosításával.

Szerk.: néhány sor változtatásával sikerült megtakarítani egy sqrtf() hívást és egy pár egyéb műveletet, így már a lassú összeadó rutinnal is 41:04 lett, a pontatlannal pedig 37:43:
Code: Diff
  1. @@ -39,18 +39,19 @@
  2.      for (k = 0; k < spheres; k++) {
  3.        float   px = c[k * 4] - x;
  4.        float   py = c[k * 4 + 1] - y;
  5.        float   pz = c[k * 4 + 2] - z;
  6. -      float   pp = px * px + py * py + pz * pz;
  7.        float   sc = px * dx + py * dy + pz * dz;
  8. -      float   bb, aa;
  9. +      float   pp, bb, aa;
  10.        if (sc <= 0.0f)
  11.          continue;
  12. +      pp = px * px + py * py + pz * pz;
  13.        bb = sc * sc / dd;
  14.        aa = q[k] - pp + bb;
  15.        if (aa <= 0.0f)
  16.          continue;
  17. -      sc = (sqrtf(bb) - sqrtf(aa)) / sqrtf(dd);
  18. +      bb = sqrtf(bb);
  19. +      sc = (bb - sqrtf(aa)) * bb / sc;
  20.        if (sc < s || (n & 0x80)) {
  21.          n = k + 1;
  22.          s = sc;
  23.        }
  24. @@ -72,9 +73,9 @@
  25.      nx = x - c[n * 4];
  26.      ny = y - c[n * 4 + 1];
  27.      nz = z - c[n * 4 + 2];
  28.      nn = nx * nx + ny * ny + nz * nz;
  29. -    l = 2.0f * (dx * nx + dy * ny + dz * nz) / nn;
  30. +    l = ldexpf(dx * nx + dy * ny + dz * nz, 1) / nn;
  31.      dx = dx - nx * l;
  32.      dy = dy - ny * l;
  33.      dz = dz - nz * l;
  34.    } while (1);

Még egy lehetőség lenne a nagyon pontatlan aritmetika, az alsó byte figyelmen kívül hagyásával. Talán még ez is használható kimenetet adna. Csak a szorzás "csonkítása" is nyert 6 és fél percet.
Title: Re: Raytrace
Post by: endi on 2018.October.17. 16:21:02
amúgy az mennyire lassítana, ha valami "editálható" objekteket renderelne?
persze nem polygonokra gondolok meg komolyabb dologra, hanem csak megadható gömbök, kockák stb...
Title: Re: Raytrace
Post by: Povi on 2018.October.18. 09:02:04
facebook-ról:
"ZX Spectrumra készülőben van a következő 1k-s intro, ami először lerendereli, utána teljes sebességgel lejátssza az alábbi animációt. Lenne kedve az ittlévők közül valakinek portolni más 8-bites gépekre (Amigások kíméljenek -- nektek már 1986-ban ott volt a Juggler)?"

https://www.facebook.com/nagydanya/videos/10216945982140040/

remélem, látható a videó
Title: Re: Raytrace
Post by: IstvanV on 2018.October.18. 16:56:04
A floorf(-0.5) eredménye hibás volt, javítva (a float16.s-ben még nem, de a .com file nem azzal készült):
[attachurl=1]

IPLAY formátumú animációk:
[attachurl=2]    (interlace nélkül, turbós gépen elfogadható sebességű a lejátszás)
[attachurl=3]    (2x interlace)
[attachurl=4]    (4x interlace)
Title: Re: Raytrace
Post by: IstvanV on 2018.October.19. 19:40:10
Ehhez lenne értelme a kooprocit összebarkácsolni? (http://ep.homeserver.hu/Hardware/Cooprocessor/cooprocessor.htm)

Ha van a hardver programozására már működő példa, akkor annak alapján lehetne a használatával próbálkozni, és Xep128 emulátorral tesztelhető lenne.
Title: Re: Raytrace
Post by: Povi on 2018.October.24. 11:05:34
Ha van a hardver programozására már működő példa, akkor annak alapján lehetne a használatával próbálkozni, és Xep128 emulátorral tesztelhető lenne.
Lgb belerakta a javascript ep-emulátorába, de nem pontos emuláció
Title: Re: Raytrace
Post by: nagydani on 2018.November.16. 17:47:42
Sziasztok!
Én vagyok a raytracer eredeti szerzője, Spectrumos arc, de alapvetően meleg érzelmekkel viseltetem az EP iránt is, annak is Z80 a lelke.

Egyrészt nagyon szívesen segítek bárkinek, aki a témában valamit alkotni szeretne Enterprise-on. Például ajánlom mindenkinek a figyelmébe az alacsonypontosságú lebegőpontos library-t, amivel gépikódban egész gyorsan le lehet renderelni a dolgot, kis precizitáscsökkenés árán: https://github.com/nagydani/lpfp/

Másrészt a dolognak van folytatása (ld a csatolt animációt), jó lenne megcsinálni EP-re is úgy, hogy valamennyire kihasználjuk a gép plusz képességeit (nagyobb felbontás, több szín, stb.)
Title: Re: Raytrace
Post by: nagydani on 2018.November.16. 17:52:20
amúgy az mennyire lassítana, ha valami "editálható" objekteket renderelne?
persze nem polygonokra gondolok meg komolyabb dologra, hanem csak megadható gömbök, kockák stb...

Megoldható. Elvileg fel van rá készítve a kód. A sebességcsökkenés nagyjából azzal arányos, hogy milyen gyorsan tudod detektálni, hogy az adott ojjektumot nem találja el a fénysugár.
Title: Re: Raytrace
Post by: endi on 2018.November.16. 18:03:28
Megoldható. Elvileg fel van rá készítve a kód. A sebességcsökkenés nagyjából azzal arányos, hogy milyen gyorsan tudod detektálni, hogy az adott ojjektumot nem találja el a fénysugár.

akkor lehetne olyat hogy blenderből exportált dolgot renderelni :)
Title: Re: Raytrace
Post by: nagydani on 2018.November.16. 18:07:43
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:
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:

Szia István!

Igazán szép munka, gratulálok! De szerintem ha sebességre hajtasz, majdnem egy nagyságrendet veszítesz két dolgon:
Az egyik, hogy túl nagy a számábrázolási pontosságod. Aláírom, hogy az én 9-bites mantisszám egy kicsit kevés (látszik, hogy zajos a renderelt kép), de egészen biztos vagyok benne, hogy 16 bit mantissza bőségesen elég ilyen felbontású raytracerhez, még a precíz kerekítgetéseket is megspórolhatod a sebesség érdekében. Te nagyjából 24 bites mantisszát használsz, ami itt teljesen indokolatlan.
A másik, hogy egyáltalán nem használsz táblázatokat, pedig azzal rengeteget lehet nyerni. Például egy négyzetszámtáblázattal rengeteget tudsz gyorsítani a szorzáson az
ab = [(a+b)² - (a-b)²] / 4
képlettel, vagy egy variációval ugyanerre a témára. S ha már a 8-bites szorzásod gyors, akkor abból össze tudod rakni a nagyobb (pl 16 bites) szorzást.
Title: Re: Raytrace
Post by: endi on 2018.November.16. 18:35:47
sőt, blenderből lehetne animációt is exportálni
Title: Re: Raytrace
Post by: Povi on 2018.November.22. 20:07:25
Raycasting 64 byte-ban (DOS):
https://hackaday.com/2018/11/21/tiny-ray-tracer-fits-in-64-bytes/?fbclid=IwAR2nNxSWwzEXHjGwOZvYqS86kJb5KZGwGlnh-vUrgq77Hh7gaznnzUDLtAw