Dot3 Normalmapping Fragen

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Megamag

Betreff: Dot3 Normalmapping Fragen

BeitragMo, Mai 03, 2010 20:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Es geht speziell um dieses Tutorial:
https://www.blitzforum.de/foru...light=dot3
Das ganze Ding ist zwar schon knapp 3 Jahre alt und die Bilder fehlen, aber da ich relativ naher Zukunft Normalmapping in einem Spiel nutzen möchte, bin ich da drauf gestoßen. Ich habe den Example Code mal benutz und ein wenig mit verschiedenen Maps rumprobiert. Sieht zeimlich klasse aus, jedoch habe ich einige Fragen was Dot3 Normalmapping angeht:

1.- Ich frage mich, ob mehrere Lights möglich sind. Wenn man statt einem DirectX-Light einen Pivot nimmt, sollten doch unbegrenzte Lichtquellen möglich sein, oder? Jedoch habe ich keine Ahnung, wie man soetwas in den code mit einbaut, da ich in dem Gebiet noch ein ziemlicher Anfänger bin Wink Vielleicht kann man mir da ja mal einen Tipp geben.

2.- Farbige Lichtquellen sind zwar für mein Projekt nicht notwendig, mich würde es aber trotzdem interessieren, wie man diese umsetzen kann. Die Vertexfarben verändern klappt nicht, da diese ja irgendwie für die Normalmap verwendet werden. Ich habe zwar ein wenig im Code rumprobiert, aber habe keine farbigen Lichter hinbekommen (ich habe es auch erhlichgesagt nicht erwartet...). Was müsste man verändern, damit man die Farbe beeinflussen kann?

3.- Als ich mir meine eigene Normalmap basteln wollte, bin ich auf das Programm CrazyBump gestoßen. Die Maps, die ich damit machen kann gehen auch alle und sehen auch toll aus, aber wenn ich die Textur exportiere, kommen da noch eine Menge anderer Maps mit, wie die "Occlusion-Map", die "Displacement-Map" und die "Specularity-Map". Was nutzen mir diese Texturen? Kann man die in Blitz3D verwenden, oder sind die irrelevant?

Danke für eure Hilfe! Very Happy

Hier ist übrigens der Code aus dem Tutorial, für diejenigen, die sich das nicht durchlesen wollen Wink
Code: [AUSKLAPPEN]
Graphics3D 640, 480, 32, 2
SetBuffer BackBuffer()
AppTitle "Dot3 Bumpmapping"

Camera = CreateCamera()
PositionEntity Camera, 0, 0, -2

;Light = CreateLight(1)
light=CreatePivot()
Light2 = CreateLight(1)

Sphere = CreateSphere(30)                   ; mesh
;ScaleEntity Sphere,2,2,2
Normalmap = LoadTexture("Stone1_NRM.png", 1) ; normalmap
Texture = LoadTexture("Stone1_COLOR.png", 1)     ; tetxure
EntityFX Sphere, 2                          ; vertexcolor
EntityTexture Sphere, Normalmap, 0, 0       ; layer 1
EntityTexture Sphere, Texture, 0, 1         ; layer 2
TextureBlend Normalmap, 4                   ; dot3 bumpmapping
TextureBlend Texture, 5                     ; lightmapping

ScaleTexture Texture, 0.2, 0.2              ; dont must be this values
ScaleTexture Normalmap, 0.2, 0.2

While Not KeyDown(1)
  PositionEntity Light,(MouseX()-320)/100.0, (MouseY()-240)/-100.0,-1.5
   ;PositionEntity Light2,(MouseX()-320)/100.0, (MouseY()-240)/-100.0,-1.5
   TurnEntity Sphere, 0, 0.5, 0
   
   UpdateDot3Normals(Sphere, Light)
  ; UpdateDot3Normals(Sphere, Light2)
   
   RenderWorld
   Flip
Wend

Function UpdateDot3Normals(Mesh, Light)
   Local LX#, LY#, LZ#, LNX#, LNY#, LNZ#
   Local S, Surface, V, VX#, VY#, VZ#, VNX#, VNY#, VNZ#
   Local Length#, DotProduct#, VRed, VGreen, VBlue
   
   ; get the lightcoords
   LX# = EntityX#(Light, 1)
   LY# = EntityY#(Light, 1)
   LZ# = EntityZ#(Light, 1)
   
   For S = 1 To CountSurfaces(Mesh)
      Surface = GetSurface(Mesh, S)
      For V = 0 To CountVertices(Surface)-1
         ; get vertexcoords
         VX# = VertexX#(Surface, V)
         VY# = VertexY#(Surface, V)
         VZ# = VertexZ#(Surface, V)
         
         ; get vertexnormalcoords
         VNX# = VertexNX#(Surface, V)
         VNY# = VertexNY#(Surface, V)
         VNZ# = VertexNZ#(Surface, V)
         
         ; transform vertexcoords into worldcoords
         TFormPoint VX#, VY#, VZ#, Mesh, 0
         VX# = TFormedX#()
         VY# = TFormedY#()
         VZ# = TFormedZ#()
       
         ; transform vertexnormalcoords into worldnormalcoords
         TFormNormal VNX#, VNY#, VNZ#, Mesh, 0
         VNX# = TFormedX#()
         VNY# = TFormedY#()
         VNZ# = TFormedZ#()
         
         ; calculate a vector between vertex and light
         LNX# = LX#-VX#
         LNY# = LY#-VY#
         LNZ# = LZ#-VZ#
         
         ; normalize this vector
         Length# = Sqr#(LNX#^2.0+LNY#^2.0+LNZ#^2.0)
         LNX# = LNX#/Length#
         LNY# = LNY#/Length#
         LNZ# = LNZ#/Length#
         
         ; calculate the dotproduct between vertexnormal and the vector between light and vertex
         DotProduct# = VNX#*LNX#+VNY#*LNY#+VNZ#*LNZ#
         
         
         ; if the light behind the mesh
         If DotProduct# < 0.0 Then DotProduct# = 0.0
         
         ; calculate the new vertexcolor
         VRed   = ( LNX#*DotProduct#+1.0)*127.0
         VGreen = ( LNY#*DotProduct#+1.0)*127.0
         VBlue  = (-LNZ#*DotProduct#+1.0)*127.0
         
         ; update vertexcolor
         VertexColor Surface, V, VRed, VGreen, VBlue
      Next
   Next
End Function
Mein DeviantArt Profil
Gewinner des BAC #136
 

Ava

Gast

BeitragMo, Mai 03, 2010 21:07
Antworten mit Zitat
zu 3)

Klingt ja spannend, dieses CrazyBump muss ich mir mal anschauen! Smile Bei Blitz3D werden Dir diese zusätzlichen Texturen vermutlich nicht von grossem Nutzen sein. In Shadern kann man aber so einiges damit anstellen! Very Happy

NightPhoenix

BeitragMo, Mai 03, 2010 23:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab mich auch mal genau mit diesen Fragen beschäftigt und bin letztendlich zu diesem Ergebnis gekommen:
https://www.blitzforum.de/foru...hp?t=34666
Ich hoffe du kannst damit was anfangen.
Das Beispiel kann zwar nicht mehrere Lichtquellen verarbeiten, aber immerhin unterstützt es Farben. Smile
Ich hab mir mal überlegt ob es nicht möglich wäre aus zwei VertexColor für 2 Lichtquellen oder mehr einen Durchschnittswert für jedes Vertex zu bilden und so theoretisch unendlich viele Lichtquellen auf die Normalmap zu übertragen. Naja es blieb aufgrund fehlender Motivation nur bei der Überlegung. Wink Aber ich vermute so könnte es dann auch mit mehreren Lichtquellen klappen.

Shodan

BeitragFr, Mai 07, 2010 22:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Gibt doch schon ne fertige hilfreiche Lösung. Cool


[prahl]
Funktionsbibliothek
http://www.selfmadegames.de/bsm.zip
und Tutorial dazu
http://www.selfmadegames.de/bump-tutorial.zip
[/prahl] Wink

frag mich, falls noch was unklar ist.

Shodan
www.selfmadegames.de

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group