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
留下这些记录,也许有跟我一样的初哥们,少点困惑 :)