Shading Problem
Übersicht

BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielleicht kannst du das Model ja mal hier bereitstellen? Das Problem selbst zu sehen ist oft sinnvoller als theoretisches blabla... | ||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So wenige Vertices wie möglich is klar. Nur es gibt auch ein Mindestmass das da sein soll. Weil abhängig von der Lichtposi ergibt die berechnung mit einem Triangle vielleicht das es nicht von Licht getroffen wird womit es schwarz is.
Versuchs doch ma mit dem entsprechenden EntityFX für flatshading. Und das mit zunehmenden Winkel = weniger hell hast du doch jetzt schon wo is also genau das Problem? Flächen die garkeine direkte Verbindung zum licht haben sind einfach standardmässig schwarz da sie kein Licht sehen. |
||
![]() |
Ayman |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Dreamora: hast's sicher lieb gemeint, aber Dein letztes Post ging ein bischen am Problem vorbei... Liegt aber auch an mir, weil ich hier meinen Thread (https://www.blitzforum.de/viewtopic.php?t=3140) mit Omenaton_2s Thread zusammengelegt habe. Das macht es Euch sicherlich nicht einfacher, sorry dafür!
"So wenige Vertices wie möglich is klar. Nur es gibt auch ein Mindestmass das da sein soll. " Eben das schrieb ich ja. "Weil abhängig von der Lichtposi ergibt die berechnung mit einem Triangle vielleicht das es nicht von Licht getroffen wird womit es schwarz is. " Lies noch mal im Thread nach... das ist nicht mein Problem. "Versuchs doch ma mit dem entsprechenden EntityFX für flatshading." Lies den Thread - das (EntityFX <entity>,4) hab ich doch von Anfang so an eingestellt. Nur dabei habe ich ja das Problem. "Und das mit zunehmenden Winkel = weniger hell hast du doch jetzt schon wo is also genau das Problem?" Das eben das NICHT passiert. Wenn es so wäre, hätte ich keine Probleme. "Flächen die garkeine direkte Verbindung zum licht haben sind einfach standardmässig schwarz da sie kein Licht sehen." Ja, auch das hab ich nie in Frage gestellt. @BIG BUG: Zitat: Vielleicht kannst du das Model ja mal hier bereitstellen? Das Problem selbst zu sehen ist oft sinnvoller als theoretisches blabla.. Wen es interessiert, der möge mir ne Mail an to.agadir@gmx.de schicken. Er bekommt ein 16 KB ZIP zurück. Ich hab leider keinen Webspace. |
||
Omenaton_2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe endlich mein Gils[s] bekommen und damit meine kleine Szene mit Shadowmaps geshadet. Ganz ohne BB Lichtquellen. Damit habe ich das Problem vorerst nicht mehr.
Das war nur ein kleiner Test, ich habe jetzt nicht die Zeit mich noch mehr darum zu kümmern, hauptsache es läuft und sieht gut aus. Wenn ich irgendwann bald mehr Zeit habe, würde ich mich gerne mehr mit 3D beschäftigen, es macht durchaus Spaß. Noch ein Tip an Ayman: Versuch Folgendes: Bau dein Coriolis Space Station ganz neu auf. Mach es aus ganz einfachen Teilobjekten wie Würfel, etc. Vermeide Boolsche Operationen. MAch die Öffnung also nicht durch ausschneiden, sondern in dem du sagen wir einen Hinterteil hast und um der Luke herum baust du mehrere (etwas modifiezierte) Würfel, wie aus Legobausteinen. Am Ende alles zusammen attachen und die nahe liegenden Vertixes zusammenschmelzen lassen. Du wirst zwas mehr Polygone haben, aber immer noch sehr wenig und es beseht die Hoffnung, daß so der Shadingproblem nicht auftritt. |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Es wird über nen einzelnes Triangle keine unterschiedlichen Helligkeiten geben einfach so.
Das is nur möglich wenn VertexColors genutzt , da dann die Farben zwischen den Vertices interpoliert werden, aber das passt dir ja auch wieder nicht. (war EntityFX + 2 ) Hinzu kommt, dass du scheinbar ganz minim zu faul bist überhaupt nur in die Hilfe zu kucken oder? Hier zwei möglichkeiten die vielleicht funzen ( mehr Polygone wirste trotzdem brauchen auf dauer ) Zuerst ma UpdateNormals Entity und dann Variante 1: LightMesh benutzen Variante 2: EntityFX Entity, 2 + 4 ( nur falls du das noch nicht versucht hast, was ich allerdings erwarte! ) |
||
![]() |
Ayman |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Hier zwei möglichkeiten die vielleicht funzen"... UpdateNormals Entity und dann Variante 1: LightMesh benutzen Variante 2: EntityFX Entity, 2 + 4 Variante 1 lauft ja nur mit Variante 2 (Bit 1 mit EntityFX setzten) im Doppelpack, aber beides hab ich schon vor Monaten ausprobiert (sagte ich nicht, dass mich das Problem schon so lange verfolgt?) und sie funzen _leider_ nicht. @Omenaton_2: Hab mir Gile[s] auch mal angesehen. Ist aber wohl nix für meine Zwecke, wie wir ja schon geklärt hatten. Ich werde die nächsten Tage noch ein paar Tests machen. Wenn's nichts bringt, schmeiß ich BB3D einfach wiedermal an die Wand und sammel es in 'nem viertel Jahr wieder auf ![]() |
||
BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das Problem liegt darin, dass BB beim Flächenshading als Normalvektor immer den vom ersten Vertex eines Polygons TRIANGLEVERTEX (Surface, Dreieck, 0) nimmt. Dieser ist aber auf Vertexshading ausgerichtet. Er steht also nicht senkrecht auf der Fläche, sondern zeigt in die durchschnittliche Normalen-Richtung aller angrenzenden Flächen. UpdateNormals richtet diesen Vektor auch immer nur so aus.
Ich sehe hier zwei Lösungsmöglichkeiten. 1. Du trennst die Flächen in 3DS als eigene Childmeshs auf(hatte ich ausprobiert und hat funktioniert) 2. Zuerst musst du im 3D-Modell sicherstellen, dass jedes Vertices nur Eckpunkt eines Polygons ist. Die Normalen musst du dann nach dem Laden des Meshs manuell ausrichten(eine entsprechende Funktion habe ich aber wegen mangelnder Mathekenntnisse noch nicht hinbekommen). Schwer zu erklären, ich hoffe es hilft trotzdem. |
||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hier noch die Funktion für Lösung 2(richtet die Vertexnormalen für Flatshading aus):
Code: [AUSKLAPPEN] Function UpdateNormalsFlat(mesh) Local surface, mesh_surface, faktor# Local v1, v2, v3 Local ax#, ay#, az# Local lx#, ly#, lz# Local nx#, ny#, nz# For mesh_surface = 1 To CountSurfaces(mesh) surface=GetSurface(mesh,mesh_surface) For triangle = 0 To CountTriangles(surface)-1 v1 = TriangleVertex(surface, triangle, 0) v2 = TriangleVertex(surface, triangle, 1) v3 = TriangleVertex(surface, triangle, 2) ;Achse durch v1 als Vektor lx# = -((VertexX#(surface,v3) + VertexX#(surface,v2))/2-VertexX#(surface,v1)) ly# = -((VertexY#(surface,v3) + VertexY#(surface,v2))/2-VertexY#(surface,v1)) lz# = -((VertexZ#(surface,v3) + VertexZ#(surface,v2))/2-VertexZ#(surface,v1)) ;Kante von v2 zu v3 als Vektor ax# = VertexX#(surface,v2) - VertexX#(surface,v3) ay# = VertexY#(surface,v2) - VertexY#(surface,v3) az# = VertexZ#(surface,v2) - VertexZ#(surface,v3) ;Kreuzprodukt beider Vektoren nx# = (ly# * az#)-(lz# * ay#) ny# = (lz# * ax#)-(lx# * az#) nz# = (lx# * ay#)-(ly# * ax#) ;Ergebnisvektor auf Laenge 1 bringen faktor# = Sqr((nx# * nx#)+(ny# * ny#)+(nz# * nz#)) nx# = nx# / faktor# ny# = ny# / faktor# nz# = nz# / faktor# VertexNormal surface, v1, nx#, ny#, nz# Next Next End Function |
||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
![]() |
Ayman |
![]() Antworten mit Zitat ![]() |
---|---|---|
@BIG BUG:
![]() ![]() ![]() Ich bin schlichtweg von den Socken. Es funktioniert tatsächlich. Mehr noch, ich verstehe sogar, WIE es funktioniert. Ich bin Dir sehr zu Dank verpflichtet! Meine monatelange Suche nach einer Lösung hat endlich ein Ende. Und ich konnte einiges daraus lernen. Die von Dir entwickelte Funktion solltest Du vielleicht noch hier im Codearchiv posten. Ich bin mir sicher, dass dieses Problem mehr Blitzcoder haben. Omenaton_2 ist ein Beispiel. Ich danke Dir vielmals. Grüße Ayman |
||
Omenaton_2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja, ich danke dir auch BigBug.
Ich habe jetzt nicht die Zeit um das tatsächlich auszupobieren, aber ich gehe davon aus, daß das so funktioniert. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group