Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 30.11.2006, 23:20 Titel: Raytracer |
|
|
Tjo, ich programmeire zur Zeit für Informatik einen kleinen Raytracer. Leider muss ich alles in Dlephi machen, naja egal. Hier mal mein bisher bestes Bild:
Jo, man sieht darauf insgesamt 4 Kugeln, dievon einer Lichtquelle beleuchtet werden.
Jede Kugel hat ein unterschiedliches Material (d.h. im Moment besteht das nur aus einer Farbe). Wie man an Gelb/Blau gut sieht, funktioneirt auch der ZBuffer soweit ganz gut.
Die Kugel sind übrigens nur schattiert aber werfen selber noch keinen Schatten. Es wird also abhängig zum Winkel des Lichts die Intensität berechnet. Bis jetzt ist das Licht weiß und hat volel Stärke (d.h. theoretisch könnte ien unkt auf der Kugel ganz weiß werden, wird er aber nie wegen dem Material).
ToDo (in naher Zukunft):
- buntes Licht mit unterschiedlicher Leuchtkraft
- Lichtabschwächung je nach Entfernung
- Reflexion
- Glnzeffekte (d.h. die Lichtquelle wird gespiegelt)
- Ebenen
- mehrere Lichtquellen
- Schatten
Und dann irgendwann halt noch:
- Texturemapping
- Normalmapping
- Transparenz (mit Brechung)
- Aufteilung der Berechnung auf mehrer Computer
- und noch viel mehr klassiche Effekte des Raytracings... _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Mat Senior JLI'ler
Alter: 36 Anmeldedatum: 17.09.2005 Beiträge: 205 Wohnort: Koblenz Medaillen: Keine
|
Verfasst am: 05.12.2006, 21:10 Titel: |
|
|
Finde das erstaunlich, vor allem auch aus der mathematischen Perspektive.
Am Rande:
Die Uni in Saarbrücken hat die letzten 2 Jahre sehr erfolgreich am Raytracing System gearbeitet.
Es ist ihnen Gelungen Framerate von über 5FPS zu bekommen, von einer Dreieckanzahl von über Millionen (AFAIK).
Zur Relation: Vor 2 Jahren hätte man noch 90Minuten für jedes Bild benötigt.
PS: Ich habe zu dem System eine Grundliegende Frage:
Die Performance eines Raytracers ist ja wesentlich besser, als die eines normalen Renderers, wenn sich viele Dreiecke in der Scene befinden (vielleicht kennst das Beispiel, dass Airbus nun erstmals die Boing an einem Stück sehen kann), da nicht jedes Dreieck angefasst werden muss.
Aber: Muss beim Raytracing nicht trotzdem eine Kollisionsabfrage zu jedem Dreieck bestehen ? _________________ - - - - - - - - - - - - - - - - - - - -
-> http://www.sea-productions.de
-> http://www.krawall.de
- - - - - - - - - - - - - - - - - - - - |
|
Nach oben |
|
|
Dr. Best Senior JLI'ler
Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 05.12.2006, 21:30 Titel: |
|
|
Wenn mir da nicht ganz grundlegend was entgangen ist muss beim ray tracing sogar für jeden Pixel eine Kollisionsabfrage mit jedem Dreieck durchgeführt werden. Mit bounding boxen und ähnlichem kann man sich da natürlich einiges sparen, aber es bleibt trotzdem bei einem riesigen Haufen von triangle intersection tests.
Und das ray tracer performancetechnisch besser sind als normale Renderer ist mir erst recht neu . Sie sind zwar gewissermaßen flexibler und machen das realisieren bestimmter Effekte einfacher aber zur Zeit sind normale Renderer eindeutig effizienter. Deshalb benutzt man sie ja auch. In Zukunft wird sich vielleicht irgendwann mal das ray tracing für echtzeit-3D-Anwendungen durchsetzen aber bis dahin müssen die Prozessorleistungen noch ordentlich in die Höhe schießen.
P.S. Eine aktuelle Highend Grafikkarte rechnet dir eine Millionen Dreiecke in ner millisekunde runter. Naja, vielleicht nicht ganz aber mehr als eine hundertstel Sekunde braucht sie sicher nicht. |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 05.12.2006, 21:50 Titel: |
|
|
Mat hat Folgendes geschrieben: | Die Performance eines Raytracers ist ja wesentlich besser, als die eines normalen Renderers, wenn sich viele Dreiecke in der Scene befinden |
Alles ist relativ
Wenn du sehr viele Triangles hast, kommst du mit einem Raytracer vergleichsweise besser weg als mit einem normalen Renderer. (Das gilt allerdings nur, wenn die Anzahl der Triangles wirklich immens groß ist und nicht noch großartig Spiegel im ganzen Raum verteilt sind)
Beim Raytracer ist eben das ausschlaggebende Merkmal die Auflösung. Da kannst du noch so viele Triangles haben, die Renderzeit wird sich kaum vergrößern. Beim normalen Renderer ist ausschlaggebend, wie viele Triangles du hast, egal bei welcher Auflösung. Es stimmt wohl, dass man hier jedes Dreieck nur einmal "anfassen" muss, dafür sind aber die Rechnungen dafür recht komplex. Beim Raytracer musst du zwar die Dreiecke mehrmals überprüfen(für jeden Pixel), allerdings liegt ja auf der Hand, dass die Darstellung hier wesentlich schneller ausfällt (hier muss man nur die Pixelfarbe setzen). Ich denke, dass die Berechnungen eines normalen Renderers für die Darstellung eines Dreiecks komplexer sind als die Rechnung für Schnittpunkt zw. Dreieck u. Gerade. _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Mat Senior JLI'ler
Alter: 36 Anmeldedatum: 17.09.2005 Beiträge: 205 Wohnort: Koblenz Medaillen: Keine
|
Verfasst am: 05.12.2006, 22:00 Titel: |
|
|
@Dr.Best:
Zitat: |
In Zukunft wird sich vielleicht irgendwann mal das ray tracing für echtzeit-3D-Anwendungen durchsetzen aber bis dahin müssen die Prozessorleistungen noch ordentlich in die Höhe schießen |
Wird schon heute viel Verwendet. Die Autoindustrie spart mit Raytracern Millionen!
Früher musste man (weil nicht darstellbar) sehr viele Prototypen entwickeln, da man nie abschätzen konnte, wie genau die Reflektoren eines Autos aussehen werden.
So auch bei dem Boing-Beispiel.
Eine Boing besteht aus einer Unzahl von Dreiecken. Nur mit Raytracern kann man eine komplette Boing darstellen, ein normaler Renderer hat sich da tot gerendert
@The Lord of Programming:
Hmm, stimmt daher könnte der (im "Spezialfall") Auftretende Geschwindigkeitsvorteil kommen. Mir wurde (von einem Prof.) mal erklärt, das man garnicht erst an jedes Dreieck ran muss, wobei mir das sehr unwahrscheinlich / nicht möglich vorkam. _________________ - - - - - - - - - - - - - - - - - - - -
-> http://www.sea-productions.de
-> http://www.krawall.de
- - - - - - - - - - - - - - - - - - - - |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 05.12.2006, 22:05 Titel: |
|
|
Hm, ich weiß nicht so ganz. Ich würde schon sagen, das die Performanc emit der Anzahl der Objekten sinkt, weil ich jetzt wirklich jedes einzelne teste. Ich hab mir halt gedacht, bei Delphi hat es keinen Sinn auf Speed zu gehen, und darum nur einfache Mathematik eingesetzt.
Ich meine, klar das Clipping entfällt, also du zeichnest halt echt nur die Pixel die Sichtbar sind. Ich machs halt so, das ich erst zu jedem Objekt die Schnittpunktentfernung berechne, und das nähste speichere. Und erst dann wird davon die Farbe berechnet.
Naja, hier mal ein enueres Bild, mit Schatten und Ebene(n):
_________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
PeaceKiller JLI Master
Alter: 35 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 06.12.2006, 13:58 Titel: |
|
|
Mat hat Folgendes geschrieben: | @Dr.Best:
Zitat: |
In Zukunft wird sich vielleicht irgendwann mal das ray tracing für echtzeit-3D-Anwendungen durchsetzen aber bis dahin müssen die Prozessorleistungen noch ordentlich in die Höhe schießen |
Wird schon heute viel Verwendet. Die Autoindustrie spart mit Raytracern Millionen!
Früher musste man (weil nicht darstellbar) sehr viele Prototypen entwickeln, da man nie abschätzen konnte, wie genau die Reflektoren eines Autos aussehen werden |
Link? _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
|
manu Super JLI'ler
Alter: 35 Anmeldedatum: 09.03.2006 Beiträge: 327 Wohnort: allgäu (DE) Medaillen: Keine
|
|
Nach oben |
|
|
Mat Senior JLI'ler
Alter: 36 Anmeldedatum: 17.09.2005 Beiträge: 205 Wohnort: Koblenz Medaillen: Keine
|
Verfasst am: 06.12.2006, 17:40 Titel: |
|
|
@manu:
Danke
@jonathan:
Wie lange dauert es eigendlich bei deiner Software, bis ein Bild fertig ist ? _________________ - - - - - - - - - - - - - - - - - - - -
-> http://www.sea-productions.de
-> http://www.krawall.de
- - - - - - - - - - - - - - - - - - - - |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 06.12.2006, 17:42 Titel: |
|
|
ka, die Größe bei dem Bild waren so ich galbu 3-5 Sekunden oder so. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Otscho Super JLI'ler
Alter: 36 Anmeldedatum: 31.08.2006 Beiträge: 338 Wohnort: Gummibären-Gasse Medaillen: Keine
|
Verfasst am: 07.12.2006, 16:50 Titel: |
|
|
raytracing bedeutet doch, dass du jeden Pixel selber "per Hand" berechnest und es nicht etwa DirectX überlässt. Ich habe das auch mal mit Java ausprobiert und bei mir ist es passiert, dass runde Objekte, also hauptsächlich Kugeln etwas verzerrt dargestellt wurden, wenn sie sich nicht im Zentrum das Bildes befanden.Kann es sein, dass es bei deiner roten Kugel auch ein wenig passiert ist ? So von der Mitte bis in die linke obere Ecke. Weiß jemand zufällig warum sowas öfters passiert ? |
|
Nach oben |
|
|
Maxim Senior JLI'ler
Anmeldedatum: 28.03.2004 Beiträge: 249
Medaillen: Keine
|
Verfasst am: 07.12.2006, 16:58 Titel: |
|
|
vielleicht optische täuschung |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 07.12.2006, 17:44 Titel: |
|
|
hm, ich hab ein wenig in Paitn experimentiert. Ich dneke es könnte ganz einfach an der Perspektivischen darstellung liegen, oder? Bei einer orthogonalen Projektion müsste das dann ja richtig sein.
Den ich kann mir nicht vorstellen, das alles so richtig aussieht, und tortzdme ein so Minifehelr drinne ist, der nur etwas verzerrt. Vor allen weil du ja das selbe ganz anders gemacht hast. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 07.12.2006, 18:02 Titel: |
|
|
Hat sicher was mit der Brennweite der Camera zu tun, evtl ist diese zu hoch gewählt. Jonathan hat dies ja schon erwähnt, liegt an der perspektivieschen Darstellung. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
Dr. Best Senior JLI'ler
Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 07.12.2006, 18:29 Titel: |
|
|
Könnte es vielleicht sein, dass irgendwas mit der Berechnung der Rays für die Pixel nicht so ganz stimmt? So klein ist die Abweichung ja garnichtmal (hab's auch mal ausprobiert) und ich glaube eine Kugel müsste auch bei einer perspektivischen Projektion immer zu einem Kreis werden.
O. b. d. A. - Ohne besonders durchdachte Argumente . |
|
Nach oben |
|
|
|