【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的需求,我的做法是借助菲涅爾反射的方法...