how to add transparency to a cross-section-shader?

Hi Guys,

I hope you can help me out. I need a cross-section-shader with the possibility
to change the Transparency via Slider.
(Like the “Glossiness” or “Metallic” - option; already implemented)

I found a Shader, which works very fine for me. But i can not change the transparency with it.
I’ve tried it for a few weeks now, but i always failed in manipulating the current shader-script.
I’m not made for writing shaders :cry:

But i guess it’s not that hard for somebody who is good at writing them… so maybe somebody can help
me out of my misery. :frowning:

Here’s the code:

    Shader "CrossSection/OnePlaneBSP" {
       Properties{
           _Color("Color", Color) = (1,1,1,1)
           _CrossColor("Cross Section Color", Color) = (1,1,1,1)
           _MainTex("Albedo (RGB)", 2D) = "white" {}
           _Glossiness("Smoothness", Range(0,1)) = 0.5
           _Metallic("Metallic", Range(0,1)) = 0.0
           _PlaneNormal("PlaneNormal",Vector) = (0,1,0,0)
           _PlanePosition("PlanePosition",Vector) = (0,0,0,1)
           _StencilMask("Stencil Mask", Range(0, 255)) = 255
       }
       SubShader {
           Tags { "RenderType"="Opaque" }
           //LOD 200
           Stencil
           {
               Ref [_StencilMask]
               CompBack Always
               PassBack Replace
     
               CompFront Always
               PassFront Zero
           }
           Cull Back
               CGPROGRAM
               // Physically based Standard lighting model, and enable shadows on all light types
    #pragma surface surf Standard fullforwardshadows
     
               // Use shader model 3.0 target, to get nicer looking lighting
    #pragma target 3.0
     
               sampler2D _MainTex;
     
           struct Input {
               float2 uv_MainTex;
     
               float3 worldPos;
           };
     
           half _Glossiness;
           half _Metallic;
           fixed4 _Color;
           fixed4 _CrossColor;
           fixed3 _PlaneNormal;
           fixed3 _PlanePosition;
           bool checkVisability(fixed3 worldPos)
           {
               float dotProd1 = dot(worldPos - _PlanePosition, _PlaneNormal);
               return dotProd1 > 0  ;
           }
           void surf(Input IN, inout SurfaceOutputStandard o) {
               if (checkVisability(IN.worldPos))discard;
               fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
               o.Albedo = c.rgb;
               // Metallic and smoothness come from slider variables
               o.Metallic = _Metallic;
               o.Smoothness = _Glossiness;
               o.Alpha = c.a;
           }
           ENDCG
         
               Cull Front
               CGPROGRAM
    #pragma surface surf NoLighting  noambient
     
           struct Input {
               half2 uv_MainTex;
               float3 worldPos;
     
           };
           sampler2D _MainTex;
           fixed4 _Color;
           fixed4 _CrossColor;
           fixed3 _PlaneNormal;
           fixed3 _PlanePosition;
           bool checkVisability(fixed3 worldPos)
           {
               float dotProd1 = dot(worldPos - _PlanePosition, _PlaneNormal);
               return dotProd1 >0 ;
           }
           fixed4 LightingNoLighting(SurfaceOutput s, fixed3 lightDir, fixed atten)
           {
               fixed4 c;
               c.rgb = s.Albedo;
               c.a = s.Alpha;
               return c;
           }
     
           void surf(Input IN, inout SurfaceOutput o)
           {
               if (checkVisability(IN.worldPos))discard;
               o.Albedo = _CrossColor;
     
           }
               ENDCG
         
       }
       //FallBack "Diffuse"
    }

you can also find this asset for free in the asset store if you want to have a closer look at it:

I just want to change the transparency (opacity) of the object, too. :confused:

Thank you guys!

I actually found this post trying to do the same thing with the same shader and eventually found out, so in case you still need this then here’s how I did it.

These are the lines that I changed/added so you can tell what’s different

_Transparency("Transparency", Range(0.0,1)) = 0.5
Tags{ "Queue" = "Transparent" "RenderType" = "Transparent" }
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha
#pragma surface surf Standard fullforwardshadows alpha
float _Transparency;
o.Alpha = _Transparency;

And heres the whole shader as I’d recomend using it (not using the plain colored inside as it acts badly with the transparency)

Shader "CrossSection/OnePlaneBSPTransparent" {
        Properties{
            _Color("Color", Color) = (1,1,1,1)
            _CrossColor("Cross Section Color", Color) = (1,1,1,1)
            _MainTex("Albedo (RGB)", 2D) = "white" {}
            _Glossiness("Smoothness", Range(0,1)) = 0.5
            _Metallic("Metallic", Range(0,1)) = 0.0
			_Transparency("Transparency", Range(0.0,1)) = 0.5
            _PlaneNormal("PlaneNormal",Vector) = (0,1,0,0)
            _PlanePosition("PlanePosition",Vector) = (0,0,0,1)
            _StencilMask("Stencil Mask", Range(0, 255)) = 255
        }
        SubShader {
            Tags{ "Queue" = "Transparent" "RenderType" = "Transparent" }
            //LOD 200
			ZWrite Off
        	Blend SrcAlpha OneMinusSrcAlpha

            Stencil
            {
                Ref [_StencilMask]
                CompBack Always
                PassBack Replace
      
                CompFront Always
                PassFront Zero
            }
            Cull Back
                CGPROGRAM
                // Physically based Standard lighting model, and enable shadows on all light types
     #pragma surface surf Standard fullforwardshadows alpha
      
                // Use shader model 3.0 target, to get nicer looking lighting
     #pragma target 3.0
      
                sampler2D _MainTex;
      
            struct Input {
                float2 uv_MainTex;
      
                float3 worldPos;
            };
      
            half _Glossiness;
            half _Metallic;
            fixed4 _Color;
            fixed4 _CrossColor;
            fixed3 _PlaneNormal;
            fixed3 _PlanePosition;
			float _Transparency;
            bool checkVisability(fixed3 worldPos)
            {
                float dotProd1 = dot(worldPos - _PlanePosition, _PlaneNormal);
                return dotProd1 > 0  ;
            }
            void surf(Input IN, inout SurfaceOutputStandard o) {
                if (checkVisability(IN.worldPos))discard;
                fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
                o.Albedo = c.rgb;
                // Metallic and smoothness come from slider variables
                o.Metallic = _Metallic;
                o.Smoothness = _Glossiness;
                o.Alpha = _Transparency;
            }
            ENDCG

			Cull Front
                CGPROGRAM
                // Physically based Standard lighting model, and enable shadows on all light types
     #pragma surface surf Standard fullforwardshadows alpha
      
                // Use shader model 3.0 target, to get nicer looking lighting
     #pragma target 3.0
      
                sampler2D _MainTex;
      
            struct Input {
                float2 uv_MainTex;
      
                float3 worldPos;
            };
      
            half _Glossiness;
            half _Metallic;
            fixed4 _Color;
            fixed4 _CrossColor;
            fixed3 _PlaneNormal;
            fixed3 _PlanePosition;
			float _Transparency;
            bool checkVisability(fixed3 worldPos)
            {
                float dotProd1 = dot(worldPos - _PlanePosition, _PlaneNormal);
                return dotProd1 > 0  ;
            }
            void surf(Input IN, inout SurfaceOutputStandard o) {
                if (checkVisability(IN.worldPos))discard;
                fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
                o.Albedo = c.rgb;
                // Metallic and smoothness come from slider variables
                o.Metallic = _Metallic;
                o.Smoothness = _Glossiness;
                o.Alpha = _Transparency;
            }
            ENDCG

        }
        //FallBack "Diffuse"
     }

I made the inside faces use the same code as the outside faces, but if you don’t want this you can just remove the lines from “Cull Front” (line 67) to “ENDCG” (line 104).

Hope this ends your misery if it wasn’t already over :slight_smile:

Works perfectly!
Thank you very much!
That’s exactly what I needed!