PDA

View Full Version : [FRAGE] - ray tracing


sheepchen
22-10-2008, 20:04
also, ich habe das prinzip vom ray tracing verstanden, ich hänge nur bei der beschleunigung.
habe mir das durch den kopf gehen lassen und verstehe irgendwie nicht, wie da die schittpunktberechnung minimiert wird.

nehmen wir die bounding spheres (objektumgebungen) her:
ich umhülle alle objekte der szene (ist soweit noch klar) und, wenn ein blickstrahl durch ein pixel geschickt wird, sieht man nach, ob es dieses bs trifft oder nicht. je nachdem, geht man weiter (tiefer in der hierarchie).

wenn ich aber einen blickstrahl durch ein pixel schicke und das objekt wird nicht getroffen, dann gibt es doch so oder so keine schnittpunktberechnung. wieso wird das also minimiert?
bezieht sich das vielleicht auf die rekursionstiefe?

oder ist das ganze so gemeint?:
es wird ein blickstrahl durch ein pixel geschickt. damit herausgefunden werden kann, müssen alle schnittpunkte mit den objekten bei diesem strahl getestet werden. das kann eine menge sein. stellt man sich jetzt vor, dass drei objekte irgendwo näher zum betrachter liegen und von einem bs "zusammengefügt" wurden und weiter hinten nocheinmal objekte zu einem anderen bs zusammengefügt wurden - dann geht der strahl da durch und wird nur das näherliegende bs betrachten und nicht weiter. hmmm, ist noch immer nicht ganz klar.

ich stehe da gerade bei dieser simplen sache total an und ich hoffe, dass mir da ganz schnell jemand auf die sprünge helfen kann.

Schakal
22-10-2008, 20:41
Ich glaub so is gemeint (letzer Punkt). Das ist mehr oder weniger was du auch bei Physik in spielen jaten wo zb. versucht wird die Kollisionspunkte zu funden oder auch strahlen Schnittpunkte. Ist natürlich einfacher wenn du erst mal gegen was grobes testes und dann erst die eigentliche Berechnung durchführt. Ich bin jetzt keine Experte in Raytracing, abe obs noch sinnvoll den strahl weiterzuverfolgen hängt wahrscheinlich mit d. anzahl d. lichtquellen objekte und bereits berechnete Schnittpunkte zusammen. Aber das kann dir wahrscheinlich jemand besser erklären.

mfg Schakal

sheepchen
23-10-2008, 20:49
danke dir!
ich glaube auch, dass es das ist. ich nehms einmal einfach an :).

R2D2
24-10-2008, 20:14
beim ray-tracing wird ja normaler weise ein strahl (vom viewing point zu irgendeinem punkt P) mit ALLEN objekten in der szene geschnitten um rauszufinden welche er trifft. wenn man viele objekte hat, kann man sich den aufwand vorstellen...

auf den textblättern ist die beschleunigung eigentlich recht gut erklärt, denke ich:
http://www.cg.tuwien.ac.at/courses/CG/textblaetter/10 Ray Tracing.pdf

hoffe das hilft dir weiter

sheepchen
26-10-2008, 10:49
das textblatt habe ich mir angeschaut und genau da kamen dann die probleme auf :shiner:.

irgendwie kann ich mir nicht vorstellen, dass eine strahl alle objekte in einer szene treffen soll. schließlich geht er sozusagen nur vom größten z-wert bis zum kleinsten durch und damit gibt es nur eine endliche anzahl von objekten, die er schneiden kann. das ist einmal nur der primärstrahl.
bei den sekundärstrahlen hätt ich mir gedacht, dass die rekursionstiefe so oder so vorgegeben ist (habe gelesen, dass sie normalerweise so zwischen 5 und 7 liegt). d.h., dass die auch schon eingeschränkt sind.

hmmm, mein vorstellungsvermögen ist echt nix wert :shiner:

R2D2
26-10-2008, 11:43
also wenn ich dich richtig verstanden hab, schätze ich du hast da einen kleinen denkfehler.
so ein strahl trifft natürlich nicht ALLE objekte in der szene, aber woher soll der algorithmus wissen welche objekte getroffen werden und welche nicht? lösung: er schneidet den strah mit ALLEN objekten. das bedeutet er versucht mit dem strahl und jedem objekt einen schnittpunkt zu brechenen. bei dieser schnittpunkt-berechnung bekommt er für einige objekte einfach kein ergebnis, weil der strahl diese objekte in wirklichkeit nicht berührt.

also wenn ich wissen will ob eine gerade und eine ebene sich berühren, versuch ich die zu schneiden. bekomm ich einen schnittpunkt raus, berühren sie sich, bekomm ich kein ergebnis, weiß ich dass sie einander nicht berühren. genau das wird beim raytracing gemacht.

und bei der beschleunigung wird der strahl erst mal nur mit den umgebungskugeln geschnitten, anstatt mit jedem kleinen polygon. wenn ich da bei einer umgebungskugel keinen schnittpunkt rausbekomm, weiß ich schon mal, dass die polygone die da drin sind nicht mehr beachtet werden müssen, weil der strahl da sowieso dran vorbei geht. wenn ich einen schnittpunkt bekomm, wird der strahl dann mit den nächst kleineren umgebungskugeln, die in der großen liegen, geschnitten und dort wo man schnittpunkte erhält gehts genauso weiter, bis man schließlich die richtigen polygone schneidet. so schneide ich zwar mit mehreren umgebungskugeln, die keine richtigen objekte sind, sondern eben nur ne hilfe für die berechnung, aber ich kann zb ganz am anfang durch den schnitt mit ein paar dieser kugeln gleich mal einen großen teil der polygone ausschließen, anstatt den strahl mit zb 3000 polygonen schneiden zu müssen.

hilft das? :)

sheepchen
27-10-2008, 12:04
das hilft unheimlich! danke, jetzt versteh ichs endlich.
hab da sachen schon als selbstverständlich gesehn, die der algo natürlich nicht so sieht :shiner:

Schakal
03-11-2008, 18:24
Wenn ich mich nicht täusche gibt es aber natürlich Vebesserungen oder vereinfachungen, wo man bestimmte Objekte von d. Schnittberechnung ausnehmen kann (z.B Hinter dem Betrachter or whatever). Kinoqualität ist zwar nicht echtzeittauglich kann sich aber sehen lassen, oder f. Simulationen. Cool ist aber das Intel (warum bloß) Raytracing propagieren will, vor allem wenn Larrabee (wie auch immer d. geschrieben wird) kommt. Daher wurde auch eine Quake 4 Raytracing Version geschrieben und die lief glaube ich auf einem Quad (welchen weiß ich jetzt nicht) in Echtzeit. Aber Rasterung hat halt die Erfahrung, Technik, Tricks und ziemlich gut und hochoptimierete Näherungsalgorithmen.

Nur so am Rande falls wen interessiert.

mfg Schakal