实现 Ambient Occlusion 一般需要预计算,
如果物体间的相对位置发生了改变,
就需要重新计算,其实这样并不是一种真正意义上的realtime.
因为PRT需要生成一张ambient map所以过程十分缓慢,
不能移动到渲染循环中进行。
我想如果要进行实时的 Ambient Occlusion, 就只能进行顶点
级别的处理,然后把所计算出来的Ambient值写入顶点。
这样的话,当顶点数量不是太多的物体进行处理运算时,基本
可以达到实时渲染的要求。
基本思想:
1、遍例场景中每个物体,再遍例物体的每个顶点。
2、在遍例中,从顶点处,沿顶点法线方向的一个半球内,
均匀发射出若干射线(32条?)
3、然后进行碰撞检测,假使原来顶点的Ambient值为0,
若射线为击中物体数为x,总发出的射线数为N,则最后
此顶点的Ambient值为 x/N, 然后将 BaseColor * (x/N)
写入顶点色。
4、依次处理场景中的所有顶点,处理后再进行Diffuse光照
贴图。等
5、如果位置发生改变则,重新计算一次顶点色。
这里只是我对实时 Ambient Occlusion 的一点猜想,
如果有什么不对的地方,欢迎大家指出,
也欢迎大家进行讨论。