Game Development mit der eigenen Engine - Philipp Hellmann Lead Technical Artist / Founder
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Game Development mit der eigenen Engine Philipp Hellmann Lead Technical Artist / Founder philipp@pipedream-games.com
Agenda • Pipedream Team • Der Weg zur Pipedream Engine • Allgemeines zur Spieleentwicklung • Technisches zur Engine • Grafik Pipeline und Optimierungen • Ausblicke • Aktueller Stand: erste App "Memotion"
Pipedream Team Felix Klakow Lead Developer & Gründer Philipp Hellmann Lead Technical Artist & Gründer Tarek Samaan Creative Director & Shareholder
Pro fremde Engine • Kostengünstig • Gute Artist Pipeline • Feature Set (Partikel, Animation, Multiplattform, Asset Store, etc) • Bekanntheit
Pro Eigenbau • Source Code • Maßgeschneiderte Content Pipeline • Entwicklungsgeschwindigkeit • Begeisterung und Herausforderung • Kostenneutral • Modularer Aufbau • Vermarktungsmöglichkeiten • Devices / Features simulierbar
Säulen des Game Development Engine 2D Graphics 3D Models Gameplay Animation Tools Texturing Shader Shading Optimisation Optimisation Gameplay Export Planning Storytelling Organisation Concept Marketing Mechanics Business Music Level QA Sound FX Design DESIGN CODE ART PRODUCING SOUND
Der Weg zur Pipedream Engine • Entwicklungsumgebung • Programmiersprache • Basis Framework • Tools • Grafik API
OpenGL oder DirectX • OpenGL ( ES 2.0 ) o Plattform unabhängig! o Komplexer, schwieriger wie... • DirectX o Leichtere Entwicklung o nur Windows & Windows Phone
Vorgehensweisen mit OpenGL Handle = GL.GenTexture() GL.BindTexture(TextureType, Handle); GL.TexImage2D(TexImage2DTarget.TEXTURE_2D, i, internalFormat, Width >> i, Height >> i, tImgFormat, pixelType, source.GetData(i)); GL.TexParameter(TextureType.TEXTURE_2D, TexParameter.TEXTURE_MIN_FILTER, (Int32)TextureMinFilterParams.LINEAR_MIPMAP_LINEAR); GL.TexParameter(TextureType.TEXTURE_2D, TexParameter.TEXTURE_MAG_FILTER, (Int32)TextureMagFilterParams.LINEAR); GL.TexParameter(TextureType.TEXTURE_2D, 0x84FE, anisotropicQuality); GL.TexParameter(TextureType.TEXTURE_2D, TexParameter.TEXTURE_WRAP_S, (Int32)wrapS); GLTextures.TexParameter(TextureType.TEXTURE_2D, TexParameter.TEXTURE_WRAP_T, (Int32)wrapT);
Wo fängt man an? • Basis-Framework o Shader o VertexBuffer o Texturen o Mathematik ( Matrizen, Vektoren, Quaternions,... ) o Dependency Objects o Coroutinen
Vertex shader attribute vec3 aPosition; attribute vec3 aNormal; attribute vec4 aTangent; attribute vec2 aUV0; uniform mat4 modelViewMatrix; varying mediump vec2 vUV0; varying mediump vec3 vNormal; varying mediump vec4 vTangent; void main() { gl_Position = modelViewMatrix * vec4(aPosition, 1); vUV0 = aUV0; vNormal = aNormal; vTangent = aTangent; }
Pixel-Shader uniform sampler2D uDiffuse; uniform sampler2D uAlpha; uniform vec4 uTeamColor; varying mediump vec2 vUV0; varying mediump vec3 vNormal; varying mediump vec4 vTangent; void main() { vec3 n = normalize(vNormal) * 0.5 + vec3(0.5, 0.5, 0.5); vec4 diffuse = texture2D(uDiffuse, vUV0); float alpha = texture2D(uAlpha, vUV0).r; float invAlpha = 1 - alpha; gl_FragColor = (vec4(dot(n, vec3(.393, .769, .189)), dot(n, vec3(.349, .686, .168)), dot(n, vec3(.272, .534, .131)), 1) * vec4(diffuse.rgb, 1) * invAlpha) + (uTeamColor * alpha); }
Wo mach man weiter? • GUI - Graphical User Interface o Text ( Fonts laden & darstellen ) o Event-Handling o Basic-Controls o Button, ListBox, Slider, ToggleButton, Fenster o Container Struktur o Databinding!! o XML-Beschreibungsformat für das User-Interface
GUI in unserer Engine Unity: if (GUI.Button (new Rect (Screen.width - 150 - 10, Screen.height - 100 - 10,150,100), "I am a button")) { print ("You clicked the button!"); } Pipedream Engine:
Engine Demo 1-Tages Demo: • GUI Features • 3D Darstellung • XML und UI-Skins
2D Grafik Pipeline Aktuell: Zukünftig:
2D Grafik Pipeline
2D Grafik Pipeline
Hürden der Echtzeitgrafik
Hürden der Echtzeitgrafik 2D Grafiken Speicherverbrauch! -> Performance Probleme -> Darstellungsqualität Mögliche Ansätze: Wiederbenutzung, Kompression, Mipmaps, Prozedurale Grafik
Optimierungsmöglichkeiten Mip Mapping
Optimierungsmöglichkeiten Mip Mapping links: kein Mipmapping rechts: mit Mipmapping
Optimierungsmöglichkeiten Hardwaretexturformate: ETC1 (Ericsson Texture Compression) PVRTC (PowerVR Texture Compression) ATITC (ATI Texture Compression) S3TC (S3 Texture Compression)
Optimierungsmöglichkeiten
3D Grafik Vertex, Polygon Faces, UVW Koordinaten, Hierarchien, Shader, etc -> Export Format (OBJ, FBX, COLLADA, eigenes)
3D Grafik Optimierungsmöglichkeiten: • Polygoncount • Texturgröße und Anzahl • Shader • Batching Faken: z.B. Licht mittels Lightmapping 1. UV Kanal für Diffuse Texture 2. UV Kanal für Lightmapping -> Shader wird benötigt
3D Grafik Zu meisternde Hürden: • 3D Format importieren (FBX) • Animationen (Morphtargets, Bones/Skin) • Materialien / Shader Editor • Partikel (auch 2D) • Physik (bereits integriert: OpenSource)
3D Grafik als 2D Spiel
3D Grafik als 2D Spiel
Geburt eines Characters
Geburt eines Characters
Geburt eines Characters
Technical Artist Tools Coder von UI befreit, dank XML Struktur! Kleine Hilfsmittel im Alltag der Grafiker: Pipedream Technical Artist Tools • C# PVRTC Command Line Tool • Puzzle Piece Generator • MultiExporter
Probleme bei der Entwicklung • Plattform abhängige Unterschiede o Unterschiedliche Grafikchips o Plugins (Stores, Werbung, etc) o Unterschiedliche Auflösungen -> komplizierte UI • Ausführliches Testen extrem aufwendig • Viele weitere Probleme (Apple, Compilerfehler)
Memotion - erstes 2D Game
Memotion - erstes 2D Game
Game Development, Advertisment, Visualisation Kontakt: mail@pipedream-games.com www.pipedream-games.com memotion.pipedream-games.com Vielen Dank! "Memotion" iOS App bald kostenfrei verfügbar!
Sie können auch lesen