最近研究了火炬之光的遊戲資源,這款遊戲採用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 渲染隊列的概念,來達到渲染順序的控制。遊戲