基本对象着色
材质,简单的来讲就是定义了被赋于此材质的对象如何反射光。ogre中的光照采用局部光照模型,这意味着,对计算有影响的因素有:光照的角度与光的颜色,相机的视角,对象的材质。ogre支持四种类型用来描述材质的颜色,表述了光照对它的影响:环境光,漫反射,发散,镜面反射。环境光是对全局光照的近似,漫反射是指当物体被光照射后在物体各方向上反射的光的颜色。发散指物体本身自发光的颜色。镜面反射,指的是在某个视角看到的被光反射出的“高光”。镜面高光有两个参数可以控power,shininess.power用来控制“加亮点”的尺寸(影响的范围越大)。而shininess值越大的表面,高光越容易聚集。
纹理映射
通过纹理坐标,用一张2D图片给3D对象着色的技术。
可编程着色通过写高级或低级的顶点程序,片段程序代替固定管线的功能。支持可编程图形硬件也可以当做固定函数流水线硬件来用。可编程硬件允许更灵活的计算顶点的的颜色,位置等。纹理也可用于可编程硬件。纹理中包含的数据,不仅仅可以表示颜色,也可以表示任何其他程序员知道如何处理的数据。
Batching
材质与mesh之间的关系所带来的最大影响是渲染状态的改变。ogre中的渲染单元大多数情况下指的是renderable,它是SubEntity的父类。渲染单元这个概念的重要性在于,正是在这里,ogre将调用显卡驱动开始并且会结束“画操作”。一次画操作(batch),指的是清除颜料(color,texture,etc)与材料(vertexof display lists),从头开始一组新的操作的过程。就像一个画家每次在画板上做画时会洗净他的调色板一样。对于3D硬件来讲,这个过程包括发送新的顶点列表与数据索引到GPU(或者引用还存在的),用纹理,颜色,以及光栅化这些顶点组成的面需要的一些元数据来设置GPU。因此,最有效率的做法是一次尽可能多的把
使用同样渲染数据的顶点发送到GPU进行处理。ogre会尽量减小状态改变带来的影响,但它遵重你如何构成一个renderable的决定。假如你有一个模型它有20个块组成,它们都使用相同的材质,这时应该把他们整合到相同的renderable中去,而不是分20次batch发送到显卡。每帧的batch数会有个上限。
材质克隆
ogre中的材质是共享的。当你从材质管理器获得一个指针,它与从使用这种材质的其他对象所拥有的材质
指针是相同的。因此改变一处会影响其他,为了避免影响其他应该克隆材质。
Technique & Scheme
Technique允许针对不同的硬件平台定制不同的材质。Scheme允许对特定一组技术进行更一般化的描述。Ogre选择技术时有明确的顺序。首先,它寻找属于某个命名Scheme中的技术。然后在选好的scheme中查找那些应用了特定材质lod的技术。最后在这些技术列表中,选择最能适应当前硬件设置的技术。缺省,所有的技术属于细节级别0,它对应最高细节级别。
Material LoD层次细节这个术语常用来讨论随场景中的物体的几何复杂性是相机与物体之间距离的函数。类似的概念被应用到材质定义上。ogre提供了在哪个层次细节上使用特定技术的手段。可以在材质中定义层次细节发生变化时的距离,赋于材质中的每个技术一个细节索引。每个细节索引也可以有多个技术,用来支持scheme或是硬件能力fallback。
材质组成
一个materail由一个或多个technique组成,后者又由一个或多个pass组成,一个时刻只有一个technique是活动的。pass对于在GPU上执行画操作的renderable来讲,是完整的原子渲染状态。假如选择的技术有三pass,那么每帧会对renderable进行三次画操作。pass可以引用纹理单元定义,而不必包含任何纹理单元定义。
纹理单元
ogre materail中的纹理单元实际引用GPU上的texture sampler.多数现代图形硬件有多个texture sampler,
ogre支持的硬件至少有一个有效的texture sampler。纹理单元包括一个纹理的引用,可以来自一个磁盘文件,或是运行时渲染,或是来自外部视频流。可以在每个pass中指定多个纹理单元。ogre会检测硬件支持的能力,必要时把一个pass折分成多个pass。举例来说,假设pass中指定6个纹理单元,而硬件只支持4个,那么ogre会把这个pass拆分成两个,对这两个pass执行纹理混合以达到相同的设计功能。纹理通常保存在video memory中,直到它们不再需要。ogre不会每次需要时都通过总线传输纹理,除非纹理经常地从
video memory中剔除。(这时发生了纹理震荡,原因是有太多或太大的纹理同时存在于vedio memory中)。
纹理压缩
现代图形硬件支持压缩纹理。ogre只是简单地把纹理按原样传送他们到图形硬件中去,它不会压缩纹理。
对于那些压缩过的纹理,也不必事先处理它,如果硬件不支持压缩纹理,ogre会在运行时解压缩。
实体
在渲染期间,Entity主要作为subentities的容器来用,subentities是实际的渲染单元(renderable)。
subentity与submesh有一一对应的关系,后者提供原始的材质引用。概念上来讲,entity(subentity)提供了对象的渲染属性,而mesh(submesh)提供了对象的结构属性。
posted on 2007-03-13 11:31
清源游民 阅读(2573)
评论(1) 编辑 收藏 引用 所属分类:
OGRE