BSM_Renderer V1.6 Anleitung:

Diese Funktions-Bibliothek wurde erstellt, für Blitzbasic3D V1.90 und höher. BSM steht für BumpmappingShadowMap. Sie generiert spezielle Cubemaps um Dot3-Bumpmapping leichter zu handhaben.
Vorweg etwas zur Funktionsweise. Die Arbeitsweise der Bibliothek basiert auf der Verwendung spezieller Farbverläufe. Siehe nächstes Beispiel:

Der Farbverlauf auf dieser Textur hat dieselben Farben und Ausrichtungen wie ein Dot3-Bumpmap. Wenn dieser Verlauf, als unterhalb liegender Layer, mit einer Dot3-Textur kombiniert wird, erhält man folgendes Resultat.

Das Licht scheint von der Mitter der Textur auszugehen. Diesen Effekt macht sich die Funktionsbibliothek zunutze.
Eine speziell erstellte Textur mit diesem Farbverlauf und Alpha-Kanal wird auf eine grau gefärbte Kugel texturiert. dieses mittlere Grau (128,128,128) lässt Dot3-Texturen komplett schwarz erscheinen.

Die Kugel wird umgedreht ( Flipmesh ) und eine Kamera wird in der Mitte plaziert. Nun werden 6 Bilder gerendert. Eins für jede Grundrichtung.

Diese 6 Bilder werden an die Cubemap vergeben.

Diese Cubemap kann nun an jedes beliebige Objekt vergeben werden. Sie sollte als erster Layer vergeben werden. Darüber wird nun die Dot3-Textur gelegt. Als Ergebnis erhält man eine korrekt beleuchtete Bumpmap.


Diese Funktionsbibliothek kann nun diese Cubemaps für Sie handhaben. Man erstellt einfach per Befehl eine solche Cubemap und vergibt Lichtquellen. Die Bibliothek überprüft die Beleuchtungswinkel und aktualisiert die Cubemaps gegebenfalls.

Liste der Befehle:

BSM_Init
BSM_Set_MainCamera
BSM_Create_Cmap
BSM_Create_Smap
BSM_Free_Map
BSM_SetLight
BSM_Set_AmbLight
BSM_Z_Offset
BSM_Set_Angle
BSM_Set_Auto
BSM_Set_Specular_Texture
BSM_Set_Specular_Color
BSM_Set_Specular_Size
BSM_Set_Updates
BSM_Update
BSM_Update_All
BSM_End
BSM_Set_Renderpos
BSM_Debugger

Zusätzliche Befehle:

BSM_Make_Specular
BSM_Dot3_to_Gloss
BSM_Create_ColorTexture
BSM_Set_TextureColor
BSM_Free_ColorTexture


Änderungen in Version 1.6:

Hinzugefügt: BSM_Set_AmbLight
Hinzugefügt: BSM_Create_ColorTexture
Hinzugefügt: BSM_Set_TextureColor
Hinzugefügt: BSM_Free_ColorTexture
Geändert: Hilfsobjekte für Specular-Berechnung angepasst, zur besseren Darstellung farbiger Beleuchtung von Bumpmaps.

Änderungen in Version 1.5:

Die Funktionsbibliothek wurde um Specularmapping erweitert, um Glanzlichter auf Objekten darzustellen.
Hinzugefügt: BSM_Create_Smap
Hinzugefügt: BSM_Set_Specular_Texture
Hinzugefügt: BSM_Set_Specular_Color
Hinzugefügt: BSM_Set_Specular_Size
Hinzugefügt: BSM_Make_Specular
Hinzugefügt: BSM_Dot3_To_Gloss
Hinzugefügt: BSM_Set_Updates zur besseren Kontrolle der Performance
Geändert: BSM_Free_Cmap wurde in BSM_Free_Map umbenannt, da dieser Befehl nun für beide Cubemap-Arten benutzt wird
Behoben: Diverse kleinere Macken. Performance optimiert

BSM_Init ( texturdatei )

Beschreibung: Initialisiert die BSM_Funktionen. Es muss eine dieser speziellen Verlaufs-Texturen vergeben werden, welche zum Erstellen der Cubemaps benutzt wird.

texturdatei:
Die spezielle Verlaufs-Textur. Eine befindet sich in diesem Archiv.

back

BSM_Set_MainCamera ( kamera )

Beschreibung: Übergibt die eigentliche Haupt-Kamera des Programms an die Bibliothek. Das kann wahlweise erfolgen. Vor Berechnen der Cubemaps muss die Haupt-Kamera versteckt, und nach dem Berechnen wieder sichtbar gemacht werden. Dies kann von der BSM-Bibliothek erledigt werden oder vom Hauptprogramm selbst.

kamera:

Sollte die Haupt-Kamera des Programms sein

back



BSM_Create_Cmap (Objekt , [flag] , [layer])

Beschreibung: Erstellt eine BSM_Cubemap und gibt den Textur-Handle zurück. Die Textur kann so an weitere Objekte übergeben werden.

Objekt:

Das Objekt, das die BSM-Cubemap erhält. Die Position und Ausrichtung des Objekts relativ zur Lichtquelle wird benötigt, um die BSM_Cubemap korrekt auszurichten.

flag:
Optional. Wenn flag auf 1 gesetzt wird, wird die BSM-Cubemap beim Erstellen gleich an das Objekt übergeben. Sie können es auch selbst erledigen. Voreingestellt ist 0.
layer: Optional. Wird die BSM-Cubemap gleich mit diesem Befehl an das Objekt übergeben, wird dieser Layer verwendet. Voreingestellt ist 0

back


BSM_Create_Smap (Objekt , [grösse] , [flag] , [layer])

Beschreibung: Erstellt eine Specular_Cubemap und gibt den Textur-Handle zurück. Die Textur kann so an weitere Objekte übergeben werden.

Objekt:

Das Objekt, das die Specular-Cubemap erhält. Die Position und Ausrichtung des Objekts relativ zur Lichtquelle wird benötigt, um die Specular_Cubemap korrekt auszurichten.

grösse:
Optional. Legt die Texturgrösse der Specular-Cubemap fest. Voreingestellt ist 256x256 Pixel.
flag: Optional. Wenn flag auf 1 gesetzt wird, wird die Specular-Cubemap beim Erstellen gleich an das Objekt übergeben. Sie können es auch selbst erledigen. Voreingestellt ist 0.
layer:

Optional. Wird die Specular-Cubemap gleich mit diesem Befehl an das Objekt übergeben, wird dieser Layer verwendet. Voreingestellt ist 0

back


BSM_Free_Map ( handle )

Beschreibung: Löscht eine vorher erstellte BSM-Cubemap oder Specular-Cubemap. Wurde die Cubemap an ein Objekt vergeben, bleibt sie auf diesem erhalten. Man kann aber nicht mehr auf sie zugreifen.

handle:

Ein gültiges BSM-Cubemap oder Specular-Cubemap handle.

back


BSM_SetLight (handle , licht , nummer , [typ] , [helligkeit#])

Beschreibung:Übergibt eine Lichtquelle für diese BSM-Cubemap. Die relative Position und Ausrichtung zwischen dieser Lichtquelle und dem Objekt, welches für diese BSM-Cubemap übergeben wurde, wird benutzt um die BSM-Cubemap auszurichten.

handle:

Ein gültiges BSM-Cubemap oder Specular-Cubemap handle.

licht: Ein Objekt, das die Lichtquelle darstellt. Es kann eine Blitz3D-Lichtquelle sein. Muss aber nicht.
nummer: Die Nummer der Lichtquelle zw. 1 und max. Anzahl der Lichtquellen pro BSM-Cubemap. Die max. Anzahl ist in der Konstante "bsm_lights"festgelegt. Voreingestellt ist 8.
typ:

Optional. Typ der Lichtquelle. 1= paralleles Licht. 2= punktförmige Lichtquelle. Voreingestellt ist 2

helligkeit#: Optional. Legt die Intensität der Lichtquelle zw. 0 (0%) und 1 (100%) fest. Voreingestellt ist 1
back

BSM_Set_AmbLight (handle , ambient#)

Beschreibung: Legt die Stärke des ambienten Lichts für diese BSM-Cubemap fest. Ein Wert grösser 0 bewirkt, das der Hintergrund der BSM-Cubemap ins Blaue verfärbt wird, was wiederum zu einer Beleuchtung der Bumpmap entlang des Z-Achsen Vektors, ausserhalb des von den Lichtquellen beeinflussten Bereichs, führt. Leider kann hier keine konkrete Farbe angegeben werden, sondern nur ein Helligkeitswert.

handle: Ein gültiges BSM-Cubemap handle.
ambient#:

Wert zw. 0 ( kein ambientes Licht) und 1 ( volle abmiente Beleuchtung)

back

BSM_Z_Offset (handle , winkel#)

Beschreibung: Das Prinzip der BSM-Cubemaps hat ein kleine Einschränkung. Wenn die BSM-Cubemap und die Dot3-Textur nicht dieselbe Ausrichtung haben, sieht das Endergebnis etwas merkwürdig aus.

Bei dieser Kugel haben die BSM-Cubemap und die Dot3-Textur dieselbe Ausrichtung. Hier wurde die Dot3-Texur um 180 Grad gedreht. Die Kugel und die Textur scheinen jetzt ihr Licht aus verschiedenen Richtungen zu erhalten.

Die Bibliothek ist in der Lage, Differenzen in der Z-Ausrichtung zw. BSM-Cubemap und Objekt zu kompensieren, allerdings nicht, wenn die Dot3-Textur selbst gedreht wurde. Für den Fall kann man einen Offset-Winkel festlegen, der die Differenz ausgleicht.

handle: Ein gültiges BSM-Cubemap handle.
winkel#:

Winkel zw. 0 und 360 Grad. Für das obige Beispiel müsste mit BSM_Z_Offset ein Winkel von 180 Grad übergeben werden.

back

BSM_Set_Angle (handle , winkel#)

Beschreibung: Legt die minimale Winkelabweichung fest. Wird die Differenz zw. dem bisherige relativen Winkel, zw. Lichtqellen und Objekt, und aktuellem Winkel grösser als die min. Winkelabweichung, wird die BSM-Cubemap aktualisiert. Dies spart Rechenzeit ein, da die Cubemap nun nicht unbedingt bei jedem Frame neu gerendert wird. Voreingestellt ist 1 Grad.

handle: Ein gültiges BSM-Cubemap oder Specular-Cubemap handle.
winkel#:

Winkel zw. 0 und 360 Grad.

back

BSM_Set_Auto( handle , flag )

Beschreibung: Legt fest, ob die BSM-Cubemap automatisch aktualisert wird oder nicht. Ist 0 eingestellt muss die BSM-Cubemap manuell aktualisiert werden. Voreingestellt, beim Erstellen der BSM-Cubemap, ist 1.

handle:

Ein gültiges BSM-Cubemap oder Specular-Cubemap handle.

flag: Aktiviert/Deaktiviert automatisches Aktualisieren für diese BSM-Cubemap.
back

BSM_Set_Specular_Texture (handle , lichtnummer , textur)

Beschreibung:Übergibt eine Textur für das Glanzlicht für eine bestimmte Lichtquelle für diese Specular-Cubemap. Die verwendete Textur hat sowohl Auswirkungen auf das Aussehen des Glanzlichts, als auch auf das Erscheinungsbild der Oberfläche, auf der das Glanzlicht abgebildet wird.

handle:

Ein gültiges Specular-Cubemap handle.

lichtnummer: Nummer der Lichtquelle die durch die Textur auf der Cubemap dargestellt wird
textur: Ein gültiges Textur-Handle einer Textur die geladen oder erstellt wurde
back

BSM_Set_Specular_Color (handle , lichtnummer , r , g , b)

Beschreibung:Legt die Farbe des Glanzlichts für eine bestimmte Lichtquelle für diese Specular-Cubemap fest.

handle:

Ein gültiges Specular-Cubemap handle.

lichtnummer: Nummer der Lichtquelle deren Farbe geändert wird
r,g,b: Rot- , Grün- und Blau-Anteil der Farbe zw. 0 und 255
back

BSM_Set_Specular_Size (handle , lichtnummer , x# , y#)

Beschreibung:Legt die Grösse des Glanzlichts für eine bestimmte Lichtquelle für diese Specular-Cubemap fest.

handle:

Ein gültiges Specular-Cubemap handle.

lichtnummer: Nummer der Lichtquelle deren Grösse geändert wird
x# , y#: Die Grösse des Glanzlichts.
back

BSM_Set_Updates ( anzahl )

Beschreibung: Legt fest, wieviele Cubemaps , mit BSM_Update_All ( ) , maximal pro Aufruf ( pro Frame oder Schleifendurchlauf ) aktualisiert werden. Voreingestellt ist 0, das heisst alle aktiven Cubemaps, für die auch automatisches Aktualisieren aktiviert ist, werden überprüft.

anzahl:

Die Anzahl an BSM-Cubemaps und Specular-Cubemaps, die maximal pro Frame aktualisiert werden sollen.

back

BSM_Update ( handle , [flag])

Beschreibung: Aktualisiert diese BSM-Cubemap. Winkelabweichungen, die mit BSM_Set_Angle festgelegt wurden, werden ignoriert. Sehr nützlich, wenn Objekt und Lichtquellen ihre Position und Ausrichtung während des Programmablaufs nicht ändern.

handle:

Ein gültiges BSM-Cubemap oder Specular-Cubemap handle.

flag: Optional (1/ 0). Aktiviert/Deaktiviert, ob die Hauptkamera, während der Aktualisierung, von der Bibliothek versteckt wird oder nicht. Voreingestellt ist 0.
back

BSM_Update_All ( [flag] )

Beschreibung: Aktualisiert alle BSM-Cubemaps, für die automatische Aktualisierung festgelegt wurde. Winkelabweichungen, die mit BSM_Set_Angle festgelegt wurden, werden beachtet. Der Befehl sollte in der Hauptschleife benutzt werden bevor Renderworld() augerufen wird. Wenn der BSM_Debugger aktiviert ist, gibt dieser Befehl zurück, wieviele BSM_Cubemaps bei diesem Aufruf aktualisiert wurden.

handle:

Ein gültiges BSM-Cubemap oder Specular-Cubemap handle.

flag: Optional (1/ 0). Aktiviert/Deaktiviert, ob die Hauptkamera, während der Aktualisierung, von der Bibliothek versteckt wird oder nicht. Voreingestellt ist 0.
back

BSM_End( )

Beschreibung: Löscht alle mit BSM erstellte Cubemaps und Hilfsobjekte und gibt den Speicher wieder frei.
Hinweis: BSM-Cubemaps oder Specular-Cubemaps welche an Objekte vergeben wurden, verbleiben auf diesen, können aber nicht mehr geändert werden.
kleiner Tipp: Wenn Sie eine Szene generieren, die sich, inklusive aller Lichter, nach der Erstellung nicht mehr ändert, können Sie nach dem Erstellen und Aktualisieren der BSM-Cubemaps, BSM_End() aufrufen. Die BSM-Cubemaps verbleiben auf den Objekten und sie sparen Rechenleistung und Speicher.

back

BSM_Set_Renderpos( x , y , z )

Beschreibung: BSM nutzt eine oder mehrere texturierte Kugeln und eine eigene Kamera um die BSM-Cubemaps zu erstellen. Diese müssen natürlich irgendwo plaziert werden. In diesem Bereich sollten sich keine anderen Objekte befinden. Voreingestellt sind die Koordinaten 0,1000000,0

x , y , z

Position, wo die BSM-Hilfsobjekte plaziert werden sollen.

back

BSM_Debugger ( flag )

Beschreibung:Aktiviert den BSM internen Debugger. Er gibt detailierte Fehlermeldungen zurück.

flag:

0 = Debugger wird deaktiviert.
1 = Eine Runtime-Fehlermeldung wird erzeugt und das Programm bricht ab.
2 = Fehlermeldung wird ins Debuglog geschrieben.
3 = Fehlermeldung wird ins Debuglog geschrieben und das Programm gestoppt.

 
back

BSM_Make_Specular ([grösse] , [flag] , [modus] , [start#] , [frequenz#] , [min#] , [max#])

Beschreibung:Erstellt eine Textur mit einem ringförmigen Wellenmuster und gibt den Textur-Handle zurück. Alle Parameter sind optional. Ohne Parameter wird ein normaler verwaschener Fleck erzeugt, der als Glanzlicht geeignet ist. Hier ein paar Parameter-Beispiele.

bsm_make_specular()
bsm_make_specular(128,9,1,0.5,1,0.25,1)
bsm_make_specular(128,9,0,0,1,0,1)
bsm_make_specular(128,9,2,0,0.5,0,1)

Die Funktion dient hauptsächlich als Ersatz, falls einmal keine geeigneten Texturen für Glanzlichter zur Verfügung stehen.

grösse:

Texturgrösse wie zB 64,128 oder 256 Pixel. Voreingestellt ist 256

flag: Alle Standard Blitz3D Texturflags. Voreingestellt ist 1+8
modus: Art der Wellenform 0= Sinus, 1= Dreieck, 2= Rechteck. Voreingestellt ist 0.
start#:

Startwert der Welle. Voreingestellt ist 0

frequenz#: Anzahl der Wellen, die dargestellt wird. Voreingestellt ist 0.5
min#:

minimale Helligkeit des Wellentals. Voreingestellt ist 0

max#: maximale Helligkeit des Wellenbergs. Voreingestellt ist 1
back

BSM_Dot3_to_Gloss (textur , [modus] , [new] , [flag])

Beschreibung: Konvertiert eine Dot3-Bumpmap in eine spezielle Dot3-Bumpmap, die für Gloss-Mapping unter Zuhilfenahme von Specular-Cubemaps geeignet ist.

ursprüngliche Dot3-Textur
Daraus errechnete Gloss-Textur

Der Algorythmus in dieser Funktion separiert den Blau-Kanal der Textur, da dieser die Beleuchtungs-Richtung entlang der Z-Achse repräsentiert. Das daraus resultierende Graustufenbild wird dann nach rot und grün umgewandelt. Die so erstellten Texturen werden für Glossmapping benutzt, indem man sie als Layer oberhalb einer Specular-Cubemap verwendet. Die Glanzlichter der Specular-Cubemap werden rötlich oder grünlich eingefärbt, um auf der Glossmap unterschiedliche Effekte hervorzurufen.

textur:

die Textur, die konvertiert werden soll

modus: Optional. Legt die Berechnungsqualität fest. 1 erzeugt bessere Ergebnisse, dauert aber länger. Voreingestellt ist 1
new: Optional. Wird new auf 1 gesetzt, wird eine neue Textur erzeugt und deren Handle zurück gegeben.
flag:

Optional. Alle Standard Blitz3D Texturflags.Wird benutzt, wenn new auf 1 gesetzt wird. Voreingestellt ist 1+8

back

BSM_Create_ColorTexture ( r , g , b , [flag])

Beschreibung: Erzeugt eine 1 Pixel grosse Textur, die entsprechend den RGB-Werten eingefärbt wird und gibt das Texturhandle zurück.
Diese Texturen können benutzt werden, um farbige Beleuchtung zu simulieren, wo keine ist, bzw. keine dargestellt werden kann. zB bei Dot3-Bumpmaps.

r,g,b:

Rot,Grün und Blau Komponenten der Farbe, welche die Textur haben soll

flag:

Optional. Alle Standard Blitz3D Texturflags. Voreingestellt ist 1

back

BSM_Set_TextureColor ( textur , r , g , b )

Beschreibung: Ändert die Farbe der Textur, ohne sie neu zu erstellen

textur:

Texturhandle einer Textur, die zuvor mit BSM_Create_ColorTextur erstellt wurde.

r,g,b:

Rot,Grün und Blau Komponenten der Farbe, welche die Textur haben soll

back

BSM_Free_ColorTexture ( textur )

Beschreibung: Löscht eine Textur, die zuvor mit BSM_Create_ColorTextur erstellt wurde.

textur:

Texturhandle einer Textur, die zuvor mit BSM_Create_ColorTextur erstellt wurde.

back

 

Diese Funktionsbibliothek ist Freeware. Die Nutzung erfolgt auf eigene Gefahr. Es wird keine Haftung für event. Schäden oder Datenverluste übernommen. Die Bibliothek kann in eigenen kommerziellen und nicht-kommerziellen Projekten verwendet werden. Ein Eintrag in den Credits des Projekts wäre schön, ist aber nicht zwingend notwendig. Es steht jedem frei diese Bibliothek als Freeware weiter zu verbreiten. Es ist nicht erlaubt diese Bibliothek zu verkaufen oder innerhalb einer käuflich zu erwerbenden Software-Kollektion zu verbreiten. Es ist ebenfalls nicht erlaubt die Bibliothek oder den Inhalt des Zip-Archivs zu ändern, und diese geänderte Fassung zum Download anzubieten. Es darf nur das unveränderte Original-Archiv zum freien Download angeboten werden. Geänderte Versionen werden nur von mir veröffentlicht.

Falls jemand Fehler findet oder Vorschläge für Verbesserung hat, einfach eine Email an mich schicken. ( siehe unten)

Viel Spass damit

Shodan

www.selfmadegames.de

heinz-helge@gmx.de