手寫的cpu光柵化渲染流水線做了要三周,到今天終於算是完工了,共有三次大的版本,一次是頂點變化,匯入的3ds模型的頂點變換到世界座標系下,然後變換到攝影機座標系下,最後通過投影變換和視口變換變換到螢幕上。看似過程很明確,
而且整個過程其實就是設定幾個矩陣,並且設定矩陣的幾個引數就差不多了,可是因為數學知識的欠缺,這個理解的過程可沒那麼簡單。第二個版本是給頂點插值出線框,並進行線框的紋理對映,雖然當初做得比較快,但後來才知道取得的圖素是錯誤的。第三個版本寫了乙個深度緩衝區,用來寫zbffer消隱演算法。開始的時候線性插值深度,後來做了矯正。後來繼續寫了紋理對映,
lighting
,gourand著色,phong shading,出現了很多問題,不得不寫了個小的測試程式測試了很多的三角形。程式基本就實現了這些功能,並沒有實現整個流水,以後再加!
收穫了很多知識,有數學方面的,有圖形學方面的,還有一些程式的測試方面的方法技巧:程式中用到了很多的巨集開關,列印出了很多資料便於對照,專門拿出乙個小三角形檢驗計算是否正確。演算法上效率應該不高,設計上也出現了很多問題在後期加gourand和phong的時候改動**太大,很多地方都是重寫,不過基本滿足了資源和物件例項分開的原則,整個框架的結構還算明晰,而且解決了記憶體問題。
以前也寫過小的遊戲demo,完全不用去管如何去進行光柵化,給頂點,給法線,給貼圖座標,給顏色,固定頂點渲染畫素渲染通道就全做出來了。不過要寫出好的效果,用可程式設計的渲染通道就要麻煩了,很多原理都不懂寫不出好的效果。而且估計以後就要從事圖形方面的工作了,作為乙個合格的圖形程式設計師,理應把圖形內部的原理搞得清楚一點,對以後新技術的學習和好的效果的研究總會有好處的。
整個程式設計的計算機圖形學方面的演算法原理不多,還有大量的知識體系有待建立。
渲染流水線
應用階段 cpu準備資料,skinmeshrender,meshfilter,meshrender 頂點資料,三角形資料,法線資料,切線資料,渲染設定指令,紋理資料,uv資料 由cpu傳送給gpu,即一次drawcall 幾何階段 頂點變換,計算頂點顏色 如逐頂點光照 齊次裁剪空間,透視除法,歸一化...
UnityShader 渲染流水線
渲染具體流程 幾何階段 光柵化階段 渲染流水線的最終目的在於生成或者說是渲染一張紋理,即我們在螢幕上看到的所有效果。它的輸入是乙個虛擬攝像機 一些光源 一些shader以及紋理等。渲染流程分為3個階段 應用階段 幾何階段 光柵化階段。圖中,綠色表示該階段是完全可程式設計控制的,黃色表示可以配置但不是...
渲染流水線 應用階段詳解
由乙個三維場景出發,渲染一張二維影象 計算機從一系列的頂點資料,紋理等資訊出發,把這些資訊最終轉換成一張人眼可見的影象。由c gpu共同完成 分為下面三個階段 應用主導,開發者在此階段有絕對控制權 負責實現 cpu 階段任務 輸出渲染圖元 具體階段 資料準備渲染所需的資料都需要從硬碟載入到系統記憶體...