首页 > 解决方案 > 简单的cutout,即mask,基于普通标准shader的shader和一个mask

问题描述

“新”标准着色器有一个剪切模式,

在此处输入图像描述

但它适用于主纹理的 Alpha 通道。

我只想拥有另一种质感,一个平凡的面具,

在此处输入图像描述

并简单地用它来掩盖主要纹理。

这是普通的 Unity“新”标准着色器(透明)——我只是无法让简单的 _Mask 工作:/

我猜你只需要将 o.Alpha = 设置为 _Mask 的 alpha 之类的东西?

标签: unity3dshader

解决方案


这似乎有效:

Shader "Custom/SimpleMaskShader"
 {
     Properties
     {
        _MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
        _MaskTex ("Mask", 2D) = "white" {}
        _Cutoff ("Alpha cutoff", Range(0,1)) = 0.2
     }
 
     SubShader
     {
         Tags {"Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout"}
         LOD 300
         
         CGPROGRAM
         #pragma surface surf Lambert alphatest:_Cutoff
 
         sampler2D _MainTex;
         sampler2D _MaskTex;
 
         struct Input
         {
             float2 uv_MainTex;
             float2 uv_MaskTex;
         };
 
         void surf (Input IN, inout SurfaceOutput o)
         {
             o.Albedo = tex2D(_MainTex, IN.uv_MainTex).rgb;
             o.Alpha = tex2D(_MaskTex, IN.uv_MaskTex).a;
         }
         ENDCG
     }
 
     FallBack "Transparent/Cutout/Diffuse"
 }

推荐阅读