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!
Per Face Normalen funktionieren immer dann, wenn du einen harten Bruch an den Kanten zwischen zwei Faces (i.A. Dreiecken) habe willst.
Wie z.B. bei eine Würfel, Quader, Pyramide, ...
Also immer da, wo die Dreiecke exakt der Oberfläche der darzustellenden geometrischen Form entsprechen.
Sobald die Dreiecke aber eine gekrümmte Fläche annähern, benötigt man der korrekten Form entsprechende Normalen, um bei der Beleuchtungsberechnung den durch die Approximation entstandenen Fehler vertuschen zu können.
Am besten gelingt das immer dann, wenn du die korrekte Normale analytisch berechnen kann, wie z.B. einer Kugel, Zylinder, Torus, ...
Es gibt nicht die eine Formel zur Berechnung der Normalen.
Denke doch nur mal an einen Kegel: um den darzustellen, benötigst du sowohl per Vertex Normalen für die gekrümmte Oberfläche, als auch per Face Normalen an der Spitze bzw. der Kante zum Boden.
Es nützt dir nichts, dreimal den gleichen Normal zu berechnen. Was ich meinte, war, zunächst für jedes Face den Normal zu bestimmen, anschließend für jeden Vertex alle Normals derjenigen Faces, die er begrenzt, aufzusummieren und dann zu normalisieren.
Daraus ergibt sich dann allerdings das Problem, dass du keine harten Kanten mehr hast, d.h. auch ein Würfel würde "rund" beleuchtet. Eine Möglichkeit, relativ schnell mit relativ hoher Wahrscheinlichkeit gute Ergebnisse zu erzielen, ist die Definition eines Grenzwinkels, der darüber entscheidet, ob eine Kante weich oder hart zu beleuchten ist.
Um vollständige Kontrolle über korrekte Ergebnisse zu haben, kannst du das Modell aber letztendlich nur mit bereits korrekten Normals aus dem Modeller deiner Wahl exportieren.
habe es jetzt mal ein wenig rumprobiert. allerdings bilden sich kleine artefakte, die doch schon ein wenig störend sind. zudem kommt es zu dem problem, dass keine harten kanten mehr gebildet werden können. das wurde aber hier ja schonmal angesprochen.
zu erst die brechnugsweise der nomalvektoren.
zu allererst lese ich die vertice aus dem format:
Du normalisierst zu oft, du darfst erst zum Schluss normalisieren, wenn alle normalisierten Einzelnormals zusammenaddiert wurden, ansonsten erhalten die Normals verschiedener Faces je nach Reihenfolge verschiedene Gewichtungen, was nicht der Sinn der Sache ist. Außerdem musst du natürlich sicherstellen, dass alle Vertices miteinander verbunden sind, also keine Doppelvertices auf der selben Position existieren.