58
Skripting / Modding / Programmierung von 3D-Objekten Seminar 3D-Modellierung und Virtuelle Präsenz Dominik Jäger 26.06.2007 My-HL

My-HL Jäger... · Skripting / Modding / Programmierung von 3D-Objekten Seminar 3D-Modellierung und Virtuelle Präsenz Dominik Jäger 26.06.2007 My-HL

  • Upload
    others

  • View
    2

  • 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 5/58

Modifizieren von Spielinhalten● Models

26.06.2007 Dominik Jäger 6/58

Modifizieren von Spielinhalten● Models● Texturen

26.06.2007 Dominik Jäger 7/58

Modifizieren von Spielinhalten● Models● Texturen● Maps

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 13/58

Mods - Beispiele● Snow War Half-Life

26.06.2007 Dominik Jäger 14/58

Mods - Beispiele● Wizard Wars Half-Life

26.06.2007 Dominik Jäger 15/58

Mods - Beispiele● Science & Industry Half-Life

26.06.2007 Dominik Jäger 16/58

Mods - Beispiele● Worms Half-Life

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 33/58

Spezielle 3D-Objekte● Kameras

26.06.2007 Dominik Jäger 34/58

Spezielle 3D-Objekte● Kameras● Lichtquellen

26.06.2007 Dominik Jäger 35/58

Spezielle 3D-Objekte● Kameras● Lichtquellen● Trigger

26.06.2007 Dominik Jäger 36/58

Spezielle 3D-Objekte● Kameras● Lichtquellen● Trigger● Effekte

26.06.2007 Dominik Jäger 37/58

Spezielle 3D-Objekte● Kameras● Lichtquellen● Trigger● Effekte● Pfade

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 45/58

Programmierbeispiel: Türe

26.06.2007 Dominik Jäger 46/58

Programmierbeispiel: Türe● Trigger-box um die

Türe platzieren

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 50/58

Programmierbeispiel: Portal

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