Voxelrenderer für Terrains
Übersicht

![]() |
NoobodyBetreff: Voxelrenderer für Terrains |
![]() Antworten mit Zitat ![]() |
---|---|---|
Als kleines Sonntagsprojekt habe ich mich daran gemacht, einen kleinen Voxelrenderer zu schreiben.
In einem Voxelrenderer bestehen die Objekte, anders als in einem Rasterizer, aus einzelnen Voxeln, die eigentlich nichts anderes als kleine Würfel sind (Voxel = Volumetric Pixel). Es werden also nicht Dreiecke gezeichnet, sondern dreidimensionale Pixel. Voxelrenderer wurden in früheren Spielen eingesetzt, als noch nicht von 3D - Hardwarebeschleunigung ausgegangen werden konnte. In letzter Zeit sind sie wieder am kommen (unter anderem Crysis verwendete Voxelrendering für die Terrains). Meine Version ist relativ simpel gehalten, um noch einigermassen flüssig zu laufen (B3D ist halt nicht die schnellste Sprache) und beschränkt sich ausserdem nur auf Terrains. Das Terrain ist relativ niedrig aufgelöst und sieht daher sehr retro aus: ![]() Die Konstanten im Code sind relativ selbsterklärend: ANGLEOFVIEW beschreibt, wie gross der Sichtwinkel ist (bei grossen Zahlen sieht man mehr, allerdings ist alles sehr gequetscht), STEPSIZE bestimmt, wie genau gerendert werden soll (je kleiner, desto genauer, allerdings auch langsamer) und DIST_NEAR und DIST_FAR beschreiben die Sichtweite der Kamera, ungefähr gleich wie die Parameter bei CameraRange ![]() Der Code: BlitzBasic: [AUSKLAPPEN] Const GWIDTH = 800 Gesteuert wird mit den Pfeiltasten, mit der Leertaste lässt sich ausserdem die Interpolation ein- und ausschalten (standardmässig an, ohne ist es aber schneller). Damit das Ganze einigermassen gut aussieht, verwende ich eine Heightmap und eine Textur für das Terrain - entweder sucht man sich selber entsprechende Grafiken, oder man nimmt dieselben, die ich verwendet habe: Download Das Paket enthält ausserdem noch eine .exe, damit man es direkt testen kann. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
AnniXa |
![]() Antworten mit Zitat ![]() |
---|---|---|
... also sowas als sontagsprojekt :O ich hätte für sowas 3 wochen gebraucht und es wäre nicht so toll. | ||
|moonForge|
Ich bin Pokémon Meisterin seit 1998! |
![]() |
kriD |
![]() Antworten mit Zitat ![]() |
---|---|---|
Noobody is ja auch highskilled, wie man sieht! (nicht falsch verstehen, AnniXa.)
richtig krass das ding.. ob man damit geschwindigkeit gegenüber normalem rendering rausholen kann? lg kriD |
||
Wenn ich du wäre, wäre ich lieber ich! |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
OMFG
Sieht ja so was von cool aus ![]() Blicke den Code nicht ganz durch, werd aber da mal fps messen, interessiert mich ^^ |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Genialer Retro-Style! Man glaubt gar nicht, dass das nur 2D ist.
Edit: Läuft bei mir aber grad mal mit 10 FPS... |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
- Zuletzt bearbeitet von Nicdel am Mo, Apr 27, 2009 18:18, insgesamt einmal bearbeitet
![]() |
Blackside |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich komm einfach nicht über das: "als kleines Sonntagsprojekt" weg :O
Du hast aber auch ganz schön viele kleine Sonntagsprojekte oder?(Im Codearchiv wimmelts nur so von deinen Codes ![]() Aber dazu muss man natürlich sagen: Tolle Leistung! ![]() |
||
Hier sollte eigentlich eine Signatur stehen! |
![]() |
Chrise |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sehr geiles Ergebnis, auch wenn mir grad nicht einfallen würde, für was ich sowas brauchen sollte. Aber für Leute die Retro-sytle Games machen wollen, gibt es nichts besseres ^^ | ||
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet. |
![]() |
MikeDee |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich wünschte mir, ich könnte das auch -.-
Zitat: auch wenn mir grad nicht einfallen würde, für was ich sowas brauchen sollte. Aber für Leute die Retro-sytle Games machen wollen, gibt es nichts besseres
Wenn du die Voxel kleiner machst, z.B. auf Pixelgröße^^, dann kannst du auch solche Ergebnisse bekommen http://www.youtube.com/watch?v=VpEpAFGplnI dafür braucht man dann auch keine 3D-Karte und muss das ganze nicht mit einer Textur hinterlegen, sondern kann jedes Voxel einzeln Färben. So hab ich das ganze jedenfalls noch in erinnerung^^ |
||
Nicht wenige benutzen die Anonymität des Internets um berühmt zu werden. |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich blick den Code auch nicht wirklich aber hab ne voreilige Frage (Die sich am Ende vlt als dumm herausstellt aber es interessiert mich grad):
Warum zeichnest du mit Line? Deine Voxels sind doch alles Rechtecke? Oder hast es mit Rect schon getestet und wars dann aus welchem Grund auch immer langsamer? EDIT: Achso, das wird "Pixelspaltenweise" berechnet... Aber wär n Test mit Rect iwie möglich / sinnvoll? Ach bevor ichs vergesse: Trotz hohen Ressourcenanforderungen absolut faszinierend. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
MikeDee hat Folgendes geschrieben: Wenn du die Voxel kleiner machst, z.B. auf Pixelgröße^^, dann kannst du auch solche Ergebnisse bekommen
http://www.youtube.com/watch?v=VpEpAFGplnI Hehe, das ist dann doch etwas ausser Reichweite ![]() Der Code ist ja explizit auf Terrains ausgelegt, um jede Menge Voxel einzusparen, ausserdem ist die Kamerabewegung limitiert auf X, Y, Z und Drehung um die Y - Achse. Im Video kann man sich aber um alle Achsen drehen, ausserdem handelt es sich um ein komplexes Objekt und nicht so etwas einfaches wie ein Terrain. Um so etwas hinzubekommen, muss man massiv optimieren - wie der Titel schon sagt, wird das per Octrees erledigt. Dieser Renderer war ausserdem mal im c't und ist ungeheuer komplex - dass ich mit B3D so etwas hinbekommen würde, ist relativ unwahrscheinlich ![]() Eingeproggt hat Folgendes geschrieben: Warum zeichnest du mit Line? Deine Voxels sind doch alles Rechtecke?
Wenn man den Buffer vor dem zeichnen sperrt (LockBuffer ![]() |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
MikeDee |
![]() Antworten mit Zitat ![]() |
---|---|---|
Noobody hat Folgendes geschrieben: Dieser Renderer war ausserdem mal im c't und ist ungeheuer komplex - dass ich mit B3D so etwas hinbekommen würde, ist relativ unwahrscheinlich ![]() Hehe, durch die c't habe ich zum erstenmal von Voxel erfahren, die Technik hat Potenzial, auch wenn sie eigendlich schon alt ist^^ |
||
Nicht wenige benutzen die Anonymität des Internets um berühmt zu werden. |
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Chrise hat Folgendes geschrieben: Sehr geiles Ergebnis, auch wenn mir grad nicht einfallen würde, für was ich sowas brauchen sollte. Aber für Leute die Retro-sytle Games machen wollen, gibt es nichts besseres ^^
Noobody sagte schon: Zitat: (unter anderem Crysis verwendete Voxelrendering für die Terrains).
Heisst: Gogogo noobs, Crysis1337 muss programmiert werden! ;D Sehr geile Sache Noobody, ich freue mich auf mehr! MfG |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group