DXSAS : DirectX Standard Annotations and Semantics,DirectX引入的一項在Shader代碼與應用程序之間進行數據綁定的規范,當出到0.8時被廣泛用于各種應用程序中,后來從MS的產品線中神秘消失,有關DXSAS的規范文檔被從MSDN中移除,只留下幾頁引用說明。。。
簡單來說,當我們在DX中使用Shader的時候,我們會使用一個常量表來設置各種參數值,其中最重要的當屬世界變換矩陣了。這在用DX寫游戲程序時沒有問題,但是在其他一些Shader編輯工具中問題就出來了,如何設置這些變量?當然,每種工具可以提供自己的方法,比如現在Max,Maya都提供了自己的方法在Shader中綁定世界變換矩陣,但問題是每種工具提供的方法都不一樣,這樣寫出來的Shader文件就麻煩了。。。
于是,MS這時站出來,提出了一個標準:DXSAS。這是目前還能找到的DXSAS的一段描述:
Standard annotations and semantics (DXSAS) provide a method of using shaders in a standard way that enables shaders to be used with tools, applications, and game engines. DXSAS defines a set of semantics and annotations that are attached to host application values and effect parameters for the purpose of sharing effects.
地址:http://msdn.microsoft.com/en-us/library/bb173004(VS.85).aspx
有標準是好事,而且我們也能看到,大量的Shader工具及游戲引擎也使用到了SAS,比如FXComposer,比如RenderMonkey,比如CryEngine。。。當然,各工具可能對SAS都會有自己的擴展,但大部分還都是按照標準來的。
可是,為什么MS突然就將這標準移除了。。。而且,沒有任何理由的。。。以至于FXComposer1.8版本以前的文檔中附帶的SAS描述章節也跟著一并刪除,我在FXComposer2.5上找遍了整個手冊也沒找到這個 WorldViewProjection 從哪里來,翻遍了MSDN上HLSL有關的內容也沒有看到這幾個關鍵字。無奈Google之,原來受此困惑的人還真不少。
好在,Nvidia推出了一份新的文檔,描述SAS的使用方法,或許Nvidia也很困惑,“which came from DirectX 9, and are sometimes hard to find”。。。但是新的FXComposer手冊中對這些只字未提卻是我仍然很困惑的,對于像我這樣的一個新手來說,完全不可能知道這些東西是如何來的,如何去找這些Semantics的定義。
Nvidia網站上的SAS說明文檔:http://developer.nvidia.com/object/using_sas.html
以及FXComposor官方論壇上置頂的關于SAS文檔的說明貼,當時我竟然沒看到這個置頂貼 :( http://developer.nvidia.com/forums/index.php?showtopic=1358
其他人提出的一些相關疑問:
http://developer.nvidia.com/forums/index.php?showtopic=750
http://developer.nvidia.com/forums/index.php?showtopic=31
http://developer.nvidia.com/forums/index.php?showtopic=1061
http://developer.nvidia.com/forums/index.php?showtopic=1347
http://developer.nvidia.com/forums/index.php?showtopic=1394
留下這些記錄,也許有跟我一樣的初哥們,少點困惑 :)