Unity Shader之讀取時間優化

2021-09-24 09:35:35 字數 1437 閱讀 1923

【1 shader**片段】

shader裡有**片段,可以用關鍵字(keyword 也叫varient)去做分支變化

步驟(1) 定義

#pragma multi_compile v1 v2

#pragma shader_feature stuff

區別是multi_compile 可以有多個選擇在runtime進行選擇

而shader_feature 只有乙個選擇,如果沒有使用的話,不會被打包

(2) 使用

#if v1

#endif

或者#if defined(v1)

#endif

(3) 選擇分支

mat.enablekeyword ("v1");

mat.disablekeyword ("v1");

mat.shaderkeywords

進而可以自定義繼承materialinpector進行設定。

【2 載入優化】

由上可以看出,shader**例如standard shader,完全編譯的話,會有上千個小的gpu program,導致的問題

1 增加遊戲打包時間 和 包體大小

2 遊戲幀率低 吃記憶體

(1) 剔除

用#pragma shader_feature剔除

在project settings-> graphics 去掉不需要的與 lightmap/ fog 有關的shader

shader build time stripping

(2) shader variant collections

1 在project視窗直接右鍵建立shader variant collection

inspector新增所需要的shader.

選擇關鍵字建立varient

2 載入

2.1在project settings-> graphics  

選擇always included shaders 

選擇shader preloading   ,指定shader variant collection

2.2在**裡手動

public shadervariantcollection svc;

svc.warmup ();

總結通過呼叫shadervariantcollection.warmup() 或者 shader.warmupallshaders ();避免物體第一次例項化時

載入variant所造成的卡頓。

shadervariantcollection.warmup()  對比shader.warmupallshaders ()的好處是可以分批載入,打散時間。

參考documentation/en/manual/optimizingshaderloadtime.html

documentation/en/manual/class-shader.html

Unity Shader之再談雜訊

對於雜訊其實我還有很多不懂的地方,比如random函式,比如雜訊的實際應用場景等等。於是在搜尋資料的時候我發現了兩個超超超牛b的 可以說是我這種想要去學習相關知識的人的福利 在這裡給自己標記一下同時也分享給大家 1.shadertoy創始人之一的奇淫巧計大集合 之前看shadertoy的時候,在驚嘆...

UnityShader之積雪效果

積雪效果是比較簡單的,只需要計算頂點法線方向和世界向上方向之間的點乘,將得到的值與預設的閥值比較,小於閥值為0,用這個值進行插值就ok了 1 shader myshader snowshader 紋理4 snownum snow num range 1,1 0 點乘閥值 5 snowintensit...

UnityShader無光照時模擬陰影效果

最近有乙個動態建立模型的專案,使用 讀取資料源從而建立出模型,真的是折騰的欲仙欲死,不過最近還終於折騰出來了,但是表現還不是太好,在專案中由於所有的模型都是 動態建立的,沒有紋理也沒有分配uv,所以最終出的模型沒有層次感,使用光照消耗太大,所以就有了shader的需求,我的做法是借助菲涅爾反射的方法...