表面细分与平滑着色

前言

最近发现了之前自己鼓捣的blender的平滑着色和平直着色以及表面细分和最近刚学的渲染管线之间的联系,在此记录一下

一、平直着色与平滑着色

从字面意思就可以理解,一个是能直接分辨网格面的着色方式,一个是无法直接分辨网格面的着色方式
平直着色直接选取三角面上任意一个点,计算这个点的法向量和朝光源向量,将结果直接映射到这一三角面上的所有点(三角面任意法向量都相同)
平滑着色则是将平直着色计算得到的结果进行线性插值得到了一连串均匀变化的结果,反应在网格上就是一个光滑的面在这里插入图片描述结果非常直观
有一个很有意思的现象是,当物体网格数量非常少时,平滑着色的效果就会非常差
在这里插入图片描述
有一种解决方法是将这个物体细分后再平滑着色
左边是细分后再平滑着色的球
这种方法在网格面数比较低的时候既能光滑表面又能保留物体网格细节,一个更极端的例子是立方体
左边是标准6面立方体,右边是执行细分操作4次后的立方体
效果非常明显,这是由于平滑着色线性插值过程中由于网格面数过少带来的插值结果不准确,反映到模型上就是“丑”
当然在实际应用中,哪怕是右边的立方体也是无法真正使用的,因为他还是太“丑”了

二、表面细分

上面提到的丑产生的原因在于,阴影变化的十分不自然。结合平滑着色算法我们可以知道,这可能是由于边缘过度处光照变化大,但是网格面数仍然过少所带来的插值结果仍然不准确,那如果我们执行更多次的表面细分,结果就会更准确了
左边是标准6面立方体(平直着色)中间是平滑着色,右边是细分多次后的立方体+平滑着色
可以看到效果明显好了非常多,边缘处的过渡非常平滑,但这种操作方式有一个最大的弊端,面数太高了在这里插入图片描述
光是一个立方体就有如此高的面数,这绝对是无法接受的
再从问题根源出发,既然我们只需要过渡的地方有足够的面来保证插值的准确性,那我们在所有边上进行多次倒角是否也可以达成效果最左边的立方体每条边进行了6段倒角,其余立方体与上图相同
可以发现在执行了平滑着色后,我们同样得到了边缘过渡十分平滑的立方体,这样问题就完美解决了。
当然,为了得到更加完美的效果(如下图)在这里插入图片描述
我们常常会在blender中使用表面细分修改器,,其实用的是catmull_clark算法,在这里就不多赘述了,大概意思就是将每一个面通过算法细分为多个面,来保证阴影变化的连续性,在这里同样涉及到了建模过程中的“卡线”,也就是为表面细分增加保护线,两个面的夹角约接近90°,细分后的结果越偏离真实结果,如图

在这里插入图片描述
立方体添加表面细分修改器后直接变成了一个球在这里插入图片描述
而经过卡线后(这里采用的是倒角)上图分别说明了未倒角,1段倒角,2段倒角,3段倒角在3次细分算法之后的样子,这种时候再给复杂模型设置平滑着色效果则会好很多

总结

以上是本人对表面细分以及平滑着色的一些思考,如果有不对的地方还望批评指正

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值