shader 入門精要筆記)(1)
shader只是渲染流水線的一個環節,真正要寫shader繞不開堆渲染流水線的整個瞭解.首先渲染流水線是類似工場流水線的形式提高效率,使多個物體和場景的頂點,紋理,轉換成螢幕影象,由CPU和GPU共同處理。《Real_Time Readering,Third Editor》將渲染流程分為三個階段:1.應用階段,2.幾何階段,3.光柵化階段。(只是概念階段,實際其每個階段也是一個流水線系統,即包涵子流水線階段)
應用階段:開發者對此有絕對控制權,由CPU負責實現。為何這樣說呢?實際上開發者在此可以控制模型頂點數量,場景的模型擺放,攝像機位置,光源的控制,提高渲染效能必須要有取捨,對於不可見的物體進行粗粒度剔除(culling),由此不必使下一個階段處理幾何資訊和圖形取樣,最後設定渲染狀態(漫反射顏色,高光反射顏色,貼圖紋理,使用的shader型別)渲染圖元(點,線,三角面)傳入給下一個幾何階段。應用階段結束。
幾何階段: 這一階段在GPU上進行。幾何階段負責和每個渲染圖元打交道,逐頂點,逐多邊形操作,重要的是把頂點座標變換到螢幕空間中,再交給光柵器處理,通過對輸入的圖元處理後,將輸出的螢幕空間二維頂點座標,每個頂點的深度值(模型頂點不可能十分規則,通常物體的形狀分佈是由三維軟體中對物體頂點擠壓變形最終形成的視覺上規整的形狀,頂點深度值就是對此的計算)著色(通常由美術在對shander顏色面板操作後對RGB顏色的調整)等相關資訊,交給下一個階段。幾何階段結束
光柵化階段:使用上一階段(幾何階段)傳遞的資料產生螢幕上的畫素,渲染出最後的影象。此階段也在GPU上進行,光柵化任務是決定每個渲染圖元中的哪些畫素應該被繪製在螢幕上,它需要對上一階段得到的逐頂點資料(紋理座標,頂點顏色)進行插值,然後逐畫素處理,光柵化階段和幾何階段類似,也可以分成更小的流水線階段。
總結:以美術生的視角來看:shader的整個流程類似我們要畫出的畫面,在應用階段是我們對畫面要畫什麼,哪些位置畫什麼,用什麼顏色來畫,對於不重要的東西少畫或者不畫。在幾何階段我們大腦中有這些想法後傳給我們的手,把腦子裡的畫面先進行一個模擬對畫面最終效果進行預測,對具體的調色和畫面進行更一步規整。光柵化階段:兩次想法驗證就需通過手了,通過手對畫面進行具體的調整,先畫整體,再畫細節,對色彩進行調整哪些灰一些,哪些冷一些,哪些亮一些,明暗更加突出,亮面,高光,明暗交界線,反光突出。總之計算機就像一個上帝畫家一樣,它可以準確畫到一切你告訴他的資訊,它不會出錯(除非你告訴他的是錯誤資訊),但是不必要的資訊就不要告訴他了,他也會累的,讓他畫特別多的東西且在幾秒內,這也是不切實際的(暗指剔除,節省效能)