Skip to main content
added 1344 characters in body
Source Link
AaronF
  • 111
  • 1
  • 3

EDIT: I changed the shader code according to Draco's answer:

Shader "Custom/MakeVisible" {
    Properties{
        _Color("Color", Color) = (1,1,1,1)
        _TransparencyMult("Transparency Mulitplier", Range(0,1)) = 1
        _MainTex("Albedo (RGB)", 2D) = "white" {}
        _Glossiness("Smoothness", Range(0,1)) = 0.5
        _Metallic("Metallic", Range(0,1)) = 0.0
    }
    SubShader {
        Tags { 
            "IgnoreProjector" = "True"
            "RenderType" = "Transparent"
            "Queue" = "Transparent"
        }
        LOD 200
        Blend SrcAlpha OneMinusSrcAlpha
        CGPROGRAM
        #pragma surface surf Standard fullforwardshadows alpha
        #pragma target 3.0

        sampler2D _MainTex;

        struct Input {
            float2 uv_MainTex;
        };

        half _Glossiness;
        half _Metallic;
        fixed4 _Color;
        half _TransparencyMult;

        UNITY_INSTANCING_CBUFFER_START(Props)
        UNITY_INSTANCING_CBUFFER_END

        void surf(Input IN, inout SurfaceOutputStandard o) {
            fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
            o.Albedo = c.rgb;
            o.Metallic = _Metallic;
            o.Smoothness = _Glossiness;

            //Multiply alpha by value between 0 and 1
            o.Alpha = c.a * _TransparencyMult;
        }
        ENDCG
    }
}

Now it is always the same transparency with no texture:

enter image description here

EDIT: I changed the shader code according to Draco's answer:

Shader "Custom/MakeVisible" {
    Properties{
        _Color("Color", Color) = (1,1,1,1)
        _TransparencyMult("Transparency Mulitplier", Range(0,1)) = 1
        _MainTex("Albedo (RGB)", 2D) = "white" {}
        _Glossiness("Smoothness", Range(0,1)) = 0.5
        _Metallic("Metallic", Range(0,1)) = 0.0
    }
    SubShader {
        Tags { 
            "IgnoreProjector" = "True"
            "RenderType" = "Transparent"
            "Queue" = "Transparent"
        }
        LOD 200
        Blend SrcAlpha OneMinusSrcAlpha
        CGPROGRAM
        #pragma surface surf Standard fullforwardshadows alpha
        #pragma target 3.0

        sampler2D _MainTex;

        struct Input {
            float2 uv_MainTex;
        };

        half _Glossiness;
        half _Metallic;
        fixed4 _Color;
        half _TransparencyMult;

        UNITY_INSTANCING_CBUFFER_START(Props)
        UNITY_INSTANCING_CBUFFER_END

        void surf(Input IN, inout SurfaceOutputStandard o) {
            fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
            o.Albedo = c.rgb;
            o.Metallic = _Metallic;
            o.Smoothness = _Glossiness;

            //Multiply alpha by value between 0 and 1
            o.Alpha = c.a * _TransparencyMult;
        }
        ENDCG
    }
}

Now it is always the same transparency with no texture:

enter image description here

added 265 characters in body
Source Link
AaronF
  • 111
  • 1
  • 3

I'm trying to create a shader in Unity with a slider that can adjust the transparency. (This is the first step toward something more sophisticated.) I try to do this by setting the alpha of the SurfaceOutputStandard struct to the texture alpha times a value between 0 and 1:

Shader "Custom/MakeVisible" {
    Properties {
        _Color ("Color", Color) = (1,1,1,1)
        _TransparencyMult ("Transparency Mulitplier", Range(0,1)) = 1
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _Glossiness ("Smoothness", Range(0,1)) = 0.5
        _Metallic ("Metallic", Range(0,1)) = 0.0
    }
    SubShader {
        Tags { "RenderType"="Transparent" }
        LOD 200
        
        CGPROGRAM
        #pragma surface surf Standard fullforwardshadows
        #pragma target 3.0

        sampler2D _MainTex;

        struct Input {
            float2 uv_MainTex;
        };

        half _Glossiness;
        half _Metallic;
        fixed4 _Color;
        half _TransparencyMult;

        UNITY_INSTANCING_CBUFFER_START(Props)
        UNITY_INSTANCING_CBUFFER_END

        void surf (Input IN, inout SurfaceOutputStandard o) {
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
            o.Albedo = c.rgb;
            o.Metallic = _Metallic;
            o.Smoothness = _Glossiness;
            
            //Multiply alpha by value between 0 and 1
            o.Alpha = c.a * _TransparencyMult; 
        }
        ENDCG
    }
}

This seems like it should work, since Alpha is an available property. But it doesn't. Here's a screenshot:

enter image description here

EDIT:

I realized after reading closer that I needed to add the alpha:fade parameter for that to work, however, when I add that it is always transparent no matter what:

enter image description here

I'm trying to create a shader in Unity with a slider that can adjust the transparency. (This is the first step toward something more sophisticated.) I try to do this by setting the alpha of the SurfaceOutputStandard struct to the texture alpha times a value between 0 and 1:

Shader "Custom/MakeVisible" {
    Properties {
        _Color ("Color", Color) = (1,1,1,1)
        _TransparencyMult ("Transparency Mulitplier", Range(0,1)) = 1
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _Glossiness ("Smoothness", Range(0,1)) = 0.5
        _Metallic ("Metallic", Range(0,1)) = 0.0
    }
    SubShader {
        Tags { "RenderType"="Transparent" }
        LOD 200
        
        CGPROGRAM
        #pragma surface surf Standard fullforwardshadows
        #pragma target 3.0

        sampler2D _MainTex;

        struct Input {
            float2 uv_MainTex;
        };

        half _Glossiness;
        half _Metallic;
        fixed4 _Color;
        half _TransparencyMult;

        UNITY_INSTANCING_CBUFFER_START(Props)
        UNITY_INSTANCING_CBUFFER_END

        void surf (Input IN, inout SurfaceOutputStandard o) {
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
            o.Albedo = c.rgb;
            o.Metallic = _Metallic;
            o.Smoothness = _Glossiness;
            
            //Multiply alpha by value between 0 and 1
            o.Alpha = c.a * _TransparencyMult; 
        }
        ENDCG
    }
}

This seems like it should work, since Alpha is an available property. But it doesn't. Here's a screenshot:

enter image description here

I'm trying to create a shader in Unity with a slider that can adjust the transparency. (This is the first step toward something more sophisticated.) I try to do this by setting the alpha of the SurfaceOutputStandard struct to the texture alpha times a value between 0 and 1:

Shader "Custom/MakeVisible" {
    Properties {
        _Color ("Color", Color) = (1,1,1,1)
        _TransparencyMult ("Transparency Mulitplier", Range(0,1)) = 1
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _Glossiness ("Smoothness", Range(0,1)) = 0.5
        _Metallic ("Metallic", Range(0,1)) = 0.0
    }
    SubShader {
        Tags { "RenderType"="Transparent" }
        LOD 200
        
        CGPROGRAM
        #pragma surface surf Standard fullforwardshadows
        #pragma target 3.0

        sampler2D _MainTex;

        struct Input {
            float2 uv_MainTex;
        };

        half _Glossiness;
        half _Metallic;
        fixed4 _Color;
        half _TransparencyMult;

        UNITY_INSTANCING_CBUFFER_START(Props)
        UNITY_INSTANCING_CBUFFER_END

        void surf (Input IN, inout SurfaceOutputStandard o) {
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
            o.Albedo = c.rgb;
            o.Metallic = _Metallic;
            o.Smoothness = _Glossiness;
            
            //Multiply alpha by value between 0 and 1
            o.Alpha = c.a * _TransparencyMult; 
        }
        ENDCG
    }
}

This seems like it should work, since Alpha is an available property. But it doesn't. Here's a screenshot:

enter image description here

EDIT:

I realized after reading closer that I needed to add the alpha:fade parameter for that to work, however, when I add that it is always transparent no matter what:

enter image description here

Source Link
AaronF
  • 111
  • 1
  • 3

Modifying Alpha in Unity Standard Shader

I'm trying to create a shader in Unity with a slider that can adjust the transparency. (This is the first step toward something more sophisticated.) I try to do this by setting the alpha of the SurfaceOutputStandard struct to the texture alpha times a value between 0 and 1:

Shader "Custom/MakeVisible" {
    Properties {
        _Color ("Color", Color) = (1,1,1,1)
        _TransparencyMult ("Transparency Mulitplier", Range(0,1)) = 1
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _Glossiness ("Smoothness", Range(0,1)) = 0.5
        _Metallic ("Metallic", Range(0,1)) = 0.0
    }
    SubShader {
        Tags { "RenderType"="Transparent" }
        LOD 200
        
        CGPROGRAM
        #pragma surface surf Standard fullforwardshadows
        #pragma target 3.0

        sampler2D _MainTex;

        struct Input {
            float2 uv_MainTex;
        };

        half _Glossiness;
        half _Metallic;
        fixed4 _Color;
        half _TransparencyMult;

        UNITY_INSTANCING_CBUFFER_START(Props)
        UNITY_INSTANCING_CBUFFER_END

        void surf (Input IN, inout SurfaceOutputStandard o) {
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
            o.Albedo = c.rgb;
            o.Metallic = _Metallic;
            o.Smoothness = _Glossiness;
            
            //Multiply alpha by value between 0 and 1
            o.Alpha = c.a * _TransparencyMult; 
        }
        ENDCG
    }
}

This seems like it should work, since Alpha is an available property. But it doesn't. Here's a screenshot:

enter image description here