最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Unity Shader相交算法實現(xiàn)簡易防能量盾

 更新時間:2020年04月28日 15:02:12   作者:ZzEeRO  
這篇文章主要為大家詳細介紹了Unity Shader相交算法實現(xiàn)簡易防能量盾,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

Unity Shader學(xué)習(xí):相交算法實現(xiàn)簡易防能量盾

主要思路:對比物體和場景深度圖在觀察空間下的深度差值,深度差越小表示相交,顏色越深,在加上邊緣光勾出輪廓。

shader部分:

Shader "Unlit/DepthOutline"
{
 Properties{
 _MainTex("MainTex",2D) = "white"{}
 _RimFactor("RimFactor",Range(0.0,5.0))=1.0
 _DistanceFactor("DistanceFactor",Range(0.0,10.0))=1.0
 _RimColor("RimColor",Color)=(1,0,0,1)
 _DistanceFactor2("DistanceFactor2",Range(0.0,10.0))=1.0
 _DistanceFactor3("DistanceFactor3",Range(0.0,5.0)) = 1.0
 }
 SubShader{
 Tags{"Queue" = "Transparent" "RenderType" = "Transparent" "IgnoreProjector"="true"}
 Pass{
 Blend SrcAlpha OneMinusSrcAlpha
 ZWrite Off
 Cull Off
 CGPROGRAM
 #include "UnityCG.cginc"
 #pragma vertex vert
 #pragma fragment frag

 sampler2D _MainTex;
 float4 _MainTex_ST;
 sampler2D _CameraDepthTexture;
 float _RimFactor;
 float _DistanceFactor;
 float4 _RimColor;
 float _DistanceFactor2;
 float _DistanceFactor3;
 
 struct a2v {
 float4 vertex:POSITION;
 float2 uv:TEXCOORD0;
 float3 normal:NORMAL;
 };
 
 struct v2f {
 float2 uv:TEXCOORD0;
 float4 pos:SV_POSITION;
 float4 screenPos:TEXCOORD1;
 float3 worldNormal:TEXCOORD2;
 float3 worldViewDir:TEXCOORD3;
 };

 v2f vert(a2v v) {
 v2f o;
 o.pos = UnityObjectToClipPos(v.vertex);
 //ComputeScreenPos函數(shù),得到歸一化前的視口坐標xy
 //z分量為裁剪空間的z值,范圍[-Near,Far]
 o.screenPos = ComputeScreenPos(o.pos);
 o.uv = TRANSFORM_TEX(v.uv,_MainTex);
 //COMPUTE_EYEDEPTH函數(shù),將z分量范圍[-Near,Far]轉(zhuǎn)換為[Near,Far]
 COMPUTE_EYEDEPTH(o.screenPos.z);
 o.worldNormal = UnityObjectToWorldNormal(v.normal);
 o.worldViewDir = WorldSpaceViewDir(v.vertex).xyz;
 return o;
 }

 float4 frag(v2f i):SV_Target {
 float3 mainTex = 1-tex2D(_MainTex,i.uv).xyz;
 //獲取深度紋理,通過LinearEyeDepth函數(shù)將采樣的深度紋理值轉(zhuǎn)換為對應(yīng)的深度范圍[Near~Far]
 float sceneZ = LinearEyeDepth(SAMPLE_DEPTH_TEXTURE_PROJ(_CameraDepthTexture,UNITY_PROJ_COORD(i.screenPos)));
 //觀察空間深度差,值越小顏色值越大
 float distance =1 - saturate(sceneZ - i.screenPos.z);
 //消除內(nèi)部深度變化較大時產(chǎn)生的鋸齒
 if (distance>0.999999)
 {
 distance = 0;
 }
 //調(diào)整深度差值的變化曲線
 distance = pow(saturate(_DistanceFactor * log(distance) + _DistanceFactor3), _DistanceFactor2);

 //角度越大邊緣光越亮
 float rim =1 - abs(dot(normalize(i.worldNormal), normalize(i.worldViewDir)));
 rim = pow(rim, _RimFactor);
 float4 col = float4(0,0,0,0);
 col = lerp(col, float4(_RimColor.rgb,0.3), mainTex.r);
 //根據(jù)邊緣光以及深度差漸變
 col = float4(_RimColor.rgb,lerp(col.a,_RimColor.a, distance));
 col = lerp(col, _RimColor, rim);
 return col;
 }

 ENDCG
 }
 }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:

相關(guān)文章

  • 基于WPF實現(xiàn)跳動的字符效果

    基于WPF實現(xiàn)跳動的字符效果

    這篇文章主要和大家介紹一個好玩但實際作用可能不太大的動畫效果:跳動的字符,本文將利用WPF實現(xiàn)這一效果,感興趣的小伙伴可以學(xué)習(xí)一下
    2023-08-08
  • 在.NET中讀取嵌入和使用資源文件的方法

    在.NET中讀取嵌入和使用資源文件的方法

    本文分別介紹了使用GetManifestResourceStream讀取嵌入資源,和使用. resx資源文件嵌入資源,希望對大家有所幫助。
    2016-05-05
  • WinForm使用DecExpress控件中的ChartControl插件繪制圖表

    WinForm使用DecExpress控件中的ChartControl插件繪制圖表

    這篇文章介紹了WinForm使用DecExpress控件中的ChartControl插件繪制圖表的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C# WORD操作實現(xiàn)代碼

    C# WORD操作實現(xiàn)代碼

    在當前項目開發(fā)過程中,客戶有根據(jù)數(shù)據(jù)庫數(shù)據(jù)生成WORD文檔的需求,在和同事溝通的過程中,找到了兩個解決方案
    2009-04-04
  • 利用C#實現(xiàn)HTML模板的循環(huán)輸出

    利用C#實現(xiàn)HTML模板的循環(huán)輸出

    模板循環(huán)輸出 ,是指使用 UI 前端設(shè)計的 HTML 模板片斷,并結(jié)合數(shù)據(jù)記錄進行循環(huán)輸出的過程,本文將介紹如何中通過 C# 實現(xiàn)操作 HTML 模板的循環(huán)輸出,文章通過代碼示例講解的非常詳細,需要的朋友可以參考下
    2024-06-06
  • C# PropertyInfo類案例詳解

    C# PropertyInfo類案例詳解

    這篇文章主要介紹了C# PropertyInfo類案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C#實現(xiàn)對象的序列化和反序列化

    C#實現(xiàn)對象的序列化和反序列化

    這篇文章介紹了C#實現(xiàn)對象序列化和反序列化的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Unity使用EzySlice實現(xiàn)模型多邊形順序切割

    Unity使用EzySlice實現(xiàn)模型多邊形順序切割

    這篇文章主要為大家詳細介紹了Unity使用EzySlice實現(xiàn)模型多邊形順序切割,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C#中通過API實現(xiàn)的打印類 實例代碼

    C#中通過API實現(xiàn)的打印類 實例代碼

    這篇文章介紹了,C#中通過API實現(xiàn)的打印類 實例代碼,有需要的朋友可以參考一下
    2013-08-08
  • 淺析WPF中ToolTip工具提示的應(yīng)用

    淺析WPF中ToolTip工具提示的應(yīng)用

    在日常應(yīng)用中,當鼠標放置在某些控件上時,都會有相應(yīng)的信息提示,從軟件易用性上來說,這是一個非常友好的功能設(shè)計,本文就來和大家簡單聊聊WPF中ToolTip工具提示的相關(guān)使用,有興趣的可以了解下
    2023-12-12

最新評論

丽江市| 乌拉特前旗| 双城市| 灵丘县| 芜湖市| 鄂温| 巴青县| 屯昌县| 哈巴河县| 渝中区| 禹州市| 从化市| 施秉县| 赤水市| 延长县| 梓潼县| 玛纳斯县| 沂水县| 洛阳市| 黄梅县| 德钦县| 麟游县| 日土县| 甘德县| 娄底市| 抚顺市| 唐海县| 聂拉木县| 罗山县| 霍州市| 宁南县| 全椒县| 东丽区| 资兴市| 当雄县| 鄂托克前旗| 开原市| 贵南县| 化德县| 洞头县| 弥渡县|