OSG 默認的渲染效果很差. 本教程目的是爲了OSG能有更好的渲染效果,並能讓你們快速上手.算法
教程的規劃:動畫
在OSG 燈光方向是難以控制的, 陰影的投影只能往零點方向投射, 也就是從燈的位置向零點, 不靈活, 哪一個燈產生陰影,哪一個燈不產生,也沒有一個接口能夠設置. 燈光被天花板檔住也是個問題. SSAO沒有這個方向問題.會方便一些. SSAO也是須要採樣相機的, 可是SSAO的採樣是跟着主相機的.調試
作這個SSAO渲染,能夠參考OSG的一個例子: Examples osgdeferred , 這個例子講的是延遲渲染法,在OpenGL的教程裏有教.視頻
延遲渲染法有個好處是, 計算光照時,不會去計算被蓋住的物體, 由於只在採樣貼圖上操做. 旁邊的這幾個就是採樣貼圖, 有法線採樣, 有漫反射採樣.blog
我作個動畫來演示這個算法,幫助理解. 屏幕上的點是否會被遮蔽,怎麼去判斷當前的這個點被遮蔽了漫反射光. 假設這個平面是片元着色器的一個像素點, 從這個點發散出一些隨機的採樣點去與其它像素點比對.教程
根據OpenGL教程裏的半球採樣核心, 發散的方向是朝物體的外部.接口
好比這個面的下方是物體的內部, 面上方是物體的外部, 朝物體外發散. 屏幕空間是隻有X軸與Y軸, 伸出當前像素點的採樣點, 會去與其它像素點做Z值比對. 延遲着色法的採樣信息是包括點的位置與法線信息的.渲染
物體的面每每不是正對着像機, 採樣的點若是不跟着法線偏轉, 就會伸到物體內部去, 這樣的話, 物體會遮蔽自身, 物體自身會變暗. 因此用切線->空間矩陣把採樣的方向偏轉到這個面的朝向, 以保持採樣的點在物體外部. 切線->空間這是個固定的算法, 法線貼圖也是用這個算法.反射
如今假設屏幕上的幾個像素點, 這些在左側的正交像機是嚴絲合縫的, 部分採樣點會被擋住, 那麼中間個個像素點就會被部分遮蔽, 會暗一點.im
作視頻教程的目的, 主要是演示OSG的代碼怎麼操做, 但願後來人少走彎路. 之後的視頻會講原代碼的操做, 有個教程, 你就不用漫山遍野去找代碼怎麼寫.
像機採樣 顏色採樣與深度採樣 把像機的幾個參數傳入Shader
延遲着色法的採樣, 及基本的渲染
SSAO渲染
高光
X. 像機的控制, 自建一個順手的漫遊器,方便調試
名詞: 傳入貼圖的位置號數(0~7):貼圖通道 相機的attach操做:關聯