Monday, October 4, 2010

用 Maya 當做 shader 開發的工具

顯示卡的效能一直往上加,加不夠了就來個平行處理,放個幾千個 core 到顯示卡裡,結果就是現在的顯示卡都快得跟什麼一樣,不管是什麼技術都往 real-time 的方向前進,在 Maya 2011 裡多了一個 viewport 2.0 的新選項,
這個連結有簡單的介紹 (http://area.autodesk.com/blogs/stevenr/maya_2011_highlight_viewport_2_0),可以看到使用 viewport 2.0 可以大大的提升預覽的效率,也可以很明顯的感受到這個新加的 viewport 2.0 就是實作了一個對 GPU 支援更佳的 viewport renderer,雖然目前有很多功能上的限制像 (multi uv sets 還不支援 ) 但未來的版本 viewport 3.0? 應該功能上會愈來愈豐富,咦~ 好像有點偏題了 lol。

早在前幾版 Maya 的 devkit 目錄下就可以發現有一個 AshliShader 的外掛,有關 hlslShder 或是 GLSLShader ,那時有試著 build 看看,結果不成功,有缺一些 header 檔,連續幾個版本的 Maya 都缺,感覺是 Autodesk 不想放出來? 但看看其它部份的 code 都還蠻全的,前一陣子在玩 Call of Duty Map 的 importer 時,想說 material 的資料還有 render state 設定的有了,看有沒有辦法直接在 Maya 中直接 preview COD 的場景,剛好趁這個機會一滿多年來的好奇心,就花了一些時間把 AshliShader這個 plug-in補完 (其實也沒有完全,不過至少可以動),


shder 部份我是使用 GLSL 還好一開始沒有目標 hlsl,為什麼呢? 因為 Maya2011 已經內建 hlsl shader node 了! 看到時小驚訝,差一點就做了白工 (謎之聲~不要高興的太早,早晚會加入的),總而言之,現在沒事的時候就可以這個 plug-in 當做研究的工具,修修 bug,改改版之後,搞不好可以那天變得像 ShaderFX ( http://www.lumonix.net/shaderfx.html ) 一樣呢 ( 謎之聲~ 想太多想太多) ,除了 shader 部份,還另外自訂 .mtr 一個像 directX effect 的定義檔,可以定義不同的 technique,像幾個 pass,render state 的切換或是不同 pass 所要使用的 shader 都可以在這個 mtr 中來定義,以下是一個測試用的 mtr 檔,

Material Default
{
    Technique Common
    {
        Pass Pass0
        {
            RenderStates
            {
                AlphaBlendEnable true
                ZEnable true
                ZFunc LessEqual
            }
           
            Uniforms
            {
                sampler2D img
            }
            VSPrograme Default_vs.glsl

            PSProgram Default_ps.glsl
        }
    }
}


最後,還是沒有可以在 Maya 預覽 COD 的場景,原因是場景物件沒有做排序的動作,導至在畫的時候,雖然 alpha 或是 depth 的 render state 都對,但還是畫的結果不是所預期的樣子,結論是如果要真正的做到預覽的話,必需實作一個 COD viewport renderer 才行, YA! 跟開頭第一段連上了 ^^v ,那天又有閒的時候再來玩這個吧。

No comments: