ZFX
ZFX Neu
Home
Community
Neueste Posts
Chat
FAQ
IOTW
Tutorials
Bücher
zfxCON
ZFXCE
Mathlib
ASSIMP
NES
Wir über uns
Impressum
Regeln
Suchen
Mitgliederliste
Membername:
Passwort:
Besucher:
4442161
Jetzt (Chat):
13 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-
"Muli3D" von Stephan Reiter (Reita)


Hallo Leute!

Ich wollte nach längerer Abwesenheit auch wieder einmal ein Lebenszeichen von mir geben - die Uni hatte mich die letzten Monate stark im Griff, aber jetzt sind ja endlich Ferien! :-)



Ich habe eine kleine Collage über "Muli3D" zusammengestellt. Muli3D ist eine Software Rendering Bibliothek, die im Februar dieses Jahres geboren worden ist. Seither habe ich von Zeit zu Zeit immer wieder daran weitergearbeitet; mittlerweile dürfte sie schon ziemlich brauchbar sein (z.B für Shader-Prototyping oder die Test-Implementierung von neuen Effekten, die auf momentanen Grafikkarten noch nicht machbar sind.)



Das Bild links oben zeigt ein Dreieck, dass per-Pixel beleuchtet wird: Eine Normalmap sorgt dabei für die entsprechenden Oberflächendetails. Dieser Eindruck wird durch die bekannte Parallax-Mapping Technik, die euch sicher bekannt ist, noch verstärkt.

Dieses Muli3D-Sample zeigt die Anwendung von Vertex- und Pixelshadern; wobei der Code vom letzterem unten zu sehen ist. Weiters kommt natürlich Textur-Sampling zum Einsatz, was im Moment noch nach weiteren Geschwindigkeits-Optimierungen "schreit".



Im Bild rechts oben seht ihr den Einsatz von Cubemaps, welche ich vor kurzem in die Bibliothek integriert habe. Im Moment ist die Fillrate noch die ärgste FPS-Bremse: Vergleich rechts oben/rechts unten: Sobald man auf die Texture im Pixelshader verzichtet, verdopplen sich die Anzahl von Bildern pro Sekunde - mal sehen, ob ich da etwas dagegen tun kann ;-)



Die Bilder wurden auf einem Pentium 4, 2,8 GHz Rechner erstellt ... Mit SIMD müssten natürlich noch weitere Geschwindigskeitsgewinne drinnen sein, mein Hauptaugenmerk liegt allerdings auf der Einfachheit des Codes - Geschwindigkeit ist nur ein Sekundärziel.



Muli3D gibt es schon seit längerem als SourceForge Projekt: Unter http://sourceforge.net/projects/muli3d/ könnt ihr euch die Bibliothek inklusive der Samples und einem Application Framework (auf dem die Samples aufbauen) herunterladen. Das Application Framework entstammt einer meiner älteren DirectX-Engines und stellt z.B. Kamera und Resourcenmanagement zur Verfügung. Das Entwerfen von Beispielprogrammen sollte so um einiges schneller gehen ...



Für Fragen jeder Art stehe ich natürlich gerne zur Verfügung. Sollte jemand Lust bekommen haben, ein Sample zu programmieren oder mir bei der weiteren Entwicklung zu helfen, würde mich dies sehr freuen ;-)



Liebe Grüße und schöne Ferien!

Stephan






Von Cygon am 02.08.2004, 06:44:56 Uhr
War erst etwas verdutzt, nur ein paar Polygone zu sehen ;)

Die Qualität deines Software-Renderers ist auf jeden Fall überzeugend. Welche Versionen von PS/VS hast du da eingebaut ?

Das SoftWire-Projekt, das mal auf FlipCode vorgestellt wurde ist die sicher bekannt, oder ? Da hat jemand einen Assembler geschrieben, der zur Laufzeit genutzt werden konnte, um sich Funktionen zu erzeugen. Als Beispiel hat er einen PixelShader-Compiler geschrieben, der einen PixelShader quasi für die CPU rekompiliert ;)

-Markus-

Von Mr.DX am 02.08.2004, 08:19:09 Uhr
Sieht gut aus. Respekt.
Allerdings finde ich die Framerate zu gering. Habe auf meinem PIV 3.06 GHz mit ner GF 5900 höchstens 20.5 FPS.
Aber sonst ist es sehr gut gemacht, die Syntax erinnert mich sehr stark an HLSL.

Hast du das Programm ganz alleine gemacht oder mit ein paar Leuten?

Von Richard Schubert am 02.08.2004, 09:33:42 Uhr
ich finde die framerate absolut spitze, wenn ich mir das REF-Device von D3D anschauen muss, kommen mir fast die tränen damit arbeiten zu müssen.

wirklich toll.

Von Patrick am 02.08.2004, 10:48:27 Uhr
Hi,

wie renderst du denn eigentlich? Ohne API wie OpenGL oder D3D? Einfach nur GDI? ????

Von Mr.DX am 02.08.2004, 12:15:28 Uhr
Ach, das ist Software-Rendering. Dafür ist die Framerate wirklich spitze. Habe jetzt gedacht, es wäre Hardware-Rendering. Habs überlesen.

Von Punika am 02.08.2004, 12:44:49 Uhr
Jo feine Arbeit, beschäftige mich ja auch gerne mit dem Thema.

Hatte mir auch mal deinen Code angesehen, sauber eingebaut das ganze. Und das ganze noch schneller zu bekommen sollte auch kein Problem sein, da ja deiner eigentlich noch garnicht optimiert wurde...

Mach weiter so

Von Bizarre am 02.08.2004, 18:05:20 Uhr
Sehr Beeidurckend! :)
Vor allem das rechte obere gefällt mir gut. Wenn du alles komplett selber geschrieben hast, respekt!
Den Begriff Parallax Mapping hör ich zwar heut zum ersten Mal, aber ich werd ihn mir mal vormerken *g*.

Von Yannic STAUDT am 03.08.2004, 10:45:43 Uhr
8. entlich mal uin den 10 ersten ;-)

Well work......... echt klasse, software rendering, ich kann bloß sagen hut ab!
schade das es warscheinlich auf 'nem Athlon 1Ghz nur ziemlich lahm läuft ;-(

ansonst sag ich bloß optimieren, das muss doch auf 'nem Athlon zum laufen zu bringesn sein ;-))))

good luck :D

Von afogel am 03.08.2004, 21:41:03 Uhr
einfach nur boa...saugeil ;)
wünschte ich wär so gut wie du :)

mfg afogel

Von Mr.DX am 04.08.2004, 09:10:55 Uhr
Lernt man sowas auch auf der Uni oder hast du dir das alles selber beigebracht?

Von Reita am 06.08.2004, 12:50:04 Uhr
Hallo Leute!
Ich komme gerade vom Urlaub auf Kreta zurück und erblicke hier meine eingeschickten Screenshots als IOTW; und nach euren echt netten Komentaren - Danke, das motiviert wirklich! - scheint es mir fast, als ginge der Badeurlaub weiter :-)

So, dann wede ich mich mal ans Antworten machen:

@Cygon: SoftWire kenne ich, ein ziemlich ehrgeiziges Projekt, das auch echt gute Resultate bringt (Geschwindigkeit ist Wahnsinn) - nur irgendwie ist mir diese ganze Assembler-Geschichte zu kompliziert und so schreibe ich lieber muli3d-Shader in C/C++. Die sind dann auch für andere leichter zu verstehen und um einiges Debugging-freundlicher.

@Mr.DX:
Naja, du hast recht, die FPS-Zahl ist in der Tat niedrig. Dies kommt davon, dass ich in der Bibliothek versuche, alles möglichst allgemein zu halten und keine speziellen Optimierungen einbaue, die eventuell das Einsatzgebiet einschränken könnte. Außerdem liegt der Fokus auf readability des Codes und nicht so sehr auf Performance.

Bezüglich deiner letzten Frage: Habe mir das alles selbst beigebracht - Google ist hier wirklich eine tolle Hilfe. Den Kurs 'Computergraphik' auf der Uni werde ich sobald wie möglich machen - sollte eigentlich problemlos über die Bühne gehen ;-)

@Richard, Punika, Bizarre, afogel, Yannic: Danke dir für die netten Worte! Genau solch positiver Zuspruch ist es, der einen motiviert hält, weiter zu machen. (Der Bereich des SW-Rendering kann manchmal ziemlich anstregend und langweilig sein *hüstel* Matrixberechnungen ...)

@Patrick: Das Bild auf den Bildschirm bringe ich über DirectDraw. Ich werde allerdings bald auf TinyPTC umsteigen, und so die ganze Bibliothek langsam plattform-übergreifend machen.

Um dieses Antwort-Spiel für heute zu beenden, ein Screenshot aus einer neueren muli3d-Version. 0.3 wird das glaub ich ;)

http://members.aon.at/breiter5/smoothsubdiv.jpg

-> Gehe jetzt Koffer auspacken ...

Von Reita am 07.08.2004, 10:36:52 Uhr
Die neue Version 0.3 ist endlich im Netz! :)
Bitte um Feedback ...

Von Richard Schubert am 07.08.2004, 14:54:51 Uhr
echt groovy, läuft alles so mit 3FPS, nur was ist an dem ParallaxTri parallax?

Von Reita am 08.08.2004, 21:57:58 Uhr
Schau dir den Pixel Shader an - dort wird Parallax Mapping basierend auf dem Paper http://www.infiscape.com/doc/parallax_mapping.pdf durchgeführt.

Von Richard Schubert am 08.08.2004, 22:42:44 Uhr
nagut, aber das bringt ja nix solange der viewer sich nicht bewegen kann :D

Von Patrick am 08.08.2004, 23:34:12 Uhr
Naja ich hab bei meinem RealTime RayTracer in einer auflösung 640x480 auch nur 6-7 FPS auf einer 2.4 GHZ CPU aber das merkt man nach der zeit net mehr :D:D:D

Von Reita am 09.08.2004, 09:59:47 Uhr
Richard: Klar bringt das was, selbst wenn man die Kamera nicht bewegen kann. Du kannst ja mal probieren, den Effekt auszuschalten - da sieht man schon nen Unterschied.

Von Richard Schubert am 09.08.2004, 21:10:32 Uhr

mag sein, aber der effekt kommt erst mit bewegung richtig zum ausdruck.