Unity Shader透明并具有遮挡效果

1、在这里插入图片描述

Shader "MASK/PortalMaskShader"
{
	SubShader
	{
		Tags{ "RenderType" = "Opaque" "Queue" = "Geometry-3" }

		ColorMask 0
		ZWrite on

		CGINCLUDE
#include "UnityCG.cginc"

		struct appdata
	{
		float4 vertex : POSITION;
	};

	struct v2f
	{
		float4 pos : SV_POSITION;
	};

	v2f vert(appdata v)
	{
		v2f o;
		o.pos = UnityObjectToClipPos(v.vertex);
		return o;
	}

	half4 frag(v2f i) : SV_Target
	{
		return half4(0,0,0,0);
	}
		ENDCG

		Pass
	{
		Stencil
		{
			Ref 1
			Comp always
			Pass replace
		}

			Cull Back
			//Cull Front:朝向摄像机的渲染图元不会渲染。
			//Cull off关闭剔除功能,所有的都会渲染。缺点:需要渲染的数目成倍增加,除非用于特殊效果,建议不开启。

			CGPROGRAM
#pragma vertex vert
#pragma fragment frag
			ENDCG
	}
	}
}
  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Unity中,要实现透明物体遮挡实体效果并且clear flags设为skybox,可以使用Shader进行编写。 首先,在网上或者Unity的官方文档中找到一个透明着色器模板,用于创建透明的表面材质。 其次,在Shader文件中的SubShader中添加以下代码段实现透明度控制: ``` Tags {"Queue"="Transparent" "RenderType"="Transparent"} Blend SrcAlpha OneMinusSrcAlpha Cull Off ZWrite Off ``` 这段代码指定了渲染的队列、渲染类型以及融合模式。Queue设置为Transparent,使得透明物体在绘制时按照正确的顺序进行渲染。Blend设置为SrcAlpha OneMinusSrcAlpha,使用透明度混合模式。Cull设为Off,不进行剔除,保证两个物体都能被渲染。ZWrite设为Off,不写入深度缓冲区,保证透明物体不会深度测试被遮挡实体物体。 然后,在Pass中添加以下代码段实现渲染到Skybox上: ``` Pass { Tags {"LightMode"="Skybox Only"} ZTest Always ColorMask RGB } ``` 这段代码指定了光照模式为Skybox Only,使得渲染仅针对Skybox。ZTest设为Always,表示永远通过深度测试,确保透明物体可以覆盖实体物体。ColorMask设为RGB,只渲染RGB颜色通道,避免Alpha通道影响渲染。 最后,将编写好的Shader应用到透明物体的材质上,并将场景中的Skybox设置为所需的背景。 总而言之,通过编写透明着色器,并在其中设置正确的透明度控制和渲染到Skybox的代码段,可以实现透明物体遮挡实体效果,并且clear flags设为skybox时能够正确渲染到背景上。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值