基于Unity2021版本URP的Render Feature进行Outline的一种方法

37 篇文章 3 订阅

首先准备两个Shader,第一个用于产生Stencil,第二个用于产生模型对外挤出的渲染,同时,挤出渲染过程中利用第一个shader产生的Stencil将内部留空,这样就产生了Outline勾边效果。

这两个Shader在前面已经有了,为了方便查看这里再贴出来一下。

首先是用于产生Stencil的Shader:

Shader "Unlit/PureStencil"
{
	Properties
	{
		[IntRange]_StencilID("Stencil ID", Range(0,255)) = 1
	}
 
	SubShader
	{
		Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" "Queue" = "Geometry"}
		
		Pass
		{
			Blend Zero One
			ZWrite Off
 
			Stencil
			{
				Ref [_StencilID]
				Comp Always
				Pass Replace
				Fail Keep
			}
		}
	}
}

其次是用于产生挤出的Shader:

Shader "Unlit/PureExtrude"
{
	Properties
	{
		_OutlineColor("Outline Color",Color) = (1,0.5,0,0.5)
		_Outline("Outline",Range(0,1)) = 0.1
	}
 
	SubShader
	{
		Tags { "RenderType" = "Transparent" "RenderPipeline" = "UniversalPipeline"}
		
		Pass
		{
			Cull Off
			ZTest LEqual
			ZWrite Off
			Blend SrcAlpha OneMinusSrcAlpha
 
			HLSLPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
 
			struct Atributes
			{
				float4 posOS : POSITION;
				float3 norOS : NORMAL;
			};
 
			struct Varyings
			{
				float4 posCS : SV_POSITION;
			};
 
			CBUFFER_START(UnityPerMaterial)
			real4 _OutlineColor;
			real _Outline;
			CBUFFER_END
			Varyings vert(Atributes v)
			{
				Varyings o = (Varyings)0;
				o.posCS = TransformObjectToHClip(v.posOS.xyz);
				float3 vNormal = normalize(mul((float3x3)UNITY_MATRIX_IT_MV, v.norOS));
				float2 projPos = normalize(mul((float2x2)UNITY_MATRIX_P,vNormal.xy));
 
				o.posCS.xy += projPos * _Outline * 0.1;
				return o;
			}
 
			real4 frag(Varyings i) : SV_Target
			{
				return _OutlineColor;
			}
			ENDHLSL
		}
	}
}

有了这两个Shader之后,再在Unity中添加一个Outline层,目的是希望进入Outline层的物体才显示Outline效果。

然后在URP的Render Feature中添加两个Render Objects,参数如下图。

 

 第一个Render Objects命名为Stencil,是用来产生蒙版的,第二个命名为Outline,用于产生挤出的像素。

第一个的Event参数选择了不透明渲染之后,第二个的Event选择了在Skybox渲染之前,这样就保证了第二个肯定可以使用第一个产生的Stencil。

两者的Layer Mask都使用了Outline,这个嘛,是当然了,呵呵。

第一个的覆盖材质使用了名字叫Stencil的材质,当然了这个材质使用了前面的Stencil这个Shader,同时这个材质的_StencilID设置为了一个大于0的数字,比如1;第二个的覆盖材质使用了名字叫Outline的材质,同理,这个材质使用了前面的Outline这个Shader。

两者的Depth都进行了勾选,而且Depth Test都设置为Always,这样保证了将来Outline的效果是覆盖在所有物体之上的,当然也不是说一定要这么干,这个根据情况调整吧,一般来说第一个选择Always是有必要的,第二个选择Less似乎也不错(如果更变态一点儿,再添加第三个Render Objects,也是用类似Outline的材质,然后选择Greater,用于产生一个不同效果的被遮挡部分的勾边,这样被遮挡和不被遮挡的部分就产生了不同的勾边,呵呵)。还有就是Depth Write不要勾选,由于这个例子里面是最后渲染的两个物体,其实Depth Write怎么设置都无所谓了。

第一个的Stencil不需要勾选,第二个的Stencil需要勾选,同时Value设置为0,Compare Function设置为Equal,这样蒙版所在的位置的像素都无法被渲染了,只有挤出多余的部分能够被渲染出来。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Unity 2021 URP 高亮插件是一种非常有用的工具,它可以帮助游戏开发者快速高效地制作游戏,在游戏中进行高亮显示,使玩家能够更加快速、直观地获取信息。 这种插件拥有许多优秀的特性,如我们可以自定义颜色和形状等,以便更好地适应游戏的需求。同时,该插件还支持多种颜色的混合和特效,以突出显示游戏中的重要信息。 此外,Unity 2021 URP 高亮插件还支持多种不同类型的物体,如模型、文本、UI元素等等。因此,无论是在单机游戏还是多人游戏中都可以很方便地使用该插件。 虽然该插件在制作游戏中非常方便,但是使用时也需要一定的技巧。如果没有经验的开发者可能需要花一定的时间学习使用方法,并进行实践,才能发挥其效果。 综上所述,Unity 2021 URP 高亮插件是一款非常实用的工具,它可以大大提高游戏开发效率,为游戏体验提供更好的视觉效果和操作体验。但是,对于非专业开发者来说,需要掌握一定的技能才能发挥其最大的效果。 ### 回答2: Unity 2021 URP 高亮插件是一款非常实用的插件,它可以帮助我们增强游戏场景的可视化效果,在Unity引擎上开发游戏时非常适用。 这款插件采用了URP(Universal Render Pipeline)技术,可以实现更高效的渲染,并且具备多种自定义选项,可以根据不同场景需求进行灵活的调整。高亮插件可以实现很多功能,比如轮廓高亮、颜色高亮、描边高亮等,可以在游戏中实现非常炫酷的特效效果。 此外,高亮插件的优势还在于其操作简单易学,使用起来非常方便,也可以自行编程进行二次开发。对于开发者而言,只需要在Unity中导入插件即可,不需要进行过多的配置,大大提高了开发效率。 总的来说,Unity 2021 URP 高亮插件是非常值得开发者们尝试的一款插件,它不仅可以帮助我们实现更加绚丽的游戏效果,同时也提高了游戏整体的质量和体验,为我们的游戏开发工作带来了很多便利。 ### 回答3: Unity 2021URP高亮插件是一种可用于Unity中的插件,用于控制特定区域或物体的高亮程度。该插件为Unity用户实现了定义外部辅助灯,控制有光照的物品,使游戏中的物品或地形的特定地方更具吸引力。此插件具有使用简单,安装方便的优点,可以轻松地在项目中添加和使用高亮摆件复制。 该高亮插件使用URP(通用渲染管道)进行渲染,支持重复渲染。此外,此插件不会对渲染管道或其他项目资源造成影响,因此可以安全地与其他插件或资源一起使用。 使用高亮插件,您可以更好地呈现3D模型或场景中需要强调的区域。用户可以轻松控制高亮的强度和颜色,以便与场景中的其他光源完美匹配。而高亮效果在吸引用户视觉方面,将有助于获得更好的游戏体验。该插件是一个非常实用的工具,并且为Unity用户提供了一种简单但高效的方法,使他们的游戏和场景更加生动和真实。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值