Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
Skripting / Modding /Programmierung von 3D-Objekten
Seminar 3D-Modellierung und Virtuelle Präsenz
Dominik Jäger26.06.2007
My-HL
26.06.2007 Dominik Jäger 2/58
Überblick
● Begriff Modding● Entstehung von Mods● Modifizieren von
Spielinhalten● Beispiele für Mods● Modding: Second Life● Scripting: QC, Python
● 3D-Objekte, Physik
● Programmier-Beispiele
26.06.2007 Dominik Jäger 3/58
Modding: Eine Einordnung● Ergänzungssets● Mutatoren● Mods
– Partial / Total Conversions
– Standalone Mods– Engine-Mods
My-HL
26.06.2007 Dominik Jäger 4/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
26.06.2007 Dominik Jäger 8/58
Modifizieren von Spielinhalten● Models● Texturen● Maps● z.B. In neuem Ordner
mit Struktur des Hauptordners
● Oft spezielles Container-Dateiformat ähnlich ZIP (z.B. pk3)
Haupt-spiel
Mod1
...
26.06.2007 Dominik Jäger 9/58
Partial Conversion● Nur manche Inhalte
werden verändert● Wie ableiten von
einer Klasse● Oft nur neue maps,
models und neuer Spielmodus
26.06.2007 Dominik Jäger 10/58
Total Conversion● Komplett neues Spiel● Keine Inhalte aus
dem Hauptspiel
26.06.2007 Dominik Jäger 11/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
26.06.2007 Dominik Jäger 12/58
Bekannte Mods● Counter-Strike
(Half-Life)● Desert Combat
(Battlefield 1942)● Team Fortress
(diverse Spiele)
26.06.2007 Dominik Jäger 17/58
Modding in Second Life● Aussehen des
Avatars– Form– Haut– Haare– Augen– Kleidung– ...
26.06.2007 Dominik Jäger 18/58
Modding in Second Life● Objekte erstellen
– Aus Grundobjekten– Eigene Texturen– Auch mit anderen
zusammen● Video: „Suzanne's
Guitar“
26.06.2007 Dominik Jäger 19/58
Modding in Second Life● Linden Scripting
Language– Event- und
Zustandsbasiert– An Objekte gebunden– Physik-Simulation– Chat-Steuerung
// LSL Beispiel:default { state_entry() { llSay(0, "Hello, Avatar!"); }}
26.06.2007 Dominik Jäger 20/58
Modding in Second Life● Linden Scripting
Language– Event- und
Zustandsbasiert– An Objekte gebunden– Physik-Simulation– Chat-Steuerung– Erstellung und
Steuerung von Partikelsystemen
touch_event() { llParticleSystem( [ PSYS_PART_FLAGS, // = PSYS_PART_EMISSIVE_MASK, PSYS_SRC_PATTERN, // = PSYS_SRC_PATTERN_EXPLODE, PSYS_PART_START_COLOR, // = <1,0,0> ] );}
26.06.2007 Dominik Jäger 21/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
26.06.2007 Dominik Jäger 22/58
Skripting● Laufzeitinterpretation
Software-Interpreter / Virtual Machine
Code
Skriptsprache(vorkompiliert)
Compiler
Bytecode
CPU
Compiler
Code
KompilierteSprache
AssemblyCode
26.06.2007 Dominik Jäger 23/58
Skripting● Laufzeitinterpretation● Programmierbares
Interface● Erhöhte Flexibilität
Software-Interpreter / Virtual Machine
Code
Skriptsprache(vorkompiliert)
Compiler
Bytecode
CPU
Compiler
Code
KompilierteSprache
AssemblyCode
26.06.2007 Dominik Jäger 24/58
Skripting● Laufzeitinterpretation● Programmierbares
Interface● Erhöhte Flexibilität● Skripte oft an
bestimmtes Objekt und/oder Ereignis gebunden (Trigger)
➔ Viele kleine Skripts
Software-Interpreter / Virtual Machine
Code
Skriptsprache(vorkompiliert)
Compiler
Bytecode
CPU
Compiler
Code
KompilierteSprache
AssemblyCode
26.06.2007 Dominik Jäger 25/58
Skripting in 3D-Umgebungen● Objekte platzieren,
orientieren, löschen● Animationen steuern● Spiellogik & Effekte● Physik beeinflussen● Eventbehandlung● Ereignisse auslösen
26.06.2007 Dominik Jäger 26/58
QuakeC
● Eine der ersten Game-Sprachen
● Speziell für Quake● C nachempfunden● Vorkompiliert („qcc“)● Bytecode-Interpreter
26.06.2007 Dominik Jäger 27/58
QuakeC● Individualisierung von
– Waffen– Spiellogik– Spielphysik– Teile der KI– Auslösung von
Ereignissen
26.06.2007 Dominik Jäger 28/58
QuakeC● Individualisierung von
– Waffen– Spiellogik– Spielphysik– Teile der KI– Auslösung von
Ereignissen
● Limitierungen– Keine Typdefinitionen– Keine Variablen-
definitionen– Stringfunktionen mit
einzelnem Stringbuffer– „entity“ ist einziger
Referenz-Typ
26.06.2007 Dominik Jäger 29/58
Python
● Weit verbreitet● Leicht erlernbar● Leicht erweiterbar● Eingesetzt z.B. in
– Blender– Maya– GIMP– Battlefield 2
26.06.2007 Dominik Jäger 30/58
Python Skripting in Blender (1)● Einbinden über Text-
Window -> File● Starten mit ALT-P● Kann Blender GUI für
Parameter nutzen● Selektierte Objekte:
Blender.Object.GetSelected()
26.06.2007 Dominik Jäger 31/58
Python Skripting in Blender (2)● Objektorientierung
ähnlich JavaScript● Programm wird im
Skript als Objekt eingebunden
● Programmierung mit der Funktionalität und den Objekten des Hauptprogramms
# python example - move a plane:
import Blender
object = Blender.Object.Get("Plane")
object.LocX += 0.5object.RotZ += 0.2
Blender.Redraw()
26.06.2007 Dominik Jäger 32/58
Python Skripting in Blender (2)● Objektorientierung
ähnlich JavaScript● Programm wird im
Skript als Objekt eingebunden
● Programmierung mit der Funktionalität und den Objekten des Hauptprogramms
# python example - move a plane:
import Blender
object = Blender.Object.Get("Plane")
object.LocX += 0.5object.RotZ += 0.2
Blender.Redraw()
# python example - change focal length:
import Blender
camera = Blender.Camera.Get("Camera")
camera.Lens = cam.Lens * 2.0
Blender.Redraw()
26.06.2007 Dominik Jäger 38/58
Spezielle 3D-Objekte● Kameras● Lichtquellen● Trigger● Effekte● Pfade● Skelette
26.06.2007 Dominik Jäger 39/58
Spezielle 3D-Objekte● Kameras● Lichtquellen● Trigger● Effekte● Pfade● Skelette● Sprites
26.06.2007 Dominik Jäger 40/58
Modifizieren von 3D-Objekten
● Affine Transformation (bewegen, drehen, ...)
26.06.2007 Dominik Jäger 41/58
Modifizieren von 3D-Objekten
● Affine Transformation (bewegen, drehen, ...)
● Schnittberechnungen (Kollisionserkennung)
26.06.2007 Dominik Jäger 42/58
Modifizieren von 3D-Objekten
● Affine Transformation (bewegen, drehen, ...)
● Schnittberechnungen (Kollisionserkennung)
● Verformungen (mengenorientiert)
26.06.2007 Dominik Jäger 43/58
Modifizieren von 3D-Objekten
● Affine Transformation (bewegen, drehen, ...)
● Schnittberechnungen (Kollisionserkennung)
● Verformungen (mengenorientiert)
● Materialien & Texturen
26.06.2007 Dominik Jäger 44/58
Physikalische Eigenschaften● Forces
– Gravity– Motor– Wind
● Constraints– Point to point– Point to path– Wheels– Ragdoll
26.06.2007 Dominik Jäger 47/58
Programmierbeispiel: Türe● Trigger-box um die
Türe platzieren● Drehachse setzen
26.06.2007 Dominik Jäger 48/58
Programmierbeispiel: Türe● Trigger-box um die
Türe platzieren● Drehachse setzen● Spielfigur schneidet
Trigger-box– Tastatureingaben– Inventar: Keycard?
26.06.2007 Dominik Jäger 49/58
Programmierbeispiel: Türe● Trigger-box um die
Türe platzieren● Drehachse setzen● Spielfigur schneidet
Trigger-box– Tastatureingaben– Inventar: Keycard?
➔ Animation „Öffnen“
26.06.2007 Dominik Jäger 51/58
Programmierbeispiel: Portal● Spielfigur berührt
Trigger-box im Portal
26.06.2007 Dominik Jäger 52/58
Programmierbeispiel: Portal● Spielfigur berührt
Trigger-box im Portal➔ Translation der
Spielfigur zum Zielort
???
26.06.2007 Dominik Jäger 53/58
Programmierbeispiel: Jumppad● Spielfigur berührt
Trigger-box des Jumppads
26.06.2007 Dominik Jäger 54/58
Programmierbeispiel: Jumppad● Spielfigur berührt
Trigger-box des Jumppads
➔ Bewegungsrichtung leicht nach oben abändern
26.06.2007 Dominik Jäger 55/58
Programmierbeispiel: Jumppad● Spielfigur berührt
Trigger-box des Jumppads
➔ Bewegungsrichtung leicht nach oben abändern
➔ Geschwindigkeit auf hohen Wert setzen
200 km/h
26.06.2007 Dominik Jäger 56/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
!!!
26.06.2007 Dominik Jäger 57/58
Zusammenfassung
● Begriff Modding● Entstehung von Mods● Modifizieren von
Spielinhalten● Beispiele für Mods● Modding: Second Life● Scripting: QC, Python
● 3D-Objekte, Physik
● Programmier-Beispiele
26.06.2007 Dominik Jäger 58/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