miniB3D extended Version

Kommentare anzeigen Worklog abonnieren

Worklogs miniB3D extended Version

Wo ist nur die Zeit geblieben ?

Mittwoch, 3. Dezember 2008 von klepto2
Tja, hat wohl doch etwas länger mit einem neuen Worklogeintrag gedauert.

Da ich vor 2 Wochen eine Stelle als Entwickler angefangen habe und dieser unter der Woche meine ganze Zeit in anspruch nimmt, werden wohl viele geplante Features erstmal auf Eis gelegt. Aber keine Panik, ich werde versuchen diese nach und nach mit einzubauen. Als erstes werde ich jedoch versuchen eine lauffähige Version zu diesem Wochenende fertigzustellen und zum Download anbieten.

Zu den Dingen aus dem letzten Worklog werden auf jedenfall noch 3 weitere Features bis Dato fertig (nicht komplett , aber lauffähig) :

Zum 1. Terrain :

user posted image

Anmerkung:
Die Bäume sind Resultat aus der Einbindung der (noch) Winonly treelib.dll und sind zur laufzeit erstellt.
Die treelib selbst wird erstmal nicht den weg in das offizielle Release finden.
Das Terrain selbst kann theoretisch eine beliebig große Auflösung haben. Das Terrain ist ein Hybrid aus ChunkedLOD und gestreamten Terrain. Das Streaming wird durch ein vorheriges kompilieren der heightmap erreicht. Dabei wird die Heightmap in ihre Rohdaten zerlegt und nur die reinen Höhendaten werden gespeichert. Diese können nun gestreamed werden. Getestet habe ich das ganze mit heightmaps von 16k * 16k , wobei die Heightmap im PNG Format eine Größe von 190MB hat.

Zu den üblichen Texturmöglichkeiten gibt es noch die Möglichkeit das Terrain in Echtzeit texturieren zu lassen (per GLSL) dafür gibt man verschiedene Layer an zb so:

Code: [AUSKLAPPEN]

Global TerrainMaterial:TTerrainMaterial = New TTerrainMaterial
Terrainmaterial.CreateTerrainMaterial()
Terrainmaterial.SetTerrain(Terrain)
Local Layer:TTexLayer = TTexLayer.Create(LoadTexture("textures/sand_01.jpg") , 0.0 , 0.15 , 0 , 60)
Local Layer2:TTexLayer = TTexLayer.Create(LoadTexture("textures/grass_2.jpg") , 0.15 , .9 , 0 , 60)
Local Layer3:TTexLayer = TTexLayer.Create(LoadTexture("textures/strata.jpg") , 0.0 , 1.0 , 60 , 90)
Local Layer4:TTexLayer = TTexLayer.Create(LoadTexture("textures/MossyGround.BMP") , 0.15 , .9 , 59 , 60)
 
TerrainMaterial.Addlayer(Layer)
TerrainMaterial.Addlayer(Layer2)
TerrainMaterial.Addlayer(Layer3)
TerrainMaterial.Addlayer(Layer4)
TerrainMaterial.Addlayer(Layer)

TerrainMaterial.Activate()


Wobei ein Layer aus einer Textur, aus der relativen Höhe (prozentuales Verhältniss zum höchsten Punkt) 0 - 1.0 und einem Slope zwischen 0 - 90 besteht. Mit obigen Beispiel erhält man zb sowas:

user posted image


Dadurch das das Terrain besser die einzelnen Chunks durch einen Quadtree verwaltet werden, gibt es die Möglichkeit Entity/Mesh Layer in dem Terrain anzulegen. Diese werden aus der üblichen Berechnungsroutine für Culling ausgenommen und werden zusammen mit dem Terrain ausgewertet. Dadurch lassen sich mit verhältnissmäßig wenig Aufwand Dinge wie Wälder oder Grass Layer realisieren, da diese nicht mehr einzeln auf Sichtbarkeit sondern in einem Cluster auf Sichtbarkeit überprüft werden.


Nun noch kurz zu den 2 weiteren Features:

1. Globale Shader: Im Prinzip ähnlich den normalen Shadern, nur das bei globalen Shadern die komplette Szene mit dem Shader belegt wird. Dabei wird es mehrere Möglichkeiten geben.
zb:
- komplett ohne brushes rendern (für depth oder normal maps)
- ohne Lighting etc.

Multipass wäre in diesem Fall auch Möglich, das muss aber dann erstmal selber eingebaut werden, da mir leider die Zeit im Moment fehlt.

2. Incbin und Stream Support:
Modelle und Texturen können komplett per incbin geladen werden oder alternativ aus einem Stream (zb: KLPacker o.ä) bei letzterem muss ein vorher ein Texturenverzeichniss angelegt werden (im Prinzip eine TMap) dort müssen zuvor (vor dem laden des Modells) alle relevanten Texturen geladen werden.

So, ich hoffe das reicht fürs erste und ebenso hoffe ich das ich meinen Termin auch einhalten kann Wink

Bis dann klepto2

Q3 BSP Maps mit Bezier Patches :)

Montag, 29. September 2008 von klepto2
Kurzer Zwischenbericht:

Mir ist es gelungen die letzten bugs aus den Q3 Bezierpatch code zu entfernen, somit unerstützt minib3d nun fast alles (an die einzelnen Shader werde ich mich demnächst ransetzen) aus den BSP Maps Smile

Image:
user posted image

Weitere News folgen in Kürze Smile

Es tut sich was ;)

Donnerstag, 25. September 2008 von klepto2
Lange ist es her, das ich über minib3d extended geschrieben habe,
doch nun werde ich nach mehreren Anfragen mal öfters (hoffentlich)
meinen Worklog aktualisieren.

Was gibt es neues?
Viele haben ja mitbekommen, das die Interface Version (DX/OpenGL) erstmal auf Eis gelegt wurde.
Darum habe ich wie von Abrexxes in einer News erwähnt mit einer neuen Version angefangen die
viele Features und Verbesserungen aus der Interface Version beinhalten wird.

Darunter folgende:

-- Verbesserte Stencil Shadows (bugfreier, schneller, geringerer Speedverlust bei animierten Meshes)
-- Komplett neu überarbeitete Physik integration
-- Echtes Render to Texture mittels FBO, ein Fallback ist ebenfalls integriert
-- fertige Loader für : B3D,3DS,MD2,MD3(mit tags),BSP (noch ohne BSP Trees), OBJ
-- Einfachere Shaderunterstützung
-- Volle Max2D unterstützung. Es wurden einige Bugs aus den beiden bis jetzt verwendeten Methode entfernt
-- Viele Helper Functions wie zb: GetFPS(),GetDelta()
-- Zusätzlich integrierte Mathe Lib mit Vektoren, Matrizen etc
-- Benutzerdefinierte Clipplanes

uvm.

Viele Dinge sind noch geplant, wie der Einbau des Terrain systems aus der Interface Version oder ein PostFX system und Shadowmapping.

Doch genug der Worte hier erstmal ein paar screenshots Wink

Terrainsystem (Heightmap = 4096*4096 ) mit 33Mio potentiellen Dreiecken

user posted image

Terrain und Wasser (Reflections und Refraction)
user posted image

BSP Map Vergleich: Mit Q3Shader und rechts ohne
user posted image

2. Beispiel BSP
user posted image

So, das soll es erstmal gewesen sein, demnächst wird es noch einen detailliertern Eintrag zu der neuen Shader und Physik integration geben und dann werde ich auch mal etwas näher auf andere neue Funktionen eingehen.

Kommentare sind sehr willkommen Smile

Erster Eintrag

Dienstag, 8. Januar 2008 von klepto2
Nun wo soll ich anfangen. Wie viele wissen hat simonh vom BRL Team eine OpenSource OpenGL 3D Engine mit dem namen minib3d angefangen. Ziel dieser Engine ist es möglichst kompatibel mit dem original B3D zu
sein.
So irgendwann habe ich einfach mal angefangen kleine Zusätze für mich einzubauen, als diese immer mehr wurden dachte ich mir, warum nur für mich, vielleicht könnten sie andere ja auch gebrauchen. Also entstand
'minib3d extended'.

Mittlerweile brachte simonh seine neue Version 0.452 mit einigen Neuerungen raus und ich entschloss mich nochmal alle Extensions von neuem zu integrieren. Allerdings nach Absprache mit simonh wird es das letzte mal sein, da die nächsten Änderungen nur noch von kleiner und übersichtlicher natur sind und sich somit leicht
integrieren lassen.
Mittlerweile gibt es eine Wiki, die von Ironstorm gesponsert wurde. Diese wurde zuletzt nicht gerade gepflegt, was sich aber dank Ironstorm in den letzten Wochen geändert hat. Vielen dank dafür. Wer sich also für minib3d interessiert, dort gibt es die Downloads, eine Commandreference und vieles mehr. Ein Besuch lohnt sich auf jeden Fall.

user posted image

Also was gibt es neues von der extended Front:

Abgesehen von dem Occlusionmanager ist bereits alles wieder auf dem alten Stand.

Besonderheiten:
-->Terrainsystem konnte nochmal um ca. 50-60% beschleunigt werden
-->Das Shadersystem wurde vom Brushsytem getrennt und hat nun ein sogenanntes ShaderMaterial
Dadurch können zu den bereits eingebauten GLSL Shadern später noch CG Shader hinzukommen
-->Newton hat auch ein paar neuerungen erfahren (Vehicles und Buoyancy system)

Woran ich gerade arbeite:
-->Offscreen RendertoTexture (Bild siehe unten)
-->Shadowmapping(Ebenfalls Bild unten)
-->Postscene effect system (sowohl fullscreen als auch per entity base)
-->Projected Textures
-->vieles mehr

Bilder:

Ein Bild mit einem Terrain und einem Wassershader mit Reflection und Refraction
(in der Scene werden durch ca. 800000 Triangles angezeigt)
user posted image

Ein Bild von dem render to texture sample allerdings hier mit echtem rtt auf eine 2048*2048 Auflösung
user posted image

Hier die ersten versuche mit Shadowmapping (bitte etwas nachsicht, die Depthmap hat nur eine Auflösung von 512*512)
user posted image

Und zu guter letzt nochmal ein kleines Video
user posted image

Ich hoffe bald gibt es noch mehr zu berichten.

Bis dann euer klepto2.