OSG 屏幕空间环境光遮蔽(SSAO)讲义1 为了OSG能有更好的渲染效果

OSG 默认的渲染效果很差. 本教程目的是为了OSG能有更好的渲染效果,并能让你们快速上手.算法

教程的规划:动画

  1. 先介绍SSAO 接着介绍SSAO的核心算法 屏幕空间环境光遮蔽, 是模拟阴影的一种算法, 使物体之间更有距离感 看这个画面, 左下方是OSG本来的渲染, 没有加阴影, 左上方是作好的SSAO渲染, 看这个桌面与墙的距离, OSG原有的渲染,物体间的距离有时难以分辨, 再看左上方的渲染, 有用SSAO模拟阴影, 画面总体上变化不大,可是物体间的距离感加强不少, 你看这音箱与桌面的距离, OSG的本来的渲染看不出它是贴紧桌面的.

在OSG 灯光方向是难以控制的, 阴影的投影只能往零点方向投射, 也就是从灯的位置向零点, 不灵活, 哪一个灯产生阴影,哪一个灯不产生,也没有一个接口能够设置. 灯光被天花板档住也是个问题. SSAO没有这个方向问题.会方便一些. SSAO也是须要采样相机的, 可是SSAO的采样是跟着主相机的.调试


作这个SSAO渲染,能够参考OSG的一个例子: Examples osgdeferred , 这个例子讲的是延迟渲染法,在OpenGL的教程里有教.视频

延迟渲染法有个好处是, 计算光照时,不会去计算被盖住的物体, 由于只在采样贴图上操做. 旁边的这几个就是采样贴图, 有法线采样, 有漫反射采样.blog


我作个动画来演示这个算法,帮助理解. 屏幕上的点是否会被遮蔽,怎么去判断当前的这个点被遮蔽了漫反射光. 假设这个平面是片元着色器的一个像素点, 从这个点发散出一些随机的采样点去与其它像素点比对.教程

根据OpenGL教程里的半球采样核心, 发散的方向是朝物体的外部.接口

好比这个面的下方是物体的内部, 面上方是物体的外部, 朝物体外发散. 屏幕空间是只有X轴与Y轴, 伸出当前像素点的采样点, 会去与其它像素点做Z值比对. 延迟着色法的采样信息是包括点的位置与法线信息的.渲染


物体的面每每不是正对着像机, 采样的点若是不跟着法线偏转, 就会伸到物体内部去, 这样的话, 物体会遮蔽自身, 物体自身会变暗. 因此用切线->空间矩阵把采样的方向偏转到这个面的朝向, 以保持采样的点在物体外部. 切线->空间这是个固定的算法, 法线贴图也是用这个算法.反射


如今假设屏幕上的几个像素点, 这些在左侧的正交像机是严丝合缝的, 部分采样点会被挡住, 那么中间个个像素点就会被部分遮蔽, 会暗一点.im


作视频教程的目的, 主要是演示OSG的代码怎么操做, 但愿后来人少走弯路. 之后的视频会讲原代码的操做, 有个教程, 你就不用漫山遍野去找代码怎么写.


  1. 像机采样 颜色采样与深度采样 把像机的几个参数传入Shader

  2. 延迟着色法的采样, 及基本的渲染

  3. SSAO渲染

  4. 高光

X. 像机的控制, 自建一个顺手的漫游器,方便调试

名词: 传入贴图的位置号数(0~7):贴图通道 相机的attach操做:关联

相关文章
相关标签/搜索