Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib...

37
breezEngine Zwischenstand Herbst 2009 Tobias Zirr

Transcript of Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib...

Page 1: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

breezEngineZwischenstand Herbst 2009

Tobias Zirr

Page 2: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Architektur

Page 3: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Sprachen / Libraries

C++ HLSL / FX C++/CLI C#

DirectX 9 Assimp PhysX TinyXml zLib libPNG .NET Framework 2.0

Page 4: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Module und Funktionen

beCore beMath beRender

beRenderDX

beEntitySystem

beScene

beSimulation(PhysX)

Global Heap

Garbage Tracker

Info Stream

File System

Resource Management• Interfaces•Container Templates

Timer

STL Container Wrappers•Optimierte Speicherverwaltung

•Optimiertes Einfüge- / Löschverhalten

Vektoren & Matrizen

Strahlen & Ebenen

Kugeln & Boxen

Intersection Tests•Hauptsächlich zu Culling- & Picking-Zwecken

UtilitiesDirectX 9 Device Wrapper

Effect Framework•Erweiterte HLSL Semantics•Setups (Dynamische Materialien)

Resource Management

State Management

Page 5: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Module und Funktionen

beEntitySystem beScene beSimulation(PhysX)

Zweckgebundene Interfaces (Tags)•Animation, Synchronisation, etc.

Property System•Generische Setter & Getter für Objektzustand

•Ermöglicht generische Konfiguration und Serialisierung (z.B. in einem Editor)

Controller System•Synchronisation zusammengehöriger Objekte

Entities•Position, Orientierung, Richtung, Caching

•Virtuelles Positionierungssystem (Präzision)Entity Nodes

•Entity-Container / Hierarchieelement

Simulation•Root Entity Node•Timing•Aktualisierung und Synchronisation der Entities

Zweckgebundene Interfaces (Tags)•Renderables, Lights, Scene Nodes

Standard Mesh & Light Entities

Rendering Pipeline

GPU Helpers•Clearing•Normal Map Generation

Mesh Manager• Instancing•Mesh Builders•Resource Management

Simulation (Szene)•Root Scene Node•Aufbau des Render Trees über Scene Nodes

•Kameraverwaltung

PhyX Simulation Host•Schnittstelle zwischen PhysX Simulation und Engine

•Thread-Synchronisation•Resource Management

Standard Physics Controllers•Bounding, Shape, Mesh, Character Controllers

•Synchronisation der Besitzer-Entities mit ihren PhysX-Repräsentationen

Simulation•Verwaltung der Simulation Hosts•Verteilung der Synchronisationsaufrufe

Prototyp

mehr dazu gleich

Page 6: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Zielsetzung

Einfacher Aufbau und Bedienung

Geringer Integrationsaufwand bei der Entwicklung neuer Komponenten Umfangreiches Angebot flexibler

Konzepte, die dem Entwickler als Rahmen dienen▪ Properties, Controllers, Synchronization,

Animation, Entities, Entity Nodes, Effect Binders, Renderables, Lights, Scene Nodes, Mesh Builders…

breeze

Page 7: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Effect Framework

Page 8: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Materialverwaltung

Es war einmal… typedef struct D3DMATERIAL9 {

D3DCOLORVALUE Diffuse; D3DCOLORVALUE Ambient; D3DCOLORVALUE Specular;D3DCOLORVALUE Emissive;float Power;

} D3DMATERIAL9, *LPD3DMATERIAL9;

Wohin mit neuen Materialeigenschaften?

Page 9: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Materialverwaltung

Mögl. Verwaltung von Materialeigenschaften Verschiedene feste Datenstrukturen pro

Shader(gruppe)

Page 10: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Gezielter Einsatz von Shadern

FFP Spezial-Shader

Spezial-Shader

Vorläufer-Projekt

Page 11: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Gezielter Einsatz von Shadern

Hartcodierte Spezial-Datenstruktur

Vorläufer-Projekt

Page 12: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Materialverwaltung

Mögl. Verwaltung von Materialeigenschaften Verschiedene feste Datenstrukturen pro

Shader(gruppe) Erweiterte Über-Datenstrukturen mit

selektiver Nutzung durch verschiedene Shader(gruppen)

Page 13: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

FFP-/Shader-Mix

Standard-Daten-struktur

Zusatz-texturen

Zusatz-konstanten

Vorläufer-Projekt

Page 14: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Materialverwaltung

Mögl. Verwaltung von Materialeigenschaften Verschiedene feste Datenstrukturen pro

Shader(gruppe) Erweiterte Über-Datenstrukturen mit selektiver

Nutzung durch verschiedene Shader(gruppen) Dynamische Datenstrukturen▪ Keinerlei vorgegebene Daten▪ „Tweakables“ werden zur Laufzeit aus der Effect-

Datei geladen und ergeben eine individuelle Datenstruktur

Page 15: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Kompatibilität

FFP-Kompatibilität erfordert vielerorts mehrere Render-Pfade

Dynamische Materialien bieten in reiner Shader-Umgebung zugleich optimale Flexibilität und einfachste Handhabung

Rendering API ohne FFP-Ballast wesentlich schlanker

Page 16: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Kompatibilität

FFP-Kompatibilität erfordert vielerorts mehrere Render-Pfade

Dynamische Materialien bieten in reiner Shader-Umgebung zugleich optimale Flexibilität und einfachste Handhabung

Rendering API ohne FFP-Ballast wesentlich schlanker

if(shaderModel < 2)throw „Go buy a new computer!“;

Page 17: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Material TweakingLive Demo

Page 18: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Rendering Pipeline

Page 19: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Rendering Pipeline

PipelinePipes

(Rendering Scope)

Render Targets

Processing

Pipelines

Effect Binders

Effect Binder Pools

Render Tree

Page 20: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Render Tree

Perspectives

Lights Render Queues

Renderables

Cached Affecting Lights

Pipe

Transformation (View, Proj)

Setup Callback

Matrix & Vector Cache

Wird jedes Frame neu gebaut!

Page 21: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Global Pipeline Passes

Pre-Pass

• Render Tree Traversal

• Depth Data

• Auxiliary Data

Pre-Processing

• Lighting

• Shadow Projection

• AO• …

Main Pass

• Render Tree Traversal

• Color Data

Page 22: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Effect BindersRender Tree• P

erspective Data• Entity Data

Effect Binder Pool

Shared ParametersParameter Indices

Effect Binder

Page 23: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Effect Binders

Pipeline Effect Binder

Pipe Effect Binder

Lighting Effect Binder

Processing Effect Binder

Entity Effect Binder

Perspective Transformation

Flow Control (Pass Loops, Pre- & Post-Pass State)

Timing Parameters

Render Target Sharing

Automated Clearing, Swapping & Scaling

Pass Type Filtering

Automated Light Querying & Sorting

Permutation-Sensitive Light Partitioning

Light Parameter Management

Entity Transformation

Render QueuesScreen Offsets & Scaling

Page 24: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Post ProcessingLive Demo

Page 25: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Shader Library

Page 26: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Das Permutationen-Problem Wichtige Gelenkstellen

Transformation▪ Einfaches Rendering▪ Instanziertes Rendering▪ Animation im Shader

Beleuchtung▪ Mehrere Lichter in beliebigen Licht-Typ-Kombinationen▪ Schatten & Projezierte Texturen (Ein / Aus)

Material▪ Farb-, Normal- und Reflexionstexturen▪ Vielfältige Varationen von Beleuchtungsmodellen

Page 27: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Das Permutationen-Problem Lösungsansätze

Über-/Super-Shader▪ Static Branching▪ Vorkompilierung aller genutzten Kombinationen

Inferred (/ Deferred) Lighting▪ Optimale Trennung von Transformation, Beleuchtung und Material

macht vorkompilierte Kombinationen überflüssig▪ In vielen bekannten Firmen im Kommen:

„ The combination of deferred lighting and this technology allows CryENGINE® 3 to avoid the traditional shortcomings of Uber Shaders alone.”

– CryENGINE 3 Specifications, Crytek.com

Dynamic Shader Linkage▪ DirectX 9 Fragment Compiler▪ DirectX 11 Interfaces

Page 28: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Das Permutationen-Problem Ein Super-Shader-Kompromiss

Material als höchstes Ordnungselement

Verfügbare Licht-Kombinationen werden vom Shader-Entwickler als Passes mit entsprechender Markierung versehen und von den Effect Binders zur Laufzeit ausgewählt

Transformation ist Teil einer zentralen Basisklasse, die ähnlich der Super-Shader-Technologie die Transformation für alle Entity-Typen durchführen kann

Klassen und Interfaces in HLSL neu seit November 2008, auch in DirectX 9 verfügbar

Page 29: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Super-Shader-Kompromiss Vorteile des Kompromisses

Auswahl eines Shaders intuitiv, weil gleichbedeutend mit Festlegung der Beschaffenheit eines Objektes

Reduzierung des Verwaltungsaufwands von 3 auf 2 Gelenkstellen

Aufgeräumte Shader dank Abstrahierung mit Hilfe der neuen HLSL Sprachfeatures

Nachteile des Kompromisses Reduzierung der Komplexität nur nach Außen,

effektiv werden weiterhin alle Permutationen vorkompiliert

Page 30: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Scene Management

Page 31: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Scene Management

Szenenklasse beschränkt sich auf einfaches Frustum Culling Keine Information über die

Szenenstruktur

Spezialisierung durch Implementierung des Scene Node Interfaces Landschaften besitzen von sich aus

Quadtrees Portal-Sektor-System als extra Scene

Node

Page 32: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Simulation

Page 33: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Simulation / SynchronisationSynchronize

• Synchronisation aller Threads

• Abfragen der Resultate

• Controller führen die parallel gewonnenen Daten im Entity zusammen

Step

• Abfragen der vergangenen Zeit

• Animation durch Entities

• Animation durch Controllers

• Weitergabe des Zeitschrittes an parallele Threads(z.B. PhysX)

Page 34: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Amsterdam PhysicsLive Demo

Page 35: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

GhostsLive Demo

Page 36: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

Fragen

Page 37: Zwischenstand Herbst 2009 Tobias Zirr. C++ HLSL / FX C++/CLI C# DirectX 9 Assimp PhysX TinyXml zLib libPNG.NET Framework 2.0.

http://www.alphanew.net/