Du bist nicht angemeldet.

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

1

15.12.2013, 15:53

Konzept Schattenvolumen

Hey,

hier ein Buchabschnitt, den ich nicht so ganz checke:

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.
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.
Wo ist hier also der Fehler?

Achja, wenn wir schon dabei sind: Was sind eigentlich der Unterschied zwischen einseitigen und zweiseitigen Meshes?

Tankard

Treue Seele

Beiträge: 192

Beruf: Student, Hardware- und Softwareentwicklung als wissenschaftliche Hilfskraft

  • Private Nachricht senden

2

15.12.2013, 16:00

Wieso muss man hier in Richtung der Lichtquelle extrudieren?


Dort steht in Richtugn des Lichts, nicht in Richtugn der Lichtquelle. Ich würde das so verstehen, dass die Richtung, in die sich das Licht bewegt, gemeint ist.

Allerdings kenne ich mich mit dem Thema auch nicht aus, aber so würde es Sinn machen und so würde ich den Absatz lesen.

3

15.12.2013, 17:12

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.
Lieber dumm fragen, als dumm bleiben!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

15.12.2013, 17:55

Wieso muss man hier in Richtung der Lichtquelle extrudieren?

Mit "Richtung des Lichts" ist wohl die Richtung gemeint, in die das Licht geht, also von der Lichtquelle weg... ;)

5

15.12.2013, 22:20

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.
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).
Mit "Richtung des Lichts" ist wohl die Richtung gemeint, in die das Licht geht, also von der Lichtquelle weg... ;)
Was heißt hier wohl? :D
In Richtung des Lichts ist für mich eher synonym zu Lichtquelle. Dann doch eher in Richtung der (Licht)strahlen o.ä.

6

15.12.2013, 23:29

"wohl" heißt einfach, dass man den Satz auf verschiedene Arten interpretieren kann. Er ist eben nicht eindeutig. Aber im Kontext macht nur eine von beiden Bedeutungen Sinn, weshalb man davon ausgehen kann, dass auch diese gemeint ist.

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?

Ich versteh nicht ganz, was du meinst. Man kann Modelle so bauen, dass "sie dicht sind" bzw. "man von außen nie die Rückseite irgendeines Dreiecks sehen kann". Wenn man das tut, kann man Backface-Culling benutzen, wenn nicht, kann es dabei zu Grafikfehlern kommen.
Lieber dumm fragen, als dumm bleiben!

7

16.12.2013, 12:02

Ich verstehe eben nicht ganz, wie das Mesh selbst einseitig sein kann. In meiner Vorstellung waren auch geschlossene Meshes immer zweiseitig, denn könnte man in das geschlossene Objekt reinfliegen, würde man trotzdem noch die Rückseiten sehen.
Ich dachte also, die Einseitigkeit kommt immer nur über den Renderer, der mit Backface-Culling dann Faces verwirft, die alleine vom Mesh her aber immer erst mal vorhanden sind.

8

16.12.2013, 12:31

Ja, so ist es ja auch. Ein Objekt ist einseitig, wenn es reicht, dass man immer nur die Vorderseite von den Dreiecken sieht. Denn normalerweise fliegt man ja nicht in geschlossene Objekte rein.
Lieber dumm fragen, als dumm bleiben!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

16.12.2013, 13:52

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...

10

16.12.2013, 19:50

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...

In dem Artikel hieß es aber sinngemäß "das Mesh muss geschlossen und einseitig sein." Das lässt auf nen Unterschied schließen, auch wenn ich mir auf Anhieb kein Mesh vorstellen kann, das nur geschlossen oder nur einseitig ist (also XOR). Mit der Auslegung von JK könnte ich mich aber anfreunden. 8)

Werbeanzeige