統一管理光照衰弱和陰影9 4 4

2021-08-28 08:10:25 字數 1704 閱讀 5324

shader "unity shaders book/chapter 9/attenuationandshadowusebuildinfunctions"

subshader

cgprogram

#pragma vertex vert

#pragma fragment frag

//確保光照衰減等光照變數可以被正確賦值

#pragma multi_compile_fwdbase

//包含引用的內建檔案

#include "lighting.cginc"

#include "autolight.cginc"

//宣告properties中定義的屬性

fixed4 _diffuse;

fixed4 _specular;

float _gloss;

//定義輸入與輸出的結構體

struct a2v

; struct v2f

; //在頂點著色器中,計算世界座標下的法線方向和頂點座標,並傳遞給片元著色器

v2f vert(a2v v)

//在片元著色器中計算光照模型

fixed4 frag(v2f i) : sv_target

endcg

} //additional pass,渲染其他光源

pass

//開啟混合模式,將計算結果與之前的光照結果進行疊加

blend one one

cgprogram

#pragma vertex vert

#pragma fragment frag

//確保光照衰減等光照變數可以被正確賦值

#pragma multi_compile_fwdadd

//包含引用的內建檔案

#include "lighting.cginc"

//宣告properties中定義的屬性

fixed4 _diffuse;

fixed4 _specular;

float _gloss;

//定義輸入與輸出的結構體

struct a2v

; struct v2f

; //在頂點著色器中,計算世界座標下的法線方向和頂點座標,並傳遞給片元著色器

v2f vert(a2v v)

//在片元著色器中計算光照模型

fixed4 frag(v2f i) : sv_target

endcg

} }fallback"specular"

}

實際上,光照衰弱和陰影對物體最終的渲染結果的影響本質上是相同的,我們都是把光照衰弱因子和陰影值,以及光照結果相乘得到做種的渲染結果。

【unity_light-attenuation】是unity內建的用於計算光照衰弱和陰影的巨集,他會將光照衰減和陰影值相乘後的結果儲存到第乙個引數中

unity_light_attenuation(atten, i, i.worldpos);//atten=i*i.worldpos

[替換  fixed shadow = shadow_attenuation(i);]

如果我們希望可以在addition pass 中新增陰影效果,就需要使用【#pragma multi_compile_fwdadd_fullshadows】編譯替換【#pragmamulti_compile_fwdadd】

Gradle統一管理版本

為了提高專案開發效率,在實際專案開發過程中往往會引入一些開源框架,還有專案中使用的各種module,當引入module過多時最好提供一種統一的方式去管理版本號,如 compilesdkversion buildtoolsversion androidtestcompile 等,便於日後對版本號進行維...

php統一管理crontab

統一管理crontab計畫任務的關鍵點,在於實現像crontab一樣對 10 這樣的命令如何進行解析。解析完成最後呼叫系統函式執行shell命令 新建控制器 console controllers testcroncontroller新增任務 this cronjobs hello index he...

Redis Key 統一管理技巧

我們的專案中可能存在多種業務場景需要接入 redis 快取,在插入快取時需要設定 key,如果這個 key 散落在專案的各個業務 中的話,會給後期維護帶來很大的不便。所以我建議把系統中用到快取 key 放到乙個類中統一管理,相同業務的 key 放到一起,這樣也提高了系統 的可讀性,讓看這個系統的人一...