尝试用shaderfx在Max/Maya中实现卡通渲染效果,结果一上来在Outline这步就卡住了,卡了小三天,终于凑合着解决了:
用传统方法双Pass实现Outline,也就是第一个Pass在顶点着色器中把顶点沿着法线向外扩一圈,然后Cull Mode设置为剔除正面,然后第二个Pass开始正常着色。
主要问题不清楚是什么原因,具体表现就是在shaderfx中像这样链接两个pass但是只能渲染出0号pass:
还有一个问题就是不管在Pass节点还是在State Settings节点中设置CullMode都没卵用,不清楚原因:
最后是这样解决的:
首先勾选State Settings节点的这个选项,这样导出的.fx文件中会出现相关的设置
然后选择Hardware Shader节点,Shader Config设置为HLSL_5,默认是HLSL_3,不知道为什么HLSL_3导出的.fx无法使用,然后设置Filename然后保存.fx文件。
用文本编辑器打开保存出来的.fx文件:
可以在光栅器配置这个地方,如果没有CullMode就加一行,目前只知道可以设置FRONT和BACK,也就是剔除正面和提出背面,但是不知道为什么,在Maya中是反过来的,也就是FRONT是剔除背面,BACK是剔除正面。还可以看到下面还可以设置混合模式。
然后双pass的问题也只能在代码中解决,可以再shadefx中连出各种pass,分别生成代码,然后将其中的顶点、像素着色器以及相关的代码拷贝到一起,然后在最后如下这个地方:
手动复制多PASS,然后进行不同的设置。
最后在Max中使用DirectX shader加载这个.fx文件就ok了~,简单效果如下: