Game programming 08 ogre3d material in action
Download
1 / 23

Game Programming 08 OGRE3D Material in Action - PowerPoint PPT Presentation


  • 123 Views
  • Uploaded on

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.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Game Programming 08 OGRE3D Material in Action' - abba


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


ad