Shading Problem

Übersicht BlitzBasic Blitz3D

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

 

BIG BUG

BeitragDi, Mai 11, 2004 13:53
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Mai 11, 2004 14:06
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Mai 11, 2004 16:26
Antworten mit Zitat
Benutzer-Profile anzeigen
@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

BeitragDi, Mai 11, 2004 17:41
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Mai 11, 2004 17:44
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Mai 11, 2004 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Crying or Very sad
 

BIG BUG

BeitragSo, Mai 16, 2004 21:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Mai 17, 2004 22:30
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Mai 18, 2004 0:33
Antworten mit Zitat
Benutzer-Profile anzeigen
@BIG BUG:

Very Happy Very Happy Very Happy

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

BeitragDi, Mai 18, 2004 13:29
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group