Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Wieso muss man hier in Richtung der Lichtquelle extrudieren? Bekommt man dann nicht genau das Gegenteil, also ein Lichtvolumen? Das Schattenvolumen fängt doch hinter der schattenwerfenden Fläche an oder nicht? Das würde dann auch die erwähnten Vierecke ergeben: 1 Seite des schattenwerfenden Dreiecks, zwei Seiten, die von der Lichtquelle weg in den Raum laufen und den Abschluss an der fernen Clipping-Ebene. Extrudiert man dagegen in Richtung der Lichtquelle, bekommt man ja wieder ein Dreieck, weil sich die extrudierten Seiten in der Lichtquelle treffen.Zitat
Um ein Schattenvolumen auf korrekte Weise zu konstruieren, müssen wir bedenken, dass nur die für die Lichtquelle sichtbaren Deiecke zur Form des Volumens beitrage, denn sie blockieren das Licht.
Ein Brute-Force-Ansatz ist es, ganz einfach für jedes einzelne sichtbare Dreieck ein Schattenvolumen zu konstruieren, indem man das Dreieck in Richtung des Lichts extrudiert. Das Volumen selbst besteht dann aus den Vierecken, die von den Originaldreiecksseiten und den extrudierten Dreiecksseiten gebildet werden. So kann man ein konsistentes Schattenvolumen erzeugen, das wirklich für alle Meshes funktioniert. Offensichtlich ist dies jedoch keine akzeptable Lösung, weil viel zu viele Pixel gefüllt werden müssten.
Treue Seele
Beruf: Student, Hardware- und Softwareentwicklung als wissenschaftliche Hilfskraft
Wieso muss man hier in Richtung der Lichtquelle extrudieren?
Wieso muss man hier in Richtung der Lichtquelle extrudieren?
Kann man denn ein Mesh überhaupt so modellieren, dass die Dreiecke keine Rückseiten haben? Kann das also eine implizite Eigenschaft eines Meshs sein? Ich dachte, das erreicht man nur durch Culling im jeweiligen Renderer, wobei das Mesh zwangsläufig immer zweiseitig ist (nur eben nicht so gezeichnet wird).Ja, so wie Tankard es sagt muss es sein, alles andere würde keinen Sinn ergeben.
mit einseitig/zweiseitig ist vermutlich folgendes gemeint:
Normalerweise ist ein Mesh ein geschlossenes Objekt aus Dreiecke. Wenn es mit Wasser gefüllt wäre, würde es nicht auslaufen, bildlich gesprochen. Daher weiß man, dass man die Innenseite der Dreiecke niemals sehen kann (solange die Kamera außerhalb des Meshs ist), also muss man Dreiecke, die mit der Rückseite zur Kamera zeigen nicht rendern, was eine einfache, aber effektive optimierung ist. In diesem Sinne wären die Dreiecke einseitig, weil man immer nur dieselbe Seite sieht.
Zweiseitige Dreiecke sind nett für extrem dünne Flächen. Zahnreihen, Glasscheiben, Zäune, usw. Man möchte nicht Vorder- und Rückseite modellieren, hat dafür aber das Problem, dass auch die Hinterseite von Dreiecken sichtbar sein kann. Jetzt kann man entweder die Rückseite doch modellieren, oder man ändert den Cullmode um die Rückseite nicht auszublenden. Dann muss man aber für jedes Objekt, das man rendert, wissen, wie der Cullmode eingestellt werden muss.
Was heißt hier wohl?Mit "Richtung des Lichts" ist wohl die Richtung gemeint, in die das Licht geht, also von der Lichtquelle weg...
Zitat
Kann man denn ein Mesh überhaupt so modellieren, dass die Dreiecke keine Rückseiten haben? Kann das also eine implizite Eigenschaft eines Meshs sein?
Dreiecke haben einen Ordnungssinn, über den definiert ist, welche Seite nach innen und welche nach außen zeigt. Ich vermute mal, dass mit dieser Sache von wegen "einseitig" und "zweiseitig" eher gemeint ist, dass das Modell "wasserdicht" bzw. eine geschlossene Mannigfaltigkeit sein muss...
Werbeanzeige