Die Methode des "Resampelns" ist IMHO meistens in Benutzung, so kann man bei 3Ds Max einstellen wie stark er maximal und minimal sampeln soll, dann wird anhand des zu renderenden bildes entschieden wann woviel gesampelt wird,
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Adaptives Supersampling hat er bereits vorher gekonnt - was anders ist, ist daß bei dem beschriebenen Verfahren erst das Bild einmal ohne AA gerendert wird und erst anhand diesen Bildes hochgejagt wird - das ist etwas anders als das übliche stochastische AA - zumindest anders, als wie ich es bislang kannte und gemacht habe. Man kann natürlich die erste Runde auch schon AAliased rechnen lassen, aber das würde dieses Verfahren eher hindern als verbessern.
Na Photonmaps sind Photonenkarten Okay, ich will da etwas mehr verraten. Man kann Licht in vielerlei hinsicht prima als Photonenteilchen beschreiben, wenn man es nicht mit ganz speziellen Situationen zu tun hat, in denen Licht mehr Welle statt Teilchen ist. Also ist es doch naheliegend, solche Photonen zur Bilderzeugung zu simulieren: Jede Lichtquelle sendet nach Leistung Photonen aus, die dann mit den umliegenden Objekten in Wechselwirkung tritt: Photonen können absorbiert, reflektiert oder gebrochen werden und verändern dabei ihren Energiegehalt. Bei der Simulation wird per russisch Roulette entschieden, was passiert (in der gezeigten Szene wird nur absorbiert oder diffus "reflektiert"). Jedes mal, wenn ein Photon auf eine geeignete Oberfläche trifft, wird es (das Photon) in der Photonmap hinterlegt und wenn es nicht absorbiert wird, weiter verfolgt. Wenn alle Lichtquellen genügend Photonen abgegeben haben und diese verfolgt wurden, wird aus der noch völlig unsortierten Photonenkarte ein Binärer Baum erstellt, so daß man Photonen im Raum schnell finden kann (bei vielen Photonen dauert das Baum bauen schnell recht lange. Deutlich länger als das Verfolgen der Photonen an sich). Dann wird der normale Raytracer angeschmissen. Dessen Strahlen treffen wieder auf die Flächen, bei denen in der Photonenkarte entsprechend Photonen hinterlegt wurden. Also geht man in den Baum und sucht diese Photonen, prüft ob die Ausrichtung halbwegs stimmt und errechnet anhand dieser Information die Menge an Licht, die auf die betrachtete Stelle fällt und füttert das Material mit dieser Information, damit es was ordentliches anzeigt (sprich die "tatsächliche" Radianz zurückgibt). Glanzeffekte und Reflexionen werden auf die übliche Weise weiterverfolgt, während der diffuse Anteil eben durch die Photonmap und die dadurch beschriebene direkte und indirekte Beleuchtung berechnet wird.
Wenn man nicht nur diffuse Lichtstrahlen verfolgt, kann man auch in eine seperaten Photonenkarte Kaustiken ablegen und diese später noch verfeinern.
Jedenfalls bekommt man so bereits ganz ansehnliche Bilder. Damit das ganze dann nicht so wild zappelt wie bei mir, kann man dann auch noch ein paar weitere Tricks auffahren und z.B. direktes Licht weiter durch Standard Monte-Carlo-Raytracing berechnen und nur das indirekte Licht in die Photonmap legen oder Photonen nach ihrem Gewicht kategorisieren. Meinem Bild sieht man noch sehr deutlich an, daß derartige Maßnahmen noch nicht stattgefunden haben - es zappelt reichlich wild Ausserdem glaube ich, daß der verwendete Zufallsgenerator sich nicht so verhält wie ich es brauche und hier deshlab evtl. etwas Arbeit angesagt ist - vielleicht haben aber auch meine Photonen noch einen Knacks.
Ach ja... Eine Seltsamkeit bezüglich des Unterschiedes der Bilder ist inzwischen behoben. Die Lichtquelle sendet jetzt dort Photonen aus, wo sie scih tatsächlich befindet und nicht irgendwo anders. Dies erklärt einen großen Teil der Unterschiede zwischen den Bildern aus reinem Raytracing und Photon-Mapping Das gezappel der internsitäten was ja irgendwie mehr nach Perlin-Noise aussieht, wird aber noch ein biserl brauchen
Registriert: Fr Mai 14, 2004 18:56 Beiträge: 804 Wohnort: GER/OBB/TÖL-WOR/Greiling
Sollte es nicht so sein, dass jedes Material eine bestimmte Wellenlänge (bzw. bestimmte Wellenlängenbereiche) zu einem bestimmten Prozentanteil verschluckt? Und das was dann übrig bleibt kommt zum betrachter ins Auge?
Sollte es nicht so sein, dass jedes Material eine bestimmte Wellenlänge (bzw. bestimmte Wellenlängenbereiche) zu einem bestimmten Prozentanteil verschluckt? Und das was dann übrig bleibt kommt zum betrachter ins Auge?
Die Frage ist etwas subtil. Beim Photon-Tracing will man normalerweise, daß sich die Anzahl der Photonen nicht zu hoch ist. Also spielt man anhand des genannten Prozentanteil Russisch Roulette und lässt das Photon Energietechnisch stabil, werfirft aber einfach entsprechend Häufig Photonen, damit sich das wieder ausgleicht. Die Andere möglichkeit die Photonenenergie anzupassen und massenhaft Photonen sammeln ginge natürlich auch. Beim Forward-Raytracing (also von der Lichtquelle zum Betrachter!) macht man es meistens genauso, weil es einfach deutlich schneller ist, aber zum gleichen Ergebnis strebt.
Daran kann man dann den Unterschied zwischen Forward-Raytracing und Photonmapping sehen. Beim Forward tracing versucht man den Strahl bis zum Betrachter zurückzulaufen - was häufig eben nicht klappt und man sehr viel für nichts rechnet. Beim Photonmapping beschisst man die Oberflächen mit Photonen und legt dort die Lichtintensität ab. Anschliessend macht man normales Forward Raytracing und sammelt die Licht-Intentsitäten dabie wieder ein.
Langsam versteh ich deine Kritik am frühen IOTW, aber das kann man ja wiederholen
Was hast Du denn damals erwartet? Daß ich bereits all mein Pulver verschossen habe? Dafür war das Projekt zu dem Zeitpunkt ja schon noch etwas arg jung. Allerdings bin ich am Abarbeiten der Kernfeatures schon recht weit. Glücklicherweise habe ich hier und da unfertige Löcher hinterlassen, die noch gefüllt werden müssen und noch ein paar Dinge, die noch vollständig fehlen: Wird also nicht mehr ewig dauern, bis man mal an eine Beta-Version denken kann. Leider habe ich bislang noch kein Mehrkernsystem auftreiben können, so daß ich mich mal in Sachen parallelem Rendering hätte austoben können - allein daß ich dann nicht immer halbe Ewigkeiten auf etwas anspruchsvollere Ergebnisse warten müsste Der einzige mir bekannte Windows-Rechner an der Uni mit entsprechenden Fähigkeiten scheint ja momentan leider nicht benutzbar zu sein.
Zuletzt geändert von Delphic am So Jul 12, 2009 19:29, insgesamt 1-mal geändert.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7804 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich bin in der AMD Student Taskforce. Aber einen Mehrkernrechner kann ich dir nicht besorgen.
In der Taskforce stehen 2 interessante Maschinchen rum. (3GHz Dual Core mit 2x2GB RAM ) Aber da wirst du wohl nicht rankommen.
Eigentlich sollte dir die Grafische Informatik doch entgegenkommen, bei solchen Projekten. Wenn die was haben kannst du dort mal probieren. Also bei uns würde sich die Professur sicherlich kooperativ zeigen.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Mir ist nur ein geeigneter Rechner an der Uni bekannt auf den auch Studenten Zugriff haben und auf dem gleichzeitig .Net oder oder entsprechendes installiert ist - handelt sich um einen Terminalserver. Früher hatte ich auch mal darauf Zugriff. Jetzt jedenfalls nicht mehr und einen Admin bei der Informatik zu treffen scheint schon nicht ganz einfach zu sein und wenn der sich dann auch noch mit dem Terminalserver auskennt... Wenn ich häufiger dort vorbeikommen könnte, hätt ichs vielleicht igendwann hinbekommen, aber auch mein Bedürfnis meinen Heimweg auf eine Dauer von über 2.5h aufzublähen um vielleicht jemanden zu treffen ist dann doch begrenzt (ein paar mal hab ichs schon probiert, so ist das nicht). Mit e-mail bombardieren hab ich noch nicht getestet, muss ich die Tage mal noch probieren, ist vielleicht ne gute Idee... Die Grafiker nochmal extra fragen hab ich nicht probiert, imho ist da auch nichts entsprechendes installiert, aber werd mich da nochmal erkundigen. Sonst bleibt das gute Stück halt nicht-parallel bis ich mal wieder ein paar Euros zuviel hab - etwas früher könnte ich meinem Dad für seinen nächsten Rechner ne etwas dickere CPU spendieren. Naja, mal sehen, welche Möglichkeiten sich da noch so auftun.
Also ich hab mich mal bemüht es Mehrkerntauglich zu machen... Waren nur ein paar Kleinigkeiten, wenn ich nichts übersehen habe Jedenfalls hab ich mir gedacht, ich lasse euch mal ein wenig probieren und geb mal die ausführbaren her. Ihr braucht zum starten das .Net Framework 2.0. Ausserdem solltet ihr einen Virentest drüber laufen lassen, da ich momentan keinen Virensucher am laufen habe - man weis ja nie
Wenn das Programm gestartet wird, öffnen sich 2 Fenster und eine Konsole. Das eine Fenster wird das Bild aufnehmen, das Andere dient zur Einstellung des Renderers. Wenn ihr einfach Ok drückt, wird in etwa das Bild entstehen, das ich als letztes gepostet habe. Ihr könnt die Maschiene dann etwas arbeiten lassen. Wenn es zu lange dauert, dann ist unter Dialogs: Abort Rendering. Zum neuen Versuch einfach Dialogs/Render Scene wählen und ihr bekommt wieder die (standard) Einstellungen zu sehen. Wenns etwas schneller gehen soll, dann wählt unter
Code:
Photons:
"Glob. Phot. Cnt. Estm." = 100
"Glob. Phot. Cast. Cnt" = 10
Das sollte recht flott gehen. Wer mehrere Prozessoren oder Kerne zur Verfügung hat, der kann Render Threads etwas hochstellen (Feedback dringend erbeten, wenn ihr das auf Mehrfachsystemen getestet habt). Das sollte gehen. Klappt auch auf Einprozessorsystemen, wird aber wenig bringen (Wahrscheinlich ist der Effekt auf HT Systemen auch minimal). Es lohnt sich auch einmal
Code:
Engine Settings:
Specular=false
DirectDiffuse=false
zu wählen. Es wird dann die blanke Photon-Map gerendert: sprich nur das indirekte Licht (Gleiche Einstllung bei deaktivierten Photonen aber aktiviertem Ambient führt zu einer etwas schächlichen Alternative fürs indirekte Licht). Wählt man zusätzlich:
Code:
Engine Settings:
reflections=false
Photon Mapping:
Glob. Phot. Max. Dst. Estm. = 100
Glob. Phot. Cnt. Estm. = 10
Glob. Phot. Cast. Cnt = 10
Dann bekommt man lustige Pünktchen zu sehen - im wesentlichen blank die Photonen. Wer die Distanz noch kleiner stellt, bekommt dann wirklich bald Photonen einzeln zu sehen (50 ist ein ganz guter Wert dafür). Viel Spaß beim ausprobieren. Ach ja. Wichtig: Im Arbeitsverzeichnis legt das Programm die Datei raytracer.png an und evtl. rerender.png, wenn die rerendering Option gewählt ist. Die könnt ihr nach gebrauch gerne wieder löschen.
Für leute mit Zeit:
Code:
Photon Mapping:
Glob. Phot. Max. Dst. Estm. = 1500
Glob. Phot. Cnt. Estm. = 300
Glob. Phot. Cast. Cnt = 200
Zuletzt geändert von Delphic am Sa Dez 30, 2006 16:39, insgesamt 5-mal geändert.
Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.