Files
YachtDice/Assets/Plugins/AllIn13DShader/Shaders/ShaderLibrary/AllIn13DShader_Features.hlsl
T
2026-02-23 22:01:07 +07:00

226 lines
8.4 KiB
HLSL

#ifndef ALLIN13DSHADER_FEATURES
#define ALLIN13DSHADER_FEATURES
#if defined(INSTANCING_ON) && !defined(PROCEDURAL_INSTANCING_ON)
#define ALLIN13D_GPU_INSTANCING
#endif
#if defined(UNITY_DOTS_INSTANCING_ENABLED) || defined(URP_PASS)
#define ALWAYS_DECLARE_PROPERTY
#endif
#if defined(ALLIN13D_GPU_INSTANCING)
#define BATCHING_BUFFER_START UNITY_INSTANCING_BUFFER_START(UnityPerMaterial)
#define BATCHING_BUFFER_END UNITY_INSTANCING_BUFFER_END(UnityPerMaterial)
#else
#if defined(URP_PASS) && !defined(PROCEDURAL_INSTANCING_ON)
#define BATCHING_BUFFER_START CBUFFER_START(UnityPerMaterial)
#define BATCHING_BUFFER_END CBUFFER_END
#else
#define BATCHING_BUFFER_START
#define BATCHING_BUFFER_END
#endif
#endif
//GetMeshRenderingLightLayer
#if defined(URP_PASS) && defined(ALLIN1_LIGHT_LAYERS_SUPPORT)
#define ALLIN1_USE_LIGHT_LAYERS
#endif
#ifdef URP_PASS
#define DECLARE_TEX2D(texName) \
TEXTURE2D(texName); \
SAMPLER(sampler_##texName);
#define SAMPLE_TEX2D(texName, uv) SAMPLE_TEXTURE2D(texName, sampler_##texName, uv)
#define SAMPLE_TEX2D_DERIVATIVES(texName, uv, ddx, ddy) SAMPLE_TEXTURE2D_GRAD(texName, sampler_##texName, uv, ddx, ddy)
#define SAMPLE_TEX2D_LOD(texName, uv) SAMPLE_TEXTURE2D_LOD(texName, sampler_##texName, uv.xy, 0)
#define SAMPLE_TEX2D_PROJ(texName, uv) SAMPLE_TEXTURE2D(texName, sampler##texName, uv.xy/uv.w)
#else
#define DECLARE_TEX2D(texName) sampler2D texName;
#define SAMPLE_TEX2D(texName, uv) tex2D(texName, uv)
#define SAMPLE_TEX2D_DERIVATIVES(texName, uv, ddx, ddy) tex2D(texName, uv, ddx, ddy)
#define SAMPLE_TEX2D_LOD(texName, uv) tex2Dlod(texName, uv)
#define SAMPLE_TEX2D_PROJ(texName, uv) tex2Dproj(texName, uv)
#endif
#define STOCHASTIC_SAMPLING_NO_DEF_DD(texName, uv, stochasticOffset, res) \
dx = ddx(uv);\
dy = ddy(uv);\
res = mul(SAMPLE_TEX2D_DERIVATIVES(texName, uv + hash2D2D(stochasticOffset[0].xy), dx, dy), stochasticOffset[3].x) + \
mul(SAMPLE_TEX2D_DERIVATIVES(texName, uv + hash2D2D(stochasticOffset[1].xy), dx, dy), stochasticOffset[3].y) + \
mul(SAMPLE_TEX2D_DERIVATIVES(texName, uv + hash2D2D(stochasticOffset[2].xy), dx, dy), stochasticOffset[3].z);
#define STOCHASTIC_SAMPLING(texName, uv, stochasticOffset, res) \
float2 dx = 0;\
float2 dy = 0;\
STOCHASTIC_SAMPLING_NO_DEF_DD(texName, uv, stochasticOffset, res)
#define STOCHASTIC_SAMPLING_COMPLETE_NO_DEF_DD(texName, uv, stochasticOffsetName, res) \
stochasticOffset = getStochasticOffsets(uv, ACCESS_PROP_FLOAT(_StochasticScale), ACCESS_PROP_FLOAT(_StochasticSkew));\
STOCHASTIC_SAMPLING_NO_DEF_DD(texName, uv, stochasticOffsetName, res)
#define STOCHASTIC_SAMPLING_COMPLETE(texName, uv, stochasticOffset, res) \
stochasticOffset = getStochasticOffsets(uv, ACCESS_PROP_FLOAT(_StochasticScale), ACCESS_PROP_FLOAT(_StochasticSkew));\
STOCHASTIC_SAMPLING(texName, uv, stochasticOffsetName, res)
#if defined(PROCEDURAL_INSTANCING_ON)
#define DECLARE_PROPERTY_FLOAT(name) float name;
#define DECLARE_PROPERTY_FLOAT2(name) float2 name;
#define DECLARE_PROPERTY_FLOAT3(name) float3 name;
#define DECLARE_PROPERTY_FLOAT4(name) float4 name;
#else
#if (defined(INSTANCING_ON) || defined(PROCEDURAL_INSTANCING_ON)) && !defined(URP_PASS)
#define DECLARE_PROPERTY_FLOAT(name) UNITY_DEFINE_INSTANCED_PROP(float, name)
#define DECLARE_PROPERTY_FLOAT2(name) UNITY_DEFINE_INSTANCED_PROP(float2, name)
#define DECLARE_PROPERTY_FLOAT3(name) UNITY_DEFINE_INSTANCED_PROP(float3, name)
#define DECLARE_PROPERTY_FLOAT4(name) UNITY_DEFINE_INSTANCED_PROP(float4, name)
#else
#define DECLARE_PROPERTY_FLOAT(name) float name;
#define DECLARE_PROPERTY_FLOAT2(name) float2 name;
#define DECLARE_PROPERTY_FLOAT3(name) float3 name;
#define DECLARE_PROPERTY_FLOAT4(name) float4 name;
#endif
#endif
//------ Shader features --------
#pragma shader_feature_local_fragment _ALLIN13D_SURFACE_TRANSPARENT
#if !defined(ALLIN1_SHADER_VARIANT)
#include_with_pragmas "../ShaderLibrary/AllIn13DShader_ShaderFeatures.hlsl"
#endif
//------------------------------
#if defined(_SPECULARMODEL_CLASSIC) || defined(_SPECULARMODEL_TOON) || defined(_SPECULARMODEL_ANISOTROPIC) || defined(_SPECULARMODEL_ANISOTROPICTOON)
#define SPECULAR_ON
#else
#if !defined(_SPECULARMODEL_NONE)
#define _SPECULARMODEL_NONE
#endif
#endif
#if defined(_LIGHTMODEL_CLASSIC) || defined(_LIGHTMODEL_TOON) || defined(_LIGHTMODEL_TOONRAMP) || defined(_LIGHTMODEL_HALFLAMBERT) || defined(_LIGHTMODEL_FAKEGI) || defined(_LIGHTMODEL_FASTLIGHTING)
#define LIGHT_ON
#else
#if !defined(_LIGHTMODEL_NONE)
#define _LIGHTMODEL_NONE
#endif
#endif
#if (!defined(FORWARD_ADD_PASS) && defined(BIRP_PASS)) || defined(URP_PASS)
#define ADDITIONAL_LIGHT_LOOP
#endif
#if defined(URP_PASS)
#if defined(ALLIN1_FOG_SUPPORT) && defined(_FOG_ON)
#define FOG_ENABLED
#endif
#elif defined(BIRP_PASS)
#if defined(_FOG_ON)
#define FOG_ENABLED
#endif
#endif
//#pragma shader_feature_local _REFLECTIONS_NONE _REFLECTIONS_CLASSIC _REFLECTIONS_TOON
#if defined(_REFLECTIONS_CLASSIC) || defined(_REFLECTIONS_TOON)
#define REFLECTIONS_ON
#else
#if !defined(_REFLECTIONS_NONE)
#define _REFLECTIONS_NONE
#endif
#endif
#if !defined(_OUTLINETYPE_NONE)
#define OUTLINE_ON
#endif
#if defined(_INTERSECTION_GLOW_ON) || defined(_SCREEN_SPACE_UV_ON) || defined(_INTERSECTION_FADE_ON) || defined(_DEPTH_COLORING_ON) || defined(_DITHER_ON)
#define REQUIRE_SCENE_DEPTH
#endif
#if defined(REQUIRE_SCENE_DEPTH) || defined(LOD_FADE_CROSSFADE)
#define REQUIRE_SCREEN_POS
#endif
#if defined(_SCREEN_SPACE_UV_ON) || defined(REQUIRE_SCENE_DEPTH) || defined(_FADE_BY_CAM_DISTANCE_ON)
#define REQUIRE_CAM_DISTANCE
#endif
#if defined(_SPECULARMODEL_ANISOTROPIC) || defined(_SPECULARMODEL_ANISOTROPICTOON) || defined(_NORMAL_MAP_ON)
#define REQUIRE_TANGENT_WS
#endif
#if defined(URP_PASS)
#if defined(LIGHTMAP_ON) && defined(LIGHTMAP_SHADOW_MIXING)
#define SUBTRACTIVE_LIGHTING
#endif
#else
#if defined(LIGHTMAP_ON) && defined(SHADOWS_SCREEN) && defined(LIGHTMAP_SHADOW_MIXING) && !defined(SHADOWS_SHADOWMASK)
#define SUBTRACTIVE_LIGHTING
#endif
#endif
//Dependencies
#if !defined(LIGHT_ON)
#undef REFLECTIONS_ON
#undef _NORMAL_MAP_ON
#undef SPECULAR_ON
#endif
#include "../ShaderLibrary/AllIn13DShader_GlobalPropertiesAndTexturesDeclaration.hlsl"
//-------- Properties Buffer -----------
BATCHING_BUFFER_START
#include "../ShaderLibrary/AllIn13DShader_BufferPropertiesDeclaration.hlsl"
BATCHING_BUFFER_END
#ifdef UNITY_DOTS_INSTANCING_ENABLED
#undef DECLARE_PROPERTY_FLOAT
#undef DECLARE_PROPERTY_FLOAT2
#undef DECLARE_PROPERTY_FLOAT3
#undef DECLARE_PROPERTY_FLOAT4
#undef ALLIN13DSHADER_BUFFERPROPERTIESDECLARATION
#define DECLARE_PROPERTY_FLOAT(name) UNITY_DOTS_INSTANCED_PROP_OVERRIDE_SUPPORTED(float, name)
#define DECLARE_PROPERTY_FLOAT2(name) UNITY_DOTS_INSTANCED_PROP_OVERRIDE_SUPPORTED(float2, name)
#define DECLARE_PROPERTY_FLOAT3(name) UNITY_DOTS_INSTANCED_PROP_OVERRIDE_SUPPORTED(float3, name)
#define DECLARE_PROPERTY_FLOAT4(name) UNITY_DOTS_INSTANCED_PROP_OVERRIDE_SUPPORTED(float4, name)
UNITY_DOTS_INSTANCING_START(MaterialPropertyMetadata)
#include "../ShaderLibrary/AllIn13DShader_BufferPropertiesDeclaration.hlsl"
UNITY_DOTS_INSTANCING_END(MaterialPropertyMetadata)
#endif
//----------------------------------
#if defined(UNITY_DOTS_INSTANCING_ENABLED)
#define ACCESS_PROP_FLOAT(name) UNITY_ACCESS_DOTS_INSTANCED_PROP_WITH_DEFAULT(float, name)
#define ACCESS_PROP_FLOAT2(name) UNITY_ACCESS_DOTS_INSTANCED_PROP_WITH_DEFAULT(float2, name)
#define ACCESS_PROP_FLOAT3(name) UNITY_ACCESS_DOTS_INSTANCED_PROP_WITH_DEFAULT(float3, name)
#define ACCESS_PROP_FLOAT4(name) UNITY_ACCESS_DOTS_INSTANCED_PROP_WITH_DEFAULT(float4, name)
#define ACCESS_PROP_TILING_AND_OFFSET(name) UNITY_ACCESS_DOTS_INSTANCED_PROP_WITH_CUSTOM_DEFAULT(float4, name, float4(1, 1, 0, 0))
#elif defined(ALLIN13D_GPU_INSTANCING)
#define ACCESS_PROP_FLOAT(name) UNITY_ACCESS_INSTANCED_PROP(UnityPerMaterial, name)
#define ACCESS_PROP_FLOAT2(name) UNITY_ACCESS_INSTANCED_PROP(UnityPerMaterial, name)
#define ACCESS_PROP_FLOAT3(name) UNITY_ACCESS_INSTANCED_PROP(UnityPerMaterial, name)
#define ACCESS_PROP_FLOAT4(name) UNITY_ACCESS_INSTANCED_PROP(UnityPerMaterial, name)
#define ACCESS_PROP_TILING_AND_OFFSET(name) UNITY_ACCESS_INSTANCED_PROP(UnityPerMaterial, name)
#else
#define ACCESS_PROP_FLOAT(name) name
#define ACCESS_PROP_FLOAT2(name) name
#define ACCESS_PROP_FLOAT3(name) name
#define ACCESS_PROP_FLOAT4(name) name
#define ACCESS_PROP_TILING_AND_OFFSET(name) name
#endif
#endif