开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2210

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

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

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

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

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

6378

主题

6892

帖子

2万

积分

Rank: 16

UID
1231
好友
185
蛮牛币
2765
威望
30
注册时间
2013-7-29
在线时间
3265 小时
最后登录
2018-5-24

社区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蛮牛粉丝
1301/1500
排名
1090
昨日变化

11

主题

59

帖子

1301

积分

Rank: 6Rank: 6Rank: 6

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

回复 支持 反对

使用道具 举报

7日久生情
1741/5000
排名
2797
昨日变化
13

1

主题

882

帖子

1741

积分

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

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

回复

使用道具 举报

3偶尔光临
262/300
排名
8665
昨日变化
188

1

主题

56

帖子

262

积分

Rank: 3Rank: 3Rank: 3

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

回复

使用道具 举报

6蛮牛粉丝
1141/1500
排名
1973
昨日变化
11

3

主题

147

帖子

1141

积分

Rank: 6Rank: 6Rank: 6

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

回复

使用道具 举报

排名
24541
昨日变化
21

0

主题

53

帖子

95

积分

Rank: 2Rank: 2

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

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1069/1500
排名
3766
昨日变化
38

0

主题

452

帖子

1069

积分

Rank: 6Rank: 6Rank: 6

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

回复

使用道具 举报

6蛮牛粉丝
1370/1500
排名
4012
昨日变化
37

3

主题

805

帖子

1370

积分

Rank: 6Rank: 6Rank: 6

UID
246489
好友
0
蛮牛币
2267
威望
0
注册时间
2017-9-28
在线时间
242 小时
最后登录
2018-5-24

活力之星迈向小康

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

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1412/1500
排名
6261
昨日变化
94

0

主题

1049

帖子

1412

积分

Rank: 6Rank: 6Rank: 6

UID
267381
好友
2
蛮牛币
2296
威望
0
注册时间
2018-2-1
在线时间
175 小时
最后登录
2018-5-25

迈向小康

发表于 2018-5-8 08:51:47 | 显示全部楼层
谢谢分享

回复

使用道具 举报

5熟悉之中
526/1000
排名
6475
昨日变化
9

5

主题

118

帖子

526

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

5熟悉之中
982/1000
排名
4806
昨日变化
32

0

主题

518

帖子

982

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

排名
28576
昨日变化
36

0

主题

7

帖子

31

积分

Rank: 1

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

回复 支持 反对

使用道具 举报

3偶尔光临
188/300
排名
7973
昨日变化
10

1

主题

7

帖子

188

积分

Rank: 3Rank: 3Rank: 3

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

沙发!谢谢楼主分享

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1051/1500
排名
2710
昨日变化
11

0

主题

292

帖子

1051

积分

Rank: 6Rank: 6Rank: 6

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

回复

使用道具 举报

5熟悉之中
669/1000
排名
4371
昨日变化
7

8

主题

200

帖子

669

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

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

本版积分规则

关闭

站长推荐 上一条 /1 下一条

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