Stencil Shadow Volume Using HLSL 2
前文再续,书接上一回(Stencil Shadow Volume using HLSL)。在NVidia SDK 9,5中已经有一个用HLSL Vertex Shader实现的stencilVolume.fx的例子还有一个解释的PDF,不清楚StencilShadow的朋友可以去下载《Shader X2 - Introductions & Tutorials With Directx 9》中的一章“The Theroy of Stencil Shadow Volumes" 或者看看GameDev的《The Theory of Stencil Shadow Volumes》(btw,同一个作者)。
其实已经万事俱备了,DirectX9的Effect非常简单,大家没有理由不会;NVidia FXComposer 1.8中写Shader又是十分简单的事情,而且把Shader和Effect Link在一起也不是什么痛苦的事情(使用GLSL的朋友就比较不幸了,据说把RenderMokey生成Shader放到程序中要调试N久...)。今天要介绍的是,怎么在3Ds Max中对场景中产生阴影(cast shadow)的物体进行预处理。参照"Ghost Polygon"的目的,简单的Maxscript如下:
做的事情如图:
![]()
最后在Fx Composer调试结果:
![]()
再看看没有经过与处理的物体和处理后物体的对比:
![]()
初步结果还不错,总结一下:
Stencil Shadow实用 Vertex Shader的优点:
1,速度快,CPU占用率低,试CPU可以解放出来做AI,Sorting和Scene Management。
2,可以用FX Composer快速调试效果(这个不知道ATI的Fans会不会打我...)
缺点:
1,由于SM3.0还不支持增加Vertex的操作(据说在SM4.0增加Geometry Shader可以自由的进行Vertex的增,删,改,期待中...),所以所有要Cast Shadow的物体都要进行一个预处理,所以预处理的效果和性能显得很重要。
2,当Ghost Polygon的数量大于原来Polygon数量的1/2时,会出现性能的下降。
展望:
1,修改maxscript,以适应更多的模型。
2,希望尽快用C++重写代码,提高效率。
3,用OpenGL和DreictX都实现一个Demo,要求实时改变光照方向,阴影跟着改变,FPS30以上(估计要一个星期吧至少)。
其实已经万事俱备了,DirectX9的Effect非常简单,大家没有理由不会;NVidia FXComposer 1.8中写Shader又是十分简单的事情,而且把Shader和Effect Link在一起也不是什么痛苦的事情(使用GLSL的朋友就比较不幸了,据说把RenderMokey生成Shader放到程序中要调试N久...)。今天要介绍的是,怎么在3Ds Max中对场景中产生阴影(cast shadow)的物体进行预处理。参照"Ghost Polygon"的目的,简单的Maxscript如下:
1
convertToMesh obj --collapse to Editable_Mesh
2![]()
3
select obj -- select the obj again
4![]()
5
subobjectLevel = 4 -- change to polygon select mode
6![]()
7
for f = 1 to obj.numfaces by 1 do -- travel all faces and extrude them
8
meshop.extrudeFaces obj #{f} 0.0 0.0 dir:#common -- dir should be common or u will get a weird artifact
9
update obj --update the mesh
convertToMesh obj --collapse to Editable_Mesh2

3
select obj -- select the obj again4

5
subobjectLevel = 4 -- change to polygon select mode6

7
for f = 1 to obj.numfaces by 1 do -- travel all faces and extrude them8
meshop.extrudeFaces obj #{f} 0.0 0.0 dir:#common -- dir should be common or u will get a weird artifact9
update obj --update the mesh做的事情如图:

最后在Fx Composer调试结果:

再看看没有经过与处理的物体和处理后物体的对比:

初步结果还不错,总结一下:
Stencil Shadow实用 Vertex Shader的优点:
1,速度快,CPU占用率低,试CPU可以解放出来做AI,Sorting和Scene Management。
2,可以用FX Composer快速调试效果(这个不知道ATI的Fans会不会打我...)
缺点:
1,由于SM3.0还不支持增加Vertex的操作(据说在SM4.0增加Geometry Shader可以自由的进行Vertex的增,删,改,期待中...),所以所有要Cast Shadow的物体都要进行一个预处理,所以预处理的效果和性能显得很重要。
2,当Ghost Polygon的数量大于原来Polygon数量的1/2时,会出现性能的下降。
展望:
1,修改maxscript,以适应更多的模型。
2,希望尽快用C++重写代码,提高效率。
3,用OpenGL和DreictX都实现一个Demo,要求实时改变光照方向,阴影跟着改变,FPS30以上(估计要一个星期吧至少)。
meshop.extrudeFaces obj #
浙公网安备 33010602011771号