|
1、 基本场景角色,地面和一盏平行光(Depth Map Shadows),Resolution: 512 
2 先对比图吧,地面是10倍,30倍, 80倍,阴影贴图的变化; 
3 、解决:进入灯光属性如下调整,基本解决了问题。 
4、可是如果对象不是一个呢,问题还是存在。 
5 、是否在大场景中贴图阴影(Depth Map Shadows)就无法用了呢?现在我们来尝试一种全新的概念来解决。关掉现在这盏平行光的阴影贴图建立新的spot灯光,方向调整到于平行光相同。(也可以建立orientConstraint,来约束新创建的spotLight)
6、 对spot进行调整,先取消Use Auto Focus ,调整 Focus和Cone Angle相同;
7 、调整灯光角度,能看到主角为好。 
8 、渲染测试,投影非常理想,除了多了个聚光灯的光圈。 
9 、复制这盏spotLight,将它的阴影关掉
10、 将复制的灯光强度调整为 -1,渲染测试;耀眼的强光没有了,投影非常理想; 
11 、同样复制上述两盏spotLight为其他的角色打光: 
12 、渲染测试: 
13、思路: 由于阴影贴图的尺寸是投影质量的关键,我们如此可以避开大尺寸的阴影贴图,提高渲染时间,同时又可以保证投影的质量。
在动画时只要将上述的灯光成组,跟随角色移动就好了。
例如在大场景奔跑的人物,快速飞驰的车辆等等,在大场景中的一切一切。
思路有了,在用的时候每次总要执行上述操作显然是比较浪费时间,我们用MEL来继续完成这个工具。
这是我已经完成的脚本核心内容
/////////////////////////////////////////////////// string $soliSpot = "soliSpot" ; string $SpotL = `shadingNode -asLight spotLight` ; //建立第一盏灯光 string $shape[] = `ls -dag -sl` ; setAttr ($shape[0]+".dms") 1 ; //打开阴影属性 setAttr ($shape[0]+".useDmapAutoFocus") 0 ; //关掉自动适应阴影贴图 string $Spotf[] =`duplicate -rr` ; //复制灯光 parentConstraint -mo -weight 1 $SpotL $Spotf[0]; //进行约束控制 scale 0.5 0.5 0.5 ; //放缩反向的灯,以方便观察 setAttr ($Spotf[0]+".dms") 0 ; setAttr ($Spotf[0]+".overrideEnabled") 1; setAttr ($Spotf[0]+".overrideDisplayType") 2; //关掉阴影,制作成模板,使其不能被选择 //以免误操作 string $shape1[] = `ls -dag -sl` ; string $connectAttr; $exp1 = ($shape[0]+".df"+"="+$shape1[1]+".df"+"="+$shape1[1]+".ca"+"="+$shape[0]+".ca;"); $exp2 = ($shape1[1]+".in"+" = -"+$shape[0]+".in;") ; expression -s ($exp1 + "\r\n"+$exp2 ); //用表达式控制两盏灯的关联关系 $connectAttr ="connectAttr -f "+$shape[0]+".color "+$shape1[1]+".color"; eval($connectAttr); //进一步的属性链接 //使得,大多数操作,可以关联 select $SpotL ; //选择主灯,方便视图调整。 ///////////////////////////////////////////////////
以下是我原创的完整脚本工具
spotL.mel (1.97k)
14 、脚本的信息: 脚本spotL暂时没有用户界面,其实也不需要,只要在命令行执行"spotL",即刻得到阴影灯。
阴影灯对于场景不提供照明,只提供阴影。如果场景中只有阴影灯是渲染不出物体的。
脚本将阴影灯的大小进行了放缩,方便观察。
关掉了对于反向辅助灯的操作,因为此时大多数的操作都可以关联的。
如果删除了阴影灯的主灯,只需稍稍拨动时间线,或是再次渲染即可删除相应的辅助灯。无需担心场景的多余垃圾。但是阴影灯的组会保留,清理场景即可。
脚本适用于支持maya的所有渲染器,且都有非常好的渲染速度。
如此,再大的场景我们也不怕了,放心大胆的用Depth Map Shadows吧,
享受他的快捷和直观。 
|