游戏蛮牛学习群(纯技术交流,不闲聊):539178957
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2286

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 2521|回复: 32

[士郎] 利用场景的深度信息——能量护盾

[复制链接]  [移动端链接]
排名
3
昨日变化

6673

主题

7195

帖子

2万

积分

Rank: 16

UID
1231
好友
185
蛮牛币
9021
威望
30
注册时间
2013-7-29
在线时间
3426 小时
最后登录
2018-8-17

社区QQ达人活力之星原创精华达人突出贡献奖财富之证游戏蛮牛QQ群会员蛮牛妹VIP

发表于 2018-5-7 11:05:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
护盾.png



利用场景的深度信息可以做一些很有趣的效果,比如  能量护盾~
这个效果虽然不算复杂但是很多游戏里面有有应用,看起来也够炫酷。而利用深度信息还可以做很多其他的效果。以后有空慢慢更新吧…………
下面正题

这个效果分为三个部分:
半透效果
最简单的一部分,但需要一些关于shader的常识性知识。

1.jpg
shader设置


逐句分析:
Cull Off  关闭背面剪裁。因为是要半透的自然可以看到背面,因此需要关闭背面剪裁
ZWrite Off 关闭Z缓存写入。因为护盾本身是不会“遮挡”到其他物体的,因此关闭。这里的遮挡需要理解渲染管线的Z缓存原理。
ZTest On 开启Z缓存测试。护盾需要被其他物体所“遮挡”。同上需要理解Z缓存。
Blend SrcAlpha OneMinusSrcAlpha 混合方式 Alpha混合。意思是用Alpha的值来控制计算颜色和颜色缓存中的值进行混合。(混合的方法有很多具体可查阅相关文档)
然后在ps里瞎鸡儿做个护盾样子的图采样就行了~(其实可以弄个GrabPass然后加个噪音扰动弄出能量扭曲空间的效果)。这里偷个懒就不搞了~
2.jpg

护盾贴图
边缘高亮
法线方向和视角的方向差异越大就说明越靠近边缘,再加个参数用来调整。

3.jpg
ps:可以在顶点着色器里获得法线和视角方向以减少计算量,在片段着色器里使用的时候记得归一化。



4.jpg

获取法线和视角方向

5.jpg



相交高亮
这就是关键了。
现在顶点着色器里获得对应的场景坐标

6.jpg

随后在片段着色器里用场景坐标对深度图进行采样
7.jpg

需要注意的是:这里的_CameraDepthTexture需要在前面提前声明。
我们用自身的坐标和场景深度相减。得到的值小于一定范围就认为是和场景相交的部分了。
最后使用高亮的系数对根据贴图采样的颜色和高亮的颜色进行插值得到了最终的颜色值。
下面是代码:
[AppleScript] 纯文本查看 复制代码
Shader "Unlit/depth"
{
	Properties
	{
		_MainTex ("Texture", 2D) = "black" {}
		_Threshold("相交阈值", Range(0.0, 1)) = 1 
		_ViewThreshold("视角阈值", Range(0.0, 2)) = 1 
		_HighlightColor("高光颜色", Color) = (1,1,1,1)
	}
	SubShader
	{
		Tags { 
				"RenderType"="Transparent"
				"Queue" = "Transparent"
			}
		LOD 100

		Pass
		{
			Cull Off
			ZWrite Off
			ZTest On
			Blend SrcAlpha OneMinusSrcAlpha
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			
			#include "UnityCG.cginc"
			//定义深度图
       		uniform sampler2D_float _CameraDepthTexture;

       		fixed _Threshold;
       		fixed _ViewThreshold;

       		fixed4 _HighlightColor;

			struct appdata
			{
				float4 vertex : POSITION;
				float3 normal : NORMAL;
				float2 uv : TEXCOORD0;
			};

			struct v2f
			{
				float2 uv : TEXCOORD0;
				UNITY_FOG_COORDS(1)
				float4 vertex : SV_POSITION;
				float4 screenPos : TEXCOORD2;
				float3 worldNormal : TEXCOORD3;
            	float3 worldViewDir : TEXCOORD4;

			};

			sampler2D _MainTex;
			float4 _MainTex_ST;
			
			v2f vert (appdata v)
			{
				v2f o;
				o.vertex = UnityObjectToClipPos(v.vertex);
				o.uv = TRANSFORM_TEX(v.uv, _MainTex);

				o.worldNormal = UnityObjectToWorldNormal(v.normal);
            	o.worldViewDir = UnityWorldSpaceViewDir(mul(unity_ObjectToWorld, v.vertex));

				o.screenPos = ComputeScreenPos(o.vertex);
				COMPUTE_EYEDEPTH(o.screenPos.z);
				
				return o;
			}

			fixed4 frag (v2f i) : SV_Target
			{
				float4 final = tex2D(_MainTex, i.uv);

				fixed3 worldNormal = normalize(i.worldNormal);
            	fixed3 worldViewDir = normalize(i.worldViewDir);

				//法线方向和视角方向的点积
            	fixed edge = 1 - abs(dot(worldNormal, worldViewDir)) * _ViewThreshold;
				
            	//根据自身的场景坐标采样深度图得到当前位置的场景深度
				float sceneZ = LinearEyeDepth(SAMPLE_DEPTH_TEXTURE_PROJ(_CameraDepthTexture, UNITY_PROJ_COORD(i.screenPos)));
				float selfZ = i.screenPos.z;

				float intersect = 1- min ( (abs(sceneZ - selfZ)) / _Threshold, 1);

				return lerp(final,_HighlightColor,max(edge,intersect));
			}
			ENDCG
		}
	}
}



知乎@小猫

1.jpg

跟我念“站长妹纸萌萌哒!”我说站长,你说YO!爱你们么么哒~
回复

使用道具 举报

6蛮牛粉丝
1481/1500
排名
930
昨日变化
3

15

主题

70

帖子

1481

积分

Rank: 6Rank: 6Rank: 6

UID
165566
好友
0
蛮牛币
2878
威望
0
注册时间
2016-10-8
在线时间
352 小时
最后登录
2018-8-17
发表于 2018-5-7 12:09:00 | 显示全部楼层
沙发!谢谢楼主分享

回复 支持 反对

使用道具 举报

7日久生情
1939/5000
排名
2356
昨日变化
7

1

主题

916

帖子

1939

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
216583
好友
2
蛮牛币
3237
威望
0
注册时间
2017-4-7
在线时间
470 小时
最后登录
2018-8-17
发表于 2018-5-7 13:27:16 | 显示全部楼层
多谢分~享~

回复

使用道具 举报

4四处流浪
434/500
排名
5973
昨日变化
6

1

主题

78

帖子

434

积分

Rank: 4

UID
246321
好友
0
蛮牛币
925
威望
0
注册时间
2017-9-27
在线时间
145 小时
最后登录
2018-8-17
发表于 2018-5-7 13:27:45 | 显示全部楼层
谢谢楼主分享

回复

使用道具 举报

6蛮牛粉丝
1440/1500
排名
1609
昨日变化
6

8

主题

208

帖子

1440

积分

Rank: 6Rank: 6Rank: 6

UID
99182
好友
0
蛮牛币
1526
威望
0
注册时间
2015-5-10
在线时间
484 小时
最后登录
2018-8-17
发表于 2018-5-7 13:59:32 | 显示全部楼层
多谢分享

回复

使用道具 举报

2初来乍到
100/150
排名
25323
昨日变化
6

0

主题

54

帖子

100

积分

Rank: 2Rank: 2

UID
217052
好友
0
蛮牛币
20
威望
0
注册时间
2017-4-10
在线时间
32 小时
最后登录
2018-8-13
发表于 2018-5-7 16:55:47 | 显示全部楼层
换个房东和东方红

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1308/1500
排名
3045
昨日变化
5

0

主题

528

帖子

1308

积分

Rank: 6Rank: 6Rank: 6

UID
182268
好友
2
蛮牛币
649
威望
0
注册时间
2016-11-9
在线时间
338 小时
最后登录
2018-8-17
发表于 2018-5-7 17:12:10 | 显示全部楼层
谢谢楼主分享

回复

使用道具 举报

7日久生情
1605/5000
排名
3102
昨日变化
15

3

主题

862

帖子

1605

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
246489
好友
1
蛮牛币
2664
威望
0
注册时间
2017-9-28
在线时间
306 小时
最后登录
2018-8-17

活力之星

发表于 2018-5-7 19:20:47 | 显示全部楼层
大佬出品,必是珍品

回复 支持 反对

使用道具 举报

7日久生情
1906/5000
排名
4258
昨日变化
6

0

主题

1334

帖子

1906

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
267381
好友
5
蛮牛币
3186
威望
0
注册时间
2018-2-1
在线时间
256 小时
最后登录
2018-8-6
发表于 2018-5-8 08:51:47 | 显示全部楼层
谢谢分享

回复

使用道具 举报

5熟悉之中
683/1000
排名
4751
昨日变化
35

6

主题

125

帖子

683

积分

Rank: 5Rank: 5

UID
216290
好友
0
蛮牛币
548
威望
0
注册时间
2017-4-5
在线时间
276 小时
最后登录
2018-8-17
发表于 2018-5-8 08:52:07 | 显示全部楼层
多谢分~享~

回复

使用道具 举报

6蛮牛粉丝
1321/1500
排名
3867
昨日变化
15

2

主题

703

帖子

1321

积分

Rank: 6Rank: 6Rank: 6

UID
209046
好友
0
蛮牛币
1872
威望
0
注册时间
2017-3-30
在线时间
268 小时
最后登录
2018-8-17
发表于 2018-5-8 09:24:57 | 显示全部楼层

回复

使用道具 举报

排名
23869
昨日变化
11

0

主题

8

帖子

48

积分

Rank: 1

UID
250768
好友
0
蛮牛币
114
威望
0
注册时间
2017-10-25
在线时间
25 小时
最后登录
2018-8-16
发表于 2018-5-8 09:30:05 | 显示全部楼层
沙发!谢谢楼主分享

回复 支持 反对

使用道具 举报

3偶尔光临
275/300
排名
6302
昨日变化
57

1

主题

8

帖子

275

积分

Rank: 3Rank: 3Rank: 3

UID
217042
好友
0
蛮牛币
810
威望
0
注册时间
2017-4-10
在线时间
74 小时
最后登录
2018-8-17
发表于 2018-5-8 09:34:44 | 显示全部楼层

沙发!谢谢楼主分享

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1297/1500
排名
2241
昨日变化
1

0

主题

349

帖子

1297

积分

Rank: 6Rank: 6Rank: 6

UID
136635
好友
0
蛮牛币
1283
威望
0
注册时间
2016-2-15
在线时间
372 小时
最后登录
2018-8-16
发表于 2018-5-8 09:35:46 | 显示全部楼层
谢谢分享

回复

使用道具 举报

5熟悉之中
734/1000
排名
4149
昨日变化
2

8

主题

212

帖子

734

积分

Rank: 5Rank: 5

UID
164720
好友
0
蛮牛币
3360
威望
0
注册时间
2016-11-17
在线时间
186 小时
最后登录
2018-8-15
QQ
发表于 2018-5-8 09:39:13 | 显示全部楼层
谢谢楼主分享

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表