接触Gamebryo 1年多了,其中一部分时间都在进行游戏逻辑的编写,对游戏的理解也有所提高。最近略有小成,抽出时间理了下Gamebryo的材质系统,翻开了网上不少兄弟写的东西。阅读了Gamebryo的DOC,发现国内没有对于Gamebryo材质系统的详细

描述,都是对材质系统大的框架进行说明。今天我就起个头,向大家好好介绍下Gamebryo的材质系统。

如果大家对于Gamebryo的材质系统了解不深,那么请看以下几篇文章,个人觉得他们已经对材质系统框架作出了大体的描述。

/flying_bat/archive/2009/04/22/1441014.html Gamebryo渲染系统剖析,作者:叶起涟漪

/article.asp?id=97 Gamebryo材质系统详解,作者:volfmath

以下我会以下面方式来详述 材质系统:

1、材质系统类结构,基本框架。

2、Gamebryo的渲染流程。

3、一个小例子关于Gamebryo材质系统改造,并借此理解材质系统对Shader的组织流程,和渲染流程。

一、shade Tree

首先大家必须知道Gamebryo的材质系统是基于Shade Tree的,其通过shadeTree生成程序。个人认为有以下几个好处,若

有错误大家可指出:

1、可定制性,其中shader代码根根据功能函数分成各种代码段,我们做的只是连接(Bind),组合(add),构造成适合自己

的渲染流程。

2、代码的重用性,shader代码基于功能级别的不断重用。其实丢你一大堆 Utity函数,自己组合吧。

3、面对美术的,对于游戏开发角度来说,我们需要提供各种表现手段,通过这些手段的组合,最终呈现给玩家。美术只关注于

程序给他多少东西用,程序关注的是我如何把这些东西提供给美术,如果把所提供的东西进行有效的组织。

好了基于以上的原则,并不限于以上原则shadeTree出现了。先看一张老图,总要上的,Gamebryo标准材质图,这些便是Gamebryo

封装好,提供给我们使用的标准材质:

Gamebryo的默认材质提供了以下所有的东西:

  • Skinned and unskinned transformations. Skinned transformations can support up to 30 bones per draw call.

  • Vertex colors

  • Base maps

  • Normal maps

  • Parallax maps

  • Dark maps

  • Detail maps

  • Bump environment maps

  • Gloss maps

  • Glow maps

  • Decal maps (up to 3)

  • Cubic and spherical environment maps

  • Point/Spot/Directional/Ambient lights contributing to the diffuse, specular, and ambient color. Up to 8 total lights. Per-pixel or per-vertex.

  • Projected light maps. Clipped or unclipped. (Up to 3)

  • Projected shadow maps. Clipped or unclipped. (Up to 3)

  • Texture transforms per map.

  • Per-vertex fog

     

    并且按照下图描述把各种纹理,光照,材质进行组合。我们需要注意的是bump maps 和 parallax maps是比较特殊的类。

  • 视差贴图和凹凸贴图属于特殊的情况,它们仅仅影响到纹理采样的UV坐标,他并不会影响到最终输出的颜色。视差贴图会改变所有贴图的

    UV值,凹凸贴图只会影响环境贴图。(注:环境贴图在Gamebryo里面实现的就是一种假反射)


    今天写到这里,明天继续

    posted on 2011-01-22 21:02  java-time  阅读(442)  评论(0编辑  收藏  举报