欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

lightscape阴影锯齿与阴影漏探讨

程序员文章站 2022-05-12 19:49:19
和初学朋友探讨探讨阴影锯齿与阴影漏以及建模中的问题,同时了解一下产生阴影锯齿与阴影漏的原因, 从原理上了解一些, 就不用瞎子摸象了。 当模型开始传递时。 系统侦测光源在网... 08-10-04...
和初学朋友探讨探讨阴影锯齿与阴影漏以及建模中的问题,同时了解一下产生阴影锯齿与阴影漏的原因, 从原理上了解一些, 就不用瞎子摸象了。
当模型开始传递时。
系统侦测光源在网格单元的各个顶点的光强度,计算出一个平均值 来定义这个单元, 当这个平均值不足以体现光在面上的变化时, 系统以网格变量来细化这个面, 有时我们看到灯光边缘呈锯齿状,就是网格划分不足以体现光在面上的变 化造成的 由于ls细化网格时是以每个单元边的中心点来插入新的顶点把单元分成 4 个部分。这样就不免会造成阴影或光束无法与网格相对齐。这就是我们看到的有锯齿的阴影边界,通常用下面几种解决方法:
1、最简单的办法是减小最小网格间距来解决这个问题,由于只是减小最小网格间距,所以只是在灯光变化大的(如阴影边缘,高亮区等)区域增加了网格,避免了对其它不必要区域网格的细分,是一种比较经济的细分方法,象阳光或是射灯的明显的阴影边界效果,对网格要求细分较高, 它是以消耗内存和时间为代价的。它的每次变量是以四倍变量递增的, 会增加大量的网格面, 所以应该适度。
2、利用光影追踪,这种方法是对产生该阴影的灯源使用光影跟踪直接光照选项, 它能在网格相对粗糙的情况下, 通过间接光照的相互反射,在渲染时产生好的视觉效果。不过光影跟踪在渲染时会相对化费很多的时间,所以一般都在最终渲染时才打开该灯源的光影跟踪直接光照选项, 其实省了细分,累了渲染,这也是ls中没办法的事
3、利用表面处理对面进行增加细化,来增强边缘的清晰度, 这种方法对于个别受光面,象光域网和日光很有效,但网格的增量不能一味求高, 它也是以消耗内存和时间为代价的。

4、利用不同的灯光设置产生不同的阴影边界线光源边缘在面细分小时柔和,面光源边缘在面细分大时柔和 。 与线光源相比, 面光源在不调整面的细分时柔和得多,点光源可用灯光属性中的光束角和区域角来调节它的锐度和柔和度, 它在柔和时对网格细分的要求不高,而光影追踪是这种效果的很好辅助下面是点光几种设置产生光影边界的示图(使用较粗的网格,启用了光影追踪) 当光束与区域角相等时,边界最清晰当区域角调大时,边界变得柔和起来, 变得更自然当光束角调小时,光的聚光范围变小了
5、不要刻意为追求灯光产生的效果而不惜工本,它能起到画龙点睛的作用,但不能把它看作产生好的效果的唯一途径,阴影泄漏阴影漏就是一个对象因边界和顶点没有与相接触的表面边界和顶点相对齐, 在光的作用下产生向表面周围泄漏的黑暗区域, 合理的建模能有效抑制阴影漏。3dmax教程网:/index.html
漏光,能节时与增效避免很多麻烦,从下面中图来看: 由于园柱是无法与地面网格顶点对齐的,园柱盖住地面的不受光部位是地面网格的部分顶点,而光是根据网格面的顶点颜色取一个中间值来决定这个网格面的受光强度的,所以这几个面就与其它面有差异并向外渗透,这个差异就在视觉上产生了阴影漏解决方法之一是取消园柱封闭面",使光能穿过园柱而不投射阴影在地面上(见下右图)。
但它会失去该物体的所有阴影一般这个处理方法都用于如嵌灯的灯罩,墙上的开关板,墙体等无须体现阴影的地方建模中产生阴影漏常见的几个因素及通常处理方法:
1、模型的相交和重叠
ls中很在乎边界和顶点对齐, 模型的相交和重叠,边界顶点没有对齐就都会产生阴影漏,在max和viz建模中能做到边界对齐,但是要做到顶点对齐却要化费些心思了, 必要时,可以根据细分增量的规律,通过计 算,合理安排相邻面的尺寸比来达到。

2、不规则的三角面
复杂的模型生成往往会产生不规则的三角面,导入ls后不规则的三角面也是造成网格顶点对不齐的而影响阴影漏的因素, 这是在建模时就要考虑的因素, 尽量减少不规则的三角面特别是狭长的三角面, 由于不等边差距太大,往往会造成计算错误,如果实在无法避免,(特别是带园角布尔的面) 可以用二种方法解决:
a, 带园角布尔的面可以在max中先细分后再布尔, 虽然牺牲了一个整面但效率是显见的。
b,在ls中用新建面替换掉杂乱的面。3dmax教程网 /index.html

3、 通过细化网格单元来处理
减小最小网格间距参数能解决阴影漏,但模型会产生大量的网格单元,这对于特别是比较复杂的大场景将意味着大量的内存和亢长的处理时间。

4、通过光影追踪来处理:
这种处理优点是能保持较少的网格。而且效果很好,不过,光影跟踪光源也增加了光影跟踪处理的时间,对于场景中灯光比较复杂的模型来说,应该权衡得失 建模要对ls负责 不管是cad或是max,(cad&max下载:www.jb51.net/html/soft/index.html)建框架只要有一定复杂度,(一般用拉伸或是布尔),都可能会产生的碎面这是ls中最烦恼的事,不仅增多了面,而且狭长三角面挺难处理,处理多了,费工又费时
1, 注意相交处的对齐, 如是在max中建模,要习惯使用对齐和捕捉
2, 倡导单面建模, 多余的面会浪费无谓的计算时间
3, 简化复杂面,尽量求整面和规则面,
4, 减少狭长的三角面,如果狭长三角面有所难免,尽可能缩短和规则狭长三角面长度和形状。
5, 可用ls新建面替换由太多碎面或狭长三角面所组成的一组面,建模合理能有效抑制阴影漏。漏光,能节时与增效,能避免很多麻烦, ls也有建模功能, 只不过它的建模是较简单的新建面,复制和变换,可以利用它和max,cad结合起来运用,互补缺陷
第一种方法:
 由园角和园弧布尔的面最易出现狭长三角面, 并会派生许多复杂的小面,在这种情况下宁可在max中给予适当的细分再进行布尔来避免和缩短一些不规则面的产生
图细分步骤:
1、转成面片后,在修改面板中的surface下的view steps(步长)调到02选中顶面选择subdivide(细分)第一次细分不勾选边上的勾, 按下细分该面被划分为4块
3、选中细分成四块的其中一块面, 勾上边上的勾,再细分
4、在点级别成排选择点,进行移动(如要精确可用移动工具的数字定位)
5、按照下图按下三维捕捉纽,右键弹出菜单中勾选endpoint(结束点)其它都不勾选, 在内框两个对角拉一矩形, 根据自己要求来倒角或变形 设一个灯和一个摄影机在box内部,导入.
4、在点级别成排选择点,进行移动(如要精确可用移动工具的数字定位)
5、按照下图按下三维捕捉纽,右键弹出菜单中勾选endpoint(结束点)其它都不勾选, 在内框两个对角拉一矩形, 根据自己要求来倒角或变形 设一个灯和一个摄影机在box内部,导入ls,ok现在来比较一下:
一些结构较复杂的模导入,如果模型面太乱,可以用ls的”建立表面”替换掉原来的面, 这里借用上面的模型,(假设它是较复杂的)