Skripting / Modding / Programmierung von 3D-Objekten My-HL Seminar 3D-Modellierung und Virtuelle Präsenz
Überblick Begriff Modding Entstehung von Mods Modifizieren von Spielinhalten Beispiele für Mods Modding: Second Life Scripting: QC, Python 3D-Objekte, Physik ProgrammierBeispiele 2/58
Modding: Eine Einordnung My-HL Ergänzungssets Mutatoren Mods Partial / Total Conversions Standalone Mods Engine-Mods 3/58
Entstehung von Mods Anfänge in der Spieler-Community Manche werden zum kommerziellen Produkt Führen den Erfolg des Spiels weiter Oft erfolgreicher als das Original 4/58
Modifizieren von Spielinhalten Models 5/58
Modifizieren von Spielinhalten Models Texturen 6/58
Modifizieren von Spielinhalten Models Texturen Maps 7/58
Modifizieren von Spielinhalten Hauptspiel Models Texturen Maps Mod1.. z.b. In neuem Ordner mit Struktur des Hauptordners Oft spezielles Container-Dateiformat ähnlich ZIP (z.b. pk3) 8/58
Partial Conversion Nur manche Inhalte werden verändert Wie ableiten von einer Klasse Oft nur neue maps, models und neuer Spielmodus 9/58
Total Conversion Komplett neues Spiel Keine Inhalte aus dem Hauptspiel 10/58
Total Conversion Komplett neues Spiel Keine Inhalte aus dem Hauptspiel Standalone Mod Setzt keine Installation des Hauptspiels voraus Eigenes Spiel auf Basis des anderen Spiels entwickelt 11/58
Bekannte Mods Counter-Strike (Half-Life) Desert Combat (Battlefield 1942) Team Fortress (diverse Spiele) 12/58
Mods - Beispiele Snow War Half-Life 13/58
Mods - Beispiele Wizard Wars Half-Life 14/58
Mods - Beispiele Science & Industry Half-Life 15/58
Mods - Beispiele Worms Half-Life 16/58
Modding in Second Life Aussehen des Avatars Form Haut Haare Augen Kleidung... 17/58
Modding in Second Life Objekte erstellen Aus Grundobjekten Eigene Texturen Auch mit anderen zusammen Video: Suzanne's Guitar 18/58
Modding in Second Life // LSL Beispiel: default { state_entry() { llsay(0, "Hello, Avatar!"); } } Linden Scripting Language Event- und Zustandsbasiert An Objekte gebunden Physik-Simulation Chat-Steuerung 19/58
Modding in Second Life touch_event() { llparticlesystem( [ PSYS_PART_FLAGS, // = PSYS_PART_EMISSIVE_MASK, PSYS_SRC_PATTERN, // = PSYS_SRC_PATTERN_EXPLODE, PSYS_PART_START_COLOR, // = <1,0,0> ] ); } Linden Scripting Language Event- und Zustandsbasiert An Objekte gebunden Physik-Simulation Chat-Steuerung Erstellung und Steuerung von Partikelsystemen 20/58
Modding in Second Life Terrain files 2D Gitter von Höhenwerten 13-Kanal RAW Geometriebild: 1: Height 3: Water Height 5: For Sale 7: Public Edit Land 9: Flying Allowed 21/58
Skripting Kompilierte Sprache Skriptsprache (vorkompiliert) Code Code Compiler Compiler Assembly Code Bytecode CPU Laufzeitinterpretation Software-Interpreter / Virtual Machine 22/58
Skripting Kompilierte Sprache Skriptsprache (vorkompiliert) Code Code Compiler Compiler Assembly Code Bytecode CPU Laufzeitinterpretation Programmierbares Interface Erhöhte Flexibilität Software-Interpreter / Virtual Machine 23/58
Skripting Kompilierte Sprache Skriptsprache (vorkompiliert) Code Code Compiler Compiler Assembly Code CPU Bytecode Software-Interpreter / Virtual Machine Laufzeitinterpretation Programmierbares Interface Erhöhte Flexibilität Skripte oft an bestimmtes Objekt und/oder Ereignis gebunden (Trigger) Viele kleine Skripts 24/58
Skripting in 3D-Umgebungen Objekte platzieren, orientieren, löschen Animationen steuern Spiellogik & Effekte Physik beeinflussen Eventbehandlung Ereignisse auslösen 25/58
QuakeC Eine der ersten Game-Sprachen Speziell für Quake C nachempfunden Vorkompiliert ( qcc ) Bytecode-Interpreter 26/58
QuakeC Individualisierung von Waffen Spiellogik Spielphysik Teile der KI Auslösung von Ereignissen 27/58
QuakeC Individualisierung von Limitierungen Waffen Keine Typdefinitionen Spiellogik Spielphysik Keine Variablendefinitionen Stringfunktionen mit einzelnem Stringbuffer entity ist einziger Referenz-Typ Teile der KI Auslösung von Ereignissen 28/58
Python Weit verbreitet Leicht erlernbar Leicht erweiterbar Eingesetzt z.b. in Blender Maya GIMP Battlefield 2 29/58
Python Skripting in Blender (1) Einbinden über TextWindow -> File Starten mit ALT-P Kann Blender GUI für Parameter nutzen Selektierte Objekte: Blender.Object.GetSelected() 30/58
Python Skripting in Blender (2) # python example - move a plane: import Blender object = Blender.Object.Get("Plane") object.locx += 0.5 object.rotz += 0.2 Blender.Redraw() Objektorientierung ähnlich JavaScript Programm wird im Skript als Objekt eingebunden Programmierung mit der Funktionalität und den Objekten des Hauptprogramms 31/58
Python Skripting in Blender (2) # python example - move a plane: import Blender object = Blender.Object.Get("Plane") object.locx += 0.5 object.rotz += 0.2 Blender.Redraw() # python example - change focal length: import Blender camera = Blender.Camera.Get("Camera") camera.lens = cam.lens * 2.0 Objektorientierung ähnlich JavaScript Programm wird im Skript als Objekt eingebunden Programmierung mit der Funktionalität und den Objekten des Hauptprogramms Blender.Redraw() 32/58
Spezielle 3D-Objekte Kameras 33/58
Spezielle 3D-Objekte Kameras Lichtquellen 34/58
Spezielle 3D-Objekte Kameras Lichtquellen Trigger 35/58
Spezielle 3D-Objekte Kameras Lichtquellen Trigger Effekte 36/58
Spezielle 3D-Objekte Kameras Lichtquellen Trigger Effekte Pfade 37/58
Spezielle 3D-Objekte Kameras Lichtquellen Trigger Effekte Pfade Skelette 38/58
Spezielle 3D-Objekte Kameras Lichtquellen Trigger Effekte Pfade Skelette Sprites 39/58
Modifizieren von 3D-Objekten Affine Transformation (bewegen, drehen,...) 40/58
Modifizieren von 3D-Objekten Affine Transformation (bewegen, drehen,...) Schnittberechnungen (Kollisionserkennung) 41/58
Modifizieren von 3D-Objekten Affine Transformation (bewegen, drehen,...) Schnittberechnungen (Kollisionserkennung) Verformungen (mengenorientiert) 42/58
Modifizieren von 3D-Objekten Affine Transformation (bewegen, drehen,...) Schnittberechnungen (Kollisionserkennung) Verformungen (mengenorientiert) Materialien & Texturen 43/58
Physikalische Eigenschaften Forces Gravity Motor Wind Constraints Point to point Point to path Wheels Ragdoll 44/58
Programmierbeispiel: Türe 45/58
Programmierbeispiel: Türe Trigger-box um die Türe platzieren 46/58
Programmierbeispiel: Türe Trigger-box um die Türe platzieren Drehachse setzen 47/58
Programmierbeispiel: Türe Trigger-box um die Türe platzieren Drehachse setzen Spielfigur schneidet Trigger-box Tastatureingaben Inventar: Keycard? 48/58
Programmierbeispiel: Türe Trigger-box um die Türe platzieren Drehachse setzen Spielfigur schneidet Trigger-box Tastatureingaben Inventar: Keycard? Animation Öffnen 49/58
Programmierbeispiel: Portal 50/58
Programmierbeispiel: Portal Spielfigur berührt Trigger-box im Portal 51/58
Programmierbeispiel: Portal Spielfigur berührt Trigger-box im Portal Translation der Spielfigur zum Zielort??? 52/58
Programmierbeispiel: Jumppad Spielfigur berührt Trigger-box des Jumppads 53/58
Programmierbeispiel: Jumppad Spielfigur berührt Trigger-box des Jumppads Bewegungsrichtung leicht nach oben abändern 54/58
Programmierbeispiel: Jumppad 200 km/h Spielfigur berührt Trigger-box des Jumppads Bewegungsrichtung leicht nach oben abändern Geschwindigkeit auf hohen Wert setzen 55/58
Programmierbeispiel: Jumppad!!! Spielfigur berührt Trigger-box des Jumppads Geschwindigkeit auf hohen Wert setzen & Bewegungsrichtung leicht nach oben abändern Physikengine erledigt den Rest 56/58
Zusammenfassung Begriff Modding Entstehung von Mods Modifizieren von Spielinhalten Beispiele für Mods Modding: Second Life Scripting: QC, Python 3D-Objekte, Physik ProgrammierBeispiele 57/58
Quellenangaben Spielecover & Screenshots: http://images.google.de/ http://www.hlportal.de/ http://secondlife.com/community/land-islands.php http://lindenlifestyles.com/ http://www.kan-ed.org/second-life/using-lsl.html http://www.idsoftware.com/games/quake/quake/ http://www.blender.org/documentation/htmli/c11087.html Videos: http://secondlife.com/showcase/ http://www.youtube.com/watch?v=3rkg-3man3k 58/58