-
-
Save jminor/6a14271368e57b84c136d94906ae6603 to your computer and use it in GitHub Desktop.
Shader "Standard-DoubleSided" | |
{ | |
Properties | |
{ | |
_Color("Color", Color) = (1,1,1,1) | |
_MainTex("Albedo", 2D) = "white" {} | |
_Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5 | |
_Glossiness("Smoothness", Range(0.0, 1.0)) = 0.5 | |
[Gamma] _Metallic("Metallic", Range(0.0, 1.0)) = 0.0 | |
_MetallicGlossMap("Metallic", 2D) = "white" {} | |
_BumpScale("Scale", Float) = 1.0 | |
_BumpMap("Normal Map", 2D) = "bump" {} | |
_Parallax ("Height Scale", Range (0.005, 0.08)) = 0.02 | |
_ParallaxMap ("Height Map", 2D) = "black" {} | |
_OcclusionStrength("Strength", Range(0.0, 1.0)) = 1.0 | |
_OcclusionMap("Occlusion", 2D) = "white" {} | |
_EmissionColor("Color", Color) = (0,0,0) | |
_EmissionMap("Emission", 2D) = "white" {} | |
_DetailMask("Detail Mask", 2D) = "white" {} | |
_DetailAlbedoMap("Detail Albedo x2", 2D) = "grey" {} | |
_DetailNormalMapScale("Scale", Float) = 1.0 | |
_DetailNormalMap("Normal Map", 2D) = "bump" {} | |
[Enum(UV0,0,UV1,1)] _UVSec ("UV Set for secondary textures", Float) = 0 | |
// Blending state | |
[HideInInspector] _Mode ("__mode", Float) = 0.0 | |
[HideInInspector] _SrcBlend ("__src", Float) = 1.0 | |
[HideInInspector] _DstBlend ("__dst", Float) = 0.0 | |
[HideInInspector] _ZWrite ("__zw", Float) = 1.0 | |
} | |
CGINCLUDE | |
#define UNITY_SETUP_BRDF_INPUT MetallicSetup | |
ENDCG | |
SubShader | |
{ | |
Tags { "RenderType"="Opaque" "PerformanceChecks"="False" } | |
LOD 300 | |
// ------------------------------------------------------------------ | |
// Base forward pass (directional light, emission, lightmaps, ...) | |
Pass | |
{ | |
Name "FORWARD" | |
Tags { "LightMode" = "ForwardBase" } | |
// turn off backface culling to make this shader double-sided | |
Cull Off | |
Blend [_SrcBlend] [_DstBlend] | |
ZWrite [_ZWrite] | |
CGPROGRAM | |
#pragma target 3.0 | |
// TEMPORARY: GLES2.0 temporarily disabled to prevent errors spam on devices without textureCubeLodEXT | |
#pragma exclude_renderers gles | |
// ------------------------------------- | |
#pragma shader_feature _NORMALMAP | |
#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON | |
#pragma shader_feature _EMISSION | |
#pragma shader_feature _METALLICGLOSSMAP | |
#pragma shader_feature ___ _DETAIL_MULX2 | |
#pragma shader_feature _PARALLAXMAP | |
#pragma multi_compile_fwdbase | |
#pragma multi_compile_fog | |
#pragma vertex vertBase | |
#pragma fragment fragBase | |
#include "UnityStandardCoreForward.cginc" | |
ENDCG | |
} | |
// ------------------------------------------------------------------ | |
// Additive forward pass (one light per pass) | |
Pass | |
{ | |
Name "FORWARD_DELTA" | |
Tags { "LightMode" = "ForwardAdd" } | |
Blend [_SrcBlend] One | |
Fog { Color (0,0,0,0) } // in additive pass fog should be black | |
ZWrite Off | |
ZTest LEqual | |
// turn off backface culling to make this shader double-sided | |
Cull Off | |
CGPROGRAM | |
#pragma target 3.0 | |
// GLES2.0 temporarily disabled to prevent errors spam on devices without textureCubeLodEXT | |
#pragma exclude_renderers gles | |
// ------------------------------------- | |
#pragma shader_feature _NORMALMAP | |
#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON | |
#pragma shader_feature _METALLICGLOSSMAP | |
#pragma shader_feature ___ _DETAIL_MULX2 | |
#pragma shader_feature _PARALLAXMAP | |
#pragma multi_compile_fwdadd_fullshadows | |
#pragma multi_compile_fog | |
#pragma vertex vertAdd | |
#pragma fragment fragAdd | |
#include "UnityStandardCoreForward.cginc" | |
ENDCG | |
} | |
// ------------------------------------------------------------------ | |
// Shadow rendering pass | |
Pass { | |
Name "ShadowCaster" | |
Tags { "LightMode" = "ShadowCaster" } | |
ZWrite On ZTest LEqual | |
CGPROGRAM | |
#pragma target 3.0 | |
// TEMPORARY: GLES2.0 temporarily disabled to prevent errors spam on devices without textureCubeLodEXT | |
#pragma exclude_renderers gles | |
// ------------------------------------- | |
#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON | |
#pragma multi_compile_shadowcaster | |
#pragma vertex vertShadowCaster | |
#pragma fragment fragShadowCaster | |
#include "UnityStandardShadow.cginc" | |
ENDCG | |
} | |
// ------------------------------------------------------------------ | |
// Deferred pass | |
Pass | |
{ | |
Name "DEFERRED" | |
Tags { "LightMode" = "Deferred" } | |
// turn off backface culling to make this shader double-sided | |
Cull Off | |
CGPROGRAM | |
#pragma target 3.0 | |
// TEMPORARY: GLES2.0 temporarily disabled to prevent errors spam on devices without textureCubeLodEXT | |
#pragma exclude_renderers nomrt gles | |
// ------------------------------------- | |
#pragma shader_feature _NORMALMAP | |
#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON | |
#pragma shader_feature _EMISSION | |
#pragma shader_feature _METALLICGLOSSMAP | |
#pragma shader_feature ___ _DETAIL_MULX2 | |
#pragma shader_feature _PARALLAXMAP | |
#pragma multi_compile ___ UNITY_HDR_ON | |
#pragma multi_compile LIGHTMAP_OFF LIGHTMAP_ON | |
#pragma multi_compile DIRLIGHTMAP_OFF DIRLIGHTMAP_COMBINED DIRLIGHTMAP_SEPARATE | |
#pragma multi_compile DYNAMICLIGHTMAP_OFF DYNAMICLIGHTMAP_ON | |
#pragma vertex vertDeferred | |
#pragma fragment fragDeferred | |
#include "UnityStandardCore.cginc" | |
ENDCG | |
} | |
// ------------------------------------------------------------------ | |
// Extracts information for lightmapping, GI (emission, albedo, ...) | |
// This pass it not used during regular rendering. | |
Pass | |
{ | |
Name "META" | |
Tags { "LightMode"="Meta" } | |
Cull Off | |
CGPROGRAM | |
#pragma vertex vert_meta | |
#pragma fragment frag_meta | |
#pragma shader_feature _EMISSION | |
#pragma shader_feature _METALLICGLOSSMAP | |
#pragma shader_feature ___ _DETAIL_MULX2 | |
#include "UnityStandardMeta.cginc" | |
ENDCG | |
} | |
} | |
SubShader | |
{ | |
Tags { "RenderType"="Opaque" "PerformanceChecks"="False" } | |
LOD 150 | |
// ------------------------------------------------------------------ | |
// Base forward pass (directional light, emission, lightmaps, ...) | |
Pass | |
{ | |
Name "FORWARD" | |
Tags { "LightMode" = "ForwardBase" } | |
// turn off backface culling to make this shader double-sided | |
Cull Off | |
Blend [_SrcBlend] [_DstBlend] | |
ZWrite [_ZWrite] | |
CGPROGRAM | |
#pragma target 2.0 | |
#pragma shader_feature _NORMALMAP | |
#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON | |
#pragma shader_feature _EMISSION | |
#pragma shader_feature _METALLICGLOSSMAP | |
#pragma shader_feature ___ _DETAIL_MULX2 | |
// SM2.0: NOT SUPPORTED shader_feature _PARALLAXMAP | |
#pragma skip_variants SHADOWS_SOFT DIRLIGHTMAP_COMBINED DIRLIGHTMAP_SEPARATE | |
#pragma multi_compile_fwdbase | |
#pragma multi_compile_fog | |
#pragma vertex vertBase | |
#pragma fragment fragBase | |
#include "UnityStandardCoreForward.cginc" | |
ENDCG | |
} | |
// ------------------------------------------------------------------ | |
// Additive forward pass (one light per pass) | |
Pass | |
{ | |
Name "FORWARD_DELTA" | |
Tags { "LightMode" = "ForwardAdd" } | |
Blend [_SrcBlend] One | |
Fog { Color (0,0,0,0) } // in additive pass fog should be black | |
ZWrite Off | |
ZTest LEqual | |
// turn off backface culling to make this shader double-sided | |
Cull Off | |
CGPROGRAM | |
#pragma target 2.0 | |
#pragma shader_feature _NORMALMAP | |
#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON | |
#pragma shader_feature _METALLICGLOSSMAP | |
#pragma shader_feature ___ _DETAIL_MULX2 | |
// SM2.0: NOT SUPPORTED shader_feature _PARALLAXMAP | |
#pragma skip_variants SHADOWS_SOFT | |
#pragma multi_compile_fwdadd_fullshadows | |
#pragma multi_compile_fog | |
#pragma vertex vertAdd | |
#pragma fragment fragAdd | |
#include "UnityStandardCoreForward.cginc" | |
ENDCG | |
} | |
// ------------------------------------------------------------------ | |
// Shadow rendering pass | |
Pass { | |
Name "ShadowCaster" | |
Tags { "LightMode" = "ShadowCaster" } | |
ZWrite On ZTest LEqual | |
CGPROGRAM | |
#pragma target 2.0 | |
#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON | |
#pragma skip_variants SHADOWS_SOFT | |
#pragma multi_compile_shadowcaster | |
#pragma vertex vertShadowCaster | |
#pragma fragment fragShadowCaster | |
#include "UnityStandardShadow.cginc" | |
ENDCG | |
} | |
// ------------------------------------------------------------------ | |
// Extracts information for lightmapping, GI (emission, albedo, ...) | |
// This pass it not used during regular rendering. | |
Pass | |
{ | |
Name "META" | |
Tags { "LightMode"="Meta" } | |
Cull Off | |
CGPROGRAM | |
#pragma vertex vert_meta | |
#pragma fragment frag_meta | |
#pragma shader_feature _EMISSION | |
#pragma shader_feature _METALLICGLOSSMAP | |
#pragma shader_feature ___ _DETAIL_MULX2 | |
#include "UnityStandardMeta.cginc" | |
ENDCG | |
} | |
} | |
FallBack "VertexLit" | |
CustomEditor "StandardShaderGUI" | |
} |
thanks
thanks
thanks
Thanks! (But I get some strange distortions in Unity 2019.3.14f1 in VR single pass)
Please note: this shader was current in 2017, so I would expect there is a newer one out there for more recent versions of Unity, HDRP, etc.
That's understandable, and thanks again for sharing the shader!
thanks
Thanks
Hey! i've been using this shader in 2019 and i decided for various reasons to update to 2020.2. Now this shader doesnt behave as it should and i can see through it! Can you please help me with making it single pass instanced? or whatever the problem is i am kind of dumb. I have read here this:
https://gyazo.com/d200a07491bd08347f1e0ec7d8f26853
And this is how it looks now in 2020:
https://gyazo.com/c5ff7c43bfbc4b123992a4c41986ed08
Help me pls! I also have a lot of double sided materials and dont want to switch to another shader, if i could edit inside this one's script it would be perfect
Thank you so very much!
Hey, I updated the shader to work on 2021.3 if someone is interested: https://gist.github.com/Sov3rain/ca82d7355568d37eed93f87332233491
Thanks