最近研究了火炬之光的游戏资源,这款游戏采用ogre引擎,也就促使我研究了一下ogre的材质文件格式,发现和我常常使用的unity的材质格式有不少类似之处,所以分享出来给你们。html
ogre的材质文档能够参考这里 http://www.ogre3d.org/docs/manual/manual_16.html , 而unity的shader文档参考这里 http://docs.unity3d.com/Manual/SL-Shader.html编程
unity的shader语言分为3种,即shaderlab,相似于固定管线语法;cg shader,比较经典的shader语法,至关于对shaderlab的扩展可编程语法;以及surface shader,这个是另一种系统,没有pass的概念,至关于 基于某种光照模型,而后调整光照模型的参数。 第三种语法不是很熟悉, 若是有了解这第三种模型渊源的朋友能够告诉我。测试
继续将ogre和unity的对比: 相似的二者的材质语言 都有固定管线和 可编程管线 语法。 其中unity中的shaderlab 标准语法和ogre 相比很相似,可是ogre比unity的shaderlab强大一些。动画
二者都有基本的Pass概念,基本语法形式都是在Pass中操做texture的混合方式,以及配置标准的光照参数。3d
ogre有一个 scroll anim的功能,是很是经常使用的作纹理动画的参数,可是unity的shaderlab中是没有的,能够用 cg shader来模拟。htm
火炬之光中常见的几种shader技巧: scroll anim 作水流和烟雾; 用 加法混合 模式来作灯光的混合,作出高亮的光照效果; 使用 反射贴图 加上 scroll anim动画,作出 流光的效果; 使用乘法模式,来作光照 照射物体的效果; 使用纹理帧动画来作假河流 的 波光粼粼效果; 使用 alpha rejection 即alpha 测试来作 一些树叶 草丛等;队列
这些效果均可以用unity来模拟,对于unity不支持的语法,能够写cg shader来模拟。 unity 同时支持queue 渲染队列的概念,来达到渲染顺序的控制。游戏