日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity shader 护盾shield的简单实现

發布時間:2024/3/13 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity shader 护盾shield的简单实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

擾動
直接對uv進行變換就可以了,記得首先把六邊形格子地圖的Tilling調高點 先預先調成合適大小的六邊形,然后repeat鋪滿整個護盾

1
2
3
4
5
6
// Tiles and offsets the value of input UV by the inputs Tiling and Offset respectively.
// This is commonly used for detail maps and scrolling textures over Time.
void Unity_TilingAndOffset_float(float2 UV, float2 Tiling, float2 Offset, out float2 Out)
{
Out = UV * Tiling + Offset;
}
直接在vertex著色器中對appdata傳進來的uv進行變動,兩者 offset的變動頻率不同

1
2
3
4
5
6
7
8
9
10
11
12
13
14
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
half2 uv = TRANSFORM_TEX(v.uv, _MainTex);
Unity_TilingAndOffset_float(uv, half2(1, 1), half2(0, -_Time.y), o.uv);
Unity_TilingAndOffset_float(uv, half2(1, 1), half2(0, -_Time.y * 2), o.uvGlow);

float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; o.worldViewDir = normalize(UnityWorldSpaceViewDir(worldPos));o.worldNormal = UnityObjectToWorldNormal(v.normal);return o;}

護盾邊緣光
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float3 normal : NORMAL;
};

struct v2f{float2 uv : TEXCOORD0;float2 uvGlow : TEXCOORD1;float4 vertex : SV_POSITION;half3 worldNormal : TEXCOORD2;half3 worldViewDir : TEXCOORD3;};

vertex著色器
1
2
3
4
5
6
7
8
9
10
11
12
13
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);

float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;

o.worldViewDir = normalize(UnityWorldSpaceViewDir(worldPos));o.worldNormal = UnityObjectToWorldNormal(v.normal);...return o;}

fragment著色器
先獲取世界坐標系下的法線向量和世界坐標系下攝像機到頂點的向量,1-點乘得到的值然后結合到最后的顏色輸出計算中,法線向量與攝像機到頂點的向量的所成夾角可視為從中心點向邊緣擴散,角度越來越大,到邊緣區角度呈局部最大值

1
2
3
4
5
6
7
8
9
10
11
half4 frag (v2f i) : SV_Target
{

half rim = pow(1 - abs(dot(normalize(i.worldNormal), normalize(i.worldViewDir))), _RimNum);

// 邊緣高光col = lerp(col, _LightColor, rim);...return col;}

全部代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
Shader “Unlit/ShieldForceField”
{
Properties
{
_MainTex (“Texture”, 2D) = “white” {}
[NoScaleOffset] _LightTex (“LightTex”, 2D) = “white” {}
_Hologram (“Hologram”, 2D) = “white” {}
[HDR] _LightColor (“LightColor”, Color) = (1, 1, 1, 1)
// 邊緣光幅度
_RimNum(“Rim” , Range(0 , 5)) = 1
}
SubShader
{
Tags
{
“RenderType” = “Transparent”
“Queue” = “Transparent”
“IgnoreProjector” = “True”
“ForceNoShadowCasting” = “True”
}

Blend SrcAlpha OneMinusSrcAlphaPass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#include "../../../../../Assets/ShaderGraphic.cginc"sampler2D _MainTex, _LightTex, _Hologram;float4 _MainTex_ST;half4 _LightColor;float _RimNum;struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;float3 normal : NORMAL;};struct v2f{float2 uv : TEXCOORD0;float2 uvGlow : TEXCOORD1;float4 vertex : SV_POSITION;half3 worldNormal : TEXCOORD2;half3 worldViewDir : TEXCOORD3;};v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);half2 uv = TRANSFORM_TEX(v.uv, _MainTex);Unity_TilingAndOffset_float(uv, half2(1, 1), half2(0, -_Time.y), o.uv);Unity_TilingAndOffset_float(uv, half2(1, 1), half2(0, -_Time.y * 2), o.uvGlow);float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; o.worldViewDir = normalize(UnityWorldSpaceViewDir(worldPos));o.worldNormal = UnityObjectToWorldNormal(v.normal);return o;}half4 frag (v2f i) : SV_Target{half4 col = tex2D(_MainTex, i.uv);half4 light = tex2D(_LightTex, i.uv);// light.rgb = light.r * _LightColor.rgb;light.rgb = _LightColor.rgb;col.rgb += light.rgb * _LightColor.a;half4 holoColor = tex2D(_Hologram, i.uvGlow);col += holoColor * 0.3;col.a = 0.5;half rim = pow(1 - abs(dot(normalize(i.worldNormal), normalize(i.worldViewDir))), _RimNum);// 邊緣高光col = lerp(col, _LightColor, rim);return col;}ENDCG} }

}

最后大功告成了,后續可能會繼續改進一下(加上相交時會留下邊緣光)
USB Microphone https://www.soft-voice.com/
Wooden Speakers https://www.zeshuiplatform.com/
亞馬遜測評 www.yisuping.cn
深圳網站建設www.sz886.com

總結

以上是生活随笔為你收集整理的Unity shader 护盾shield的简单实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人h动漫精品一区二区无码 | 欧美精品一二三四 | 色综合天天综合网国产成人网 | 国产美女精品在线 | 中国免费黄色片 | 男人天堂视频网站 | 一区二区av电影 | 亚洲av无码乱码在线观看富二代 | 亚洲爽爽 | 原创少妇半推半就88av | 香蕉视频免费在线播放 | 思思久久久 | 国产精品久久久久久久裸模 | 日韩欧美精品久久 | 涩涩视频在线 | 自拍在线视频 | 久久aaaa片一区二区 | 色哟哟在线 | 天天曰天天 | 免费av黄色 | 水蜜桃av在线 | 美日韩免费视频 | 性囗交免费视频观看 | 久久精品国产视频 | 日批视频 | 宅男噜噜噜66一区二区 | 亚洲色图视频网站 | 手机看片1024国产 | 四虎精品一区二区三区 | av福利院 | 一区二区久久精品66国产精品 | 爽爽淫人 | 黄色网址最新 | 色婷婷aⅴ一区二区三区 | 啪啪天堂 | 69毛片 | 国产又粗又猛又黄 | 午夜草逼| 亚洲欧美自拍另类 | 先锋影音av资源网 | 国产欧美精品一区二区在线播放 | 视频毛片| 国产同性人妖ts口直男 | 高贵麻麻被调教成玩物 | 午夜精品一区二区三区在线播放 | 国产妇女视频 | 两口子交换真实刺激高潮 | 久久久久久久毛片 | 国产精品2019 | 欧美一本 | 日韩毛片大全 | 国产精品久久不卡 | 伊人久久色 | 91日韩一区二区 | 性欧美丰满熟妇xxxx性 | 99自拍视频 | 成人黄色免费看 | 国产精品色婷婷 | 成人一级黄色片 | 九九热在线视频 | 五月婷网| www.久久视频 | 精品肉丝脚一区二区三区 | 日本涩涩网 | 国产五月婷婷 | 成人午夜视频在线免费观看 | 四虎影视黄色 | 青青草在线免费观看 | 久久国语 | 日日噜噜噜噜人人爽亚洲精品 | 污视频在线 | 91口爆一区二区三区在线 | 熟妇高潮一区二区三区 | 91看片看淫黄大片 | 亚洲av永久纯肉无码精品动漫 | 香蕉视频最新网址 | 超碰天堂| 一本久久久久 | 日韩中文第一页 | 椎名由奈av一区二区三区 | 国产三级自拍 | 美女诱惑一区 | 四虎影视免费在线观看 | av在线一区二区三区 | 色噜噜狠狠一区二区三区牛牛影视 | 西欧毛片| 亚洲色图导航 | 欧美精品在线一区二区三区 | 亚洲天堂成人在线观看 | 麻豆av一区二区三区久久 | 日韩和一区二区 | 日产国产亚洲精品系列 | 日日夜夜爽 | 999视频在线观看 | 五月综合激情日本mⅴ | 一区二区免费在线播放 | 91大神福利视频 | 国产亚洲一区二区三区在线观看 | 成人午夜又粗又硬又大 |