Echtzeitschatten

Previous topic - Next topic

Kitty Hello

...kommen! Ich hab's schon am Laufen, bin noch am Basteln für ein schönes Beispiel. Gag: Das ist genauso einfach wie Cel-Shading oder Bump-Mapping:

Code (glbasic) Select
X_MAKE3D
X_CAMERA

X_DRAWOBJ ... // Szene rendern
X_SPOT_LT -3, rgb_schatten, posx,posy, posz, 0,0,0, 360

X_DRAWOBJ... // Schattenspender nochmal rendern

SHOWSCREEN // ja, das war's!!!
Noch viel krasser: Ich hab eine Technik entwickelt, mit der ich in _einem_ Durchgang StencilShadows rendern kann. Das ist für ein BASIC _bruuuuutal_ schnell!
Bei Zeiten eweiter ich's um VertexProgram für noch mehr Speed.

Also, Ohren anlegen. Neues Update kommt bald.

Sebe

O.o Ich bin beeindruckt. Hätte nicht gedacht, dass du es so schnell hinbekommst. (Ich trau mich fast nicht zu fragen, aber: schon mal geschaut, ob man nicht statt/zusätzlich zu dem einfachen Heightmapping auch Normalmapping einbauen könnte?) Ich bin echt mal auf's Update gespannt.

Kitty Hello

Zieh dir ein Update. Ist schon oben. Ich lad im Showroom noch ein Demo dazu.

BumbleBee

Hab mir das Update und die Shadow Demo gesaugt und muß sagen sieht
wirklich toll aus. Respekt.


Cheers
The day will come...

CPU Intel(R) Core(TM) i5-3570k, 3.4GHz, AMD Radeon 7800 , 8 GB RAM, Windows 10 Home 64Bit

Sebe

Gernot: Ganz, ganz grosses Lob! Als du sagtest das wird nicht so schnell kommen hätte ich nicht gedacht, dass du damit meinst es dauert nur etwa eine Woche O.o Was steht denn so als Nächstes auf der Liste?

P.S.: Wolltest du nicht mal bei der Demoversion auch 3D aktivieren? Denn ich bin jetzt mit einem alten Kollegen wieder in einem 2 Mann Team und er würde GLBasic bestimmt gerne testen.

Edit: Hmm, das Beispiel zu BumpMapping ist immer noch das alte mit Heightmap. Aber auf der Seite ist ein anderer Screen? Wahrscheinlich ist das Beispiel einfach nur nicht aktualisiert oder?

Kitty Hello

Das Bump-Bild ist von "Samples/3D/Light" gibt's das bei euch?

BumbleBee

Also ich hab das Bild

Cheers
The day will come...

CPU Intel(R) Core(TM) i5-3570k, 3.4GHz, AMD Radeon 7800 , 8 GB RAM, Windows 10 Home 64Bit

Kitty Hello

Das Programm: C:\Programme\GLBasic\Samples\3D\Lights\Lights.gbap
Gibt's das, oder muss ich's beilegen?

BumbleBee

Ja, bei mir gibt's das Programm in dem besagten Ordner, wo man mit
der Leertaste den Lichtmodus ändern kann.


Cheers
The day will come...

CPU Intel(R) Core(TM) i5-3570k, 3.4GHz, AMD Radeon 7800 , 8 GB RAM, Windows 10 Home 64Bit

Sebe

Das ist aber nach wie vor das alte Heightmapping (es wird eine graue Heightmap verwendet). Was ich meine ist Parallax Mapping http://www.firestorm.go.ro/case16.html oder auch Normal Mapping. Diese lassen sich nämlich mit NVidia Melody ganz einfach aus zwei Versionen des selben Modells erzeugen. Für Heightmapping habe ich noch nichts Vergleichbares gefunden.

P.S.: Sorry für meine lange Absens, ich war krank und meine Grafikkarte ist kaputt gegangen (GeForce 6800 GT). Bis sie repariert ist musste ich mir jetzt eine Übergangslösung anschaffen (Radeon X300 -.- als Student ist das Geld so knapp, naja in 4-8 Wochen hab ich ja meine alte Karte wieder). Grosses Lob an Gernot für die Vergünstigungen für Schüler und Studenten!

P.P.S.: Kann man BumpMapping und Echtzeitschatten gleichzeitig nutzen. Ich kannte die Schattendemo jedenfalls nicht dahingehend modifizieren, dass sie BumpMaps benutzt...

Kitty Hello

Ich bau mal VertexShader und Fragment Programs ein, dann kann man so high-end Zeug selbst machen.

Sebe

Witzigerweise braucht man dafür gar keine Vertex- und Pixelshader. Auf Basis eines Quellcodes aus dem Blitzforum habe ich selbst mal eine Normalmapping-Funktion in Blitz3D geschrieben. Den Code habe ich irgendwo auf einem USB Stick rumfliegen afaik. Aber das original 'Tutorial' ist hier: http://www.blitzforum.de/viewtopic.php?t=7356&highlight=dot++bumpmapping
Mit GLBasic bin ich leider noch nicht so weit, ausserdem vereinfachte das Blitz3D-Entity System viele Sachen beim Programmieren. Aber im Endeffekt müsste das obige Tutorial portierbar sein. Ich dachte nur es wäre vielleicht besser, wenn es direkt von GLBasic unterstützt wird. Shader sind imho keine gute Lösung. Wer die Mathematik hinter 3D nicht versteht (und deshalb GLBasic benutzt), der wird kaum dazu in der Lage sein einen anständigen Shader zu programmieren (trotzdem ist Shaderunterstützung natürlich ein nettes Feature).
Alternativ könntest du (Gernot) ja auch mal ein kurzes Tutorial online stellen, wo erklärt wird wie man diese Heightmaps erstellen kann. Mein erster Ansatz wäre jetzt gewesen, die Textur eines Objektes einfach per Gimp/Paint/etc. durch einen Graufilter laufen zu lassen. Sprich: Die Farben der Textur in Grauwerte umwandeln. Ob das allerdings die Idee der Stunde ist weiss ich nicht ;-)

Edit: Ok, ich habe einen ersten Ansatz für Heightmaps gefunden. Alles was man dazu braucht ist Gimp und Paint.

1. Schritt: Textur in Gimp laden
2. Schritt: Im Bearbeitungsfenster Bild -> Modus -> Graustufen
3. Schritt: bearbeitete Textur abspeichern und in Paint laden
4. Schritt: In Paint Bild -> Farben umkehren
5. Schritt: Heightmap abspeichern

Fertig. Nicht so toll wie die mitgelieferte Heightmap, aber sie funktioniert und das sollte es auch mit allen anderen Texturen.

Sebe

Sorry für Doppelpost: kann man BumpMapping und Echtzeitschatten gleichzeitig benutzen? Wenn ja, könntest du mal ein Beispiel posten? Ich habe es bisher nicht fertig gebracht. Wenn ich versuche, die Objekte aus dem Echtzeitschattenbeispiel zu Bumpmappen bekommen die Objekte nur einen Stich ins Lila/Blaue :-/

BumbleBee

Hi
                    Geh mal im Code bis hier
IF shadow
    X_SPOT_LT  -3, RGB(255,255,255), lx,ly,lz, -lx,-ly,-lz, 360
ELSE
                     Ersetze hier bei X_SPOT die 0 durch -1    
 
  X_SPOT_LT   0, RGB(255,255,255), lx,ly,lz, -lx,-ly,-lz, 360
  X_DRAWOBJ cube, 0
ENDIF

Dann ist das schöne Lila weg.
-1 für BumpMapping oder -2 für Cel-Shading

Cheers
The day will come...

CPU Intel(R) Core(TM) i5-3570k, 3.4GHz, AMD Radeon 7800 , 8 GB RAM, Windows 10 Home 64Bit

Sebe

Ist immer noch lila/blau:

Code (glbasic) Select
// --------------------------------- //
// Project: Shadows
// Start: Thursday, January 19, 2006
// IDE Version: 3.011


// konstante Werte / Constant values
LOCAL image, none, shadow, sphere, donut, cube, spot_ang, lmode, phi, lx
LOCAL ly, lz, i, psi, px, py, pz, j

none = -1
image = 0

donut  = 0
cube   = 1
sphere = 2
X_LOADOBJ "sphere.ddd", sphere
X_LOADOBJ "donut.ddd", donut
X_LOADOBJ "cube.ddd", cube


// Grafiken laden / load graphics
LOADSPRITE      "image.bmp", image
LOADBUMPTEXTURE "bump.bmp",  bump
LOCAL mx, my, b1, b2 // compiler warning

WHILE TRUE
// naja... / well...
mx = mx + MOUSEAXIS(0)
// MOUSESTATE mx, my, b1, b2

// 1000 ist weit genug hier / 1000 is far enough here
X_MAKE3D 1, 1700, 45

// ein Winkel für alles / one angle for everything
phi = GETTIMERALL() / 250

// eine Lichtposition / a light position
lx = SIN(-phi*3)*300
ly = 20 //(SIN(3*phi)-COS(4*phi))*100
lz = COS(-phi*3)*300

// Maus X=drehen / Mouse X=turn
X_CAMERA 400*COS(mx),120,400*SIN(mx), 0,0,0

// Licht als Punkt zeichnen / Draw light as dot
X_DOT lx,ly,lz,32,RGB(255,255,255)

// Texture setzen / Set texture
X_SETTEXTURE image, bump

FOR shadow = 0 TO 1
X_CULLMODE 1

IF shadow
X_SPOT_LT  -3, RGB(255,255,255), lx,ly,lz, -lx,-ly,-lz, 360
ELSE
X_SPOT_LT   -1, RGB(255,255,255), lx,ly,lz, -lx,-ly,-lz, 360
X_DRAWOBJ cube, 0
ENDIF

// Ringelreihen / ring-a-ring-a-roses
FOR i=0 TO 5
psi = phi + i/6*360
px = SIN(psi)*100
py = 0 // COS(psi)*50
pz = (SIN(psi)+COS(psi)*2)*120
// bewegen und bisserl drehen / move and rotate a bit
X_MOVEMENT px, py, pz
X_ROTATION 90, 1,0,0
X_ROTATION psi*20, 0,1,0
X_DRAWOBJ donut,0
NEXT
X_MOVEMENT 0,0,0
X_DRAWOBJ sphere,0
NEXT // shadow

// Schatten zeichnen / draw shadows
X_SPOT_LT  -3, 0, 0,0,0, 0,0,0, 0
X_SPOT_LT   3, 0, 0,0,0, 0,0,0, 0


// zum Zurechtfinden / for navigation
X_DRAWAXES 0,0,0
X_MAKE2D
PRINT my, 0,0
SHOWSCREEN
WEND