ich bastel z.Z. ja nebenbei mal wieder an nem Raytracer rum - klappt auch alles wunderbar... nur eine sache die ich gern demnächst implementieren möchte macht mir ein wenig Kopfschmerzen: Displacement Mapping.
Ich nehme ja mal an ihr wisst alle was das ist. Es wird einfach jedes Vertex entlang der normalen um einen bestimmten wert (der aus einer textur stammt) verschoben -allerdings wird hierfür vor dem rendern das Mesh sehr fein tesseliert (je nach settings).
Mein problem bei der sache ist weniger wie ich das displacement mache, sondern eher wie ich es gescheit mache..
Renderer wie MentalRay etc. (die standard Raytracer) tesselieren das Objekt einfach vor dem Rendern sehr fein - was allerdings zur Folge hat, das der Speicherverbrauch enorm ansteigt (und das rendering nicht unbedingt schneller wird durch die hohe anzahl an triangles)..
Als gegenstück gibt es dann z.B. PRMan (den meisten wohl als RenderMan bekannt) welcher zwar nicht auf einem Raytracer basiert, aber dafür das Displacement extrem schnell hinbekommt (ob man dispalcement an oder aus hat ist kein unterschied in der renderzeit).. wobei ich mich hier frage: Wie funktioniert das? Weiß das jemand wie Renderman das macht?
Aber alles in allem... mir fällt so direkt keine gescheite Lösung für einen Raytracer ein, ausser eben im vorhinein zu tesselieren.. deswegen hoffe ich mal, das evtl einer von euch noch eine grandiose idee hat
EInfache Idee: Ersetze die Triangles alle durch Prismen, deren Volumen von dem Basistriangle und den 3 Normalvektoren aufgespannt werden. In dieses Volumen kann eine Höhenmap für feinere strukturen sorgen. Da für sollten 8 bit genügen und gegenüber einen Tesseleiertem Mesh mit einem Brucheil des Speichers auskommen (Schätze mal 1:15)
Raytracingtechnisch ist es jetzt erst einmal einfach: Ein Triangletest auf die vordere Fläche, bei Treffer ein 2d Raytracing auf der Textur starten.
Leider wird es jetzt kompliziert, wenn der Strahl das PRisma durch eine Seitenfläche verlässt, Müssen auch die Nachbartriangles mitverarbeitet werden. Aber wenn man dann das innenleben der Prismen nachträglich tesseliert sollte es im raytracer ein äußerst leicht zu lösendes Problem sein.
Beim Rasterizer versagt die methode leider, hier müsste man entweder Artefakte in kauf nehmen (Reliefmapping funktioniert nur Artefaktfrei wenn die normalen alles Ecken parallel ausgerichtet sind) oder einen komplette rayrtracer im Fragmetshader zu implementieren (Scheidet aufgrund der Laufzeit aus).
Mitglieder in diesem Forum: Majestic-12 [Bot] und 3 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.