最近研究了火炬之光的游戏资源,这款游戏采用ogre引擎,也就促使我研究了一下ogre的材质文件格式,发现和我经常使用的unity的材质格式有很多相似之处,因此分享出来给大家。
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的混合方式,以及配置标准的光照参数。
ogre有一个 scroll anim的功能,是非常常用的做纹理动画的参数,但是unity的shaderlab中是没有的,可以用 cg shader来模拟。
火炬之光中常见的几种shader技巧: scroll anim 做水流和烟雾; 用 加法混合 模式来做灯光的混合,做出高亮的光照效果; 使用 反射贴图 加上 scroll anim动画,做出 流光的效果; 使用乘法模式,来做光照 照射物体的效果; 使用纹理帧动画来做假河流 的 波光粼粼效果; 使用 alpha rejection 即alpha 测试来做 一些树叶 草丛等;
这些效果都可以用unity来模拟,对于unity不支持的语法,可以写cg shader来模拟。 unity 同时支持queue 渲染队列的概念,来达到渲染顺序的控制。
来源:oschina
链接:https://my.oschina.net/u/186074/blog/380617