目錄
最近在學習Unity的渲染,想要更了解整個畫面渲染的流程與機制,並整理成了筆記。
主要是關於Frame Debugger這個工具的運用及Unity的畫面渲染的步驟。
Frame Debugger
Frame Debugger能一步一步呈現渲染的過程,是用來檢查渲染過程的工具,當畫面結果不如預期時,用Frame Debugger來檢查非常方便。
路徑在Window->Analysis下。
開啟視窗後,要點擊Enable才能作用。
接下來,在Game視窗中就能看到變化了。拖動FrameDebugger視窗上方的拉桿,就能看到渲染的過程了(步驟數量一場景物件&設定而異)。
第一步:清空Buffer
GPU中會有兩個跟顯示視窗尺寸相同的空間,稱為Buffer,負責呈現我們螢幕所看到的畫面。 兩個Buffer快速輪流切換,一個負責接收CPU傳入的資料,一個負責呈現畫面,讓畫面實時更新,不會卡頓。而切換一次的過程,就是所謂的一幀。
所以每幀都要把畫面清空,畫上下下幀的畫面(下一幀由另一個Buffer呈現)。 可以看到視窗是全黑的。
第二步:深度圖
再來會由頂點資訊畫出深度圖。 可以看到深度是整個畫面最先渲染出來的部分(Event下方有詳細的項目可以查看,這裡最重要的就是Shadow Depth)。
離攝影機越遠、就會越黑;反之則越白。由此初步構出場景。
第三步:Shadow Map
再來會由攝影機與場景內的光源來畫出Shadow Map。 Shadow Map是一張2D的Texture,用來記錄頂點受光的程度(0~1)。從光源出發,越先碰到的點越白、越晚碰到越黑,由此判斷頂點是否處在陰影中。 (這裡畫面可能會是全黑的,要移動一下攝影機或光源看看。)
補充一下,Project Setting中的Shadow Distance會影響這一步渲染的畫面(調高會渲染得較遠)。 至於Shadow Cascades,則是精緻度的細分,由攝影機的遠近,決定使用哪個渲染結果,下方Cascade splits則是四個結果所佔的比例(越近會越偏向0號)。
第四步:畫出陰影
有了前面的幾張圖之後,就能畫出畫面中的陰影了。
第五步:畫出物件
先藉由剛剛的影子、跟模型的頂點資料,畫出物件。 到這裡就能看到最基礎的場景的樣子了。
第六步:上色
這裡可以看到物件顏色是一個個畫出來的,並非整個場景一起渲染。是基於頂點群組決定是否一起渲染。 如果希望同個材質的物件同時渲染的話,要打勾Player Setting中的Dynamic Batching(Batch就是資料傳送時的群組,動態群組可以自動將數個頂點合併為一個頂點群組)。
第七步:光影&反射
到這裡才是真正遊戲中的顏色,跟上一步相比,會加入Skybox計算反射,讓影子會有漸層、反光處會有Skybox的顏色。
以上就是Unity最基本的渲染過程,當然真實情況肯定更加繁瑣,包誇Post-Process、自訂Shader、多種Texture、Light Probe…都會影響渲染過程,不過架構是不變的,依然是深度圖→Shadow Map→影子→上色→光照這樣的流程。
This posst provides clear idea inn support off the neww users of blogging, that truly howw tto do running
a blog.
At tthis mpment I aam going tto do mmy breakfast,
afterward having my breqkfast comming again tto rwad furtherr
news.
Wonderful beat ! I would like to apprentice whjile you amennd ypur web site,
hhow can i subscribe for a bog website? The accohnt helpd me a
acceptable deal. I had been tiny bitt acquainted of thus your broadcas offered brdight cllear idea
Hi there! This is kind off off topic but I need some
guidance from an estqblished blog. Is iit very difficult too sset up youir oown blog?
I’m nnot vry techincal butt I can figjre things oout pretty quick.
I’m thinking about creatingg myy own but I’m nott sre whrre too start.
Do you ave any pounts or suggestions? Appreciate it