unity 不再渲染區域性 unity 渲染第二步

2021-10-13 06:13:22 字數 1826 閱讀 8620

先不要用 unity shader 提供給你的轉換矩陣,看看螢幕上的圖形,你會學到更多。 --- 《unity 渲染箴言》

假設你 create 了乙個 cube,放在預設的位置,預設的 rotation,預設的 scale,

此時,create 乙個你自己的 material,再建立乙個你自己的 unlit shader。將所有的東西賦予給你好了,現在寫shader "wangsiyuan/zijide

subshader

float4 huasanjiamianfunc (float4 screenp : sv_position) : sv_target

endcg

那麼結果是什麼樣呢?

如下圖:

觀察一下,得出以下結論:

1. localp 是local position,也就是說,以 cube 自己的中心為原點,看 cube 上的頂點,所得出的頂點位置的座標。

2. 整個 cube 都是 長寬高 1,1,1的,而整個螢幕的 大小則是 2,2的(上一講說過了,這裡不包括z軸),所以,這裡顯示的等比例縮放的結果,所以,這個 cube看起來,是橫著一半,豎著也一半。

3. 為啥是白色的,這是由於,huasanjiaomianfunc 裡 直接 返回了 1,而1就是白色的。

4. 整個 cube 到底在什麼地方,什麼形狀,完全由 dingdianfunc 函式的返回值,決定。

5. 直接將 localp 這種區域性position輸出,並沒有讓你感覺到 3d。因為你無論怎麼拖動 camera,螢幕上都是這麼一塊白色的東西。

於是,很明顯,我們需要,將 camera 的位置,cube 的位置和角度,所有的東西,全部傳給 shader,然後計算出,真正好的頂點位置,我們將這個位置,稱之為 screenp,也就是螢幕 position。-------這是個分隔符,下面馬上要開始講這個轉換了。

來替換一下**:

shader "wangsiyuan/zijide"

subshader {

pass {

cgprogram#pragma vertex dingdianfunc

#pragma fragment huasanjiamianfunc#include"unitycg.cginc"float4 _tint;

float4 dingdianfunc (float4 localp : position) : sv_position {//return localp;

float4 aftermul =mul(unity_matrix_mvp, localp);returnaftermul;

float4 huasanjiamianfunc (float4 screenp : sv_position) : sv_target {return 1;

endcg

那麼產生的圖:

嗯,已經有了位置感,和大小感了,不信你試著去 scene 裡面轉動一下,cube,或者轉動一下 camera,已經有效果了。

注意一下,aftermul 這個 float4型別的變數。這個 aftermul 是齊次座標的。哦,好的,你不知道什麼叫做齊次座標。那麼簡單來講講吧,那就是,x,y,並不是你最終發現在螢幕上的x,y,而是要除以 w。

舉個例子,(0.5, 0.5, 1, 2)這個點,應該在螢幕上什麼位置呢?

這個位置,但是你錯了,,,應該把x和y再除以 w,,才對,,,,也就是(0.25, 0.25)這個位置,

如果你想知道為啥這麼搞,很不幸,你將學一學矩陣了,這不是本篇所涵蓋的內容。反正,就是應該如下圖:

,綠點的位置,才是(0.5,0.5,1,2)這個 float4 應該的位置。總之,就要把,得出的 aftermul 這個結果,的x和y再除以 w,才是螢幕上真正的位置。

Unity渲染路徑

unity支援不同的渲染路徑。您應具體取決於你的遊戲內容和目標平台 硬體來選擇使用哪乙個。不同的渲染路徑有不同的特點和效能特點,主要影響燈光和陰影 如果圖形卡不能處理選定的渲染路徑,unity將自動使用乙個較低保真度的設定。因此,在gpu上不能處理延遲照明 deferred lighting 將使用...

unity渲染路徑

1 deferred shading 有最佳的光照和陰影效果,在場景中存在許多的實時光照時,使用deferred shading也是最佳的方案,之所以叫做deferred 延遲 是因為shading的時機不是發生在第乙個pass的頂點 片元函式內,而是存在延遲,直到第二pass的時候才執行,每個光源...

Unity渲染基礎 Untiy渲染路徑

unity內建管線的渲染路徑主要包含了延遲渲染管線和前向渲染管線。不討論舊版延遲渲染和舊版頂點光照 unity內建管線的切換可以在graphics setting中更改 也可以在攝像機的設定上更改 渲染路徑的作用 告訴unity,光照是如何應用到unity shader的。作用在每個物體上一定數量最...