shader学习日记之透明但不显示背面模型

在制作外发光时候收到一个需求,期望模型透明时不显示背面但是旋转后可以看到背面模型,做了背面剔除并开启深度效果不是很理想,下面是我找到的两种处理方法.

期望不显示拳头背面的手指 ,模型旋转后完整显示手指

方法1

​​​​​​添加一个pass储存深度 开启ColorMask

Pass{
		Cull Off
		Zwrite On
		ColorMask 0
		HLSLPROGRAM
		float4 _EdgeColor;
		#pragma vertex Vertex
		#pragma fragment Fragment
		#include "Packages/com.unity.renderpipelines.lightweight/Shaders/Core.hlsl
				
        float4 Vertex(float4 vertexPos : POSITION):SV_POSITION
		{
				
		return  TransformWorldToHClip(TransformObjectToWorld(vertexPos));
				
		}
		half4 Fragment(void): COLOR
	    {
		return _EdgeColor;
		}
	    ENDHLSL
		}

方案二

用颜色遮罩贴图,遮住手指部分,再构建矩阵判断世界坐标位置,根据位置给遮罩贴图乘区间值

//通过当前的相机空间坐标构建矩阵,判断当前方向
half3 back = TransformWorldToView(TransformObjectToWorld(float4(1, 0, 0, 0))).xyz;
float blendFactor = 1 - (dot(float3(1, 0, 0), back.xyz) + 1) * 0.5;
//遮罩贴图(我使用的是g通道)
half4 maskMap = SAMPLE_TEXTURE2D(_EmissionTex, sampler_EmissionTex, input.uv.zw);

half4 Color;
Color.a = saturate(lerp(1, maskMap.g, blendFactor));

效果如下

正面不显示手指,启用贴图遮罩;

旋转模型后关闭(乘0)贴图遮罩显示手指;

仅遮罩未做矩阵计算 

达到效果

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值