问题七十一:环境光遮蔽(Ambient Occlusion)

71.0 引言(Introduction)


一开始被“Ambient Occlusion”这个名字唬到了,然后又是什么“cosine distribution”和“samples on hemisphere”,感觉神乎其神。

后来,通过程序生成了相关图形之后,才恍然觉得和之前在“问题十九:怎么模拟ray tracing中漫射球体的颜色(diffuse materials)”基本是同一回事。

http://blog.csdn.net/libing_zeng/article/details/54428306

 

只是,之前还没有“环境光”的概念,根本没有意识到只考虑了环境光。

当时对撞击点的着色大概是这样:

在撞击点处作以单位法向量,然后以单位法向量的另一端为球心作一个单位球面;

然后在球面上随机取一点来确定入射光线的方向;

然后判断该“入射光线”是否撞击到其他物体,每撞击到一次,光线强度进行相应的衰减。

 

我们接下来正儿八经学习的“环境光遮蔽”,也基本是这个方法:

光线撞击物体,得到撞击点;

然后,对撞击点处的单位上半球面进行采样得到很多个采样点;

然后,撞击点分别和这“很多个采样点”组合得到“很多条阴影光线”;

若阴影光线撞击到其他物体,说明这条阴影光线对应的环境光线被其他物体挡住了,若阴影光线没有撞击到其他物体,说明这条阴影光线对应的环境光线能够顺利到达撞击点;

然后,根据顺利到达撞击点的阴影光线的条数来给撞击点进行着色。

 

71.1 建模(Modeling)


之前,我们认为来自各个方向的环境光的强度是一样的,不考虑环境光可能被其他物体遮挡住。对应生成的图形,则是扁平的。例如:


 

但是实际上,只要环境中的物体个数大于一个,物体接受的环境光就会被其他物体遮挡。如下图示意:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值