Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Mär 29, 2024 16:29

Foren-Übersicht » Sonstiges » Projekte
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Dieses Thema ist gesperrt. Du kannst keine Beiträge editieren oder weitere Antworten erstellen.  [ 25 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Sa Dez 02, 2006 15:41 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Und schon stand das Projekt ein paar Tage - ich wollte Windows Vista ausprobieren und dabei hat sich gleich eine alte Platte verabschiedet (sie meldete ~13500 Betriebsstunden. Damit ist sie alt genug.) und musste ersetzt werden. So hat sich das weiterprogrammieren etwas verzögert und als dann auch noch das Buch über Photon Mapping eintraf (das hat erstaunliche eineinhalbtmonate gebraucht bis es hier war), musste ich natürlich die letzten Tage etwas lesen ;-) Jedenfalls, heute kam ich wieder dazu und habe am Blobtree weiterimplementiert.
So sind in den letzen 2 Stunden hinzugekommen:
* Differenz
* Schnitt
* Taper-Warp.
Den Taper will ich euch wiederum nicht vorenthalten, weil es das obige Bild noch ein wenig weiter aufpuscht und ich das einfach klasse finde. Ich denke, daß die Transformation, welche den Taper definiert keine größeren Schwierigkeiten bezüglich wie macht man das machen dürfte - nur das Abschätzen der Lipschitzkonstante ist ähnlich ekelig, wie bei den Twists und ich hoffe ich habe mich nicht vertan.

Ansonsten wollte ich mal erzählen, was noch in der nächsten Zeit auf dem Plan steht:
-Für den Blobtree:
* Bend-Warp: Die Objekte sollen auch noch gebogen werden können
* Hyperbolic Blending
* Scheibe
* Ebene
* (typsiche) Blobs (das ist ähnlich zu metaballs)
(* Mehrfache Schnitte mit Blobtreeobjekten um auch das normale CSG Schema anwenden zu können - ob das sinnvoll ist, mag ich mal dahinstellen. Der Blobtree neigt doch zu sehr beschränktem Tempo und unterstützt CSG ja auch intern. Deswegen ist das auch erstmal in Klammern. Kompliziert wäre es allerdings nicht. )
- Brechung sinnvoll implementieren. Bislang ist der Brechungsindex von Eintrittsmedium zu Austrittsmedium immer 1. Ganz generell braucht das Material ein wenig Entzerrung und andere Shading Modelle als Phong sollen dazukommen, allein des Photon-Mappings wegen.
- Photon Mapping
- Procedural Texturing
Das ist dann bereits eine recht lange Liste und besonders die letzten 3 Punkte werden mich sicher eine ganze Weile beschäftigen - es könnte also etwas dauern, bis ich wieder ein paar schöne und spannend andere Bilder zum zeigen habe - erhöht vielleicht die Spannung? Und ich hoffe ihr honiriert das, wenn ich plötzlich eine Szene mit global Illumination vorzeigen kann - sofern das auch alles klappt und ich nicht völlig demotiviert bin, weil ichs nicht hinbekomme ;-)


Dateianhänge:
061202-tapedtwistedcylinders.jpg
061202-tapedtwistedcylinders.jpg [ 13.7 KiB | 7005-mal betrachtet ]
Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 07, 2006 11:51 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
In meinem Buch bezüglich Photon-Mapping bin ich zwar schon recht weit gediehen und erste Planungen bezüglich der Implementation sind bereits gemacht, aber irgendwie wurde ich das Gefühl nicht los, noch keine für das Photon Mapping Interesante, zügig berechenbaren und gut nachvollziehbaren Objekte zu haben. So hab ich mir eingebildet, unbedingt Gläser und Vasen zu benötigen und habe so beschlossen, daß jetzt noch unbedingt ein Lathe-Objekt (Rotationsobjekte) nötig sei. Da es aber sinnlos ist, dieses Objekt zu implementieren, wenn man keine definierten Kontrollpunkte hat, ist so ein kleiner Editor zum definieren von Kontrollpunkten entstanden - ganz fertig ist er zwar noch nicht, aber das Wesentliche funktioniert bereits.
Was also muss der Editor können? Er muss es ermöglichen, verschiedene Linientypen manipulierbar zu machen. Bisweilen haben sich Linien und Kubische Bezier Kurven eingefunden. In Planung sind noch Quadratische Beziers und evtl. Splines. Jedenfalls sind diese Kurven durch verschiene Kontrollpunkte fest vorgegeben, wobei bei einigen Kurventypen diese voneinander abhängig sind, um glatte oder geschlossene Kurven zu erzeugen. Die dazu nötige Rechnerei bezüglich Beziers habe ich bereits vor einiger Zeit im "Tutorial: Abseits eckiger Welten" vorgestellt: Dazu gibt es wohl nicht allzuviel zu sagen. Noch zum Abschluss ein kleines Bild von einer schnell zusammengestöpselten Beispielkurve (Kubsicher Bezier):


Dateianhänge:
Dateikommentar: Bezier Editor
BezierEditor.png
BezierEditor.png [ 18.62 KiB | 6940-mal betrachtet ]
Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 19, 2006 17:33 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Es hat sich leider in letzter Zeit etwas hingezogen und allzuviel Zeit hatte ich auch nicht, drum gabs ne Weile keine Neuigkeiten. Was hat sich also getan?
* Dithering. Beim runterbrechen der deutlich höher aufgelösten Farbkomponenten (je Kanal 64 Bit) zu den auf dem Bildschirm darstellbaren Farben (je Kanal 8 Bit) kommt es zu mehr oder weniger starken Fehlern. Durch einen sanften Dither in der Art nach Floyd Steinberg wurde hier ein klein wenig nachgebessert.
* Ein Verfahren, das ich Resampling nennen will, wobei ich keinen wirklichen Namen dafür habe - vorher kannte ich es auch noch nicht, da es aber sehr naheliegend ist, würde ich nicht darauf wetten, daß ich der einzige bin, dem dies eingefallen ist ;-) Der Begriff ist eigentlich für das Umskalieren eines Bildes bereits im Einsatz - ich mache aber etwas völlig anderes: Zuerst wird das Bild ohne Anti-Alias gerendert. Man bekommt also recht zügig einen ersten Eindruck - gut für ungeduldige wie mich. Danach wird das Bild erneut abgegangen und an Stellen, an denen sich Farben deutlich unterscheiden, wird mit aktiviertem AA (also einem Supersampling-Verfahren) erneut gerendert. Diese Stellen kann man sich natürlich merken und später auch in ein Bild stecken - ich habe eines beigelegt. Man sieht dabei in weiß, wo der Raytracer nachträglich nocheinmal hand angelegt hat: überall dort, wo Farbkanten zu finden sind.
* Surface of Revolution. Es war ja abzusehen, daß diese bald ihren Weg in den Raytracer finden würden. Heute haben sie es dann geschafft. Durch den Einsatz von Kubsichen Beziers, wurde es nötig Polynome von bis zu 6. Grad zu lösen. Ich hab dies durch Anwenden des Satzes von Sturm lösen können - überzeugt euch im Bild selbst... Hat geklappt ;-)
So das wars dann erstmal mit den Neuerungen. Das Photon-Mapping steht jetzt dann sehr weit oben auf der Liste und ich freue mich bereits darauf... Ach ja... Die Bilder... muss ich ja noch hochladen... Bitte sehr :-D


Dateianhänge:
raytracer.jpg
raytracer.jpg [ 67.38 KiB | 6852-mal betrachtet ]
rerender.png
rerender.png [ 34.48 KiB | 6853-mal betrachtet ]
Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 25, 2006 11:54 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Mein 3. Post ohne Bild ;-) Ich hab neben Tutorial schreiben die Zeit ein wenig genutzt un an einer Photonen-Karte und speicherschonenden Photonen gebastelt (19 Byte für ein Photon: Gespeichert werden müssen dabei eine Fließkomma 3D Position, eine Fließkomma Richtung, Fließkomma Farben=Energie und eine Koordinatennummer. Ich habe mich hier an den Vorschlag des Photon-Mapping Buches gehalten, aber die Ausführung musste ich schon selbst vornehmen. Die Position habe ich nicht wesentliche komprimiert nur von double auf single heruntergerechnet. Die Farbe ist in Shared-Exponent Codierung abgelegt, so wie es auch für HDR auf Grafikkarten gemacht wird: 4 Bytes. Die Ausrichtung des Photons ist durch 2 Byte-Winkel gespeichet und die Koordinatennummer durch ein weiteres Byte). Die Photonen-Karte ist im wesentlichen ein BSP-Baum, der wegen einiger Spezialitäten (weil man ihn z.B. als Heap notiert) allerdings KD-Baum genannt wird und zum schnellen finden von Photonen in einer Umgebung von Punkten eingesetzt wird. Das ganze ist in eine ziemliche Menge Code ausgeartet und jetzt habe ich das Problem, daß das allein auf echtes Raytracing zugeschnittene Material erst einmal auf Photonen umgebaut werden will und dafür einiges an Umstrukturierung benötigt und die Lichtbererechnung sich auch besser an physikalische Gegebenheiten halten sollte. Da wird sich zeigen, wie lange ich mit Stift und Papier benötige, um das halbwegs sauber und schön hinzubekommen.


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 26, 2006 16:33 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
So, jetzt habe ich bereits eine weile an den Photonmaps herumgespielt und es kommen bereits erste Bilder heraus. Einige Dinge müssen noch überarbeitet werden und optimiert werden - so sieht das Bild noch etwas strak fraktal aus - Texturen braucht man jedenfalls nicht mehr ;-) Einem Test muss auch unbedingt .Nets Zufallszahlengernerator noch über sich ergehen lassen. Wird gegebenenfalls durch einen passenderen ersetzt. Naja seht selbst und vergleicht das normal geraytracede Bild mit dem Photonen Bild (typsich sind die weichen schatten und das übergehen von Farben einer Wand auf anliegende Bereiche). Ich finde das Ergebnis jedenfalls hoch interessant, bin aber noch über einige Unterschiede etwas verwirrt. Naja. Seht selbst (im Bild ist nur indirektes, diffuses Licht simuliert. Nicht wundern, wenn typische Kaustiken fehlen). Vielleicht komme ich noch dahinter, wos etwas hakt. Was hat sich noch getan? Das Material wurde komplett überarbeitet und auch die Möglichkeit, Bumpmaps einzusetzen ist hinzugekommen.


Dateianhänge:
raytracer.jpg
raytracer.jpg [ 24.41 KiB | 6748-mal betrachtet ]
photon.jpg
photon.jpg [ 38.02 KiB | 6748-mal betrachtet ]
Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 27, 2006 15:21 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Nach einigen kleineren Korrekturen und nachdem ich akzeptiert habe, daß man direktes Licht doch eher normal berechnet und die Lichtgleichungen deutlich besser abschätzen kann, man weniger Photonen speichern muss und die ganze Sache so nen deutlichen Schub bekommt, hab ich beschlossen es einfach mal zu machen ;-) Dann kam gleich eine böse Überraschung: Harte Schatten passen nicht in eine solche Szene - also haben auch gleich noch weiche Schatten ihren Weg in den Raytracer gefunden. Die Photon-Map enthält nun nur noch indirektes Licht, welches per russisch Roulette simuliert wird. Damit euch das seltsame Bild, das ich gestern geostet hab nicht dauerhaft im Gedächtnis bleibt eine etwas neuere Variante. Im wesentlichen ist alles gleich geblieben und so lässt sich das Bild gut mit dem ohne Photon-Maps aus dem obigen Post vergleichen - es ist aber eine kleine Kugel links am Rand hinzugekommen und es wurde nachträglich Anti-Alias durchgelassen, sowie die Unterstützung von weichen Schatten für direktes Licht. Also geniesst die schöne Aussicht ;-)


Dateianhänge:
photon_better.jpg
photon_better.jpg [ 64.14 KiB | 6717-mal betrachtet ]
Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 01, 2007 22:21 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Ich hab ein wenig weiter gebastelt, nachdem eingie Probleme die sich im Meinungen Thread aufgetan haben gelöst wurden (Besondere Freude machten darunter Probleme mit dem .Net-Framework in Sachen fehlerhafte Typenkonvertierung unter 32-Bit Systemen). Jedenfalls habe ich ein wenig an einem Irradiance-Cache programmiert. Diesen kann man in 2 Modi versetzen: Einer beschleunigt die Darstellung der Photon-Maps gewaltig (Wer die Standard-Szene probiert hat: Anfangs benötigte sie etwa 10 min. Je nach Einstellung des Caches kann man das auf 2-3 Minuten drücken - auch noch wilder, wenn einem Qualität nicht so wichtig ist). Andererseits kann man ihn in einen Modus versetzen, der dem Pathtracing entlehnt ist und das eintreffende, indirekte Licht noch weiter aufbohrt und unter anderem dazu führt, daß sich die Szene ganz massiv beruhigt und soweit ich gesehen habe, die übrigen Schatten im wesentlichen verschwinden lässt - man erkauft sich den Spaß allerdings durch wieder deutlich erhöhte Renderzeiten. Da der Cache sich hier bereits wenn möglich selbst benutzt und beschleunigt, habe ich keine weiteren Ideen die Sache zu beschleunigen. Vielleicht fällt mir hier noch eine gute Möglichkeit zum parallelisieren ein, damit es wieder was zum ertesten per IRC gibt, aber leider sind die Dinge hier nicht ganz unabhängig voneinander und die Sache scheint mir deshalb schwierig. Vielleicht kommt die Erleuchtung ja noch.


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: So Jan 07, 2007 00:36 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Habe meine Photonmap-Implementation noch etwas aufgebohrt und ein zwei kleine Fehlerchen entsorgt und mich um Kaustiken gekümmert. Hier muss ich aber ganz besonders noch die Projektionskarten einer Prüfung unterziehen - die sind vorhin etwas in Eile entstanden und ich glaube, daß diese noch nicht so tun wie sie sollen und daß deshalb die Kaustiken noch etwas dünn aussehen, aber vorhanden sind sie jedenfalls. Man beachte jetzt ganz besonders die fast aalglatten Wände, die direkten und indirekten Kaustiken (man sieht weisse, rote und blaue - genau hinsehen!) Die Farben wurden auch ein wenig gewechselt, damit man aufretenden Effekte etwas stärker zur Geltung kommen, aber der Fortschritt ist hier denke ich auch ohne echte Vergleichsmöglichkeiten zu haben zu sehen.
Ich habe mich auch ein wenig an Fresnel probiert. Das ging leider noch etwas nach hinten los, wie man am Rand der Kugel sicherlich erkennen kann. Ich werde versuchen das noch zu beheben und habe die sache sehr sanft eingestellt, damit nicht das ganze Bild durch einen noch verhunzten Frensel draufgeht. (man beachte den etwas abgefahrenen Rand der Glaskugel). Projektionskarten habe ich auch angefangen, um die Kaustiken noch etwas aufbohren zu können, aber da werde ich noch etwas über die Theorie nachdenken müssen ;-) Naja, sie sehen ja auch so bereits ganz gut aus...
Kleine statistikrunde: Es wurden 300k Photonen gestartet, 520k Photonen wanderten in die Photonenkarte für indirektes Licht, 11k in die Kaustiken Karte. Die Kaustiken werden durch ein Gaussfilter gejagt, damit sie sich schärfer abgrenzen. Je nach Szene und Einstellungenwahl habe ich auch schon deutlich schärfere Kaustiken gesehen - hier wäre der Filter also nicht unbedingt nötig, aber er richtet auch keinen großen schaden an. Bei wenigen Photonen in der Karte entdeckt man dadurch aber Aussreißer-Photonen anhand von hellen kreisen sehr gut... Ich wede den Filter deshalb nur optional wöhlbar lassen. Das Bild renderte mit extra Kantenglättungsdurchgang: 31 min.


Dateianhänge:
raytracer.jpg
raytracer.jpg [ 43 KiB | 6522-mal betrachtet ]
Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 08, 2007 23:41 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
So, jetzt klappt die sache auch ganz sauber... Hab euch mal ein Glas mit Brechungsindex 1.9 als Kugel hingelegt (Glas hat zwsichen 1.5 bis 2.0... 1.9 ist schon recht heftig). Werde dann auch mal die dielektriken sauber implementieren, um auch komplexere Objekte ordentlich beleuchten zu können. Ach ja, es war mir etwas zu warm momentan. Ich habe die Lambe von der Farblichkeit etwas verdreht. Jetzt wirkt es wie in meiner alten Schule. Eisig kalt ;-) Ich konnte diese verhunzte Kugel jetzt einfach nicht so stehen lassen und musst das Bild ersetzen. Man beachte auch die Spiegelungen im Glas, die zum Rand hin stärker werden. Bild brauchte 23mins.


Dateianhänge:
kugelgut.jpg
kugelgut.jpg [ 39.97 KiB | 6471-mal betrachtet ]
Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 22, 2007 11:42 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Der Raytracer hat ein wenig weitere Vorbereitung in Sachen multithreading bekommen: Der Irradiance Cache liess sich bislang nur Sequentiell beschreiben, was zur folge hatte, daß alle gemeinsam arbeitenden Threads sich am Cache immer einreihen müssen - jetzt ist das erzeugen eines neuen Elements für den Caches aber eine sehr Zeitintensive Sache und man vergeudet so ganz massiv Rechenzeit auf den verfügbaren Prozessoren. Das Problem besteht darin, daß Cache Elemente nie "zu nahe" im Raum beieinander liegen dürfen, man aber bei neu erzeugten Elementen noch nicht weiss, wie viel Raum sie abdecken werden. Nach etwas überlegen war allerdings klar, daß man die Elemente aber ohne Schwierigkeiten parallel berechnen lassen kann. Man muss nur beim einpflegen aufpassen, daß nicht bereits ein passendes Element im Cache liegt. Hat man also gerade ein Element berechnet, wird nachgeprüft, ob bereits ein anderer Thread ein passendes Element in den Cache gelegt hat. Wenn ja, wird die eigene Arbeit verworfen. Wenn nein, wird das eigenen Element in den Cache gelegt. Man muss dann nur noch erreichen, daß die Wahrscheinlichkeit, daß Arbeit mehrfach verrichtet wird, klein wird - wenn jedes zweite Ergebniss verworfen wird, hat man natürlich nicht viel davon, wenn da mehrere Prozessoren dran arbeiten ;-)


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Dieses Thema ist gesperrt. Du kannst keine Beiträge editieren oder weitere Antworten erstellen.  [ 25 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Sonstiges » Projekte


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 33 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.082s | 19 Queries | GZIP : On ]