Game programming 08 ogre3d material in action
This presentation is the property of its rightful owner.
Sponsored Links
1 / 23

Game Programming 08 OGRE3D Material in Action PowerPoint PPT Presentation


  • 85 Views
  • Uploaded on
  • Presentation posted in: General

Game Programming 08 OGRE3D Material in Action. 2010 년 2 학기 디지털콘텐츠전공. Rendering in Video Games. Depth-Buffered Triangle Rasterization Virtual Scene Virtual Camera Various Light Sources Visual Properties. Solving the Rendering Equation (Shading Equation). Rendering in OGRE3D.

Download Presentation

Game Programming 08 OGRE3D Material in Action

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Game programming 08 ogre3d material in action

Game Programming 08OGRE3D Material in Action

2010년 2학기

디지털콘텐츠전공


Rendering in video games

Rendering in Video Games

  • Depth-Buffered Triangle Rasterization

    • Virtual Scene

    • Virtual Camera

    • Various Light Sources

    • Visual Properties

  • Solving the Rendering Equation (Shading Equation)


Rendering in ogre3d

Rendering in OGRE3D

  • Depth-Buffered Triangle Rasterization

    • Virtual Scene createScene()

    • Virtual Camera createCamera()/ createViewport()

    • Various Light Sources createScene()

    • Visual Properties material

  • Solving the Rendering Equation (OGRE3D engine)


Materials in general

Materials in general

  • The Material controls how objects look in the scene

    • Basic surface properties such as:

      • reflectance, diffuse color, shininess, etc.

    • How to use textures

      • What images to be used

      • How many and how to blend them

    • Special effects such as:

      • Environmental mapping

      • Culling mode

      • filtering


Materials in ogre

Materials in OGRE

  • SceneManager class manages the list of materials available to the scene

  • To ways of loading a material

    • Creating and tweaking it by a code

      • MaterialManager

    • Using a script to be loaded at runtime

      • Material Script


Material script

Material Script

  • OGRE Material Script:

    • File name: ‘’*.material ’’

    • A text file which describe a material

    • Easy to define a complex material

    • Reuse easily for different games

  • How to load

    • OGRE looks for *.material files in all resource locations.

    • Call ‘load’ method in order to complete the loading process otherwise, the materials are not available.


Material script format

Material Script: Format

// This is a comment

material walls/funkywall1

{

// first, preferred technique

technique

{

// first pass

pass

{

ambient 0.5 0.5 0.5

diffuse 1.0 1.0 1.0

// Texture unit 0

texture_unit

{

texture wibbly.jpg

scroll_anim 0.1 0.0

wave_xform scale sine 0.0 0.7 0.0 1.0

}

// Texture unit 1 (this is a multitexture pass)

texture_unit

{

texture wobbly.png

rotate_anim 0.25

colour_op add

}

}

}

}


Material script name

Material Script: Name

  • Material name

    • Should be unique

    • ‘/’ is used for grouping conceptually

    • ‘:’ can be used after the name for inherit from other existing material

// This is a comment

material walls/funkywall1

{

……

}


Material script technique

Material Script: Technique

// This is a comment

material walls/funkywall1

{

// first, preferred technique

technique

{

………

}

// second, preferred technique

technique

{

………

}

}

  • Technique

    • Define how the material looks

    • Can have multiple techniques used as a fallback or in a different LOD level.

    • Each Technique is made up of multiple passes


Material script pass

Material Script: Pass

  • Single Pass

    • One single rendering with a given setup

    • A pass has global attributes such as ambient, diffuse, etc.

    • A pass can have a texture unit or multiple texture units

  • Multiple Passes (1~16 passes)

    • Rendering can be done multiple times with different setup

    • The final rendering result will be obtained by compositing every results from the passes.

material walls/funkywall1

{

technique

{

// first pass

pass

{

……

}

}

}


Material script pass1

Material Script: Pass

  • Global attributes

    • Ambient color

      • Format: ambient (<red> <green> <blue> [<alpha>]| vertexcolour)

      • Example: ambient 0.0 0.8 0.0

      • Default: ambient 1.0 1.0 1.0 1.0

    • Diffuse color

      • Format: diffuse (<red> <green> <blue> [<alpha>]| vertexcolour)

      • Example: diffuse 1.0 0.5 0.5

      • Default: diffuse 1.0 1.0 1.0 1.0

    • Specular color

      • Format: specular (<red> <green> <blue> [<alpha>]| vertexcolour) <shininess>

      • Example: specular 1.0 1.0 1.0 12.5

      • Shininess: any value between 0~128 (the bigger, the sharper)

      • Default: specular 0.0 0.0 0.0 0.0 0.0


Material script pass2

Material Script: Pass

  • Global attributes

    • scene_blend

      • How to blend the pass with the existing scene content

      • Flexible version:

        • Format: scene_blend <src_factor> <dest_factor>

        • Meaning: (pass_result * sourceFactor) + (scene_pixel * destFactor)

        • Factors: one | zero | src_color | one_minus_src_colour | dest_colour | one_minus_dest_colour | dest_alpha | one_minus_dest_alpha | src_alpha | one_minus_src_alpha

        • Example: scene_blend one one_minus_dest_alpha

      • Simpler version

        • Format2: scene_blend <add | modulate | alpha_blend | colour_blend>

        • Meaning:

          • add: 'scene_blend one one‘ (explosions, flares, lights, ghosts)

          • modulate: 'scene_blend dest_colour zero‘ (darkening, smoked glass)

          • colour_blend: 'scene_blend src_colour one_minus_src_colour'

          • alpha_blend: 'scene_blend src_alpha one_minus_src_alpha‘

        • Example: scene_blend add

    • scene_blend_op

      • Specify the operation in scene blending

      • Format: scene_blend_op <add | subtract | reverse_subtract | min | max>

      • Meaning: (pass_result * sourceFactor) +(-) (scene_pixel * destFactor)

      • Default: scene_blend_op add


Material script pass3

Material Script: Pass

  • Global attributes

    • Lighting on/off

      • Format: lighting <on | off>

      • If off, all objects will be fully lit.

      • Default: lighting on

    • Shading

      • Format: shading <flat | gouraud | phong>

      • Default: shading gouraud

    • Polygon mode

      • Format: polygon_mode <solid | wireframe | points>

      • Default: polygon_mode solid


Material script pass4

Material Script: Pass

  • Global attributes

    • Depth check

      • Format: depth_check <on|off>

      • Default: depth_check on

    • Depth write

      • Format: depth_write <on|off>

      • Default: depth_write on

    • Depth function

      • Determine how to check the depth

      • Format: depth_func <func>

      • <func>

        • always_fail : Never writes a pixel to the render target

        • always_pass : Always writes a pixel to the render target

        • less : Write if (new_Z < existing_Z)

        • less_equal : Write if (new_Z <= existing_Z)

        • equal : Write if (new_Z == existing_Z)

        • not_equal : Write if (new_Z != existing_Z)

        • greater_equal : Write if (new_Z >= existing_Z)

        • greater :Write if (new_Z >existing_Z)

      • Default: depth_func less_equal


Material script texture unit

Material Script: texture_unit

  • Texture

    • Set name of the texture image

      • Format: texture <texturename> [<type>] [unlimited | numMipMaps] [alpha] [<PixelFormat>] [gamma]

      • Example: texture funkywall.jpg

  • Animated texture

    • Set the images to be used in animated texture

      • Format1 (short): anim_texture <base_name> <num_frames> <duration>

      • Example: anim_texture flame.jpg 3 1.5

      • Meaning: load 3 frames (frame_0.jpg, frame_1.jpg, frame_2.jpg) for 1.5 sec.

      • Format2 (long): anim_texture <frame1> <frame2> ... <duration>

      • Example: anim_texture flamestart.jpg flamemore.png flameagain.jpg 1.5


Material script texture unit1

Material Script: texture_unit

  • Texture coordinate set

    • Sets which texture coordinate set is to be used

      • Format: tex_coord_set <set_num>

      • Example: tex_coord_set 2

  • Texture address mode

    • Defines what happens when uv values exceed 1.0

      • Simple Format: tex_address_mode <uv_mode>

      • Extended Format: tex_address_mode <u_mode> <v_mode>

      • Mode: <wrap | clamp | mirror | border>

  • Texture border color

    • Set the border color when thexture address mode is border

      • Format: tex_border_colour <red> <green> <blue> [<alpha>]

      • Example: tex_border_colour 0.0 1.0 0.3


Material script texture unit2

Material Script: texture_unit

  • Color operation

    • Determines how the color of this texture layer is combined with the one below it

    • Format: colour_op <operation_type>

    • Operation types:

      • replace : Replace all color with texture with no adjustment

      • add : Add color components together.

      • modulate : Multiply colour components together

      • alpha_blend : Blend based on texture alpha

    • Default: colour_op modulate


Material script texture unit3

Material Script: texture_unit

  • Texture Transformation

    • Scroll

      • Sets a fixed scroll offset for the texture.

      • Format: scroll <x> <y>

    • Scrolling animation

      • Sets up an animated scroll for the texture layer

      • Format: scroll_anim <xspeed> <yspeed>

    • Rotate

      • Format: rotate <angle>

    • Rotating animation

      • Format: rotate_anim <revs_per_second>

    • Scale

      • Format: scale <x_scale> <y_scale>


Material script texture unit4

Material Script: texture_unit

  • Advanced Texture Transformation

    • Animation using wave function

      • Format: wave_xform <xform_type> <wave_type> <base> <frequency> <phase> <amplitude>

      • Example: wave_xform scale_x sine 1.0 0.2 0.0 5.0

      • xform_types:

        • scroll_x : Animate the x scroll value

        • scroll_y : Animate the y scroll value

        • rotate : Animate the rotate value

        • scale_x : Animate the x scale value

        • scale_y : Animate the y scale value

      • wave_types:

        • sine

          • A typical sine wave which smoothly loops between min and max values

        • triangle

          • An angled wave which increases & decreases at constant speed, changing instantly at the extremes

        • square

          • Max for half the wavelength, min for the rest with instant transition between

        • sawtooth

          • Gradual steady increase from min to max over the period with an instant return to min at the end.

        • inverse_sawtooth

          • Gradual steady decrease from max to min over the period, with an instant return to max at the end.

      • Base: The base value, the minimum if amplitude > 0, the maximum if amplitude < 0


Material script other functions

Material Script: other functions

  • There are other advanced shader-based functions in Material script

    • Vertex/geometry/fragment programs

    • CG programs

    • HLSL programs

    • GLSL programs


Reference for the materials

Reference for the materials

  • http://www.ogre3d.org/tikiwiki/Materials


Manual creation

Manual Creation

  • Using MaterialManager

Ogre::MaterialPtr material =

Ogre::MaterialManager::getSingleton().create

(

"Test/ColourTest",

Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME

);

material->getTechnique(0)->getPass(0)->setDiffuse(Ogre::ColourValue(1.0,0.0,0.0));


Material basic attributes

Material basic attributes

  • ambient reflectance = ColourValue::White (full)

  • diffuse reflectance = ColourValue::White (full)

  • specular reflectance = ColourValue::Black (none)

  • emmissive = ColourValue::Black (none)

  • shininess = 0 (not shiny)

  • No texture layers (& hence no textures)

  • SourceBlendFactor = SBF_ONE, DestBlendFactor = SBF_ZERO (opaque)

  • Depth buffer checking = on

  • Depth buffer writing = on

  • Depth buffer comparison function = CMPF_LESS_EQUAL

  • Culling mode = CULL_CLOCKWISE

  • Ambient lighting in scene = ColourValue(0.5, 0.5, 0.5) (mid-grey)

  • Dynamic lighting = enabled

  • Gourad shading mode

  • Solid polygon mode

  • Bilinear texture filtering


  • Login