[Projekt] GPU Pathtracer

Hier könnt ihr euch selbst, eure Homepage, euren Entwicklerstammtisch, Termine oder eure Projekte vorstellen.
Forumsregeln
Bitte Präfixe benutzen. Das Präfix "[Projekt]" bewirkt die Aufnahme von Bildern aus den Beiträgen des Themenerstellers in den Showroom. Alle Bilder aus dem Thema Showroom erscheinen ebenfalls im Showroom auf der Frontpage. Es werden nur Bilder berücksichtigt, die entweder mit dem attachement- oder dem img-BBCode im Beitrag angezeigt werden.

Die Bildersammelfunktion muss manuell ausgeführt werden, die URL dazu und weitere Details zum Showroom sind hier zu finden.

This forum is primarily intended for German-language video game developers. Please don't post promotional information targeted at end users.
Benutzeravatar
Zudomon
Establishment
Beiträge: 2259
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: [Projekt] GPU Pathtracer

Beitrag von Zudomon »

Krishty hat geschrieben:Fies. Aber es sieht jetzt sehr gut aus!
Danke! :D

Übrigens wird die Energie pro Iteration mit 0.8 multipliziert, um eine natürliche Abnahme zu simulieren. Also weil ja selbst weiße Flächen Licht schlucken. Nehme ich dieses raus, dann erhalte ich auch Fireflies, wenn ich nicht die Anzahl der Lichtpfade beschränke. Also mit der RGBA8 Textur könnte man die Fireflies dennoch vermeiden, wenn man nur eine geringe Pfadtiefe hat. Wollte ich der Vollständigkeit halber erwähnen.
Hinterher wird die Pfadtiefe sowieso beschränkt, da der Unterschied sehr gering wird in großer Tiefe.

Ich glaube, die Bilder hatte ich nur auf FB gepostet, dann hole ich das hier noch nach...

Von links nach rechts nimmt die Anzahl der Lichtbounces zu. Man sieht, gerade wenn alles weiß ist, sieht man bis in hohe Tiefen noch Veränderung. Texturen die umso dunkler sind, spielen einem da sehr in die Hände. So würde ich sagen, bei dem Einsatz mit dunklen Gegenständen sind nur 3 Lichtbounces wirklich merklich.

15.png
16.png
Zuletzt geändert von Zudomon am 29.07.2016, 03:04, insgesamt 2-mal geändert.
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt] GPU Pathtracer

Beitrag von Krishty »

Zudomon hat geschrieben:Übrigens wird die Energie pro Iteration mit 0.8 multipliziert, um eine natürliche Abnahme zu simulieren. Also weil ja selbst weiße Flächen Licht schlucken.
Was du da simulierst ist Albedo, und die sollte man besser per Textur einstellen können. Weil z.B. das Weiß eines Buches nur irgendwo bei 0.6 liegt; das Weiß von frisch gefallenem Schnee bei 0.9 (siehe Artikel). Mit Schwarz verhält es sich ähnlich; Null Reflexion gibt es in der Natur nicht. Damit du nicht hinterher Probleme bekommst, wenn du z.B. Buchtexturen und Schneetexturen gleichzeitig darstellst, würde ich es -- wie gesagt -- zu den Textureigenschaften oder ins Material schieben statt es global zu definieren.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Zudomon
Establishment
Beiträge: 2259
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: [Projekt] GPU Pathtracer

Beitrag von Zudomon »

Krishty hat geschrieben:
Zudomon hat geschrieben:Übrigens wird die Energie pro Iteration mit 0.8 multipliziert, um eine natürliche Abnahme zu simulieren. Also weil ja selbst weiße Flächen Licht schlucken.
Was du da simulierst ist Albedo, und die sollte man besser per Textur einstellen können. Weil z.B. das Weiß eines Buches nur irgendwo bei 0.6 liegt; das Weiß von frisch gefallenem Schnee bei 0.9 (siehe Artikel). Mit Schwarz verhält es sich ähnlich; Null Reflexion gibt es in der Natur nicht. Damit du nicht hinterher Probleme bekommst, wenn du z.B. Buchtexturen und Schneetexturen gleichzeitig darstellst, würde ich es -- wie gesagt -- zu den Textureigenschaften oder ins Material schieben statt es global zu definieren.
Aber sollte man das nicht global schon auf den richtigen Wertebereich einschränken? Z.B. dann 0.01 - 0.9. So wie man DeGamma auch nicht direkt in die Texturen speichert, weil es sonst weniger Bandbreite hat. Aber prinzipiell war das nur ein Quick&Dirty Hack.
Benutzeravatar
Zudomon
Establishment
Beiträge: 2259
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: [Projekt] GPU Pathtracer

Beitrag von Zudomon »

Sooo, hier noch ein Video von dem, woran ich in den letzten Tagen gearbeitet habe.

Das Bild wird hier per Rasterizing auf 1000x800 gerendert, die Schatten dabei geraytraced. Außerdem wird ein Pathtracing Bild in 250x200 berechnet, welches dann geupsampled und geblurred wird unter Berücksichtigung des Abstandes zur Kamera. Die Normalen sollten auch noch beachtet werden, was bisher nicht implementiert ist, damit das Bild nicht so verwaschen wird. In dem Pathtracing Bild werden primärer und sekundärer Light Bounce berechnet.
Es läuft doch recht bescheiden, aber ich wollte mal sehen, wie so eine Screen Space Variante wirkt. Aber vielleicht ist es besser, die Sachen doch per Lightmaps zu cachen.

[youtube]oOWV7_N3oFE[/youtube]
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt] GPU Pathtracer

Beitrag von Krishty »

Zudomon hat geschrieben:Aber sollte man das nicht global schon auf den richtigen Wertebereich einschränken? Z.B. dann 0.01 - 0.9. So wie man DeGamma auch nicht direkt in die Texturen speichert, weil es sonst weniger Bandbreite hat.
Selbstverständlich speicherst du in Texturen den Farbraum -- und zwar implizit über das Format, in dem du sie definierst (DXGI...B8G8R8A8_UNORM vs. DXGI...B8G8R8A8_UNORM_SRGB), und dieses Format ist den Texturdateien üblicherweise mitgegeben.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Schrompf
Moderator
Beiträge: 5047
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: [Projekt] GPU Pathtracer

Beitrag von Schrompf »

Krishty hat geschrieben:
Schrompf hat geschrieben:Das 1/d² gilt doch nur für Punktlichtquellen. Bei echten Lichtquellen mit Ausdehnung ist bei irgendnem d Schluss.
Öhm ... nein? Ein Photon hat kein Verfallsdatum; es bewegt sich so lange fort, bis irgendwas im Weg ist, das es stoppt.
Neee, sorry. Ich meinte damit "Man kann nicht beliebig nah an ne Lichtquelle ran". Das 1 / d² gilt in der echten Welt nur für den Fernbereich. Je näher man der Lichtquelle kommt, desto mehr wirkt deren Form. Und die einfachste Methode, das umzusetzen, wäre zum Beispiel ein 1 / max(d, 0.1)²
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
scheichs
Establishment
Beiträge: 893
Registriert: 28.07.2010, 20:18

Re: [Projekt] GPU Pathtracer

Beitrag von scheichs »

Also ich find das Ergebnis in jedem Fall schon mal ziemlich eindrucksvoll und auch den Ansatz die verschiedenen Rendertechniken zu mixen is reizvoll. Aber läuft man nicht im worst case eh immer in ein Raytracing/Pathtracing-only Szenario hinein? Wenn man z.B. Spiegelungen/Brechungen drin hat und mit der Kamera an ein Objekt dann rangeht bleibt doch eh nur noch die teuere Rendertechnik übrig. In Filmen kann man so vorgehen weil man average case halt 90% "billig" rendern kann, bei Spielen kann man das halt nicht garantieren.
Benutzeravatar
Zudomon
Establishment
Beiträge: 2259
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: [Projekt] GPU Pathtracer

Beitrag von Zudomon »

Schrompf hat geschrieben:wäre zum Beispiel ein 1 / max(d, 0.1)²
Die Formal sieht gut aus... ich glaube, so werde ich das dann auch machen!
scheichs hat geschrieben:Also ich find das Ergebnis in jedem Fall schon mal ziemlich eindrucksvoll und auch den Ansatz die verschiedenen Rendertechniken zu mixen is reizvoll. Aber läuft man nicht im worst case eh immer in ein Raytracing/Pathtracing-only Szenario hinein? Wenn man z.B. Spiegelungen/Brechungen drin hat und mit der Kamera an ein Objekt dann rangeht bleibt doch eh nur noch die teuere Rendertechnik übrig. In Filmen kann man so vorgehen weil man average case halt 90% "billig" rendern kann, bei Spielen kann man das halt nicht garantieren.
Ich bin mir auf jeden Fall noch extrem unschlüssig, in welche Richtung das überhaupt alles geht. Deswegen probiere ich erst einmal grob herum. Meiner Meinung nach ist dieses Screen Space rauschen unaktzeptabel. So extrem viele Möglichkeiten gibt es letztendlich auch nicht.
Pathtracing oder Rasterizing. Beim Rasterizing ist man ja relativ eingeschränkt, was die flexibilität angeht. Da kann man ja letztendlich nur Primärstrahl vernünftig bearbeiten. Fürs Pathtracing gibt es verschiedene Ansätze, es zu beschleunigen, nachzuarbeiten usw. Letztendlich läuft es aber darauf hinaus, dass man entweder im Screen Space berechnet, so wie es üblich ist, oder eben im Worldspace... entweder durch Lightmaps oder durch eine Art Grid struktur wie z.B. die Voxel GI Ansätze. Aber wie du schon sagst, für Spiegelungen/Brechungen bleibt dann nur das aufwändige Screenspace... ob man da auch z.B. per Lightmaptexel rendern könnte weiß ich nicht... wenn es sich pro Frame updaten könnte und auch höher aufgelöst ist, könnte es eventuell auch per Texel gehen.
Die große Frage ist auch, ob man nicht durch (was ich bisher aber noch nicht habe) sinnvollen durchwandern der Beschleinigungsstruktur auch Occlusion Culling implementieren kann und ob es dann nicht auch einen Punkt gibt, wo die reine Anzahl der Dreiecke vielleicht durch Path tracing schneller berechnet wird, ist auch so ne Frage.

Das Hauptproblem ist wohl, was Geschwindigkeit angeht, auch vor allem durch zwei Punkte gegeben:
Im Shader wird die Beschleinigungsstruktur traversiert, wobei dann manche Pixel direkt durch sind, andere sehr tief traversieren müssen. Dadurch werden die Threads insgesamt schlecht ausgelastet. Zweiter Punkt ist, dass die Szene und Texturen komplett im Speicher liegen müssen. Was bei der kleinen Szene noch kein Problem ist, aber zum Problem wird es dadurch, dass jeder Pixel ziemlich Random die Beschleunigungsstruktur, die Dreiecksdaten und die Texturen addressiert... das macht jede Form von Caching zunichte. Und ich habe keine Idee bisher, wie ich das verbessern kann, zumal ja nach dem Primärstrahl in jede Richtung gefeuert wird und absichtlich noch random, damit man durch das Rauschen noch eine gewisse Qualitätssteigerung hat, weil leichtes rauschen akzeptiert man eher, als bandings.
Was noch erschwerend dazu kommt, dass bei einer Diffusen Oberfläche ja direkt das Licht berechnet wird, also kommt noch ein Schattentest dazu, also nochmal Beschleunigungsstruktur iterieren.
Benutzeravatar
Jonathan
Establishment
Beiträge: 2545
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: [Projekt] GPU Pathtracer

Beitrag von Jonathan »

Zudomon hat geschrieben:
marcgfx hat geschrieben: So ganz verstehe ich das Phänomen doch nicht. Also mal angenommen, einige Pixel haben halt extreme Helligkeit, dann doch nur wirklich da, wo das Licht extrem nah an der Fläche ist. Warum behalten denn diese überhellen Pfade ihre Helligkeit? Also was ich meine ist, warum nimmt das Licht von der Lichtquelle zur Oberfläche quadratisch ab? Wenn ich einen Punkt im Raum betrachte, dann hätte dieser doch die Gesamtlänge über die Bounces hinweg die so weit von der Lichtquelle ist, dass es zu dieser Überstrahlung doch gar nicht mehr kommen dürfte.
Ich versuche das mal ein bisschen zu erklären:

Die Frage nach dem 'Wieso sollte sich die Helligkeit überhaupt ändern' hört sich eigentlich ganz vernünftig an. Lustigerweise kann man sie 1zu1 auf Normalvektoren übertragen: 'Licht wird doch an genau diesen einem Punkt reflektiert, wieso sollte die Umgebung, d.h. die Ausrichtung der Fläche, d.h. der Normalvektor überhaupt eine Rolle spielen?'

Ich denke, die Antwort ist, dass du keine Punkte betrachtest, sondern infinitesimal kleine Flächen; das ist ein wichtiger Unterschied. Letztendlich willst du doch wissen, wie hell dein Pixel ist. Eigentlich müsstest du also die Fläche deines Pixels in die Szene projizieren und die Fragen, wie viel Licht auf diese projizierte Fläche fällt. Damit hast du dein Problem kein Stück vereinfacht, aber du kannst es zum Beispiel tun in dem du sagst, dass du nur die Helligkeit vom Mittelpunkt dieser Fläche nimmst und mit der Flächengröße multiplizierst. Aber wie man schon beim Lesen merkt, passen die Einheiten überhaupt nicht, man muss also die Helligkeit pro Fläche an diesem Punkt mit der Flächengröße multiplizieren. Und wenn man schon mit Einheiten rumspielt, kann man eigentlich gleich auch physikalisch korrekt werden und statt Helligkeit in Watt (Lichtenergie pro Zeit) ausdrücken.

Natürlich ist es gut, den Pixel weiter zu unterteilen und mehrere Strahlen zu haben, das Prinzip bleibt das selbe. Wichtig ist aber, dass jeder Strahl nach wie vor eine 'Dicke' hat. Wenn man anfängt wirklich einzelne Punkte zu sampeln, hat man wohl so etwas wie eine Nullmenge, die beim Integrieren ein Gewicht von 0 hat und somit das Ergebnis nicht beeinflusst. Selbst wenn du unendlich viele hättest, würdest du 0 mit unendlich multiplizieren - dafür braucht man einen vernünftigen Grenzwertprozess, und das ist genau das, worüber ich oben gesprochen habe.

Sehr deutlich wird das Konzept übrigens bei Ray Differentials, wo die Strahlengröße explizit modelliert wird. Das dient in diesem Falle aber nur dazu, zu wissen wie groß der Fußabdruck des Pixels auf dem getroffenen Objekt ist, um entscheiden zu können, wie man die Textur sampelt (welches Mip-Level man nimmt). Normalerweise würde man das ja über die Entfernung machen, aber wie man an den Bildern schon sieht, geht es vor allen Dingen um Linsen: Etwas kann groß aussehen und trotzdem weit weg sein.

Und falls du dich jetzt noch fragst, warum deine Bilder nicht komplett kaputt aussehen, obwohl du nie irgendetwas mit Strahlendicke beachtet hast (denn bei perspektivischen Kameras werden die ja offensichtlich mit jedem Meter dicker): Man kann (in Näherung) das beleuchtete Objekt als Flächenlichtquelle sehen, dass Licht zurück zur Kamera reflektiert. Je weiter das Objekt weg ist, desto größer ist der projizierte Pixel darauf (-> mehr Licht), aber je weiter das Objekt weg ist, desto mehr nimmt die Lichtstärke mit der Entfernung ab (-> weniger Licht), eben genau die quadratische Abnahme mit der wir angefangen haben. Beide Effekte heben sich genau auf, und deshalb sehen die Bilder richtig aus. Ändert aber nichts an der Tatsache, dass du am Objekt die Lichtenergie pro Fläche und nicht 'in diesen einem Punkt' berechnen musst.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Jonathan
Establishment
Beiträge: 2545
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: [Projekt] GPU Pathtracer

Beitrag von Jonathan »

Schrompf hat geschrieben:
Krishty hat geschrieben:
Schrompf hat geschrieben:Das 1/d² gilt doch nur für Punktlichtquellen. Bei echten Lichtquellen mit Ausdehnung ist bei irgendnem d Schluss.
Öhm ... nein? Ein Photon hat kein Verfallsdatum; es bewegt sich so lange fort, bis irgendwas im Weg ist, das es stoppt.
Neee, sorry. Ich meinte damit "Man kann nicht beliebig nah an ne Lichtquelle ran". Das 1 / d² gilt in der echten Welt nur für den Fernbereich. Je näher man der Lichtquelle kommt, desto mehr wirkt deren Form. Und die einfachste Methode, das umzusetzen, wäre zum Beispiel ein 1 / max(d, 0.1)²
Ich denke, wie es eigentlich funktioniert ist ungefähr so (sollte man vermutlich nochmal mathematisch präzise durchrechnen):

Du hast eine Lichtquelle, die eine Gesamtenergie (wir wollen es nicht zeitlich aufgelöst betrachten, also ist die Einheit für Energie für uns Watt und nicht Joule) hat. Mal angenommen, sie verteilt diese Energie gleichmäßig in jede Richtung, wie hell (wie viel Energie bekommt es ab) ist dann ein Objekt? Man projiziert es auf die Hemisphäre der Lichtquelle und misst den Raumwinkel. In anderen Worten, wenn das Objekt 10% vom Sichtfeld des Lichtest abdeckt, sollte auch 10% des Lichtes auf das Objekt fallen (wir nehmen ja an, dass jede Richtung gleichmäßig ist).
Wenn man jetzt die Perspektive rumdreht (was sinnvoll ist, aber ich weiß gerade nicht, wie man das mathematisch sauber legitimiert), kann man sich fragen: Wie viel Licht pro Fläche bekomme ich ab? Die Antwort ist: So viel wie die Lichtquelle groß aussieht. Wenn die Sonne (oder sagen wir die Hälfte von der Sonne, die ich sehen könnte) so groß ist, dass sie mein halbes Sichtfeld ausfüllt, fülle ich (in Näherung) auch die Hälfte ihres Sichtfeldes aus und bekomme die Hälfte ihrer Energie. Das schöne ist, dass man damit direkt auch noch Schatten erschlagen hat: Ist die Sonne verdeckt, ist der sichtbare Teil in mein Sichtfeld projiziert 0, ist die Sonne halb verdeckt (und ich bin im Halbschatten), ist die Lichtmenge halb so groß, als wäre sie überhaupt nicht verdeckt.
Wichtig ist aber vor allen Dingen, dass die Lichtquelle niemals mehr als 100% meines Sichtfeldes abdecken kann. Ein Objekt kann also niemals und unter gar keinen Umständen heller aussehen, als die Lichtquelle selber. Auch nicht, wenn es eine Lupe ist. An diesem Zeitpunkt könnte man eigentlich diesen schönen Artikel lesen (es geht darum, ob man mit einer großen Lupe auch mit Mondlicht statt Sonnenlicht ein Feuer anzünden kann. Das Ergebnis geht sehr stark in die Richtung meiner Ausführungen).

Eigentlich müsste man dazu noch ein paar bunte Bilder malen. Mal sehen, ob ich darauf auch noch Lust habe. Und man müsste vor allen Dingen eine vernünftige Formel herleiten, mit der man es berechnen kann. Ich bin mir aber relativ sicher, dass es auf etwas wie 1/(d+x)^2 hinauslaufen wird, wobei x die Größe der Lichtquelle ist. Die Formel erscheint mir sinnvoll, weil sie auf weite Entfernung ungefähr quadratisch abnimmt, und auf kurze Entfernung langsam gegen ein Maximum konvergiert, was beides wichtige Eigenschaften sind, die man in der Natur beobachtet.


Wenn man jetzt die Idee mit dem projizieren auf Punktlichter anwendet, stellt man fest, dass man wieder mit 0en arbeitet und kein sinnvolles Ergebnis bekommt (die Lichtquelle sieht immer unendlich klein aus). Aber seien wir mal ehrlich, ein unendlich kleiner Punkt mit einer endlichen Energiemenge bedeutet eine unendliche Energiedichte und man will einfach keine unendliche Energiedichte in seiner Szene haben :D. Man hat also eigentlich immer nur sehr kleine Flächenlichter.


Noch was schönes: Flächen die schräg zur Lichtquelle stehen, sehen von der Lichtquelle aus kleiner aus und sind damit dunkler. Nach dem gleichen Prinzip strahlt eine flache Flächenlichtquelle nach unten die meiste Energie ab und zu den Seiten weniger (und das obwohl jeder Punkt auf ihr in jede Richtung leuchtet). Würde man sie einfach durch ein Array von Punktlichter simulieren, hätte man ein anderes (und falsches) Ergebnis.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Zudomon
Establishment
Beiträge: 2259
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: [Projekt] GPU Pathtracer

Beitrag von Zudomon »

Danke für die lange und ausführliche Antwort. Ich glaube auch, das meiste Verstanden zu haben. Und ich finde es gut, dass du hier keine Formeln angibst, weil ich damit fast nie was anfangen kann. Bilder sind gut, aber Formeln....
Da ich sowieso gerne mal Bidirektionales Pathtracing probieren würde, kommt mir deine Erklärung auch sehr entgegen, weil ich da auch schon auf Energiedichten etc. gestoßen bin. :)
Benutzeravatar
Zudomon
Establishment
Beiträge: 2259
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: [Projekt] GPU Pathtracer

Beitrag von Zudomon »

Jonathan hat geschrieben:An diesem Zeitpunkt könnte man eigentlich diesen schönen Artikel lesen (es geht darum, ob man mit einer großen Lupe auch mit Mondlicht statt Sonnenlicht ein Feuer anzünden kann. Das Ergebnis geht sehr stark in die Richtung meiner Ausführungen).
Hab mir das jetzt auch mal durchgelesen und muss sagen, das versteh ich dann doch nicht so ganz. :? Also man kann nicht mehr Wärme erzeugen, als ausgestrahlt wird, wie du ja auch ausführst, weil sonst ja auch mehr Energie entstehen würde, als da ist. Aber das man Strahlen nicht bündeln kann versteh ich nicht wirklich. Wenn ich eine Lupe nehme kann ich doch mit den Sonnenstrahlen auch Feuer machen im Brennpunkt. Also warum wird es im Brennpunkt denn heiß, wenn nicht durch Bündelung der Strahlen?
Alexander Kornrumpf
Moderator
Beiträge: 2138
Registriert: 25.02.2009, 13:37

Re: [Projekt] GPU Pathtracer

Beitrag von Alexander Kornrumpf »

Zudomon hat geschrieben:
Jonathan hat geschrieben:An diesem Zeitpunkt könnte man eigentlich diesen schönen Artikel lesen (es geht darum, ob man mit einer großen Lupe auch mit Mondlicht statt Sonnenlicht ein Feuer anzünden kann. Das Ergebnis geht sehr stark in die Richtung meiner Ausführungen).
Hab mir das jetzt auch mal durchgelesen und muss sagen, das versteh ich dann doch nicht so ganz. :? Also man kann nicht mehr Wärme erzeugen, als ausgestrahlt wird, wie du ja auch ausführst, weil sonst ja auch mehr Energie entstehen würde, als da ist. Aber das man Strahlen nicht bündeln kann versteh ich nicht wirklich. Wenn ich eine Lupe nehme kann ich doch mit den Sonnenstrahlen auch Feuer machen im Brennpunkt. Also warum wird es im Brennpunkt denn heiß, wenn nicht durch Bündelung der Strahlen?
Erklärt er doch: Der Brennpunkt ist nicht wirklich ein Punkt.
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [Projekt] GPU Pathtracer

Beitrag von Krishty »

Jonathan hat geschrieben:An diesem Zeitpunkt könnte man eigentlich diesen schönen Artikel lesen (es geht darum, ob man mit einer großen Lupe auch mit Mondlicht statt Sonnenlicht ein Feuer anzünden kann. Das Ergebnis geht sehr stark in die Richtung meiner Ausführungen).
Danke dafür :)
Zudomon hat geschrieben:Aber das man Strahlen nicht bündeln kann versteh ich nicht wirklich. Wenn ich eine Lupe nehme kann ich doch mit den Sonnenstrahlen auch Feuer machen im Brennpunkt. Also warum wird es im Brennpunkt denn heiß, wenn nicht durch Bündelung der Strahlen?
Er wird heiß, aber er kann unmöglich heißer werden als die Oberfläche der Sonne. Ebenso wird der Brennpunkt die sehr kleine brennende Fläche hell, aber sie kann unmöglich heller werden als die Oberfläche der Sonne.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Zudomon
Establishment
Beiträge: 2259
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: [Projekt] GPU Pathtracer

Beitrag von Zudomon »

Alexander Kornrumpf hat geschrieben:
Zudomon hat geschrieben:
Jonathan hat geschrieben:An diesem Zeitpunkt könnte man eigentlich diesen schönen Artikel lesen (es geht darum, ob man mit einer großen Lupe auch mit Mondlicht statt Sonnenlicht ein Feuer anzünden kann. Das Ergebnis geht sehr stark in die Richtung meiner Ausführungen).
Hab mir das jetzt auch mal durchgelesen und muss sagen, das versteh ich dann doch nicht so ganz. :? Also man kann nicht mehr Wärme erzeugen, als ausgestrahlt wird, wie du ja auch ausführst, weil sonst ja auch mehr Energie entstehen würde, als da ist. Aber das man Strahlen nicht bündeln kann versteh ich nicht wirklich. Wenn ich eine Lupe nehme kann ich doch mit den Sonnenstrahlen auch Feuer machen im Brennpunkt. Also warum wird es im Brennpunkt denn heiß, wenn nicht durch Bündelung der Strahlen?
Erklärt er doch: Der Brennpunkt ist nicht wirklich ein Punkt.
Es wird kein Punkt, aber die Energiedichte nimmt doch zu. Fakt ist doch, halte ich ein Blatt in die Sonne, passiert nichts. Halte ich eine Lupe davor, im richtigen Abstand, fängt es an zu brennen. Also wird es doch an dieser Stelle auch heißer. Vielleicht interpretiere ich das im Artikel auch nur etwas falsch. Vielleicht kann man also mit der Riesenlupe mit Mondlicht kein Feuer entfachen, aber zum braten würde es reichen.
Benutzeravatar
Jonathan
Establishment
Beiträge: 2545
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: [Projekt] GPU Pathtracer

Beitrag von Jonathan »

Zudomon hat geschrieben:Vielleicht kann man also mit der Riesenlupe mit Mondlicht kein Feuer entfachen, aber zum braten würde es reichen.
Hm, für ein Spiegelei vielleicht. Laut Wikipedia wird der Mond bis zu 130 °C warm.

Der Punkt ist folgender: Es wird zwar immer wärmer, konvergiert aber gegen einen Grenzwert (die Oberflächentemperatur / bzw. Gesamthelligkeit der Lichtquelle). Je näher du an diesem Grenzwert dran bist, desto langsamer näherst du dich ihm an. Aber überschreiten kannst du ihn nie.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Alexander Kornrumpf
Moderator
Beiträge: 2138
Registriert: 25.02.2009, 13:37

Re: [Projekt] GPU Pathtracer

Beitrag von Alexander Kornrumpf »

Zudomon hat geschrieben: Es wird kein Punkt, aber die Energiedichte nimmt doch zu. Fakt ist doch, halte ich ein Blatt in die Sonne, passiert nichts. Halte ich eine Lupe davor, im richtigen Abstand, fängt es an zu brennen. Also wird es doch an dieser Stelle auch heißer. Vielleicht interpretiere ich das im Artikel auch nur etwas falsch. Vielleicht kann man also mit der Riesenlupe mit Mondlicht kein Feuer entfachen, aber zum braten würde es reichen.
Die Erklärung in dem Artikel, wieweit sie stimmt, weiß ich nicht, ist dass es keine Möglichkeit gibt, dass das Abbild eines Punktes wärmer wird als sein Urbild (scheint plausibel) und weiterhin keine Möglichkeit gibt, dass mehr als ein Urbildpunkt auf einen Bildpunkt fällt (scheint auch plausibel). Das Abbild ist also eine Fläche aus Punkten mit maximal Urbildtemparatur und genau das war auch das Urbild. Folglich gibt es keinen Grund anzunehmen, dass sich das Abbild als Ganzes anders verhalten sollte als das Urbild als Ganzes.
Benutzeravatar
Zudomon
Establishment
Beiträge: 2259
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: [Projekt] GPU Pathtracer

Beitrag von Zudomon »

Okay, danke nochmal euch beiden. Im Artikel ist das etwas verwirrend dargestellt. Das nicht mehr Wärme als die Quelle entsteht ist ja eigentlich recht logisch, weil sonst könnte man in der Tat ja durch Linsen Energie erzeugen. Dass das Licht auch nicht auf einen Punkt fokussiert wird, ist eigentlich auch logisch, man kann es nur verdichten oder entdichten. Wobei überlagern ja schon funktionieren sollte mit Spiegeln.
Bei Kaustiken kann man auch immer sehr schön sehen, wie die Energie erhalten bleibt. Wenn man sich den gläsernen Stanford Hasen vorstellt und eine Lichtquelle, so entstehen ja diese Kaustiken... aber der Hase wirft gleichzeitig Schatten... d.h. das Licht, was beim Schatten fehlt steht in der Kaustik. Würde der Hase kaum brechen, dann wäre auch die Kaustik fast die des Schattens. (Ist nur meine Vermutung, also falls es doch ganz anders sein sollte... ;) )
Alexander Kornrumpf
Moderator
Beiträge: 2138
Registriert: 25.02.2009, 13:37

Re: [Projekt] GPU Pathtracer

Beitrag von Alexander Kornrumpf »

Zudomon hat geschrieben: Wobei überlagern ja schon funktionieren sollte mit Spiegeln.
Was soll denn der Unterschied zwischen einer Linse und einem Spiegel sein an der Stelle?
Benutzeravatar
Zudomon
Establishment
Beiträge: 2259
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: [Projekt] GPU Pathtracer

Beitrag von Zudomon »

Alexander Kornrumpf hat geschrieben:
Zudomon hat geschrieben: Wobei überlagern ja schon funktionieren sollte mit Spiegeln.
Was soll denn der Unterschied zwischen einer Linse und einem Spiegel sein an der Stelle?
Das hab ich mich, als ich es geschrieben habe, auch gefragt. Also ob das so stimmt, weiß ich nicht 100%. Aber wenn du mit einem Spiegel Licht umlenkst, dann kannst du es auf jeden Fall überlagern, ich glaube, das nennt sich auch Katakaustik. Aber eine Linse lenkt die Lichtstrahlen eben nur um, so wie es in dem Artikel erklärt wurde. Wobei ich allerdings sagen würde, dass gerade komplexe Objekte, die richtige Kaustiken werfen, auch Licht überlagern können. Also der Artikel will ja sagen, dass man mit der Linse das Licht nicht auf ein Punkt bekommt, sondern nur sehr eng zueinander. Zumindest hab ich es so verstanden. Ich würde sagen, man kann das Licht schon überlagern. Denn noch hat das überlagerte Licht noch eine unterschiedliche Herkunftsrichtung weil eben egal ist, ob man Forward- oder Backward Raytracing macht.
Alexander Kornrumpf
Moderator
Beiträge: 2138
Registriert: 25.02.2009, 13:37

Re: [Projekt] GPU Pathtracer

Beitrag von Alexander Kornrumpf »

Am besten kann man sich das vermutlich mit einem Hohlspiegel vorstellen, wie er in Teleskopen verwendet wird. Der bündelt das Licht auch in einem Brennpunkt, für den das gleiche gilt wie für Brennpunkt einer Linse.
Benutzeravatar
Zudomon
Establishment
Beiträge: 2259
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: [Projekt] GPU Pathtracer

Beitrag von Zudomon »

Und wieder ein kleiner Test. Dieses mal wieder reines Raytracing. Allerdings eine Art bidrectionales path tracing ohne Variation per Pixel, deswegen auch wieder bandings statt rauschen.
Man könnte mehrere Iterationen machen, bevor man das Bild anzeigt, aber die Framerate wird endsprechend langsam und man sieht nicht mehr so gut, wie es konvergiert. Von daher in dem Video nur eine Iteration pro Frame.
Auflösung ist wie gehabt 500x400. Zur Zeit gehen nur diffuse Oberflächen und es ist auch nur direktes Licht und ein indirekter Lightbounce zu sehen. Das Licht strahlt nur in eine Richtung.

[youtube]Q4KI8EoL66E[/youtube]
Benutzeravatar
Jonathan
Establishment
Beiträge: 2545
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: [Projekt] GPU Pathtracer

Beitrag von Jonathan »

Naja, Linse und Spiegel ändern beide letztendlich nur die Lichtrichtung und sollten zumindest in diesem Aspekt keinen fundamentalen Unterschied haben.
Der Punkt aus dem Artikel ist aber, dass z.B. die Sonne kein Punkt ist, sondern eine Ausdehnung hat. Man kann Licht, das von einem einzelnen Punkt kommt auf einen anderen Punkt bündeln, aber man kann nicht das Licht von der Sonne auf einen einzelnen Punkt bündeln (weil optische Systeme immer in beide Richtungen funktionieren müssen und man sonst nicht sagen könnte auf welchen Punkt auf der Sonnenoberfläche Licht von dem Punkt an dem alles Licht gebündelt wurde treffen müsste).
Soweit, so gut. Allerdings stellt sich dann natürlich auch irgendwie die Frage, wie klein das Abbild denn werden könnte.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Alexander Kornrumpf
Moderator
Beiträge: 2138
Registriert: 25.02.2009, 13:37

Re: [Projekt] GPU Pathtracer

Beitrag von Alexander Kornrumpf »

Jonathan hat geschrieben: Soweit, so gut. Allerdings stellt sich dann natürlich auch irgendwie die Frage, wie klein das Abbild denn werden könnte.
Wofür ist das relevant?
Benutzeravatar
Jonathan
Establishment
Beiträge: 2545
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: [Projekt] GPU Pathtracer

Beitrag von Jonathan »

Naja, weil wenn man es beliebig klein (nur nicht punktförmig) machen kann, kann auch die Energiedichte beliebig hoch werden, oder nicht?

http://1.bp.blogspot.com/_uU2cN3XeVDE/T ... C_9244.JPG

Die Linse bündelt quasi das Licht, was auf ihre gesamte Oberfläche fällt, in der Mitte (der Rest der Linse wirft einen Schatten, der so dunkel wie der des Griffes ist). Wenn nun dieser innere Bereich beliebig klein werden könnte, könnte auch die Energiedichte beliebig hoch sein.

Mir scheint es so, als gäbe es bei diesem Problem verschiedene Richtungen aus denen man es angehen kann, die zu verschiedenen Ergebnissen führen. Man müsste da wohl nochmal etwas genauer drüber nachdenken.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Zudomon
Establishment
Beiträge: 2259
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: [Projekt] GPU Pathtracer

Beitrag von Zudomon »

Ich denke Licht kann auf jeden Fall überlagert werden, nur es kann nicht Position und gleichzeitig Richtung überlagert sein... und damit ist es umkehrbar.

Die Oberfläche kann ja vor, hinter, aber auch exakt auf dem Brennpunkt liegen und dann sind alle Strahlen auf jeden Fall auf einem Punkt...

Bild
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

Re: [Projekt] GPU Pathtracer

Beitrag von Spiele Programmierer »

Mir scheint die Skizze für den Rahmen der Diskussion gleich doppelt falsch/verwirrend:
  1. Die Brechung findet nicht in der Mitte statt sondern zweimal am Rand zwischen Glas und Luft.
  2. Das Licht ist niemals perfekt parallel.
Weil jeder Punkt auf der Oberfläche das Licht in unterschiedliche Richtungen wirft, ist es im Prinzip kein Brennpunkt sondern eine Brennebene.
Zuletzt geändert von Spiele Programmierer am 03.08.2016, 19:31, insgesamt 1-mal geändert.
Benutzeravatar
starcow
Establishment
Beiträge: 560
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

Re: [Projekt] GPU Pathtracer

Beitrag von starcow »

Mal eine Laienfrage am Rande:
Ist es möglich, dass du die eigentliche Geometrie ohne Schatten in einer höheren Auflösung berechnen lässt, und dann die hoch skalierten RayTracing-Shadows darüber blendest?
Quasi ne dynamische Lightmap?

Gruss starcow
Freelancer 3D- und 2D-Grafik
mischaschaub.com
Benutzeravatar
Zudomon
Establishment
Beiträge: 2259
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: [Projekt] GPU Pathtracer

Beitrag von Zudomon »

Spiele Programmierer hat geschrieben:Mir scheint die Skizze für den Rahmen der Diskussion ist gleich doppelt falsch/verwirrend:
  1. Die Brechung findet nicht in der Mitte statt sondern zweimal am Rand zwischen Glas und Luft.
  2. Das Licht ist niemals perfekt parallel.
Weil jeder Punkt auf der Oberfläche das Licht in unterschiedliche Richtungen wirft, ist es im Prinzip kein Brennpunkt sondern eine Brennebene.
Da geb ich dir Recht... hab da nur flüchtig nach Brennpunkt gesucht weil es mir darum ging, dass es ja schon einen Fokuspunkt gibt... auf den Rest hatte ich nicht geachtet. :?
starcow hat geschrieben:Mal eine Laienfrage am Rande:
Ist es möglich, dass du die eigentliche Geometrie ohne Schatten in einer höheren Auflösung berechnen lässt, und dann die hoch skalierten RayTracing-Shadows darüber blendest?
Quasi ne dynamische Lightmap?

Gruss starcow
Ja, an ähnliches hatte ich gedacht... und im Test #003 hatte ich das ja auch so umgesetzt, nur eben, dass nicht der Schatten hoch skaliert wurde, sondern das indirekte Licht. Direkten Schatten wollte ich auch in halber Auflösung machen, aber für den Test da, wäre mir das zu aufwendig gewesen, sollte aber wohl gehen.
Ne dynamische Lightmap, also ne richtige, fände ich auch nicht verkehrt, der Nachteil ist die Komplexität, aber der Vorteil, dass das ganze nicht im Screenspace statt findet.
scheichs
Establishment
Beiträge: 893
Registriert: 28.07.2010, 20:18

Re: [Projekt] GPU Pathtracer

Beitrag von scheichs »

Weil ichs grade in anderem Zusammnhang gesehen habe: Bilateral Filtering könnte die Lösung sein.

Hier in Zusammenhang mit PathTracing.
[youtube]Ee51bkOlbMw[/youtube]

EDIT: Weil die Seite iwie down is hier noch das Paper dazu : http://www.ece.ucsb.edu/~psen/Papers/Se ... _LoRes.pdf
Antworten