Welcome, Guest. Please login or register.


Author Topic: Raytrace (Read 1732 times)

Offline Povi

  • EP addict
  • *
  • Posts: 1700
  • 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 #45 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.
*** Speicherplatz zu klein

Offline endi

  • EP addict
  • *
  • Posts: 6766
  • 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 #46 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
A diplomás magyar programozó megcsinált egy pacmant egy év alatt, majd lefikázta a világ legjobb játékait. :D

Offline Z80System

  • EP addict
  • *
  • Posts: 3834
  • 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 #47 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 ! :)
Z80 System

Offline IstvanV

  • EP addict
  • *
  • Posts: 4756
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 58.0 Firefox 58.0
    • View Profile
Re: Raytrace
« Reply #48 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() 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.
« Last Edit: 2018.October.17. 16:25:37 by IstvanV »

Offline endi

  • EP addict
  • *
  • Posts: 6766
  • 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 #49 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...
A diplomás magyar programozó megcsinált egy pacmant egy év alatt, majd lefikázta a világ legjobb játékait. :D

Offline Povi

  • EP addict
  • *
  • Posts: 1700
  • 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 #50 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ó
*** Speicherplatz zu klein

Offline IstvanV

  • EP addict
  • *
  • Posts: 4756
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 58.0 Firefox 58.0
    • View Profile
Re: Raytrace
« Reply #51 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):
* raytrace.zip (25.3 kB - downloaded 82 times.)

IPLAY formátumú animációk:
* raytrace.epv (18.6 kB - downloaded 79 times.)    (interlace nélkül, turbós gépen elfogadható sebességű a lejátszás)
* raytrac2.epv (18.68 kB - downloaded 78 times.)    (2x interlace)
* raytrac4.epv (12.72 kB - downloaded 78 times.)    (4x interlace)

Offline IstvanV

  • EP addict
  • *
  • Posts: 4756
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 58.0 Firefox 58.0
    • View Profile
Re: Raytrace
« Reply #52 on: 2018.October.19. 19:40:10 »
Ehhez lenne értelme a kooprocit összebarkácsolni?

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.

Offline Povi

  • EP addict
  • *
  • Posts: 1700
  • 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 #53 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ó
*** Speicherplatz zu klein

Offline nagydani

  • Newbie
  • Posts: 3
  • OS:
  • Linux (Ubuntu) Linux (Ubuntu)
  • Browser:
  • Firefox 63.0 Firefox 63.0
    • View Profile
Re: Raytrace
« Reply #54 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.)

Offline nagydani

  • Newbie
  • Posts: 3
  • OS:
  • Linux (Ubuntu) Linux (Ubuntu)
  • Browser:
  • Firefox 63.0 Firefox 63.0
    • View Profile
Re: Raytrace
« Reply #55 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.

Offline endi

  • EP addict
  • *
  • Posts: 6766
  • 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 #56 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 :)
A diplomás magyar programozó megcsinált egy pacmant egy év alatt, majd lefikázta a világ legjobb játékait. :D

Offline nagydani

  • Newbie
  • Posts: 3
  • OS:
  • Linux (Ubuntu) Linux (Ubuntu)
  • Browser:
  • Firefox 63.0 Firefox 63.0
    • View Profile
Re: Raytrace
« Reply #57 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.

Offline endi

  • EP addict
  • *
  • Posts: 6766
  • 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 #58 on: 2018.November.16. 18:35:47 »
sőt, blenderből lehetne animációt is exportálni
A diplomás magyar programozó megcsinált egy pacmant egy év alatt, majd lefikázta a világ legjobb játékait. :D

Offline Povi

  • EP addict
  • *
  • Posts: 1700
  • Country: hu
  • OS:
  • Linux Linux
  • Browser:
  • Chrome 70.0.3538.77 Chrome 70.0.3538.77
    • View Profile
    • http://povi.fw.hu
*** Speicherplatz zu klein