OSG 默认的渲染效果很差. 本教程目的是为了OSG能有更好的渲染效果,并能让你们快速上手.算法
教程的规划:动画
在OSG 灯光方向是难以控制的, 阴影的投影只能往零点方向投射, 也就是从灯的位置向零点, 不灵活, 哪一个灯产生阴影,哪一个灯不产生,也没有一个接口能够设置. 灯光被天花板档住也是个问题. SSAO没有这个方向问题.会方便一些. SSAO也是须要采样相机的, 可是SSAO的采样是跟着主相机的.调试
作这个SSAO渲染,能够参考OSG的一个例子: Examples osgdeferred , 这个例子讲的是延迟渲染法,在OpenGL的教程里有教.视频
延迟渲染法有个好处是, 计算光照时,不会去计算被盖住的物体, 由于只在采样贴图上操做. 旁边的这几个就是采样贴图, 有法线采样, 有漫反射采样.blog
我作个动画来演示这个算法,帮助理解. 屏幕上的点是否会被遮蔽,怎么去判断当前的这个点被遮蔽了漫反射光. 假设这个平面是片元着色器的一个像素点, 从这个点发散出一些随机的采样点去与其它像素点比对.教程
根据OpenGL教程里的半球采样核心, 发散的方向是朝物体的外部.接口
好比这个面的下方是物体的内部, 面上方是物体的外部, 朝物体外发散. 屏幕空间是只有X轴与Y轴, 伸出当前像素点的采样点, 会去与其它像素点做Z值比对. 延迟着色法的采样信息是包括点的位置与法线信息的.渲染
物体的面每每不是正对着像机, 采样的点若是不跟着法线偏转, 就会伸到物体内部去, 这样的话, 物体会遮蔽自身, 物体自身会变暗. 因此用切线->空间矩阵把采样的方向偏转到这个面的朝向, 以保持采样的点在物体外部. 切线->空间这是个固定的算法, 法线贴图也是用这个算法.反射
如今假设屏幕上的几个像素点, 这些在左侧的正交像机是严丝合缝的, 部分采样点会被挡住, 那么中间个个像素点就会被部分遮蔽, 会暗一点.im
作视频教程的目的, 主要是演示OSG的代码怎么操做, 但愿后来人少走弯路. 之后的视频会讲原代码的操做, 有个教程, 你就不用漫山遍野去找代码怎么写.
像机采样 颜色采样与深度采样 把像机的几个参数传入Shader
延迟着色法的采样, 及基本的渲染
SSAO渲染
高光
X. 像机的控制, 自建一个顺手的漫游器,方便调试
名词: 传入贴图的位置号数(0~7):贴图通道 相机的attach操做:关联