Jump! – Update

26. Oktober 2009 – 23:59

Es ist soweit, nach Monaten mal wieder ein Update in Bezug auf die Entwicklung von Jump! Es hat sich einiges getan seit März diesen Jahres. Der wichtigste Punkt ist sicherlich das wir zu drei Testsessions geladen haben um Feedback zu Jump! von den Spielern zu bekommen. Die Anzahl der unterschiedlichen Testern war nicht umwerfend, jedoch war das Feedback quantitativ und qualitativ ausreichend um auf dieser Basis weiterzuentwickeln. Danke auch nochmal an dieser Stelle an alle Tester ;-)

Weiterhin habe ich auch die Jump!-Seite hier mal ein wenig überarbeitet. Gleiches gilt für die Bildersektion. Im Übrigen hat das Spiel nun auch seit geraumer Zeit eine direkte Homepage auf der es den Download gibt, Informationen zum Spiel und auch ein Forum um uns Bugs und Feedback mitzuteilen.

jump

Während der Testsessions habe ich immer mal wieder ein paar Videos mitgeschnitten. Das Ergebnis gibt es gleich hier zu sehen und kann als “90 seconds of Catch the Chicken” deklariert werden, da es lediglich Szenen aus diesem Mode enthält.

In diesem Sinne viel Spass beim Schauen :)

This text will be replaced

simple RayTracer Part 2 (Refraction+NormalMapping)

23. Juni 2009 – 20:02

Es ist soweit. Heute möchte ich den vorerst letzten Part des Raytracers vorstellen und veröffentlichen. Nachdem mit Part 1 der Grundstein gelegt wurde hier nun erst einmal die Änderungen und Erweiterungen auf einem Blick:

  • Texturen auch für Spheren
  • NormalMapping
  • Refraction
  • einige Bugfixes
  • Performanceoptimierungen

Zunächst möchte ich zwei Bilder zeigen, welche den aktuellen Stand repräsentieren, bevor ich dann einzelne Punkte noch einmal kurz aufgreifen werde. Beide Bilder zeigen das Phong-Model mit Reflection und Refraction kombiniert mit NormalMapping.
Phong+Refraction+NormalMappingPhong+Reflection+Refraction+NormalMapping+SphereTextures

NormalMapping

Das NormalMapping in diesem Raytracer unterscheidet sich vom gewohnten NormalMapping aus der 3D-RealTime Grafik in zwei Punkten. Zunächst ist der RayTracer statisch, sprich es gibt keine bewegten Lichtquellen bzw. Objekte. NormalMapping kommt erst dabei richtig zum Tragen bzw. entfaltet so eigentlich erst seine sichtbare Wirkung. Aus diesem Grund kann man den Effekt nur deutlich machen indem man zwei an sich identische Bilder direkt miteinander vergleicht.
NormalMapping on plane texturenormal diffuse texture map on plane (no normal texture)NormalMapping on plane; specular highlight (directional light)normal texture mapping without NormalMapping

Specular highlight through directional light and a normal map

Weiterhin sind für das NormalMapping in dem Raytracer keine Object- oder Tangentspace Berechnungen notwendig sondern lediglich die Berechnungen des Normalenvektors aus der NormalMap. Das sind dann üblicherweise so bzw. so ähnlich aus:

color normal = normalMap.getTexelBilinear( u, v, distance );
double x = (normal.add(color(-1,0,0))).mult(2.0f).r;
double y = (normal.add(color(0,-1,0))).mult(2.0f).g;
double z = (normal.add(color(0,0,-1))).mult(2.0f).b;

Dieser Normalenvektor ersetzt dann einfach, bei der Diffuseberechnung, den Normalenvektor der an dem Schnittpunkt des Rays mit der Plane bzw. Sphere errechnet wurden wäre.

Refraction

Bei der Berechnung von Refraction (Lichtbrechung) habe ich mich auf das hervorragende Tutorial von Jacco Bikker gestützt. Hier nocheinmal ein Bild vom Anfang:

Phong+Refraction+NormalMapping

Man kann deutlich einen unterschiedlichen Brechungsindex zwischen der linken, organgen und der rechten, lilanen Sphere erkennen. Der Brechungsindex eines Mediums ist die Angabe wie schnell die Lichtgeschwindigkeit in diesem Medium abnimmt. Sprich das Verhältnis zwischen der Phasengeschwindigkeit des Lichtes im Vakuum und der Phasengeschwindigkeit des Mediums. Die linke Sphere definiert eine Phasengeschwindigkeit von 1.33 welches Wasser bei 20° Celsius entspricht. Folglich verliert das Licht 25% (1/1.33) seiner Geschwindigkeit gegenüber der Geschwindigkeit im Vakuum. Über das Snelliussches Brechungsgesetz kann man dann, über die unterschiedlichen Brechungsindizes, die eigentliche Brechung berechnen.
Die rechte, lilane Sphere hat eine Phasengeschwindigkeit von 1.0 und ist folglich derer im Vakuum gleich. Daraus resultiert dann auch das die hintere, gelbe Sphere ohne Brechungen sichtbar ist. Im Übrigen hat die vordere, güne Sphere eine Phasengeschwindigkeit von 1.31 (Eis).
Jetzt noch zwei Bilder aus einer anderen Perspektive, welche nebenbei auch nocheinmal den NormalMapping Effekt gut verdeutlichen:
refraction with normalmappingrefraction without normalmapping

Performance

Auch im Bereich der Performance hat sich einiges getan. Dies aber lediglich über Implementierungsoptimierungen und nicht über Beschleunigungsansätze wie beispielsweise ein Spatial Tree. Trotzdem kann sich der Zuwachs sehen lassen. Ein Bild mit sieben texturierten Spheren und entsprechender Plane, bei 1000×1000, sechs Rekursionen für Reflection ist mehr als doppelt so schnell berechnet wie das selbe Bild ohne Texturen für die Spheren. Das ist in der Hinsicht imposant da die Berechnungen der entsprechenden UV-Koordinaten und das eigentliche fetchen des Texels einen nicht unerheblicher Mehraufwand darstellt. Die Optimierung rührt zum Großteil daher das die Materialklassen, welche relativ viel Speicher durch die Texturen in Anspruch nehmen, nun als Pointer gehandelt werden und so nicht jedes mal auf dem Stack hin und her kopiert werden müssen.

Download

Hier nun der Download. Zum einen ein reiner Release-Build und weiterhin der komplette Source (VS bzw. VC++Express Solution). Das .NET 2.0 Framework wird vorrausgesetzt.

Release (.rar, 3.3MB)
sGUIRayTracer-Solution (.rar, 3.3MB)

Interessante Links/Quellen

Tutorialreihe auf Flipcode (sehr zu empfehlen!)

The math behind NormalMapping

Und natürlich all die anderen Tutorials die in Part 1 zu finden sind!

Wie immer keine Garantie auf Richtigkeit oder Vollständigkeit!

Businessplan für eine Spieleentwicklungsfirma

16. Juni 2009 – 10:59

Im Zuge der Arbeit an dem QM-Handbuch wurde ich an den Businessplan für eine Spieleentwicklungsfirma, welchen ich zusammen mit Michael Palmer erarbeitet hatte, erinnert. Da Michael damals schon darüber berichtete möchte ich mir die Arbeit sparen und direkt auf seinen Eintrag verlinken. Dort findet ihr den Businessplan und den Foliensatz der uns bei der Präsentation unterstützte.

Buisnessplan für ein Spieleentwicklungs-Studio

Qualitätsmanagement-Handbuch: Spieleentwicklung && Softwaremetriken

16. Juni 2009 – 00:07

Für die Lehrveranstaltung Qualitätsmanagement habe ich zusammen mit vier weiteren Kommilitonen ein minimales (und bei weitem nicht vollständiges) Qualitätsmanagement-Handbuch für eine fiktive Spieleschmiede geschrieben.

Inhalt dabei ist zunächst ein Firmenprofil welches die Firma und deren Entwicklungen, in unserem Fall CasualGames, beschreibt. Danach gehen wir auf die in der SE allgemein üblichen Qualitätssicherungsmaßnahmen, wie beispielsweiße den Betatest, ein. Folgend versuchen wir drei, für die Spieleentwicklung wichtige, Qualitätsmerkmale zu operationalisieren: DDD (Detailed Design Document), Spielspaß u.A. mit Hilfe eines Questionnaires und zu guter Letzt das allgemein hin bekannte QM-Merkmal Korrektheit.

QM-Handbuch (.pdf, 652KB)

Der zweite Übungsteil bestand darin verschiedene Softwaremetriken auf ein Code Snippet anzuwenden und hat nix direkt mit dem Handbuch zu tun. Wer sich aber auch dafür interessiert oder eine Vorlage braucht ist mit Folgendem gut beraten. Untersucht wurden LOC (Lines of Code), die Halstead-Metrik, Zyklomatische Komplexität nach McCabe und verschiedene Codeüberdeckungsgrade.

Metriken (.pdf, 1.284MB)

Wie immer keine Garantie auf Richtigkeit oder Vollständigkeit!

simple RayTracer Part 1

5. Mai 2009 – 14:34

Nach längerer Pause hier möchte ich heute meinen Raytracer, den ich in der letzten Zeit erarbeitet habe, vorstellen und zum Download anbieten. Zunächst ersteinmal ein paar Bilder welche den aktuellen Stand aufzeigen. Eine Beschreibung und die entsprechenden Berechnungszeiten sind jeweils im Bildbeschreibungstext zu finden. Dazu muss man aber sagen das weder der RayTracer ansich optimiert wurde (z.B. über ein kd-Tree), noch der Sourcecode drumherum optimiert ist.

Ambient+Diffuse-Specular+Shadow; Athlon 64 X2 Dual 6000+; 33 Sekunden bei 1000x1000 simple GUI Ambient+Diffuse-Specular+Shadow+Perfect Reflection; Athlon 64 X2 Dual 6000+; 56 Sekunden bei 1000x1000

Der RayTracer ist komplett in C++ und die entsprechende GUI mit VC++ .Net auf WinForms Basis geschrieben. Im Moment ist das Phong-Beleuchtungsmodell implementiert und als kleinen Bonus kann man noch, zumindest für die Ebenen, Texturen laden, welche die Diffusefarbe ersetzen. Nun folgt noch eine kleine Bildergalerie welche Schritt für Schritt zeigt wie man von einfachem Ambient bis zur PerfectReflection mit Schatten kommt. Die einzelnen Schritte lassen mit frei wählbaren Einstellungen auch in der GUI simulieren.

Ambient Ambient+Diffuse (one light source) only specular Ambient+Diffuse+Shadow (three light sources) Ambient+Diffuse+Specular+Shadow (one light source) Ambient+Diffuse+Specular+Shadow (three light sources) Ambient+Diffuse+Specular+Shadow+Perfect Reflection same aas image before; 9 sphere with a closer floor same as before but with texture on floor

Hier nun der Download. Zum einen ein reiner Release-Build und weiterhin der komplette Source(VS bzw. VC++Express Solution). Das .NET 2.0 Framework wird vorrausgesetzt.

Release (.rar, 187KB)

sGUIRayTracer-Solution (.rar, 258KB)

Da mir die Arbeit an diesem Raytracer sehr viel Spass gemacht hat und man viel dabei lernen konnte werde ich wohl noch ein wenig daran weiterarbeiten. Hier mal eine Liste was man überhaupt noch in einem Raytracer implementieren kann. Was ich davon noch wählen werde steht noch nicht fest. Es hat alles seinen Reiz und im Moment tendiere ich zu Normalmapping direkt über eine Map und/oder Bumpmapping über PerlinNoise.

  • kd-Tree oder spatial subdivision zur Geschwindigkeitsoptimierung
  • depth of Field
  • isosurfaces (blobs)
  • fresnel und Transparenz (refraction)
  • Bump/Displacement mapping
  • Normalmapping
  • fog
  • Soft-Shadows
  • Photon maps (global illumination)
  • weitere Geometrieobjekte (Cylinder, Box etc.)
  • Antialiasing
  • Photo exposure
Interessante Links/Quellen

Wikieintrag zu RayTracing

Mandelbrot’s RayTracing explanations

Tutorialreihe auf Flipcode (sehr zu empfehlen!)

Tutorialreihe auf Codermind

Tutorialreihe der DGL-Wiki

Tutorialreihe von Forrest Briggs

Wie immer keine Garantie auf Richtigkeit oder Vollständigkeit!