從0開始的技術美術之路(一)

2021-10-21 17:53:06 字數 2822 閱讀 4111

本篇參考《shader入門精要》·馮樂樂女神著;

1.整體流程(渲染管線可分為四個階段)

在渲染管線中,應用階段是在cpu中進行處理的

補充:光源和陰影

- 設定光源:

1.方向光,顏色,方向等

2.點光源:顏色,位置,範圍等

3.聚光源:顏色,位置,方向,內外圓錐角等

- 設定陰影:

1.是否需要陰影:判斷該光源可見範圍內是否有可投陰影的物體

2.陰影引數:對應光源序號,陰影強度,級聯引數,深度偏移,近平面偏移等

- 逐光源繪製陰影範圍:

1.近平面偏移

2.逐級聯

- 計算當前光源+級聯對應的觀察矩陣,投影矩陣,以及對應到陰影貼圖裡的視口區域

- 繪製到陰影貼圖

- 可見光裁剪:點光和聚光有衰減,聚光錐體有區域;若離相機距離較遠,或者光錐與相機的視錐體不相交,則剔除渲染;

說起裁剪就不由想起圖形學裡的經典裁剪演算法:liang-barsky演算法,cohen-sutherland演算法(編碼裁剪演算法)這兩個演算法是用於將影象裁剪到可見範圍內

(遮擋剔除應該不涉及吧,遮擋應該是採用zbuffer深度緩衝區進行檢測 )

-繪製設定:使用著色器,合批方式

- 繪製物體順序:相對相機距離,材質renderqueue,uicanvas等

- 渲染目標:framebuffer,rendertexture...

- 渲染模式:前向渲染(forwardbase forwardadd),延遲渲染

- 頂點資料:位置,顏色,法線,紋理uv座標,其他頂點資料

- 其他資料:mvp變換矩陣,紋理貼圖,其他資料

答:gpu的特點是並行性較好。當我們在對頂點資料進行處理時,他們雖然資料不同,但光照,幾何運算方式啥都一樣的時候,那麼我們將他們放在gpu的不同工作單元上進行同時執行,速度會更快。

頂點著色器-檢視變換:模型座標系--(模型變換) --> 世界座標系

--(檢視變換)-->檢視座標系 --(投影變換)-->投影座標系--(視口變換)-->視口座標系

上圖中的前三個變換對應mvp(model view projection)矩陣,在頂點著色器中,頂點從模型座標系轉換到投影座標系,最後一步由unity幫忙完成

(碎碎念:看到這一系列變換,第一時間我就想起計算機動畫技術課本上那串空間變換,一樣的流程,那裡面還要多計算座標系的建立,先旋轉還是先平移等問題,左右手座標系不同,很容易繞暈)

它是乙個可選著色器,使用頂點著色器輸出的頂點,按照一定規則演算法生成更多頂點,將現有的網格和圖元細分(其效果類似於maya中的「平滑」效果,模型圓滑了但面數增大了)
-圖元是啥?

答:可以為頂點,線段,倆頂點,三角形...基礎的幾何圖形

- 對於頂點在裁剪空間裡的位置,xyzw進行透視除法:xyz除以w完成投影。使其從投影座標系轉換到標準裝置座標系(ndc);

- 由於正交和透視視角下w值不同,故而呈現效果不同,正交顯得像截圖,透視則近大遠小

- 投影裡又說要進行除法操作,當xyz超過-1~1範圍,則判斷其不在範圍內,

捨棄進行經典的圖形學裁剪演算法;

- 投影和頂點裁剪在《shader入門精要》中都是歸屬於裁剪一節

中,這個操作過程無法由**控制,是硬體上固定操作,但可以自定裁剪操作進行配置

(套娃,硬體裁下,unity裡自己再寫個二次裁剪,~不是~)

- 裝置座標繫在opengl和directx中不一樣,opengl xyz三維度取值範圍都是-1~1,directx只有xy是-1~1,z為0~1

按照《shader入門精要》所言:螢幕對映任務是把每個圖元的x和y座標轉換到螢幕座標系。

如應用階段為幾何階段準備資料一樣,幾何階段同樣會為光柵化階段準備資料;

《shader入門精要》:三角形遍歷階段將檢查每個畫素是否被乙個三角網格所覆蓋,若覆蓋,則生成乙個片元。

片元非畫素,它是包含很多狀態的集合,這些狀態用於計算每個畫素的最終顏色,這些狀態包含不限於,螢幕座標,深度資訊,從幾何階段輸出的頂點資訊,法線,紋理座標等。螢幕同乙個畫素位置可能有對應多個三角形的不同片元(如兩片重疊的交集)
(遍歷這一階段的舉例影象,很難不讓人想到那些掃瞄演算法)

2.msaa

3.fxaa/txaa

後處理技術

片段著色器:使用這些點的資料進行著色,並為後面片元著色器準備;

主要任務:

1.決定每個片元可見性

2.若通過所有測試,則將其顏色值和已儲存在顏色緩衝區中的顏色進行合併混合

bloom,hdr,fxaa,景深,邊緣檢測,徑向模糊

redis 從0開始的redis複習之路

redis介紹 redis remote dictionary server 即遠端字典服務,是乙個開源的使用ansi c語言編寫 支援網路 可基於記憶體亦可持久化的日誌型 key value資料庫,並提供多種語言的api。和其他的快取比如ecache比較 redis 搭建 通過原始碼編譯安裝 wg...

從0開始學Python Python的基本語法

一 資料型別 1.字串 string 不可變 1 合併字串 合併字串 2 常用內建函式 python3 字串 菜鳥教程 www.runoob.com 3 格式化字串 格式化字串 使用變數格式化字串分 2.數值 number 不可變 1 整型 int 2 浮點型 float 3.元祖 tuple 不可...

從0開始的FreeRTOS(3)

這次我們開始介紹freertos的任務管理機制。在第一講中,我們知道了作業系統是在乙個在記憶體中自動對任務進行排程的硬體和使用者的 中間層 這一講中我們來介紹作業系統所作用的物件 任務。當然,在講述作業系統原理時我們不會使用任務這種說法,一般被使用的術語是 程序。我們先簡單介紹一下程序的概念,對於程...