CSc 165 Lecture Note Slides 11 - For Games CSc 165 Game Architecture Overview

• Model Characteristics 11 – 3D Modeling • 3D Model File Formats for Games • Model Loaders

• Digital Content Creation (DCC) Tools

• Skinning and UV-unwrapping

2

CSc 165 Lecture Note Slides CSc 165 Lecture Note Slides 11 - 3D Modeling For Games 11 - 3D Modeling For Games Models Static Data o 3D geometry (vertex data) o (face) data o Rendering attributes o Wireframe / Faceted / Smooth-shaded o Lighting & Materials o Texturing (“skinning”) data Animation Data (sometimes) o Model structure (skeletons, joints) o Model poses o Animation sequences o walk / run / jump / die …

3 4

CSc 165 Lecture Note Slides CSc 165 Lecture Note Slides 11 - 3D Modeling For Games 11 - 3D Modeling For Games

Common 3D Model File Formats .msdl – Manchester Scene Description Language .nff & .enff – (Extended) Neutral .3ds – 3D Studio Max format .obj – Alias|Wavefront Object Files .blend – format .off – 3D mesh Object File Format .dae – COLLADA Digital Asset Exchange format .oogl – Object Oriented Graphics .dem – USGS Standard for Digital Elevation Models .ply – Stanford Scanning Repository format .dxf – 's AutoCAD format .pov – Persistence of Vision ray-tracer .hdf – .qd3d – Apple's QuickDraw 3D metafile format . – Initial Graphics Exchange Specification .viz – used by Division's dVS/dVISE .iv – Inventor File Format Info . – Virtual Reality Modeling Language .lwlo, .lwob & .lwsc – Lightwave 3D file formats .x – ’s DirectX/ file format .md2/.md3/.md4/.md5 – Model Files . – eXtensible 3D XML-based scene description format .ms3d – Milkshape 3D binary format See wikipedia –

5 6 CSc 165 Lecture Note Slides CSc 165 Lecture Note Slides 11 - 3D Modeling For Games 11 - 3D Modeling For Games .OBJ File Commands .OBJ Example # File: ‘cube.obj’ # This file uses “OBJ” format to define a cube Vertex data Grouping # Define 8 cube vertices o v – geometric data o g – group name v -1.0 -1.0 -1.0 o vt – texture data o s – smoothing group v -1.0 -1.0 1.0 v -1.0 1.0 -1.0 o vn – vertex normals o mg – merging group v -1.0 1.0 1.0 o o – object name v 1.0 -1.0 -1.0 v 1.0 -1.0 1.0 Elements Render Attributes v 1.0 1.0 -1.0 o p – point o usemtl – material name v 1.0 1.0 1.0 o l – line o mtllib – material file name # Specify the file (library) containing materials o f – face o lod – of detail mtllib cube.mtl o curv – curve o shadow_obj – casting

o surf – surface #continued...

7 8

CSc 165 Lecture Note Slides CSc 165 Lecture Note Slides 11 - 3D Modeling For Games 11 - 3D Modeling For Games OBJ Face/Vertex Data Structures Content Loaders in RAGE

Faces Vertices <> Insert # File ‘man.obj’ Entity v -1.0 -1.0 -1.0 V2 Object in some <> Scenegraph 1 x y z MeshLoader v -1.0 -1.0 1.0 1 V4 specific file format v -1.0 1.0 -1.0 V3 + loadAsset() ... 2 x y z Model vt 0.72 0.32 V 1 File GenericEntity vt 0.86 0.33 3 x y z 2 V2 ... V5 vn 1.0 0.0 1.0 4 x y z WavefrontMeshLoader Create vn -1.0 0.0 0.5 + loadAsset(fileName) ... V3 5 x y z 3 <> f 2/1/1 4/2/1 3/3/2 V4 SubEntity V1 f 1/4/2 2/4/2 5/5/3 6 x y z Format-specific GenericSubEntity ...

. . . . loader code - vertexBuffer

- TexCoordBuffer - NormalsBuffer

9 10

CSc 165 Lecture Note Slides CSc 165 Lecture Note Slides 11 - 3D Modeling For Games 11 - 3D Modeling For Games Example: .OBJ Content Loader Digital Content Creation (DCC) Tools public class WavefrontMeshLoader implements MeshLoader { ...

public void loadAsset(Mesh mesh, path) { List verts = new ArrayList<>(); Too much work to do “by hand” List norms = new ArrayList<>(); List texcoords = new ArrayList<>(); BufferedReader br = Files.newBufferedReader(path); Model String line; Model in different format 1 while ((line = br.readLine()) != null) DCC File { if (line.startsWith(VERTEX_COMMAND)) commands { processVertexPositionCommand(line, verts); } Tool else if (line.startsWith(TEXTURE_COORD_COMMAND)) { processVertexTextureCommand(line, texcoords); } Model Model in different format 2 else if (line.startsWith(NORMAL_COMMAND)) File { processVertexNormalCommand(line, norms); } “Import” else if (line.startsWith(FACE_COMMAND)) { processVertexFaceCommand(line); } “Export” else if (line.startsWith(MATERIAL_COMMAND)) Scenegraph { materialLib = line.split(" ")[1]; } } SubMesh sm = mesh.createSubMesh(mesh.getName()); Model Content Entity createVertexBuffers(verts, norms, texcoords); File Loader sm.setVertexBuffer(toFloatBuffer(vertexPositionsList)); sm.setNormalBuffer(toFloatBuffer(vertexNormalsList)); sm.setTextureCoordBuffer(toFloatBuffer(vertexTexCoordsList)); sm.setIndexBuffer(toIntBuffer(vertexIndicesList)); } Model in Content-Loader format ... 11 12 CSc 165 Lecture Note Slides CSc 165 Lecture Note Slides 11 - 3D Modeling For Games 11 - 3D Modeling For Games DCC Tools Blender Features: Commercial . Modeling, texturing, lighting, UV-mapping . Animation rigging/skinning o Maya . Particle, physics, soft-body, fluid & cloth simulations o 3DStudio Max . Game engine, video post-processing o Lightwave . Python scripting/plugin support . Cross-platform (Windows, , Mac OSX, FreeBSD, Solaris….) o etc., etc. … . Import/export for a wide variety of model file formats Free (or nearly) . Extensive online documentation/wiki support o Blender Availability: . Free (GNU GPL license), at http://www.blender.org o MilkShape3D o Maya / 3DStudio Max for students Tutorials: o etc. … . http://www.blender.org/support/tutorials

13 14

CSc 165 Lecture Note Slides CSc 165 Lecture Note Slides 11 - 3D Modeling For Games 11 - 3D Modeling For Games Example Blender Models Basic Blender Controls

Viewing: Object Manipulation (in object mode): • Scroll-wheel: zoom • RMB: select (SHIFT to add) • MMB: orbit (rotate 3D view) • A-key: toggle select-All • Shift-MMB: pan • B-key: activate border-selection (rubber-band select) • Reset view to Top: NUM-7 Front: NUM-1 Side: NUM-3 • DEL-key: delete selected • Z-key: toggle wireframe • LMB: position 3D cursor • NUM-0: switch to camera view • Shift-A: add object (at cursor loc) • NUM-5: toggle ortho/perspective view • Transform selection: • HOME: set view to show all objects -key: rotate S-key: scale G-key: grab LMB to accept; RMB or ESC to cancel • Ctrl-Z: undo • Quick move: RMB on object, drag, • Ctrl-S: save workspace LMB to drop • Ctrl-N: reset (discard all; new session) • Shift-: duplicate selection • F12: render (drag to reposition) • TAB: toggle object/edit mode

15 16

CSc 165 Lecture Note Slides CSc 165 Lecture Note Slides 11 - 3D Modeling For Games 11 - 3D Modeling For Games Building Models From Primitives Model Exporting Most DCC tools export a variety of formats Blender supports exporting to: o Collada XML (“.dae”) o Wavefront OBJ (“.obj”) Original Cube Extrude Multiple Extrusions o Stanford Graphics Library (“.ply”) o 3DStudio Max (“.3ds”) o A host of others via “addons” . Including “OgreXML” RAGE has ModelLoaders for

Scale Ends Scale Inner Add Bevels o OBJ and Smooth Surfaces o Model concept: The Essential Blender, RAGE Skeletal Animation (custom Blender exporter) Roland Hess, Blender Foundation 17 18 CSc 165 Lecture Note Slides CSc 165 Lecture Note Slides 11 - 3D Modeling For Games 11 - 3D Modeling For Games Exporting Models Advanced Modeling: Sculpting

# Blender3D v249 OBJ File: CrossDemo.blend # www.blender3d.org mtllib CrossDemo.mtl v 0.515410 2.745096 -0.496360 v 0.515410 2.745096 0.496359 v -0.477309 2.745096 0.496359 v -0.477309 2.745096 -0.496360 v 0.515410 3.737815 -0.496359 v 0.515410 3.737815 0.496360 v -0.477309 3.737815 0.496359 Original sphere “Add” brush “Grab” brush v -0.477309 3.737815 -0.496360 applied to Sphere v -0.523100 6.135959 0.542150 v -0.523100 6.135958 -0.542150 v 0.561200 6.135959 0.542150 Export: v 0.561201 6.135958 -0.542150 Ogre ...#total 44 vertices OBJ usemtl Material s 1 DAE f 2 6 7 f 5 1 4 f 12 10 9 f 13 14 15 f 1 42 44 f 21 24 44 ...#total 42 faces “Layer” brush “Inflate” brush “Texture” brush Images from: The Essential Blender, 19 20 Roland Hess, Blender Foundation

CSc 165 Lecture Note Slides CSc 165 Lecture Note Slides 11 - 3D Modeling For Games 11 - 3D Modeling For Games Skinning Texture Space Subdivision

Applying “texture” to 3D models Texturing meshes by dividing texture space: Problem: is per-polygon: Models are collections of

Texture Map Polygon Mesh (1,1) Polygon Texture Map

(0,0) v v u u

21 22

CSc 165 Lecture Note Slides CSc 165 Lecture Note Slides 11 - 3D Modeling For Games 11 - 3D Modeling For Games Skinning Example Texture Subdivision Difficulties Requires creating a complex mapping (and the model is often curved) . How do we create the texture map? . How do we determine the correct mapping?

Mapping texture locations to model coordinates

Image credit: Practical Java Game Programming, Image credit: Practical Java Game Programming, Clingman et.al., Charles River Media Clingman et.al., Charles River Media 23 24 CSc 165 Lecture Note Slides CSc 165 Lecture Note Slides 11 - 3D Modeling For Games 11 - 3D Modeling For Games Creating Texture Skins Example: Soup Can

GIMP, PhotoShop, … . Create the model Soup Can Model (Cylinder) Create . Flatten the model (“UV Unwrapping”) Texture Unwrap Mark seams Image Cut along seams (“project”) . Save unwrapped (flattened) UV image . Save model with texture coordinates Model with Texture Coords Texture Image

. Use UV image as a “pattern” to create map Texture GIMP, PhotoShop, ... Mapping . Apply texture map to model

Image credit: 3D Game Programming All In One, 25 Kenneth Finney, Premier Press 26

CSc 165 Lecture Note Slides CSc 165 Lecture Note Slides 11 - 3D Modeling For Games 11 - 3D Modeling For Games Blender UV Unwrapping Character Models More complex, but same approach:

. Create model

. Mark/cut seams (some tools support groups)

. Project UV’s

. Save projection image

. Use projection image to create texture

. Apply texture to UV map/model

28 27

CSc 165 Lecture Note Slides CSc 165 Lecture Note Slides 11 - 3D Modeling For Games 11 - 3D Modeling For Games Blender: Character Example Step 2: Mark Seams Step 1: Load/Create Model

Example from: 3D Game Programming All In One, Kenneth Finney, Premier Press 29 30 CSc 165 Lecture Note Slides CSc 165 Lecture Note Slides 11 - 3D Modeling For Games 11 - 3D Modeling For Games

Step 3: Export UVs Step 4: Paint Texture

GIMP, PhotoShop, MS Paint, etc.

31 32

CSc 165 Lecture Note Slides 11 - 3D Modeling For Games Step 5: Apply Texture to Model

33