- Home /
How can I path multiple shader? I would like to combine transparent shader with depth.
I have two shader one is Transparent from other post. And I have depth shader using frag. Is it possible to pass two shader with frag and surf? Also, is there any possiblity that can combine? Either was is fine. Depth shader:
Shader "ShaderDepth" {
SubShader
{
Tags{ "RenderType" = "Opaque" }
Fog { Mode Off}
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _CameraDepthTexture;
struct v2f
{
float4 pos : SV_POSITION;
float4 scrPos : TEXCOORD1; //Screen position of pos
};
v2f vert(appdata_base v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.scrPos = ComputeScreenPos(o.pos);
//for some reason, the y position of the depth texture comes out inverted
//o.scrPos.y = 1 - o.scrPos.y;
return o;
}
//Fragment Shader
float4 frag(v2f i) : COLOR
{
//Get depth
float d = Linear01Depth(tex2Dproj(_CameraDepthTexture,
UNITY_PROJ_COORD(i.scrPos)).r);
float4 enc = float4(0, 0, 0, 1) * d;
return enc;
}
ENDCG
}
}
FallBack "VertexLit"
}
Transparent shader:
Shader "Custom/cs_transparent" {
Properties
{
_Color ("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
}
SubShader
{
Tags {"Queue" = "Transparent" "RenderType"="Transparent" }
LOD 200
CGPROGRAM
#pragma surface surf Standard fullforwardshadows alpha:fade
#pragma target 3.0
sampler2D _MainTex;
struct Input {
float2 uv_MainTex;
};
half _Glossiness;
half _Metallic;
fixed4 _Color;
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;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Standard"
}
Answer by Namey5 · May 24, 2017 at 11:19 AM
Shader "Custom/cs_transparent" {
Properties
{
_Color ("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
}
SubShader
{
Tags {"Queue" = "Transparent" "RenderType"="Transparent" }
LOD 200
CGPROGRAM
#pragma surface surf Standard fullforwardshadows alpha:fade
#pragma target 3.0
sampler2D _MainTex;
sampler2D_float _CameraDepthTexture;
struct Input {
float2 uv_MainTex;
float4 screenPos;
};
half _Glossiness;
half _Metallic;
fixed4 _Color;
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;
o.Emission = Linear01Depth (tex2D (_CameraDepthTexture, IN.screenPos.xy / IN.screenPos.w).r);
o.Alpha = c.a;
}
ENDCG
}
FallBack "Standard"
}
Thank you very much. However, I would not get the out put what I want. So I want to save depth so I encode float depth to fixed4 rgba. So I need to use frag shader in the end. Is it possible to use frag shade in the end?
Also depth information is floating point. However, o.Emission is half3 so it is not able to represent depth fully. Do you know any other way around?
Your answer
![](https://koobas.hobune.stream/wayback/20220612122328im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Transparency / depth problem 0 Answers
How to use the Unity 5 Transparent Shader? 1 Answer
sampler2d object has no methods 1 Answer
Problem with transparent shader 0 Answers
Objects visible through terrain 2 Answers