接到一个AO的任务。就学习了一下。也理清了一些以前误解的信息。
AO全称 ambient occlusion.环境光遮挡。基本的原理。
AO的是光照无关的。光从哪里来。有几个和AO没关系。
AO是一个物体当时形变下所具有的属性。
比如人如果世界上只有白光那么人看起来是不是就是全白的呢。肯定不是。看看你们的大腿内侧(我很纯洁的。)是不是发现有阴暗面。为啥呢。应为光线打过来折射的时候被其他部位给档了。这样就会有阴暗。层次。
这也就是AO的核心。
AO就是要表现出这些本来固有的遮挡。
AO可以让mesh看起来更真实更有层次感。立体感。
说了那么多说一下算法。
最基本简单的是软模拟。
下面是伪代码
For each triangle {
Compute center of triangle
Generate set of rays over the hemisphere there
Vector avgUnoccluded = Vector(0, 0, 0);
int numUnoccluded = 0;
For each ray {
If (ray doesn't intersect anything) {