225 lines
7.4 KiB
Text
225 lines
7.4 KiB
Text
|
Shader "SLZ/Mod2x"
|
||
|
{
|
||
|
Properties
|
||
|
{
|
||
|
[HideInInspector] _AlphaCutoff("Alpha Cutoff ", Range(0, 1)) = 0.5
|
||
|
[HideInInspector] _EmissionColor("Emission Color", Color) = (1,1,1,1)
|
||
|
_MainTex("MainTex", 2D) = "gray" {}
|
||
|
[HDR]_Color("Color", Color) = (1,1,1,0)
|
||
|
_OffsetUnits("OffsetUnits", Int) = -2
|
||
|
_OffsetFactor("OffsetFactor", Int) = -2
|
||
|
_Multiplier("Multiplier", Float) = 1
|
||
|
[Toggle(_ALPHA_ON)] _alpha("alpha", Float) = 0
|
||
|
[Toggle(_VERTEXCOLORS_ON)] _VertexColors("VertexColors", Float) = 1
|
||
|
// [HideInInspector] _texcoord( "", 2D ) = "white" {}
|
||
|
|
||
|
// [HideInInspector]_QueueOffset("_QueueOffset", Float) = 0
|
||
|
// [HideInInspector]_QueueControl("_QueueControl", Float) = -1
|
||
|
// [HideInInspector][NoScaleOffset]unity_Lightmaps("unity_Lightmaps", 2DArray) = "" {}
|
||
|
// [HideInInspector][NoScaleOffset]unity_LightmapsInd("unity_LightmapsInd", 2DArray) = "" {}
|
||
|
// [HideInInspector][NoScaleOffset]unity_ShadowMasks("unity_ShadowMasks", 2DArray) = "" {}
|
||
|
}
|
||
|
|
||
|
SubShader
|
||
|
{
|
||
|
LOD 0
|
||
|
|
||
|
Tags { "RenderPipeline"="UniversalPipeline" "RenderType"="Transparent" "Queue"="Transparent-499" "IgnoreProjector" = "True"}
|
||
|
|
||
|
Cull Back
|
||
|
AlphaToMask Off
|
||
|
|
||
|
HLSLINCLUDE
|
||
|
#pragma target 5.0
|
||
|
#include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/PlatformCompiler.hlsl"
|
||
|
ENDHLSL
|
||
|
|
||
|
Pass
|
||
|
{
|
||
|
|
||
|
Name "Forward"
|
||
|
Tags { "LightMode"="UniversalForward" }
|
||
|
|
||
|
Blend DstColor SrcColor
|
||
|
ZWrite Off
|
||
|
ZTest LEqual
|
||
|
Offset [_OffsetFactor] , [_OffsetUnits]
|
||
|
ColorMask RGBA
|
||
|
|
||
|
HLSLPROGRAM
|
||
|
|
||
|
#define _RECEIVE_SHADOWS_OFF 1
|
||
|
#pragma multi_compile_instancing
|
||
|
#define ASE_SRP_VERSION 999999
|
||
|
#define SHADERPASS SHADERPASS_UNLIT
|
||
|
|
||
|
#pragma vertex vert
|
||
|
#pragma fragment frag
|
||
|
|
||
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
|
||
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl"
|
||
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
||
|
//#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
|
||
|
//#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl"
|
||
|
//#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl"
|
||
|
//#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DBuffer.hlsl"
|
||
|
//#include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl"
|
||
|
//#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Debug/Debugging3D.hlsl"
|
||
|
//#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl"
|
||
|
//#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SurfaceData.hlsl"
|
||
|
|
||
|
|
||
|
#define ASE_NEEDS_FRAG_COLOR
|
||
|
#define ASE_NEEDS_FRAG_WORLD_POSITION
|
||
|
#pragma shader_feature _ALPHA_ON
|
||
|
#pragma shader_feature _VERTEXCOLORS_ON
|
||
|
#pragma multi_compile _ _VOLUMETRICS_ENABLED
|
||
|
#pragma multi_compile_fog
|
||
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareOpaqueTexture.hlsl"
|
||
|
|
||
|
|
||
|
struct VertexInput
|
||
|
{
|
||
|
float4 vertex : POSITION;
|
||
|
float3 ase_normal : NORMAL;
|
||
|
float4 ase_texcoord : TEXCOORD0;
|
||
|
float4 ase_color : COLOR;
|
||
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
};
|
||
|
|
||
|
struct VertexOutput
|
||
|
{
|
||
|
float4 clipPos : SV_POSITION;
|
||
|
float3 worldPos : TEXCOORD0;
|
||
|
float fogFactor : TEXCOORD2;
|
||
|
float4 ase_texcoord3 : TEXCOORD3;
|
||
|
float4 ase_color : COLOR;
|
||
|
float4 ase_texcoord4 : TEXCOORD4;
|
||
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
UNITY_VERTEX_OUTPUT_STEREO
|
||
|
};
|
||
|
|
||
|
CBUFFER_START(UnityPerMaterial)
|
||
|
float4 _MainTex_ST;
|
||
|
float4 _Color;
|
||
|
int _OffsetUnits;
|
||
|
int _OffsetFactor;
|
||
|
float _Multiplier;
|
||
|
CBUFFER_END
|
||
|
sampler2D _MainTex;
|
||
|
|
||
|
shared float _StaticLightMultiplier;
|
||
|
|
||
|
|
||
|
VertexOutput VertexFunction ( VertexInput v )
|
||
|
{
|
||
|
VertexOutput o = (VertexOutput)0;
|
||
|
UNITY_SETUP_INSTANCE_ID(v);
|
||
|
UNITY_TRANSFER_INSTANCE_ID(v, o);
|
||
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
|
||
|
|
||
|
float4 ase_clipPos = TransformObjectToHClip((v.vertex).xyz);
|
||
|
float4 screenPos = ComputeScreenPos(ase_clipPos);
|
||
|
o.ase_texcoord4 = screenPos;
|
||
|
o.ase_texcoord3.xy = v.ase_texcoord.xy;
|
||
|
o.ase_color = v.ase_color;
|
||
|
//setting value to unused interpolator channels and avoid initialization warnings
|
||
|
o.ase_texcoord3.zw = 0;
|
||
|
v.ase_normal = v.ase_normal;
|
||
|
|
||
|
float3 positionWS = TransformObjectToWorld( v.vertex.xyz );
|
||
|
float4 positionCS = TransformWorldToHClip( positionWS );
|
||
|
|
||
|
#if defined(ASE_NEEDS_FRAG_WORLD_POSITION)
|
||
|
o.worldPos = positionWS;
|
||
|
#endif
|
||
|
o.fogFactor = ComputeFogFactor( positionCS.z );
|
||
|
o.clipPos = positionCS;
|
||
|
return o;
|
||
|
}
|
||
|
|
||
|
VertexOutput vert ( VertexInput v )
|
||
|
{
|
||
|
return VertexFunction( v );
|
||
|
}
|
||
|
|
||
|
half3 Mod2xFog(half3 fragColor, half fogFactor)
|
||
|
{
|
||
|
#if defined(FOG_LINEAR) || defined(FOG_EXP) || defined(FOG_EXP2)
|
||
|
half fogIntensity = ComputeFogIntensity(fogFactor);
|
||
|
fragColor = lerp(0.5, fragColor, fogIntensity);
|
||
|
#endif
|
||
|
return fragColor;
|
||
|
}
|
||
|
|
||
|
half4 frag ( VertexOutput IN ) : SV_Target
|
||
|
{
|
||
|
UNITY_SETUP_INSTANCE_ID( IN );
|
||
|
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN );
|
||
|
#if defined(ASE_NEEDS_FRAG_WORLD_POSITION)
|
||
|
float3 WorldPosition = IN.worldPos;
|
||
|
#endif
|
||
|
float localMyCustomExpression1_g126 = ( 0.0 );
|
||
|
float2 uv_MainTex = IN.ase_texcoord3.xy * _MainTex_ST.xy + _MainTex_ST.zw;
|
||
|
float4 appendResult52 = (float4(1.0 , 1.0 , 1.0 , IN.ase_color.a));
|
||
|
#ifdef _VERTEXCOLORS_ON
|
||
|
float4 staticSwitch38 = IN.ase_color;
|
||
|
#else
|
||
|
float4 staticSwitch38 = appendResult52;
|
||
|
#endif
|
||
|
float4 temp_output_16_0 = ( tex2D( _MainTex, uv_MainTex ) * _Color * staticSwitch38 );
|
||
|
float4 temp_output_26_0 = ( ( ( temp_output_16_0 - .5 ) * _Multiplier ) + 0.5 );
|
||
|
#ifdef _ALPHA_ON
|
||
|
float4 lerpResult30 = lerp( .5 , temp_output_26_0 , (temp_output_16_0).a);
|
||
|
float4 staticSwitch28 = lerpResult30;
|
||
|
#else
|
||
|
float4 staticSwitch28 = temp_output_26_0;
|
||
|
#endif
|
||
|
float4 color1_g126 = staticSwitch28;
|
||
|
float localMyCustomExpression24_g126 = ( 0.0 );
|
||
|
float4 screenPos = IN.ase_texcoord4;
|
||
|
float4 ase_screenPosNorm = screenPos / screenPos.w;
|
||
|
ase_screenPosNorm.z = ( UNITY_NEAR_CLIP_VALUE >= 0 ) ? ase_screenPosNorm.z : ase_screenPosNorm.z * 0.5 + 0.5;
|
||
|
float2 uv24_g126 = (ase_screenPosNorm).xy;
|
||
|
|
||
|
float3 BakedAlbedo = 0;
|
||
|
float3 BakedEmission = 0;
|
||
|
float3 Color = color1_g126.xyz;
|
||
|
float Alpha = 1;
|
||
|
float AlphaClipThreshold = 0.5;
|
||
|
float AlphaClipThresholdShadow = 0.5;
|
||
|
|
||
|
#ifdef _ALPHATEST_ON
|
||
|
clip( Alpha - AlphaClipThreshold );
|
||
|
#endif
|
||
|
|
||
|
#if defined(_ALPHAPREMULTIPLY_ON)
|
||
|
Color *= Alpha;
|
||
|
#endif
|
||
|
|
||
|
#ifdef LOD_FADE_CROSSFADE
|
||
|
LODDitheringTransition( IN.clipPos.xyz, unity_LODFade.x );
|
||
|
#endif
|
||
|
|
||
|
Color.rgb = Mod2xFog( Color, IN.fogFactor );
|
||
|
|
||
|
#if defined(_VOLUMETRICS_ENABLED)
|
||
|
//works fine on the PC but not quest. Using a semi-plausible result otherwise.
|
||
|
#if !defined(SHADER_API_MOBILE)
|
||
|
half3 FroxelColor = GetVolumetricColor(WorldPosition).rgb;
|
||
|
Color.rgb = Color.rgb - 0.5* (2.0*Color.rgb - 1.0) * FroxelColor / SampleSceneColor(uv24_g126).rgb;
|
||
|
#else
|
||
|
half4 FroxelColor = GetVolumetricColor(IN.worldPos);
|
||
|
Color.rgb = Color.rgb + (saturate(FroxelColor.rgb)*(0.5-Color.rgb)); //rgb lerp //x + s(y-x)
|
||
|
Color.rgb = lerp(0.5, Color , saturate(FroxelColor.a*FroxelColor.a) );
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
return half4( Color, Alpha );
|
||
|
}
|
||
|
|
||
|
ENDHLSL
|
||
|
}
|
||
|
}
|
||
|
Fallback "Hidden/InternalErrorShader"
|
||
|
}
|