e362aaeb43
Add BefourStudios SciFi environment packs, Gabriel Aguiar VFX, and the ShaderCrew Toon Shader embedded packages, plus combat/enemy/wave/death gameplay systems and supporting vault docs/screenshots. Rename 11 vendor textures from uppercase .PNG/.HDR to lowercase so the case-sensitive Git LFS filters (*.png/*.hdr) match on case-sensitive filesystems (Linux CI, case-sensitive macOS), not just locally where core.ignorecase=true masks the gap. Each .meta moved with its asset so GUID references are preserved. All ~1000 binaries tracked via LFS. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
10696 lines
407 KiB
Plaintext
10696 lines
407 KiB
Plaintext
Shader "TheToonShader/URP/Unity6/TheToonShader"
|
|
{
|
|
Properties
|
|
{
|
|
[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) = "" {}
|
|
_TheToonShaderIdentifier("_TheToonShaderIdentifier", Float) = 1.0
|
|
_LightSource("Light Source", Float) = 0.0
|
|
|
|
_ShadingMode("Shading Mode", Float) = 0.0
|
|
_LightFunction("Light Function", Float) = 1.0
|
|
|
|
[MaterialToggle] _UseAlphaOnlyFromBaseMap("Use Alpha Only From BaseMap", Float) = 0.0
|
|
[MaterialToggle] _EnableToonShading("Enable Toon Shading", Float) = 1.0
|
|
|
|
_ShadingFunction("Shading Mode", Float) = 0.0
|
|
_GradientTex("Gradient Texture", 2D) = "white" {}
|
|
_GradientMode("Gradient Mode", Float) = 0.0
|
|
_GradientBlending("Gradient Blending", Float) = 2.0
|
|
_GradientBlendFactor ("Gradient Blend Factor", Range(0,1)) = 1.0
|
|
_NumberOfCells ("Number Of Cells", int) = 2
|
|
_CellTransitionSmoothness ("Cell Transition Smoothness", Range(0,1)) = 0.2
|
|
[MaterialToggle] _SumLightsBeforePosterization("Sum Lights Before Posterization", Float) = 1.0
|
|
[MaterialToggle] _ShadingUseLightColors("Use Light Colors", Float) = 1.0
|
|
[MaterialToggle] _EnableShadows("Enable Shadows", Float) = 1.0
|
|
_CoreShadowColor("Core Shadow Color", Color) = (0,0,0,1)
|
|
_TerminatorPosition("Terminator Position", Range(-1,1)) = 0.0
|
|
_TerminatorWidth("Terminator Width", Range(0,1)) = 0.0
|
|
_TerminatorSmoothness("Terminator Smoothness", Range(0,1)) = 0.0
|
|
_FormShadowColor("Shadow Color", Color) = (0,0,0,1)
|
|
[MaterialToggle] _ShadingAffectedByNormalMap("Shadows Affect By NormalMap", Float) = 1.0
|
|
|
|
[MaterialToggle] _EnableCastShadows("Enable Cast Shadows", Float) = 1.0
|
|
_CastShadowsStrength("Cast Shadows Strength", Range(0,1)) = 0.0
|
|
_CastShadowsSmoothness ("Cast Shadows Smoothness", Range(0,1)) = 0.9
|
|
_CastShadowColorMode("Cast Shadow Color Mode", Float) = 0.0
|
|
_CastShadowColor("Cast Shadow Color", Color) = (0,0,0,1)
|
|
[MaterialToggle] _EnableSpecular("Enable Specular", Float) = 0.0
|
|
_SpecularBlending("Specular Blending", Float) = 1.0
|
|
_SpecularColor("Specular Color", Color) = (1,1,0,1)
|
|
_SpecularSize("Specular Size", Range(0,1)) = 0.0
|
|
_SpecularSmoothness ("Specular Smoothness", Range(0,1)) = 0.0
|
|
_SpecularOpacity ("Specular Opacity", Range(0,1)) = 1.0
|
|
[MaterialToggle] _SpecularAffectedByNormalMap ("Specular Affected By NormalMap", Float) = 1.0
|
|
[MaterialToggle] _SpecularUseLightColors ("Use Light Colors", Float) = 1.0
|
|
[MaterialToggle] _EnableRim("Enable Rim", Float) = 0.0
|
|
_RimBlending("Rim Blending", Float) = 0.0
|
|
_RimColor("Rim Color", Color) = (1,0,0,1)
|
|
_RimSize("Rim Size", Range(0,1)) = 0.4
|
|
_RimSmoothness ("Rim Smoothness", Range(0,1)) = 0.0
|
|
_RimOpacity ("Rim Opacity", Range(0,1)) = 1.0
|
|
_RimAffectedArea ("Rim Affected Area", Float) = 1.0
|
|
[MaterialToggle] _RimAffectedByNormalMap ("Rim Affected By NormalMap", Float) = 1.0
|
|
[MaterialToggle] _EnableStyling ("Enable Shading Styling", float) = 0.0
|
|
|
|
[MaterialToggle] _EnableStylingDistanceFade("_EnableStylingDistanceFade", Float) = 0.0
|
|
_StylingDFStartingDistance("_StylingDFStartingDistance", Float) = 0.0
|
|
_StylingDFFalloff("_StylingDFFalloff", Float) = 0.0
|
|
[MaterialToggle] _StylingAdjustDistanceFadeValue("_StylingAdjustDistanceFadeValue", Float) = 0.0
|
|
_StylingDistanceFadeValue("_StylingDistanceFadeValue", Range(0,1)) = 0.0
|
|
[MaterialToggle] _HatchingAffectedByNormalMap("Affected by NormalMap", Float) = 0.0
|
|
[MaterialToggle] _EnableAntiAliasing("Enable Anti-Aliasing", Float) = 1.0
|
|
[MaterialToggle] _EnableShadingStyling ("Enable Shading Styling", float) = 1.0
|
|
_StylingShadingSyncWithOtherStyling("_StylingShadingSyncWithOtherStyling", Float) = 0.0
|
|
|
|
_StylingColor("Styling Color", Color) = (0,0,0,1)
|
|
_ShadingStyle("Shading Style", Float) = 0.0
|
|
[MaterialToggle] _SyncWithLightPartitioning("Sync With Light Partitioning", Float) = 0.0
|
|
_NumberOfCellsHatching ("Number Of Cells", int) = 2
|
|
_StylingTerminatorPosition("Terminator Position", Range(-1,1)) = 0.0
|
|
_StylingOvermodelingFactor("Overmodeling Factor", Range(0,1)) = 0.0
|
|
_StylingShadingBlending("Shading Styling Blending", Float) = 0.0
|
|
[MaterialToggle] _StylingShadingIsInverted("Shading Styling is inverted", Float) = 0.0
|
|
_DrawSpace("Draw Space", Float) = 1.0
|
|
|
|
_UVSet("UV Set", Float) = 0
|
|
|
|
[MaterialToggle] _SSCameraDistanceScaled("Scale by Camera Distance", Float) = 1.0
|
|
[MaterialToggle] _AnchorSSToObjectsOrigin("Anchor to Object's Origin", Float) = 1.0
|
|
_CoordinateSystem("Coordinate System", Float) = 0.0
|
|
_PolarCenterMode("Polar Center Mode", Float) = 0.0
|
|
_PolarCenter ("Polar Center", Vector) = (0, 0, 0, 1)
|
|
_StylingShadingDensity("Hatching Density", Float) = 30.0
|
|
_StylingShadingInitialDirection("Hatching Initial Direction", Range(0,360)) = 45
|
|
[IntRange] _StylingShadingRotationBetweenCells("Hatching Rotation Between Cells", Range(-180,180)) = 30
|
|
_StylingShadingHalftonesOffset("Styling Shading HalftonesOffset", Range(0,1)) = 1
|
|
_StylingShadingThicknessControl("Hatching Thickness Control", Float) = 0.0
|
|
_StylingShadingThickness("Hatching Thickness", Range(0,1)) = 0.9
|
|
_StylingShadingOpacity("Hatching Opacity", Range(0,1)) = 1.0
|
|
_StylingShadingOpacityFalloff("Hatching Opacity Falloff", Range(0,1)) = 0.0
|
|
_StylingShadingThicknessFalloff("Hatching Thickness Falloff", Range(0,1)) = 0.5
|
|
_StylingShadingHardness("Hatching Hardness", Range(0,1)) = 0.9
|
|
_StylingShadingHalftonesRoundness("_StylingShadingHalftonesRoundness", Range(0,1)) = 1
|
|
_StylingShadingHalftonesRoundnessFalloff("_StylingShadingHalftonesRoundnessFalloff", Range(0,1)) = 1
|
|
_StylingShadingEnableDashes("_StylingShadingEnableDashes", Float) = 0.0
|
|
_StylingShadingDashesSize("_StylingShadingDashesSize", Range(0,1)) = 0.5
|
|
_StylingShadingDashesUseHatchingDensity("_StylingShadingDashesUseHatchingDensity", Float) = 1.0
|
|
_StylingShadingDashesDensity("_StylingShadingDashesDensity", Float) = 30.0
|
|
_StylingShadingDashesRoundness("_StylingShadingDashesRoundness", Range(0,1)) = 1.0
|
|
_StylingShadingDashesType("_StylingShadingDashesType", Float) = 0.0
|
|
_StylingShadingDashesOffset("_StylingShadingDashesOffset", Range(0,1)) = 0.0
|
|
|
|
_StylingShadingDashesTransitionPosition("_StylingShadingDashesTransitionPosition", Range(0,1)) = 0.5
|
|
_StylingShadingDashesTransitionSoftness("_StylingShadingDashesTransitionSoftness", Range(0,1)) = 0.0
|
|
[MaterialToggle] _EnableShadingRandomizer("_EnableShadingRandomizer", Float) = 0.0
|
|
_ShadingNoise1Size ("_ShadingNoise1Size", Range(0,10)) = 1.0
|
|
_ShadingNoise1Seed ("_ShadingNoise1Seed", Float) = 1.0
|
|
_ShadingNoise2Seed ("_ShadingNoise2Seed", Float) = 1.0
|
|
_NoiseIntensity ("_NoiseIntensity", Range(0,5)) = 0.0
|
|
_SpacingRandomMode("SpacingRandomMode", Float) = 0.0
|
|
_SpacingRandomIntensity ("_SpacingRandomIntensity", Range(0,1)) = 0.0
|
|
_OpacityRandomMode("_OpacityRandomMode", Float) = 0.0
|
|
_OpacityRandomIntensity ("_OpacityRandomIntensity", Range(0,1)) = 0.0
|
|
_HardnessRandomMode("_HardnessRandomMode", Float) = 0.0
|
|
_HardnessRandomIntensity ("_HardnessRandomIntensity", Range(0,1)) = 0.0
|
|
_LengthRandomMode("_LengthRandomMode", Float) = 0.0
|
|
_LengthRandomIntensity ("_LengthRandomIntensity", Range(0,1)) = 0.0
|
|
_ThicknessRandomMode("_ThicknessRandomMode", Float) = 0.0
|
|
_ThicknesshRandomIntensity ("_HatchingSpacingRandomIntensity", Range(0,1)) = 0.0
|
|
_EnableCastShadowsStyling ("Enable Cast Shadows Styling", Float) = 1.0
|
|
_StylingCastShadowsSyncWithOtherStyling("_StylingCastShadowsSyncWithOtherStyling", Float) = 1.0
|
|
|
|
_StylingCastShadowsColor("_StylingCastShadowsColor", Color) = (0,0,0,1)
|
|
_CastShadowsStyle ("Cast Shadows Style", Float) = 0.0
|
|
_CastShadowsNumberOfCellsHatching ("_CastShadowsNumberOfCellsHatching", int) = 1
|
|
_StylingCastShadowsSmoothness ("_StylingCastShadowsSmoothness", Range(0,1)) = 1.0
|
|
_StylingCastShadowsBlending("_StylingCastShadowsBlending", Float) = 0.0
|
|
[MaterialToggle] _StylingCastShadowsIsInverted("Cast Shadows Styling is inverted", Float) = 0.0
|
|
_CastShadowsDrawSpace("Cast Shadows Draw Space", Float) = 1.0
|
|
_CastShadowsUVSet("UV Set", Float) = 0
|
|
[MaterialToggle] _CastShadowsSSCameraDistanceScaled("Cast Shadows Scale by Camera Distance", Float) = 1.0
|
|
[MaterialToggle] _CastShadowsAnchorSSToObjectsOrigin("Cast Shadows Anchor to Object's Origin", Float) = 1.0
|
|
_CastShadowsCoordinateSystem("Cast Shadows Coordinate System", Float) = 0.0
|
|
_CastShadowsPolarCenterMode("Cast Shadows Polar Center Mode", Float) = 0.0
|
|
_CastShadowsPolarCenter ("Cast Shadows Polar Center", Vector) = (0, 0, 0, 1)
|
|
_StylingCastShadowsDensity("Cast Shadows Hatching Density", Float) = 30.0
|
|
_StylingCastShadowsInitialDirection("Cast Shadows Hatching Initial Direction", Range(0,360)) = 45
|
|
[IntRange] _StylingCastShadowsRotationBetweenCells("Hatching Rotation Between Cells", Range(-180,180)) = 30
|
|
_StylingCastShadowsHalftonesOffset("Styling Cast Shadows HalftonesOffset", Range(0,1)) = 1
|
|
_StylingCastShadowsOpacity("_StylingCastShadowsOpacity", Range(0,1)) = 1.0
|
|
_StylingCastShadowsOpacityFalloff("_StylingCastShadowsOpacityFalloff", Range(0,1)) = 0.0
|
|
_StylingCastShadowsThicknessControl("_StylingCastShadowsThicknessControl", Float) = 0.0
|
|
_StylingCastShadowsThickness("_StylingCastShadowsThickness", Range(0,1)) = 0.8
|
|
_StylingCastShadowsThicknessFalloff("_StylingCastShadowsThicknessFalloff", Range(0,1)) = 0.1
|
|
_StylingCastShadowsHardness("_StylingCastShadowsHardness", Range(0,1)) = 0.9
|
|
_StylingCastShadowsHalftonesRoundness("_StylingCastShadowsHalftonesRoundness", Range(0,1)) = 1
|
|
_StylingCastShadowsHalftonesRoundnessFalloff("_StylingCastShadowsHalftonesRoundnessFalloff", Range(0,1)) = 1
|
|
_StylingCastShadowsEnableDashes("_StylingCastShadowsEnableDashes", Float) = 0.0
|
|
_StylingCastShadowsDashesSize("_StylingCastShadowsDashesSize", Range(0,1)) = 0.5
|
|
_StylingCastShadowsDashesUseHatchingDensity("_StylingCastShadowsDashesUseHatchingDensity", Float) = 1.0
|
|
_StylingCastShadowsDashesDensity("_StylingCastShadowsDashesDensity", Float) = 30.0
|
|
_StylingCastShadowsDashesRoundness("_StylingCastShadowsDashesRoundness", Range(0,1)) = 1.0
|
|
_StylingCastShadowsDashesType("_StylingCastShadowsDashesType", Float) = 0.0
|
|
_StylingCastShadowsDashesOffset("_StylingCastShadowsDashesOffset", Range(0,1)) = 0.0
|
|
|
|
_StylingCastShadowsDashesTransitionPosition("_StylingCastShadowsDashesTransitionPosition", Range(0,1)) = 0.5
|
|
_StylingCastShadowsDashesTransitionSoftness("_StylingCastShadowsDashesTransitionSoftness", Range(0,1)) = 0.0
|
|
[MaterialToggle] _EnableCastShadowsRandomizer("_EnableCastShadowsRandomizer", Float) = 0.0
|
|
_CastShadowsNoise1Size ("_CastShadowsNoise1Size", Range(0,10)) = 1.0
|
|
_CastShadowsNoise1Seed ("_CastShadowsNoise1Seed", Float) = 1.0
|
|
_CastShadowsNoise2Seed ("_CastShadowsNoise2Seed", Float) = 1.0
|
|
_CastShadowsNoiseIntensity ("_CastShadowsNoiseIntensity", Range(0,5)) = 0.0
|
|
_CastShadowsSpacingRandomMode("_CastShadowsSpacingRandomMode", Float) = 0.0
|
|
_CastShadowsSpacingRandomIntensity ("_CastShadowsSpacingRandomIntensity", Range(0,1)) = 0.0
|
|
_CastShadowsOpacityRandomMode("_CastShadowsOpacityRandomMode", Float) = 0.0
|
|
_CastShadowsOpacityRandomIntensity ("_CastShadowsOpacityRandomIntensity", Range(0,1)) = 0.0
|
|
_CastShadowsHardnessRandomMode("_CastShadowsHardnessRandomMode", Float) = 0.0
|
|
_CastShadowsHardnessRandomIntensity ("_CastShadowsHardnessRandomIntensity", Range(0,1)) = 0.0
|
|
_CastShadowsLengthRandomMode("_CastShadowsLengthRandomMode", Float) = 0.0
|
|
_CastShadowsLengthRandomIntensity ("_CastShadowsLengthRandomIntensity", Range(0,1)) = 0.0
|
|
_CastShadowsThicknessRandomMode("_CastShadowsThicknessRandomMode", Float) = 0.0
|
|
_CastShadowsThicknesshRandomIntensity ("_CastShadowsThicknesshRandomIntensity", Range(0,1)) = 0.0
|
|
[MaterialToggle] _EnableSpecularStyling ("Enable Specular Styling", float) = 0.0
|
|
_StylingSpecularSyncWithOtherStyling("_StylingSpecularSyncWithOtherStyling", Float) = 0.0
|
|
[MaterialToggle] _SyncWithSpecular("_SyncWithSpecular", Float) = 1.0
|
|
_StylingSpecularSize("_StylingSpecularSize", Range(0,1)) = 0.8
|
|
_StylingSpecularSmoothness ("_StylingSpecularSmoothness", Range(0,1)) = 0.2
|
|
|
|
[MaterialToggle] _StylingSpecularCutOutShading ("_StylingSpecularCutOutShading", float) = 0.0
|
|
[MaterialToggle] _StylingSpecularUseLightColors ("_StylingSpecularUseLightColors", float) = 0.0
|
|
|
|
_StylingSpecularColor("Styling Color", Color) = (1,1,0,1)
|
|
_SpecularStyle("Specular Style", Float) = 0.0
|
|
_StylingSpecularBlending("_SpecularBlending", Float) = 0.0
|
|
[MaterialToggle] _StylingSpecularIsInverted("Specular Styling is inverted", Float) = 0.0
|
|
_SpecularDrawSpace("Draw Space", Float) = 1.0
|
|
_SpecularUVSet("UV Set", Float) = 0
|
|
[MaterialToggle] _SpecularSSCameraDistanceScaled("Scale by Camera Distance", Float) = 1.0
|
|
[MaterialToggle] _SpecularAnchorSSToObjectsOrigin("Anchor to Object's Origin", Float) = 1.0
|
|
_SpecularCoordinateSystem("Coordinate System", Float) = 0.0
|
|
_SpecularPolarCenterMode("Polar Center Mode", Float) = 0.0
|
|
_SpecularPolarCenter ("Polar Center", Vector) = (0, 0, 0, 1)
|
|
_StylingSpecularDensity("_StylingSpecularDensity", Float) = 30.0
|
|
_StylingSpecularRotation("_StylingSpecularRotation", Range(0,360)) = 0
|
|
_StylingSpecularHalftonesOffset("_StylingSpecularHalftoneOffset", Range(0,1)) = 1
|
|
_StylingSpecularOpacity("_StylingSpeculaOpacity", Range(0,1)) = 1.0
|
|
_StylingSpecularOpacityFalloff("_StylingSpeculaOpacityFalloff", Range(0,1)) = 0.0
|
|
_StylingSpecularThicknessControl("_StylingSpecularThicknessControl", Float) = 0.0
|
|
_StylingSpecularThickness("_StylingSpecularThickness", Range(0,1)) = 0.8
|
|
_StylingSpecularThicknessFalloff("_StylingSpecularThicknessFalloff", Range(0,1)) = 0.1
|
|
_StylingSpecularHardness("_StylingSpeculaHardness", Range(0,1)) = 0.9
|
|
_StylingSpecularHalftonesRoundness("_SpecularHalftoneRoundness", Range(0,1)) = 1
|
|
_StylingSpecularHalftonesRoundnessFalloff("_SpecularHalftoneRoundnessFalloff", Range(0,1)) = 1
|
|
_StylingSpecularEnableDashes("_StylingSpecularEnableDashes", Float) = 0.0
|
|
_StylingSpecularDashesSize("_StylingSpecularDashesSize", Range(0,1)) = 0.5
|
|
_StylingSpecularDashesUseHatchingDensity("_StylingSpecularDashesUseHatchingDensity", Float) = 1.0
|
|
_StylingSpecularDashesDensity("_StylingSpecularDashesDensity", Float) = 30.0
|
|
_StylingSpecularDashesRoundness("_StylingSpecularDashesRoundness", Range(0,1)) = 1.0
|
|
_StylingSpecularDashesType("_StylingSpecularDashesType", Float) = 0.0
|
|
_StylingSpecularDashesOffset("_StylingSpecularDashesOffset", Range(0,1)) = 0.0
|
|
|
|
_StylingSpecularDashesTransitionPosition("_StylingSpecularDashesTransitionPosition", Range(0,1)) = 0.5
|
|
_StylingSpecularDashesTransitionSoftness("_StylingSpecularDashesTransitionSoftness", Range(0,1)) = 0.0
|
|
[MaterialToggle] _EnableSpecularRandomizer("_EnableSpecularRandomizer", Float) = 0.0
|
|
_SpecularNoise1Size ("_SpecularNoise1Size", Range(0,10)) = 1.0
|
|
_SpecularNoise1Seed ("_SpecularNoise1Seed", Float) = 1.0
|
|
_SpecularNoise2Seed ("_SpecularNoise2Seed", Float) = 1.0
|
|
_SpecularNoiseIntensity ("_SpecularNoiseIntensity", Range(0,5)) = 0.0
|
|
_SpecularSpacingRandomMode("_SpecularSpacingRandomMode", Float) = 0.0
|
|
_SpecularSpacingRandomIntensity ("_SpecularSpacingRandomIntensity", Range(0,1)) = 0.0
|
|
_SpecularOpacityRandomMode("_SpecularOpacityRandomMode", Float) = 0.0
|
|
_SpecularOpacityRandomIntensity ("_SpecularOpacityRandomIntensity", Range(0,1)) = 0.0
|
|
_SpecularHardnessRandomMode("_SpecularHardnessRandomMode", Float) = 0.0
|
|
_SpecularHardnessRandomIntensity ("_SpecularHardnessRandomIntensity", Range(0,1)) = 0.0
|
|
_SpecularLengthRandomMode("_SpecularLengthRandomMode", Float) = 0.0
|
|
_SpecularLengthRandomIntensity ("_SpecularLengthRandomIntensity", Range(0,1)) = 0.0
|
|
_SpecularThicknessRandomMode("_ThicknessRandomMode", Float) = 0.0
|
|
_SpecularThicknesshRandomIntensity ("_HatchingSpacingRandomIntensity", Range(0,1)) = 0.0
|
|
[MaterialToggle] _EnableRimStyling ("Enable Shading Styling", float) = 0.0
|
|
_StylingRimSyncWithOtherStyling("_StylingRimSyncWithOtherStyling", Float) = 0.0
|
|
[MaterialToggle] _SyncWithRim("_SyncWithRim", Float) = 1.0
|
|
_StylingRimSize("_StylingRimSize", Range(0,1)) = 0.1
|
|
_StylingRimSmoothness ("_StylingRimSmoothness", Range(0,1)) = 0.3
|
|
_StylingRimAffectedArea ("Rim Affected Area", Float) = 2.0
|
|
|
|
_StylingRimColor("_StylingRimColor", Color) = (0,0,1,1)
|
|
_RimStyle("Rim Style", Float) = 0.0
|
|
_StylingRimBlending("_RimBlending", Float) = 0.0
|
|
[MaterialToggle] _StylingRimIsInverted("Rim Styling is inverted", Float) = 0.0
|
|
_RimDrawSpace("Draw Space", Float) = 0.0
|
|
_RimUVSet("UV Set", Float) = 0
|
|
[MaterialToggle] _RimSSCameraDistanceScaled("Scale by Camera Distance", Float) = 1.0
|
|
[MaterialToggle] _RimAnchorSSToObjectsOrigin("Anchor to Object's Origin", Float) = 1.0
|
|
_RimCoordinateSystem("Coordinate System", Float) = 0.0
|
|
_RimPolarCenterMode("Polar Center Mode", Float) = 0.0
|
|
_RimPolarCenter ("Polar Center", Vector) = (0, 0, 0, 1)
|
|
_StylingRimDensity("_StylingRimDensity", Float) = 30.0
|
|
_StylingRimRotation("_StylingRimRotation", Range(0,360)) = 0
|
|
_StylingRimHalftonesOffset("_StylingRimHalftonesOffset", Range(0,1)) = 1
|
|
_StylingRimThicknessControl("_StylingRimThicknessControl", Float) = 0.0
|
|
_StylingRimThickness("_StylingRimThickness", Range(0,1)) = 0.8
|
|
_StylingRimThicknessFalloff("_StylingRimThicknessFalloff", Range(0,1)) = 0.1
|
|
_StylingRimOpacity("_StylingRimOpacity", Range(0,1)) = 1.0
|
|
_StylingRimOpacityFalloff("_StylingRimOpacityFalloff", Range(0,1)) = 0.0
|
|
_StylingRimHardness("_StylingRimHardness", Range(0,1)) = 0.9
|
|
_StylingRimHalftonesRoundness("_StylingRimHalftonesRoundness", Range(0,1)) = 1
|
|
_StylingRimHalftonesRoundnessFalloff("_StylingRimHalftonesRoundnessFalloff", Range(0,1)) = 1
|
|
_StylingRimEnableDashes("_StylingRimEnableDashes", Float) = 0.0
|
|
_StylingRimDashesSize("_StylingRimDashesSize", Range(0,1)) = 0.5
|
|
_StylingRimDashesUseHatchingDensity("_StylingRimDashesUseHatchingDensity", Float) = 1.0
|
|
_StylingRimDashesDensity("_StylingRimDashesDensity", Float) = 30.0
|
|
_StylingRimDashesRoundness("_StylingRimDashesRoundness", Range(0,1)) = 1.0
|
|
_StylingRimDashesType("_StylingRimDashesType", Float) = 0.0
|
|
_StylingRimDashesOffset("_StylingRimDashesOffset", Range(0,1)) = 0.0
|
|
|
|
_StylingRimDashesTransitionPosition("_StylingRimDashesTransitionPosition", Range(0,1)) = 0.5
|
|
_StylingRimDashesTransitionSoftness("_StylingRimDashesTransitionSoftness", Range(0,1)) = 0.0
|
|
[MaterialToggle] _EnableRimRandomizer("_EnableRimRandomizer", Float) = 0.0
|
|
_RimNoise1Size ("_RimNoise1Size", Range(0,1)) = 1.0
|
|
_RimNoise1Seed ("_RimNoise1Seed", Float) = 1.0
|
|
_RimNoise2Seed ("_RimNoise2Seed", Float) = 1.0
|
|
_RimNoiseIntensity ("_RimNoiseIntensity", Range(0,5)) = 0.0
|
|
_RimSpacingRandomMode("_RimSpacingRandomMode", Float) = 0.0
|
|
_RimSpacingRandomIntensity ("_RimSpacingRandomIntensity", Range(0,1)) = 0.0
|
|
_RimOpacityRandomMode("_RimOpacityRandomMode", Float) = 0.0
|
|
_RimOpacityRandomIntensity ("_RimOpacityRandomIntensity", Range(0,1)) = 0.0
|
|
_RimHardnessRandomMode("_RimHardnessRandomMode", Float) = 0.0
|
|
_RimHardnessRandomIntensity ("_RimHardnessRandomIntensity", Range(0,1)) = 0.0
|
|
_RimLengthRandomMode("_RimLengthRandomMode", Float) = 0.0
|
|
_RimLengthRandomIntensity ("_RimLengthRandomIntensity", Range(0,1)) = 0.0
|
|
_RimThicknessRandomMode("_RimThicknessRandomMode", Float) = 0.0
|
|
_RimThicknesshRandomIntensity ("_RimThicknesshRandomIntensity", Range(0,1)) = 0.0
|
|
_NoiseMap1("_NoiseMap1", 2D) = "white" {}
|
|
_NoiseMap2("_NoiseMap2", 2D) = "white" {}
|
|
|
|
_NoiseTextureQuality("_NoiseTextureQuality", Float) = 0.0
|
|
_HatchingCameraDistanceFade("Camera Distance Fade", Float) = 0.0
|
|
_HalftonePatternCameraDistanceFade("Camera Distance Fade", Float) = 0.0
|
|
[MaterialToggle] _EnableOutline ("Enable Outline", Float) = 0.0
|
|
_OutlineColor("Outline Color", Color) = (0,0,0,1)
|
|
_OutlineWidth("Outline Width", Range(1.5,200)) = 6
|
|
_OutlineDepthOffset("Outline Depth Offset", Float) = 0.0
|
|
[MaterialToggle] _OutlineConstantScreenWidth ("Enable Outline", Float) = 0.0
|
|
// Commented out Curved World variable
|
|
// [CurvedWorldBendSettings] _CurvedWorldBendSettings("0|1|1", Vector) = (0, 0, 0, 0)
|
|
_ShadingMode("Shading Mode", Float) = 0.0
|
|
_LightFunction("Light Function", Float) = 1.0
|
|
[MainTexture] _BaseMap("Base Map", 2D) = "white" {}
|
|
[MainColor] _BaseColor("Base Color", Color) = (1,1,1,1)
|
|
|
|
[MaterialToggle] _UseAlphaOnlyFromBaseMap("Use Alpha Only From BaseMap", Float) = 0.0
|
|
_Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5
|
|
|
|
_BumpScale("Normal Scale", Float) = 1.0
|
|
_BumpMap("Normal Map", 2D) = "bump" {}
|
|
[HDR] _EmissionColor("Emission Color", Color) = (0,0,0)
|
|
_EmissionMap("Emission Map", 2D) = "white" {}
|
|
_Surface("__surface", Float) = 0.0
|
|
_Blend("__blend", Float) = 0.0
|
|
_Cull("__cull", Float) = 2.0
|
|
[ToggleUI] _AlphaClip("__clip", Float) = 0.0
|
|
|
|
[ToggleUI] _ReceiveShadows("Receive Shadows", Float) = 1.0
|
|
[ToggleOff] _SpecularHighlights("Specular Highlights", Float) = 1.0
|
|
_SpecColor("Specular Color", Color) = (0.5, 0.5, 0.5, 0.5)
|
|
_SpecGlossMap("Specular Map", 2D) = "white" {}
|
|
_Smoothness("Smoothness", Range(0.0, 1.0)) = 0.5
|
|
[Enum(Specular Alpha,0,Albedo Alpha,1)] _SmoothnessSource("Smoothness Source", Float) = 0.0
|
|
_WorkflowMode("WorkflowMode", Float) = 1.0
|
|
_SmoothnessTextureChannel("Smoothness texture channel", Float) = 0
|
|
|
|
_Metallic("Metallic", Range(0.0, 1.0)) = 0.0
|
|
_MetallicGlossMap("Metallic", 2D) = "white" {}
|
|
|
|
[ToggleOff] _EnvironmentReflections("Environment Reflections", Float) = 1.0
|
|
|
|
_Parallax("Height Scale", Range(0.005, 0.08)) = 0.005
|
|
_ParallaxMap("Height Map", 2D) = "black" {}
|
|
|
|
_OcclusionStrength("Strength", Range(0.0, 1.0)) = 1.0
|
|
_OcclusionMap("Occlusion", 2D) = "white" {}
|
|
|
|
_DetailMask("Detail Mask", 2D) = "white" {}
|
|
_DetailAlbedoMapScale("Detail Albedo Scale", Range(0.0, 2.0)) = 1.0
|
|
_DetailAlbedoMap("Detail Albedo Map", 2D) = "linearGrey" {}
|
|
_DetailNormalMapScale("Detail Normal Scale", Range(0.0, 2.0)) = 1.0
|
|
[Normal] _DetailNormalMap("Detail Normal Map", 2D) = "bump" {}
|
|
}
|
|
SubShader
|
|
{
|
|
Tags { "RenderPipeline"="UniversalPipeline" "RenderType" = "Opaque" "UniversalMaterialType" = "Lit" "Queue" = "Geometry" }
|
|
Pass
|
|
{
|
|
Name "Universal Forward"
|
|
Tags
|
|
{
|
|
"LightMode" = "UniversalForwardOnly"
|
|
}
|
|
Cull Back
|
|
Blend One Zero
|
|
ZTest LEqual
|
|
ZWrite On
|
|
|
|
Blend One Zero, One Zero
|
|
Cull Back
|
|
ZTest LEqual
|
|
ZWrite On
|
|
|
|
Cull [_Cull]
|
|
HLSLPROGRAM
|
|
|
|
#pragma vertex Vert
|
|
#pragma fragment Frag
|
|
|
|
#if (defined(SHADER_API_GLES) || defined(SHADER_API_GLES3) || defined(SHADER_API_GLES30))
|
|
#pragma target 3.0
|
|
#else
|
|
#pragma target 4.5
|
|
#endif
|
|
|
|
#pragma prefer_hlslcc gles
|
|
#pragma exclude_renderers d3d11_9x
|
|
#pragma multi_compile_fog
|
|
#pragma multi_compile_instancing
|
|
#pragma instancing_options renderinglayer
|
|
#pragma multi_compile _ DOTS_INSTANCING_ON
|
|
#pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION
|
|
#pragma multi_compile _ LIGHTMAP_ON
|
|
#pragma multi_compile _ DYNAMICLIGHTMAP_ON
|
|
#pragma multi_compile _ DIRLIGHTMAP_COMBINED
|
|
#pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN
|
|
#pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS
|
|
#pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS
|
|
#pragma multi_compile_fragment _ _REFLECTION_PROBE_BLENDING
|
|
#pragma multi_compile_fragment _ _REFLECTION_PROBE_BOX_PROJECTION
|
|
#pragma multi_compile_fragment _ _SHADOWS_SOFT
|
|
#pragma multi_compile_fragment _ _SHADOWS_SOFT_LOW
|
|
#pragma multi_compile_fragment _ _SHADOWS_SOFT_MEDIUM
|
|
#pragma multi_compile_fragment _ _SHADOWS_SOFT_HIGH
|
|
#pragma multi_compile _ LIGHTMAP_SHADOW_MIXING
|
|
#pragma multi_compile _ SHADOWS_SHADOWMASK
|
|
#pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3
|
|
#pragma multi_compile_fragment _ _LIGHT_LAYERS
|
|
#pragma multi_compile_fragment _ DEBUG_DISPLAY
|
|
#pragma multi_compile_fragment _ _LIGHT_COOKIES
|
|
#pragma multi_compile _ _FORWARD_PLUS
|
|
#pragma multi_compile _ EVALUATE_SH_VERTEX
|
|
#pragma multi_compile _ EVALUATE_SH_MIXED
|
|
#pragma multi_compile_fragment _ LOD_FADE_CROSSFADE
|
|
#define SHADER_PASS SHADERPASS_FORWARD
|
|
#define VARYINGS_NEED_FOG_AND_VERTEX_LIGHT
|
|
#define _PASSFORWARD 1
|
|
#define _FOG_FRAGMENT 1
|
|
#pragma shader_feature_local_fragment _SHADING_COLOR _SHADING_BLINNPHONG _SHADING_PBR
|
|
// Commented out Curved World defines
|
|
// #define CURVEDWORLD_BEND_TYPE_CLASSICRUNNER_X_POSITIVE
|
|
// #define CURVEDWORLD_BEND_ID_1
|
|
// #pragma shader_feature_local CURVEDWORLD_DISABLED_ON
|
|
// #pragma shader_feature_local CURVEDWORLD_NORMAL_TRANSFORMATION_ON
|
|
// #include "Assets/Amazing Assets/Curved World/Shaders/Core/CurvedWorldTransform.cginc"
|
|
#pragma shader_feature_local _NORMALMAP
|
|
#pragma shader_feature_local_fragment _EMISSION
|
|
|
|
#pragma shader_feature_local_fragment _ALPHATEST_ON
|
|
#pragma shader_feature_local _RECEIVE_SHADOWS_OFF
|
|
#pragma shader_feature_local_fragment _ _SPECGLOSSMAP _SPECULAR_COLOR
|
|
#pragma shader_feature_local_fragment _GLOSSINESS_FROM_BASE_ALPHA
|
|
|
|
#pragma shader_feature_local_fragment _OCCLUSIONMAP
|
|
#pragma shader_feature_local _PARALLAXMAP
|
|
#pragma shader_feature_local _ _DETAIL_MULX2 _DETAIL_SCALED
|
|
#pragma shader_feature_local_fragment _SURFACE_TYPE_TRANSPARENT
|
|
|
|
#pragma shader_feature_local_fragment _ _ALPHAPREMULTIPLY_ON _ALPHAMODULATE_ON
|
|
|
|
#pragma shader_feature_local_fragment _METALLICSPECGLOSSMAP
|
|
#pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
|
#pragma shader_feature_local_fragment _SPECULARHIGHLIGHTS_OFF
|
|
#pragma shader_feature_local_fragment _ENVIRONMENTREFLECTIONS_OFF
|
|
#pragma shader_feature_local_fragment _SPECULAR_SETUP
|
|
#define _URP 1
|
|
#define _USINGTEXCOORD1 1
|
|
#define _USINGTEXCOORD2 1
|
|
#if _SIMPLELIT
|
|
#define _SPECULAR_COLOR
|
|
#endif
|
|
#include "Packages/com.shadercrew.the-toon-shader.core/Scripts/Shaders/xxSharedTTSDependecies/TheToonShaderLightingFunctions.hlsl"
|
|
#include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl"
|
|
#include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl"
|
|
#include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ProbeVolumeVariants.hlsl"
|
|
#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.shadercrew.the-toon-shader.3d/Scripts/Shaders/xxSharedTTSDependecies/ModifiedLightingFunctions/URP/LightingModifiedForToon2023.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl"
|
|
#include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.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/LODCrossFade.hlsl"
|
|
#undef WorldNormalVector
|
|
#define WorldNormalVector(data, normal) mul(normal, data.TBNMatrix)
|
|
#define UnityObjectToWorldNormal(normal) mul(GetObjectToWorldMatrix(), normal)
|
|
|
|
#define _WorldSpaceLightPos0 _MainLightPosition
|
|
#define UNITY_DECLARE_TEX2D(name) TEXTURE2D(name); SAMPLER(sampler##name);
|
|
#define UNITY_DECLARE_TEX2D_NOSAMPLER(name) TEXTURE2D(name);
|
|
#define UNITY_DECLARE_TEX2DARRAY(name) TEXTURE2D_ARRAY(name); SAMPLER(sampler##name);
|
|
#define UNITY_DECLARE_TEX2DARRAY_NOSAMPLER(name) TEXTURE2D_ARRAY(name);
|
|
|
|
#define UNITY_SAMPLE_TEX2DARRAY(tex,coord) SAMPLE_TEXTURE2D_ARRAY(tex, sampler##tex, coord.xy, coord.z)
|
|
#define UNITY_SAMPLE_TEX2DARRAY_LOD(tex,coord,lod) SAMPLE_TEXTURE2D_ARRAY_LOD(tex, sampler##tex, coord.xy, coord.z, lod)
|
|
#define UNITY_SAMPLE_TEX2D(tex, coord) SAMPLE_TEXTURE2D(tex, sampler##tex, coord)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER(tex, samp, coord) SAMPLE_TEXTURE2D(tex, sampler##samp, coord)
|
|
|
|
#define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) SAMPLE_TEXTURE2D_LOD(tex, sampler_##tex, coord, lod)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) SAMPLE_TEXTURE2D_LOD (tex, sampler##samplertex,coord, lod)
|
|
#if defined(UNITY_COMPILER_HLSL)
|
|
#define UNITY_INITIALIZE_OUTPUT(type,name) name = (type)0;
|
|
#else
|
|
#define UNITY_INITIALIZE_OUTPUT(type,name)
|
|
#endif
|
|
|
|
#define sampler2D_float sampler2D
|
|
#define sampler2D_half sampler2D
|
|
struct VertexToPixel
|
|
{
|
|
float4 pos : SV_POSITION;
|
|
float3 worldPos : TEXCOORD0;
|
|
float3 worldNormal : TEXCOORD1;
|
|
float4 worldTangent : TEXCOORD2;
|
|
float4 texcoord0 : TEXCOORD3;
|
|
float4 texcoord1 : TEXCOORD4;
|
|
float4 texcoord2 : TEXCOORD5;
|
|
float4 texcoord3 : TEXCOORD6;
|
|
#if defined(LIGHTMAP_ON)
|
|
float2 lightmapUV : TEXCOORD8;
|
|
#endif
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
|
float2 dynamicLightmapUV : TEXCOORD9;
|
|
#endif
|
|
#if !defined(LIGHTMAP_ON)
|
|
float4 probeOcclusion : TEXCOORD8;
|
|
float3 sh : TEXCOORD10;
|
|
#endif
|
|
|
|
#if defined(VARYINGS_NEED_FOG_AND_VERTEX_LIGHT)
|
|
float4 fogFactorAndVertexLight : TEXCOORD11;
|
|
#endif
|
|
|
|
#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
|
|
float4 shadowCoord : TEXCOORD12;
|
|
#endif
|
|
float4 extraV2F0 : TEXCOORD13;
|
|
#if UNITY_ANY_INSTANCING_ENABLED
|
|
uint instanceID : CUSTOM_INSTANCE_ID;
|
|
#endif
|
|
#if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE)))
|
|
uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0;
|
|
#endif
|
|
#if (defined(UNITY_STEREO_INSTANCING_ENABLED))
|
|
uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex;
|
|
#endif
|
|
#if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE)
|
|
FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC;
|
|
#endif
|
|
|
|
#if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))
|
|
float4 previousPositionCS : TEXCOORD21;
|
|
float4 positionCS : TEXCOORD22;
|
|
#endif
|
|
};
|
|
struct Surface
|
|
{
|
|
half3 Albedo;
|
|
half Height;
|
|
half3 Normal;
|
|
half Smoothness;
|
|
half3 Emission;
|
|
half Metallic;
|
|
half3 Specular;
|
|
half Occlusion;
|
|
half SpecularPower;
|
|
half Alpha;
|
|
float outputDepth;
|
|
half SpecularOcclusion;
|
|
half SubsurfaceMask;
|
|
half Thickness;
|
|
half CoatMask;
|
|
half CoatSmoothness;
|
|
half Anisotropy;
|
|
half IridescenceMask;
|
|
half IridescenceThickness;
|
|
int DiffusionProfileHash;
|
|
float SpecularAAThreshold;
|
|
float SpecularAAScreenSpaceVariance;
|
|
float3 DiffuseGI;
|
|
float3 BackDiffuseGI;
|
|
float3 SpecularGI;
|
|
float ior;
|
|
float3 transmittanceColor;
|
|
float atDistance;
|
|
float transmittanceMask;
|
|
float4 ShadowMask;
|
|
float NormalAlpha;
|
|
float MAOSAlpha;
|
|
};
|
|
struct Blackboard
|
|
{
|
|
float blackboardDummyData;
|
|
};
|
|
struct ShaderData
|
|
{
|
|
float4 clipPos;
|
|
float3 localSpacePosition;
|
|
float3 localSpaceNormal;
|
|
float3 localSpaceTangent;
|
|
float3 worldSpacePosition;
|
|
float3 worldSpaceNormal;
|
|
float3 worldSpaceTangent;
|
|
float tangentSign;
|
|
|
|
float3 worldSpaceViewDir;
|
|
float3 tangentSpaceViewDir;
|
|
|
|
float4 texcoord0;
|
|
float4 texcoord1;
|
|
float4 texcoord2;
|
|
float4 texcoord3;
|
|
|
|
float2 screenUV;
|
|
float4 screenPos;
|
|
|
|
float4 vertexColor;
|
|
bool isFrontFace;
|
|
|
|
float4 extraV2F0;
|
|
float4 extraV2F1;
|
|
float4 extraV2F2;
|
|
float4 extraV2F3;
|
|
float4 extraV2F4;
|
|
float4 extraV2F5;
|
|
float4 extraV2F6;
|
|
float4 extraV2F7;
|
|
|
|
float3x3 TBNMatrix;
|
|
Blackboard blackboard;
|
|
};
|
|
|
|
struct VertexData
|
|
{
|
|
#if SHADER_TARGET > 30
|
|
#endif
|
|
float4 vertex : POSITION;
|
|
float3 normal : NORMAL;
|
|
float4 tangent : TANGENT;
|
|
float4 texcoord0 : TEXCOORD0;
|
|
#if _URP && (_USINGTEXCOORD1 || _PASSMETA || _PASSFORWARD || _PASSGBUFFER)
|
|
float4 texcoord1 : TEXCOORD1;
|
|
#endif
|
|
|
|
#if _URP && (_USINGTEXCOORD2 || _PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && defined(DYNAMICLIGHTMAP_ON)))
|
|
float4 texcoord2 : TEXCOORD2;
|
|
#endif
|
|
|
|
#if _STANDARD && (_USINGTEXCOORD1 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER || _PASSFORWARDADD) && LIGHTMAP_ON)))
|
|
float4 texcoord1 : TEXCOORD1;
|
|
#endif
|
|
#if _STANDARD && (_USINGTEXCOORD2 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && DYNAMICLIGHTMAP_ON)))
|
|
float4 texcoord2 : TEXCOORD2;
|
|
#endif
|
|
#if _HDRP
|
|
float4 texcoord1 : TEXCOORD1;
|
|
float4 texcoord2 : TEXCOORD2;
|
|
#endif
|
|
float4 texcoord3 : TEXCOORD3;
|
|
#if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))
|
|
float3 previousPositionOS : TEXCOORD4;
|
|
#if defined (_ADD_PRECOMPUTED_VELOCITY)
|
|
float3 precomputedVelocity : TEXCOORD5;
|
|
#endif
|
|
#endif
|
|
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
};
|
|
|
|
struct TessVertex
|
|
{
|
|
float4 vertex : INTERNALTESSPOS;
|
|
float3 normal : NORMAL;
|
|
float4 tangent : TANGENT;
|
|
float4 texcoord0 : TEXCOORD0;
|
|
float4 texcoord1 : TEXCOORD1;
|
|
float4 texcoord2 : TEXCOORD2;
|
|
float4 texcoord3 : TEXCOORD3;
|
|
float4 extraV2F0 : TEXCOORD5;
|
|
#if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))
|
|
float3 previousPositionOS : TEXCOORD13;
|
|
#if defined (_ADD_PRECOMPUTED_VELOCITY)
|
|
float3 precomputedVelocity : TEXCOORD14;
|
|
#endif
|
|
#endif
|
|
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
UNITY_VERTEX_OUTPUT_STEREO
|
|
};
|
|
|
|
struct ExtraV2F
|
|
{
|
|
float4 extraV2F0;
|
|
float4 extraV2F1;
|
|
float4 extraV2F2;
|
|
float4 extraV2F3;
|
|
float4 extraV2F4;
|
|
float4 extraV2F5;
|
|
float4 extraV2F6;
|
|
float4 extraV2F7;
|
|
Blackboard blackboard;
|
|
float4 time;
|
|
};
|
|
float3 WorldToTangentSpace(ShaderData d, float3 normal)
|
|
{
|
|
return mul(d.TBNMatrix, normal);
|
|
}
|
|
|
|
float3 TangentToWorldSpace(ShaderData d, float3 normal)
|
|
{
|
|
return mul(normal, d.TBNMatrix);
|
|
}
|
|
#if _STANDARD
|
|
float3 TransformWorldToObject(float3 p) { return mul(unity_WorldToObject, float4(p, 1)); };
|
|
float3 TransformObjectToWorld(float3 p) { return mul(unity_ObjectToWorld, float4(p, 1)); };
|
|
float4 TransformWorldToObject(float4 p) { return mul(unity_WorldToObject, p); };
|
|
float4 TransformObjectToWorld(float4 p) { return mul(unity_ObjectToWorld, p); };
|
|
float4x4 GetWorldToObjectMatrix() { return unity_WorldToObject; }
|
|
float4x4 GetObjectToWorldMatrix() { return unity_ObjectToWorld; }
|
|
#if (defined(SHADER_API_D3D11) || defined(SHADER_API_XBOXONE) || defined(UNITY_COMPILER_HLSLCC) || defined(SHADER_API_PSSL) || (SHADER_TARGET_SURFACE_ANALYSIS && !SHADER_TARGET_SURFACE_ANALYSIS_MOJOSHADER))
|
|
#define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) tex.SampleLevel (sampler##tex,coord, lod)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) tex.SampleLevel (sampler##samplertex,coord, lod)
|
|
#else
|
|
#define UNITY_SAMPLE_TEX2D_LOD(tex,coord,lod) tex2D (tex,coord,0,lod)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord,lod) tex2D (tex,coord,0,lod)
|
|
#endif
|
|
|
|
#undef GetWorldToObjectMatrix()
|
|
|
|
#define GetWorldToObjectMatrix() unity_WorldToObject
|
|
#endif
|
|
|
|
float3 GetCameraWorldPosition()
|
|
{
|
|
#if _HDRP
|
|
return GetCameraRelativePositionWS(_WorldSpaceCameraPos);
|
|
#else
|
|
return _WorldSpaceCameraPos;
|
|
#endif
|
|
}
|
|
|
|
#if _GRABPASSUSED
|
|
#if _STANDARD
|
|
TEXTURE2D(%GRABTEXTURE%);
|
|
SAMPLER(sampler_%GRABTEXTURE%);
|
|
#endif
|
|
|
|
half3 GetSceneColor(float2 uv)
|
|
{
|
|
#if _STANDARD
|
|
return SAMPLE_TEXTURE2D(%GRABTEXTURE%, sampler_%GRABTEXTURE%, uv).rgb;
|
|
#else
|
|
return SHADERGRAPH_SAMPLE_SCENE_COLOR(uv);
|
|
#endif
|
|
}
|
|
#endif
|
|
#if _STANDARD
|
|
UNITY_DECLARE_DEPTH_TEXTURE(_CameraDepthTexture);
|
|
float GetSceneDepth(float2 uv) { return SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv); }
|
|
float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv)); }
|
|
float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv)); }
|
|
#else
|
|
float GetSceneDepth(float2 uv) { return SHADERGRAPH_SAMPLE_SCENE_DEPTH(uv); }
|
|
float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv), _ZBufferParams); }
|
|
float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv), _ZBufferParams); }
|
|
#endif
|
|
|
|
float3 GetWorldPositionFromDepthBuffer(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
float eye = GetLinearEyeDepth(uv);
|
|
float3 camView = mul((float3x3)GetObjectToWorldMatrix(), transpose(mul(GetWorldToObjectMatrix(), UNITY_MATRIX_I_V)) [2].xyz);
|
|
|
|
float dt = dot(worldSpaceViewDir, camView);
|
|
float3 div = worldSpaceViewDir/dt;
|
|
float3 wpos = (eye * div) + GetCameraWorldPosition();
|
|
return wpos;
|
|
}
|
|
|
|
#if _HDRP
|
|
float3 ObjectToWorldSpacePosition(float3 pos)
|
|
{
|
|
return GetAbsolutePositionWS(TransformObjectToWorld(pos));
|
|
}
|
|
#else
|
|
float3 ObjectToWorldSpacePosition(float3 pos)
|
|
{
|
|
return TransformObjectToWorld(pos);
|
|
}
|
|
#endif
|
|
|
|
#if _STANDARD
|
|
UNITY_DECLARE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture);
|
|
float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
float4 depthNorms = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture, uv);
|
|
float3 norms = DecodeViewNormalStereo(depthNorms);
|
|
norms = mul((float3x3)GetWorldToViewMatrix(), norms) * 0.5 + 0.5;
|
|
return norms;
|
|
}
|
|
#elif _HDRP && !_DECALSHADER
|
|
float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
NormalData nd;
|
|
DecodeFromNormalBuffer(_ScreenSize.xy * uv, nd);
|
|
return nd.normalWS;
|
|
}
|
|
#elif _URP
|
|
#if (SHADER_LIBRARY_VERSION_MAJOR >= 10)
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl"
|
|
#endif
|
|
|
|
float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
#if (SHADER_LIBRARY_VERSION_MAJOR >= 10)
|
|
return SampleSceneNormals(uv);
|
|
#else
|
|
float3 wpos = GetWorldPositionFromDepthBuffer(uv, worldSpaceViewDir);
|
|
return normalize(-cross(ddx(wpos), ddy(wpos))) * 0.5 + 0.5;
|
|
#endif
|
|
|
|
}
|
|
#endif
|
|
|
|
#if _HDRP
|
|
|
|
half3 UnpackNormalmapRGorAG(half4 packednormal)
|
|
{
|
|
packednormal.x *= packednormal.w;
|
|
|
|
half3 normal;
|
|
normal.xy = packednormal.xy * 2 - 1;
|
|
normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy)));
|
|
return normal;
|
|
}
|
|
half3 UnpackNormal(half4 packednormal)
|
|
{
|
|
#if defined(UNITY_NO_DXT5nm)
|
|
return packednormal.xyz * 2 - 1;
|
|
#else
|
|
return UnpackNormalmapRGorAG(packednormal);
|
|
#endif
|
|
}
|
|
#endif
|
|
#if _HDRP || _URP
|
|
|
|
half3 UnpackScaleNormal(half4 packednormal, half scale)
|
|
{
|
|
#ifndef UNITY_NO_DXT5nm
|
|
packednormal.x *= packednormal.w;
|
|
#endif
|
|
half3 normal;
|
|
normal.xy = (packednormal.xy * 2 - 1) * scale;
|
|
normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy)));
|
|
return normal;
|
|
}
|
|
|
|
#endif
|
|
void GetSun(out float3 lightDir, out float3 color)
|
|
{
|
|
lightDir = float3(0.5, 0.5, 0);
|
|
color = 1;
|
|
#if _HDRP
|
|
if (_DirectionalLightCount > 0)
|
|
{
|
|
DirectionalLightData light = _DirectionalLightDatas[0];
|
|
lightDir = -light.forward.xyz;
|
|
color = light.color;
|
|
}
|
|
#elif _STANDARD
|
|
lightDir = normalize(_WorldSpaceLightPos0.xyz);
|
|
color = _LightColor0.rgb;
|
|
#elif _URP
|
|
Light light = GetMainLight();
|
|
lightDir = light.direction;
|
|
color = light.color;
|
|
#endif
|
|
}
|
|
CBUFFER_START(UnityPerMaterial)
|
|
half _LightSource;
|
|
|
|
half _ShadingMode;
|
|
half _LightFunction;
|
|
half _UseAlphaOnlyFromBaseMap;
|
|
half _EnableToonShading;
|
|
half _ShadingFunction;
|
|
int _NumberOfCells;
|
|
float _CellTransitionSmoothness;
|
|
half _RoundingMethod;
|
|
half _SumLightsBeforePosterization;
|
|
half _ShadingUseLightColors;
|
|
half _GradientMode;
|
|
half _GradientBlending;
|
|
float _GradientBlendFactor;
|
|
|
|
float4 _GradientTex_TexelSize;
|
|
half _ShadingAffectedByNormalMap;
|
|
half _EnableShadows;
|
|
float4 _CoreShadowColor;
|
|
float _TerminatorPosition;
|
|
float _TerminatorWidth;
|
|
float _TerminatorSmoothness;
|
|
float4 _FormShadowColor;
|
|
|
|
half _EnableCastShadows;
|
|
float _CastShadowsStrength;
|
|
float _CastShadowsSmoothness;
|
|
half _CastShadowColorMode;
|
|
float4 _CastShadowColor;
|
|
half _EnableSpecular;
|
|
half _SpecularBlending;
|
|
half4 _SpecularColor;
|
|
float _SpecularSize;
|
|
float _SpecularSmoothness;
|
|
float _SpecularOpacity;
|
|
half _SpecularAffectedByNormalMap;
|
|
half _SpecularUseLightColors;
|
|
half _EnableRim;
|
|
half _RimBlending;
|
|
float4 _RimColor;
|
|
float _RimSize;
|
|
float _RimSmoothness;
|
|
float _RimOpacity;
|
|
half _RimAffectedArea;
|
|
half _RimAffectedByNormalMap;
|
|
half _EnableStyling;
|
|
|
|
half _EnableStylingDistanceFade;
|
|
float _StylingDFStartingDistance;
|
|
float _StylingDFFalloff;
|
|
half _StylingAdjustDistanceFadeValue;
|
|
float _StylingDistanceFadeValue;
|
|
half _HatchingAffectedByNormalMap;
|
|
half _EnableAntiAliasing;
|
|
float4 _NoiseTex2_TexelSize;
|
|
half _EnableShadingStyling;
|
|
half _StylingShadingSyncWithOtherStyling;
|
|
half _ShadingStyle;
|
|
half _SyncWithLightPartitioning;
|
|
half _NumberOfCellsHatching;
|
|
half _StylingTerminatorPosition;
|
|
float _StylingOvermodelingFactor;
|
|
half _StylingShadingBlending;
|
|
half _StylingShadingIsInverted;
|
|
half _DrawSpace;
|
|
|
|
half _UVSet;
|
|
|
|
half _SSCameraDistanceScaled;
|
|
half _AnchorSSToObjectsOrigin;
|
|
half _CoordinateSystem;
|
|
half _PolarCenterMode;
|
|
float4 _PolarCenter;
|
|
float _StylingShadingDensity;
|
|
float _StylingShadingInitialDirection;
|
|
float _StylingShadingRotationBetweenCells;
|
|
float _StylingShadingHalftonesOffset;
|
|
float4 _StylingColor;
|
|
float _StylingShadingOpacity;
|
|
float _StylingShadingOpacityFalloff;
|
|
float _StylingShadingThicknessControl;
|
|
float _StylingShadingThickness;
|
|
float _StylingShadingThicknessFalloff;
|
|
float _StylingShadingHardness;
|
|
float _StylingShadingHalftonesRoundness;
|
|
float _StylingShadingHalftonesRoundnessFalloff;
|
|
half _StylingShadingEnableDashes;
|
|
float _StylingShadingDashesSize;
|
|
half _StylingShadingDashesUseHatchingDensity;
|
|
float _StylingShadingDashesDensity;
|
|
float _StylingShadingDashesType;
|
|
float _StylingShadingDashesRoundness;
|
|
float _StylingShadingDashesOffset;
|
|
|
|
float _StylingShadingDashesTransitionPosition;
|
|
float _StylingShadingDashesTransitionSoftness;
|
|
half _EnableShadingRandomizer;
|
|
float _ShadingNoise1Size;
|
|
float _ShadingNoise1Seed;
|
|
float _ShadingNoise2Seed;
|
|
float _NoiseIntensity;
|
|
half _SpacingRandomMode;
|
|
float _SpacingRandomIntensity;
|
|
half _OpacityRandomMode;
|
|
float _OpacityRandomIntensity;
|
|
half _LengthRandomMode;
|
|
float _LengthRandomIntensity;
|
|
half _HardnessRandomMode;
|
|
float _HardnessRandomIntensity;
|
|
half _ThicknessRandomMode;
|
|
float _ThicknesshRandomIntensity;
|
|
half _EnableCastShadowsStyling;
|
|
half _CastShadowsNumberOfCellsHatching;
|
|
float _StylingCastShadowsSmoothness;
|
|
half _StylingCastShadowsSyncWithOtherStyling;
|
|
half _CastShadowsStyle;
|
|
half _StylingCastShadowsBlending;
|
|
half _StylingCastShadowsIsInverted;
|
|
half _CastShadowsDrawSpace;
|
|
half _CastShadowsUVSet;
|
|
half _CastShadowsSSCameraDistanceScaled;
|
|
half _CastShadowsAnchorSSToObjectsOrigin;
|
|
half _CastShadowsCoordinateSystem;
|
|
half _CastShadowsPolarCenterMode;
|
|
float4 _CastShadowsPolarCenter;
|
|
float _StylingCastShadowsDensity;
|
|
float _StylingCastShadowsInitialDirection;
|
|
float _StylingCastShadowsRotationBetweenCells;
|
|
float _StylingCastShadowsHalftonesOffset;
|
|
float4 _StylingCastShadowsColor;
|
|
float _StylingCastShadowsOpacity;
|
|
float _StylingCastShadowsOpacityFalloff;
|
|
half _StylingCastShadowsThicknessControl;
|
|
float _StylingCastShadowsThickness;
|
|
float _StylingCastShadowsThicknessFalloff;
|
|
float _StylingCastShadowsHardness;
|
|
float _StylingCastShadowsHalftonesRoundness;
|
|
float _StylingCastShadowsHalftonesRoundnessFalloff;
|
|
half _StylingCastShadowsEnableDashes;
|
|
float _StylingCastShadowsDashesSize;
|
|
half _StylingCastShadowsDashesUseHatchingDensity;
|
|
float _StylingCastShadowsDashesDensity;
|
|
float _StylingCastShadowsDashesRoundness;
|
|
float _StylingCastShadowsDashesType;
|
|
float _StylingCastShadowsDashesOffset;
|
|
|
|
float _StylingCastShadowsDashesTransitionPosition;
|
|
float _StylingCastShadowsDashesTransitionSoftness;
|
|
half _EnableCastShadowsRandomizer;
|
|
float _CastShadowsNoise1Size;
|
|
float _CastShadowsNoise1Seed;
|
|
float _CastShadowsNoise2Seed;
|
|
float _CastShadowsNoiseIntensity;
|
|
half _CastShadowsSpacingRandomMode;
|
|
float _CastShadowsSpacingRandomIntensity;
|
|
half _CastShadowsOpacityRandomMode;
|
|
float _CastShadowsOpacityRandomIntensity;
|
|
half _CastShadowsHardnessRandomMode;
|
|
float _CastShadowsHardnessRandomIntensity;
|
|
half _CastShadowsLengthRandomMode;
|
|
float _CastShadowsLengthRandomIntensity;
|
|
half _CastShadowsThicknessRandomMode;
|
|
float _CastShadowsThicknesshRandomIntensity;
|
|
half _EnableSpecularStyling;
|
|
half _SyncWithSpecular;
|
|
float _StylingSpecularSize;
|
|
float _StylingSpecularSmoothness;
|
|
half _StylingSpecularCutOutShading;
|
|
half _StylingSpecularUseLightColors;
|
|
half _StylingSpecularSyncWithOtherStyling;
|
|
half _SpecularStyle;
|
|
half _StylingSpecularBlending;
|
|
half _StylingSpecularIsInverted;
|
|
half _SpecularDrawSpace;
|
|
half _SpecularUVSet;
|
|
half _SpecularSSCameraDistanceScaled;
|
|
half _SpecularAnchorSSToObjectsOrigin;
|
|
half _SpecularCoordinateSystem;
|
|
half _SpecularPolarCenterMode;
|
|
float4 _SpecularPolarCenter;
|
|
float _StylingSpecularDensity;
|
|
float _StylingSpecularRotation;
|
|
float _StylingSpecularHalftonesOffset;
|
|
float4 _StylingSpecularColor;
|
|
float _StylingSpecularOpacity;
|
|
float _StylingSpecularOpacityFalloff;
|
|
float _StylingSpecularThicknessControl;
|
|
float _StylingSpecularThickness;
|
|
float _StylingSpecularThicknessFalloff;
|
|
float _StylingSpecularHardness;
|
|
float _StylingSpecularHalftonesRoundness;
|
|
float _StylingSpecularHalftonesRoundnessFalloff;
|
|
half _StylingSpecularEnableDashes;
|
|
float _StylingSpecularDashesSize;
|
|
half _StylingSpecularDashesUseHatchingDensity;
|
|
float _StylingSpecularDashesDensity;
|
|
float _StylingSpecularDashesRoundness;
|
|
float _StylingSpecularDashesType;
|
|
float _StylingSpecularDashesOffset;
|
|
|
|
float _StylingSpecularDashesTransitionPosition;
|
|
float _StylingSpecularDashesTransitionSoftness;
|
|
float _EnableSpecularRandomizer;
|
|
float _SpecularNoise1Size;
|
|
float _SpecularNoise1Seed;
|
|
float _SpecularNoise2Seed;
|
|
float _SpecularNoiseIntensity;
|
|
half _SpecularSpacingRandomMode;
|
|
float _SpecularSpacingRandomIntensity;
|
|
half _SpecularOpacityRandomMode;
|
|
float _SpecularOpacityRandomIntensity;
|
|
half _SpecularLengthRandomMode;
|
|
float _SpecularLengthRandomIntensity;
|
|
half _SpecularHardnessRandomMode;
|
|
float _SpecularHardnessRandomIntensity;
|
|
half _SpecularThicknessRandomMode;
|
|
float _SpecularThicknesshRandomIntensity;
|
|
half _EnableRimStyling;
|
|
half _StylingRimSyncWithOtherStyling;
|
|
half _SyncWithRim;
|
|
float _StylingRimSize;
|
|
float _StylingRimSmoothness;
|
|
half _StylingRimAffectedArea;
|
|
half _RimStyle;
|
|
half _StylingRimBlending;
|
|
half _StylingRimIsInverted;
|
|
half _RimDrawSpace;
|
|
half _RimUVSet;
|
|
half _RimSSCameraDistanceScaled;
|
|
half _RimAnchorSSToObjectsOrigin;
|
|
half _RimCoordinateSystem;
|
|
half _RimPolarCenterMode;
|
|
float4 _RimPolarCenter;
|
|
float _StylingRimDensity;
|
|
float _StylingRimRotation;
|
|
float _StylingRimHalftonesOffset;
|
|
float4 _StylingRimColor;
|
|
float _StylingRimOpacity;
|
|
float _StylingRimOpacityFalloff;
|
|
float _StylingRimThicknessControl;
|
|
float _StylingRimThickness;
|
|
float _StylingRimThicknessFalloff;
|
|
float _StylingRimHardness;
|
|
float _StylingRimHalftonesRoundness;
|
|
float _StylingRimHalftonesRoundnessFalloff;
|
|
half _StylingRimEnableDashes;
|
|
float _StylingRimDashesSize;
|
|
half _StylingRimDashesUseHatchingDensity;
|
|
float _StylingRimDashesDensity;
|
|
float _StylingRimDashesRoundness;
|
|
float _StylingRimDashesType;
|
|
float _StylingRimDashesOffset;
|
|
|
|
float _StylingRimDashesTransitionPosition;
|
|
float _StylingRimDashesTransitionSoftness;
|
|
float _EnableRimRandomizer;
|
|
float _RimNoise1Size;
|
|
float _RimNoise1Seed;
|
|
float _RimNoise2Seed;
|
|
float _RimNoiseIntensity;
|
|
half _RimSpacingRandomMode;
|
|
float _RimSpacingRandomIntensity;
|
|
half _RimOpacityRandomMode;
|
|
float _RimOpacityRandomIntensity;
|
|
half _RimLengthRandomMode;
|
|
float _RimLengthRandomIntensity;
|
|
half _RimHardnessRandomMode;
|
|
float _RimHardnessRandomIntensity;
|
|
half _RimThicknessRandomMode;
|
|
float _RimThicknesshRandomIntensity;
|
|
half4 _OutlineColor;
|
|
half _OutlineWidth;
|
|
half _EnableOutline;
|
|
half _OutlineConstantScreenWidth;
|
|
half4 _BaseColor;
|
|
float _BumpScale;
|
|
float4 _BaseMap_ST;
|
|
half _Cutoff;
|
|
half4 _EmissionColor;
|
|
half4 _SpecColor;
|
|
float _Smoothness;
|
|
float4 _DetailAlbedoMap_ST;
|
|
half _Metallic;
|
|
half _Parallax;
|
|
half _OcclusionStrength;
|
|
half _DetailAlbedoMapScale;
|
|
half _DetailNormalMapScale;
|
|
#if UNITY_VERSION < 202200
|
|
float _AlphaToMaskAvailable;
|
|
#endif
|
|
CBUFFER_END
|
|
sampler2D _NoiseMap1;
|
|
sampler2D _NoiseMap2;
|
|
|
|
sampler2D _HatchingMap;
|
|
sampler2D _GradientTex;
|
|
void Ext_ModifyVertex0 (inout VertexData v, inout ExtraV2F d)
|
|
{
|
|
#if defined(CURVEDWORLD_IS_INSTALLED) && !defined(CURVEDWORLD_DISABLED_ON)
|
|
#ifdef CURVEDWORLD_NORMAL_TRANSFORMATION_ON
|
|
CURVEDWORLD_TRANSFORM_VERTEX_AND_NORMAL(v.vertex, v.normal, v.tangent)
|
|
#else
|
|
CURVEDWORLD_TRANSFORM_VERTEX(v.vertex)
|
|
#endif
|
|
#endif
|
|
float4x4 UnityObjectToClipPosMatrix = mul(GetWorldToHClipMatrix(), GetObjectToWorldMatrix());
|
|
float4 pos = mul(UnityObjectToClipPosMatrix, v.vertex);
|
|
float4 objectOriginClipPos = mul(UnityObjectToClipPosMatrix, float4(0, 0, 0, 1));
|
|
objectOriginClipPos.xy = clamp(objectOriginClipPos.xy, -1.0*objectOriginClipPos.w, 1.0*objectOriginClipPos.w);
|
|
float4 originScreenPos = ComputeScreenPos(objectOriginClipPos);
|
|
float2 originScreenUV = originScreenPos.xy/originScreenPos.w;
|
|
float4 screenPos = ComputeScreenPos(pos);
|
|
float2 uv = ((screenPos.xy) / screenPos.w);
|
|
float4 ssss = ComputeScreenPos(pos);
|
|
d.extraV2F0 = float4(originScreenUV,originScreenUV);
|
|
}
|
|
void Ext_SurfaceFunction0 (inout Surface o, ShaderData d)
|
|
{
|
|
float2 test = d.texcoord1.xy;
|
|
test = d.texcoord2.xy;
|
|
test = d.texcoord3.xy;
|
|
|
|
}
|
|
TEXTURE2D(_BaseMap); SAMPLER(sampler_BaseMap);
|
|
TEXTURE2D(_BumpMap); SAMPLER(sampler_BumpMap);
|
|
TEXTURE2D(_EmissionMap); SAMPLER(sampler_EmissionMap);
|
|
TEXTURE2D(_SpecGlossMap); SAMPLER(sampler_SpecGlossMap);
|
|
TEXTURE2D(_ParallaxMap); SAMPLER(sampler_ParallaxMap);
|
|
TEXTURE2D(_OcclusionMap); SAMPLER(sampler_OcclusionMap);
|
|
TEXTURE2D(_DetailMask); SAMPLER(sampler_DetailMask);
|
|
TEXTURE2D(_DetailAlbedoMap); SAMPLER(sampler_DetailAlbedoMap);
|
|
TEXTURE2D(_DetailNormalMap); SAMPLER(sampler_DetailNormalMap);
|
|
TEXTURE2D(_MetallicGlossMap); SAMPLER(sampler_MetallicGlossMap);
|
|
TEXTURE2D(_ClearCoatMap); SAMPLER(sampler_ClearCoatMap);
|
|
#if defined(_DETAIL_MULX2) || defined(_DETAIL_SCALED)
|
|
#define _DETAIL
|
|
#endif
|
|
|
|
#if _SPECULAR_SETUP
|
|
#define _USESPECULAR 1
|
|
#else
|
|
#undef _USESPECULAR
|
|
#endif
|
|
float SharpenAlphaMy(float alpha, float alphaClipTreshold)
|
|
{
|
|
return saturate((alpha - alphaClipTreshold) / max(fwidth(alpha), 0.0001) + 0.5);
|
|
}
|
|
#if UNITY_VERSION < 202200
|
|
half3 AlphaModulate(half3 albedo, half alpha)
|
|
{
|
|
#if defined(_ALPHAMODULATE_ON)
|
|
return lerp(half3(1.0, 1.0, 1.0), albedo, alpha);
|
|
#else
|
|
return albedo;
|
|
#endif
|
|
}
|
|
|
|
#if defined(_ALPHATEST_ON)
|
|
bool IsAlphaToMaskAvailable()
|
|
{
|
|
return (_AlphaToMaskAvailable != 0.0);
|
|
}
|
|
half AlphaClip(half alpha, half cutoff)
|
|
{
|
|
half clippedAlpha = (alpha >= cutoff) ? float(alpha) : 0.0;
|
|
|
|
half alphaToCoverageAlpha = SharpenAlphaMy(alpha, cutoff);
|
|
|
|
alpha = IsAlphaToMaskAvailable() ? alphaToCoverageAlpha : clippedAlpha;
|
|
clip(alpha - 0.0001);
|
|
|
|
return alpha;
|
|
}
|
|
#endif
|
|
#endif
|
|
#if UNITY_VERSION < 202220
|
|
int _DebugSceneOverrideMode;
|
|
#endif
|
|
|
|
bool IsAlphaDiscardEnabledMy()
|
|
{
|
|
#if defined(DEBUG_DISPLAY)
|
|
return (_DebugSceneOverrideMode == DEBUGSCENEOVERRIDEMODE_NONE);
|
|
#else
|
|
return true;
|
|
#endif
|
|
}
|
|
half AlphaMy(half albedoAlpha, half4 color, half cutoff)
|
|
{
|
|
#if !defined(_SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A) && !defined(_GLOSSINESS_FROM_BASE_ALPHA)
|
|
half alpha = albedoAlpha * color.a;
|
|
#else
|
|
half alpha = color.a;
|
|
#endif
|
|
#ifdef _ALPHATEST_ON
|
|
if (IsAlphaDiscardEnabledMy())
|
|
alpha = AlphaClip(alpha, cutoff);
|
|
#endif
|
|
|
|
return alpha;
|
|
}
|
|
half4 SampleAlbedoAlpha(float2 uv, TEXTURE2D_PARAM(albedoAlphaMap, sampler_albedoAlphaMap))
|
|
{
|
|
return half4(SAMPLE_TEXTURE2D(albedoAlphaMap, sampler_albedoAlphaMap, uv));
|
|
}
|
|
half3 SampleNormal(float2 uv, TEXTURE2D_PARAM(bumpMap, sampler_bumpMap), half scale = half(1.0))
|
|
{
|
|
#ifdef _NORMALMAP
|
|
half4 n = SAMPLE_TEXTURE2D(bumpMap, sampler_bumpMap, uv);
|
|
#if BUMP_SCALE_NOT_SUPPORTED
|
|
return UnpackNormal(n);
|
|
#else
|
|
return UnpackNormalScale(n, scale);
|
|
#endif
|
|
#else
|
|
return half3(0.0h, 0.0h, 1.0h);
|
|
#endif
|
|
}
|
|
#if UNITY_VERSION < 202100
|
|
half4 SampleSpecularSmoothnessMy(half2 uv, half alpha, half4 specColor, TEXTURE2D_PARAM( specMap, sampler_specMap))
|
|
{
|
|
half4 specularSmoothness = half4(0.0h, 0.0h, 0.0h, 1.0h);
|
|
#ifdef _SPECGLOSSMAP
|
|
specularSmoothness = SAMPLE_TEXTURE2D(specMap, sampler_specMap, uv) * specColor;
|
|
#elif defined(_SPECULAR_COLOR)
|
|
specularSmoothness = specColor;
|
|
#endif
|
|
|
|
#ifdef _GLOSSINESS_FROM_BASE_ALPHA
|
|
specularSmoothness.a = exp2(10 * alpha + 1);
|
|
#else
|
|
specularSmoothness.a = exp2(10 * specularSmoothness.a + 1);
|
|
#endif
|
|
return specularSmoothness;
|
|
}
|
|
#else
|
|
|
|
half4 SampleSpecularSmoothnessMy(float2 uv, half alpha, half4 specColor, TEXTURE2D_PARAM(specMap, sampler_specMap))
|
|
{
|
|
half4 specularSmoothness = half4(0, 0, 0, 1);
|
|
#ifdef _SPECGLOSSMAP
|
|
specularSmoothness = SAMPLE_TEXTURE2D(specMap, sampler_specMap, uv) * specColor;
|
|
#elif defined(_SPECULAR_COLOR)
|
|
specularSmoothness = specColor;
|
|
#endif
|
|
|
|
#ifdef _GLOSSINESS_FROM_BASE_ALPHA
|
|
specularSmoothness.a = alpha;
|
|
#endif
|
|
|
|
return specularSmoothness;
|
|
}
|
|
#endif
|
|
half3 SampleEmissionMy(float2 uv, half3 emissionColor, TEXTURE2D_PARAM(emissionMap, sampler_emissionMap))
|
|
{
|
|
#ifndef _EMISSION
|
|
return 0;
|
|
#else
|
|
return SAMPLE_TEXTURE2D(emissionMap, sampler_emissionMap, uv).rgb * emissionColor;
|
|
#endif
|
|
}
|
|
#ifndef BUILTIN_TARGET_API
|
|
half2 ParallaxOffset1Step(half height, half amplitude, half3 viewDirTS)
|
|
{
|
|
height = height * amplitude - amplitude / 2.0;
|
|
half3 v = normalize(viewDirTS);
|
|
v.z += 0.42;
|
|
return height * (v.xy / v.z);
|
|
}
|
|
#endif
|
|
|
|
float2 ParallaxMapping(TEXTURE2D_PARAM(heightMap, sampler_heightMap), half3 viewDirTS, half scale, float2 uv)
|
|
{
|
|
half h = SAMPLE_TEXTURE2D(heightMap, sampler_heightMap, uv).g;
|
|
float2 offset = ParallaxOffset1Step(h, scale, viewDirTS);
|
|
return offset;
|
|
}
|
|
#ifdef _SPECULAR_SETUP
|
|
#define SAMPLE_METALLICSPECULAR(uv) SAMPLE_TEXTURE2D(_SpecGlossMap, sampler_SpecGlossMap, uv)
|
|
#else
|
|
#define SAMPLE_METALLICSPECULAR(uv) SAMPLE_TEXTURE2D(_MetallicGlossMap, sampler_MetallicGlossMap, uv)
|
|
#endif
|
|
|
|
half4 SampleMetallicSpecGloss(float2 uv, half albedoAlpha)
|
|
{
|
|
half4 specGloss;
|
|
|
|
#ifdef _METALLICSPECGLOSSMAP
|
|
specGloss = half4(SAMPLE_METALLICSPECULAR(uv));
|
|
#ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
|
specGloss.a = albedoAlpha * _Smoothness;
|
|
#else
|
|
specGloss.a *= _Smoothness;
|
|
#endif
|
|
#else
|
|
#if _SPECULAR_SETUP
|
|
specGloss.rgb = _SpecColor.rgb;
|
|
#else
|
|
specGloss.rgb = _Metallic.rrr;
|
|
#endif
|
|
|
|
#ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
|
specGloss.a = albedoAlpha * _Smoothness;
|
|
#else
|
|
specGloss.a = _Smoothness;
|
|
#endif
|
|
#endif
|
|
|
|
return specGloss;
|
|
}
|
|
|
|
half SampleOcclusion(float2 uv)
|
|
{
|
|
#ifdef _OCCLUSIONMAP
|
|
half occ = SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
|
|
return LerpWhiteTo(occ, _OcclusionStrength);
|
|
#else
|
|
return half(1.0);
|
|
#endif
|
|
}
|
|
half SampleOcclusionMy(float2 uv)
|
|
{
|
|
#ifdef _OCCLUSIONMAP
|
|
#if defined(SHADER_API_GLES)
|
|
return SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
|
|
#else
|
|
half occ = SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
|
|
return LerpWhiteTo(occ, _OcclusionStrength);
|
|
#endif
|
|
#else
|
|
return 1.0;
|
|
#endif
|
|
}
|
|
half2 SampleClearCoat(float2 uv)
|
|
{
|
|
#if defined(_CLEARCOAT) || defined(_CLEARCOATMAP)
|
|
half2 clearCoatMaskSmoothness = half2(_ClearCoatMask, _ClearCoatSmoothness);
|
|
|
|
#if defined(_CLEARCOATMAP)
|
|
clearCoatMaskSmoothness *= SAMPLE_TEXTURE2D(_ClearCoatMap, sampler_ClearCoatMap, uv).rg;
|
|
#endif
|
|
|
|
return clearCoatMaskSmoothness;
|
|
#else
|
|
return half2(0.0, 1.0);
|
|
#endif
|
|
}
|
|
|
|
void ApplyPerPixelDisplacement(half3 viewDirTS, inout float2 uv)
|
|
{
|
|
#if defined(_PARALLAXMAP)
|
|
uv += ParallaxMapping(TEXTURE2D_ARGS(_ParallaxMap, sampler_ParallaxMap), viewDirTS, _Parallax, uv);
|
|
#endif
|
|
}
|
|
|
|
half3 ScaleDetailAlbedo(half3 detailAlbedo, half scale)
|
|
{
|
|
return half(2.0) * detailAlbedo * scale - scale + half(1.0);
|
|
}
|
|
|
|
half3 ApplyDetailAlbedo(float2 detailUv, half3 albedo, half detailMask)
|
|
{
|
|
#if defined(_DETAIL)
|
|
half3 detailAlbedo = SAMPLE_TEXTURE2D(_DetailAlbedoMap, sampler_DetailAlbedoMap, detailUv).rgb;
|
|
#if defined(_DETAIL_SCALED)
|
|
detailAlbedo = ScaleDetailAlbedo(detailAlbedo, _DetailAlbedoMapScale);
|
|
#else
|
|
detailAlbedo = half(2.0) * detailAlbedo;
|
|
#endif
|
|
|
|
return albedo * LerpWhiteTo(detailAlbedo, detailMask);
|
|
#else
|
|
return albedo;
|
|
#endif
|
|
}
|
|
|
|
half3 ApplyDetailNormal(float2 detailUv, half3 normalTS, half detailMask)
|
|
{
|
|
#if defined(_DETAIL)
|
|
#if BUMP_SCALE_NOT_SUPPORTED
|
|
half3 detailNormalTS = UnpackNormal(SAMPLE_TEXTURE2D(_DetailNormalMap, sampler_DetailNormalMap, detailUv));
|
|
#else
|
|
half3 detailNormalTS = UnpackNormalScale(SAMPLE_TEXTURE2D(_DetailNormalMap, sampler_DetailNormalMap, detailUv), _DetailNormalMapScale);
|
|
#endif
|
|
detailNormalTS = normalize(detailNormalTS);
|
|
|
|
return lerp(normalTS, BlendNormalRNM(normalTS, detailNormalTS), detailMask);
|
|
#else
|
|
return normalTS;
|
|
#endif
|
|
}
|
|
void Ext_SurfaceFunction1 (inout Surface o, ShaderData d)
|
|
{
|
|
|
|
float4 texcoords;
|
|
texcoords.xy = d.texcoord0.xy * _BaseMap_ST.xy + _BaseMap_ST.zw;
|
|
float2 uv = texcoords.xy;
|
|
|
|
#if _SHADING_BLINNPHONG || _SHADING_COLOR
|
|
half4 diffuseAlpha = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, texcoords.xy);
|
|
o.Albedo = diffuseAlpha.rgb * _BaseColor.rgb;
|
|
#if !_PASSFORWARD
|
|
if(_EnableToonShading == 0 || _ShadingAffectedByNormalMap == 1)
|
|
{
|
|
o.Normal = SampleNormal(texcoords.xy, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
}
|
|
#else
|
|
o.Normal = SampleNormal(texcoords.xy, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
#endif
|
|
o.Alpha = diffuseAlpha.a;
|
|
o.Alpha = o.Alpha * _BaseColor.a;
|
|
AlphaDiscard(o.Alpha, _Cutoff);
|
|
half3 emission = SampleEmissionMy(uv, _EmissionColor.rgb, TEXTURE2D_ARGS(_EmissionMap, sampler_EmissionMap));
|
|
o.Emission = emission;
|
|
#endif
|
|
|
|
if(_ShadingMode == 1 && _LightFunction == 0 )
|
|
{
|
|
#if _SHADING_BLINNPHONG
|
|
half4 specular = SampleSpecularSmoothnessMy(uv, o.Alpha, _SpecColor, TEXTURE2D_ARGS(_SpecGlossMap, sampler_SpecGlossMap));
|
|
half smoothness = specular.a;
|
|
|
|
o.Specular = specular;
|
|
o.Smoothness = smoothness;
|
|
#endif
|
|
|
|
}
|
|
else if (_ShadingMode == 1 && _LightFunction == 1)
|
|
{
|
|
#if _SHADING_PBR
|
|
#if defined(_PARALLAXMAP)
|
|
ApplyPerPixelDisplacement(d.tangentSpaceViewDir, uv);
|
|
#endif
|
|
half4 albedoAlpha = SampleAlbedoAlpha(uv, TEXTURE2D_ARGS(_BaseMap, sampler_BaseMap));
|
|
o.Alpha = AlphaMy(albedoAlpha.a, _BaseColor, _Cutoff);
|
|
|
|
half4 specGloss = SampleMetallicSpecGloss(uv, albedoAlpha.a);
|
|
o.Albedo = albedoAlpha.rgb * _BaseColor.rgb;
|
|
o.Albedo = AlphaModulate(o.Albedo, o.Alpha);
|
|
#if _SPECULAR_SETUP
|
|
o.Metallic = half(1.0);
|
|
o.Specular = specGloss.rgb;
|
|
#else
|
|
o.Metallic = specGloss.r;
|
|
o.Specular = half3(0.0, 0.0, 0.0);
|
|
#endif
|
|
o.Smoothness = specGloss.a;
|
|
#if !_PASSFORWARD
|
|
if(_EnableToonShading == 0 || _ShadingAffectedByNormalMap == 1)
|
|
{
|
|
o.Normal = SampleNormal(uv, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
}
|
|
#else
|
|
o.Normal = SampleNormal(uv, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
#endif
|
|
o.Occlusion = SampleOcclusion(uv);
|
|
o.Emission = SampleEmissionMy(uv, _EmissionColor.rgb, TEXTURE2D_ARGS(_EmissionMap, sampler_EmissionMap));
|
|
|
|
#if defined(_DETAIL)
|
|
half detailMask = SAMPLE_TEXTURE2D(_DetailMask, sampler_DetailMask, uv).a;
|
|
float2 detailUv = uv * _DetailAlbedoMap_ST.xy + _DetailAlbedoMap_ST.zw;
|
|
o.Albedo = ApplyDetailAlbedo(detailUv, o.Albedo, detailMask);
|
|
o.Normal = ApplyDetailNormal(detailUv, o.Normal, detailMask);
|
|
#endif
|
|
|
|
#endif
|
|
}
|
|
|
|
}
|
|
void ChainSurfaceFunction(inout Surface l, inout ShaderData d)
|
|
{
|
|
Ext_SurfaceFunction0(l, d);
|
|
Ext_SurfaceFunction1(l, d);
|
|
}
|
|
|
|
#if !_DECALSHADER
|
|
|
|
void ChainModifyVertex(inout VertexData v, inout VertexToPixel v2p, float4 time)
|
|
{
|
|
ExtraV2F d;
|
|
ZERO_INITIALIZE(ExtraV2F, d);
|
|
ZERO_INITIALIZE(Blackboard, d.blackboard);
|
|
d.time = time;
|
|
|
|
Ext_ModifyVertex0(v, d);
|
|
v2p.extraV2F0 = d.extraV2F0;
|
|
}
|
|
|
|
void ChainModifyTessellatedVertex(inout VertexData v, inout VertexToPixel v2p)
|
|
{
|
|
ExtraV2F d;
|
|
ZERO_INITIALIZE(ExtraV2F, d);
|
|
ZERO_INITIALIZE(Blackboard, d.blackboard);
|
|
d.extraV2F0 = v2p.extraV2F0;
|
|
v2p.extraV2F0 = d.extraV2F0;
|
|
}
|
|
|
|
void ChainFinalColorForward(inout Surface l, inout ShaderData d, inout half4 color)
|
|
{
|
|
}
|
|
|
|
void ChainFinalGBufferStandard(inout Surface s, inout ShaderData d, inout half4 GBuffer0, inout half4 GBuffer1, inout half4 GBuffer2, inout half4 outEmission, inout half4 outShadowMask)
|
|
{
|
|
}
|
|
#endif
|
|
#if _DECALSHADER
|
|
|
|
ShaderData CreateShaderData(SurfaceDescriptionInputs IN)
|
|
{
|
|
ShaderData d = (ShaderData)0;
|
|
d.TBNMatrix = float3x3(IN.WorldSpaceTangent, IN.WorldSpaceBiTangent, IN.WorldSpaceNormal);
|
|
d.worldSpaceNormal = IN.WorldSpaceNormal;
|
|
d.worldSpaceTangent = IN.WorldSpaceTangent;
|
|
|
|
d.worldSpacePosition = IN.WorldSpacePosition;
|
|
d.texcoord0 = IN.uv0.xyxy;
|
|
d.screenPos = IN.ScreenPosition;
|
|
|
|
d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - d.worldSpacePosition);
|
|
|
|
d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir);
|
|
#if _HDRP
|
|
#else
|
|
#endif
|
|
return d;
|
|
}
|
|
#else
|
|
|
|
ShaderData CreateShaderData(VertexToPixel i
|
|
#if NEED_FACING
|
|
, bool facing
|
|
#endif
|
|
)
|
|
{
|
|
ShaderData d = (ShaderData)0;
|
|
d.clipPos = i.pos;
|
|
d.worldSpacePosition = i.worldPos;
|
|
|
|
d.worldSpaceNormal = normalize(i.worldNormal);
|
|
d.worldSpaceTangent.xyz = normalize(i.worldTangent.xyz);
|
|
|
|
d.tangentSign = i.worldTangent.w * unity_WorldTransformParams.w;
|
|
float3 bitangent = cross(d.worldSpaceTangent.xyz, d.worldSpaceNormal) * d.tangentSign;
|
|
d.TBNMatrix = float3x3(d.worldSpaceTangent, -bitangent, d.worldSpaceNormal);
|
|
d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - i.worldPos);
|
|
|
|
d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir);
|
|
d.texcoord0 = i.texcoord0;
|
|
d.texcoord1 = i.texcoord1;
|
|
d.texcoord2 = i.texcoord2;
|
|
d.texcoord3 = i.texcoord3;
|
|
#if _HDRP
|
|
#else
|
|
#endif
|
|
d.extraV2F0 = i.extraV2F0;
|
|
return d;
|
|
}
|
|
|
|
#endif
|
|
#if defined(_PASSSHADOW)
|
|
float3 _LightDirection;
|
|
float3 _LightPosition;
|
|
#endif
|
|
|
|
#if (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)))
|
|
|
|
#define GetWorldToViewMatrix() _ViewMatrix
|
|
#define UNITY_MATRIX_I_V _InvViewMatrix
|
|
#define GetViewToHClipMatrix() OptimizeProjectionMatrix(_ProjMatrix)
|
|
#define UNITY_MATRIX_I_P _InvProjMatrix
|
|
#define GetWorldToHClipMatrix() _ViewProjMatrix
|
|
#define UNITY_MATRIX_I_VP _InvViewProjMatrix
|
|
#define UNITY_MATRIX_UNJITTERED_VP _NonJitteredViewProjMatrix
|
|
#define UNITY_MATRIX_PREV_VP _PrevViewProjMatrix
|
|
#define UNITY_MATRIX_PREV_I_VP _PrevInvViewProjMatrix
|
|
|
|
void MotionVectorPositionZBias(VertexToPixel input)
|
|
{
|
|
#if UNITY_REVERSED_Z
|
|
input.pos.z -= unity_MotionVectorsParams.z * input.pos.w;
|
|
#else
|
|
input.pos.z += unity_MotionVectorsParams.z * input.pos.w;
|
|
#endif
|
|
}
|
|
|
|
#endif
|
|
VertexToPixel Vert (VertexData v)
|
|
{
|
|
VertexToPixel o = (VertexToPixel)0;
|
|
|
|
UNITY_SETUP_INSTANCE_ID(v);
|
|
UNITY_TRANSFER_INSTANCE_ID(v, o);
|
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
|
|
#if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)))
|
|
VertexData previousMesh = v;
|
|
#endif
|
|
#if !_TESSELLATION_ON
|
|
ChainModifyVertex(v, o, _Time);
|
|
#endif
|
|
|
|
o.texcoord0 = v.texcoord0;
|
|
o.texcoord1 = v.texcoord1;
|
|
o.texcoord2 = v.texcoord2;
|
|
o.texcoord3 = v.texcoord3;
|
|
float3 positionWS = TransformObjectToWorld(v.vertex.xyz);
|
|
float3 normalWS = TransformObjectToWorldNormal(v.normal);
|
|
float4 tangentWS = float4(TransformObjectToWorldDir(v.tangent.xyz), v.tangent.w);
|
|
VertexPositionInputs vertexInput = GetVertexPositionInputs(v.vertex.xyz);
|
|
o.worldPos = positionWS;
|
|
o.worldNormal = normalWS;
|
|
o.worldTangent = tangentWS;
|
|
#if _PASSSHADOW
|
|
#if _CASTING_PUNCTUAL_LIGHT_SHADOW
|
|
float3 lightDirectionWS = normalize(_LightPosition - o.worldPos);
|
|
#else
|
|
float3 lightDirectionWS = _LightDirection;
|
|
#endif
|
|
o.pos = TransformWorldToHClip(ApplyShadowBias(o.worldPos, o.worldNormal, lightDirectionWS));
|
|
#if UNITY_REVERSED_Z
|
|
o.pos.z = min(o.pos.z, UNITY_NEAR_CLIP_VALUE);
|
|
#else
|
|
o.pos.z = max(o.pos.z, UNITY_NEAR_CLIP_VALUE);
|
|
#endif
|
|
#elif _PASSMETA
|
|
o.pos = MetaVertexPosition(float4(v.vertex.xyz, 0), v.texcoord1.xy, v.texcoord2.xy, unity_LightmapST, unity_DynamicLightmapST);
|
|
#else
|
|
o.pos = TransformWorldToHClip(o.worldPos);
|
|
#endif
|
|
#if _PASSFORWARD || _PASSGBUFFER
|
|
float2 uv1 = v.texcoord1.xy;
|
|
OUTPUT_LIGHTMAP_UV(uv1, unity_LightmapST, o.lightmapUV);
|
|
o.texcoord1.xy = uv1;
|
|
OUTPUT_SH(o.worldNormal, o.sh);
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
|
o.dynamicLightmapUV.xy = v.texcoord2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw;
|
|
#if UNITY_VERSION >= 60000009
|
|
OUTPUT_SH(o.worldNormal, o.sh);
|
|
#endif
|
|
#elif (defined(PROBE_VOLUMES_L1) || defined(PROBE_VOLUMES_L2)) && UNITY_VERSION >= 60000009
|
|
OUTPUT_SH4(vertexInput.positionWS, o.worldNormal.xyz, GetWorldSpaceNormalizeViewDir(vertexInput.positionWS), o.sh, o.probeOcclusion);
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef VARYINGS_NEED_FOG_AND_VERTEX_LIGHT
|
|
half fogFactor = 0;
|
|
#if defined(_FOG_FRAGMENT)
|
|
fogFactor = ComputeFogFactor(o.pos.z);
|
|
#endif
|
|
#if _BAKEDLIT
|
|
o.fogFactorAndVertexLight = half4(fogFactor, 0, 0, 0);
|
|
#else
|
|
half3 vertexLight = VertexLighting(o.worldPos, o.worldNormal);
|
|
o.fogFactorAndVertexLight = half4(fogFactor, vertexLight);
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
|
|
o.shadowCoord = GetShadowCoord(vertexInput);
|
|
#endif
|
|
|
|
#if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)))
|
|
#if !defined(TESSELLATION_ON)
|
|
MotionVectorPositionZBias(o);
|
|
#endif
|
|
|
|
o.previousPositionCS = float4(0.0, 0.0, 0.0, 1.0);
|
|
bool forceNoMotion = unity_MotionVectorsParams.y == 0.0;
|
|
|
|
if (!forceNoMotion)
|
|
{
|
|
#if defined(HAVE_VFX_MODIFICATION)
|
|
float3 previousPositionOS = currentFrameMvData.vfxParticlePositionOS;
|
|
#if defined(VFX_FEATURE_MOTION_VECTORS_VERTS)
|
|
const bool applyDeformation = false;
|
|
#else
|
|
const bool applyDeformation = true;
|
|
#endif
|
|
#else
|
|
const bool hasDeformation = unity_MotionVectorsParams.x == 1;
|
|
float3 previousPositionOS = hasDeformation ? previousMesh.previousPositionOS : previousMesh.vertex.xyz;
|
|
|
|
#if defined(AUTOMATIC_TIME_BASED_MOTION_VECTORS) && defined(GRAPH_VERTEX_USES_TIME_PARAMETERS_INPUT)
|
|
const bool applyDeformation = true;
|
|
#else
|
|
const bool applyDeformation = hasDeformation;
|
|
#endif
|
|
#endif
|
|
#if defined(FEATURES_GRAPH_VERTEX)
|
|
if (applyDeformation)
|
|
previousPositionOS = GetLastFrameDeformedPosition(previousMesh, currentFrameMvData, previousPositionOS);
|
|
else
|
|
previousPositionOS = previousMesh.positionOS;
|
|
|
|
#if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT)
|
|
previousPositionOS -= previousMesh.precomputedVelocity;
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(UNITY_DOTS_INSTANCING_ENABLED) && defined(DOTS_DEFORMED)
|
|
ApplyPreviousFrameDeformedVertexPosition(previousMesh.vertexID, previousPositionOS);
|
|
#endif
|
|
#if defined (_ADD_PRECOMPUTED_VELOCITY)
|
|
previousPositionOS -= previousMesh.precomputedVelocity;
|
|
#endif
|
|
o.positionCS = mul(UNITY_MATRIX_UNJITTERED_VP, float4(positionWS, 1.0f));
|
|
|
|
#if defined(HAVE_VFX_MODIFICATION)
|
|
#if defined(VFX_FEATURE_MOTION_VECTORS_VERTS)
|
|
#if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT) || defined(_ADD_PRECOMPUTED_VELOCITY)
|
|
#error Unexpected fast path rendering VFX motion vector while there are vertex modification afterwards.
|
|
#endif
|
|
o.previousPositionCS = VFXGetPreviousClipPosition(previousMesh, currentFrameMvData.vfxElementAttributes, o.positionCS);
|
|
#else
|
|
#if VFX_WORLD_SPACE
|
|
const float3 previousPositionWS = previousPositionOS;
|
|
#else
|
|
const float3 previousPositionWS = mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1.0f)).xyz;
|
|
#endif
|
|
o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, float4(previousPositionWS, 1.0f));
|
|
#endif
|
|
#else
|
|
o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1)));
|
|
#endif
|
|
}
|
|
#endif
|
|
|
|
return o;
|
|
}
|
|
#include "Packages/com.shadercrew.the-toon-shader.3d/Scripts/Shaders/xxSharedTTSDependecies/TheToonShaderFunctions3D.hlsl"
|
|
#if _UNLIT
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Unlit.hlsl"
|
|
#endif
|
|
void Frag (VertexToPixel IN
|
|
, out half4 outColor : SV_Target0
|
|
#ifdef _WRITE_RENDERING_LAYERS
|
|
, out float4 outRenderingLayers : SV_Target1
|
|
#endif
|
|
#ifdef _DEPTHOFFSET_ON
|
|
, out float outputDepth : SV_Depth
|
|
#endif
|
|
#if NEED_FACING
|
|
, bool facing : SV_IsFrontFace
|
|
#endif
|
|
)
|
|
{
|
|
UNITY_SETUP_INSTANCE_ID(IN);
|
|
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(IN);
|
|
|
|
#if defined(LOD_FADE_CROSSFADE)
|
|
LODFadeCrossFade(IN.pos);
|
|
#endif
|
|
ShaderData d = CreateShaderData(IN
|
|
#if NEED_FACING
|
|
, facing
|
|
#endif
|
|
);
|
|
Surface l = (Surface)0;
|
|
|
|
#ifdef _DEPTHOFFSET_ON
|
|
l.outputDepth = outputDepth;
|
|
#endif
|
|
|
|
l.Albedo = half3(0.5, 0.5, 0.5);
|
|
l.Normal = float3(0,0,1);
|
|
l.Occlusion = 1;
|
|
l.Alpha = 1;
|
|
|
|
ChainSurfaceFunction(l, d);
|
|
|
|
#ifdef _DEPTHOFFSET_ON
|
|
outputDepth = l.outputDepth;
|
|
#endif
|
|
float3 specular = l.Specular;
|
|
float metallic = l.Metallic;
|
|
InputData inputData = (InputData)0;
|
|
|
|
inputData.positionWS = IN.worldPos;
|
|
#if _WORLDSPACENORMAL
|
|
inputData.normalWS = l.Normal;
|
|
#else
|
|
inputData.normalWS = normalize(TangentToWorldSpace(d, l.Normal));
|
|
#endif
|
|
|
|
inputData.viewDirectionWS = SafeNormalize(d.worldSpaceViewDir);
|
|
#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
|
|
inputData.shadowCoord = IN.shadowCoord;
|
|
#elif defined(MAIN_LIGHT_CALCULATE_SHADOWS)
|
|
inputData.shadowCoord = TransformWorldToShadowCoord(IN.worldPos);
|
|
#else
|
|
inputData.shadowCoord = float4(0, 0, 0, 0);
|
|
#endif
|
|
#if _BAKEDLIT
|
|
inputData.fogCoord = IN.fogFactorAndVertexLight.x;
|
|
inputData.vertexLighting = 0;
|
|
#else
|
|
inputData.fogCoord = InitializeInputDataFog(float4(IN.worldPos, 1.0), IN.fogFactorAndVertexLight.x);
|
|
inputData.vertexLighting = IN.fogFactorAndVertexLight.yzw;
|
|
#endif
|
|
#if defined(_OVERRIDE_BAKEDGI)
|
|
inputData.bakedGI = l.DiffuseGI;
|
|
l.Emission += l.SpecularGI;
|
|
#elif _BAKEDLIT
|
|
inputData.bakedGI = SAMPLE_GI(IN.lightmapUV, IN.sh, inputData.normalWS);
|
|
#else
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
|
inputData.bakedGI = SAMPLE_GI(IN.lightmapUV, IN.dynamicLightmapUV.xy, IN.sh, inputData.normalWS);
|
|
inputData.shadowMask = SAMPLE_SHADOWMASK(IN.lightmapUV);
|
|
#elif !defined(LIGHTMAP_ON) && (defined(PROBE_VOLUMES_L1) || defined(PROBE_VOLUMES_L2))
|
|
#if UNITY_VERSION >= 60000009
|
|
inputData.bakedGI = SAMPLE_GI(IN.sh, IN.worldPos, inputData.normalWS, inputData.viewDirectionWS, IN.pos, IN.probeOcclusion, inputData.shadowMask);
|
|
#else
|
|
inputData.bakedGI = SAMPLE_GI(IN.sh, IN.worldPos, inputData.normalWS, inputData.viewDirectionWS, IN.pos);
|
|
#endif
|
|
#else
|
|
inputData.bakedGI = SAMPLE_GI(IN.lightmapUV, IN.sh, inputData.normalWS);
|
|
inputData.shadowMask = SAMPLE_SHADOWMASK(IN.lightmapUV);
|
|
#endif
|
|
#endif
|
|
inputData.normalizedScreenSpaceUV = GetNormalizedScreenSpaceUV(IN.pos);
|
|
#if !_BAKEDLIT
|
|
inputData.shadowMask = SAMPLE_SHADOWMASK(IN.lightmapUV);
|
|
#if defined(_OVERRIDE_SHADOWMASK)
|
|
float4 mulColor = saturate(dot(l.ShadowMask, _MainLightOcclusionProbes));
|
|
inputData.shadowMask = mulColor;
|
|
#endif
|
|
#else
|
|
inputData.shadowMask = float4(1,1,1,1);
|
|
#endif
|
|
|
|
#if defined(DEBUG_DISPLAY)
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
|
inputData.dynamicLightmapUV = IN.dynamicLightmapUV.xy;
|
|
#endif
|
|
#if defined(LIGHTMAP_ON)
|
|
inputData.staticLightmapUV = IN.lightmapUV;
|
|
#else
|
|
inputData.vertexSH = IN.sh;
|
|
#endif
|
|
#endif
|
|
|
|
#if _WORLDSPACENORMAL
|
|
float3 normalTS = WorldToTangentSpace(d, l.Normal);
|
|
#else
|
|
float3 normalTS = l.Normal;
|
|
#endif
|
|
|
|
SurfaceData surface = (SurfaceData)0;
|
|
surface.albedo = l.Albedo;
|
|
surface.metallic = saturate(metallic);
|
|
surface.specular = specular;
|
|
surface.smoothness = saturate(l.Smoothness),
|
|
surface.occlusion = l.Occlusion,
|
|
surface.emission = l.Emission,
|
|
surface.alpha = saturate(l.Alpha);
|
|
surface.clearCoatMask = 0;
|
|
surface.clearCoatSmoothness = 1;
|
|
|
|
#ifdef _CLEARCOAT
|
|
surface.clearCoatMask = saturate(l.CoatMask);
|
|
surface.clearCoatSmoothness = saturate(l.CoatSmoothness);
|
|
#endif
|
|
|
|
#ifdef _DBUFFER
|
|
ApplyDecalToSurfaceData(IN.pos, surface, inputData);
|
|
#endif
|
|
|
|
half4 color = half4(l.Albedo, l.Alpha);
|
|
AddTheToonShader(color, inputData, surface, d, normalTS);
|
|
|
|
#if !DISABLEFOG
|
|
color.rgb = MixFog(color.rgb, inputData.fogCoord);
|
|
#endif
|
|
|
|
ChainFinalColorForward(l, d, color);
|
|
|
|
outColor = color;
|
|
|
|
#ifdef _WRITE_RENDERING_LAYERS
|
|
uint renderingLayers = GetMeshRenderingLayer();
|
|
outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0);
|
|
#endif
|
|
}
|
|
|
|
ENDHLSL
|
|
|
|
}
|
|
Pass
|
|
{
|
|
Name "GBuffer"
|
|
Tags
|
|
{
|
|
"LightMode" = "UniversalGBuffer"
|
|
}
|
|
Blend One Zero
|
|
ZTest LEqual
|
|
ZWrite On
|
|
|
|
Cull [_Cull]
|
|
HLSLPROGRAM
|
|
|
|
#pragma vertex Vert
|
|
#pragma fragment Frag
|
|
|
|
#if (defined(SHADER_API_GLES) || defined(SHADER_API_GLES3) || defined(SHADER_API_GLES30))
|
|
#pragma target 3.0
|
|
#else
|
|
#pragma target 4.5
|
|
#endif
|
|
|
|
#pragma prefer_hlslcc gles
|
|
#pragma exclude_renderers d3d11_9x
|
|
#pragma multi_compile_instancing
|
|
#pragma multi_compile _ DOTS_INSTANCING_ON
|
|
#pragma multi_compile_fog
|
|
#pragma instancing_options renderinglayer
|
|
#pragma multi_compile _ LIGHTMAP_ON
|
|
#pragma multi_compile _ DYNAMICLIGHTMAP_ON
|
|
#pragma multi_compile _ DIRLIGHTMAP_COMBINED
|
|
#pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN
|
|
#pragma multi_compile_fragment _ _REFLECTION_PROBE_BLENDING
|
|
#pragma multi_compile_fragment _ _REFLECTION_PROBE_BOX_PROJECTION
|
|
#pragma multi_compile_fragment _ _SHADOWS_SOFT
|
|
#pragma multi_compile_fragment _ _SHADOWS_SOFT_LOW
|
|
#pragma multi_compile_fragment _ _SHADOWS_SOFT_MEDIUM
|
|
#pragma multi_compile_fragment _ _SHADOWS_SOFT_HIGH
|
|
#pragma multi_compile _ LIGHTMAP_SHADOW_MIXING
|
|
#pragma multi_compile _ SHADOWS_SHADOWMASK
|
|
#pragma multi_compile _ _MIXED_LIGHTING_SUBTRACTIVE
|
|
#pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3
|
|
#pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT
|
|
#pragma multi_compile_fragment _ _RENDER_PASS_ENABLED
|
|
#pragma multi_compile_fragment _ DEBUG_DISPLAY
|
|
#pragma multi_compile_fragment _ LOD_FADE_CROSSFADE
|
|
#pragma multi_compile _ USE_LEGACY_LIGHTMAPS
|
|
#pragma multi_compile_fragment _ LIGHTMAP_BICUBIC_SAMPLING
|
|
#pragma multi_compile_fragment _ REFLECTION_PROBE_ROTATION
|
|
#define _FOG_FRAGMENT 1
|
|
|
|
#define VARYINGS_NEED_FOG_AND_VERTEX_LIGHT
|
|
#define SHADERPASS SHADERPASS_GBUFFER
|
|
#define _PASSGBUFFER 1
|
|
#pragma shader_feature_local_fragment _SHADING_COLOR _SHADING_BLINNPHONG _SHADING_PBR
|
|
// Commented out Curved World defines
|
|
// #define CURVEDWORLD_BEND_TYPE_CLASSICRUNNER_X_POSITIVE
|
|
// #define CURVEDWORLD_BEND_ID_1
|
|
// #pragma shader_feature_local CURVEDWORLD_DISABLED_ON
|
|
// #pragma shader_feature_local CURVEDWORLD_NORMAL_TRANSFORMATION_ON
|
|
// #include "Assets/Amazing Assets/Curved World/Shaders/Core/CurvedWorldTransform.cginc"
|
|
#pragma shader_feature_local _NORMALMAP
|
|
#pragma shader_feature_local_fragment _EMISSION
|
|
|
|
#pragma shader_feature_local_fragment _ALPHATEST_ON
|
|
#pragma shader_feature_local _RECEIVE_SHADOWS_OFF
|
|
#pragma shader_feature_local_fragment _ _SPECGLOSSMAP _SPECULAR_COLOR
|
|
#pragma shader_feature_local_fragment _GLOSSINESS_FROM_BASE_ALPHA
|
|
|
|
#pragma shader_feature_local_fragment _OCCLUSIONMAP
|
|
#pragma shader_feature_local _PARALLAXMAP
|
|
#pragma shader_feature_local _ _DETAIL_MULX2 _DETAIL_SCALED
|
|
#pragma shader_feature_local_fragment _SURFACE_TYPE_TRANSPARENT
|
|
|
|
#pragma shader_feature_local_fragment _ _ALPHAPREMULTIPLY_ON _ALPHAMODULATE_ON
|
|
|
|
#pragma shader_feature_local_fragment _METALLICSPECGLOSSMAP
|
|
#pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
|
#pragma shader_feature_local_fragment _SPECULARHIGHLIGHTS_OFF
|
|
#pragma shader_feature_local_fragment _ENVIRONMENTREFLECTIONS_OFF
|
|
#pragma shader_feature_local_fragment _SPECULAR_SETUP
|
|
#define _URP 1
|
|
#define _USINGTEXCOORD1 1
|
|
#define _USINGTEXCOORD2 1
|
|
#include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl"
|
|
#include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl"
|
|
#include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ProbeVolumeVariants.hlsl"
|
|
#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.universal/ShaderLibrary/Input.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl"
|
|
#include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.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/LODCrossFade.hlsl"
|
|
#undef WorldNormalVector
|
|
#define WorldNormalVector(data, normal) mul(normal, data.TBNMatrix)
|
|
#define UnityObjectToWorldNormal(normal) mul(GetObjectToWorldMatrix(), normal)
|
|
|
|
#define _WorldSpaceLightPos0 _MainLightPosition
|
|
#define UNITY_DECLARE_TEX2D(name) TEXTURE2D(name); SAMPLER(sampler##name);
|
|
#define UNITY_DECLARE_TEX2D_NOSAMPLER(name) TEXTURE2D(name);
|
|
#define UNITY_DECLARE_TEX2DARRAY(name) TEXTURE2D_ARRAY(name); SAMPLER(sampler##name);
|
|
#define UNITY_DECLARE_TEX2DARRAY_NOSAMPLER(name) TEXTURE2D_ARRAY(name);
|
|
|
|
#define UNITY_SAMPLE_TEX2DARRAY(tex,coord) SAMPLE_TEXTURE2D_ARRAY(tex, sampler##tex, coord.xy, coord.z)
|
|
#define UNITY_SAMPLE_TEX2DARRAY_LOD(tex,coord,lod) SAMPLE_TEXTURE2D_ARRAY_LOD(tex, sampler##tex, coord.xy, coord.z, lod)
|
|
#define UNITY_SAMPLE_TEX2D(tex, coord) SAMPLE_TEXTURE2D(tex, sampler##tex, coord)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER(tex, samp, coord) SAMPLE_TEXTURE2D(tex, sampler##samp, coord)
|
|
|
|
#define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) SAMPLE_TEXTURE2D_LOD(tex, sampler_##tex, coord, lod)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) SAMPLE_TEXTURE2D_LOD (tex, sampler##samplertex,coord, lod)
|
|
#if defined(UNITY_COMPILER_HLSL)
|
|
#define UNITY_INITIALIZE_OUTPUT(type,name) name = (type)0;
|
|
#else
|
|
#define UNITY_INITIALIZE_OUTPUT(type,name)
|
|
#endif
|
|
|
|
#define sampler2D_float sampler2D
|
|
#define sampler2D_half sampler2D
|
|
struct VertexToPixel
|
|
{
|
|
float4 pos : SV_POSITION;
|
|
float3 worldPos : TEXCOORD0;
|
|
float3 worldNormal : TEXCOORD1;
|
|
float4 worldTangent : TEXCOORD2;
|
|
float4 texcoord0 : TEXCOORD3;
|
|
float4 texcoord1 : TEXCOORD4;
|
|
float4 texcoord2 : TEXCOORD5;
|
|
float4 texcoord3 : TEXCOORD6;
|
|
#if defined(LIGHTMAP_ON)
|
|
float2 lightmapUV : TEXCOORD8;
|
|
#endif
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
|
float2 dynamicLightmapUV : TEXCOORD9;
|
|
#endif
|
|
#if !defined(LIGHTMAP_ON)
|
|
float4 probeOcclusion : TEXCOORD8;
|
|
float3 sh : TEXCOORD10;
|
|
#endif
|
|
|
|
#if defined(VARYINGS_NEED_FOG_AND_VERTEX_LIGHT)
|
|
float4 fogFactorAndVertexLight : TEXCOORD11;
|
|
#endif
|
|
|
|
#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
|
|
float4 shadowCoord : TEXCOORD12;
|
|
#endif
|
|
float4 extraV2F0 : TEXCOORD13;
|
|
#if UNITY_ANY_INSTANCING_ENABLED
|
|
uint instanceID : CUSTOM_INSTANCE_ID;
|
|
#endif
|
|
#if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE)))
|
|
uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0;
|
|
#endif
|
|
#if (defined(UNITY_STEREO_INSTANCING_ENABLED))
|
|
uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex;
|
|
#endif
|
|
#if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE)
|
|
FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC;
|
|
#endif
|
|
|
|
#if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))
|
|
float4 previousPositionCS : TEXCOORD21;
|
|
float4 positionCS : TEXCOORD22;
|
|
#endif
|
|
};
|
|
struct Surface
|
|
{
|
|
half3 Albedo;
|
|
half Height;
|
|
half3 Normal;
|
|
half Smoothness;
|
|
half3 Emission;
|
|
half Metallic;
|
|
half3 Specular;
|
|
half Occlusion;
|
|
half SpecularPower;
|
|
half Alpha;
|
|
float outputDepth;
|
|
half SpecularOcclusion;
|
|
half SubsurfaceMask;
|
|
half Thickness;
|
|
half CoatMask;
|
|
half CoatSmoothness;
|
|
half Anisotropy;
|
|
half IridescenceMask;
|
|
half IridescenceThickness;
|
|
int DiffusionProfileHash;
|
|
float SpecularAAThreshold;
|
|
float SpecularAAScreenSpaceVariance;
|
|
float3 DiffuseGI;
|
|
float3 BackDiffuseGI;
|
|
float3 SpecularGI;
|
|
float ior;
|
|
float3 transmittanceColor;
|
|
float atDistance;
|
|
float transmittanceMask;
|
|
float4 ShadowMask;
|
|
float NormalAlpha;
|
|
float MAOSAlpha;
|
|
};
|
|
struct Blackboard
|
|
{
|
|
float blackboardDummyData;
|
|
};
|
|
struct ShaderData
|
|
{
|
|
float4 clipPos;
|
|
float3 localSpacePosition;
|
|
float3 localSpaceNormal;
|
|
float3 localSpaceTangent;
|
|
float3 worldSpacePosition;
|
|
float3 worldSpaceNormal;
|
|
float3 worldSpaceTangent;
|
|
float tangentSign;
|
|
|
|
float3 worldSpaceViewDir;
|
|
float3 tangentSpaceViewDir;
|
|
|
|
float4 texcoord0;
|
|
float4 texcoord1;
|
|
float4 texcoord2;
|
|
float4 texcoord3;
|
|
|
|
float2 screenUV;
|
|
float4 screenPos;
|
|
|
|
float4 vertexColor;
|
|
bool isFrontFace;
|
|
|
|
float4 extraV2F0;
|
|
float4 extraV2F1;
|
|
float4 extraV2F2;
|
|
float4 extraV2F3;
|
|
float4 extraV2F4;
|
|
float4 extraV2F5;
|
|
float4 extraV2F6;
|
|
float4 extraV2F7;
|
|
|
|
float3x3 TBNMatrix;
|
|
Blackboard blackboard;
|
|
};
|
|
|
|
struct VertexData
|
|
{
|
|
#if SHADER_TARGET > 30
|
|
#endif
|
|
float4 vertex : POSITION;
|
|
float3 normal : NORMAL;
|
|
float4 tangent : TANGENT;
|
|
float4 texcoord0 : TEXCOORD0;
|
|
#if _URP && (_USINGTEXCOORD1 || _PASSMETA || _PASSFORWARD || _PASSGBUFFER)
|
|
float4 texcoord1 : TEXCOORD1;
|
|
#endif
|
|
|
|
#if _URP && (_USINGTEXCOORD2 || _PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && defined(DYNAMICLIGHTMAP_ON)))
|
|
float4 texcoord2 : TEXCOORD2;
|
|
#endif
|
|
|
|
#if _STANDARD && (_USINGTEXCOORD1 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER || _PASSFORWARDADD) && LIGHTMAP_ON)))
|
|
float4 texcoord1 : TEXCOORD1;
|
|
#endif
|
|
#if _STANDARD && (_USINGTEXCOORD2 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && DYNAMICLIGHTMAP_ON)))
|
|
float4 texcoord2 : TEXCOORD2;
|
|
#endif
|
|
#if _HDRP
|
|
float4 texcoord1 : TEXCOORD1;
|
|
float4 texcoord2 : TEXCOORD2;
|
|
#endif
|
|
float4 texcoord3 : TEXCOORD3;
|
|
#if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))
|
|
float3 previousPositionOS : TEXCOORD4;
|
|
#if defined (_ADD_PRECOMPUTED_VELOCITY)
|
|
float3 precomputedVelocity : TEXCOORD5;
|
|
#endif
|
|
#endif
|
|
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
};
|
|
|
|
struct TessVertex
|
|
{
|
|
float4 vertex : INTERNALTESSPOS;
|
|
float3 normal : NORMAL;
|
|
float4 tangent : TANGENT;
|
|
float4 texcoord0 : TEXCOORD0;
|
|
float4 texcoord1 : TEXCOORD1;
|
|
float4 texcoord2 : TEXCOORD2;
|
|
float4 texcoord3 : TEXCOORD3;
|
|
float4 extraV2F0 : TEXCOORD5;
|
|
#if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))
|
|
float3 previousPositionOS : TEXCOORD13;
|
|
#if defined (_ADD_PRECOMPUTED_VELOCITY)
|
|
float3 precomputedVelocity : TEXCOORD14;
|
|
#endif
|
|
#endif
|
|
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
UNITY_VERTEX_OUTPUT_STEREO
|
|
};
|
|
|
|
struct ExtraV2F
|
|
{
|
|
float4 extraV2F0;
|
|
float4 extraV2F1;
|
|
float4 extraV2F2;
|
|
float4 extraV2F3;
|
|
float4 extraV2F4;
|
|
float4 extraV2F5;
|
|
float4 extraV2F6;
|
|
float4 extraV2F7;
|
|
Blackboard blackboard;
|
|
float4 time;
|
|
};
|
|
float3 WorldToTangentSpace(ShaderData d, float3 normal)
|
|
{
|
|
return mul(d.TBNMatrix, normal);
|
|
}
|
|
|
|
float3 TangentToWorldSpace(ShaderData d, float3 normal)
|
|
{
|
|
return mul(normal, d.TBNMatrix);
|
|
}
|
|
#if _STANDARD
|
|
float3 TransformWorldToObject(float3 p) { return mul(unity_WorldToObject, float4(p, 1)); };
|
|
float3 TransformObjectToWorld(float3 p) { return mul(unity_ObjectToWorld, float4(p, 1)); };
|
|
float4 TransformWorldToObject(float4 p) { return mul(unity_WorldToObject, p); };
|
|
float4 TransformObjectToWorld(float4 p) { return mul(unity_ObjectToWorld, p); };
|
|
float4x4 GetWorldToObjectMatrix() { return unity_WorldToObject; }
|
|
float4x4 GetObjectToWorldMatrix() { return unity_ObjectToWorld; }
|
|
#if (defined(SHADER_API_D3D11) || defined(SHADER_API_XBOXONE) || defined(UNITY_COMPILER_HLSLCC) || defined(SHADER_API_PSSL) || (SHADER_TARGET_SURFACE_ANALYSIS && !SHADER_TARGET_SURFACE_ANALYSIS_MOJOSHADER))
|
|
#define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) tex.SampleLevel (sampler##tex,coord, lod)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) tex.SampleLevel (sampler##samplertex,coord, lod)
|
|
#else
|
|
#define UNITY_SAMPLE_TEX2D_LOD(tex,coord,lod) tex2D (tex,coord,0,lod)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord,lod) tex2D (tex,coord,0,lod)
|
|
#endif
|
|
|
|
#undef GetWorldToObjectMatrix()
|
|
|
|
#define GetWorldToObjectMatrix() unity_WorldToObject
|
|
#endif
|
|
|
|
float3 GetCameraWorldPosition()
|
|
{
|
|
#if _HDRP
|
|
return GetCameraRelativePositionWS(_WorldSpaceCameraPos);
|
|
#else
|
|
return _WorldSpaceCameraPos;
|
|
#endif
|
|
}
|
|
|
|
#if _GRABPASSUSED
|
|
#if _STANDARD
|
|
TEXTURE2D(%GRABTEXTURE%);
|
|
SAMPLER(sampler_%GRABTEXTURE%);
|
|
#endif
|
|
|
|
half3 GetSceneColor(float2 uv)
|
|
{
|
|
#if _STANDARD
|
|
return SAMPLE_TEXTURE2D(%GRABTEXTURE%, sampler_%GRABTEXTURE%, uv).rgb;
|
|
#else
|
|
return SHADERGRAPH_SAMPLE_SCENE_COLOR(uv);
|
|
#endif
|
|
}
|
|
#endif
|
|
#if _STANDARD
|
|
UNITY_DECLARE_DEPTH_TEXTURE(_CameraDepthTexture);
|
|
float GetSceneDepth(float2 uv) { return SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv); }
|
|
float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv)); }
|
|
float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv)); }
|
|
#else
|
|
float GetSceneDepth(float2 uv) { return SHADERGRAPH_SAMPLE_SCENE_DEPTH(uv); }
|
|
float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv), _ZBufferParams); }
|
|
float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv), _ZBufferParams); }
|
|
#endif
|
|
|
|
float3 GetWorldPositionFromDepthBuffer(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
float eye = GetLinearEyeDepth(uv);
|
|
float3 camView = mul((float3x3)GetObjectToWorldMatrix(), transpose(mul(GetWorldToObjectMatrix(), UNITY_MATRIX_I_V)) [2].xyz);
|
|
|
|
float dt = dot(worldSpaceViewDir, camView);
|
|
float3 div = worldSpaceViewDir/dt;
|
|
float3 wpos = (eye * div) + GetCameraWorldPosition();
|
|
return wpos;
|
|
}
|
|
|
|
#if _HDRP
|
|
float3 ObjectToWorldSpacePosition(float3 pos)
|
|
{
|
|
return GetAbsolutePositionWS(TransformObjectToWorld(pos));
|
|
}
|
|
#else
|
|
float3 ObjectToWorldSpacePosition(float3 pos)
|
|
{
|
|
return TransformObjectToWorld(pos);
|
|
}
|
|
#endif
|
|
|
|
#if _STANDARD
|
|
UNITY_DECLARE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture);
|
|
float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
float4 depthNorms = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture, uv);
|
|
float3 norms = DecodeViewNormalStereo(depthNorms);
|
|
norms = mul((float3x3)GetWorldToViewMatrix(), norms) * 0.5 + 0.5;
|
|
return norms;
|
|
}
|
|
#elif _HDRP && !_DECALSHADER
|
|
float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
NormalData nd;
|
|
DecodeFromNormalBuffer(_ScreenSize.xy * uv, nd);
|
|
return nd.normalWS;
|
|
}
|
|
#elif _URP
|
|
#if (SHADER_LIBRARY_VERSION_MAJOR >= 10)
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl"
|
|
#endif
|
|
|
|
float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
#if (SHADER_LIBRARY_VERSION_MAJOR >= 10)
|
|
return SampleSceneNormals(uv);
|
|
#else
|
|
float3 wpos = GetWorldPositionFromDepthBuffer(uv, worldSpaceViewDir);
|
|
return normalize(-cross(ddx(wpos), ddy(wpos))) * 0.5 + 0.5;
|
|
#endif
|
|
|
|
}
|
|
#endif
|
|
|
|
#if _HDRP
|
|
|
|
half3 UnpackNormalmapRGorAG(half4 packednormal)
|
|
{
|
|
packednormal.x *= packednormal.w;
|
|
|
|
half3 normal;
|
|
normal.xy = packednormal.xy * 2 - 1;
|
|
normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy)));
|
|
return normal;
|
|
}
|
|
half3 UnpackNormal(half4 packednormal)
|
|
{
|
|
#if defined(UNITY_NO_DXT5nm)
|
|
return packednormal.xyz * 2 - 1;
|
|
#else
|
|
return UnpackNormalmapRGorAG(packednormal);
|
|
#endif
|
|
}
|
|
#endif
|
|
#if _HDRP || _URP
|
|
|
|
half3 UnpackScaleNormal(half4 packednormal, half scale)
|
|
{
|
|
#ifndef UNITY_NO_DXT5nm
|
|
packednormal.x *= packednormal.w;
|
|
#endif
|
|
half3 normal;
|
|
normal.xy = (packednormal.xy * 2 - 1) * scale;
|
|
normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy)));
|
|
return normal;
|
|
}
|
|
|
|
#endif
|
|
void GetSun(out float3 lightDir, out float3 color)
|
|
{
|
|
lightDir = float3(0.5, 0.5, 0);
|
|
color = 1;
|
|
#if _HDRP
|
|
if (_DirectionalLightCount > 0)
|
|
{
|
|
DirectionalLightData light = _DirectionalLightDatas[0];
|
|
lightDir = -light.forward.xyz;
|
|
color = light.color;
|
|
}
|
|
#elif _STANDARD
|
|
lightDir = normalize(_WorldSpaceLightPos0.xyz);
|
|
color = _LightColor0.rgb;
|
|
#elif _URP
|
|
Light light = GetMainLight();
|
|
lightDir = light.direction;
|
|
color = light.color;
|
|
#endif
|
|
}
|
|
CBUFFER_START(UnityPerMaterial)
|
|
half _LightSource;
|
|
|
|
half _ShadingMode;
|
|
half _LightFunction;
|
|
half _UseAlphaOnlyFromBaseMap;
|
|
half _EnableToonShading;
|
|
half _ShadingFunction;
|
|
int _NumberOfCells;
|
|
float _CellTransitionSmoothness;
|
|
half _RoundingMethod;
|
|
half _SumLightsBeforePosterization;
|
|
half _ShadingUseLightColors;
|
|
half _GradientMode;
|
|
half _GradientBlending;
|
|
float _GradientBlendFactor;
|
|
|
|
float4 _GradientTex_TexelSize;
|
|
half _ShadingAffectedByNormalMap;
|
|
half _EnableShadows;
|
|
float4 _CoreShadowColor;
|
|
float _TerminatorPosition;
|
|
float _TerminatorWidth;
|
|
float _TerminatorSmoothness;
|
|
float4 _FormShadowColor;
|
|
|
|
half _EnableCastShadows;
|
|
float _CastShadowsStrength;
|
|
float _CastShadowsSmoothness;
|
|
half _CastShadowColorMode;
|
|
float4 _CastShadowColor;
|
|
half _EnableSpecular;
|
|
half _SpecularBlending;
|
|
half4 _SpecularColor;
|
|
float _SpecularSize;
|
|
float _SpecularSmoothness;
|
|
float _SpecularOpacity;
|
|
half _SpecularAffectedByNormalMap;
|
|
half _SpecularUseLightColors;
|
|
half _EnableRim;
|
|
half _RimBlending;
|
|
float4 _RimColor;
|
|
float _RimSize;
|
|
float _RimSmoothness;
|
|
float _RimOpacity;
|
|
half _RimAffectedArea;
|
|
half _RimAffectedByNormalMap;
|
|
half _EnableStyling;
|
|
|
|
half _EnableStylingDistanceFade;
|
|
float _StylingDFStartingDistance;
|
|
float _StylingDFFalloff;
|
|
half _StylingAdjustDistanceFadeValue;
|
|
float _StylingDistanceFadeValue;
|
|
half _HatchingAffectedByNormalMap;
|
|
half _EnableAntiAliasing;
|
|
float4 _NoiseTex2_TexelSize;
|
|
half _EnableShadingStyling;
|
|
half _StylingShadingSyncWithOtherStyling;
|
|
half _ShadingStyle;
|
|
half _SyncWithLightPartitioning;
|
|
half _NumberOfCellsHatching;
|
|
half _StylingTerminatorPosition;
|
|
float _StylingOvermodelingFactor;
|
|
half _StylingShadingBlending;
|
|
half _StylingShadingIsInverted;
|
|
half _DrawSpace;
|
|
|
|
half _UVSet;
|
|
|
|
half _SSCameraDistanceScaled;
|
|
half _AnchorSSToObjectsOrigin;
|
|
half _CoordinateSystem;
|
|
half _PolarCenterMode;
|
|
float4 _PolarCenter;
|
|
float _StylingShadingDensity;
|
|
float _StylingShadingInitialDirection;
|
|
float _StylingShadingRotationBetweenCells;
|
|
float _StylingShadingHalftonesOffset;
|
|
float4 _StylingColor;
|
|
float _StylingShadingOpacity;
|
|
float _StylingShadingOpacityFalloff;
|
|
float _StylingShadingThicknessControl;
|
|
float _StylingShadingThickness;
|
|
float _StylingShadingThicknessFalloff;
|
|
float _StylingShadingHardness;
|
|
float _StylingShadingHalftonesRoundness;
|
|
float _StylingShadingHalftonesRoundnessFalloff;
|
|
half _StylingShadingEnableDashes;
|
|
float _StylingShadingDashesSize;
|
|
half _StylingShadingDashesUseHatchingDensity;
|
|
float _StylingShadingDashesDensity;
|
|
float _StylingShadingDashesType;
|
|
float _StylingShadingDashesRoundness;
|
|
float _StylingShadingDashesOffset;
|
|
|
|
float _StylingShadingDashesTransitionPosition;
|
|
float _StylingShadingDashesTransitionSoftness;
|
|
half _EnableShadingRandomizer;
|
|
float _ShadingNoise1Size;
|
|
float _ShadingNoise1Seed;
|
|
float _ShadingNoise2Seed;
|
|
float _NoiseIntensity;
|
|
half _SpacingRandomMode;
|
|
float _SpacingRandomIntensity;
|
|
half _OpacityRandomMode;
|
|
float _OpacityRandomIntensity;
|
|
half _LengthRandomMode;
|
|
float _LengthRandomIntensity;
|
|
half _HardnessRandomMode;
|
|
float _HardnessRandomIntensity;
|
|
half _ThicknessRandomMode;
|
|
float _ThicknesshRandomIntensity;
|
|
half _EnableCastShadowsStyling;
|
|
half _CastShadowsNumberOfCellsHatching;
|
|
float _StylingCastShadowsSmoothness;
|
|
half _StylingCastShadowsSyncWithOtherStyling;
|
|
half _CastShadowsStyle;
|
|
half _StylingCastShadowsBlending;
|
|
half _StylingCastShadowsIsInverted;
|
|
half _CastShadowsDrawSpace;
|
|
half _CastShadowsUVSet;
|
|
half _CastShadowsSSCameraDistanceScaled;
|
|
half _CastShadowsAnchorSSToObjectsOrigin;
|
|
half _CastShadowsCoordinateSystem;
|
|
half _CastShadowsPolarCenterMode;
|
|
float4 _CastShadowsPolarCenter;
|
|
float _StylingCastShadowsDensity;
|
|
float _StylingCastShadowsInitialDirection;
|
|
float _StylingCastShadowsRotationBetweenCells;
|
|
float _StylingCastShadowsHalftonesOffset;
|
|
float4 _StylingCastShadowsColor;
|
|
float _StylingCastShadowsOpacity;
|
|
float _StylingCastShadowsOpacityFalloff;
|
|
half _StylingCastShadowsThicknessControl;
|
|
float _StylingCastShadowsThickness;
|
|
float _StylingCastShadowsThicknessFalloff;
|
|
float _StylingCastShadowsHardness;
|
|
float _StylingCastShadowsHalftonesRoundness;
|
|
float _StylingCastShadowsHalftonesRoundnessFalloff;
|
|
half _StylingCastShadowsEnableDashes;
|
|
float _StylingCastShadowsDashesSize;
|
|
half _StylingCastShadowsDashesUseHatchingDensity;
|
|
float _StylingCastShadowsDashesDensity;
|
|
float _StylingCastShadowsDashesRoundness;
|
|
float _StylingCastShadowsDashesType;
|
|
float _StylingCastShadowsDashesOffset;
|
|
|
|
float _StylingCastShadowsDashesTransitionPosition;
|
|
float _StylingCastShadowsDashesTransitionSoftness;
|
|
half _EnableCastShadowsRandomizer;
|
|
float _CastShadowsNoise1Size;
|
|
float _CastShadowsNoise1Seed;
|
|
float _CastShadowsNoise2Seed;
|
|
float _CastShadowsNoiseIntensity;
|
|
half _CastShadowsSpacingRandomMode;
|
|
float _CastShadowsSpacingRandomIntensity;
|
|
half _CastShadowsOpacityRandomMode;
|
|
float _CastShadowsOpacityRandomIntensity;
|
|
half _CastShadowsHardnessRandomMode;
|
|
float _CastShadowsHardnessRandomIntensity;
|
|
half _CastShadowsLengthRandomMode;
|
|
float _CastShadowsLengthRandomIntensity;
|
|
half _CastShadowsThicknessRandomMode;
|
|
float _CastShadowsThicknesshRandomIntensity;
|
|
half _EnableSpecularStyling;
|
|
half _SyncWithSpecular;
|
|
float _StylingSpecularSize;
|
|
float _StylingSpecularSmoothness;
|
|
half _StylingSpecularCutOutShading;
|
|
half _StylingSpecularUseLightColors;
|
|
half _StylingSpecularSyncWithOtherStyling;
|
|
half _SpecularStyle;
|
|
half _StylingSpecularBlending;
|
|
half _StylingSpecularIsInverted;
|
|
half _SpecularDrawSpace;
|
|
half _SpecularUVSet;
|
|
half _SpecularSSCameraDistanceScaled;
|
|
half _SpecularAnchorSSToObjectsOrigin;
|
|
half _SpecularCoordinateSystem;
|
|
half _SpecularPolarCenterMode;
|
|
float4 _SpecularPolarCenter;
|
|
float _StylingSpecularDensity;
|
|
float _StylingSpecularRotation;
|
|
float _StylingSpecularHalftonesOffset;
|
|
float4 _StylingSpecularColor;
|
|
float _StylingSpecularOpacity;
|
|
float _StylingSpecularOpacityFalloff;
|
|
float _StylingSpecularThicknessControl;
|
|
float _StylingSpecularThickness;
|
|
float _StylingSpecularThicknessFalloff;
|
|
float _StylingSpecularHardness;
|
|
float _StylingSpecularHalftonesRoundness;
|
|
float _StylingSpecularHalftonesRoundnessFalloff;
|
|
half _StylingSpecularEnableDashes;
|
|
float _StylingSpecularDashesSize;
|
|
half _StylingSpecularDashesUseHatchingDensity;
|
|
float _StylingSpecularDashesDensity;
|
|
float _StylingSpecularDashesRoundness;
|
|
float _StylingSpecularDashesType;
|
|
float _StylingSpecularDashesOffset;
|
|
|
|
float _StylingSpecularDashesTransitionPosition;
|
|
float _StylingSpecularDashesTransitionSoftness;
|
|
float _EnableSpecularRandomizer;
|
|
float _SpecularNoise1Size;
|
|
float _SpecularNoise1Seed;
|
|
float _SpecularNoise2Seed;
|
|
float _SpecularNoiseIntensity;
|
|
half _SpecularSpacingRandomMode;
|
|
float _SpecularSpacingRandomIntensity;
|
|
half _SpecularOpacityRandomMode;
|
|
float _SpecularOpacityRandomIntensity;
|
|
half _SpecularLengthRandomMode;
|
|
float _SpecularLengthRandomIntensity;
|
|
half _SpecularHardnessRandomMode;
|
|
float _SpecularHardnessRandomIntensity;
|
|
half _SpecularThicknessRandomMode;
|
|
float _SpecularThicknesshRandomIntensity;
|
|
half _EnableRimStyling;
|
|
half _StylingRimSyncWithOtherStyling;
|
|
half _SyncWithRim;
|
|
float _StylingRimSize;
|
|
float _StylingRimSmoothness;
|
|
half _StylingRimAffectedArea;
|
|
half _RimStyle;
|
|
half _StylingRimBlending;
|
|
half _StylingRimIsInverted;
|
|
half _RimDrawSpace;
|
|
half _RimUVSet;
|
|
half _RimSSCameraDistanceScaled;
|
|
half _RimAnchorSSToObjectsOrigin;
|
|
half _RimCoordinateSystem;
|
|
half _RimPolarCenterMode;
|
|
float4 _RimPolarCenter;
|
|
float _StylingRimDensity;
|
|
float _StylingRimRotation;
|
|
float _StylingRimHalftonesOffset;
|
|
float4 _StylingRimColor;
|
|
float _StylingRimOpacity;
|
|
float _StylingRimOpacityFalloff;
|
|
float _StylingRimThicknessControl;
|
|
float _StylingRimThickness;
|
|
float _StylingRimThicknessFalloff;
|
|
float _StylingRimHardness;
|
|
float _StylingRimHalftonesRoundness;
|
|
float _StylingRimHalftonesRoundnessFalloff;
|
|
half _StylingRimEnableDashes;
|
|
float _StylingRimDashesSize;
|
|
half _StylingRimDashesUseHatchingDensity;
|
|
float _StylingRimDashesDensity;
|
|
float _StylingRimDashesRoundness;
|
|
float _StylingRimDashesType;
|
|
float _StylingRimDashesOffset;
|
|
|
|
float _StylingRimDashesTransitionPosition;
|
|
float _StylingRimDashesTransitionSoftness;
|
|
float _EnableRimRandomizer;
|
|
float _RimNoise1Size;
|
|
float _RimNoise1Seed;
|
|
float _RimNoise2Seed;
|
|
float _RimNoiseIntensity;
|
|
half _RimSpacingRandomMode;
|
|
float _RimSpacingRandomIntensity;
|
|
half _RimOpacityRandomMode;
|
|
float _RimOpacityRandomIntensity;
|
|
half _RimLengthRandomMode;
|
|
float _RimLengthRandomIntensity;
|
|
half _RimHardnessRandomMode;
|
|
float _RimHardnessRandomIntensity;
|
|
half _RimThicknessRandomMode;
|
|
float _RimThicknesshRandomIntensity;
|
|
half4 _OutlineColor;
|
|
half _OutlineWidth;
|
|
half _EnableOutline;
|
|
half _OutlineConstantScreenWidth;
|
|
half4 _BaseColor;
|
|
float _BumpScale;
|
|
float4 _BaseMap_ST;
|
|
half _Cutoff;
|
|
half4 _EmissionColor;
|
|
half4 _SpecColor;
|
|
float _Smoothness;
|
|
float4 _DetailAlbedoMap_ST;
|
|
half _Metallic;
|
|
half _Parallax;
|
|
half _OcclusionStrength;
|
|
half _DetailAlbedoMapScale;
|
|
half _DetailNormalMapScale;
|
|
#if UNITY_VERSION < 202200
|
|
float _AlphaToMaskAvailable;
|
|
#endif
|
|
CBUFFER_END
|
|
sampler2D _NoiseMap1;
|
|
sampler2D _NoiseMap2;
|
|
|
|
sampler2D _HatchingMap;
|
|
sampler2D _GradientTex;
|
|
void Ext_ModifyVertex0 (inout VertexData v, inout ExtraV2F d)
|
|
{
|
|
#if defined(CURVEDWORLD_IS_INSTALLED) && !defined(CURVEDWORLD_DISABLED_ON)
|
|
#ifdef CURVEDWORLD_NORMAL_TRANSFORMATION_ON
|
|
CURVEDWORLD_TRANSFORM_VERTEX_AND_NORMAL(v.vertex, v.normal, v.tangent)
|
|
#else
|
|
CURVEDWORLD_TRANSFORM_VERTEX(v.vertex)
|
|
#endif
|
|
#endif
|
|
float4x4 UnityObjectToClipPosMatrix = mul(GetWorldToHClipMatrix(), GetObjectToWorldMatrix());
|
|
float4 pos = mul(UnityObjectToClipPosMatrix, v.vertex);
|
|
float4 objectOriginClipPos = mul(UnityObjectToClipPosMatrix, float4(0, 0, 0, 1));
|
|
objectOriginClipPos.xy = clamp(objectOriginClipPos.xy, -1.0*objectOriginClipPos.w, 1.0*objectOriginClipPos.w);
|
|
float4 originScreenPos = ComputeScreenPos(objectOriginClipPos);
|
|
float2 originScreenUV = originScreenPos.xy/originScreenPos.w;
|
|
float4 screenPos = ComputeScreenPos(pos);
|
|
float2 uv = ((screenPos.xy) / screenPos.w);
|
|
float4 ssss = ComputeScreenPos(pos);
|
|
d.extraV2F0 = float4(originScreenUV,originScreenUV);
|
|
}
|
|
void Ext_SurfaceFunction0 (inout Surface o, ShaderData d)
|
|
{
|
|
float2 test = d.texcoord1.xy;
|
|
test = d.texcoord2.xy;
|
|
test = d.texcoord3.xy;
|
|
|
|
}
|
|
TEXTURE2D(_BaseMap); SAMPLER(sampler_BaseMap);
|
|
TEXTURE2D(_BumpMap); SAMPLER(sampler_BumpMap);
|
|
TEXTURE2D(_EmissionMap); SAMPLER(sampler_EmissionMap);
|
|
TEXTURE2D(_SpecGlossMap); SAMPLER(sampler_SpecGlossMap);
|
|
TEXTURE2D(_ParallaxMap); SAMPLER(sampler_ParallaxMap);
|
|
TEXTURE2D(_OcclusionMap); SAMPLER(sampler_OcclusionMap);
|
|
TEXTURE2D(_DetailMask); SAMPLER(sampler_DetailMask);
|
|
TEXTURE2D(_DetailAlbedoMap); SAMPLER(sampler_DetailAlbedoMap);
|
|
TEXTURE2D(_DetailNormalMap); SAMPLER(sampler_DetailNormalMap);
|
|
TEXTURE2D(_MetallicGlossMap); SAMPLER(sampler_MetallicGlossMap);
|
|
TEXTURE2D(_ClearCoatMap); SAMPLER(sampler_ClearCoatMap);
|
|
#if defined(_DETAIL_MULX2) || defined(_DETAIL_SCALED)
|
|
#define _DETAIL
|
|
#endif
|
|
|
|
#if _SPECULAR_SETUP
|
|
#define _USESPECULAR 1
|
|
#else
|
|
#undef _USESPECULAR
|
|
#endif
|
|
float SharpenAlphaMy(float alpha, float alphaClipTreshold)
|
|
{
|
|
return saturate((alpha - alphaClipTreshold) / max(fwidth(alpha), 0.0001) + 0.5);
|
|
}
|
|
#if UNITY_VERSION < 202200
|
|
half3 AlphaModulate(half3 albedo, half alpha)
|
|
{
|
|
#if defined(_ALPHAMODULATE_ON)
|
|
return lerp(half3(1.0, 1.0, 1.0), albedo, alpha);
|
|
#else
|
|
return albedo;
|
|
#endif
|
|
}
|
|
|
|
#if defined(_ALPHATEST_ON)
|
|
bool IsAlphaToMaskAvailable()
|
|
{
|
|
return (_AlphaToMaskAvailable != 0.0);
|
|
}
|
|
half AlphaClip(half alpha, half cutoff)
|
|
{
|
|
half clippedAlpha = (alpha >= cutoff) ? float(alpha) : 0.0;
|
|
|
|
half alphaToCoverageAlpha = SharpenAlphaMy(alpha, cutoff);
|
|
|
|
alpha = IsAlphaToMaskAvailable() ? alphaToCoverageAlpha : clippedAlpha;
|
|
clip(alpha - 0.0001);
|
|
|
|
return alpha;
|
|
}
|
|
#endif
|
|
#endif
|
|
#if UNITY_VERSION < 202220
|
|
int _DebugSceneOverrideMode;
|
|
#endif
|
|
|
|
bool IsAlphaDiscardEnabledMy()
|
|
{
|
|
#if defined(DEBUG_DISPLAY)
|
|
return (_DebugSceneOverrideMode == DEBUGSCENEOVERRIDEMODE_NONE);
|
|
#else
|
|
return true;
|
|
#endif
|
|
}
|
|
half AlphaMy(half albedoAlpha, half4 color, half cutoff)
|
|
{
|
|
#if !defined(_SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A) && !defined(_GLOSSINESS_FROM_BASE_ALPHA)
|
|
half alpha = albedoAlpha * color.a;
|
|
#else
|
|
half alpha = color.a;
|
|
#endif
|
|
#ifdef _ALPHATEST_ON
|
|
if (IsAlphaDiscardEnabledMy())
|
|
alpha = AlphaClip(alpha, cutoff);
|
|
#endif
|
|
|
|
return alpha;
|
|
}
|
|
half4 SampleAlbedoAlpha(float2 uv, TEXTURE2D_PARAM(albedoAlphaMap, sampler_albedoAlphaMap))
|
|
{
|
|
return half4(SAMPLE_TEXTURE2D(albedoAlphaMap, sampler_albedoAlphaMap, uv));
|
|
}
|
|
half3 SampleNormal(float2 uv, TEXTURE2D_PARAM(bumpMap, sampler_bumpMap), half scale = half(1.0))
|
|
{
|
|
#ifdef _NORMALMAP
|
|
half4 n = SAMPLE_TEXTURE2D(bumpMap, sampler_bumpMap, uv);
|
|
#if BUMP_SCALE_NOT_SUPPORTED
|
|
return UnpackNormal(n);
|
|
#else
|
|
return UnpackNormalScale(n, scale);
|
|
#endif
|
|
#else
|
|
return half3(0.0h, 0.0h, 1.0h);
|
|
#endif
|
|
}
|
|
#if UNITY_VERSION < 202100
|
|
half4 SampleSpecularSmoothnessMy(half2 uv, half alpha, half4 specColor, TEXTURE2D_PARAM( specMap, sampler_specMap))
|
|
{
|
|
half4 specularSmoothness = half4(0.0h, 0.0h, 0.0h, 1.0h);
|
|
#ifdef _SPECGLOSSMAP
|
|
specularSmoothness = SAMPLE_TEXTURE2D(specMap, sampler_specMap, uv) * specColor;
|
|
#elif defined(_SPECULAR_COLOR)
|
|
specularSmoothness = specColor;
|
|
#endif
|
|
|
|
#ifdef _GLOSSINESS_FROM_BASE_ALPHA
|
|
specularSmoothness.a = exp2(10 * alpha + 1);
|
|
#else
|
|
specularSmoothness.a = exp2(10 * specularSmoothness.a + 1);
|
|
#endif
|
|
return specularSmoothness;
|
|
}
|
|
#else
|
|
|
|
half4 SampleSpecularSmoothnessMy(float2 uv, half alpha, half4 specColor, TEXTURE2D_PARAM(specMap, sampler_specMap))
|
|
{
|
|
half4 specularSmoothness = half4(0, 0, 0, 1);
|
|
#ifdef _SPECGLOSSMAP
|
|
specularSmoothness = SAMPLE_TEXTURE2D(specMap, sampler_specMap, uv) * specColor;
|
|
#elif defined(_SPECULAR_COLOR)
|
|
specularSmoothness = specColor;
|
|
#endif
|
|
|
|
#ifdef _GLOSSINESS_FROM_BASE_ALPHA
|
|
specularSmoothness.a = alpha;
|
|
#endif
|
|
|
|
return specularSmoothness;
|
|
}
|
|
#endif
|
|
half3 SampleEmissionMy(float2 uv, half3 emissionColor, TEXTURE2D_PARAM(emissionMap, sampler_emissionMap))
|
|
{
|
|
#ifndef _EMISSION
|
|
return 0;
|
|
#else
|
|
return SAMPLE_TEXTURE2D(emissionMap, sampler_emissionMap, uv).rgb * emissionColor;
|
|
#endif
|
|
}
|
|
#ifndef BUILTIN_TARGET_API
|
|
half2 ParallaxOffset1Step(half height, half amplitude, half3 viewDirTS)
|
|
{
|
|
height = height * amplitude - amplitude / 2.0;
|
|
half3 v = normalize(viewDirTS);
|
|
v.z += 0.42;
|
|
return height * (v.xy / v.z);
|
|
}
|
|
#endif
|
|
|
|
float2 ParallaxMapping(TEXTURE2D_PARAM(heightMap, sampler_heightMap), half3 viewDirTS, half scale, float2 uv)
|
|
{
|
|
half h = SAMPLE_TEXTURE2D(heightMap, sampler_heightMap, uv).g;
|
|
float2 offset = ParallaxOffset1Step(h, scale, viewDirTS);
|
|
return offset;
|
|
}
|
|
#ifdef _SPECULAR_SETUP
|
|
#define SAMPLE_METALLICSPECULAR(uv) SAMPLE_TEXTURE2D(_SpecGlossMap, sampler_SpecGlossMap, uv)
|
|
#else
|
|
#define SAMPLE_METALLICSPECULAR(uv) SAMPLE_TEXTURE2D(_MetallicGlossMap, sampler_MetallicGlossMap, uv)
|
|
#endif
|
|
|
|
half4 SampleMetallicSpecGloss(float2 uv, half albedoAlpha)
|
|
{
|
|
half4 specGloss;
|
|
|
|
#ifdef _METALLICSPECGLOSSMAP
|
|
specGloss = half4(SAMPLE_METALLICSPECULAR(uv));
|
|
#ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
|
specGloss.a = albedoAlpha * _Smoothness;
|
|
#else
|
|
specGloss.a *= _Smoothness;
|
|
#endif
|
|
#else
|
|
#if _SPECULAR_SETUP
|
|
specGloss.rgb = _SpecColor.rgb;
|
|
#else
|
|
specGloss.rgb = _Metallic.rrr;
|
|
#endif
|
|
|
|
#ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
|
specGloss.a = albedoAlpha * _Smoothness;
|
|
#else
|
|
specGloss.a = _Smoothness;
|
|
#endif
|
|
#endif
|
|
|
|
return specGloss;
|
|
}
|
|
|
|
half SampleOcclusion(float2 uv)
|
|
{
|
|
#ifdef _OCCLUSIONMAP
|
|
half occ = SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
|
|
return LerpWhiteTo(occ, _OcclusionStrength);
|
|
#else
|
|
return half(1.0);
|
|
#endif
|
|
}
|
|
half SampleOcclusionMy(float2 uv)
|
|
{
|
|
#ifdef _OCCLUSIONMAP
|
|
#if defined(SHADER_API_GLES)
|
|
return SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
|
|
#else
|
|
half occ = SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
|
|
return LerpWhiteTo(occ, _OcclusionStrength);
|
|
#endif
|
|
#else
|
|
return 1.0;
|
|
#endif
|
|
}
|
|
half2 SampleClearCoat(float2 uv)
|
|
{
|
|
#if defined(_CLEARCOAT) || defined(_CLEARCOATMAP)
|
|
half2 clearCoatMaskSmoothness = half2(_ClearCoatMask, _ClearCoatSmoothness);
|
|
|
|
#if defined(_CLEARCOATMAP)
|
|
clearCoatMaskSmoothness *= SAMPLE_TEXTURE2D(_ClearCoatMap, sampler_ClearCoatMap, uv).rg;
|
|
#endif
|
|
|
|
return clearCoatMaskSmoothness;
|
|
#else
|
|
return half2(0.0, 1.0);
|
|
#endif
|
|
}
|
|
|
|
void ApplyPerPixelDisplacement(half3 viewDirTS, inout float2 uv)
|
|
{
|
|
#if defined(_PARALLAXMAP)
|
|
uv += ParallaxMapping(TEXTURE2D_ARGS(_ParallaxMap, sampler_ParallaxMap), viewDirTS, _Parallax, uv);
|
|
#endif
|
|
}
|
|
|
|
half3 ScaleDetailAlbedo(half3 detailAlbedo, half scale)
|
|
{
|
|
return half(2.0) * detailAlbedo * scale - scale + half(1.0);
|
|
}
|
|
|
|
half3 ApplyDetailAlbedo(float2 detailUv, half3 albedo, half detailMask)
|
|
{
|
|
#if defined(_DETAIL)
|
|
half3 detailAlbedo = SAMPLE_TEXTURE2D(_DetailAlbedoMap, sampler_DetailAlbedoMap, detailUv).rgb;
|
|
#if defined(_DETAIL_SCALED)
|
|
detailAlbedo = ScaleDetailAlbedo(detailAlbedo, _DetailAlbedoMapScale);
|
|
#else
|
|
detailAlbedo = half(2.0) * detailAlbedo;
|
|
#endif
|
|
|
|
return albedo * LerpWhiteTo(detailAlbedo, detailMask);
|
|
#else
|
|
return albedo;
|
|
#endif
|
|
}
|
|
|
|
half3 ApplyDetailNormal(float2 detailUv, half3 normalTS, half detailMask)
|
|
{
|
|
#if defined(_DETAIL)
|
|
#if BUMP_SCALE_NOT_SUPPORTED
|
|
half3 detailNormalTS = UnpackNormal(SAMPLE_TEXTURE2D(_DetailNormalMap, sampler_DetailNormalMap, detailUv));
|
|
#else
|
|
half3 detailNormalTS = UnpackNormalScale(SAMPLE_TEXTURE2D(_DetailNormalMap, sampler_DetailNormalMap, detailUv), _DetailNormalMapScale);
|
|
#endif
|
|
detailNormalTS = normalize(detailNormalTS);
|
|
|
|
return lerp(normalTS, BlendNormalRNM(normalTS, detailNormalTS), detailMask);
|
|
#else
|
|
return normalTS;
|
|
#endif
|
|
}
|
|
void Ext_SurfaceFunction1 (inout Surface o, ShaderData d)
|
|
{
|
|
|
|
float4 texcoords;
|
|
texcoords.xy = d.texcoord0.xy * _BaseMap_ST.xy + _BaseMap_ST.zw;
|
|
float2 uv = texcoords.xy;
|
|
|
|
#if _SHADING_BLINNPHONG || _SHADING_COLOR
|
|
half4 diffuseAlpha = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, texcoords.xy);
|
|
o.Albedo = diffuseAlpha.rgb * _BaseColor.rgb;
|
|
#if !_PASSFORWARD
|
|
if(_EnableToonShading == 0 || _ShadingAffectedByNormalMap == 1)
|
|
{
|
|
o.Normal = SampleNormal(texcoords.xy, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
}
|
|
#else
|
|
o.Normal = SampleNormal(texcoords.xy, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
#endif
|
|
o.Alpha = diffuseAlpha.a;
|
|
o.Alpha = o.Alpha * _BaseColor.a;
|
|
AlphaDiscard(o.Alpha, _Cutoff);
|
|
half3 emission = SampleEmissionMy(uv, _EmissionColor.rgb, TEXTURE2D_ARGS(_EmissionMap, sampler_EmissionMap));
|
|
o.Emission = emission;
|
|
#endif
|
|
|
|
if(_ShadingMode == 1 && _LightFunction == 0 )
|
|
{
|
|
#if _SHADING_BLINNPHONG
|
|
half4 specular = SampleSpecularSmoothnessMy(uv, o.Alpha, _SpecColor, TEXTURE2D_ARGS(_SpecGlossMap, sampler_SpecGlossMap));
|
|
half smoothness = specular.a;
|
|
|
|
o.Specular = specular;
|
|
o.Smoothness = smoothness;
|
|
#endif
|
|
|
|
}
|
|
else if (_ShadingMode == 1 && _LightFunction == 1)
|
|
{
|
|
#if _SHADING_PBR
|
|
#if defined(_PARALLAXMAP)
|
|
ApplyPerPixelDisplacement(d.tangentSpaceViewDir, uv);
|
|
#endif
|
|
half4 albedoAlpha = SampleAlbedoAlpha(uv, TEXTURE2D_ARGS(_BaseMap, sampler_BaseMap));
|
|
o.Alpha = AlphaMy(albedoAlpha.a, _BaseColor, _Cutoff);
|
|
|
|
half4 specGloss = SampleMetallicSpecGloss(uv, albedoAlpha.a);
|
|
o.Albedo = albedoAlpha.rgb * _BaseColor.rgb;
|
|
o.Albedo = AlphaModulate(o.Albedo, o.Alpha);
|
|
#if _SPECULAR_SETUP
|
|
o.Metallic = half(1.0);
|
|
o.Specular = specGloss.rgb;
|
|
#else
|
|
o.Metallic = specGloss.r;
|
|
o.Specular = half3(0.0, 0.0, 0.0);
|
|
#endif
|
|
o.Smoothness = specGloss.a;
|
|
#if !_PASSFORWARD
|
|
if(_EnableToonShading == 0 || _ShadingAffectedByNormalMap == 1)
|
|
{
|
|
o.Normal = SampleNormal(uv, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
}
|
|
#else
|
|
o.Normal = SampleNormal(uv, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
#endif
|
|
o.Occlusion = SampleOcclusion(uv);
|
|
o.Emission = SampleEmissionMy(uv, _EmissionColor.rgb, TEXTURE2D_ARGS(_EmissionMap, sampler_EmissionMap));
|
|
|
|
#if defined(_DETAIL)
|
|
half detailMask = SAMPLE_TEXTURE2D(_DetailMask, sampler_DetailMask, uv).a;
|
|
float2 detailUv = uv * _DetailAlbedoMap_ST.xy + _DetailAlbedoMap_ST.zw;
|
|
o.Albedo = ApplyDetailAlbedo(detailUv, o.Albedo, detailMask);
|
|
o.Normal = ApplyDetailNormal(detailUv, o.Normal, detailMask);
|
|
#endif
|
|
|
|
#endif
|
|
}
|
|
|
|
}
|
|
void ChainSurfaceFunction(inout Surface l, inout ShaderData d)
|
|
{
|
|
Ext_SurfaceFunction0(l, d);
|
|
Ext_SurfaceFunction1(l, d);
|
|
}
|
|
|
|
#if !_DECALSHADER
|
|
|
|
void ChainModifyVertex(inout VertexData v, inout VertexToPixel v2p, float4 time)
|
|
{
|
|
ExtraV2F d;
|
|
ZERO_INITIALIZE(ExtraV2F, d);
|
|
ZERO_INITIALIZE(Blackboard, d.blackboard);
|
|
d.time = time;
|
|
|
|
Ext_ModifyVertex0(v, d);
|
|
v2p.extraV2F0 = d.extraV2F0;
|
|
}
|
|
|
|
void ChainModifyTessellatedVertex(inout VertexData v, inout VertexToPixel v2p)
|
|
{
|
|
ExtraV2F d;
|
|
ZERO_INITIALIZE(ExtraV2F, d);
|
|
ZERO_INITIALIZE(Blackboard, d.blackboard);
|
|
d.extraV2F0 = v2p.extraV2F0;
|
|
v2p.extraV2F0 = d.extraV2F0;
|
|
}
|
|
|
|
void ChainFinalColorForward(inout Surface l, inout ShaderData d, inout half4 color)
|
|
{
|
|
}
|
|
|
|
void ChainFinalGBufferStandard(inout Surface s, inout ShaderData d, inout half4 GBuffer0, inout half4 GBuffer1, inout half4 GBuffer2, inout half4 outEmission, inout half4 outShadowMask)
|
|
{
|
|
}
|
|
#endif
|
|
#if _DECALSHADER
|
|
|
|
ShaderData CreateShaderData(SurfaceDescriptionInputs IN)
|
|
{
|
|
ShaderData d = (ShaderData)0;
|
|
d.TBNMatrix = float3x3(IN.WorldSpaceTangent, IN.WorldSpaceBiTangent, IN.WorldSpaceNormal);
|
|
d.worldSpaceNormal = IN.WorldSpaceNormal;
|
|
d.worldSpaceTangent = IN.WorldSpaceTangent;
|
|
|
|
d.worldSpacePosition = IN.WorldSpacePosition;
|
|
d.texcoord0 = IN.uv0.xyxy;
|
|
d.screenPos = IN.ScreenPosition;
|
|
|
|
d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - d.worldSpacePosition);
|
|
|
|
d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir);
|
|
#if _HDRP
|
|
#else
|
|
#endif
|
|
return d;
|
|
}
|
|
#else
|
|
|
|
ShaderData CreateShaderData(VertexToPixel i
|
|
#if NEED_FACING
|
|
, bool facing
|
|
#endif
|
|
)
|
|
{
|
|
ShaderData d = (ShaderData)0;
|
|
d.clipPos = i.pos;
|
|
d.worldSpacePosition = i.worldPos;
|
|
|
|
d.worldSpaceNormal = normalize(i.worldNormal);
|
|
d.worldSpaceTangent.xyz = normalize(i.worldTangent.xyz);
|
|
|
|
d.tangentSign = i.worldTangent.w * unity_WorldTransformParams.w;
|
|
float3 bitangent = cross(d.worldSpaceTangent.xyz, d.worldSpaceNormal) * d.tangentSign;
|
|
d.TBNMatrix = float3x3(d.worldSpaceTangent, -bitangent, d.worldSpaceNormal);
|
|
d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - i.worldPos);
|
|
|
|
d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir);
|
|
d.texcoord0 = i.texcoord0;
|
|
d.texcoord1 = i.texcoord1;
|
|
d.texcoord2 = i.texcoord2;
|
|
d.texcoord3 = i.texcoord3;
|
|
#if _HDRP
|
|
#else
|
|
#endif
|
|
d.extraV2F0 = i.extraV2F0;
|
|
return d;
|
|
}
|
|
|
|
#endif
|
|
#if defined(_PASSSHADOW)
|
|
float3 _LightDirection;
|
|
float3 _LightPosition;
|
|
#endif
|
|
|
|
#if (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)))
|
|
|
|
#define GetWorldToViewMatrix() _ViewMatrix
|
|
#define UNITY_MATRIX_I_V _InvViewMatrix
|
|
#define GetViewToHClipMatrix() OptimizeProjectionMatrix(_ProjMatrix)
|
|
#define UNITY_MATRIX_I_P _InvProjMatrix
|
|
#define GetWorldToHClipMatrix() _ViewProjMatrix
|
|
#define UNITY_MATRIX_I_VP _InvViewProjMatrix
|
|
#define UNITY_MATRIX_UNJITTERED_VP _NonJitteredViewProjMatrix
|
|
#define UNITY_MATRIX_PREV_VP _PrevViewProjMatrix
|
|
#define UNITY_MATRIX_PREV_I_VP _PrevInvViewProjMatrix
|
|
|
|
void MotionVectorPositionZBias(VertexToPixel input)
|
|
{
|
|
#if UNITY_REVERSED_Z
|
|
input.pos.z -= unity_MotionVectorsParams.z * input.pos.w;
|
|
#else
|
|
input.pos.z += unity_MotionVectorsParams.z * input.pos.w;
|
|
#endif
|
|
}
|
|
|
|
#endif
|
|
VertexToPixel Vert (VertexData v)
|
|
{
|
|
VertexToPixel o = (VertexToPixel)0;
|
|
|
|
UNITY_SETUP_INSTANCE_ID(v);
|
|
UNITY_TRANSFER_INSTANCE_ID(v, o);
|
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
|
|
#if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)))
|
|
VertexData previousMesh = v;
|
|
#endif
|
|
#if !_TESSELLATION_ON
|
|
ChainModifyVertex(v, o, _Time);
|
|
#endif
|
|
|
|
o.texcoord0 = v.texcoord0;
|
|
o.texcoord1 = v.texcoord1;
|
|
o.texcoord2 = v.texcoord2;
|
|
o.texcoord3 = v.texcoord3;
|
|
float3 positionWS = TransformObjectToWorld(v.vertex.xyz);
|
|
float3 normalWS = TransformObjectToWorldNormal(v.normal);
|
|
float4 tangentWS = float4(TransformObjectToWorldDir(v.tangent.xyz), v.tangent.w);
|
|
VertexPositionInputs vertexInput = GetVertexPositionInputs(v.vertex.xyz);
|
|
o.worldPos = positionWS;
|
|
o.worldNormal = normalWS;
|
|
o.worldTangent = tangentWS;
|
|
#if _PASSSHADOW
|
|
#if _CASTING_PUNCTUAL_LIGHT_SHADOW
|
|
float3 lightDirectionWS = normalize(_LightPosition - o.worldPos);
|
|
#else
|
|
float3 lightDirectionWS = _LightDirection;
|
|
#endif
|
|
o.pos = TransformWorldToHClip(ApplyShadowBias(o.worldPos, o.worldNormal, lightDirectionWS));
|
|
#if UNITY_REVERSED_Z
|
|
o.pos.z = min(o.pos.z, UNITY_NEAR_CLIP_VALUE);
|
|
#else
|
|
o.pos.z = max(o.pos.z, UNITY_NEAR_CLIP_VALUE);
|
|
#endif
|
|
#elif _PASSMETA
|
|
o.pos = MetaVertexPosition(float4(v.vertex.xyz, 0), v.texcoord1.xy, v.texcoord2.xy, unity_LightmapST, unity_DynamicLightmapST);
|
|
#else
|
|
o.pos = TransformWorldToHClip(o.worldPos);
|
|
#endif
|
|
#if _PASSFORWARD || _PASSGBUFFER
|
|
float2 uv1 = v.texcoord1.xy;
|
|
OUTPUT_LIGHTMAP_UV(uv1, unity_LightmapST, o.lightmapUV);
|
|
o.texcoord1.xy = uv1;
|
|
OUTPUT_SH(o.worldNormal, o.sh);
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
|
o.dynamicLightmapUV.xy = v.texcoord2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw;
|
|
#if UNITY_VERSION >= 60000009
|
|
OUTPUT_SH(o.worldNormal, o.sh);
|
|
#endif
|
|
#elif (defined(PROBE_VOLUMES_L1) || defined(PROBE_VOLUMES_L2)) && UNITY_VERSION >= 60000009
|
|
OUTPUT_SH4(vertexInput.positionWS, o.worldNormal.xyz, GetWorldSpaceNormalizeViewDir(vertexInput.positionWS), o.sh, o.probeOcclusion);
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef VARYINGS_NEED_FOG_AND_VERTEX_LIGHT
|
|
half fogFactor = 0;
|
|
#if defined(_FOG_FRAGMENT)
|
|
fogFactor = ComputeFogFactor(o.pos.z);
|
|
#endif
|
|
#if _BAKEDLIT
|
|
o.fogFactorAndVertexLight = half4(fogFactor, 0, 0, 0);
|
|
#else
|
|
half3 vertexLight = VertexLighting(o.worldPos, o.worldNormal);
|
|
o.fogFactorAndVertexLight = half4(fogFactor, vertexLight);
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
|
|
o.shadowCoord = GetShadowCoord(vertexInput);
|
|
#endif
|
|
|
|
#if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)))
|
|
#if !defined(TESSELLATION_ON)
|
|
MotionVectorPositionZBias(o);
|
|
#endif
|
|
|
|
o.previousPositionCS = float4(0.0, 0.0, 0.0, 1.0);
|
|
bool forceNoMotion = unity_MotionVectorsParams.y == 0.0;
|
|
|
|
if (!forceNoMotion)
|
|
{
|
|
#if defined(HAVE_VFX_MODIFICATION)
|
|
float3 previousPositionOS = currentFrameMvData.vfxParticlePositionOS;
|
|
#if defined(VFX_FEATURE_MOTION_VECTORS_VERTS)
|
|
const bool applyDeformation = false;
|
|
#else
|
|
const bool applyDeformation = true;
|
|
#endif
|
|
#else
|
|
const bool hasDeformation = unity_MotionVectorsParams.x == 1;
|
|
float3 previousPositionOS = hasDeformation ? previousMesh.previousPositionOS : previousMesh.vertex.xyz;
|
|
|
|
#if defined(AUTOMATIC_TIME_BASED_MOTION_VECTORS) && defined(GRAPH_VERTEX_USES_TIME_PARAMETERS_INPUT)
|
|
const bool applyDeformation = true;
|
|
#else
|
|
const bool applyDeformation = hasDeformation;
|
|
#endif
|
|
#endif
|
|
#if defined(FEATURES_GRAPH_VERTEX)
|
|
if (applyDeformation)
|
|
previousPositionOS = GetLastFrameDeformedPosition(previousMesh, currentFrameMvData, previousPositionOS);
|
|
else
|
|
previousPositionOS = previousMesh.positionOS;
|
|
|
|
#if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT)
|
|
previousPositionOS -= previousMesh.precomputedVelocity;
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(UNITY_DOTS_INSTANCING_ENABLED) && defined(DOTS_DEFORMED)
|
|
ApplyPreviousFrameDeformedVertexPosition(previousMesh.vertexID, previousPositionOS);
|
|
#endif
|
|
#if defined (_ADD_PRECOMPUTED_VELOCITY)
|
|
previousPositionOS -= previousMesh.precomputedVelocity;
|
|
#endif
|
|
o.positionCS = mul(UNITY_MATRIX_UNJITTERED_VP, float4(positionWS, 1.0f));
|
|
|
|
#if defined(HAVE_VFX_MODIFICATION)
|
|
#if defined(VFX_FEATURE_MOTION_VECTORS_VERTS)
|
|
#if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT) || defined(_ADD_PRECOMPUTED_VELOCITY)
|
|
#error Unexpected fast path rendering VFX motion vector while there are vertex modification afterwards.
|
|
#endif
|
|
o.previousPositionCS = VFXGetPreviousClipPosition(previousMesh, currentFrameMvData.vfxElementAttributes, o.positionCS);
|
|
#else
|
|
#if VFX_WORLD_SPACE
|
|
const float3 previousPositionWS = previousPositionOS;
|
|
#else
|
|
const float3 previousPositionWS = mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1.0f)).xyz;
|
|
#endif
|
|
o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, float4(previousPositionWS, 1.0f));
|
|
#endif
|
|
#else
|
|
o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1)));
|
|
#endif
|
|
}
|
|
#endif
|
|
|
|
return o;
|
|
}
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/UnityGBuffer.hlsl"
|
|
FragmentOutput Frag (VertexToPixel IN
|
|
#ifdef _DEPTHOFFSET_ON
|
|
, out float outputDepth : SV_Depth
|
|
#endif
|
|
#if NEED_FACING
|
|
, bool facing : SV_IsFrontFace
|
|
#endif
|
|
)
|
|
{
|
|
UNITY_SETUP_INSTANCE_ID(IN);
|
|
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(IN);
|
|
|
|
#if defined(LOD_FADE_CROSSFADE)
|
|
LODFadeCrossFade(IN.pos);
|
|
#endif
|
|
|
|
ShaderData d = CreateShaderData(IN
|
|
#if NEED_FACING
|
|
, facing
|
|
#endif
|
|
);
|
|
Surface l = (Surface)0;
|
|
|
|
#ifdef _DEPTHOFFSET_ON
|
|
l.outputDepth = outputDepth;
|
|
#endif
|
|
|
|
l.Albedo = half3(0.5, 0.5, 0.5);
|
|
l.Normal = float3(0,0,1);
|
|
l.Occlusion = 1;
|
|
l.Alpha = 1;
|
|
|
|
ChainSurfaceFunction(l, d);
|
|
|
|
#ifdef _DEPTHOFFSET_ON
|
|
outputDepth = l.outputDepth;
|
|
#endif
|
|
|
|
#if _USESPECULAR || _SIMPLELIT
|
|
float3 specular = l.Specular;
|
|
float metallic = 0;
|
|
#else
|
|
float3 specular = 0;
|
|
float metallic = l.Metallic;
|
|
#endif
|
|
|
|
InputData inputData = (InputData)0;
|
|
inputData.positionCS = IN.pos;
|
|
inputData.positionWS = IN.worldPos;
|
|
#if _WORLDSPACENORMAL
|
|
inputData.normalWS = l.Normal;
|
|
#else
|
|
inputData.normalWS = normalize(TangentToWorldSpace(d, l.Normal));
|
|
#endif
|
|
|
|
inputData.viewDirectionWS = SafeNormalize(d.worldSpaceViewDir);
|
|
#if defined(MAIN_LIGHT_CALCULATE_SHADOWS)
|
|
inputData.shadowCoord = TransformWorldToShadowCoord(inputData.positionWS);
|
|
#else
|
|
inputData.shadowCoord = float4(0, 0, 0, 0);
|
|
#endif
|
|
InitializeInputDataFog(float4(IN.worldPos, 1.0), IN.fogFactorAndVertexLight.x);
|
|
inputData.vertexLighting = IN.fogFactorAndVertexLight.yzw;
|
|
#if defined(_OVERRIDE_BAKEDGI)
|
|
inputData.bakedGI = l.DiffuseGI;
|
|
l.Emission += l.SpecularGI;
|
|
#else
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
|
inputData.bakedGI = SAMPLE_GI(IN.lightmapUV, IN.dynamicLightmapUV.xy, IN.sh, inputData.normalWS);
|
|
inputData.shadowMask = SAMPLE_SHADOWMASK(IN.lightmapUV);
|
|
#elif !defined(LIGHTMAP_ON) && (defined(PROBE_VOLUMES_L1) || defined(PROBE_VOLUMES_L2))
|
|
#if UNITY_VERSION >= 60000009
|
|
inputData.bakedGI = SAMPLE_GI(IN.sh, IN.worldPos, inputData.normalWS, inputData.viewDirectionWS, IN.pos.xy, IN.probeOcclusion, inputData.shadowMask);
|
|
#else
|
|
inputData.bakedGI = SAMPLE_GI(IN.sh, IN.worldPos, inputData.normalWS, inputData.viewDirectionWS, IN.pos);
|
|
#endif
|
|
#else
|
|
inputData.bakedGI = SAMPLE_GI(IN.lightmapUV, IN.sh, inputData.normalWS);
|
|
inputData.shadowMask = SAMPLE_SHADOWMASK(IN.lightmapUV);
|
|
#endif
|
|
#endif
|
|
|
|
inputData.normalizedScreenSpaceUV = GetNormalizedScreenSpaceUV(IN.pos);
|
|
inputData.shadowMask = SAMPLE_SHADOWMASK(IN.lightmapUV);
|
|
|
|
#if defined(DEBUG_DISPLAY)
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
|
inputData.dynamicLightmapUV = IN.dynamicLightmapUV.xy;
|
|
#endif
|
|
#if defined(LIGHTMAP_ON)
|
|
inputData.staticLightmapUV = IN.lightmapUV;
|
|
#else
|
|
inputData.vertexSH = IN.sh;
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef _DBUFFER
|
|
ApplyDecal(IN.pos,
|
|
l.Albedo,
|
|
specular,
|
|
inputData.normalWS,
|
|
metallic,
|
|
l.Occlusion,
|
|
l.Smoothness);
|
|
#endif
|
|
|
|
BRDFData brdfData;
|
|
InitializeBRDFData(l.Albedo, metallic, specular, l.Smoothness, l.Alpha, brdfData);
|
|
Light mainLight = GetMainLight(inputData.shadowCoord, inputData.positionWS, inputData.shadowMask);
|
|
MixRealtimeAndBakedGI(mainLight, inputData.normalWS, inputData.bakedGI, inputData.shadowMask);
|
|
half3 color = GlobalIllumination(brdfData, inputData.bakedGI, l.Occlusion, inputData.positionWS, inputData.normalWS, inputData.viewDirectionWS);
|
|
|
|
return BRDFDataToGbuffer(brdfData, inputData, l.Smoothness, l.Emission + color, l.Occlusion);
|
|
}
|
|
|
|
ENDHLSL
|
|
|
|
}
|
|
Pass
|
|
{
|
|
Name "ShadowCaster"
|
|
Tags
|
|
{
|
|
"LightMode" = "ShadowCaster"
|
|
}
|
|
Blend One Zero, One Zero
|
|
Cull Back
|
|
ZTest LEqual
|
|
ZWrite On
|
|
Cull [_Cull]
|
|
HLSLPROGRAM
|
|
|
|
#pragma vertex Vert
|
|
#pragma fragment Frag
|
|
|
|
#if (defined(SHADER_API_GLES) || defined(SHADER_API_GLES3) || defined(SHADER_API_GLES30))
|
|
#pragma target 3.0
|
|
#else
|
|
#pragma target 4.5
|
|
#endif
|
|
|
|
#pragma prefer_hlslcc gles
|
|
#pragma exclude_renderers d3d11_9x
|
|
#pragma multi_compile_instancing
|
|
#pragma multi_compile_vertex _ _CASTING_PUNCTUAL_LIGHT_SHADOW
|
|
#pragma multi_compile_fragment _ LOD_FADE_CROSSFADE
|
|
|
|
#define _NORMAL_DROPOFF_TS 1
|
|
#define ATTRIBUTES_NEED_NORMAL
|
|
#define ATTRIBUTES_NEED_TANGENT
|
|
#define _PASSSHADOW 1
|
|
#pragma shader_feature_local_fragment _SHADING_COLOR _SHADING_BLINNPHONG _SHADING_PBR
|
|
// Commented out Curved World defines
|
|
// #define CURVEDWORLD_BEND_TYPE_CLASSICRUNNER_X_POSITIVE
|
|
// #define CURVEDWORLD_BEND_ID_1
|
|
// #pragma shader_feature_local CURVEDWORLD_DISABLED_ON
|
|
// #pragma shader_feature_local CURVEDWORLD_NORMAL_TRANSFORMATION_ON
|
|
// #include "Assets/Amazing Assets/Curved World/Shaders/Core/CurvedWorldTransform.cginc"
|
|
#pragma shader_feature_local _NORMALMAP
|
|
#pragma shader_feature_local_fragment _EMISSION
|
|
|
|
#pragma shader_feature_local_fragment _ALPHATEST_ON
|
|
#pragma shader_feature_local _RECEIVE_SHADOWS_OFF
|
|
#pragma shader_feature_local_fragment _ _SPECGLOSSMAP _SPECULAR_COLOR
|
|
#pragma shader_feature_local_fragment _GLOSSINESS_FROM_BASE_ALPHA
|
|
|
|
#pragma shader_feature_local_fragment _OCCLUSIONMAP
|
|
#pragma shader_feature_local _PARALLAXMAP
|
|
#pragma shader_feature_local _ _DETAIL_MULX2 _DETAIL_SCALED
|
|
#pragma shader_feature_local_fragment _SURFACE_TYPE_TRANSPARENT
|
|
|
|
#pragma shader_feature_local_fragment _ _ALPHAPREMULTIPLY_ON _ALPHAMODULATE_ON
|
|
|
|
#pragma shader_feature_local_fragment _METALLICSPECGLOSSMAP
|
|
#pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
|
#pragma shader_feature_local_fragment _SPECULARHIGHLIGHTS_OFF
|
|
#pragma shader_feature_local_fragment _ENVIRONMENTREFLECTIONS_OFF
|
|
#pragma shader_feature_local_fragment _SPECULAR_SETUP
|
|
#define _URP 1
|
|
#define _USINGTEXCOORD1 1
|
|
#define _USINGTEXCOORD2 1
|
|
#include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl"
|
|
#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.universal/ShaderLibrary/Input.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl"
|
|
#include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/LODCrossFade.hlsl"
|
|
#undef WorldNormalVector
|
|
#define WorldNormalVector(data, normal) mul(normal, data.TBNMatrix)
|
|
#define UnityObjectToWorldNormal(normal) mul(GetObjectToWorldMatrix(), normal)
|
|
|
|
#define _WorldSpaceLightPos0 _MainLightPosition
|
|
#define UNITY_DECLARE_TEX2D(name) TEXTURE2D(name); SAMPLER(sampler##name);
|
|
#define UNITY_DECLARE_TEX2D_NOSAMPLER(name) TEXTURE2D(name);
|
|
#define UNITY_DECLARE_TEX2DARRAY(name) TEXTURE2D_ARRAY(name); SAMPLER(sampler##name);
|
|
#define UNITY_DECLARE_TEX2DARRAY_NOSAMPLER(name) TEXTURE2D_ARRAY(name);
|
|
|
|
#define UNITY_SAMPLE_TEX2DARRAY(tex,coord) SAMPLE_TEXTURE2D_ARRAY(tex, sampler##tex, coord.xy, coord.z)
|
|
#define UNITY_SAMPLE_TEX2DARRAY_LOD(tex,coord,lod) SAMPLE_TEXTURE2D_ARRAY_LOD(tex, sampler##tex, coord.xy, coord.z, lod)
|
|
#define UNITY_SAMPLE_TEX2D(tex, coord) SAMPLE_TEXTURE2D(tex, sampler##tex, coord)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER(tex, samp, coord) SAMPLE_TEXTURE2D(tex, sampler##samp, coord)
|
|
|
|
#define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) SAMPLE_TEXTURE2D_LOD(tex, sampler_##tex, coord, lod)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) SAMPLE_TEXTURE2D_LOD (tex, sampler##samplertex,coord, lod)
|
|
#if defined(UNITY_COMPILER_HLSL)
|
|
#define UNITY_INITIALIZE_OUTPUT(type,name) name = (type)0;
|
|
#else
|
|
#define UNITY_INITIALIZE_OUTPUT(type,name)
|
|
#endif
|
|
|
|
#define sampler2D_float sampler2D
|
|
#define sampler2D_half sampler2D
|
|
struct VertexToPixel
|
|
{
|
|
float4 pos : SV_POSITION;
|
|
float3 worldPos : TEXCOORD0;
|
|
float3 worldNormal : TEXCOORD1;
|
|
float4 worldTangent : TEXCOORD2;
|
|
float4 texcoord0 : TEXCOORD3;
|
|
float4 texcoord1 : TEXCOORD4;
|
|
float4 texcoord2 : TEXCOORD5;
|
|
float4 texcoord3 : TEXCOORD6;
|
|
#if defined(LIGHTMAP_ON)
|
|
float2 lightmapUV : TEXCOORD8;
|
|
#endif
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
|
float2 dynamicLightmapUV : TEXCOORD9;
|
|
#endif
|
|
#if !defined(LIGHTMAP_ON)
|
|
float4 probeOcclusion : TEXCOORD8;
|
|
float3 sh : TEXCOORD10;
|
|
#endif
|
|
|
|
#if defined(VARYINGS_NEED_FOG_AND_VERTEX_LIGHT)
|
|
float4 fogFactorAndVertexLight : TEXCOORD11;
|
|
#endif
|
|
|
|
#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
|
|
float4 shadowCoord : TEXCOORD12;
|
|
#endif
|
|
float4 extraV2F0 : TEXCOORD13;
|
|
#if UNITY_ANY_INSTANCING_ENABLED
|
|
uint instanceID : CUSTOM_INSTANCE_ID;
|
|
#endif
|
|
#if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE)))
|
|
uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0;
|
|
#endif
|
|
#if (defined(UNITY_STEREO_INSTANCING_ENABLED))
|
|
uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex;
|
|
#endif
|
|
#if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE)
|
|
FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC;
|
|
#endif
|
|
|
|
#if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))
|
|
float4 previousPositionCS : TEXCOORD21;
|
|
float4 positionCS : TEXCOORD22;
|
|
#endif
|
|
};
|
|
struct Surface
|
|
{
|
|
half3 Albedo;
|
|
half Height;
|
|
half3 Normal;
|
|
half Smoothness;
|
|
half3 Emission;
|
|
half Metallic;
|
|
half3 Specular;
|
|
half Occlusion;
|
|
half SpecularPower;
|
|
half Alpha;
|
|
float outputDepth;
|
|
half SpecularOcclusion;
|
|
half SubsurfaceMask;
|
|
half Thickness;
|
|
half CoatMask;
|
|
half CoatSmoothness;
|
|
half Anisotropy;
|
|
half IridescenceMask;
|
|
half IridescenceThickness;
|
|
int DiffusionProfileHash;
|
|
float SpecularAAThreshold;
|
|
float SpecularAAScreenSpaceVariance;
|
|
float3 DiffuseGI;
|
|
float3 BackDiffuseGI;
|
|
float3 SpecularGI;
|
|
float ior;
|
|
float3 transmittanceColor;
|
|
float atDistance;
|
|
float transmittanceMask;
|
|
float4 ShadowMask;
|
|
float NormalAlpha;
|
|
float MAOSAlpha;
|
|
};
|
|
struct Blackboard
|
|
{
|
|
float blackboardDummyData;
|
|
};
|
|
struct ShaderData
|
|
{
|
|
float4 clipPos;
|
|
float3 localSpacePosition;
|
|
float3 localSpaceNormal;
|
|
float3 localSpaceTangent;
|
|
float3 worldSpacePosition;
|
|
float3 worldSpaceNormal;
|
|
float3 worldSpaceTangent;
|
|
float tangentSign;
|
|
|
|
float3 worldSpaceViewDir;
|
|
float3 tangentSpaceViewDir;
|
|
|
|
float4 texcoord0;
|
|
float4 texcoord1;
|
|
float4 texcoord2;
|
|
float4 texcoord3;
|
|
|
|
float2 screenUV;
|
|
float4 screenPos;
|
|
|
|
float4 vertexColor;
|
|
bool isFrontFace;
|
|
|
|
float4 extraV2F0;
|
|
float4 extraV2F1;
|
|
float4 extraV2F2;
|
|
float4 extraV2F3;
|
|
float4 extraV2F4;
|
|
float4 extraV2F5;
|
|
float4 extraV2F6;
|
|
float4 extraV2F7;
|
|
|
|
float3x3 TBNMatrix;
|
|
Blackboard blackboard;
|
|
};
|
|
|
|
struct VertexData
|
|
{
|
|
#if SHADER_TARGET > 30
|
|
#endif
|
|
float4 vertex : POSITION;
|
|
float3 normal : NORMAL;
|
|
float4 tangent : TANGENT;
|
|
float4 texcoord0 : TEXCOORD0;
|
|
#if _URP && (_USINGTEXCOORD1 || _PASSMETA || _PASSFORWARD || _PASSGBUFFER)
|
|
float4 texcoord1 : TEXCOORD1;
|
|
#endif
|
|
|
|
#if _URP && (_USINGTEXCOORD2 || _PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && defined(DYNAMICLIGHTMAP_ON)))
|
|
float4 texcoord2 : TEXCOORD2;
|
|
#endif
|
|
|
|
#if _STANDARD && (_USINGTEXCOORD1 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER || _PASSFORWARDADD) && LIGHTMAP_ON)))
|
|
float4 texcoord1 : TEXCOORD1;
|
|
#endif
|
|
#if _STANDARD && (_USINGTEXCOORD2 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && DYNAMICLIGHTMAP_ON)))
|
|
float4 texcoord2 : TEXCOORD2;
|
|
#endif
|
|
#if _HDRP
|
|
float4 texcoord1 : TEXCOORD1;
|
|
float4 texcoord2 : TEXCOORD2;
|
|
#endif
|
|
float4 texcoord3 : TEXCOORD3;
|
|
#if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))
|
|
float3 previousPositionOS : TEXCOORD4;
|
|
#if defined (_ADD_PRECOMPUTED_VELOCITY)
|
|
float3 precomputedVelocity : TEXCOORD5;
|
|
#endif
|
|
#endif
|
|
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
};
|
|
|
|
struct TessVertex
|
|
{
|
|
float4 vertex : INTERNALTESSPOS;
|
|
float3 normal : NORMAL;
|
|
float4 tangent : TANGENT;
|
|
float4 texcoord0 : TEXCOORD0;
|
|
float4 texcoord1 : TEXCOORD1;
|
|
float4 texcoord2 : TEXCOORD2;
|
|
float4 texcoord3 : TEXCOORD3;
|
|
float4 extraV2F0 : TEXCOORD5;
|
|
#if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))
|
|
float3 previousPositionOS : TEXCOORD13;
|
|
#if defined (_ADD_PRECOMPUTED_VELOCITY)
|
|
float3 precomputedVelocity : TEXCOORD14;
|
|
#endif
|
|
#endif
|
|
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
UNITY_VERTEX_OUTPUT_STEREO
|
|
};
|
|
|
|
struct ExtraV2F
|
|
{
|
|
float4 extraV2F0;
|
|
float4 extraV2F1;
|
|
float4 extraV2F2;
|
|
float4 extraV2F3;
|
|
float4 extraV2F4;
|
|
float4 extraV2F5;
|
|
float4 extraV2F6;
|
|
float4 extraV2F7;
|
|
Blackboard blackboard;
|
|
float4 time;
|
|
};
|
|
float3 WorldToTangentSpace(ShaderData d, float3 normal)
|
|
{
|
|
return mul(d.TBNMatrix, normal);
|
|
}
|
|
|
|
float3 TangentToWorldSpace(ShaderData d, float3 normal)
|
|
{
|
|
return mul(normal, d.TBNMatrix);
|
|
}
|
|
#if _STANDARD
|
|
float3 TransformWorldToObject(float3 p) { return mul(unity_WorldToObject, float4(p, 1)); };
|
|
float3 TransformObjectToWorld(float3 p) { return mul(unity_ObjectToWorld, float4(p, 1)); };
|
|
float4 TransformWorldToObject(float4 p) { return mul(unity_WorldToObject, p); };
|
|
float4 TransformObjectToWorld(float4 p) { return mul(unity_ObjectToWorld, p); };
|
|
float4x4 GetWorldToObjectMatrix() { return unity_WorldToObject; }
|
|
float4x4 GetObjectToWorldMatrix() { return unity_ObjectToWorld; }
|
|
#if (defined(SHADER_API_D3D11) || defined(SHADER_API_XBOXONE) || defined(UNITY_COMPILER_HLSLCC) || defined(SHADER_API_PSSL) || (SHADER_TARGET_SURFACE_ANALYSIS && !SHADER_TARGET_SURFACE_ANALYSIS_MOJOSHADER))
|
|
#define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) tex.SampleLevel (sampler##tex,coord, lod)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) tex.SampleLevel (sampler##samplertex,coord, lod)
|
|
#else
|
|
#define UNITY_SAMPLE_TEX2D_LOD(tex,coord,lod) tex2D (tex,coord,0,lod)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord,lod) tex2D (tex,coord,0,lod)
|
|
#endif
|
|
|
|
#undef GetWorldToObjectMatrix()
|
|
|
|
#define GetWorldToObjectMatrix() unity_WorldToObject
|
|
#endif
|
|
|
|
float3 GetCameraWorldPosition()
|
|
{
|
|
#if _HDRP
|
|
return GetCameraRelativePositionWS(_WorldSpaceCameraPos);
|
|
#else
|
|
return _WorldSpaceCameraPos;
|
|
#endif
|
|
}
|
|
|
|
#if _GRABPASSUSED
|
|
#if _STANDARD
|
|
TEXTURE2D(%GRABTEXTURE%);
|
|
SAMPLER(sampler_%GRABTEXTURE%);
|
|
#endif
|
|
|
|
half3 GetSceneColor(float2 uv)
|
|
{
|
|
#if _STANDARD
|
|
return SAMPLE_TEXTURE2D(%GRABTEXTURE%, sampler_%GRABTEXTURE%, uv).rgb;
|
|
#else
|
|
return SHADERGRAPH_SAMPLE_SCENE_COLOR(uv);
|
|
#endif
|
|
}
|
|
#endif
|
|
#if _STANDARD
|
|
UNITY_DECLARE_DEPTH_TEXTURE(_CameraDepthTexture);
|
|
float GetSceneDepth(float2 uv) { return SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv); }
|
|
float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv)); }
|
|
float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv)); }
|
|
#else
|
|
float GetSceneDepth(float2 uv) { return SHADERGRAPH_SAMPLE_SCENE_DEPTH(uv); }
|
|
float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv), _ZBufferParams); }
|
|
float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv), _ZBufferParams); }
|
|
#endif
|
|
|
|
float3 GetWorldPositionFromDepthBuffer(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
float eye = GetLinearEyeDepth(uv);
|
|
float3 camView = mul((float3x3)GetObjectToWorldMatrix(), transpose(mul(GetWorldToObjectMatrix(), UNITY_MATRIX_I_V)) [2].xyz);
|
|
|
|
float dt = dot(worldSpaceViewDir, camView);
|
|
float3 div = worldSpaceViewDir/dt;
|
|
float3 wpos = (eye * div) + GetCameraWorldPosition();
|
|
return wpos;
|
|
}
|
|
|
|
#if _HDRP
|
|
float3 ObjectToWorldSpacePosition(float3 pos)
|
|
{
|
|
return GetAbsolutePositionWS(TransformObjectToWorld(pos));
|
|
}
|
|
#else
|
|
float3 ObjectToWorldSpacePosition(float3 pos)
|
|
{
|
|
return TransformObjectToWorld(pos);
|
|
}
|
|
#endif
|
|
|
|
#if _STANDARD
|
|
UNITY_DECLARE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture);
|
|
float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
float4 depthNorms = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture, uv);
|
|
float3 norms = DecodeViewNormalStereo(depthNorms);
|
|
norms = mul((float3x3)GetWorldToViewMatrix(), norms) * 0.5 + 0.5;
|
|
return norms;
|
|
}
|
|
#elif _HDRP && !_DECALSHADER
|
|
float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
NormalData nd;
|
|
DecodeFromNormalBuffer(_ScreenSize.xy * uv, nd);
|
|
return nd.normalWS;
|
|
}
|
|
#elif _URP
|
|
#if (SHADER_LIBRARY_VERSION_MAJOR >= 10)
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl"
|
|
#endif
|
|
|
|
float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
#if (SHADER_LIBRARY_VERSION_MAJOR >= 10)
|
|
return SampleSceneNormals(uv);
|
|
#else
|
|
float3 wpos = GetWorldPositionFromDepthBuffer(uv, worldSpaceViewDir);
|
|
return normalize(-cross(ddx(wpos), ddy(wpos))) * 0.5 + 0.5;
|
|
#endif
|
|
|
|
}
|
|
#endif
|
|
|
|
#if _HDRP
|
|
|
|
half3 UnpackNormalmapRGorAG(half4 packednormal)
|
|
{
|
|
packednormal.x *= packednormal.w;
|
|
|
|
half3 normal;
|
|
normal.xy = packednormal.xy * 2 - 1;
|
|
normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy)));
|
|
return normal;
|
|
}
|
|
half3 UnpackNormal(half4 packednormal)
|
|
{
|
|
#if defined(UNITY_NO_DXT5nm)
|
|
return packednormal.xyz * 2 - 1;
|
|
#else
|
|
return UnpackNormalmapRGorAG(packednormal);
|
|
#endif
|
|
}
|
|
#endif
|
|
#if _HDRP || _URP
|
|
|
|
half3 UnpackScaleNormal(half4 packednormal, half scale)
|
|
{
|
|
#ifndef UNITY_NO_DXT5nm
|
|
packednormal.x *= packednormal.w;
|
|
#endif
|
|
half3 normal;
|
|
normal.xy = (packednormal.xy * 2 - 1) * scale;
|
|
normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy)));
|
|
return normal;
|
|
}
|
|
|
|
#endif
|
|
void GetSun(out float3 lightDir, out float3 color)
|
|
{
|
|
lightDir = float3(0.5, 0.5, 0);
|
|
color = 1;
|
|
#if _HDRP
|
|
if (_DirectionalLightCount > 0)
|
|
{
|
|
DirectionalLightData light = _DirectionalLightDatas[0];
|
|
lightDir = -light.forward.xyz;
|
|
color = light.color;
|
|
}
|
|
#elif _STANDARD
|
|
lightDir = normalize(_WorldSpaceLightPos0.xyz);
|
|
color = _LightColor0.rgb;
|
|
#elif _URP
|
|
Light light = GetMainLight();
|
|
lightDir = light.direction;
|
|
color = light.color;
|
|
#endif
|
|
}
|
|
CBUFFER_START(UnityPerMaterial)
|
|
half _LightSource;
|
|
|
|
half _ShadingMode;
|
|
half _LightFunction;
|
|
half _UseAlphaOnlyFromBaseMap;
|
|
half _EnableToonShading;
|
|
half _ShadingFunction;
|
|
int _NumberOfCells;
|
|
float _CellTransitionSmoothness;
|
|
half _RoundingMethod;
|
|
half _SumLightsBeforePosterization;
|
|
half _ShadingUseLightColors;
|
|
half _GradientMode;
|
|
half _GradientBlending;
|
|
float _GradientBlendFactor;
|
|
|
|
float4 _GradientTex_TexelSize;
|
|
half _ShadingAffectedByNormalMap;
|
|
half _EnableShadows;
|
|
float4 _CoreShadowColor;
|
|
float _TerminatorPosition;
|
|
float _TerminatorWidth;
|
|
float _TerminatorSmoothness;
|
|
float4 _FormShadowColor;
|
|
|
|
half _EnableCastShadows;
|
|
float _CastShadowsStrength;
|
|
float _CastShadowsSmoothness;
|
|
half _CastShadowColorMode;
|
|
float4 _CastShadowColor;
|
|
half _EnableSpecular;
|
|
half _SpecularBlending;
|
|
half4 _SpecularColor;
|
|
float _SpecularSize;
|
|
float _SpecularSmoothness;
|
|
float _SpecularOpacity;
|
|
half _SpecularAffectedByNormalMap;
|
|
half _SpecularUseLightColors;
|
|
half _EnableRim;
|
|
half _RimBlending;
|
|
float4 _RimColor;
|
|
float _RimSize;
|
|
float _RimSmoothness;
|
|
float _RimOpacity;
|
|
half _RimAffectedArea;
|
|
half _RimAffectedByNormalMap;
|
|
half _EnableStyling;
|
|
|
|
half _EnableStylingDistanceFade;
|
|
float _StylingDFStartingDistance;
|
|
float _StylingDFFalloff;
|
|
half _StylingAdjustDistanceFadeValue;
|
|
float _StylingDistanceFadeValue;
|
|
half _HatchingAffectedByNormalMap;
|
|
half _EnableAntiAliasing;
|
|
float4 _NoiseTex2_TexelSize;
|
|
half _EnableShadingStyling;
|
|
half _StylingShadingSyncWithOtherStyling;
|
|
half _ShadingStyle;
|
|
half _SyncWithLightPartitioning;
|
|
half _NumberOfCellsHatching;
|
|
half _StylingTerminatorPosition;
|
|
float _StylingOvermodelingFactor;
|
|
half _StylingShadingBlending;
|
|
half _StylingShadingIsInverted;
|
|
half _DrawSpace;
|
|
|
|
half _UVSet;
|
|
|
|
half _SSCameraDistanceScaled;
|
|
half _AnchorSSToObjectsOrigin;
|
|
half _CoordinateSystem;
|
|
half _PolarCenterMode;
|
|
float4 _PolarCenter;
|
|
float _StylingShadingDensity;
|
|
float _StylingShadingInitialDirection;
|
|
float _StylingShadingRotationBetweenCells;
|
|
float _StylingShadingHalftonesOffset;
|
|
float4 _StylingColor;
|
|
float _StylingShadingOpacity;
|
|
float _StylingShadingOpacityFalloff;
|
|
float _StylingShadingThicknessControl;
|
|
float _StylingShadingThickness;
|
|
float _StylingShadingThicknessFalloff;
|
|
float _StylingShadingHardness;
|
|
float _StylingShadingHalftonesRoundness;
|
|
float _StylingShadingHalftonesRoundnessFalloff;
|
|
half _StylingShadingEnableDashes;
|
|
float _StylingShadingDashesSize;
|
|
half _StylingShadingDashesUseHatchingDensity;
|
|
float _StylingShadingDashesDensity;
|
|
float _StylingShadingDashesType;
|
|
float _StylingShadingDashesRoundness;
|
|
float _StylingShadingDashesOffset;
|
|
|
|
float _StylingShadingDashesTransitionPosition;
|
|
float _StylingShadingDashesTransitionSoftness;
|
|
half _EnableShadingRandomizer;
|
|
float _ShadingNoise1Size;
|
|
float _ShadingNoise1Seed;
|
|
float _ShadingNoise2Seed;
|
|
float _NoiseIntensity;
|
|
half _SpacingRandomMode;
|
|
float _SpacingRandomIntensity;
|
|
half _OpacityRandomMode;
|
|
float _OpacityRandomIntensity;
|
|
half _LengthRandomMode;
|
|
float _LengthRandomIntensity;
|
|
half _HardnessRandomMode;
|
|
float _HardnessRandomIntensity;
|
|
half _ThicknessRandomMode;
|
|
float _ThicknesshRandomIntensity;
|
|
half _EnableCastShadowsStyling;
|
|
half _CastShadowsNumberOfCellsHatching;
|
|
float _StylingCastShadowsSmoothness;
|
|
half _StylingCastShadowsSyncWithOtherStyling;
|
|
half _CastShadowsStyle;
|
|
half _StylingCastShadowsBlending;
|
|
half _StylingCastShadowsIsInverted;
|
|
half _CastShadowsDrawSpace;
|
|
half _CastShadowsUVSet;
|
|
half _CastShadowsSSCameraDistanceScaled;
|
|
half _CastShadowsAnchorSSToObjectsOrigin;
|
|
half _CastShadowsCoordinateSystem;
|
|
half _CastShadowsPolarCenterMode;
|
|
float4 _CastShadowsPolarCenter;
|
|
float _StylingCastShadowsDensity;
|
|
float _StylingCastShadowsInitialDirection;
|
|
float _StylingCastShadowsRotationBetweenCells;
|
|
float _StylingCastShadowsHalftonesOffset;
|
|
float4 _StylingCastShadowsColor;
|
|
float _StylingCastShadowsOpacity;
|
|
float _StylingCastShadowsOpacityFalloff;
|
|
half _StylingCastShadowsThicknessControl;
|
|
float _StylingCastShadowsThickness;
|
|
float _StylingCastShadowsThicknessFalloff;
|
|
float _StylingCastShadowsHardness;
|
|
float _StylingCastShadowsHalftonesRoundness;
|
|
float _StylingCastShadowsHalftonesRoundnessFalloff;
|
|
half _StylingCastShadowsEnableDashes;
|
|
float _StylingCastShadowsDashesSize;
|
|
half _StylingCastShadowsDashesUseHatchingDensity;
|
|
float _StylingCastShadowsDashesDensity;
|
|
float _StylingCastShadowsDashesRoundness;
|
|
float _StylingCastShadowsDashesType;
|
|
float _StylingCastShadowsDashesOffset;
|
|
|
|
float _StylingCastShadowsDashesTransitionPosition;
|
|
float _StylingCastShadowsDashesTransitionSoftness;
|
|
half _EnableCastShadowsRandomizer;
|
|
float _CastShadowsNoise1Size;
|
|
float _CastShadowsNoise1Seed;
|
|
float _CastShadowsNoise2Seed;
|
|
float _CastShadowsNoiseIntensity;
|
|
half _CastShadowsSpacingRandomMode;
|
|
float _CastShadowsSpacingRandomIntensity;
|
|
half _CastShadowsOpacityRandomMode;
|
|
float _CastShadowsOpacityRandomIntensity;
|
|
half _CastShadowsHardnessRandomMode;
|
|
float _CastShadowsHardnessRandomIntensity;
|
|
half _CastShadowsLengthRandomMode;
|
|
float _CastShadowsLengthRandomIntensity;
|
|
half _CastShadowsThicknessRandomMode;
|
|
float _CastShadowsThicknesshRandomIntensity;
|
|
half _EnableSpecularStyling;
|
|
half _SyncWithSpecular;
|
|
float _StylingSpecularSize;
|
|
float _StylingSpecularSmoothness;
|
|
half _StylingSpecularCutOutShading;
|
|
half _StylingSpecularUseLightColors;
|
|
half _StylingSpecularSyncWithOtherStyling;
|
|
half _SpecularStyle;
|
|
half _StylingSpecularBlending;
|
|
half _StylingSpecularIsInverted;
|
|
half _SpecularDrawSpace;
|
|
half _SpecularUVSet;
|
|
half _SpecularSSCameraDistanceScaled;
|
|
half _SpecularAnchorSSToObjectsOrigin;
|
|
half _SpecularCoordinateSystem;
|
|
half _SpecularPolarCenterMode;
|
|
float4 _SpecularPolarCenter;
|
|
float _StylingSpecularDensity;
|
|
float _StylingSpecularRotation;
|
|
float _StylingSpecularHalftonesOffset;
|
|
float4 _StylingSpecularColor;
|
|
float _StylingSpecularOpacity;
|
|
float _StylingSpecularOpacityFalloff;
|
|
float _StylingSpecularThicknessControl;
|
|
float _StylingSpecularThickness;
|
|
float _StylingSpecularThicknessFalloff;
|
|
float _StylingSpecularHardness;
|
|
float _StylingSpecularHalftonesRoundness;
|
|
float _StylingSpecularHalftonesRoundnessFalloff;
|
|
half _StylingSpecularEnableDashes;
|
|
float _StylingSpecularDashesSize;
|
|
half _StylingSpecularDashesUseHatchingDensity;
|
|
float _StylingSpecularDashesDensity;
|
|
float _StylingSpecularDashesRoundness;
|
|
float _StylingSpecularDashesType;
|
|
float _StylingSpecularDashesOffset;
|
|
|
|
float _StylingSpecularDashesTransitionPosition;
|
|
float _StylingSpecularDashesTransitionSoftness;
|
|
float _EnableSpecularRandomizer;
|
|
float _SpecularNoise1Size;
|
|
float _SpecularNoise1Seed;
|
|
float _SpecularNoise2Seed;
|
|
float _SpecularNoiseIntensity;
|
|
half _SpecularSpacingRandomMode;
|
|
float _SpecularSpacingRandomIntensity;
|
|
half _SpecularOpacityRandomMode;
|
|
float _SpecularOpacityRandomIntensity;
|
|
half _SpecularLengthRandomMode;
|
|
float _SpecularLengthRandomIntensity;
|
|
half _SpecularHardnessRandomMode;
|
|
float _SpecularHardnessRandomIntensity;
|
|
half _SpecularThicknessRandomMode;
|
|
float _SpecularThicknesshRandomIntensity;
|
|
half _EnableRimStyling;
|
|
half _StylingRimSyncWithOtherStyling;
|
|
half _SyncWithRim;
|
|
float _StylingRimSize;
|
|
float _StylingRimSmoothness;
|
|
half _StylingRimAffectedArea;
|
|
half _RimStyle;
|
|
half _StylingRimBlending;
|
|
half _StylingRimIsInverted;
|
|
half _RimDrawSpace;
|
|
half _RimUVSet;
|
|
half _RimSSCameraDistanceScaled;
|
|
half _RimAnchorSSToObjectsOrigin;
|
|
half _RimCoordinateSystem;
|
|
half _RimPolarCenterMode;
|
|
float4 _RimPolarCenter;
|
|
float _StylingRimDensity;
|
|
float _StylingRimRotation;
|
|
float _StylingRimHalftonesOffset;
|
|
float4 _StylingRimColor;
|
|
float _StylingRimOpacity;
|
|
float _StylingRimOpacityFalloff;
|
|
float _StylingRimThicknessControl;
|
|
float _StylingRimThickness;
|
|
float _StylingRimThicknessFalloff;
|
|
float _StylingRimHardness;
|
|
float _StylingRimHalftonesRoundness;
|
|
float _StylingRimHalftonesRoundnessFalloff;
|
|
half _StylingRimEnableDashes;
|
|
float _StylingRimDashesSize;
|
|
half _StylingRimDashesUseHatchingDensity;
|
|
float _StylingRimDashesDensity;
|
|
float _StylingRimDashesRoundness;
|
|
float _StylingRimDashesType;
|
|
float _StylingRimDashesOffset;
|
|
|
|
float _StylingRimDashesTransitionPosition;
|
|
float _StylingRimDashesTransitionSoftness;
|
|
float _EnableRimRandomizer;
|
|
float _RimNoise1Size;
|
|
float _RimNoise1Seed;
|
|
float _RimNoise2Seed;
|
|
float _RimNoiseIntensity;
|
|
half _RimSpacingRandomMode;
|
|
float _RimSpacingRandomIntensity;
|
|
half _RimOpacityRandomMode;
|
|
float _RimOpacityRandomIntensity;
|
|
half _RimLengthRandomMode;
|
|
float _RimLengthRandomIntensity;
|
|
half _RimHardnessRandomMode;
|
|
float _RimHardnessRandomIntensity;
|
|
half _RimThicknessRandomMode;
|
|
float _RimThicknesshRandomIntensity;
|
|
half4 _OutlineColor;
|
|
half _OutlineWidth;
|
|
half _EnableOutline;
|
|
half _OutlineConstantScreenWidth;
|
|
half4 _BaseColor;
|
|
float _BumpScale;
|
|
float4 _BaseMap_ST;
|
|
half _Cutoff;
|
|
half4 _EmissionColor;
|
|
half4 _SpecColor;
|
|
float _Smoothness;
|
|
float4 _DetailAlbedoMap_ST;
|
|
half _Metallic;
|
|
half _Parallax;
|
|
half _OcclusionStrength;
|
|
half _DetailAlbedoMapScale;
|
|
half _DetailNormalMapScale;
|
|
#if UNITY_VERSION < 202200
|
|
float _AlphaToMaskAvailable;
|
|
#endif
|
|
CBUFFER_END
|
|
sampler2D _NoiseMap1;
|
|
sampler2D _NoiseMap2;
|
|
|
|
sampler2D _HatchingMap;
|
|
sampler2D _GradientTex;
|
|
void Ext_ModifyVertex0 (inout VertexData v, inout ExtraV2F d)
|
|
{
|
|
#if defined(CURVEDWORLD_IS_INSTALLED) && !defined(CURVEDWORLD_DISABLED_ON)
|
|
#ifdef CURVEDWORLD_NORMAL_TRANSFORMATION_ON
|
|
CURVEDWORLD_TRANSFORM_VERTEX_AND_NORMAL(v.vertex, v.normal, v.tangent)
|
|
#else
|
|
CURVEDWORLD_TRANSFORM_VERTEX(v.vertex)
|
|
#endif
|
|
#endif
|
|
float4x4 UnityObjectToClipPosMatrix = mul(GetWorldToHClipMatrix(), GetObjectToWorldMatrix());
|
|
float4 pos = mul(UnityObjectToClipPosMatrix, v.vertex);
|
|
float4 objectOriginClipPos = mul(UnityObjectToClipPosMatrix, float4(0, 0, 0, 1));
|
|
objectOriginClipPos.xy = clamp(objectOriginClipPos.xy, -1.0*objectOriginClipPos.w, 1.0*objectOriginClipPos.w);
|
|
float4 originScreenPos = ComputeScreenPos(objectOriginClipPos);
|
|
float2 originScreenUV = originScreenPos.xy/originScreenPos.w;
|
|
float4 screenPos = ComputeScreenPos(pos);
|
|
float2 uv = ((screenPos.xy) / screenPos.w);
|
|
float4 ssss = ComputeScreenPos(pos);
|
|
d.extraV2F0 = float4(originScreenUV,originScreenUV);
|
|
}
|
|
void Ext_SurfaceFunction0 (inout Surface o, ShaderData d)
|
|
{
|
|
float2 test = d.texcoord1.xy;
|
|
test = d.texcoord2.xy;
|
|
test = d.texcoord3.xy;
|
|
|
|
}
|
|
TEXTURE2D(_BaseMap); SAMPLER(sampler_BaseMap);
|
|
TEXTURE2D(_BumpMap); SAMPLER(sampler_BumpMap);
|
|
TEXTURE2D(_EmissionMap); SAMPLER(sampler_EmissionMap);
|
|
TEXTURE2D(_SpecGlossMap); SAMPLER(sampler_SpecGlossMap);
|
|
TEXTURE2D(_ParallaxMap); SAMPLER(sampler_ParallaxMap);
|
|
TEXTURE2D(_OcclusionMap); SAMPLER(sampler_OcclusionMap);
|
|
TEXTURE2D(_DetailMask); SAMPLER(sampler_DetailMask);
|
|
TEXTURE2D(_DetailAlbedoMap); SAMPLER(sampler_DetailAlbedoMap);
|
|
TEXTURE2D(_DetailNormalMap); SAMPLER(sampler_DetailNormalMap);
|
|
TEXTURE2D(_MetallicGlossMap); SAMPLER(sampler_MetallicGlossMap);
|
|
TEXTURE2D(_ClearCoatMap); SAMPLER(sampler_ClearCoatMap);
|
|
#if defined(_DETAIL_MULX2) || defined(_DETAIL_SCALED)
|
|
#define _DETAIL
|
|
#endif
|
|
|
|
#if _SPECULAR_SETUP
|
|
#define _USESPECULAR 1
|
|
#else
|
|
#undef _USESPECULAR
|
|
#endif
|
|
float SharpenAlphaMy(float alpha, float alphaClipTreshold)
|
|
{
|
|
return saturate((alpha - alphaClipTreshold) / max(fwidth(alpha), 0.0001) + 0.5);
|
|
}
|
|
#if UNITY_VERSION < 202200
|
|
half3 AlphaModulate(half3 albedo, half alpha)
|
|
{
|
|
#if defined(_ALPHAMODULATE_ON)
|
|
return lerp(half3(1.0, 1.0, 1.0), albedo, alpha);
|
|
#else
|
|
return albedo;
|
|
#endif
|
|
}
|
|
|
|
#if defined(_ALPHATEST_ON)
|
|
bool IsAlphaToMaskAvailable()
|
|
{
|
|
return (_AlphaToMaskAvailable != 0.0);
|
|
}
|
|
half AlphaClip(half alpha, half cutoff)
|
|
{
|
|
half clippedAlpha = (alpha >= cutoff) ? float(alpha) : 0.0;
|
|
|
|
half alphaToCoverageAlpha = SharpenAlphaMy(alpha, cutoff);
|
|
|
|
alpha = IsAlphaToMaskAvailable() ? alphaToCoverageAlpha : clippedAlpha;
|
|
clip(alpha - 0.0001);
|
|
|
|
return alpha;
|
|
}
|
|
#endif
|
|
#endif
|
|
#if UNITY_VERSION < 202220
|
|
int _DebugSceneOverrideMode;
|
|
#endif
|
|
|
|
bool IsAlphaDiscardEnabledMy()
|
|
{
|
|
#if defined(DEBUG_DISPLAY)
|
|
return (_DebugSceneOverrideMode == DEBUGSCENEOVERRIDEMODE_NONE);
|
|
#else
|
|
return true;
|
|
#endif
|
|
}
|
|
half AlphaMy(half albedoAlpha, half4 color, half cutoff)
|
|
{
|
|
#if !defined(_SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A) && !defined(_GLOSSINESS_FROM_BASE_ALPHA)
|
|
half alpha = albedoAlpha * color.a;
|
|
#else
|
|
half alpha = color.a;
|
|
#endif
|
|
#ifdef _ALPHATEST_ON
|
|
if (IsAlphaDiscardEnabledMy())
|
|
alpha = AlphaClip(alpha, cutoff);
|
|
#endif
|
|
|
|
return alpha;
|
|
}
|
|
half4 SampleAlbedoAlpha(float2 uv, TEXTURE2D_PARAM(albedoAlphaMap, sampler_albedoAlphaMap))
|
|
{
|
|
return half4(SAMPLE_TEXTURE2D(albedoAlphaMap, sampler_albedoAlphaMap, uv));
|
|
}
|
|
half3 SampleNormal(float2 uv, TEXTURE2D_PARAM(bumpMap, sampler_bumpMap), half scale = half(1.0))
|
|
{
|
|
#ifdef _NORMALMAP
|
|
half4 n = SAMPLE_TEXTURE2D(bumpMap, sampler_bumpMap, uv);
|
|
#if BUMP_SCALE_NOT_SUPPORTED
|
|
return UnpackNormal(n);
|
|
#else
|
|
return UnpackNormalScale(n, scale);
|
|
#endif
|
|
#else
|
|
return half3(0.0h, 0.0h, 1.0h);
|
|
#endif
|
|
}
|
|
#if UNITY_VERSION < 202100
|
|
half4 SampleSpecularSmoothnessMy(half2 uv, half alpha, half4 specColor, TEXTURE2D_PARAM( specMap, sampler_specMap))
|
|
{
|
|
half4 specularSmoothness = half4(0.0h, 0.0h, 0.0h, 1.0h);
|
|
#ifdef _SPECGLOSSMAP
|
|
specularSmoothness = SAMPLE_TEXTURE2D(specMap, sampler_specMap, uv) * specColor;
|
|
#elif defined(_SPECULAR_COLOR)
|
|
specularSmoothness = specColor;
|
|
#endif
|
|
|
|
#ifdef _GLOSSINESS_FROM_BASE_ALPHA
|
|
specularSmoothness.a = exp2(10 * alpha + 1);
|
|
#else
|
|
specularSmoothness.a = exp2(10 * specularSmoothness.a + 1);
|
|
#endif
|
|
return specularSmoothness;
|
|
}
|
|
#else
|
|
|
|
half4 SampleSpecularSmoothnessMy(float2 uv, half alpha, half4 specColor, TEXTURE2D_PARAM(specMap, sampler_specMap))
|
|
{
|
|
half4 specularSmoothness = half4(0, 0, 0, 1);
|
|
#ifdef _SPECGLOSSMAP
|
|
specularSmoothness = SAMPLE_TEXTURE2D(specMap, sampler_specMap, uv) * specColor;
|
|
#elif defined(_SPECULAR_COLOR)
|
|
specularSmoothness = specColor;
|
|
#endif
|
|
|
|
#ifdef _GLOSSINESS_FROM_BASE_ALPHA
|
|
specularSmoothness.a = alpha;
|
|
#endif
|
|
|
|
return specularSmoothness;
|
|
}
|
|
#endif
|
|
half3 SampleEmissionMy(float2 uv, half3 emissionColor, TEXTURE2D_PARAM(emissionMap, sampler_emissionMap))
|
|
{
|
|
#ifndef _EMISSION
|
|
return 0;
|
|
#else
|
|
return SAMPLE_TEXTURE2D(emissionMap, sampler_emissionMap, uv).rgb * emissionColor;
|
|
#endif
|
|
}
|
|
#ifndef BUILTIN_TARGET_API
|
|
half2 ParallaxOffset1Step(half height, half amplitude, half3 viewDirTS)
|
|
{
|
|
height = height * amplitude - amplitude / 2.0;
|
|
half3 v = normalize(viewDirTS);
|
|
v.z += 0.42;
|
|
return height * (v.xy / v.z);
|
|
}
|
|
#endif
|
|
|
|
float2 ParallaxMapping(TEXTURE2D_PARAM(heightMap, sampler_heightMap), half3 viewDirTS, half scale, float2 uv)
|
|
{
|
|
half h = SAMPLE_TEXTURE2D(heightMap, sampler_heightMap, uv).g;
|
|
float2 offset = ParallaxOffset1Step(h, scale, viewDirTS);
|
|
return offset;
|
|
}
|
|
#ifdef _SPECULAR_SETUP
|
|
#define SAMPLE_METALLICSPECULAR(uv) SAMPLE_TEXTURE2D(_SpecGlossMap, sampler_SpecGlossMap, uv)
|
|
#else
|
|
#define SAMPLE_METALLICSPECULAR(uv) SAMPLE_TEXTURE2D(_MetallicGlossMap, sampler_MetallicGlossMap, uv)
|
|
#endif
|
|
|
|
half4 SampleMetallicSpecGloss(float2 uv, half albedoAlpha)
|
|
{
|
|
half4 specGloss;
|
|
|
|
#ifdef _METALLICSPECGLOSSMAP
|
|
specGloss = half4(SAMPLE_METALLICSPECULAR(uv));
|
|
#ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
|
specGloss.a = albedoAlpha * _Smoothness;
|
|
#else
|
|
specGloss.a *= _Smoothness;
|
|
#endif
|
|
#else
|
|
#if _SPECULAR_SETUP
|
|
specGloss.rgb = _SpecColor.rgb;
|
|
#else
|
|
specGloss.rgb = _Metallic.rrr;
|
|
#endif
|
|
|
|
#ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
|
specGloss.a = albedoAlpha * _Smoothness;
|
|
#else
|
|
specGloss.a = _Smoothness;
|
|
#endif
|
|
#endif
|
|
|
|
return specGloss;
|
|
}
|
|
|
|
half SampleOcclusion(float2 uv)
|
|
{
|
|
#ifdef _OCCLUSIONMAP
|
|
half occ = SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
|
|
return LerpWhiteTo(occ, _OcclusionStrength);
|
|
#else
|
|
return half(1.0);
|
|
#endif
|
|
}
|
|
half SampleOcclusionMy(float2 uv)
|
|
{
|
|
#ifdef _OCCLUSIONMAP
|
|
#if defined(SHADER_API_GLES)
|
|
return SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
|
|
#else
|
|
half occ = SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
|
|
return LerpWhiteTo(occ, _OcclusionStrength);
|
|
#endif
|
|
#else
|
|
return 1.0;
|
|
#endif
|
|
}
|
|
half2 SampleClearCoat(float2 uv)
|
|
{
|
|
#if defined(_CLEARCOAT) || defined(_CLEARCOATMAP)
|
|
half2 clearCoatMaskSmoothness = half2(_ClearCoatMask, _ClearCoatSmoothness);
|
|
|
|
#if defined(_CLEARCOATMAP)
|
|
clearCoatMaskSmoothness *= SAMPLE_TEXTURE2D(_ClearCoatMap, sampler_ClearCoatMap, uv).rg;
|
|
#endif
|
|
|
|
return clearCoatMaskSmoothness;
|
|
#else
|
|
return half2(0.0, 1.0);
|
|
#endif
|
|
}
|
|
|
|
void ApplyPerPixelDisplacement(half3 viewDirTS, inout float2 uv)
|
|
{
|
|
#if defined(_PARALLAXMAP)
|
|
uv += ParallaxMapping(TEXTURE2D_ARGS(_ParallaxMap, sampler_ParallaxMap), viewDirTS, _Parallax, uv);
|
|
#endif
|
|
}
|
|
|
|
half3 ScaleDetailAlbedo(half3 detailAlbedo, half scale)
|
|
{
|
|
return half(2.0) * detailAlbedo * scale - scale + half(1.0);
|
|
}
|
|
|
|
half3 ApplyDetailAlbedo(float2 detailUv, half3 albedo, half detailMask)
|
|
{
|
|
#if defined(_DETAIL)
|
|
half3 detailAlbedo = SAMPLE_TEXTURE2D(_DetailAlbedoMap, sampler_DetailAlbedoMap, detailUv).rgb;
|
|
#if defined(_DETAIL_SCALED)
|
|
detailAlbedo = ScaleDetailAlbedo(detailAlbedo, _DetailAlbedoMapScale);
|
|
#else
|
|
detailAlbedo = half(2.0) * detailAlbedo;
|
|
#endif
|
|
|
|
return albedo * LerpWhiteTo(detailAlbedo, detailMask);
|
|
#else
|
|
return albedo;
|
|
#endif
|
|
}
|
|
|
|
half3 ApplyDetailNormal(float2 detailUv, half3 normalTS, half detailMask)
|
|
{
|
|
#if defined(_DETAIL)
|
|
#if BUMP_SCALE_NOT_SUPPORTED
|
|
half3 detailNormalTS = UnpackNormal(SAMPLE_TEXTURE2D(_DetailNormalMap, sampler_DetailNormalMap, detailUv));
|
|
#else
|
|
half3 detailNormalTS = UnpackNormalScale(SAMPLE_TEXTURE2D(_DetailNormalMap, sampler_DetailNormalMap, detailUv), _DetailNormalMapScale);
|
|
#endif
|
|
detailNormalTS = normalize(detailNormalTS);
|
|
|
|
return lerp(normalTS, BlendNormalRNM(normalTS, detailNormalTS), detailMask);
|
|
#else
|
|
return normalTS;
|
|
#endif
|
|
}
|
|
void Ext_SurfaceFunction1 (inout Surface o, ShaderData d)
|
|
{
|
|
|
|
float4 texcoords;
|
|
texcoords.xy = d.texcoord0.xy * _BaseMap_ST.xy + _BaseMap_ST.zw;
|
|
float2 uv = texcoords.xy;
|
|
|
|
#if _SHADING_BLINNPHONG || _SHADING_COLOR
|
|
half4 diffuseAlpha = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, texcoords.xy);
|
|
o.Albedo = diffuseAlpha.rgb * _BaseColor.rgb;
|
|
#if !_PASSFORWARD
|
|
if(_EnableToonShading == 0 || _ShadingAffectedByNormalMap == 1)
|
|
{
|
|
o.Normal = SampleNormal(texcoords.xy, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
}
|
|
#else
|
|
o.Normal = SampleNormal(texcoords.xy, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
#endif
|
|
o.Alpha = diffuseAlpha.a;
|
|
o.Alpha = o.Alpha * _BaseColor.a;
|
|
AlphaDiscard(o.Alpha, _Cutoff);
|
|
half3 emission = SampleEmissionMy(uv, _EmissionColor.rgb, TEXTURE2D_ARGS(_EmissionMap, sampler_EmissionMap));
|
|
o.Emission = emission;
|
|
#endif
|
|
|
|
if(_ShadingMode == 1 && _LightFunction == 0 )
|
|
{
|
|
#if _SHADING_BLINNPHONG
|
|
half4 specular = SampleSpecularSmoothnessMy(uv, o.Alpha, _SpecColor, TEXTURE2D_ARGS(_SpecGlossMap, sampler_SpecGlossMap));
|
|
half smoothness = specular.a;
|
|
|
|
o.Specular = specular;
|
|
o.Smoothness = smoothness;
|
|
#endif
|
|
|
|
}
|
|
else if (_ShadingMode == 1 && _LightFunction == 1)
|
|
{
|
|
#if _SHADING_PBR
|
|
#if defined(_PARALLAXMAP)
|
|
ApplyPerPixelDisplacement(d.tangentSpaceViewDir, uv);
|
|
#endif
|
|
half4 albedoAlpha = SampleAlbedoAlpha(uv, TEXTURE2D_ARGS(_BaseMap, sampler_BaseMap));
|
|
o.Alpha = AlphaMy(albedoAlpha.a, _BaseColor, _Cutoff);
|
|
|
|
half4 specGloss = SampleMetallicSpecGloss(uv, albedoAlpha.a);
|
|
o.Albedo = albedoAlpha.rgb * _BaseColor.rgb;
|
|
o.Albedo = AlphaModulate(o.Albedo, o.Alpha);
|
|
#if _SPECULAR_SETUP
|
|
o.Metallic = half(1.0);
|
|
o.Specular = specGloss.rgb;
|
|
#else
|
|
o.Metallic = specGloss.r;
|
|
o.Specular = half3(0.0, 0.0, 0.0);
|
|
#endif
|
|
o.Smoothness = specGloss.a;
|
|
#if !_PASSFORWARD
|
|
if(_EnableToonShading == 0 || _ShadingAffectedByNormalMap == 1)
|
|
{
|
|
o.Normal = SampleNormal(uv, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
}
|
|
#else
|
|
o.Normal = SampleNormal(uv, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
#endif
|
|
o.Occlusion = SampleOcclusion(uv);
|
|
o.Emission = SampleEmissionMy(uv, _EmissionColor.rgb, TEXTURE2D_ARGS(_EmissionMap, sampler_EmissionMap));
|
|
|
|
#if defined(_DETAIL)
|
|
half detailMask = SAMPLE_TEXTURE2D(_DetailMask, sampler_DetailMask, uv).a;
|
|
float2 detailUv = uv * _DetailAlbedoMap_ST.xy + _DetailAlbedoMap_ST.zw;
|
|
o.Albedo = ApplyDetailAlbedo(detailUv, o.Albedo, detailMask);
|
|
o.Normal = ApplyDetailNormal(detailUv, o.Normal, detailMask);
|
|
#endif
|
|
|
|
#endif
|
|
}
|
|
|
|
}
|
|
void ChainSurfaceFunction(inout Surface l, inout ShaderData d)
|
|
{
|
|
Ext_SurfaceFunction0(l, d);
|
|
Ext_SurfaceFunction1(l, d);
|
|
}
|
|
|
|
#if !_DECALSHADER
|
|
|
|
void ChainModifyVertex(inout VertexData v, inout VertexToPixel v2p, float4 time)
|
|
{
|
|
ExtraV2F d;
|
|
ZERO_INITIALIZE(ExtraV2F, d);
|
|
ZERO_INITIALIZE(Blackboard, d.blackboard);
|
|
d.time = time;
|
|
|
|
Ext_ModifyVertex0(v, d);
|
|
v2p.extraV2F0 = d.extraV2F0;
|
|
}
|
|
|
|
void ChainModifyTessellatedVertex(inout VertexData v, inout VertexToPixel v2p)
|
|
{
|
|
ExtraV2F d;
|
|
ZERO_INITIALIZE(ExtraV2F, d);
|
|
ZERO_INITIALIZE(Blackboard, d.blackboard);
|
|
d.extraV2F0 = v2p.extraV2F0;
|
|
v2p.extraV2F0 = d.extraV2F0;
|
|
}
|
|
|
|
void ChainFinalColorForward(inout Surface l, inout ShaderData d, inout half4 color)
|
|
{
|
|
}
|
|
|
|
void ChainFinalGBufferStandard(inout Surface s, inout ShaderData d, inout half4 GBuffer0, inout half4 GBuffer1, inout half4 GBuffer2, inout half4 outEmission, inout half4 outShadowMask)
|
|
{
|
|
}
|
|
#endif
|
|
#if _DECALSHADER
|
|
|
|
ShaderData CreateShaderData(SurfaceDescriptionInputs IN)
|
|
{
|
|
ShaderData d = (ShaderData)0;
|
|
d.TBNMatrix = float3x3(IN.WorldSpaceTangent, IN.WorldSpaceBiTangent, IN.WorldSpaceNormal);
|
|
d.worldSpaceNormal = IN.WorldSpaceNormal;
|
|
d.worldSpaceTangent = IN.WorldSpaceTangent;
|
|
|
|
d.worldSpacePosition = IN.WorldSpacePosition;
|
|
d.texcoord0 = IN.uv0.xyxy;
|
|
d.screenPos = IN.ScreenPosition;
|
|
|
|
d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - d.worldSpacePosition);
|
|
|
|
d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir);
|
|
#if _HDRP
|
|
#else
|
|
#endif
|
|
return d;
|
|
}
|
|
#else
|
|
|
|
ShaderData CreateShaderData(VertexToPixel i
|
|
#if NEED_FACING
|
|
, bool facing
|
|
#endif
|
|
)
|
|
{
|
|
ShaderData d = (ShaderData)0;
|
|
d.clipPos = i.pos;
|
|
d.worldSpacePosition = i.worldPos;
|
|
|
|
d.worldSpaceNormal = normalize(i.worldNormal);
|
|
d.worldSpaceTangent.xyz = normalize(i.worldTangent.xyz);
|
|
|
|
d.tangentSign = i.worldTangent.w * unity_WorldTransformParams.w;
|
|
float3 bitangent = cross(d.worldSpaceTangent.xyz, d.worldSpaceNormal) * d.tangentSign;
|
|
d.TBNMatrix = float3x3(d.worldSpaceTangent, -bitangent, d.worldSpaceNormal);
|
|
d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - i.worldPos);
|
|
|
|
d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir);
|
|
d.texcoord0 = i.texcoord0;
|
|
d.texcoord1 = i.texcoord1;
|
|
d.texcoord2 = i.texcoord2;
|
|
d.texcoord3 = i.texcoord3;
|
|
#if _HDRP
|
|
#else
|
|
#endif
|
|
d.extraV2F0 = i.extraV2F0;
|
|
return d;
|
|
}
|
|
|
|
#endif
|
|
#if defined(_PASSSHADOW)
|
|
float3 _LightDirection;
|
|
float3 _LightPosition;
|
|
#endif
|
|
|
|
#if (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)))
|
|
|
|
#define GetWorldToViewMatrix() _ViewMatrix
|
|
#define UNITY_MATRIX_I_V _InvViewMatrix
|
|
#define GetViewToHClipMatrix() OptimizeProjectionMatrix(_ProjMatrix)
|
|
#define UNITY_MATRIX_I_P _InvProjMatrix
|
|
#define GetWorldToHClipMatrix() _ViewProjMatrix
|
|
#define UNITY_MATRIX_I_VP _InvViewProjMatrix
|
|
#define UNITY_MATRIX_UNJITTERED_VP _NonJitteredViewProjMatrix
|
|
#define UNITY_MATRIX_PREV_VP _PrevViewProjMatrix
|
|
#define UNITY_MATRIX_PREV_I_VP _PrevInvViewProjMatrix
|
|
|
|
void MotionVectorPositionZBias(VertexToPixel input)
|
|
{
|
|
#if UNITY_REVERSED_Z
|
|
input.pos.z -= unity_MotionVectorsParams.z * input.pos.w;
|
|
#else
|
|
input.pos.z += unity_MotionVectorsParams.z * input.pos.w;
|
|
#endif
|
|
}
|
|
|
|
#endif
|
|
VertexToPixel Vert (VertexData v)
|
|
{
|
|
VertexToPixel o = (VertexToPixel)0;
|
|
|
|
UNITY_SETUP_INSTANCE_ID(v);
|
|
UNITY_TRANSFER_INSTANCE_ID(v, o);
|
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
|
|
#if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)))
|
|
VertexData previousMesh = v;
|
|
#endif
|
|
#if !_TESSELLATION_ON
|
|
ChainModifyVertex(v, o, _Time);
|
|
#endif
|
|
|
|
o.texcoord0 = v.texcoord0;
|
|
o.texcoord1 = v.texcoord1;
|
|
o.texcoord2 = v.texcoord2;
|
|
o.texcoord3 = v.texcoord3;
|
|
float3 positionWS = TransformObjectToWorld(v.vertex.xyz);
|
|
float3 normalWS = TransformObjectToWorldNormal(v.normal);
|
|
float4 tangentWS = float4(TransformObjectToWorldDir(v.tangent.xyz), v.tangent.w);
|
|
VertexPositionInputs vertexInput = GetVertexPositionInputs(v.vertex.xyz);
|
|
o.worldPos = positionWS;
|
|
o.worldNormal = normalWS;
|
|
o.worldTangent = tangentWS;
|
|
#if _PASSSHADOW
|
|
#if _CASTING_PUNCTUAL_LIGHT_SHADOW
|
|
float3 lightDirectionWS = normalize(_LightPosition - o.worldPos);
|
|
#else
|
|
float3 lightDirectionWS = _LightDirection;
|
|
#endif
|
|
o.pos = TransformWorldToHClip(ApplyShadowBias(o.worldPos, o.worldNormal, lightDirectionWS));
|
|
#if UNITY_REVERSED_Z
|
|
o.pos.z = min(o.pos.z, UNITY_NEAR_CLIP_VALUE);
|
|
#else
|
|
o.pos.z = max(o.pos.z, UNITY_NEAR_CLIP_VALUE);
|
|
#endif
|
|
#elif _PASSMETA
|
|
o.pos = MetaVertexPosition(float4(v.vertex.xyz, 0), v.texcoord1.xy, v.texcoord2.xy, unity_LightmapST, unity_DynamicLightmapST);
|
|
#else
|
|
o.pos = TransformWorldToHClip(o.worldPos);
|
|
#endif
|
|
#if _PASSFORWARD || _PASSGBUFFER
|
|
float2 uv1 = v.texcoord1.xy;
|
|
OUTPUT_LIGHTMAP_UV(uv1, unity_LightmapST, o.lightmapUV);
|
|
o.texcoord1.xy = uv1;
|
|
OUTPUT_SH(o.worldNormal, o.sh);
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
|
o.dynamicLightmapUV.xy = v.texcoord2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw;
|
|
#if UNITY_VERSION >= 60000009
|
|
OUTPUT_SH(o.worldNormal, o.sh);
|
|
#endif
|
|
#elif (defined(PROBE_VOLUMES_L1) || defined(PROBE_VOLUMES_L2)) && UNITY_VERSION >= 60000009
|
|
OUTPUT_SH4(vertexInput.positionWS, o.worldNormal.xyz, GetWorldSpaceNormalizeViewDir(vertexInput.positionWS), o.sh, o.probeOcclusion);
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef VARYINGS_NEED_FOG_AND_VERTEX_LIGHT
|
|
half fogFactor = 0;
|
|
#if defined(_FOG_FRAGMENT)
|
|
fogFactor = ComputeFogFactor(o.pos.z);
|
|
#endif
|
|
#if _BAKEDLIT
|
|
o.fogFactorAndVertexLight = half4(fogFactor, 0, 0, 0);
|
|
#else
|
|
half3 vertexLight = VertexLighting(o.worldPos, o.worldNormal);
|
|
o.fogFactorAndVertexLight = half4(fogFactor, vertexLight);
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
|
|
o.shadowCoord = GetShadowCoord(vertexInput);
|
|
#endif
|
|
|
|
#if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)))
|
|
#if !defined(TESSELLATION_ON)
|
|
MotionVectorPositionZBias(o);
|
|
#endif
|
|
|
|
o.previousPositionCS = float4(0.0, 0.0, 0.0, 1.0);
|
|
bool forceNoMotion = unity_MotionVectorsParams.y == 0.0;
|
|
|
|
if (!forceNoMotion)
|
|
{
|
|
#if defined(HAVE_VFX_MODIFICATION)
|
|
float3 previousPositionOS = currentFrameMvData.vfxParticlePositionOS;
|
|
#if defined(VFX_FEATURE_MOTION_VECTORS_VERTS)
|
|
const bool applyDeformation = false;
|
|
#else
|
|
const bool applyDeformation = true;
|
|
#endif
|
|
#else
|
|
const bool hasDeformation = unity_MotionVectorsParams.x == 1;
|
|
float3 previousPositionOS = hasDeformation ? previousMesh.previousPositionOS : previousMesh.vertex.xyz;
|
|
|
|
#if defined(AUTOMATIC_TIME_BASED_MOTION_VECTORS) && defined(GRAPH_VERTEX_USES_TIME_PARAMETERS_INPUT)
|
|
const bool applyDeformation = true;
|
|
#else
|
|
const bool applyDeformation = hasDeformation;
|
|
#endif
|
|
#endif
|
|
#if defined(FEATURES_GRAPH_VERTEX)
|
|
if (applyDeformation)
|
|
previousPositionOS = GetLastFrameDeformedPosition(previousMesh, currentFrameMvData, previousPositionOS);
|
|
else
|
|
previousPositionOS = previousMesh.positionOS;
|
|
|
|
#if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT)
|
|
previousPositionOS -= previousMesh.precomputedVelocity;
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(UNITY_DOTS_INSTANCING_ENABLED) && defined(DOTS_DEFORMED)
|
|
ApplyPreviousFrameDeformedVertexPosition(previousMesh.vertexID, previousPositionOS);
|
|
#endif
|
|
#if defined (_ADD_PRECOMPUTED_VELOCITY)
|
|
previousPositionOS -= previousMesh.precomputedVelocity;
|
|
#endif
|
|
o.positionCS = mul(UNITY_MATRIX_UNJITTERED_VP, float4(positionWS, 1.0f));
|
|
|
|
#if defined(HAVE_VFX_MODIFICATION)
|
|
#if defined(VFX_FEATURE_MOTION_VECTORS_VERTS)
|
|
#if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT) || defined(_ADD_PRECOMPUTED_VELOCITY)
|
|
#error Unexpected fast path rendering VFX motion vector while there are vertex modification afterwards.
|
|
#endif
|
|
o.previousPositionCS = VFXGetPreviousClipPosition(previousMesh, currentFrameMvData.vfxElementAttributes, o.positionCS);
|
|
#else
|
|
#if VFX_WORLD_SPACE
|
|
const float3 previousPositionWS = previousPositionOS;
|
|
#else
|
|
const float3 previousPositionWS = mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1.0f)).xyz;
|
|
#endif
|
|
o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, float4(previousPositionWS, 1.0f));
|
|
#endif
|
|
#else
|
|
o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1)));
|
|
#endif
|
|
}
|
|
#endif
|
|
|
|
return o;
|
|
}
|
|
half4 Frag (VertexToPixel IN
|
|
#ifdef _DEPTHOFFSET_ON
|
|
, out float outputDepth : SV_Depth
|
|
#endif
|
|
#if NEED_FACING
|
|
, bool facing : SV_IsFrontFace
|
|
#endif
|
|
) : SV_Target
|
|
{
|
|
UNITY_SETUP_INSTANCE_ID(IN);
|
|
|
|
#if defined(LOD_FADE_CROSSFADE)
|
|
LODFadeCrossFade(IN.pos);
|
|
#endif
|
|
|
|
ShaderData d = CreateShaderData(IN
|
|
#if NEED_FACING
|
|
, facing
|
|
#endif
|
|
);
|
|
Surface l = (Surface)0;
|
|
|
|
#ifdef _DEPTHOFFSET_ON
|
|
l.outputDepth = outputDepth;
|
|
#endif
|
|
|
|
l.Albedo = half3(0.5, 0.5, 0.5);
|
|
l.Normal = float3(0,0,1);
|
|
l.Occlusion = 1;
|
|
l.Alpha = 1;
|
|
|
|
ChainSurfaceFunction(l, d);
|
|
|
|
#ifdef _DEPTHOFFSET_ON
|
|
outputDepth = l.outputDepth;
|
|
#endif
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
ENDHLSL
|
|
|
|
}
|
|
Pass
|
|
{
|
|
Name "DepthOnly"
|
|
Tags
|
|
{
|
|
"LightMode" = "DepthOnly"
|
|
}
|
|
Blend One Zero, One Zero
|
|
Cull Back
|
|
ZTest LEqual
|
|
ZWrite On
|
|
ColorMask 0
|
|
Cull [_Cull]
|
|
HLSLPROGRAM
|
|
|
|
#pragma vertex Vert
|
|
#pragma fragment Frag
|
|
#define _PASSDEPTH 1
|
|
|
|
#if (defined(SHADER_API_GLES) || defined(SHADER_API_GLES3) || defined(SHADER_API_GLES30))
|
|
#pragma target 3.0
|
|
#else
|
|
#pragma target 4.5
|
|
#endif
|
|
#pragma prefer_hlslcc gles
|
|
#pragma exclude_renderers d3d11_9x
|
|
#pragma multi_compile_instancing
|
|
#if (!defined(SHADER_API_GLES) && !defined(SHADER_API_GLES3) && !defined(SHADER_API_GLES30))
|
|
#pragma multi_compile _ DOTS_INSTANCING_ON
|
|
#endif
|
|
#pragma shader_feature_local_fragment _SHADING_COLOR _SHADING_BLINNPHONG _SHADING_PBR
|
|
// Commented out Curved World defines
|
|
// #define CURVEDWORLD_BEND_TYPE_CLASSICRUNNER_X_POSITIVE
|
|
// #define CURVEDWORLD_BEND_ID_1
|
|
// #pragma shader_feature_local CURVEDWORLD_DISABLED_ON
|
|
// #pragma shader_feature_local CURVEDWORLD_NORMAL_TRANSFORMATION_ON
|
|
// #include "Assets/Amazing Assets/Curved World/Shaders/Core/CurvedWorldTransform.cginc"
|
|
#pragma shader_feature_local _NORMALMAP
|
|
#pragma shader_feature_local_fragment _EMISSION
|
|
|
|
#pragma shader_feature_local_fragment _ALPHATEST_ON
|
|
#pragma shader_feature_local _RECEIVE_SHADOWS_OFF
|
|
#pragma shader_feature_local_fragment _ _SPECGLOSSMAP _SPECULAR_COLOR
|
|
#pragma shader_feature_local_fragment _GLOSSINESS_FROM_BASE_ALPHA
|
|
|
|
#pragma shader_feature_local_fragment _OCCLUSIONMAP
|
|
#pragma shader_feature_local _PARALLAXMAP
|
|
#pragma shader_feature_local _ _DETAIL_MULX2 _DETAIL_SCALED
|
|
#pragma shader_feature_local_fragment _SURFACE_TYPE_TRANSPARENT
|
|
|
|
#pragma shader_feature_local_fragment _ _ALPHAPREMULTIPLY_ON _ALPHAMODULATE_ON
|
|
|
|
#pragma shader_feature_local_fragment _METALLICSPECGLOSSMAP
|
|
#pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
|
#pragma shader_feature_local_fragment _SPECULARHIGHLIGHTS_OFF
|
|
#pragma shader_feature_local_fragment _ENVIRONMENTREFLECTIONS_OFF
|
|
#pragma shader_feature_local_fragment _SPECULAR_SETUP
|
|
#define _URP 1
|
|
#define _USINGTEXCOORD1 1
|
|
#define _USINGTEXCOORD2 1
|
|
#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_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl"
|
|
#undef WorldNormalVector
|
|
#define WorldNormalVector(data, normal) mul(normal, data.TBNMatrix)
|
|
#define UnityObjectToWorldNormal(normal) mul(GetObjectToWorldMatrix(), normal)
|
|
|
|
#define _WorldSpaceLightPos0 _MainLightPosition
|
|
#define UNITY_DECLARE_TEX2D(name) TEXTURE2D(name); SAMPLER(sampler##name);
|
|
#define UNITY_DECLARE_TEX2D_NOSAMPLER(name) TEXTURE2D(name);
|
|
#define UNITY_DECLARE_TEX2DARRAY(name) TEXTURE2D_ARRAY(name); SAMPLER(sampler##name);
|
|
#define UNITY_DECLARE_TEX2DARRAY_NOSAMPLER(name) TEXTURE2D_ARRAY(name);
|
|
|
|
#define UNITY_SAMPLE_TEX2DARRAY(tex,coord) SAMPLE_TEXTURE2D_ARRAY(tex, sampler##tex, coord.xy, coord.z)
|
|
#define UNITY_SAMPLE_TEX2DARRAY_LOD(tex,coord,lod) SAMPLE_TEXTURE2D_ARRAY_LOD(tex, sampler##tex, coord.xy, coord.z, lod)
|
|
#define UNITY_SAMPLE_TEX2D(tex, coord) SAMPLE_TEXTURE2D(tex, sampler##tex, coord)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER(tex, samp, coord) SAMPLE_TEXTURE2D(tex, sampler##samp, coord)
|
|
|
|
#define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) SAMPLE_TEXTURE2D_LOD(tex, sampler_##tex, coord, lod)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) SAMPLE_TEXTURE2D_LOD (tex, sampler##samplertex,coord, lod)
|
|
#if defined(UNITY_COMPILER_HLSL)
|
|
#define UNITY_INITIALIZE_OUTPUT(type,name) name = (type)0;
|
|
#else
|
|
#define UNITY_INITIALIZE_OUTPUT(type,name)
|
|
#endif
|
|
|
|
#define sampler2D_float sampler2D
|
|
#define sampler2D_half sampler2D
|
|
struct VertexToPixel
|
|
{
|
|
float4 pos : SV_POSITION;
|
|
float3 worldPos : TEXCOORD0;
|
|
float3 worldNormal : TEXCOORD1;
|
|
float4 worldTangent : TEXCOORD2;
|
|
float4 texcoord0 : TEXCOORD3;
|
|
float4 texcoord1 : TEXCOORD4;
|
|
float4 texcoord2 : TEXCOORD5;
|
|
float4 texcoord3 : TEXCOORD6;
|
|
#if defined(LIGHTMAP_ON)
|
|
float2 lightmapUV : TEXCOORD8;
|
|
#endif
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
|
float2 dynamicLightmapUV : TEXCOORD9;
|
|
#endif
|
|
#if !defined(LIGHTMAP_ON)
|
|
float4 probeOcclusion : TEXCOORD8;
|
|
float3 sh : TEXCOORD10;
|
|
#endif
|
|
|
|
#if defined(VARYINGS_NEED_FOG_AND_VERTEX_LIGHT)
|
|
float4 fogFactorAndVertexLight : TEXCOORD11;
|
|
#endif
|
|
|
|
#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
|
|
float4 shadowCoord : TEXCOORD12;
|
|
#endif
|
|
float4 extraV2F0 : TEXCOORD13;
|
|
#if UNITY_ANY_INSTANCING_ENABLED
|
|
uint instanceID : CUSTOM_INSTANCE_ID;
|
|
#endif
|
|
#if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE)))
|
|
uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0;
|
|
#endif
|
|
#if (defined(UNITY_STEREO_INSTANCING_ENABLED))
|
|
uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex;
|
|
#endif
|
|
#if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE)
|
|
FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC;
|
|
#endif
|
|
|
|
#if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))
|
|
float4 previousPositionCS : TEXCOORD21;
|
|
float4 positionCS : TEXCOORD22;
|
|
#endif
|
|
};
|
|
struct Surface
|
|
{
|
|
half3 Albedo;
|
|
half Height;
|
|
half3 Normal;
|
|
half Smoothness;
|
|
half3 Emission;
|
|
half Metallic;
|
|
half3 Specular;
|
|
half Occlusion;
|
|
half SpecularPower;
|
|
half Alpha;
|
|
float outputDepth;
|
|
half SpecularOcclusion;
|
|
half SubsurfaceMask;
|
|
half Thickness;
|
|
half CoatMask;
|
|
half CoatSmoothness;
|
|
half Anisotropy;
|
|
half IridescenceMask;
|
|
half IridescenceThickness;
|
|
int DiffusionProfileHash;
|
|
float SpecularAAThreshold;
|
|
float SpecularAAScreenSpaceVariance;
|
|
float3 DiffuseGI;
|
|
float3 BackDiffuseGI;
|
|
float3 SpecularGI;
|
|
float ior;
|
|
float3 transmittanceColor;
|
|
float atDistance;
|
|
float transmittanceMask;
|
|
float4 ShadowMask;
|
|
float NormalAlpha;
|
|
float MAOSAlpha;
|
|
};
|
|
struct Blackboard
|
|
{
|
|
float blackboardDummyData;
|
|
};
|
|
struct ShaderData
|
|
{
|
|
float4 clipPos;
|
|
float3 localSpacePosition;
|
|
float3 localSpaceNormal;
|
|
float3 localSpaceTangent;
|
|
float3 worldSpacePosition;
|
|
float3 worldSpaceNormal;
|
|
float3 worldSpaceTangent;
|
|
float tangentSign;
|
|
|
|
float3 worldSpaceViewDir;
|
|
float3 tangentSpaceViewDir;
|
|
|
|
float4 texcoord0;
|
|
float4 texcoord1;
|
|
float4 texcoord2;
|
|
float4 texcoord3;
|
|
|
|
float2 screenUV;
|
|
float4 screenPos;
|
|
|
|
float4 vertexColor;
|
|
bool isFrontFace;
|
|
|
|
float4 extraV2F0;
|
|
float4 extraV2F1;
|
|
float4 extraV2F2;
|
|
float4 extraV2F3;
|
|
float4 extraV2F4;
|
|
float4 extraV2F5;
|
|
float4 extraV2F6;
|
|
float4 extraV2F7;
|
|
|
|
float3x3 TBNMatrix;
|
|
Blackboard blackboard;
|
|
};
|
|
|
|
struct VertexData
|
|
{
|
|
#if SHADER_TARGET > 30
|
|
#endif
|
|
float4 vertex : POSITION;
|
|
float3 normal : NORMAL;
|
|
float4 tangent : TANGENT;
|
|
float4 texcoord0 : TEXCOORD0;
|
|
#if _URP && (_USINGTEXCOORD1 || _PASSMETA || _PASSFORWARD || _PASSGBUFFER)
|
|
float4 texcoord1 : TEXCOORD1;
|
|
#endif
|
|
|
|
#if _URP && (_USINGTEXCOORD2 || _PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && defined(DYNAMICLIGHTMAP_ON)))
|
|
float4 texcoord2 : TEXCOORD2;
|
|
#endif
|
|
|
|
#if _STANDARD && (_USINGTEXCOORD1 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER || _PASSFORWARDADD) && LIGHTMAP_ON)))
|
|
float4 texcoord1 : TEXCOORD1;
|
|
#endif
|
|
#if _STANDARD && (_USINGTEXCOORD2 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && DYNAMICLIGHTMAP_ON)))
|
|
float4 texcoord2 : TEXCOORD2;
|
|
#endif
|
|
#if _HDRP
|
|
float4 texcoord1 : TEXCOORD1;
|
|
float4 texcoord2 : TEXCOORD2;
|
|
#endif
|
|
float4 texcoord3 : TEXCOORD3;
|
|
#if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))
|
|
float3 previousPositionOS : TEXCOORD4;
|
|
#if defined (_ADD_PRECOMPUTED_VELOCITY)
|
|
float3 precomputedVelocity : TEXCOORD5;
|
|
#endif
|
|
#endif
|
|
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
};
|
|
|
|
struct TessVertex
|
|
{
|
|
float4 vertex : INTERNALTESSPOS;
|
|
float3 normal : NORMAL;
|
|
float4 tangent : TANGENT;
|
|
float4 texcoord0 : TEXCOORD0;
|
|
float4 texcoord1 : TEXCOORD1;
|
|
float4 texcoord2 : TEXCOORD2;
|
|
float4 texcoord3 : TEXCOORD3;
|
|
float4 extraV2F0 : TEXCOORD5;
|
|
#if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))
|
|
float3 previousPositionOS : TEXCOORD13;
|
|
#if defined (_ADD_PRECOMPUTED_VELOCITY)
|
|
float3 precomputedVelocity : TEXCOORD14;
|
|
#endif
|
|
#endif
|
|
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
UNITY_VERTEX_OUTPUT_STEREO
|
|
};
|
|
|
|
struct ExtraV2F
|
|
{
|
|
float4 extraV2F0;
|
|
float4 extraV2F1;
|
|
float4 extraV2F2;
|
|
float4 extraV2F3;
|
|
float4 extraV2F4;
|
|
float4 extraV2F5;
|
|
float4 extraV2F6;
|
|
float4 extraV2F7;
|
|
Blackboard blackboard;
|
|
float4 time;
|
|
};
|
|
float3 WorldToTangentSpace(ShaderData d, float3 normal)
|
|
{
|
|
return mul(d.TBNMatrix, normal);
|
|
}
|
|
|
|
float3 TangentToWorldSpace(ShaderData d, float3 normal)
|
|
{
|
|
return mul(normal, d.TBNMatrix);
|
|
}
|
|
#if _STANDARD
|
|
float3 TransformWorldToObject(float3 p) { return mul(unity_WorldToObject, float4(p, 1)); };
|
|
float3 TransformObjectToWorld(float3 p) { return mul(unity_ObjectToWorld, float4(p, 1)); };
|
|
float4 TransformWorldToObject(float4 p) { return mul(unity_WorldToObject, p); };
|
|
float4 TransformObjectToWorld(float4 p) { return mul(unity_ObjectToWorld, p); };
|
|
float4x4 GetWorldToObjectMatrix() { return unity_WorldToObject; }
|
|
float4x4 GetObjectToWorldMatrix() { return unity_ObjectToWorld; }
|
|
#if (defined(SHADER_API_D3D11) || defined(SHADER_API_XBOXONE) || defined(UNITY_COMPILER_HLSLCC) || defined(SHADER_API_PSSL) || (SHADER_TARGET_SURFACE_ANALYSIS && !SHADER_TARGET_SURFACE_ANALYSIS_MOJOSHADER))
|
|
#define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) tex.SampleLevel (sampler##tex,coord, lod)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) tex.SampleLevel (sampler##samplertex,coord, lod)
|
|
#else
|
|
#define UNITY_SAMPLE_TEX2D_LOD(tex,coord,lod) tex2D (tex,coord,0,lod)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord,lod) tex2D (tex,coord,0,lod)
|
|
#endif
|
|
|
|
#undef GetWorldToObjectMatrix()
|
|
|
|
#define GetWorldToObjectMatrix() unity_WorldToObject
|
|
#endif
|
|
|
|
float3 GetCameraWorldPosition()
|
|
{
|
|
#if _HDRP
|
|
return GetCameraRelativePositionWS(_WorldSpaceCameraPos);
|
|
#else
|
|
return _WorldSpaceCameraPos;
|
|
#endif
|
|
}
|
|
|
|
#if _GRABPASSUSED
|
|
#if _STANDARD
|
|
TEXTURE2D(%GRABTEXTURE%);
|
|
SAMPLER(sampler_%GRABTEXTURE%);
|
|
#endif
|
|
|
|
half3 GetSceneColor(float2 uv)
|
|
{
|
|
#if _STANDARD
|
|
return SAMPLE_TEXTURE2D(%GRABTEXTURE%, sampler_%GRABTEXTURE%, uv).rgb;
|
|
#else
|
|
return SHADERGRAPH_SAMPLE_SCENE_COLOR(uv);
|
|
#endif
|
|
}
|
|
#endif
|
|
#if _STANDARD
|
|
UNITY_DECLARE_DEPTH_TEXTURE(_CameraDepthTexture);
|
|
float GetSceneDepth(float2 uv) { return SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv); }
|
|
float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv)); }
|
|
float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv)); }
|
|
#else
|
|
float GetSceneDepth(float2 uv) { return SHADERGRAPH_SAMPLE_SCENE_DEPTH(uv); }
|
|
float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv), _ZBufferParams); }
|
|
float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv), _ZBufferParams); }
|
|
#endif
|
|
|
|
float3 GetWorldPositionFromDepthBuffer(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
float eye = GetLinearEyeDepth(uv);
|
|
float3 camView = mul((float3x3)GetObjectToWorldMatrix(), transpose(mul(GetWorldToObjectMatrix(), UNITY_MATRIX_I_V)) [2].xyz);
|
|
|
|
float dt = dot(worldSpaceViewDir, camView);
|
|
float3 div = worldSpaceViewDir/dt;
|
|
float3 wpos = (eye * div) + GetCameraWorldPosition();
|
|
return wpos;
|
|
}
|
|
|
|
#if _HDRP
|
|
float3 ObjectToWorldSpacePosition(float3 pos)
|
|
{
|
|
return GetAbsolutePositionWS(TransformObjectToWorld(pos));
|
|
}
|
|
#else
|
|
float3 ObjectToWorldSpacePosition(float3 pos)
|
|
{
|
|
return TransformObjectToWorld(pos);
|
|
}
|
|
#endif
|
|
|
|
#if _STANDARD
|
|
UNITY_DECLARE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture);
|
|
float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
float4 depthNorms = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture, uv);
|
|
float3 norms = DecodeViewNormalStereo(depthNorms);
|
|
norms = mul((float3x3)GetWorldToViewMatrix(), norms) * 0.5 + 0.5;
|
|
return norms;
|
|
}
|
|
#elif _HDRP && !_DECALSHADER
|
|
float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
NormalData nd;
|
|
DecodeFromNormalBuffer(_ScreenSize.xy * uv, nd);
|
|
return nd.normalWS;
|
|
}
|
|
#elif _URP
|
|
#if (SHADER_LIBRARY_VERSION_MAJOR >= 10)
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl"
|
|
#endif
|
|
|
|
float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
#if (SHADER_LIBRARY_VERSION_MAJOR >= 10)
|
|
return SampleSceneNormals(uv);
|
|
#else
|
|
float3 wpos = GetWorldPositionFromDepthBuffer(uv, worldSpaceViewDir);
|
|
return normalize(-cross(ddx(wpos), ddy(wpos))) * 0.5 + 0.5;
|
|
#endif
|
|
|
|
}
|
|
#endif
|
|
|
|
#if _HDRP
|
|
|
|
half3 UnpackNormalmapRGorAG(half4 packednormal)
|
|
{
|
|
packednormal.x *= packednormal.w;
|
|
|
|
half3 normal;
|
|
normal.xy = packednormal.xy * 2 - 1;
|
|
normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy)));
|
|
return normal;
|
|
}
|
|
half3 UnpackNormal(half4 packednormal)
|
|
{
|
|
#if defined(UNITY_NO_DXT5nm)
|
|
return packednormal.xyz * 2 - 1;
|
|
#else
|
|
return UnpackNormalmapRGorAG(packednormal);
|
|
#endif
|
|
}
|
|
#endif
|
|
#if _HDRP || _URP
|
|
|
|
half3 UnpackScaleNormal(half4 packednormal, half scale)
|
|
{
|
|
#ifndef UNITY_NO_DXT5nm
|
|
packednormal.x *= packednormal.w;
|
|
#endif
|
|
half3 normal;
|
|
normal.xy = (packednormal.xy * 2 - 1) * scale;
|
|
normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy)));
|
|
return normal;
|
|
}
|
|
|
|
#endif
|
|
void GetSun(out float3 lightDir, out float3 color)
|
|
{
|
|
lightDir = float3(0.5, 0.5, 0);
|
|
color = 1;
|
|
#if _HDRP
|
|
if (_DirectionalLightCount > 0)
|
|
{
|
|
DirectionalLightData light = _DirectionalLightDatas[0];
|
|
lightDir = -light.forward.xyz;
|
|
color = light.color;
|
|
}
|
|
#elif _STANDARD
|
|
lightDir = normalize(_WorldSpaceLightPos0.xyz);
|
|
color = _LightColor0.rgb;
|
|
#elif _URP
|
|
Light light = GetMainLight();
|
|
lightDir = light.direction;
|
|
color = light.color;
|
|
#endif
|
|
}
|
|
CBUFFER_START(UnityPerMaterial)
|
|
half _LightSource;
|
|
|
|
half _ShadingMode;
|
|
half _LightFunction;
|
|
half _UseAlphaOnlyFromBaseMap;
|
|
half _EnableToonShading;
|
|
half _ShadingFunction;
|
|
int _NumberOfCells;
|
|
float _CellTransitionSmoothness;
|
|
half _RoundingMethod;
|
|
half _SumLightsBeforePosterization;
|
|
half _ShadingUseLightColors;
|
|
half _GradientMode;
|
|
half _GradientBlending;
|
|
float _GradientBlendFactor;
|
|
|
|
float4 _GradientTex_TexelSize;
|
|
half _ShadingAffectedByNormalMap;
|
|
half _EnableShadows;
|
|
float4 _CoreShadowColor;
|
|
float _TerminatorPosition;
|
|
float _TerminatorWidth;
|
|
float _TerminatorSmoothness;
|
|
float4 _FormShadowColor;
|
|
|
|
half _EnableCastShadows;
|
|
float _CastShadowsStrength;
|
|
float _CastShadowsSmoothness;
|
|
half _CastShadowColorMode;
|
|
float4 _CastShadowColor;
|
|
half _EnableSpecular;
|
|
half _SpecularBlending;
|
|
half4 _SpecularColor;
|
|
float _SpecularSize;
|
|
float _SpecularSmoothness;
|
|
float _SpecularOpacity;
|
|
half _SpecularAffectedByNormalMap;
|
|
half _SpecularUseLightColors;
|
|
half _EnableRim;
|
|
half _RimBlending;
|
|
float4 _RimColor;
|
|
float _RimSize;
|
|
float _RimSmoothness;
|
|
float _RimOpacity;
|
|
half _RimAffectedArea;
|
|
half _RimAffectedByNormalMap;
|
|
half _EnableStyling;
|
|
|
|
half _EnableStylingDistanceFade;
|
|
float _StylingDFStartingDistance;
|
|
float _StylingDFFalloff;
|
|
half _StylingAdjustDistanceFadeValue;
|
|
float _StylingDistanceFadeValue;
|
|
half _HatchingAffectedByNormalMap;
|
|
half _EnableAntiAliasing;
|
|
float4 _NoiseTex2_TexelSize;
|
|
half _EnableShadingStyling;
|
|
half _StylingShadingSyncWithOtherStyling;
|
|
half _ShadingStyle;
|
|
half _SyncWithLightPartitioning;
|
|
half _NumberOfCellsHatching;
|
|
half _StylingTerminatorPosition;
|
|
float _StylingOvermodelingFactor;
|
|
half _StylingShadingBlending;
|
|
half _StylingShadingIsInverted;
|
|
half _DrawSpace;
|
|
|
|
half _UVSet;
|
|
|
|
half _SSCameraDistanceScaled;
|
|
half _AnchorSSToObjectsOrigin;
|
|
half _CoordinateSystem;
|
|
half _PolarCenterMode;
|
|
float4 _PolarCenter;
|
|
float _StylingShadingDensity;
|
|
float _StylingShadingInitialDirection;
|
|
float _StylingShadingRotationBetweenCells;
|
|
float _StylingShadingHalftonesOffset;
|
|
float4 _StylingColor;
|
|
float _StylingShadingOpacity;
|
|
float _StylingShadingOpacityFalloff;
|
|
float _StylingShadingThicknessControl;
|
|
float _StylingShadingThickness;
|
|
float _StylingShadingThicknessFalloff;
|
|
float _StylingShadingHardness;
|
|
float _StylingShadingHalftonesRoundness;
|
|
float _StylingShadingHalftonesRoundnessFalloff;
|
|
half _StylingShadingEnableDashes;
|
|
float _StylingShadingDashesSize;
|
|
half _StylingShadingDashesUseHatchingDensity;
|
|
float _StylingShadingDashesDensity;
|
|
float _StylingShadingDashesType;
|
|
float _StylingShadingDashesRoundness;
|
|
float _StylingShadingDashesOffset;
|
|
|
|
float _StylingShadingDashesTransitionPosition;
|
|
float _StylingShadingDashesTransitionSoftness;
|
|
half _EnableShadingRandomizer;
|
|
float _ShadingNoise1Size;
|
|
float _ShadingNoise1Seed;
|
|
float _ShadingNoise2Seed;
|
|
float _NoiseIntensity;
|
|
half _SpacingRandomMode;
|
|
float _SpacingRandomIntensity;
|
|
half _OpacityRandomMode;
|
|
float _OpacityRandomIntensity;
|
|
half _LengthRandomMode;
|
|
float _LengthRandomIntensity;
|
|
half _HardnessRandomMode;
|
|
float _HardnessRandomIntensity;
|
|
half _ThicknessRandomMode;
|
|
float _ThicknesshRandomIntensity;
|
|
half _EnableCastShadowsStyling;
|
|
half _CastShadowsNumberOfCellsHatching;
|
|
float _StylingCastShadowsSmoothness;
|
|
half _StylingCastShadowsSyncWithOtherStyling;
|
|
half _CastShadowsStyle;
|
|
half _StylingCastShadowsBlending;
|
|
half _StylingCastShadowsIsInverted;
|
|
half _CastShadowsDrawSpace;
|
|
half _CastShadowsUVSet;
|
|
half _CastShadowsSSCameraDistanceScaled;
|
|
half _CastShadowsAnchorSSToObjectsOrigin;
|
|
half _CastShadowsCoordinateSystem;
|
|
half _CastShadowsPolarCenterMode;
|
|
float4 _CastShadowsPolarCenter;
|
|
float _StylingCastShadowsDensity;
|
|
float _StylingCastShadowsInitialDirection;
|
|
float _StylingCastShadowsRotationBetweenCells;
|
|
float _StylingCastShadowsHalftonesOffset;
|
|
float4 _StylingCastShadowsColor;
|
|
float _StylingCastShadowsOpacity;
|
|
float _StylingCastShadowsOpacityFalloff;
|
|
half _StylingCastShadowsThicknessControl;
|
|
float _StylingCastShadowsThickness;
|
|
float _StylingCastShadowsThicknessFalloff;
|
|
float _StylingCastShadowsHardness;
|
|
float _StylingCastShadowsHalftonesRoundness;
|
|
float _StylingCastShadowsHalftonesRoundnessFalloff;
|
|
half _StylingCastShadowsEnableDashes;
|
|
float _StylingCastShadowsDashesSize;
|
|
half _StylingCastShadowsDashesUseHatchingDensity;
|
|
float _StylingCastShadowsDashesDensity;
|
|
float _StylingCastShadowsDashesRoundness;
|
|
float _StylingCastShadowsDashesType;
|
|
float _StylingCastShadowsDashesOffset;
|
|
|
|
float _StylingCastShadowsDashesTransitionPosition;
|
|
float _StylingCastShadowsDashesTransitionSoftness;
|
|
half _EnableCastShadowsRandomizer;
|
|
float _CastShadowsNoise1Size;
|
|
float _CastShadowsNoise1Seed;
|
|
float _CastShadowsNoise2Seed;
|
|
float _CastShadowsNoiseIntensity;
|
|
half _CastShadowsSpacingRandomMode;
|
|
float _CastShadowsSpacingRandomIntensity;
|
|
half _CastShadowsOpacityRandomMode;
|
|
float _CastShadowsOpacityRandomIntensity;
|
|
half _CastShadowsHardnessRandomMode;
|
|
float _CastShadowsHardnessRandomIntensity;
|
|
half _CastShadowsLengthRandomMode;
|
|
float _CastShadowsLengthRandomIntensity;
|
|
half _CastShadowsThicknessRandomMode;
|
|
float _CastShadowsThicknesshRandomIntensity;
|
|
half _EnableSpecularStyling;
|
|
half _SyncWithSpecular;
|
|
float _StylingSpecularSize;
|
|
float _StylingSpecularSmoothness;
|
|
half _StylingSpecularCutOutShading;
|
|
half _StylingSpecularUseLightColors;
|
|
half _StylingSpecularSyncWithOtherStyling;
|
|
half _SpecularStyle;
|
|
half _StylingSpecularBlending;
|
|
half _StylingSpecularIsInverted;
|
|
half _SpecularDrawSpace;
|
|
half _SpecularUVSet;
|
|
half _SpecularSSCameraDistanceScaled;
|
|
half _SpecularAnchorSSToObjectsOrigin;
|
|
half _SpecularCoordinateSystem;
|
|
half _SpecularPolarCenterMode;
|
|
float4 _SpecularPolarCenter;
|
|
float _StylingSpecularDensity;
|
|
float _StylingSpecularRotation;
|
|
float _StylingSpecularHalftonesOffset;
|
|
float4 _StylingSpecularColor;
|
|
float _StylingSpecularOpacity;
|
|
float _StylingSpecularOpacityFalloff;
|
|
float _StylingSpecularThicknessControl;
|
|
float _StylingSpecularThickness;
|
|
float _StylingSpecularThicknessFalloff;
|
|
float _StylingSpecularHardness;
|
|
float _StylingSpecularHalftonesRoundness;
|
|
float _StylingSpecularHalftonesRoundnessFalloff;
|
|
half _StylingSpecularEnableDashes;
|
|
float _StylingSpecularDashesSize;
|
|
half _StylingSpecularDashesUseHatchingDensity;
|
|
float _StylingSpecularDashesDensity;
|
|
float _StylingSpecularDashesRoundness;
|
|
float _StylingSpecularDashesType;
|
|
float _StylingSpecularDashesOffset;
|
|
|
|
float _StylingSpecularDashesTransitionPosition;
|
|
float _StylingSpecularDashesTransitionSoftness;
|
|
float _EnableSpecularRandomizer;
|
|
float _SpecularNoise1Size;
|
|
float _SpecularNoise1Seed;
|
|
float _SpecularNoise2Seed;
|
|
float _SpecularNoiseIntensity;
|
|
half _SpecularSpacingRandomMode;
|
|
float _SpecularSpacingRandomIntensity;
|
|
half _SpecularOpacityRandomMode;
|
|
float _SpecularOpacityRandomIntensity;
|
|
half _SpecularLengthRandomMode;
|
|
float _SpecularLengthRandomIntensity;
|
|
half _SpecularHardnessRandomMode;
|
|
float _SpecularHardnessRandomIntensity;
|
|
half _SpecularThicknessRandomMode;
|
|
float _SpecularThicknesshRandomIntensity;
|
|
half _EnableRimStyling;
|
|
half _StylingRimSyncWithOtherStyling;
|
|
half _SyncWithRim;
|
|
float _StylingRimSize;
|
|
float _StylingRimSmoothness;
|
|
half _StylingRimAffectedArea;
|
|
half _RimStyle;
|
|
half _StylingRimBlending;
|
|
half _StylingRimIsInverted;
|
|
half _RimDrawSpace;
|
|
half _RimUVSet;
|
|
half _RimSSCameraDistanceScaled;
|
|
half _RimAnchorSSToObjectsOrigin;
|
|
half _RimCoordinateSystem;
|
|
half _RimPolarCenterMode;
|
|
float4 _RimPolarCenter;
|
|
float _StylingRimDensity;
|
|
float _StylingRimRotation;
|
|
float _StylingRimHalftonesOffset;
|
|
float4 _StylingRimColor;
|
|
float _StylingRimOpacity;
|
|
float _StylingRimOpacityFalloff;
|
|
float _StylingRimThicknessControl;
|
|
float _StylingRimThickness;
|
|
float _StylingRimThicknessFalloff;
|
|
float _StylingRimHardness;
|
|
float _StylingRimHalftonesRoundness;
|
|
float _StylingRimHalftonesRoundnessFalloff;
|
|
half _StylingRimEnableDashes;
|
|
float _StylingRimDashesSize;
|
|
half _StylingRimDashesUseHatchingDensity;
|
|
float _StylingRimDashesDensity;
|
|
float _StylingRimDashesRoundness;
|
|
float _StylingRimDashesType;
|
|
float _StylingRimDashesOffset;
|
|
|
|
float _StylingRimDashesTransitionPosition;
|
|
float _StylingRimDashesTransitionSoftness;
|
|
float _EnableRimRandomizer;
|
|
float _RimNoise1Size;
|
|
float _RimNoise1Seed;
|
|
float _RimNoise2Seed;
|
|
float _RimNoiseIntensity;
|
|
half _RimSpacingRandomMode;
|
|
float _RimSpacingRandomIntensity;
|
|
half _RimOpacityRandomMode;
|
|
float _RimOpacityRandomIntensity;
|
|
half _RimLengthRandomMode;
|
|
float _RimLengthRandomIntensity;
|
|
half _RimHardnessRandomMode;
|
|
float _RimHardnessRandomIntensity;
|
|
half _RimThicknessRandomMode;
|
|
float _RimThicknesshRandomIntensity;
|
|
half4 _OutlineColor;
|
|
half _OutlineWidth;
|
|
half _EnableOutline;
|
|
half _OutlineConstantScreenWidth;
|
|
half4 _BaseColor;
|
|
float _BumpScale;
|
|
float4 _BaseMap_ST;
|
|
half _Cutoff;
|
|
half4 _EmissionColor;
|
|
half4 _SpecColor;
|
|
float _Smoothness;
|
|
float4 _DetailAlbedoMap_ST;
|
|
half _Metallic;
|
|
half _Parallax;
|
|
half _OcclusionStrength;
|
|
half _DetailAlbedoMapScale;
|
|
half _DetailNormalMapScale;
|
|
#if UNITY_VERSION < 202200
|
|
float _AlphaToMaskAvailable;
|
|
#endif
|
|
CBUFFER_END
|
|
sampler2D _NoiseMap1;
|
|
sampler2D _NoiseMap2;
|
|
|
|
sampler2D _HatchingMap;
|
|
sampler2D _GradientTex;
|
|
void Ext_ModifyVertex0 (inout VertexData v, inout ExtraV2F d)
|
|
{
|
|
#if defined(CURVEDWORLD_IS_INSTALLED) && !defined(CURVEDWORLD_DISABLED_ON)
|
|
#ifdef CURVEDWORLD_NORMAL_TRANSFORMATION_ON
|
|
CURVEDWORLD_TRANSFORM_VERTEX_AND_NORMAL(v.vertex, v.normal, v.tangent)
|
|
#else
|
|
CURVEDWORLD_TRANSFORM_VERTEX(v.vertex)
|
|
#endif
|
|
#endif
|
|
float4x4 UnityObjectToClipPosMatrix = mul(GetWorldToHClipMatrix(), GetObjectToWorldMatrix());
|
|
float4 pos = mul(UnityObjectToClipPosMatrix, v.vertex);
|
|
float4 objectOriginClipPos = mul(UnityObjectToClipPosMatrix, float4(0, 0, 0, 1));
|
|
objectOriginClipPos.xy = clamp(objectOriginClipPos.xy, -1.0*objectOriginClipPos.w, 1.0*objectOriginClipPos.w);
|
|
float4 originScreenPos = ComputeScreenPos(objectOriginClipPos);
|
|
float2 originScreenUV = originScreenPos.xy/originScreenPos.w;
|
|
float4 screenPos = ComputeScreenPos(pos);
|
|
float2 uv = ((screenPos.xy) / screenPos.w);
|
|
float4 ssss = ComputeScreenPos(pos);
|
|
d.extraV2F0 = float4(originScreenUV,originScreenUV);
|
|
}
|
|
void Ext_SurfaceFunction0 (inout Surface o, ShaderData d)
|
|
{
|
|
float2 test = d.texcoord1.xy;
|
|
test = d.texcoord2.xy;
|
|
test = d.texcoord3.xy;
|
|
|
|
}
|
|
TEXTURE2D(_BaseMap); SAMPLER(sampler_BaseMap);
|
|
TEXTURE2D(_BumpMap); SAMPLER(sampler_BumpMap);
|
|
TEXTURE2D(_EmissionMap); SAMPLER(sampler_EmissionMap);
|
|
TEXTURE2D(_SpecGlossMap); SAMPLER(sampler_SpecGlossMap);
|
|
TEXTURE2D(_ParallaxMap); SAMPLER(sampler_ParallaxMap);
|
|
TEXTURE2D(_OcclusionMap); SAMPLER(sampler_OcclusionMap);
|
|
TEXTURE2D(_DetailMask); SAMPLER(sampler_DetailMask);
|
|
TEXTURE2D(_DetailAlbedoMap); SAMPLER(sampler_DetailAlbedoMap);
|
|
TEXTURE2D(_DetailNormalMap); SAMPLER(sampler_DetailNormalMap);
|
|
TEXTURE2D(_MetallicGlossMap); SAMPLER(sampler_MetallicGlossMap);
|
|
TEXTURE2D(_ClearCoatMap); SAMPLER(sampler_ClearCoatMap);
|
|
#if defined(_DETAIL_MULX2) || defined(_DETAIL_SCALED)
|
|
#define _DETAIL
|
|
#endif
|
|
|
|
#if _SPECULAR_SETUP
|
|
#define _USESPECULAR 1
|
|
#else
|
|
#undef _USESPECULAR
|
|
#endif
|
|
float SharpenAlphaMy(float alpha, float alphaClipTreshold)
|
|
{
|
|
return saturate((alpha - alphaClipTreshold) / max(fwidth(alpha), 0.0001) + 0.5);
|
|
}
|
|
#if UNITY_VERSION < 202200
|
|
half3 AlphaModulate(half3 albedo, half alpha)
|
|
{
|
|
#if defined(_ALPHAMODULATE_ON)
|
|
return lerp(half3(1.0, 1.0, 1.0), albedo, alpha);
|
|
#else
|
|
return albedo;
|
|
#endif
|
|
}
|
|
|
|
#if defined(_ALPHATEST_ON)
|
|
bool IsAlphaToMaskAvailable()
|
|
{
|
|
return (_AlphaToMaskAvailable != 0.0);
|
|
}
|
|
half AlphaClip(half alpha, half cutoff)
|
|
{
|
|
half clippedAlpha = (alpha >= cutoff) ? float(alpha) : 0.0;
|
|
|
|
half alphaToCoverageAlpha = SharpenAlphaMy(alpha, cutoff);
|
|
|
|
alpha = IsAlphaToMaskAvailable() ? alphaToCoverageAlpha : clippedAlpha;
|
|
clip(alpha - 0.0001);
|
|
|
|
return alpha;
|
|
}
|
|
#endif
|
|
#endif
|
|
#if UNITY_VERSION < 202220
|
|
int _DebugSceneOverrideMode;
|
|
#endif
|
|
|
|
bool IsAlphaDiscardEnabledMy()
|
|
{
|
|
#if defined(DEBUG_DISPLAY)
|
|
return (_DebugSceneOverrideMode == DEBUGSCENEOVERRIDEMODE_NONE);
|
|
#else
|
|
return true;
|
|
#endif
|
|
}
|
|
half AlphaMy(half albedoAlpha, half4 color, half cutoff)
|
|
{
|
|
#if !defined(_SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A) && !defined(_GLOSSINESS_FROM_BASE_ALPHA)
|
|
half alpha = albedoAlpha * color.a;
|
|
#else
|
|
half alpha = color.a;
|
|
#endif
|
|
#ifdef _ALPHATEST_ON
|
|
if (IsAlphaDiscardEnabledMy())
|
|
alpha = AlphaClip(alpha, cutoff);
|
|
#endif
|
|
|
|
return alpha;
|
|
}
|
|
half4 SampleAlbedoAlpha(float2 uv, TEXTURE2D_PARAM(albedoAlphaMap, sampler_albedoAlphaMap))
|
|
{
|
|
return half4(SAMPLE_TEXTURE2D(albedoAlphaMap, sampler_albedoAlphaMap, uv));
|
|
}
|
|
half3 SampleNormal(float2 uv, TEXTURE2D_PARAM(bumpMap, sampler_bumpMap), half scale = half(1.0))
|
|
{
|
|
#ifdef _NORMALMAP
|
|
half4 n = SAMPLE_TEXTURE2D(bumpMap, sampler_bumpMap, uv);
|
|
#if BUMP_SCALE_NOT_SUPPORTED
|
|
return UnpackNormal(n);
|
|
#else
|
|
return UnpackNormalScale(n, scale);
|
|
#endif
|
|
#else
|
|
return half3(0.0h, 0.0h, 1.0h);
|
|
#endif
|
|
}
|
|
#if UNITY_VERSION < 202100
|
|
half4 SampleSpecularSmoothnessMy(half2 uv, half alpha, half4 specColor, TEXTURE2D_PARAM( specMap, sampler_specMap))
|
|
{
|
|
half4 specularSmoothness = half4(0.0h, 0.0h, 0.0h, 1.0h);
|
|
#ifdef _SPECGLOSSMAP
|
|
specularSmoothness = SAMPLE_TEXTURE2D(specMap, sampler_specMap, uv) * specColor;
|
|
#elif defined(_SPECULAR_COLOR)
|
|
specularSmoothness = specColor;
|
|
#endif
|
|
|
|
#ifdef _GLOSSINESS_FROM_BASE_ALPHA
|
|
specularSmoothness.a = exp2(10 * alpha + 1);
|
|
#else
|
|
specularSmoothness.a = exp2(10 * specularSmoothness.a + 1);
|
|
#endif
|
|
return specularSmoothness;
|
|
}
|
|
#else
|
|
|
|
half4 SampleSpecularSmoothnessMy(float2 uv, half alpha, half4 specColor, TEXTURE2D_PARAM(specMap, sampler_specMap))
|
|
{
|
|
half4 specularSmoothness = half4(0, 0, 0, 1);
|
|
#ifdef _SPECGLOSSMAP
|
|
specularSmoothness = SAMPLE_TEXTURE2D(specMap, sampler_specMap, uv) * specColor;
|
|
#elif defined(_SPECULAR_COLOR)
|
|
specularSmoothness = specColor;
|
|
#endif
|
|
|
|
#ifdef _GLOSSINESS_FROM_BASE_ALPHA
|
|
specularSmoothness.a = alpha;
|
|
#endif
|
|
|
|
return specularSmoothness;
|
|
}
|
|
#endif
|
|
half3 SampleEmissionMy(float2 uv, half3 emissionColor, TEXTURE2D_PARAM(emissionMap, sampler_emissionMap))
|
|
{
|
|
#ifndef _EMISSION
|
|
return 0;
|
|
#else
|
|
return SAMPLE_TEXTURE2D(emissionMap, sampler_emissionMap, uv).rgb * emissionColor;
|
|
#endif
|
|
}
|
|
#ifndef BUILTIN_TARGET_API
|
|
half2 ParallaxOffset1Step(half height, half amplitude, half3 viewDirTS)
|
|
{
|
|
height = height * amplitude - amplitude / 2.0;
|
|
half3 v = normalize(viewDirTS);
|
|
v.z += 0.42;
|
|
return height * (v.xy / v.z);
|
|
}
|
|
#endif
|
|
|
|
float2 ParallaxMapping(TEXTURE2D_PARAM(heightMap, sampler_heightMap), half3 viewDirTS, half scale, float2 uv)
|
|
{
|
|
half h = SAMPLE_TEXTURE2D(heightMap, sampler_heightMap, uv).g;
|
|
float2 offset = ParallaxOffset1Step(h, scale, viewDirTS);
|
|
return offset;
|
|
}
|
|
#ifdef _SPECULAR_SETUP
|
|
#define SAMPLE_METALLICSPECULAR(uv) SAMPLE_TEXTURE2D(_SpecGlossMap, sampler_SpecGlossMap, uv)
|
|
#else
|
|
#define SAMPLE_METALLICSPECULAR(uv) SAMPLE_TEXTURE2D(_MetallicGlossMap, sampler_MetallicGlossMap, uv)
|
|
#endif
|
|
|
|
half4 SampleMetallicSpecGloss(float2 uv, half albedoAlpha)
|
|
{
|
|
half4 specGloss;
|
|
|
|
#ifdef _METALLICSPECGLOSSMAP
|
|
specGloss = half4(SAMPLE_METALLICSPECULAR(uv));
|
|
#ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
|
specGloss.a = albedoAlpha * _Smoothness;
|
|
#else
|
|
specGloss.a *= _Smoothness;
|
|
#endif
|
|
#else
|
|
#if _SPECULAR_SETUP
|
|
specGloss.rgb = _SpecColor.rgb;
|
|
#else
|
|
specGloss.rgb = _Metallic.rrr;
|
|
#endif
|
|
|
|
#ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
|
specGloss.a = albedoAlpha * _Smoothness;
|
|
#else
|
|
specGloss.a = _Smoothness;
|
|
#endif
|
|
#endif
|
|
|
|
return specGloss;
|
|
}
|
|
|
|
half SampleOcclusion(float2 uv)
|
|
{
|
|
#ifdef _OCCLUSIONMAP
|
|
half occ = SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
|
|
return LerpWhiteTo(occ, _OcclusionStrength);
|
|
#else
|
|
return half(1.0);
|
|
#endif
|
|
}
|
|
half SampleOcclusionMy(float2 uv)
|
|
{
|
|
#ifdef _OCCLUSIONMAP
|
|
#if defined(SHADER_API_GLES)
|
|
return SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
|
|
#else
|
|
half occ = SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
|
|
return LerpWhiteTo(occ, _OcclusionStrength);
|
|
#endif
|
|
#else
|
|
return 1.0;
|
|
#endif
|
|
}
|
|
half2 SampleClearCoat(float2 uv)
|
|
{
|
|
#if defined(_CLEARCOAT) || defined(_CLEARCOATMAP)
|
|
half2 clearCoatMaskSmoothness = half2(_ClearCoatMask, _ClearCoatSmoothness);
|
|
|
|
#if defined(_CLEARCOATMAP)
|
|
clearCoatMaskSmoothness *= SAMPLE_TEXTURE2D(_ClearCoatMap, sampler_ClearCoatMap, uv).rg;
|
|
#endif
|
|
|
|
return clearCoatMaskSmoothness;
|
|
#else
|
|
return half2(0.0, 1.0);
|
|
#endif
|
|
}
|
|
|
|
void ApplyPerPixelDisplacement(half3 viewDirTS, inout float2 uv)
|
|
{
|
|
#if defined(_PARALLAXMAP)
|
|
uv += ParallaxMapping(TEXTURE2D_ARGS(_ParallaxMap, sampler_ParallaxMap), viewDirTS, _Parallax, uv);
|
|
#endif
|
|
}
|
|
|
|
half3 ScaleDetailAlbedo(half3 detailAlbedo, half scale)
|
|
{
|
|
return half(2.0) * detailAlbedo * scale - scale + half(1.0);
|
|
}
|
|
|
|
half3 ApplyDetailAlbedo(float2 detailUv, half3 albedo, half detailMask)
|
|
{
|
|
#if defined(_DETAIL)
|
|
half3 detailAlbedo = SAMPLE_TEXTURE2D(_DetailAlbedoMap, sampler_DetailAlbedoMap, detailUv).rgb;
|
|
#if defined(_DETAIL_SCALED)
|
|
detailAlbedo = ScaleDetailAlbedo(detailAlbedo, _DetailAlbedoMapScale);
|
|
#else
|
|
detailAlbedo = half(2.0) * detailAlbedo;
|
|
#endif
|
|
|
|
return albedo * LerpWhiteTo(detailAlbedo, detailMask);
|
|
#else
|
|
return albedo;
|
|
#endif
|
|
}
|
|
|
|
half3 ApplyDetailNormal(float2 detailUv, half3 normalTS, half detailMask)
|
|
{
|
|
#if defined(_DETAIL)
|
|
#if BUMP_SCALE_NOT_SUPPORTED
|
|
half3 detailNormalTS = UnpackNormal(SAMPLE_TEXTURE2D(_DetailNormalMap, sampler_DetailNormalMap, detailUv));
|
|
#else
|
|
half3 detailNormalTS = UnpackNormalScale(SAMPLE_TEXTURE2D(_DetailNormalMap, sampler_DetailNormalMap, detailUv), _DetailNormalMapScale);
|
|
#endif
|
|
detailNormalTS = normalize(detailNormalTS);
|
|
|
|
return lerp(normalTS, BlendNormalRNM(normalTS, detailNormalTS), detailMask);
|
|
#else
|
|
return normalTS;
|
|
#endif
|
|
}
|
|
void Ext_SurfaceFunction1 (inout Surface o, ShaderData d)
|
|
{
|
|
|
|
float4 texcoords;
|
|
texcoords.xy = d.texcoord0.xy * _BaseMap_ST.xy + _BaseMap_ST.zw;
|
|
float2 uv = texcoords.xy;
|
|
|
|
#if _SHADING_BLINNPHONG || _SHADING_COLOR
|
|
half4 diffuseAlpha = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, texcoords.xy);
|
|
o.Albedo = diffuseAlpha.rgb * _BaseColor.rgb;
|
|
#if !_PASSFORWARD
|
|
if(_EnableToonShading == 0 || _ShadingAffectedByNormalMap == 1)
|
|
{
|
|
o.Normal = SampleNormal(texcoords.xy, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
}
|
|
#else
|
|
o.Normal = SampleNormal(texcoords.xy, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
#endif
|
|
o.Alpha = diffuseAlpha.a;
|
|
o.Alpha = o.Alpha * _BaseColor.a;
|
|
AlphaDiscard(o.Alpha, _Cutoff);
|
|
half3 emission = SampleEmissionMy(uv, _EmissionColor.rgb, TEXTURE2D_ARGS(_EmissionMap, sampler_EmissionMap));
|
|
o.Emission = emission;
|
|
#endif
|
|
|
|
if(_ShadingMode == 1 && _LightFunction == 0 )
|
|
{
|
|
#if _SHADING_BLINNPHONG
|
|
half4 specular = SampleSpecularSmoothnessMy(uv, o.Alpha, _SpecColor, TEXTURE2D_ARGS(_SpecGlossMap, sampler_SpecGlossMap));
|
|
half smoothness = specular.a;
|
|
|
|
o.Specular = specular;
|
|
o.Smoothness = smoothness;
|
|
#endif
|
|
|
|
}
|
|
else if (_ShadingMode == 1 && _LightFunction == 1)
|
|
{
|
|
#if _SHADING_PBR
|
|
#if defined(_PARALLAXMAP)
|
|
ApplyPerPixelDisplacement(d.tangentSpaceViewDir, uv);
|
|
#endif
|
|
half4 albedoAlpha = SampleAlbedoAlpha(uv, TEXTURE2D_ARGS(_BaseMap, sampler_BaseMap));
|
|
o.Alpha = AlphaMy(albedoAlpha.a, _BaseColor, _Cutoff);
|
|
|
|
half4 specGloss = SampleMetallicSpecGloss(uv, albedoAlpha.a);
|
|
o.Albedo = albedoAlpha.rgb * _BaseColor.rgb;
|
|
o.Albedo = AlphaModulate(o.Albedo, o.Alpha);
|
|
#if _SPECULAR_SETUP
|
|
o.Metallic = half(1.0);
|
|
o.Specular = specGloss.rgb;
|
|
#else
|
|
o.Metallic = specGloss.r;
|
|
o.Specular = half3(0.0, 0.0, 0.0);
|
|
#endif
|
|
o.Smoothness = specGloss.a;
|
|
#if !_PASSFORWARD
|
|
if(_EnableToonShading == 0 || _ShadingAffectedByNormalMap == 1)
|
|
{
|
|
o.Normal = SampleNormal(uv, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
}
|
|
#else
|
|
o.Normal = SampleNormal(uv, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
#endif
|
|
o.Occlusion = SampleOcclusion(uv);
|
|
o.Emission = SampleEmissionMy(uv, _EmissionColor.rgb, TEXTURE2D_ARGS(_EmissionMap, sampler_EmissionMap));
|
|
|
|
#if defined(_DETAIL)
|
|
half detailMask = SAMPLE_TEXTURE2D(_DetailMask, sampler_DetailMask, uv).a;
|
|
float2 detailUv = uv * _DetailAlbedoMap_ST.xy + _DetailAlbedoMap_ST.zw;
|
|
o.Albedo = ApplyDetailAlbedo(detailUv, o.Albedo, detailMask);
|
|
o.Normal = ApplyDetailNormal(detailUv, o.Normal, detailMask);
|
|
#endif
|
|
|
|
#endif
|
|
}
|
|
|
|
}
|
|
void ChainSurfaceFunction(inout Surface l, inout ShaderData d)
|
|
{
|
|
Ext_SurfaceFunction0(l, d);
|
|
Ext_SurfaceFunction1(l, d);
|
|
}
|
|
|
|
#if !_DECALSHADER
|
|
|
|
void ChainModifyVertex(inout VertexData v, inout VertexToPixel v2p, float4 time)
|
|
{
|
|
ExtraV2F d;
|
|
ZERO_INITIALIZE(ExtraV2F, d);
|
|
ZERO_INITIALIZE(Blackboard, d.blackboard);
|
|
d.time = time;
|
|
|
|
Ext_ModifyVertex0(v, d);
|
|
v2p.extraV2F0 = d.extraV2F0;
|
|
}
|
|
|
|
void ChainModifyTessellatedVertex(inout VertexData v, inout VertexToPixel v2p)
|
|
{
|
|
ExtraV2F d;
|
|
ZERO_INITIALIZE(ExtraV2F, d);
|
|
ZERO_INITIALIZE(Blackboard, d.blackboard);
|
|
d.extraV2F0 = v2p.extraV2F0;
|
|
v2p.extraV2F0 = d.extraV2F0;
|
|
}
|
|
|
|
void ChainFinalColorForward(inout Surface l, inout ShaderData d, inout half4 color)
|
|
{
|
|
}
|
|
|
|
void ChainFinalGBufferStandard(inout Surface s, inout ShaderData d, inout half4 GBuffer0, inout half4 GBuffer1, inout half4 GBuffer2, inout half4 outEmission, inout half4 outShadowMask)
|
|
{
|
|
}
|
|
#endif
|
|
#if _DECALSHADER
|
|
|
|
ShaderData CreateShaderData(SurfaceDescriptionInputs IN)
|
|
{
|
|
ShaderData d = (ShaderData)0;
|
|
d.TBNMatrix = float3x3(IN.WorldSpaceTangent, IN.WorldSpaceBiTangent, IN.WorldSpaceNormal);
|
|
d.worldSpaceNormal = IN.WorldSpaceNormal;
|
|
d.worldSpaceTangent = IN.WorldSpaceTangent;
|
|
|
|
d.worldSpacePosition = IN.WorldSpacePosition;
|
|
d.texcoord0 = IN.uv0.xyxy;
|
|
d.screenPos = IN.ScreenPosition;
|
|
|
|
d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - d.worldSpacePosition);
|
|
|
|
d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir);
|
|
#if _HDRP
|
|
#else
|
|
#endif
|
|
return d;
|
|
}
|
|
#else
|
|
|
|
ShaderData CreateShaderData(VertexToPixel i
|
|
#if NEED_FACING
|
|
, bool facing
|
|
#endif
|
|
)
|
|
{
|
|
ShaderData d = (ShaderData)0;
|
|
d.clipPos = i.pos;
|
|
d.worldSpacePosition = i.worldPos;
|
|
|
|
d.worldSpaceNormal = normalize(i.worldNormal);
|
|
d.worldSpaceTangent.xyz = normalize(i.worldTangent.xyz);
|
|
|
|
d.tangentSign = i.worldTangent.w * unity_WorldTransformParams.w;
|
|
float3 bitangent = cross(d.worldSpaceTangent.xyz, d.worldSpaceNormal) * d.tangentSign;
|
|
d.TBNMatrix = float3x3(d.worldSpaceTangent, -bitangent, d.worldSpaceNormal);
|
|
d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - i.worldPos);
|
|
|
|
d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir);
|
|
d.texcoord0 = i.texcoord0;
|
|
d.texcoord1 = i.texcoord1;
|
|
d.texcoord2 = i.texcoord2;
|
|
d.texcoord3 = i.texcoord3;
|
|
#if _HDRP
|
|
#else
|
|
#endif
|
|
d.extraV2F0 = i.extraV2F0;
|
|
return d;
|
|
}
|
|
|
|
#endif
|
|
#if defined(_PASSSHADOW)
|
|
float3 _LightDirection;
|
|
float3 _LightPosition;
|
|
#endif
|
|
|
|
#if (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)))
|
|
|
|
#define GetWorldToViewMatrix() _ViewMatrix
|
|
#define UNITY_MATRIX_I_V _InvViewMatrix
|
|
#define GetViewToHClipMatrix() OptimizeProjectionMatrix(_ProjMatrix)
|
|
#define UNITY_MATRIX_I_P _InvProjMatrix
|
|
#define GetWorldToHClipMatrix() _ViewProjMatrix
|
|
#define UNITY_MATRIX_I_VP _InvViewProjMatrix
|
|
#define UNITY_MATRIX_UNJITTERED_VP _NonJitteredViewProjMatrix
|
|
#define UNITY_MATRIX_PREV_VP _PrevViewProjMatrix
|
|
#define UNITY_MATRIX_PREV_I_VP _PrevInvViewProjMatrix
|
|
|
|
void MotionVectorPositionZBias(VertexToPixel input)
|
|
{
|
|
#if UNITY_REVERSED_Z
|
|
input.pos.z -= unity_MotionVectorsParams.z * input.pos.w;
|
|
#else
|
|
input.pos.z += unity_MotionVectorsParams.z * input.pos.w;
|
|
#endif
|
|
}
|
|
|
|
#endif
|
|
VertexToPixel Vert (VertexData v)
|
|
{
|
|
VertexToPixel o = (VertexToPixel)0;
|
|
|
|
UNITY_SETUP_INSTANCE_ID(v);
|
|
UNITY_TRANSFER_INSTANCE_ID(v, o);
|
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
|
|
#if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)))
|
|
VertexData previousMesh = v;
|
|
#endif
|
|
#if !_TESSELLATION_ON
|
|
ChainModifyVertex(v, o, _Time);
|
|
#endif
|
|
|
|
o.texcoord0 = v.texcoord0;
|
|
o.texcoord1 = v.texcoord1;
|
|
o.texcoord2 = v.texcoord2;
|
|
o.texcoord3 = v.texcoord3;
|
|
float3 positionWS = TransformObjectToWorld(v.vertex.xyz);
|
|
float3 normalWS = TransformObjectToWorldNormal(v.normal);
|
|
float4 tangentWS = float4(TransformObjectToWorldDir(v.tangent.xyz), v.tangent.w);
|
|
VertexPositionInputs vertexInput = GetVertexPositionInputs(v.vertex.xyz);
|
|
o.worldPos = positionWS;
|
|
o.worldNormal = normalWS;
|
|
o.worldTangent = tangentWS;
|
|
#if _PASSSHADOW
|
|
#if _CASTING_PUNCTUAL_LIGHT_SHADOW
|
|
float3 lightDirectionWS = normalize(_LightPosition - o.worldPos);
|
|
#else
|
|
float3 lightDirectionWS = _LightDirection;
|
|
#endif
|
|
o.pos = TransformWorldToHClip(ApplyShadowBias(o.worldPos, o.worldNormal, lightDirectionWS));
|
|
#if UNITY_REVERSED_Z
|
|
o.pos.z = min(o.pos.z, UNITY_NEAR_CLIP_VALUE);
|
|
#else
|
|
o.pos.z = max(o.pos.z, UNITY_NEAR_CLIP_VALUE);
|
|
#endif
|
|
#elif _PASSMETA
|
|
o.pos = MetaVertexPosition(float4(v.vertex.xyz, 0), v.texcoord1.xy, v.texcoord2.xy, unity_LightmapST, unity_DynamicLightmapST);
|
|
#else
|
|
o.pos = TransformWorldToHClip(o.worldPos);
|
|
#endif
|
|
#if _PASSFORWARD || _PASSGBUFFER
|
|
float2 uv1 = v.texcoord1.xy;
|
|
OUTPUT_LIGHTMAP_UV(uv1, unity_LightmapST, o.lightmapUV);
|
|
o.texcoord1.xy = uv1;
|
|
OUTPUT_SH(o.worldNormal, o.sh);
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
|
o.dynamicLightmapUV.xy = v.texcoord2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw;
|
|
#if UNITY_VERSION >= 60000009
|
|
OUTPUT_SH(o.worldNormal, o.sh);
|
|
#endif
|
|
#elif (defined(PROBE_VOLUMES_L1) || defined(PROBE_VOLUMES_L2)) && UNITY_VERSION >= 60000009
|
|
OUTPUT_SH4(vertexInput.positionWS, o.worldNormal.xyz, GetWorldSpaceNormalizeViewDir(vertexInput.positionWS), o.sh, o.probeOcclusion);
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef VARYINGS_NEED_FOG_AND_VERTEX_LIGHT
|
|
half fogFactor = 0;
|
|
#if defined(_FOG_FRAGMENT)
|
|
fogFactor = ComputeFogFactor(o.pos.z);
|
|
#endif
|
|
#if _BAKEDLIT
|
|
o.fogFactorAndVertexLight = half4(fogFactor, 0, 0, 0);
|
|
#else
|
|
half3 vertexLight = VertexLighting(o.worldPos, o.worldNormal);
|
|
o.fogFactorAndVertexLight = half4(fogFactor, vertexLight);
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
|
|
o.shadowCoord = GetShadowCoord(vertexInput);
|
|
#endif
|
|
|
|
#if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)))
|
|
#if !defined(TESSELLATION_ON)
|
|
MotionVectorPositionZBias(o);
|
|
#endif
|
|
|
|
o.previousPositionCS = float4(0.0, 0.0, 0.0, 1.0);
|
|
bool forceNoMotion = unity_MotionVectorsParams.y == 0.0;
|
|
|
|
if (!forceNoMotion)
|
|
{
|
|
#if defined(HAVE_VFX_MODIFICATION)
|
|
float3 previousPositionOS = currentFrameMvData.vfxParticlePositionOS;
|
|
#if defined(VFX_FEATURE_MOTION_VECTORS_VERTS)
|
|
const bool applyDeformation = false;
|
|
#else
|
|
const bool applyDeformation = true;
|
|
#endif
|
|
#else
|
|
const bool hasDeformation = unity_MotionVectorsParams.x == 1;
|
|
float3 previousPositionOS = hasDeformation ? previousMesh.previousPositionOS : previousMesh.vertex.xyz;
|
|
|
|
#if defined(AUTOMATIC_TIME_BASED_MOTION_VECTORS) && defined(GRAPH_VERTEX_USES_TIME_PARAMETERS_INPUT)
|
|
const bool applyDeformation = true;
|
|
#else
|
|
const bool applyDeformation = hasDeformation;
|
|
#endif
|
|
#endif
|
|
#if defined(FEATURES_GRAPH_VERTEX)
|
|
if (applyDeformation)
|
|
previousPositionOS = GetLastFrameDeformedPosition(previousMesh, currentFrameMvData, previousPositionOS);
|
|
else
|
|
previousPositionOS = previousMesh.positionOS;
|
|
|
|
#if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT)
|
|
previousPositionOS -= previousMesh.precomputedVelocity;
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(UNITY_DOTS_INSTANCING_ENABLED) && defined(DOTS_DEFORMED)
|
|
ApplyPreviousFrameDeformedVertexPosition(previousMesh.vertexID, previousPositionOS);
|
|
#endif
|
|
#if defined (_ADD_PRECOMPUTED_VELOCITY)
|
|
previousPositionOS -= previousMesh.precomputedVelocity;
|
|
#endif
|
|
o.positionCS = mul(UNITY_MATRIX_UNJITTERED_VP, float4(positionWS, 1.0f));
|
|
|
|
#if defined(HAVE_VFX_MODIFICATION)
|
|
#if defined(VFX_FEATURE_MOTION_VECTORS_VERTS)
|
|
#if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT) || defined(_ADD_PRECOMPUTED_VELOCITY)
|
|
#error Unexpected fast path rendering VFX motion vector while there are vertex modification afterwards.
|
|
#endif
|
|
o.previousPositionCS = VFXGetPreviousClipPosition(previousMesh, currentFrameMvData.vfxElementAttributes, o.positionCS);
|
|
#else
|
|
#if VFX_WORLD_SPACE
|
|
const float3 previousPositionWS = previousPositionOS;
|
|
#else
|
|
const float3 previousPositionWS = mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1.0f)).xyz;
|
|
#endif
|
|
o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, float4(previousPositionWS, 1.0f));
|
|
#endif
|
|
#else
|
|
o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1)));
|
|
#endif
|
|
}
|
|
#endif
|
|
|
|
return o;
|
|
}
|
|
half4 Frag (VertexToPixel IN
|
|
#ifdef _DEPTHOFFSET_ON
|
|
, out float outputDepth : SV_Depth
|
|
#endif
|
|
#if NEED_FACING
|
|
, bool facing : SV_IsFrontFace
|
|
#endif
|
|
) : SV_Target
|
|
{
|
|
UNITY_SETUP_INSTANCE_ID(IN);
|
|
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(IN);
|
|
|
|
#if defined(LOD_FADE_CROSSFADE) && USE_UNITY_CROSSFADE
|
|
LODFadeCrossFade(IN.pos);
|
|
#endif
|
|
|
|
ShaderData d = CreateShaderData(IN
|
|
#if NEED_FACING
|
|
, facing
|
|
#endif
|
|
);
|
|
Surface l = (Surface)0;
|
|
|
|
#ifdef _DEPTHOFFSET_ON
|
|
l.outputDepth = outputDepth;
|
|
#endif
|
|
|
|
l.Albedo = half3(0.5, 0.5, 0.5);
|
|
l.Normal = float3(0,0,1);
|
|
l.Occlusion = 1;
|
|
l.Alpha = 1;
|
|
|
|
ChainSurfaceFunction(l, d);
|
|
|
|
#ifdef _DEPTHOFFSET_ON
|
|
outputDepth = l.outputDepth;
|
|
#endif
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
ENDHLSL
|
|
|
|
}
|
|
Pass
|
|
{
|
|
Name "Meta"
|
|
Tags
|
|
{
|
|
"LightMode" = "Meta"
|
|
}
|
|
|
|
Cull Off
|
|
Cull [_Cull]
|
|
HLSLPROGRAM
|
|
|
|
#pragma vertex Vert
|
|
#pragma fragment Frag
|
|
|
|
#if (defined(SHADER_API_GLES) || defined(SHADER_API_GLES3) || defined(SHADER_API_GLES30))
|
|
#pragma target 3.0
|
|
#else
|
|
#pragma target 4.5
|
|
#endif
|
|
|
|
#pragma prefer_hlslcc gles
|
|
#pragma exclude_renderers d3d11_9x
|
|
#define SHADERPASS SHADERPASS_META
|
|
#define _PASSMETA 1
|
|
#pragma shader_feature_local_fragment _SHADING_COLOR _SHADING_BLINNPHONG _SHADING_PBR
|
|
// Commented out Curved World defines
|
|
// #define CURVEDWORLD_BEND_TYPE_CLASSICRUNNER_X_POSITIVE
|
|
// #define CURVEDWORLD_BEND_ID_1
|
|
// #pragma shader_feature_local CURVEDWORLD_DISABLED_ON
|
|
// #pragma shader_feature_local CURVEDWORLD_NORMAL_TRANSFORMATION_ON
|
|
// #include "Assets/Amazing Assets/Curved World/Shaders/Core/CurvedWorldTransform.cginc"
|
|
#pragma shader_feature_local _NORMALMAP
|
|
#pragma shader_feature_local_fragment _EMISSION
|
|
|
|
#pragma shader_feature_local_fragment _ALPHATEST_ON
|
|
#pragma shader_feature_local _RECEIVE_SHADOWS_OFF
|
|
#pragma shader_feature_local_fragment _ _SPECGLOSSMAP _SPECULAR_COLOR
|
|
#pragma shader_feature_local_fragment _GLOSSINESS_FROM_BASE_ALPHA
|
|
|
|
#pragma shader_feature_local_fragment _OCCLUSIONMAP
|
|
#pragma shader_feature_local _PARALLAXMAP
|
|
#pragma shader_feature_local _ _DETAIL_MULX2 _DETAIL_SCALED
|
|
#pragma shader_feature_local_fragment _SURFACE_TYPE_TRANSPARENT
|
|
|
|
#pragma shader_feature_local_fragment _ _ALPHAPREMULTIPLY_ON _ALPHAMODULATE_ON
|
|
|
|
#pragma shader_feature_local_fragment _METALLICSPECGLOSSMAP
|
|
#pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
|
#pragma shader_feature_local_fragment _SPECULARHIGHLIGHTS_OFF
|
|
#pragma shader_feature_local_fragment _ENVIRONMENTREFLECTIONS_OFF
|
|
#pragma shader_feature_local_fragment _SPECULAR_SETUP
|
|
#define _URP 1
|
|
#define _USINGTEXCOORD1 1
|
|
#define _USINGTEXCOORD2 1
|
|
#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.universal/ShaderLibrary/Input.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl"
|
|
#include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/MetaInput.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl"
|
|
|
|
#undef WorldNormalVector
|
|
#define WorldNormalVector(data, normal) mul(normal, data.TBNMatrix)
|
|
#define UnityObjectToWorldNormal(normal) mul(GetObjectToWorldMatrix(), normal)
|
|
|
|
#define _WorldSpaceLightPos0 _MainLightPosition
|
|
#define UNITY_DECLARE_TEX2D(name) TEXTURE2D(name); SAMPLER(sampler##name);
|
|
#define UNITY_DECLARE_TEX2D_NOSAMPLER(name) TEXTURE2D(name);
|
|
#define UNITY_DECLARE_TEX2DARRAY(name) TEXTURE2D_ARRAY(name); SAMPLER(sampler##name);
|
|
#define UNITY_DECLARE_TEX2DARRAY_NOSAMPLER(name) TEXTURE2D_ARRAY(name);
|
|
|
|
#define UNITY_SAMPLE_TEX2DARRAY(tex,coord) SAMPLE_TEXTURE2D_ARRAY(tex, sampler##tex, coord.xy, coord.z)
|
|
#define UNITY_SAMPLE_TEX2DARRAY_LOD(tex,coord,lod) SAMPLE_TEXTURE2D_ARRAY_LOD(tex, sampler##tex, coord.xy, coord.z, lod)
|
|
#define UNITY_SAMPLE_TEX2D(tex, coord) SAMPLE_TEXTURE2D(tex, sampler##tex, coord)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER(tex, samp, coord) SAMPLE_TEXTURE2D(tex, sampler##samp, coord)
|
|
|
|
#define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) SAMPLE_TEXTURE2D_LOD(tex, sampler_##tex, coord, lod)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) SAMPLE_TEXTURE2D_LOD (tex, sampler##samplertex,coord, lod)
|
|
#if defined(UNITY_COMPILER_HLSL)
|
|
#define UNITY_INITIALIZE_OUTPUT(type,name) name = (type)0;
|
|
#else
|
|
#define UNITY_INITIALIZE_OUTPUT(type,name)
|
|
#endif
|
|
|
|
#define sampler2D_float sampler2D
|
|
#define sampler2D_half sampler2D
|
|
struct VertexToPixel
|
|
{
|
|
float4 pos : SV_POSITION;
|
|
float3 worldPos : TEXCOORD0;
|
|
float3 worldNormal : TEXCOORD1;
|
|
float4 worldTangent : TEXCOORD2;
|
|
float4 texcoord0 : TEXCOORD3;
|
|
float4 texcoord1 : TEXCOORD4;
|
|
float4 texcoord2 : TEXCOORD5;
|
|
float4 texcoord3 : TEXCOORD6;
|
|
#if defined(LIGHTMAP_ON)
|
|
float2 lightmapUV : TEXCOORD8;
|
|
#endif
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
|
float2 dynamicLightmapUV : TEXCOORD9;
|
|
#endif
|
|
#if !defined(LIGHTMAP_ON)
|
|
float4 probeOcclusion : TEXCOORD8;
|
|
float3 sh : TEXCOORD10;
|
|
#endif
|
|
|
|
#if defined(VARYINGS_NEED_FOG_AND_VERTEX_LIGHT)
|
|
float4 fogFactorAndVertexLight : TEXCOORD11;
|
|
#endif
|
|
|
|
#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
|
|
float4 shadowCoord : TEXCOORD12;
|
|
#endif
|
|
float4 extraV2F0 : TEXCOORD13;
|
|
#if UNITY_ANY_INSTANCING_ENABLED
|
|
uint instanceID : CUSTOM_INSTANCE_ID;
|
|
#endif
|
|
#if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE)))
|
|
uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0;
|
|
#endif
|
|
#if (defined(UNITY_STEREO_INSTANCING_ENABLED))
|
|
uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex;
|
|
#endif
|
|
#if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE)
|
|
FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC;
|
|
#endif
|
|
|
|
#if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))
|
|
float4 previousPositionCS : TEXCOORD21;
|
|
float4 positionCS : TEXCOORD22;
|
|
#endif
|
|
};
|
|
struct Surface
|
|
{
|
|
half3 Albedo;
|
|
half Height;
|
|
half3 Normal;
|
|
half Smoothness;
|
|
half3 Emission;
|
|
half Metallic;
|
|
half3 Specular;
|
|
half Occlusion;
|
|
half SpecularPower;
|
|
half Alpha;
|
|
float outputDepth;
|
|
half SpecularOcclusion;
|
|
half SubsurfaceMask;
|
|
half Thickness;
|
|
half CoatMask;
|
|
half CoatSmoothness;
|
|
half Anisotropy;
|
|
half IridescenceMask;
|
|
half IridescenceThickness;
|
|
int DiffusionProfileHash;
|
|
float SpecularAAThreshold;
|
|
float SpecularAAScreenSpaceVariance;
|
|
float3 DiffuseGI;
|
|
float3 BackDiffuseGI;
|
|
float3 SpecularGI;
|
|
float ior;
|
|
float3 transmittanceColor;
|
|
float atDistance;
|
|
float transmittanceMask;
|
|
float4 ShadowMask;
|
|
float NormalAlpha;
|
|
float MAOSAlpha;
|
|
};
|
|
struct Blackboard
|
|
{
|
|
float blackboardDummyData;
|
|
};
|
|
struct ShaderData
|
|
{
|
|
float4 clipPos;
|
|
float3 localSpacePosition;
|
|
float3 localSpaceNormal;
|
|
float3 localSpaceTangent;
|
|
float3 worldSpacePosition;
|
|
float3 worldSpaceNormal;
|
|
float3 worldSpaceTangent;
|
|
float tangentSign;
|
|
|
|
float3 worldSpaceViewDir;
|
|
float3 tangentSpaceViewDir;
|
|
|
|
float4 texcoord0;
|
|
float4 texcoord1;
|
|
float4 texcoord2;
|
|
float4 texcoord3;
|
|
|
|
float2 screenUV;
|
|
float4 screenPos;
|
|
|
|
float4 vertexColor;
|
|
bool isFrontFace;
|
|
|
|
float4 extraV2F0;
|
|
float4 extraV2F1;
|
|
float4 extraV2F2;
|
|
float4 extraV2F3;
|
|
float4 extraV2F4;
|
|
float4 extraV2F5;
|
|
float4 extraV2F6;
|
|
float4 extraV2F7;
|
|
|
|
float3x3 TBNMatrix;
|
|
Blackboard blackboard;
|
|
};
|
|
|
|
struct VertexData
|
|
{
|
|
#if SHADER_TARGET > 30
|
|
#endif
|
|
float4 vertex : POSITION;
|
|
float3 normal : NORMAL;
|
|
float4 tangent : TANGENT;
|
|
float4 texcoord0 : TEXCOORD0;
|
|
#if _URP && (_USINGTEXCOORD1 || _PASSMETA || _PASSFORWARD || _PASSGBUFFER)
|
|
float4 texcoord1 : TEXCOORD1;
|
|
#endif
|
|
|
|
#if _URP && (_USINGTEXCOORD2 || _PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && defined(DYNAMICLIGHTMAP_ON)))
|
|
float4 texcoord2 : TEXCOORD2;
|
|
#endif
|
|
|
|
#if _STANDARD && (_USINGTEXCOORD1 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER || _PASSFORWARDADD) && LIGHTMAP_ON)))
|
|
float4 texcoord1 : TEXCOORD1;
|
|
#endif
|
|
#if _STANDARD && (_USINGTEXCOORD2 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && DYNAMICLIGHTMAP_ON)))
|
|
float4 texcoord2 : TEXCOORD2;
|
|
#endif
|
|
#if _HDRP
|
|
float4 texcoord1 : TEXCOORD1;
|
|
float4 texcoord2 : TEXCOORD2;
|
|
#endif
|
|
float4 texcoord3 : TEXCOORD3;
|
|
#if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))
|
|
float3 previousPositionOS : TEXCOORD4;
|
|
#if defined (_ADD_PRECOMPUTED_VELOCITY)
|
|
float3 precomputedVelocity : TEXCOORD5;
|
|
#endif
|
|
#endif
|
|
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
};
|
|
|
|
struct TessVertex
|
|
{
|
|
float4 vertex : INTERNALTESSPOS;
|
|
float3 normal : NORMAL;
|
|
float4 tangent : TANGENT;
|
|
float4 texcoord0 : TEXCOORD0;
|
|
float4 texcoord1 : TEXCOORD1;
|
|
float4 texcoord2 : TEXCOORD2;
|
|
float4 texcoord3 : TEXCOORD3;
|
|
float4 extraV2F0 : TEXCOORD5;
|
|
#if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))
|
|
float3 previousPositionOS : TEXCOORD13;
|
|
#if defined (_ADD_PRECOMPUTED_VELOCITY)
|
|
float3 precomputedVelocity : TEXCOORD14;
|
|
#endif
|
|
#endif
|
|
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
UNITY_VERTEX_OUTPUT_STEREO
|
|
};
|
|
|
|
struct ExtraV2F
|
|
{
|
|
float4 extraV2F0;
|
|
float4 extraV2F1;
|
|
float4 extraV2F2;
|
|
float4 extraV2F3;
|
|
float4 extraV2F4;
|
|
float4 extraV2F5;
|
|
float4 extraV2F6;
|
|
float4 extraV2F7;
|
|
Blackboard blackboard;
|
|
float4 time;
|
|
};
|
|
float3 WorldToTangentSpace(ShaderData d, float3 normal)
|
|
{
|
|
return mul(d.TBNMatrix, normal);
|
|
}
|
|
|
|
float3 TangentToWorldSpace(ShaderData d, float3 normal)
|
|
{
|
|
return mul(normal, d.TBNMatrix);
|
|
}
|
|
#if _STANDARD
|
|
float3 TransformWorldToObject(float3 p) { return mul(unity_WorldToObject, float4(p, 1)); };
|
|
float3 TransformObjectToWorld(float3 p) { return mul(unity_ObjectToWorld, float4(p, 1)); };
|
|
float4 TransformWorldToObject(float4 p) { return mul(unity_WorldToObject, p); };
|
|
float4 TransformObjectToWorld(float4 p) { return mul(unity_ObjectToWorld, p); };
|
|
float4x4 GetWorldToObjectMatrix() { return unity_WorldToObject; }
|
|
float4x4 GetObjectToWorldMatrix() { return unity_ObjectToWorld; }
|
|
#if (defined(SHADER_API_D3D11) || defined(SHADER_API_XBOXONE) || defined(UNITY_COMPILER_HLSLCC) || defined(SHADER_API_PSSL) || (SHADER_TARGET_SURFACE_ANALYSIS && !SHADER_TARGET_SURFACE_ANALYSIS_MOJOSHADER))
|
|
#define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) tex.SampleLevel (sampler##tex,coord, lod)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) tex.SampleLevel (sampler##samplertex,coord, lod)
|
|
#else
|
|
#define UNITY_SAMPLE_TEX2D_LOD(tex,coord,lod) tex2D (tex,coord,0,lod)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord,lod) tex2D (tex,coord,0,lod)
|
|
#endif
|
|
|
|
#undef GetWorldToObjectMatrix()
|
|
|
|
#define GetWorldToObjectMatrix() unity_WorldToObject
|
|
#endif
|
|
|
|
float3 GetCameraWorldPosition()
|
|
{
|
|
#if _HDRP
|
|
return GetCameraRelativePositionWS(_WorldSpaceCameraPos);
|
|
#else
|
|
return _WorldSpaceCameraPos;
|
|
#endif
|
|
}
|
|
|
|
#if _GRABPASSUSED
|
|
#if _STANDARD
|
|
TEXTURE2D(%GRABTEXTURE%);
|
|
SAMPLER(sampler_%GRABTEXTURE%);
|
|
#endif
|
|
|
|
half3 GetSceneColor(float2 uv)
|
|
{
|
|
#if _STANDARD
|
|
return SAMPLE_TEXTURE2D(%GRABTEXTURE%, sampler_%GRABTEXTURE%, uv).rgb;
|
|
#else
|
|
return SHADERGRAPH_SAMPLE_SCENE_COLOR(uv);
|
|
#endif
|
|
}
|
|
#endif
|
|
#if _STANDARD
|
|
UNITY_DECLARE_DEPTH_TEXTURE(_CameraDepthTexture);
|
|
float GetSceneDepth(float2 uv) { return SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv); }
|
|
float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv)); }
|
|
float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv)); }
|
|
#else
|
|
float GetSceneDepth(float2 uv) { return SHADERGRAPH_SAMPLE_SCENE_DEPTH(uv); }
|
|
float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv), _ZBufferParams); }
|
|
float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv), _ZBufferParams); }
|
|
#endif
|
|
|
|
float3 GetWorldPositionFromDepthBuffer(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
float eye = GetLinearEyeDepth(uv);
|
|
float3 camView = mul((float3x3)GetObjectToWorldMatrix(), transpose(mul(GetWorldToObjectMatrix(), UNITY_MATRIX_I_V)) [2].xyz);
|
|
|
|
float dt = dot(worldSpaceViewDir, camView);
|
|
float3 div = worldSpaceViewDir/dt;
|
|
float3 wpos = (eye * div) + GetCameraWorldPosition();
|
|
return wpos;
|
|
}
|
|
|
|
#if _HDRP
|
|
float3 ObjectToWorldSpacePosition(float3 pos)
|
|
{
|
|
return GetAbsolutePositionWS(TransformObjectToWorld(pos));
|
|
}
|
|
#else
|
|
float3 ObjectToWorldSpacePosition(float3 pos)
|
|
{
|
|
return TransformObjectToWorld(pos);
|
|
}
|
|
#endif
|
|
|
|
#if _STANDARD
|
|
UNITY_DECLARE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture);
|
|
float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
float4 depthNorms = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture, uv);
|
|
float3 norms = DecodeViewNormalStereo(depthNorms);
|
|
norms = mul((float3x3)GetWorldToViewMatrix(), norms) * 0.5 + 0.5;
|
|
return norms;
|
|
}
|
|
#elif _HDRP && !_DECALSHADER
|
|
float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
NormalData nd;
|
|
DecodeFromNormalBuffer(_ScreenSize.xy * uv, nd);
|
|
return nd.normalWS;
|
|
}
|
|
#elif _URP
|
|
#if (SHADER_LIBRARY_VERSION_MAJOR >= 10)
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl"
|
|
#endif
|
|
|
|
float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
#if (SHADER_LIBRARY_VERSION_MAJOR >= 10)
|
|
return SampleSceneNormals(uv);
|
|
#else
|
|
float3 wpos = GetWorldPositionFromDepthBuffer(uv, worldSpaceViewDir);
|
|
return normalize(-cross(ddx(wpos), ddy(wpos))) * 0.5 + 0.5;
|
|
#endif
|
|
|
|
}
|
|
#endif
|
|
|
|
#if _HDRP
|
|
|
|
half3 UnpackNormalmapRGorAG(half4 packednormal)
|
|
{
|
|
packednormal.x *= packednormal.w;
|
|
|
|
half3 normal;
|
|
normal.xy = packednormal.xy * 2 - 1;
|
|
normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy)));
|
|
return normal;
|
|
}
|
|
half3 UnpackNormal(half4 packednormal)
|
|
{
|
|
#if defined(UNITY_NO_DXT5nm)
|
|
return packednormal.xyz * 2 - 1;
|
|
#else
|
|
return UnpackNormalmapRGorAG(packednormal);
|
|
#endif
|
|
}
|
|
#endif
|
|
#if _HDRP || _URP
|
|
|
|
half3 UnpackScaleNormal(half4 packednormal, half scale)
|
|
{
|
|
#ifndef UNITY_NO_DXT5nm
|
|
packednormal.x *= packednormal.w;
|
|
#endif
|
|
half3 normal;
|
|
normal.xy = (packednormal.xy * 2 - 1) * scale;
|
|
normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy)));
|
|
return normal;
|
|
}
|
|
|
|
#endif
|
|
void GetSun(out float3 lightDir, out float3 color)
|
|
{
|
|
lightDir = float3(0.5, 0.5, 0);
|
|
color = 1;
|
|
#if _HDRP
|
|
if (_DirectionalLightCount > 0)
|
|
{
|
|
DirectionalLightData light = _DirectionalLightDatas[0];
|
|
lightDir = -light.forward.xyz;
|
|
color = light.color;
|
|
}
|
|
#elif _STANDARD
|
|
lightDir = normalize(_WorldSpaceLightPos0.xyz);
|
|
color = _LightColor0.rgb;
|
|
#elif _URP
|
|
Light light = GetMainLight();
|
|
lightDir = light.direction;
|
|
color = light.color;
|
|
#endif
|
|
}
|
|
CBUFFER_START(UnityPerMaterial)
|
|
half _LightSource;
|
|
|
|
half _ShadingMode;
|
|
half _LightFunction;
|
|
half _UseAlphaOnlyFromBaseMap;
|
|
half _EnableToonShading;
|
|
half _ShadingFunction;
|
|
int _NumberOfCells;
|
|
float _CellTransitionSmoothness;
|
|
half _RoundingMethod;
|
|
half _SumLightsBeforePosterization;
|
|
half _ShadingUseLightColors;
|
|
half _GradientMode;
|
|
half _GradientBlending;
|
|
float _GradientBlendFactor;
|
|
|
|
float4 _GradientTex_TexelSize;
|
|
half _ShadingAffectedByNormalMap;
|
|
half _EnableShadows;
|
|
float4 _CoreShadowColor;
|
|
float _TerminatorPosition;
|
|
float _TerminatorWidth;
|
|
float _TerminatorSmoothness;
|
|
float4 _FormShadowColor;
|
|
|
|
half _EnableCastShadows;
|
|
float _CastShadowsStrength;
|
|
float _CastShadowsSmoothness;
|
|
half _CastShadowColorMode;
|
|
float4 _CastShadowColor;
|
|
half _EnableSpecular;
|
|
half _SpecularBlending;
|
|
half4 _SpecularColor;
|
|
float _SpecularSize;
|
|
float _SpecularSmoothness;
|
|
float _SpecularOpacity;
|
|
half _SpecularAffectedByNormalMap;
|
|
half _SpecularUseLightColors;
|
|
half _EnableRim;
|
|
half _RimBlending;
|
|
float4 _RimColor;
|
|
float _RimSize;
|
|
float _RimSmoothness;
|
|
float _RimOpacity;
|
|
half _RimAffectedArea;
|
|
half _RimAffectedByNormalMap;
|
|
half _EnableStyling;
|
|
|
|
half _EnableStylingDistanceFade;
|
|
float _StylingDFStartingDistance;
|
|
float _StylingDFFalloff;
|
|
half _StylingAdjustDistanceFadeValue;
|
|
float _StylingDistanceFadeValue;
|
|
half _HatchingAffectedByNormalMap;
|
|
half _EnableAntiAliasing;
|
|
float4 _NoiseTex2_TexelSize;
|
|
half _EnableShadingStyling;
|
|
half _StylingShadingSyncWithOtherStyling;
|
|
half _ShadingStyle;
|
|
half _SyncWithLightPartitioning;
|
|
half _NumberOfCellsHatching;
|
|
half _StylingTerminatorPosition;
|
|
float _StylingOvermodelingFactor;
|
|
half _StylingShadingBlending;
|
|
half _StylingShadingIsInverted;
|
|
half _DrawSpace;
|
|
|
|
half _UVSet;
|
|
|
|
half _SSCameraDistanceScaled;
|
|
half _AnchorSSToObjectsOrigin;
|
|
half _CoordinateSystem;
|
|
half _PolarCenterMode;
|
|
float4 _PolarCenter;
|
|
float _StylingShadingDensity;
|
|
float _StylingShadingInitialDirection;
|
|
float _StylingShadingRotationBetweenCells;
|
|
float _StylingShadingHalftonesOffset;
|
|
float4 _StylingColor;
|
|
float _StylingShadingOpacity;
|
|
float _StylingShadingOpacityFalloff;
|
|
float _StylingShadingThicknessControl;
|
|
float _StylingShadingThickness;
|
|
float _StylingShadingThicknessFalloff;
|
|
float _StylingShadingHardness;
|
|
float _StylingShadingHalftonesRoundness;
|
|
float _StylingShadingHalftonesRoundnessFalloff;
|
|
half _StylingShadingEnableDashes;
|
|
float _StylingShadingDashesSize;
|
|
half _StylingShadingDashesUseHatchingDensity;
|
|
float _StylingShadingDashesDensity;
|
|
float _StylingShadingDashesType;
|
|
float _StylingShadingDashesRoundness;
|
|
float _StylingShadingDashesOffset;
|
|
|
|
float _StylingShadingDashesTransitionPosition;
|
|
float _StylingShadingDashesTransitionSoftness;
|
|
half _EnableShadingRandomizer;
|
|
float _ShadingNoise1Size;
|
|
float _ShadingNoise1Seed;
|
|
float _ShadingNoise2Seed;
|
|
float _NoiseIntensity;
|
|
half _SpacingRandomMode;
|
|
float _SpacingRandomIntensity;
|
|
half _OpacityRandomMode;
|
|
float _OpacityRandomIntensity;
|
|
half _LengthRandomMode;
|
|
float _LengthRandomIntensity;
|
|
half _HardnessRandomMode;
|
|
float _HardnessRandomIntensity;
|
|
half _ThicknessRandomMode;
|
|
float _ThicknesshRandomIntensity;
|
|
half _EnableCastShadowsStyling;
|
|
half _CastShadowsNumberOfCellsHatching;
|
|
float _StylingCastShadowsSmoothness;
|
|
half _StylingCastShadowsSyncWithOtherStyling;
|
|
half _CastShadowsStyle;
|
|
half _StylingCastShadowsBlending;
|
|
half _StylingCastShadowsIsInverted;
|
|
half _CastShadowsDrawSpace;
|
|
half _CastShadowsUVSet;
|
|
half _CastShadowsSSCameraDistanceScaled;
|
|
half _CastShadowsAnchorSSToObjectsOrigin;
|
|
half _CastShadowsCoordinateSystem;
|
|
half _CastShadowsPolarCenterMode;
|
|
float4 _CastShadowsPolarCenter;
|
|
float _StylingCastShadowsDensity;
|
|
float _StylingCastShadowsInitialDirection;
|
|
float _StylingCastShadowsRotationBetweenCells;
|
|
float _StylingCastShadowsHalftonesOffset;
|
|
float4 _StylingCastShadowsColor;
|
|
float _StylingCastShadowsOpacity;
|
|
float _StylingCastShadowsOpacityFalloff;
|
|
half _StylingCastShadowsThicknessControl;
|
|
float _StylingCastShadowsThickness;
|
|
float _StylingCastShadowsThicknessFalloff;
|
|
float _StylingCastShadowsHardness;
|
|
float _StylingCastShadowsHalftonesRoundness;
|
|
float _StylingCastShadowsHalftonesRoundnessFalloff;
|
|
half _StylingCastShadowsEnableDashes;
|
|
float _StylingCastShadowsDashesSize;
|
|
half _StylingCastShadowsDashesUseHatchingDensity;
|
|
float _StylingCastShadowsDashesDensity;
|
|
float _StylingCastShadowsDashesRoundness;
|
|
float _StylingCastShadowsDashesType;
|
|
float _StylingCastShadowsDashesOffset;
|
|
|
|
float _StylingCastShadowsDashesTransitionPosition;
|
|
float _StylingCastShadowsDashesTransitionSoftness;
|
|
half _EnableCastShadowsRandomizer;
|
|
float _CastShadowsNoise1Size;
|
|
float _CastShadowsNoise1Seed;
|
|
float _CastShadowsNoise2Seed;
|
|
float _CastShadowsNoiseIntensity;
|
|
half _CastShadowsSpacingRandomMode;
|
|
float _CastShadowsSpacingRandomIntensity;
|
|
half _CastShadowsOpacityRandomMode;
|
|
float _CastShadowsOpacityRandomIntensity;
|
|
half _CastShadowsHardnessRandomMode;
|
|
float _CastShadowsHardnessRandomIntensity;
|
|
half _CastShadowsLengthRandomMode;
|
|
float _CastShadowsLengthRandomIntensity;
|
|
half _CastShadowsThicknessRandomMode;
|
|
float _CastShadowsThicknesshRandomIntensity;
|
|
half _EnableSpecularStyling;
|
|
half _SyncWithSpecular;
|
|
float _StylingSpecularSize;
|
|
float _StylingSpecularSmoothness;
|
|
half _StylingSpecularCutOutShading;
|
|
half _StylingSpecularUseLightColors;
|
|
half _StylingSpecularSyncWithOtherStyling;
|
|
half _SpecularStyle;
|
|
half _StylingSpecularBlending;
|
|
half _StylingSpecularIsInverted;
|
|
half _SpecularDrawSpace;
|
|
half _SpecularUVSet;
|
|
half _SpecularSSCameraDistanceScaled;
|
|
half _SpecularAnchorSSToObjectsOrigin;
|
|
half _SpecularCoordinateSystem;
|
|
half _SpecularPolarCenterMode;
|
|
float4 _SpecularPolarCenter;
|
|
float _StylingSpecularDensity;
|
|
float _StylingSpecularRotation;
|
|
float _StylingSpecularHalftonesOffset;
|
|
float4 _StylingSpecularColor;
|
|
float _StylingSpecularOpacity;
|
|
float _StylingSpecularOpacityFalloff;
|
|
float _StylingSpecularThicknessControl;
|
|
float _StylingSpecularThickness;
|
|
float _StylingSpecularThicknessFalloff;
|
|
float _StylingSpecularHardness;
|
|
float _StylingSpecularHalftonesRoundness;
|
|
float _StylingSpecularHalftonesRoundnessFalloff;
|
|
half _StylingSpecularEnableDashes;
|
|
float _StylingSpecularDashesSize;
|
|
half _StylingSpecularDashesUseHatchingDensity;
|
|
float _StylingSpecularDashesDensity;
|
|
float _StylingSpecularDashesRoundness;
|
|
float _StylingSpecularDashesType;
|
|
float _StylingSpecularDashesOffset;
|
|
|
|
float _StylingSpecularDashesTransitionPosition;
|
|
float _StylingSpecularDashesTransitionSoftness;
|
|
float _EnableSpecularRandomizer;
|
|
float _SpecularNoise1Size;
|
|
float _SpecularNoise1Seed;
|
|
float _SpecularNoise2Seed;
|
|
float _SpecularNoiseIntensity;
|
|
half _SpecularSpacingRandomMode;
|
|
float _SpecularSpacingRandomIntensity;
|
|
half _SpecularOpacityRandomMode;
|
|
float _SpecularOpacityRandomIntensity;
|
|
half _SpecularLengthRandomMode;
|
|
float _SpecularLengthRandomIntensity;
|
|
half _SpecularHardnessRandomMode;
|
|
float _SpecularHardnessRandomIntensity;
|
|
half _SpecularThicknessRandomMode;
|
|
float _SpecularThicknesshRandomIntensity;
|
|
half _EnableRimStyling;
|
|
half _StylingRimSyncWithOtherStyling;
|
|
half _SyncWithRim;
|
|
float _StylingRimSize;
|
|
float _StylingRimSmoothness;
|
|
half _StylingRimAffectedArea;
|
|
half _RimStyle;
|
|
half _StylingRimBlending;
|
|
half _StylingRimIsInverted;
|
|
half _RimDrawSpace;
|
|
half _RimUVSet;
|
|
half _RimSSCameraDistanceScaled;
|
|
half _RimAnchorSSToObjectsOrigin;
|
|
half _RimCoordinateSystem;
|
|
half _RimPolarCenterMode;
|
|
float4 _RimPolarCenter;
|
|
float _StylingRimDensity;
|
|
float _StylingRimRotation;
|
|
float _StylingRimHalftonesOffset;
|
|
float4 _StylingRimColor;
|
|
float _StylingRimOpacity;
|
|
float _StylingRimOpacityFalloff;
|
|
float _StylingRimThicknessControl;
|
|
float _StylingRimThickness;
|
|
float _StylingRimThicknessFalloff;
|
|
float _StylingRimHardness;
|
|
float _StylingRimHalftonesRoundness;
|
|
float _StylingRimHalftonesRoundnessFalloff;
|
|
half _StylingRimEnableDashes;
|
|
float _StylingRimDashesSize;
|
|
half _StylingRimDashesUseHatchingDensity;
|
|
float _StylingRimDashesDensity;
|
|
float _StylingRimDashesRoundness;
|
|
float _StylingRimDashesType;
|
|
float _StylingRimDashesOffset;
|
|
|
|
float _StylingRimDashesTransitionPosition;
|
|
float _StylingRimDashesTransitionSoftness;
|
|
float _EnableRimRandomizer;
|
|
float _RimNoise1Size;
|
|
float _RimNoise1Seed;
|
|
float _RimNoise2Seed;
|
|
float _RimNoiseIntensity;
|
|
half _RimSpacingRandomMode;
|
|
float _RimSpacingRandomIntensity;
|
|
half _RimOpacityRandomMode;
|
|
float _RimOpacityRandomIntensity;
|
|
half _RimLengthRandomMode;
|
|
float _RimLengthRandomIntensity;
|
|
half _RimHardnessRandomMode;
|
|
float _RimHardnessRandomIntensity;
|
|
half _RimThicknessRandomMode;
|
|
float _RimThicknesshRandomIntensity;
|
|
half4 _OutlineColor;
|
|
half _OutlineWidth;
|
|
half _EnableOutline;
|
|
half _OutlineConstantScreenWidth;
|
|
half4 _BaseColor;
|
|
float _BumpScale;
|
|
float4 _BaseMap_ST;
|
|
half _Cutoff;
|
|
half4 _EmissionColor;
|
|
half4 _SpecColor;
|
|
float _Smoothness;
|
|
float4 _DetailAlbedoMap_ST;
|
|
half _Metallic;
|
|
half _Parallax;
|
|
half _OcclusionStrength;
|
|
half _DetailAlbedoMapScale;
|
|
half _DetailNormalMapScale;
|
|
#if UNITY_VERSION < 202200
|
|
float _AlphaToMaskAvailable;
|
|
#endif
|
|
CBUFFER_END
|
|
sampler2D _NoiseMap1;
|
|
sampler2D _NoiseMap2;
|
|
|
|
sampler2D _HatchingMap;
|
|
sampler2D _GradientTex;
|
|
void Ext_ModifyVertex0 (inout VertexData v, inout ExtraV2F d)
|
|
{
|
|
#if defined(CURVEDWORLD_IS_INSTALLED) && !defined(CURVEDWORLD_DISABLED_ON)
|
|
#ifdef CURVEDWORLD_NORMAL_TRANSFORMATION_ON
|
|
CURVEDWORLD_TRANSFORM_VERTEX_AND_NORMAL(v.vertex, v.normal, v.tangent)
|
|
#else
|
|
CURVEDWORLD_TRANSFORM_VERTEX(v.vertex)
|
|
#endif
|
|
#endif
|
|
float4x4 UnityObjectToClipPosMatrix = mul(GetWorldToHClipMatrix(), GetObjectToWorldMatrix());
|
|
float4 pos = mul(UnityObjectToClipPosMatrix, v.vertex);
|
|
float4 objectOriginClipPos = mul(UnityObjectToClipPosMatrix, float4(0, 0, 0, 1));
|
|
objectOriginClipPos.xy = clamp(objectOriginClipPos.xy, -1.0*objectOriginClipPos.w, 1.0*objectOriginClipPos.w);
|
|
float4 originScreenPos = ComputeScreenPos(objectOriginClipPos);
|
|
float2 originScreenUV = originScreenPos.xy/originScreenPos.w;
|
|
float4 screenPos = ComputeScreenPos(pos);
|
|
float2 uv = ((screenPos.xy) / screenPos.w);
|
|
float4 ssss = ComputeScreenPos(pos);
|
|
d.extraV2F0 = float4(originScreenUV,originScreenUV);
|
|
}
|
|
void Ext_SurfaceFunction0 (inout Surface o, ShaderData d)
|
|
{
|
|
float2 test = d.texcoord1.xy;
|
|
test = d.texcoord2.xy;
|
|
test = d.texcoord3.xy;
|
|
|
|
}
|
|
TEXTURE2D(_BaseMap); SAMPLER(sampler_BaseMap);
|
|
TEXTURE2D(_BumpMap); SAMPLER(sampler_BumpMap);
|
|
TEXTURE2D(_EmissionMap); SAMPLER(sampler_EmissionMap);
|
|
TEXTURE2D(_SpecGlossMap); SAMPLER(sampler_SpecGlossMap);
|
|
TEXTURE2D(_ParallaxMap); SAMPLER(sampler_ParallaxMap);
|
|
TEXTURE2D(_OcclusionMap); SAMPLER(sampler_OcclusionMap);
|
|
TEXTURE2D(_DetailMask); SAMPLER(sampler_DetailMask);
|
|
TEXTURE2D(_DetailAlbedoMap); SAMPLER(sampler_DetailAlbedoMap);
|
|
TEXTURE2D(_DetailNormalMap); SAMPLER(sampler_DetailNormalMap);
|
|
TEXTURE2D(_MetallicGlossMap); SAMPLER(sampler_MetallicGlossMap);
|
|
TEXTURE2D(_ClearCoatMap); SAMPLER(sampler_ClearCoatMap);
|
|
#if defined(_DETAIL_MULX2) || defined(_DETAIL_SCALED)
|
|
#define _DETAIL
|
|
#endif
|
|
|
|
#if _SPECULAR_SETUP
|
|
#define _USESPECULAR 1
|
|
#else
|
|
#undef _USESPECULAR
|
|
#endif
|
|
float SharpenAlphaMy(float alpha, float alphaClipTreshold)
|
|
{
|
|
return saturate((alpha - alphaClipTreshold) / max(fwidth(alpha), 0.0001) + 0.5);
|
|
}
|
|
#if UNITY_VERSION < 202200
|
|
half3 AlphaModulate(half3 albedo, half alpha)
|
|
{
|
|
#if defined(_ALPHAMODULATE_ON)
|
|
return lerp(half3(1.0, 1.0, 1.0), albedo, alpha);
|
|
#else
|
|
return albedo;
|
|
#endif
|
|
}
|
|
|
|
#if defined(_ALPHATEST_ON)
|
|
bool IsAlphaToMaskAvailable()
|
|
{
|
|
return (_AlphaToMaskAvailable != 0.0);
|
|
}
|
|
half AlphaClip(half alpha, half cutoff)
|
|
{
|
|
half clippedAlpha = (alpha >= cutoff) ? float(alpha) : 0.0;
|
|
|
|
half alphaToCoverageAlpha = SharpenAlphaMy(alpha, cutoff);
|
|
|
|
alpha = IsAlphaToMaskAvailable() ? alphaToCoverageAlpha : clippedAlpha;
|
|
clip(alpha - 0.0001);
|
|
|
|
return alpha;
|
|
}
|
|
#endif
|
|
#endif
|
|
#if UNITY_VERSION < 202220
|
|
int _DebugSceneOverrideMode;
|
|
#endif
|
|
|
|
bool IsAlphaDiscardEnabledMy()
|
|
{
|
|
#if defined(DEBUG_DISPLAY)
|
|
return (_DebugSceneOverrideMode == DEBUGSCENEOVERRIDEMODE_NONE);
|
|
#else
|
|
return true;
|
|
#endif
|
|
}
|
|
half AlphaMy(half albedoAlpha, half4 color, half cutoff)
|
|
{
|
|
#if !defined(_SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A) && !defined(_GLOSSINESS_FROM_BASE_ALPHA)
|
|
half alpha = albedoAlpha * color.a;
|
|
#else
|
|
half alpha = color.a;
|
|
#endif
|
|
#ifdef _ALPHATEST_ON
|
|
if (IsAlphaDiscardEnabledMy())
|
|
alpha = AlphaClip(alpha, cutoff);
|
|
#endif
|
|
|
|
return alpha;
|
|
}
|
|
half4 SampleAlbedoAlpha(float2 uv, TEXTURE2D_PARAM(albedoAlphaMap, sampler_albedoAlphaMap))
|
|
{
|
|
return half4(SAMPLE_TEXTURE2D(albedoAlphaMap, sampler_albedoAlphaMap, uv));
|
|
}
|
|
half3 SampleNormal(float2 uv, TEXTURE2D_PARAM(bumpMap, sampler_bumpMap), half scale = half(1.0))
|
|
{
|
|
#ifdef _NORMALMAP
|
|
half4 n = SAMPLE_TEXTURE2D(bumpMap, sampler_bumpMap, uv);
|
|
#if BUMP_SCALE_NOT_SUPPORTED
|
|
return UnpackNormal(n);
|
|
#else
|
|
return UnpackNormalScale(n, scale);
|
|
#endif
|
|
#else
|
|
return half3(0.0h, 0.0h, 1.0h);
|
|
#endif
|
|
}
|
|
#if UNITY_VERSION < 202100
|
|
half4 SampleSpecularSmoothnessMy(half2 uv, half alpha, half4 specColor, TEXTURE2D_PARAM( specMap, sampler_specMap))
|
|
{
|
|
half4 specularSmoothness = half4(0.0h, 0.0h, 0.0h, 1.0h);
|
|
#ifdef _SPECGLOSSMAP
|
|
specularSmoothness = SAMPLE_TEXTURE2D(specMap, sampler_specMap, uv) * specColor;
|
|
#elif defined(_SPECULAR_COLOR)
|
|
specularSmoothness = specColor;
|
|
#endif
|
|
|
|
#ifdef _GLOSSINESS_FROM_BASE_ALPHA
|
|
specularSmoothness.a = exp2(10 * alpha + 1);
|
|
#else
|
|
specularSmoothness.a = exp2(10 * specularSmoothness.a + 1);
|
|
#endif
|
|
return specularSmoothness;
|
|
}
|
|
#else
|
|
|
|
half4 SampleSpecularSmoothnessMy(float2 uv, half alpha, half4 specColor, TEXTURE2D_PARAM(specMap, sampler_specMap))
|
|
{
|
|
half4 specularSmoothness = half4(0, 0, 0, 1);
|
|
#ifdef _SPECGLOSSMAP
|
|
specularSmoothness = SAMPLE_TEXTURE2D(specMap, sampler_specMap, uv) * specColor;
|
|
#elif defined(_SPECULAR_COLOR)
|
|
specularSmoothness = specColor;
|
|
#endif
|
|
|
|
#ifdef _GLOSSINESS_FROM_BASE_ALPHA
|
|
specularSmoothness.a = alpha;
|
|
#endif
|
|
|
|
return specularSmoothness;
|
|
}
|
|
#endif
|
|
half3 SampleEmissionMy(float2 uv, half3 emissionColor, TEXTURE2D_PARAM(emissionMap, sampler_emissionMap))
|
|
{
|
|
#ifndef _EMISSION
|
|
return 0;
|
|
#else
|
|
return SAMPLE_TEXTURE2D(emissionMap, sampler_emissionMap, uv).rgb * emissionColor;
|
|
#endif
|
|
}
|
|
#ifndef BUILTIN_TARGET_API
|
|
half2 ParallaxOffset1Step(half height, half amplitude, half3 viewDirTS)
|
|
{
|
|
height = height * amplitude - amplitude / 2.0;
|
|
half3 v = normalize(viewDirTS);
|
|
v.z += 0.42;
|
|
return height * (v.xy / v.z);
|
|
}
|
|
#endif
|
|
|
|
float2 ParallaxMapping(TEXTURE2D_PARAM(heightMap, sampler_heightMap), half3 viewDirTS, half scale, float2 uv)
|
|
{
|
|
half h = SAMPLE_TEXTURE2D(heightMap, sampler_heightMap, uv).g;
|
|
float2 offset = ParallaxOffset1Step(h, scale, viewDirTS);
|
|
return offset;
|
|
}
|
|
#ifdef _SPECULAR_SETUP
|
|
#define SAMPLE_METALLICSPECULAR(uv) SAMPLE_TEXTURE2D(_SpecGlossMap, sampler_SpecGlossMap, uv)
|
|
#else
|
|
#define SAMPLE_METALLICSPECULAR(uv) SAMPLE_TEXTURE2D(_MetallicGlossMap, sampler_MetallicGlossMap, uv)
|
|
#endif
|
|
|
|
half4 SampleMetallicSpecGloss(float2 uv, half albedoAlpha)
|
|
{
|
|
half4 specGloss;
|
|
|
|
#ifdef _METALLICSPECGLOSSMAP
|
|
specGloss = half4(SAMPLE_METALLICSPECULAR(uv));
|
|
#ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
|
specGloss.a = albedoAlpha * _Smoothness;
|
|
#else
|
|
specGloss.a *= _Smoothness;
|
|
#endif
|
|
#else
|
|
#if _SPECULAR_SETUP
|
|
specGloss.rgb = _SpecColor.rgb;
|
|
#else
|
|
specGloss.rgb = _Metallic.rrr;
|
|
#endif
|
|
|
|
#ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
|
specGloss.a = albedoAlpha * _Smoothness;
|
|
#else
|
|
specGloss.a = _Smoothness;
|
|
#endif
|
|
#endif
|
|
|
|
return specGloss;
|
|
}
|
|
|
|
half SampleOcclusion(float2 uv)
|
|
{
|
|
#ifdef _OCCLUSIONMAP
|
|
half occ = SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
|
|
return LerpWhiteTo(occ, _OcclusionStrength);
|
|
#else
|
|
return half(1.0);
|
|
#endif
|
|
}
|
|
half SampleOcclusionMy(float2 uv)
|
|
{
|
|
#ifdef _OCCLUSIONMAP
|
|
#if defined(SHADER_API_GLES)
|
|
return SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
|
|
#else
|
|
half occ = SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
|
|
return LerpWhiteTo(occ, _OcclusionStrength);
|
|
#endif
|
|
#else
|
|
return 1.0;
|
|
#endif
|
|
}
|
|
half2 SampleClearCoat(float2 uv)
|
|
{
|
|
#if defined(_CLEARCOAT) || defined(_CLEARCOATMAP)
|
|
half2 clearCoatMaskSmoothness = half2(_ClearCoatMask, _ClearCoatSmoothness);
|
|
|
|
#if defined(_CLEARCOATMAP)
|
|
clearCoatMaskSmoothness *= SAMPLE_TEXTURE2D(_ClearCoatMap, sampler_ClearCoatMap, uv).rg;
|
|
#endif
|
|
|
|
return clearCoatMaskSmoothness;
|
|
#else
|
|
return half2(0.0, 1.0);
|
|
#endif
|
|
}
|
|
|
|
void ApplyPerPixelDisplacement(half3 viewDirTS, inout float2 uv)
|
|
{
|
|
#if defined(_PARALLAXMAP)
|
|
uv += ParallaxMapping(TEXTURE2D_ARGS(_ParallaxMap, sampler_ParallaxMap), viewDirTS, _Parallax, uv);
|
|
#endif
|
|
}
|
|
|
|
half3 ScaleDetailAlbedo(half3 detailAlbedo, half scale)
|
|
{
|
|
return half(2.0) * detailAlbedo * scale - scale + half(1.0);
|
|
}
|
|
|
|
half3 ApplyDetailAlbedo(float2 detailUv, half3 albedo, half detailMask)
|
|
{
|
|
#if defined(_DETAIL)
|
|
half3 detailAlbedo = SAMPLE_TEXTURE2D(_DetailAlbedoMap, sampler_DetailAlbedoMap, detailUv).rgb;
|
|
#if defined(_DETAIL_SCALED)
|
|
detailAlbedo = ScaleDetailAlbedo(detailAlbedo, _DetailAlbedoMapScale);
|
|
#else
|
|
detailAlbedo = half(2.0) * detailAlbedo;
|
|
#endif
|
|
|
|
return albedo * LerpWhiteTo(detailAlbedo, detailMask);
|
|
#else
|
|
return albedo;
|
|
#endif
|
|
}
|
|
|
|
half3 ApplyDetailNormal(float2 detailUv, half3 normalTS, half detailMask)
|
|
{
|
|
#if defined(_DETAIL)
|
|
#if BUMP_SCALE_NOT_SUPPORTED
|
|
half3 detailNormalTS = UnpackNormal(SAMPLE_TEXTURE2D(_DetailNormalMap, sampler_DetailNormalMap, detailUv));
|
|
#else
|
|
half3 detailNormalTS = UnpackNormalScale(SAMPLE_TEXTURE2D(_DetailNormalMap, sampler_DetailNormalMap, detailUv), _DetailNormalMapScale);
|
|
#endif
|
|
detailNormalTS = normalize(detailNormalTS);
|
|
|
|
return lerp(normalTS, BlendNormalRNM(normalTS, detailNormalTS), detailMask);
|
|
#else
|
|
return normalTS;
|
|
#endif
|
|
}
|
|
void Ext_SurfaceFunction1 (inout Surface o, ShaderData d)
|
|
{
|
|
|
|
float4 texcoords;
|
|
texcoords.xy = d.texcoord0.xy * _BaseMap_ST.xy + _BaseMap_ST.zw;
|
|
float2 uv = texcoords.xy;
|
|
|
|
#if _SHADING_BLINNPHONG || _SHADING_COLOR
|
|
half4 diffuseAlpha = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, texcoords.xy);
|
|
o.Albedo = diffuseAlpha.rgb * _BaseColor.rgb;
|
|
#if !_PASSFORWARD
|
|
if(_EnableToonShading == 0 || _ShadingAffectedByNormalMap == 1)
|
|
{
|
|
o.Normal = SampleNormal(texcoords.xy, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
}
|
|
#else
|
|
o.Normal = SampleNormal(texcoords.xy, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
#endif
|
|
o.Alpha = diffuseAlpha.a;
|
|
o.Alpha = o.Alpha * _BaseColor.a;
|
|
AlphaDiscard(o.Alpha, _Cutoff);
|
|
half3 emission = SampleEmissionMy(uv, _EmissionColor.rgb, TEXTURE2D_ARGS(_EmissionMap, sampler_EmissionMap));
|
|
o.Emission = emission;
|
|
#endif
|
|
|
|
if(_ShadingMode == 1 && _LightFunction == 0 )
|
|
{
|
|
#if _SHADING_BLINNPHONG
|
|
half4 specular = SampleSpecularSmoothnessMy(uv, o.Alpha, _SpecColor, TEXTURE2D_ARGS(_SpecGlossMap, sampler_SpecGlossMap));
|
|
half smoothness = specular.a;
|
|
|
|
o.Specular = specular;
|
|
o.Smoothness = smoothness;
|
|
#endif
|
|
|
|
}
|
|
else if (_ShadingMode == 1 && _LightFunction == 1)
|
|
{
|
|
#if _SHADING_PBR
|
|
#if defined(_PARALLAXMAP)
|
|
ApplyPerPixelDisplacement(d.tangentSpaceViewDir, uv);
|
|
#endif
|
|
half4 albedoAlpha = SampleAlbedoAlpha(uv, TEXTURE2D_ARGS(_BaseMap, sampler_BaseMap));
|
|
o.Alpha = AlphaMy(albedoAlpha.a, _BaseColor, _Cutoff);
|
|
|
|
half4 specGloss = SampleMetallicSpecGloss(uv, albedoAlpha.a);
|
|
o.Albedo = albedoAlpha.rgb * _BaseColor.rgb;
|
|
o.Albedo = AlphaModulate(o.Albedo, o.Alpha);
|
|
#if _SPECULAR_SETUP
|
|
o.Metallic = half(1.0);
|
|
o.Specular = specGloss.rgb;
|
|
#else
|
|
o.Metallic = specGloss.r;
|
|
o.Specular = half3(0.0, 0.0, 0.0);
|
|
#endif
|
|
o.Smoothness = specGloss.a;
|
|
#if !_PASSFORWARD
|
|
if(_EnableToonShading == 0 || _ShadingAffectedByNormalMap == 1)
|
|
{
|
|
o.Normal = SampleNormal(uv, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
}
|
|
#else
|
|
o.Normal = SampleNormal(uv, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
#endif
|
|
o.Occlusion = SampleOcclusion(uv);
|
|
o.Emission = SampleEmissionMy(uv, _EmissionColor.rgb, TEXTURE2D_ARGS(_EmissionMap, sampler_EmissionMap));
|
|
|
|
#if defined(_DETAIL)
|
|
half detailMask = SAMPLE_TEXTURE2D(_DetailMask, sampler_DetailMask, uv).a;
|
|
float2 detailUv = uv * _DetailAlbedoMap_ST.xy + _DetailAlbedoMap_ST.zw;
|
|
o.Albedo = ApplyDetailAlbedo(detailUv, o.Albedo, detailMask);
|
|
o.Normal = ApplyDetailNormal(detailUv, o.Normal, detailMask);
|
|
#endif
|
|
|
|
#endif
|
|
}
|
|
|
|
}
|
|
void ChainSurfaceFunction(inout Surface l, inout ShaderData d)
|
|
{
|
|
Ext_SurfaceFunction0(l, d);
|
|
Ext_SurfaceFunction1(l, d);
|
|
}
|
|
|
|
#if !_DECALSHADER
|
|
|
|
void ChainModifyVertex(inout VertexData v, inout VertexToPixel v2p, float4 time)
|
|
{
|
|
ExtraV2F d;
|
|
ZERO_INITIALIZE(ExtraV2F, d);
|
|
ZERO_INITIALIZE(Blackboard, d.blackboard);
|
|
d.time = time;
|
|
|
|
Ext_ModifyVertex0(v, d);
|
|
v2p.extraV2F0 = d.extraV2F0;
|
|
}
|
|
|
|
void ChainModifyTessellatedVertex(inout VertexData v, inout VertexToPixel v2p)
|
|
{
|
|
ExtraV2F d;
|
|
ZERO_INITIALIZE(ExtraV2F, d);
|
|
ZERO_INITIALIZE(Blackboard, d.blackboard);
|
|
d.extraV2F0 = v2p.extraV2F0;
|
|
v2p.extraV2F0 = d.extraV2F0;
|
|
}
|
|
|
|
void ChainFinalColorForward(inout Surface l, inout ShaderData d, inout half4 color)
|
|
{
|
|
}
|
|
|
|
void ChainFinalGBufferStandard(inout Surface s, inout ShaderData d, inout half4 GBuffer0, inout half4 GBuffer1, inout half4 GBuffer2, inout half4 outEmission, inout half4 outShadowMask)
|
|
{
|
|
}
|
|
#endif
|
|
#if _DECALSHADER
|
|
|
|
ShaderData CreateShaderData(SurfaceDescriptionInputs IN)
|
|
{
|
|
ShaderData d = (ShaderData)0;
|
|
d.TBNMatrix = float3x3(IN.WorldSpaceTangent, IN.WorldSpaceBiTangent, IN.WorldSpaceNormal);
|
|
d.worldSpaceNormal = IN.WorldSpaceNormal;
|
|
d.worldSpaceTangent = IN.WorldSpaceTangent;
|
|
|
|
d.worldSpacePosition = IN.WorldSpacePosition;
|
|
d.texcoord0 = IN.uv0.xyxy;
|
|
d.screenPos = IN.ScreenPosition;
|
|
|
|
d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - d.worldSpacePosition);
|
|
|
|
d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir);
|
|
#if _HDRP
|
|
#else
|
|
#endif
|
|
return d;
|
|
}
|
|
#else
|
|
|
|
ShaderData CreateShaderData(VertexToPixel i
|
|
#if NEED_FACING
|
|
, bool facing
|
|
#endif
|
|
)
|
|
{
|
|
ShaderData d = (ShaderData)0;
|
|
d.clipPos = i.pos;
|
|
d.worldSpacePosition = i.worldPos;
|
|
|
|
d.worldSpaceNormal = normalize(i.worldNormal);
|
|
d.worldSpaceTangent.xyz = normalize(i.worldTangent.xyz);
|
|
|
|
d.tangentSign = i.worldTangent.w * unity_WorldTransformParams.w;
|
|
float3 bitangent = cross(d.worldSpaceTangent.xyz, d.worldSpaceNormal) * d.tangentSign;
|
|
d.TBNMatrix = float3x3(d.worldSpaceTangent, -bitangent, d.worldSpaceNormal);
|
|
d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - i.worldPos);
|
|
|
|
d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir);
|
|
d.texcoord0 = i.texcoord0;
|
|
d.texcoord1 = i.texcoord1;
|
|
d.texcoord2 = i.texcoord2;
|
|
d.texcoord3 = i.texcoord3;
|
|
#if _HDRP
|
|
#else
|
|
#endif
|
|
d.extraV2F0 = i.extraV2F0;
|
|
return d;
|
|
}
|
|
|
|
#endif
|
|
#if defined(_PASSSHADOW)
|
|
float3 _LightDirection;
|
|
float3 _LightPosition;
|
|
#endif
|
|
|
|
#if (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)))
|
|
|
|
#define GetWorldToViewMatrix() _ViewMatrix
|
|
#define UNITY_MATRIX_I_V _InvViewMatrix
|
|
#define GetViewToHClipMatrix() OptimizeProjectionMatrix(_ProjMatrix)
|
|
#define UNITY_MATRIX_I_P _InvProjMatrix
|
|
#define GetWorldToHClipMatrix() _ViewProjMatrix
|
|
#define UNITY_MATRIX_I_VP _InvViewProjMatrix
|
|
#define UNITY_MATRIX_UNJITTERED_VP _NonJitteredViewProjMatrix
|
|
#define UNITY_MATRIX_PREV_VP _PrevViewProjMatrix
|
|
#define UNITY_MATRIX_PREV_I_VP _PrevInvViewProjMatrix
|
|
|
|
void MotionVectorPositionZBias(VertexToPixel input)
|
|
{
|
|
#if UNITY_REVERSED_Z
|
|
input.pos.z -= unity_MotionVectorsParams.z * input.pos.w;
|
|
#else
|
|
input.pos.z += unity_MotionVectorsParams.z * input.pos.w;
|
|
#endif
|
|
}
|
|
|
|
#endif
|
|
VertexToPixel Vert (VertexData v)
|
|
{
|
|
VertexToPixel o = (VertexToPixel)0;
|
|
|
|
UNITY_SETUP_INSTANCE_ID(v);
|
|
UNITY_TRANSFER_INSTANCE_ID(v, o);
|
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
|
|
#if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)))
|
|
VertexData previousMesh = v;
|
|
#endif
|
|
#if !_TESSELLATION_ON
|
|
ChainModifyVertex(v, o, _Time);
|
|
#endif
|
|
|
|
o.texcoord0 = v.texcoord0;
|
|
o.texcoord1 = v.texcoord1;
|
|
o.texcoord2 = v.texcoord2;
|
|
o.texcoord3 = v.texcoord3;
|
|
float3 positionWS = TransformObjectToWorld(v.vertex.xyz);
|
|
float3 normalWS = TransformObjectToWorldNormal(v.normal);
|
|
float4 tangentWS = float4(TransformObjectToWorldDir(v.tangent.xyz), v.tangent.w);
|
|
VertexPositionInputs vertexInput = GetVertexPositionInputs(v.vertex.xyz);
|
|
o.worldPos = positionWS;
|
|
o.worldNormal = normalWS;
|
|
o.worldTangent = tangentWS;
|
|
#if _PASSSHADOW
|
|
#if _CASTING_PUNCTUAL_LIGHT_SHADOW
|
|
float3 lightDirectionWS = normalize(_LightPosition - o.worldPos);
|
|
#else
|
|
float3 lightDirectionWS = _LightDirection;
|
|
#endif
|
|
o.pos = TransformWorldToHClip(ApplyShadowBias(o.worldPos, o.worldNormal, lightDirectionWS));
|
|
#if UNITY_REVERSED_Z
|
|
o.pos.z = min(o.pos.z, UNITY_NEAR_CLIP_VALUE);
|
|
#else
|
|
o.pos.z = max(o.pos.z, UNITY_NEAR_CLIP_VALUE);
|
|
#endif
|
|
#elif _PASSMETA
|
|
o.pos = MetaVertexPosition(float4(v.vertex.xyz, 0), v.texcoord1.xy, v.texcoord2.xy, unity_LightmapST, unity_DynamicLightmapST);
|
|
#else
|
|
o.pos = TransformWorldToHClip(o.worldPos);
|
|
#endif
|
|
#if _PASSFORWARD || _PASSGBUFFER
|
|
float2 uv1 = v.texcoord1.xy;
|
|
OUTPUT_LIGHTMAP_UV(uv1, unity_LightmapST, o.lightmapUV);
|
|
o.texcoord1.xy = uv1;
|
|
OUTPUT_SH(o.worldNormal, o.sh);
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
|
o.dynamicLightmapUV.xy = v.texcoord2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw;
|
|
#if UNITY_VERSION >= 60000009
|
|
OUTPUT_SH(o.worldNormal, o.sh);
|
|
#endif
|
|
#elif (defined(PROBE_VOLUMES_L1) || defined(PROBE_VOLUMES_L2)) && UNITY_VERSION >= 60000009
|
|
OUTPUT_SH4(vertexInput.positionWS, o.worldNormal.xyz, GetWorldSpaceNormalizeViewDir(vertexInput.positionWS), o.sh, o.probeOcclusion);
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef VARYINGS_NEED_FOG_AND_VERTEX_LIGHT
|
|
half fogFactor = 0;
|
|
#if defined(_FOG_FRAGMENT)
|
|
fogFactor = ComputeFogFactor(o.pos.z);
|
|
#endif
|
|
#if _BAKEDLIT
|
|
o.fogFactorAndVertexLight = half4(fogFactor, 0, 0, 0);
|
|
#else
|
|
half3 vertexLight = VertexLighting(o.worldPos, o.worldNormal);
|
|
o.fogFactorAndVertexLight = half4(fogFactor, vertexLight);
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
|
|
o.shadowCoord = GetShadowCoord(vertexInput);
|
|
#endif
|
|
|
|
#if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)))
|
|
#if !defined(TESSELLATION_ON)
|
|
MotionVectorPositionZBias(o);
|
|
#endif
|
|
|
|
o.previousPositionCS = float4(0.0, 0.0, 0.0, 1.0);
|
|
bool forceNoMotion = unity_MotionVectorsParams.y == 0.0;
|
|
|
|
if (!forceNoMotion)
|
|
{
|
|
#if defined(HAVE_VFX_MODIFICATION)
|
|
float3 previousPositionOS = currentFrameMvData.vfxParticlePositionOS;
|
|
#if defined(VFX_FEATURE_MOTION_VECTORS_VERTS)
|
|
const bool applyDeformation = false;
|
|
#else
|
|
const bool applyDeformation = true;
|
|
#endif
|
|
#else
|
|
const bool hasDeformation = unity_MotionVectorsParams.x == 1;
|
|
float3 previousPositionOS = hasDeformation ? previousMesh.previousPositionOS : previousMesh.vertex.xyz;
|
|
|
|
#if defined(AUTOMATIC_TIME_BASED_MOTION_VECTORS) && defined(GRAPH_VERTEX_USES_TIME_PARAMETERS_INPUT)
|
|
const bool applyDeformation = true;
|
|
#else
|
|
const bool applyDeformation = hasDeformation;
|
|
#endif
|
|
#endif
|
|
#if defined(FEATURES_GRAPH_VERTEX)
|
|
if (applyDeformation)
|
|
previousPositionOS = GetLastFrameDeformedPosition(previousMesh, currentFrameMvData, previousPositionOS);
|
|
else
|
|
previousPositionOS = previousMesh.positionOS;
|
|
|
|
#if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT)
|
|
previousPositionOS -= previousMesh.precomputedVelocity;
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(UNITY_DOTS_INSTANCING_ENABLED) && defined(DOTS_DEFORMED)
|
|
ApplyPreviousFrameDeformedVertexPosition(previousMesh.vertexID, previousPositionOS);
|
|
#endif
|
|
#if defined (_ADD_PRECOMPUTED_VELOCITY)
|
|
previousPositionOS -= previousMesh.precomputedVelocity;
|
|
#endif
|
|
o.positionCS = mul(UNITY_MATRIX_UNJITTERED_VP, float4(positionWS, 1.0f));
|
|
|
|
#if defined(HAVE_VFX_MODIFICATION)
|
|
#if defined(VFX_FEATURE_MOTION_VECTORS_VERTS)
|
|
#if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT) || defined(_ADD_PRECOMPUTED_VELOCITY)
|
|
#error Unexpected fast path rendering VFX motion vector while there are vertex modification afterwards.
|
|
#endif
|
|
o.previousPositionCS = VFXGetPreviousClipPosition(previousMesh, currentFrameMvData.vfxElementAttributes, o.positionCS);
|
|
#else
|
|
#if VFX_WORLD_SPACE
|
|
const float3 previousPositionWS = previousPositionOS;
|
|
#else
|
|
const float3 previousPositionWS = mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1.0f)).xyz;
|
|
#endif
|
|
o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, float4(previousPositionWS, 1.0f));
|
|
#endif
|
|
#else
|
|
o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1)));
|
|
#endif
|
|
}
|
|
#endif
|
|
|
|
return o;
|
|
}
|
|
half4 Frag (VertexToPixel IN
|
|
#if NEED_FACING
|
|
, bool facing : SV_IsFrontFace
|
|
#endif
|
|
) : SV_Target
|
|
{
|
|
UNITY_SETUP_INSTANCE_ID(IN);
|
|
|
|
ShaderData d = CreateShaderData(IN
|
|
#if NEED_FACING
|
|
, facing
|
|
#endif
|
|
);
|
|
|
|
Surface l = (Surface)0;
|
|
|
|
l.Albedo = half3(0.5, 0.5, 0.5);
|
|
l.Normal = float3(0,0,1);
|
|
l.Occlusion = 1;
|
|
l.Alpha = 1;
|
|
|
|
ChainSurfaceFunction(l, d);
|
|
|
|
MetaInput metaInput = (MetaInput)0;
|
|
metaInput.Albedo = l.Albedo;
|
|
metaInput.Emission = l.Emission;
|
|
|
|
return MetaFragment(metaInput);
|
|
|
|
}
|
|
|
|
ENDHLSL
|
|
|
|
}
|
|
Pass
|
|
{
|
|
Name "DepthNormals"
|
|
Tags
|
|
{
|
|
"LightMode" = "DepthNormals"
|
|
}
|
|
Cull Back
|
|
ZTest LEqual
|
|
ZWrite On
|
|
|
|
Cull [_Cull]
|
|
HLSLPROGRAM
|
|
|
|
#pragma vertex Vert
|
|
#pragma fragment Frag
|
|
|
|
#if (defined(SHADER_API_GLES) || defined(SHADER_API_GLES3) || defined(SHADER_API_GLES30))
|
|
#pragma target 3.0
|
|
#else
|
|
#pragma target 4.5
|
|
#endif
|
|
|
|
#pragma prefer_hlslcc gles
|
|
#pragma exclude_renderers d3d11_9x
|
|
#pragma multi_compile_fog
|
|
#pragma multi_compile_instancing
|
|
#pragma multi_compile_fragment _ LOD_FADE_CROSSFADE
|
|
#pragma multi_compile_fragment _ _WRITE_RENDERING_LAYERS
|
|
|
|
#define SHADERPASS SHADERPASS_DEPTHNORMALSONLY
|
|
#define _PASSDEPTH 1
|
|
#define _PASSDEPTHNORMALS 1
|
|
#pragma shader_feature_local_fragment _SHADING_COLOR _SHADING_BLINNPHONG _SHADING_PBR
|
|
// Commented out Curved World defines
|
|
// #define CURVEDWORLD_BEND_TYPE_CLASSICRUNNER_X_POSITIVE
|
|
// #define CURVEDWORLD_BEND_ID_1
|
|
// #pragma shader_feature_local CURVEDWORLD_DISABLED_ON
|
|
// #pragma shader_feature_local CURVEDWORLD_NORMAL_TRANSFORMATION_ON
|
|
// #include "Assets/Amazing Assets/Curved World/Shaders/Core/CurvedWorldTransform.cginc"
|
|
#pragma shader_feature_local _NORMALMAP
|
|
#pragma shader_feature_local_fragment _EMISSION
|
|
|
|
#pragma shader_feature_local_fragment _ALPHATEST_ON
|
|
#pragma shader_feature_local _RECEIVE_SHADOWS_OFF
|
|
#pragma shader_feature_local_fragment _ _SPECGLOSSMAP _SPECULAR_COLOR
|
|
#pragma shader_feature_local_fragment _GLOSSINESS_FROM_BASE_ALPHA
|
|
|
|
#pragma shader_feature_local_fragment _OCCLUSIONMAP
|
|
#pragma shader_feature_local _PARALLAXMAP
|
|
#pragma shader_feature_local _ _DETAIL_MULX2 _DETAIL_SCALED
|
|
#pragma shader_feature_local_fragment _SURFACE_TYPE_TRANSPARENT
|
|
|
|
#pragma shader_feature_local_fragment _ _ALPHAPREMULTIPLY_ON _ALPHAMODULATE_ON
|
|
|
|
#pragma shader_feature_local_fragment _METALLICSPECGLOSSMAP
|
|
#pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
|
#pragma shader_feature_local_fragment _SPECULARHIGHLIGHTS_OFF
|
|
#pragma shader_feature_local_fragment _ENVIRONMENTREFLECTIONS_OFF
|
|
#pragma shader_feature_local_fragment _SPECULAR_SETUP
|
|
#define _URP 1
|
|
#define _USINGTEXCOORD1 1
|
|
#define _USINGTEXCOORD2 1
|
|
#if _SIMPLELIT
|
|
#define _SPECULAR_COLOR
|
|
#endif
|
|
#include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl"
|
|
#include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl"
|
|
#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.universal/ShaderLibrary/Input.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl"
|
|
#include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/LODCrossFade.hlsl"
|
|
#undef WorldNormalVector
|
|
#define WorldNormalVector(data, normal) mul(normal, data.TBNMatrix)
|
|
#define UnityObjectToWorldNormal(normal) mul(GetObjectToWorldMatrix(), normal)
|
|
|
|
#define _WorldSpaceLightPos0 _MainLightPosition
|
|
#define UNITY_DECLARE_TEX2D(name) TEXTURE2D(name); SAMPLER(sampler##name);
|
|
#define UNITY_DECLARE_TEX2D_NOSAMPLER(name) TEXTURE2D(name);
|
|
#define UNITY_DECLARE_TEX2DARRAY(name) TEXTURE2D_ARRAY(name); SAMPLER(sampler##name);
|
|
#define UNITY_DECLARE_TEX2DARRAY_NOSAMPLER(name) TEXTURE2D_ARRAY(name);
|
|
|
|
#define UNITY_SAMPLE_TEX2DARRAY(tex,coord) SAMPLE_TEXTURE2D_ARRAY(tex, sampler##tex, coord.xy, coord.z)
|
|
#define UNITY_SAMPLE_TEX2DARRAY_LOD(tex,coord,lod) SAMPLE_TEXTURE2D_ARRAY_LOD(tex, sampler##tex, coord.xy, coord.z, lod)
|
|
#define UNITY_SAMPLE_TEX2D(tex, coord) SAMPLE_TEXTURE2D(tex, sampler##tex, coord)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER(tex, samp, coord) SAMPLE_TEXTURE2D(tex, sampler##samp, coord)
|
|
|
|
#define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) SAMPLE_TEXTURE2D_LOD(tex, sampler_##tex, coord, lod)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) SAMPLE_TEXTURE2D_LOD (tex, sampler##samplertex,coord, lod)
|
|
#if defined(UNITY_COMPILER_HLSL)
|
|
#define UNITY_INITIALIZE_OUTPUT(type,name) name = (type)0;
|
|
#else
|
|
#define UNITY_INITIALIZE_OUTPUT(type,name)
|
|
#endif
|
|
|
|
#define sampler2D_float sampler2D
|
|
#define sampler2D_half sampler2D
|
|
struct VertexToPixel
|
|
{
|
|
float4 pos : SV_POSITION;
|
|
float3 worldPos : TEXCOORD0;
|
|
float3 worldNormal : TEXCOORD1;
|
|
float4 worldTangent : TEXCOORD2;
|
|
float4 texcoord0 : TEXCOORD3;
|
|
float4 texcoord1 : TEXCOORD4;
|
|
float4 texcoord2 : TEXCOORD5;
|
|
float4 texcoord3 : TEXCOORD6;
|
|
#if defined(LIGHTMAP_ON)
|
|
float2 lightmapUV : TEXCOORD8;
|
|
#endif
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
|
float2 dynamicLightmapUV : TEXCOORD9;
|
|
#endif
|
|
#if !defined(LIGHTMAP_ON)
|
|
float4 probeOcclusion : TEXCOORD8;
|
|
float3 sh : TEXCOORD10;
|
|
#endif
|
|
|
|
#if defined(VARYINGS_NEED_FOG_AND_VERTEX_LIGHT)
|
|
float4 fogFactorAndVertexLight : TEXCOORD11;
|
|
#endif
|
|
|
|
#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
|
|
float4 shadowCoord : TEXCOORD12;
|
|
#endif
|
|
float4 extraV2F0 : TEXCOORD13;
|
|
#if UNITY_ANY_INSTANCING_ENABLED
|
|
uint instanceID : CUSTOM_INSTANCE_ID;
|
|
#endif
|
|
#if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE)))
|
|
uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0;
|
|
#endif
|
|
#if (defined(UNITY_STEREO_INSTANCING_ENABLED))
|
|
uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex;
|
|
#endif
|
|
#if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE)
|
|
FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC;
|
|
#endif
|
|
|
|
#if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))
|
|
float4 previousPositionCS : TEXCOORD21;
|
|
float4 positionCS : TEXCOORD22;
|
|
#endif
|
|
};
|
|
struct Surface
|
|
{
|
|
half3 Albedo;
|
|
half Height;
|
|
half3 Normal;
|
|
half Smoothness;
|
|
half3 Emission;
|
|
half Metallic;
|
|
half3 Specular;
|
|
half Occlusion;
|
|
half SpecularPower;
|
|
half Alpha;
|
|
float outputDepth;
|
|
half SpecularOcclusion;
|
|
half SubsurfaceMask;
|
|
half Thickness;
|
|
half CoatMask;
|
|
half CoatSmoothness;
|
|
half Anisotropy;
|
|
half IridescenceMask;
|
|
half IridescenceThickness;
|
|
int DiffusionProfileHash;
|
|
float SpecularAAThreshold;
|
|
float SpecularAAScreenSpaceVariance;
|
|
float3 DiffuseGI;
|
|
float3 BackDiffuseGI;
|
|
float3 SpecularGI;
|
|
float ior;
|
|
float3 transmittanceColor;
|
|
float atDistance;
|
|
float transmittanceMask;
|
|
float4 ShadowMask;
|
|
float NormalAlpha;
|
|
float MAOSAlpha;
|
|
};
|
|
struct Blackboard
|
|
{
|
|
float blackboardDummyData;
|
|
};
|
|
struct ShaderData
|
|
{
|
|
float4 clipPos;
|
|
float3 localSpacePosition;
|
|
float3 localSpaceNormal;
|
|
float3 localSpaceTangent;
|
|
float3 worldSpacePosition;
|
|
float3 worldSpaceNormal;
|
|
float3 worldSpaceTangent;
|
|
float tangentSign;
|
|
|
|
float3 worldSpaceViewDir;
|
|
float3 tangentSpaceViewDir;
|
|
|
|
float4 texcoord0;
|
|
float4 texcoord1;
|
|
float4 texcoord2;
|
|
float4 texcoord3;
|
|
|
|
float2 screenUV;
|
|
float4 screenPos;
|
|
|
|
float4 vertexColor;
|
|
bool isFrontFace;
|
|
|
|
float4 extraV2F0;
|
|
float4 extraV2F1;
|
|
float4 extraV2F2;
|
|
float4 extraV2F3;
|
|
float4 extraV2F4;
|
|
float4 extraV2F5;
|
|
float4 extraV2F6;
|
|
float4 extraV2F7;
|
|
|
|
float3x3 TBNMatrix;
|
|
Blackboard blackboard;
|
|
};
|
|
|
|
struct VertexData
|
|
{
|
|
#if SHADER_TARGET > 30
|
|
#endif
|
|
float4 vertex : POSITION;
|
|
float3 normal : NORMAL;
|
|
float4 tangent : TANGENT;
|
|
float4 texcoord0 : TEXCOORD0;
|
|
#if _URP && (_USINGTEXCOORD1 || _PASSMETA || _PASSFORWARD || _PASSGBUFFER)
|
|
float4 texcoord1 : TEXCOORD1;
|
|
#endif
|
|
|
|
#if _URP && (_USINGTEXCOORD2 || _PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && defined(DYNAMICLIGHTMAP_ON)))
|
|
float4 texcoord2 : TEXCOORD2;
|
|
#endif
|
|
|
|
#if _STANDARD && (_USINGTEXCOORD1 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER || _PASSFORWARDADD) && LIGHTMAP_ON)))
|
|
float4 texcoord1 : TEXCOORD1;
|
|
#endif
|
|
#if _STANDARD && (_USINGTEXCOORD2 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && DYNAMICLIGHTMAP_ON)))
|
|
float4 texcoord2 : TEXCOORD2;
|
|
#endif
|
|
#if _HDRP
|
|
float4 texcoord1 : TEXCOORD1;
|
|
float4 texcoord2 : TEXCOORD2;
|
|
#endif
|
|
float4 texcoord3 : TEXCOORD3;
|
|
#if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))
|
|
float3 previousPositionOS : TEXCOORD4;
|
|
#if defined (_ADD_PRECOMPUTED_VELOCITY)
|
|
float3 precomputedVelocity : TEXCOORD5;
|
|
#endif
|
|
#endif
|
|
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
};
|
|
|
|
struct TessVertex
|
|
{
|
|
float4 vertex : INTERNALTESSPOS;
|
|
float3 normal : NORMAL;
|
|
float4 tangent : TANGENT;
|
|
float4 texcoord0 : TEXCOORD0;
|
|
float4 texcoord1 : TEXCOORD1;
|
|
float4 texcoord2 : TEXCOORD2;
|
|
float4 texcoord3 : TEXCOORD3;
|
|
float4 extraV2F0 : TEXCOORD5;
|
|
#if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))
|
|
float3 previousPositionOS : TEXCOORD13;
|
|
#if defined (_ADD_PRECOMPUTED_VELOCITY)
|
|
float3 precomputedVelocity : TEXCOORD14;
|
|
#endif
|
|
#endif
|
|
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
UNITY_VERTEX_OUTPUT_STEREO
|
|
};
|
|
|
|
struct ExtraV2F
|
|
{
|
|
float4 extraV2F0;
|
|
float4 extraV2F1;
|
|
float4 extraV2F2;
|
|
float4 extraV2F3;
|
|
float4 extraV2F4;
|
|
float4 extraV2F5;
|
|
float4 extraV2F6;
|
|
float4 extraV2F7;
|
|
Blackboard blackboard;
|
|
float4 time;
|
|
};
|
|
float3 WorldToTangentSpace(ShaderData d, float3 normal)
|
|
{
|
|
return mul(d.TBNMatrix, normal);
|
|
}
|
|
|
|
float3 TangentToWorldSpace(ShaderData d, float3 normal)
|
|
{
|
|
return mul(normal, d.TBNMatrix);
|
|
}
|
|
#if _STANDARD
|
|
float3 TransformWorldToObject(float3 p) { return mul(unity_WorldToObject, float4(p, 1)); };
|
|
float3 TransformObjectToWorld(float3 p) { return mul(unity_ObjectToWorld, float4(p, 1)); };
|
|
float4 TransformWorldToObject(float4 p) { return mul(unity_WorldToObject, p); };
|
|
float4 TransformObjectToWorld(float4 p) { return mul(unity_ObjectToWorld, p); };
|
|
float4x4 GetWorldToObjectMatrix() { return unity_WorldToObject; }
|
|
float4x4 GetObjectToWorldMatrix() { return unity_ObjectToWorld; }
|
|
#if (defined(SHADER_API_D3D11) || defined(SHADER_API_XBOXONE) || defined(UNITY_COMPILER_HLSLCC) || defined(SHADER_API_PSSL) || (SHADER_TARGET_SURFACE_ANALYSIS && !SHADER_TARGET_SURFACE_ANALYSIS_MOJOSHADER))
|
|
#define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) tex.SampleLevel (sampler##tex,coord, lod)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) tex.SampleLevel (sampler##samplertex,coord, lod)
|
|
#else
|
|
#define UNITY_SAMPLE_TEX2D_LOD(tex,coord,lod) tex2D (tex,coord,0,lod)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord,lod) tex2D (tex,coord,0,lod)
|
|
#endif
|
|
|
|
#undef GetWorldToObjectMatrix()
|
|
|
|
#define GetWorldToObjectMatrix() unity_WorldToObject
|
|
#endif
|
|
|
|
float3 GetCameraWorldPosition()
|
|
{
|
|
#if _HDRP
|
|
return GetCameraRelativePositionWS(_WorldSpaceCameraPos);
|
|
#else
|
|
return _WorldSpaceCameraPos;
|
|
#endif
|
|
}
|
|
|
|
#if _GRABPASSUSED
|
|
#if _STANDARD
|
|
TEXTURE2D(%GRABTEXTURE%);
|
|
SAMPLER(sampler_%GRABTEXTURE%);
|
|
#endif
|
|
|
|
half3 GetSceneColor(float2 uv)
|
|
{
|
|
#if _STANDARD
|
|
return SAMPLE_TEXTURE2D(%GRABTEXTURE%, sampler_%GRABTEXTURE%, uv).rgb;
|
|
#else
|
|
return SHADERGRAPH_SAMPLE_SCENE_COLOR(uv);
|
|
#endif
|
|
}
|
|
#endif
|
|
#if _STANDARD
|
|
UNITY_DECLARE_DEPTH_TEXTURE(_CameraDepthTexture);
|
|
float GetSceneDepth(float2 uv) { return SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv); }
|
|
float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv)); }
|
|
float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv)); }
|
|
#else
|
|
float GetSceneDepth(float2 uv) { return SHADERGRAPH_SAMPLE_SCENE_DEPTH(uv); }
|
|
float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv), _ZBufferParams); }
|
|
float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv), _ZBufferParams); }
|
|
#endif
|
|
|
|
float3 GetWorldPositionFromDepthBuffer(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
float eye = GetLinearEyeDepth(uv);
|
|
float3 camView = mul((float3x3)GetObjectToWorldMatrix(), transpose(mul(GetWorldToObjectMatrix(), UNITY_MATRIX_I_V)) [2].xyz);
|
|
|
|
float dt = dot(worldSpaceViewDir, camView);
|
|
float3 div = worldSpaceViewDir/dt;
|
|
float3 wpos = (eye * div) + GetCameraWorldPosition();
|
|
return wpos;
|
|
}
|
|
|
|
#if _HDRP
|
|
float3 ObjectToWorldSpacePosition(float3 pos)
|
|
{
|
|
return GetAbsolutePositionWS(TransformObjectToWorld(pos));
|
|
}
|
|
#else
|
|
float3 ObjectToWorldSpacePosition(float3 pos)
|
|
{
|
|
return TransformObjectToWorld(pos);
|
|
}
|
|
#endif
|
|
|
|
#if _STANDARD
|
|
UNITY_DECLARE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture);
|
|
float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
float4 depthNorms = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture, uv);
|
|
float3 norms = DecodeViewNormalStereo(depthNorms);
|
|
norms = mul((float3x3)GetWorldToViewMatrix(), norms) * 0.5 + 0.5;
|
|
return norms;
|
|
}
|
|
#elif _HDRP && !_DECALSHADER
|
|
float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
NormalData nd;
|
|
DecodeFromNormalBuffer(_ScreenSize.xy * uv, nd);
|
|
return nd.normalWS;
|
|
}
|
|
#elif _URP
|
|
#if (SHADER_LIBRARY_VERSION_MAJOR >= 10)
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl"
|
|
#endif
|
|
|
|
float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
#if (SHADER_LIBRARY_VERSION_MAJOR >= 10)
|
|
return SampleSceneNormals(uv);
|
|
#else
|
|
float3 wpos = GetWorldPositionFromDepthBuffer(uv, worldSpaceViewDir);
|
|
return normalize(-cross(ddx(wpos), ddy(wpos))) * 0.5 + 0.5;
|
|
#endif
|
|
|
|
}
|
|
#endif
|
|
|
|
#if _HDRP
|
|
|
|
half3 UnpackNormalmapRGorAG(half4 packednormal)
|
|
{
|
|
packednormal.x *= packednormal.w;
|
|
|
|
half3 normal;
|
|
normal.xy = packednormal.xy * 2 - 1;
|
|
normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy)));
|
|
return normal;
|
|
}
|
|
half3 UnpackNormal(half4 packednormal)
|
|
{
|
|
#if defined(UNITY_NO_DXT5nm)
|
|
return packednormal.xyz * 2 - 1;
|
|
#else
|
|
return UnpackNormalmapRGorAG(packednormal);
|
|
#endif
|
|
}
|
|
#endif
|
|
#if _HDRP || _URP
|
|
|
|
half3 UnpackScaleNormal(half4 packednormal, half scale)
|
|
{
|
|
#ifndef UNITY_NO_DXT5nm
|
|
packednormal.x *= packednormal.w;
|
|
#endif
|
|
half3 normal;
|
|
normal.xy = (packednormal.xy * 2 - 1) * scale;
|
|
normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy)));
|
|
return normal;
|
|
}
|
|
|
|
#endif
|
|
void GetSun(out float3 lightDir, out float3 color)
|
|
{
|
|
lightDir = float3(0.5, 0.5, 0);
|
|
color = 1;
|
|
#if _HDRP
|
|
if (_DirectionalLightCount > 0)
|
|
{
|
|
DirectionalLightData light = _DirectionalLightDatas[0];
|
|
lightDir = -light.forward.xyz;
|
|
color = light.color;
|
|
}
|
|
#elif _STANDARD
|
|
lightDir = normalize(_WorldSpaceLightPos0.xyz);
|
|
color = _LightColor0.rgb;
|
|
#elif _URP
|
|
Light light = GetMainLight();
|
|
lightDir = light.direction;
|
|
color = light.color;
|
|
#endif
|
|
}
|
|
CBUFFER_START(UnityPerMaterial)
|
|
half _LightSource;
|
|
|
|
half _ShadingMode;
|
|
half _LightFunction;
|
|
half _UseAlphaOnlyFromBaseMap;
|
|
half _EnableToonShading;
|
|
half _ShadingFunction;
|
|
int _NumberOfCells;
|
|
float _CellTransitionSmoothness;
|
|
half _RoundingMethod;
|
|
half _SumLightsBeforePosterization;
|
|
half _ShadingUseLightColors;
|
|
half _GradientMode;
|
|
half _GradientBlending;
|
|
float _GradientBlendFactor;
|
|
|
|
float4 _GradientTex_TexelSize;
|
|
half _ShadingAffectedByNormalMap;
|
|
half _EnableShadows;
|
|
float4 _CoreShadowColor;
|
|
float _TerminatorPosition;
|
|
float _TerminatorWidth;
|
|
float _TerminatorSmoothness;
|
|
float4 _FormShadowColor;
|
|
|
|
half _EnableCastShadows;
|
|
float _CastShadowsStrength;
|
|
float _CastShadowsSmoothness;
|
|
half _CastShadowColorMode;
|
|
float4 _CastShadowColor;
|
|
half _EnableSpecular;
|
|
half _SpecularBlending;
|
|
half4 _SpecularColor;
|
|
float _SpecularSize;
|
|
float _SpecularSmoothness;
|
|
float _SpecularOpacity;
|
|
half _SpecularAffectedByNormalMap;
|
|
half _SpecularUseLightColors;
|
|
half _EnableRim;
|
|
half _RimBlending;
|
|
float4 _RimColor;
|
|
float _RimSize;
|
|
float _RimSmoothness;
|
|
float _RimOpacity;
|
|
half _RimAffectedArea;
|
|
half _RimAffectedByNormalMap;
|
|
half _EnableStyling;
|
|
|
|
half _EnableStylingDistanceFade;
|
|
float _StylingDFStartingDistance;
|
|
float _StylingDFFalloff;
|
|
half _StylingAdjustDistanceFadeValue;
|
|
float _StylingDistanceFadeValue;
|
|
half _HatchingAffectedByNormalMap;
|
|
half _EnableAntiAliasing;
|
|
float4 _NoiseTex2_TexelSize;
|
|
half _EnableShadingStyling;
|
|
half _StylingShadingSyncWithOtherStyling;
|
|
half _ShadingStyle;
|
|
half _SyncWithLightPartitioning;
|
|
half _NumberOfCellsHatching;
|
|
half _StylingTerminatorPosition;
|
|
float _StylingOvermodelingFactor;
|
|
half _StylingShadingBlending;
|
|
half _StylingShadingIsInverted;
|
|
half _DrawSpace;
|
|
|
|
half _UVSet;
|
|
|
|
half _SSCameraDistanceScaled;
|
|
half _AnchorSSToObjectsOrigin;
|
|
half _CoordinateSystem;
|
|
half _PolarCenterMode;
|
|
float4 _PolarCenter;
|
|
float _StylingShadingDensity;
|
|
float _StylingShadingInitialDirection;
|
|
float _StylingShadingRotationBetweenCells;
|
|
float _StylingShadingHalftonesOffset;
|
|
float4 _StylingColor;
|
|
float _StylingShadingOpacity;
|
|
float _StylingShadingOpacityFalloff;
|
|
float _StylingShadingThicknessControl;
|
|
float _StylingShadingThickness;
|
|
float _StylingShadingThicknessFalloff;
|
|
float _StylingShadingHardness;
|
|
float _StylingShadingHalftonesRoundness;
|
|
float _StylingShadingHalftonesRoundnessFalloff;
|
|
half _StylingShadingEnableDashes;
|
|
float _StylingShadingDashesSize;
|
|
half _StylingShadingDashesUseHatchingDensity;
|
|
float _StylingShadingDashesDensity;
|
|
float _StylingShadingDashesType;
|
|
float _StylingShadingDashesRoundness;
|
|
float _StylingShadingDashesOffset;
|
|
|
|
float _StylingShadingDashesTransitionPosition;
|
|
float _StylingShadingDashesTransitionSoftness;
|
|
half _EnableShadingRandomizer;
|
|
float _ShadingNoise1Size;
|
|
float _ShadingNoise1Seed;
|
|
float _ShadingNoise2Seed;
|
|
float _NoiseIntensity;
|
|
half _SpacingRandomMode;
|
|
float _SpacingRandomIntensity;
|
|
half _OpacityRandomMode;
|
|
float _OpacityRandomIntensity;
|
|
half _LengthRandomMode;
|
|
float _LengthRandomIntensity;
|
|
half _HardnessRandomMode;
|
|
float _HardnessRandomIntensity;
|
|
half _ThicknessRandomMode;
|
|
float _ThicknesshRandomIntensity;
|
|
half _EnableCastShadowsStyling;
|
|
half _CastShadowsNumberOfCellsHatching;
|
|
float _StylingCastShadowsSmoothness;
|
|
half _StylingCastShadowsSyncWithOtherStyling;
|
|
half _CastShadowsStyle;
|
|
half _StylingCastShadowsBlending;
|
|
half _StylingCastShadowsIsInverted;
|
|
half _CastShadowsDrawSpace;
|
|
half _CastShadowsUVSet;
|
|
half _CastShadowsSSCameraDistanceScaled;
|
|
half _CastShadowsAnchorSSToObjectsOrigin;
|
|
half _CastShadowsCoordinateSystem;
|
|
half _CastShadowsPolarCenterMode;
|
|
float4 _CastShadowsPolarCenter;
|
|
float _StylingCastShadowsDensity;
|
|
float _StylingCastShadowsInitialDirection;
|
|
float _StylingCastShadowsRotationBetweenCells;
|
|
float _StylingCastShadowsHalftonesOffset;
|
|
float4 _StylingCastShadowsColor;
|
|
float _StylingCastShadowsOpacity;
|
|
float _StylingCastShadowsOpacityFalloff;
|
|
half _StylingCastShadowsThicknessControl;
|
|
float _StylingCastShadowsThickness;
|
|
float _StylingCastShadowsThicknessFalloff;
|
|
float _StylingCastShadowsHardness;
|
|
float _StylingCastShadowsHalftonesRoundness;
|
|
float _StylingCastShadowsHalftonesRoundnessFalloff;
|
|
half _StylingCastShadowsEnableDashes;
|
|
float _StylingCastShadowsDashesSize;
|
|
half _StylingCastShadowsDashesUseHatchingDensity;
|
|
float _StylingCastShadowsDashesDensity;
|
|
float _StylingCastShadowsDashesRoundness;
|
|
float _StylingCastShadowsDashesType;
|
|
float _StylingCastShadowsDashesOffset;
|
|
|
|
float _StylingCastShadowsDashesTransitionPosition;
|
|
float _StylingCastShadowsDashesTransitionSoftness;
|
|
half _EnableCastShadowsRandomizer;
|
|
float _CastShadowsNoise1Size;
|
|
float _CastShadowsNoise1Seed;
|
|
float _CastShadowsNoise2Seed;
|
|
float _CastShadowsNoiseIntensity;
|
|
half _CastShadowsSpacingRandomMode;
|
|
float _CastShadowsSpacingRandomIntensity;
|
|
half _CastShadowsOpacityRandomMode;
|
|
float _CastShadowsOpacityRandomIntensity;
|
|
half _CastShadowsHardnessRandomMode;
|
|
float _CastShadowsHardnessRandomIntensity;
|
|
half _CastShadowsLengthRandomMode;
|
|
float _CastShadowsLengthRandomIntensity;
|
|
half _CastShadowsThicknessRandomMode;
|
|
float _CastShadowsThicknesshRandomIntensity;
|
|
half _EnableSpecularStyling;
|
|
half _SyncWithSpecular;
|
|
float _StylingSpecularSize;
|
|
float _StylingSpecularSmoothness;
|
|
half _StylingSpecularCutOutShading;
|
|
half _StylingSpecularUseLightColors;
|
|
half _StylingSpecularSyncWithOtherStyling;
|
|
half _SpecularStyle;
|
|
half _StylingSpecularBlending;
|
|
half _StylingSpecularIsInverted;
|
|
half _SpecularDrawSpace;
|
|
half _SpecularUVSet;
|
|
half _SpecularSSCameraDistanceScaled;
|
|
half _SpecularAnchorSSToObjectsOrigin;
|
|
half _SpecularCoordinateSystem;
|
|
half _SpecularPolarCenterMode;
|
|
float4 _SpecularPolarCenter;
|
|
float _StylingSpecularDensity;
|
|
float _StylingSpecularRotation;
|
|
float _StylingSpecularHalftonesOffset;
|
|
float4 _StylingSpecularColor;
|
|
float _StylingSpecularOpacity;
|
|
float _StylingSpecularOpacityFalloff;
|
|
float _StylingSpecularThicknessControl;
|
|
float _StylingSpecularThickness;
|
|
float _StylingSpecularThicknessFalloff;
|
|
float _StylingSpecularHardness;
|
|
float _StylingSpecularHalftonesRoundness;
|
|
float _StylingSpecularHalftonesRoundnessFalloff;
|
|
half _StylingSpecularEnableDashes;
|
|
float _StylingSpecularDashesSize;
|
|
half _StylingSpecularDashesUseHatchingDensity;
|
|
float _StylingSpecularDashesDensity;
|
|
float _StylingSpecularDashesRoundness;
|
|
float _StylingSpecularDashesType;
|
|
float _StylingSpecularDashesOffset;
|
|
|
|
float _StylingSpecularDashesTransitionPosition;
|
|
float _StylingSpecularDashesTransitionSoftness;
|
|
float _EnableSpecularRandomizer;
|
|
float _SpecularNoise1Size;
|
|
float _SpecularNoise1Seed;
|
|
float _SpecularNoise2Seed;
|
|
float _SpecularNoiseIntensity;
|
|
half _SpecularSpacingRandomMode;
|
|
float _SpecularSpacingRandomIntensity;
|
|
half _SpecularOpacityRandomMode;
|
|
float _SpecularOpacityRandomIntensity;
|
|
half _SpecularLengthRandomMode;
|
|
float _SpecularLengthRandomIntensity;
|
|
half _SpecularHardnessRandomMode;
|
|
float _SpecularHardnessRandomIntensity;
|
|
half _SpecularThicknessRandomMode;
|
|
float _SpecularThicknesshRandomIntensity;
|
|
half _EnableRimStyling;
|
|
half _StylingRimSyncWithOtherStyling;
|
|
half _SyncWithRim;
|
|
float _StylingRimSize;
|
|
float _StylingRimSmoothness;
|
|
half _StylingRimAffectedArea;
|
|
half _RimStyle;
|
|
half _StylingRimBlending;
|
|
half _StylingRimIsInverted;
|
|
half _RimDrawSpace;
|
|
half _RimUVSet;
|
|
half _RimSSCameraDistanceScaled;
|
|
half _RimAnchorSSToObjectsOrigin;
|
|
half _RimCoordinateSystem;
|
|
half _RimPolarCenterMode;
|
|
float4 _RimPolarCenter;
|
|
float _StylingRimDensity;
|
|
float _StylingRimRotation;
|
|
float _StylingRimHalftonesOffset;
|
|
float4 _StylingRimColor;
|
|
float _StylingRimOpacity;
|
|
float _StylingRimOpacityFalloff;
|
|
float _StylingRimThicknessControl;
|
|
float _StylingRimThickness;
|
|
float _StylingRimThicknessFalloff;
|
|
float _StylingRimHardness;
|
|
float _StylingRimHalftonesRoundness;
|
|
float _StylingRimHalftonesRoundnessFalloff;
|
|
half _StylingRimEnableDashes;
|
|
float _StylingRimDashesSize;
|
|
half _StylingRimDashesUseHatchingDensity;
|
|
float _StylingRimDashesDensity;
|
|
float _StylingRimDashesRoundness;
|
|
float _StylingRimDashesType;
|
|
float _StylingRimDashesOffset;
|
|
|
|
float _StylingRimDashesTransitionPosition;
|
|
float _StylingRimDashesTransitionSoftness;
|
|
float _EnableRimRandomizer;
|
|
float _RimNoise1Size;
|
|
float _RimNoise1Seed;
|
|
float _RimNoise2Seed;
|
|
float _RimNoiseIntensity;
|
|
half _RimSpacingRandomMode;
|
|
float _RimSpacingRandomIntensity;
|
|
half _RimOpacityRandomMode;
|
|
float _RimOpacityRandomIntensity;
|
|
half _RimLengthRandomMode;
|
|
float _RimLengthRandomIntensity;
|
|
half _RimHardnessRandomMode;
|
|
float _RimHardnessRandomIntensity;
|
|
half _RimThicknessRandomMode;
|
|
float _RimThicknesshRandomIntensity;
|
|
half4 _OutlineColor;
|
|
half _OutlineWidth;
|
|
half _EnableOutline;
|
|
half _OutlineConstantScreenWidth;
|
|
half4 _BaseColor;
|
|
float _BumpScale;
|
|
float4 _BaseMap_ST;
|
|
half _Cutoff;
|
|
half4 _EmissionColor;
|
|
half4 _SpecColor;
|
|
float _Smoothness;
|
|
float4 _DetailAlbedoMap_ST;
|
|
half _Metallic;
|
|
half _Parallax;
|
|
half _OcclusionStrength;
|
|
half _DetailAlbedoMapScale;
|
|
half _DetailNormalMapScale;
|
|
#if UNITY_VERSION < 202200
|
|
float _AlphaToMaskAvailable;
|
|
#endif
|
|
CBUFFER_END
|
|
sampler2D _NoiseMap1;
|
|
sampler2D _NoiseMap2;
|
|
|
|
sampler2D _HatchingMap;
|
|
sampler2D _GradientTex;
|
|
void Ext_ModifyVertex0 (inout VertexData v, inout ExtraV2F d)
|
|
{
|
|
#if defined(CURVEDWORLD_IS_INSTALLED) && !defined(CURVEDWORLD_DISABLED_ON)
|
|
#ifdef CURVEDWORLD_NORMAL_TRANSFORMATION_ON
|
|
CURVEDWORLD_TRANSFORM_VERTEX_AND_NORMAL(v.vertex, v.normal, v.tangent)
|
|
#else
|
|
CURVEDWORLD_TRANSFORM_VERTEX(v.vertex)
|
|
#endif
|
|
#endif
|
|
float4x4 UnityObjectToClipPosMatrix = mul(GetWorldToHClipMatrix(), GetObjectToWorldMatrix());
|
|
float4 pos = mul(UnityObjectToClipPosMatrix, v.vertex);
|
|
float4 objectOriginClipPos = mul(UnityObjectToClipPosMatrix, float4(0, 0, 0, 1));
|
|
objectOriginClipPos.xy = clamp(objectOriginClipPos.xy, -1.0*objectOriginClipPos.w, 1.0*objectOriginClipPos.w);
|
|
float4 originScreenPos = ComputeScreenPos(objectOriginClipPos);
|
|
float2 originScreenUV = originScreenPos.xy/originScreenPos.w;
|
|
float4 screenPos = ComputeScreenPos(pos);
|
|
float2 uv = ((screenPos.xy) / screenPos.w);
|
|
float4 ssss = ComputeScreenPos(pos);
|
|
d.extraV2F0 = float4(originScreenUV,originScreenUV);
|
|
}
|
|
void Ext_SurfaceFunction0 (inout Surface o, ShaderData d)
|
|
{
|
|
float2 test = d.texcoord1.xy;
|
|
test = d.texcoord2.xy;
|
|
test = d.texcoord3.xy;
|
|
|
|
}
|
|
TEXTURE2D(_BaseMap); SAMPLER(sampler_BaseMap);
|
|
TEXTURE2D(_BumpMap); SAMPLER(sampler_BumpMap);
|
|
TEXTURE2D(_EmissionMap); SAMPLER(sampler_EmissionMap);
|
|
TEXTURE2D(_SpecGlossMap); SAMPLER(sampler_SpecGlossMap);
|
|
TEXTURE2D(_ParallaxMap); SAMPLER(sampler_ParallaxMap);
|
|
TEXTURE2D(_OcclusionMap); SAMPLER(sampler_OcclusionMap);
|
|
TEXTURE2D(_DetailMask); SAMPLER(sampler_DetailMask);
|
|
TEXTURE2D(_DetailAlbedoMap); SAMPLER(sampler_DetailAlbedoMap);
|
|
TEXTURE2D(_DetailNormalMap); SAMPLER(sampler_DetailNormalMap);
|
|
TEXTURE2D(_MetallicGlossMap); SAMPLER(sampler_MetallicGlossMap);
|
|
TEXTURE2D(_ClearCoatMap); SAMPLER(sampler_ClearCoatMap);
|
|
#if defined(_DETAIL_MULX2) || defined(_DETAIL_SCALED)
|
|
#define _DETAIL
|
|
#endif
|
|
|
|
#if _SPECULAR_SETUP
|
|
#define _USESPECULAR 1
|
|
#else
|
|
#undef _USESPECULAR
|
|
#endif
|
|
float SharpenAlphaMy(float alpha, float alphaClipTreshold)
|
|
{
|
|
return saturate((alpha - alphaClipTreshold) / max(fwidth(alpha), 0.0001) + 0.5);
|
|
}
|
|
#if UNITY_VERSION < 202200
|
|
half3 AlphaModulate(half3 albedo, half alpha)
|
|
{
|
|
#if defined(_ALPHAMODULATE_ON)
|
|
return lerp(half3(1.0, 1.0, 1.0), albedo, alpha);
|
|
#else
|
|
return albedo;
|
|
#endif
|
|
}
|
|
|
|
#if defined(_ALPHATEST_ON)
|
|
bool IsAlphaToMaskAvailable()
|
|
{
|
|
return (_AlphaToMaskAvailable != 0.0);
|
|
}
|
|
half AlphaClip(half alpha, half cutoff)
|
|
{
|
|
half clippedAlpha = (alpha >= cutoff) ? float(alpha) : 0.0;
|
|
|
|
half alphaToCoverageAlpha = SharpenAlphaMy(alpha, cutoff);
|
|
|
|
alpha = IsAlphaToMaskAvailable() ? alphaToCoverageAlpha : clippedAlpha;
|
|
clip(alpha - 0.0001);
|
|
|
|
return alpha;
|
|
}
|
|
#endif
|
|
#endif
|
|
#if UNITY_VERSION < 202220
|
|
int _DebugSceneOverrideMode;
|
|
#endif
|
|
|
|
bool IsAlphaDiscardEnabledMy()
|
|
{
|
|
#if defined(DEBUG_DISPLAY)
|
|
return (_DebugSceneOverrideMode == DEBUGSCENEOVERRIDEMODE_NONE);
|
|
#else
|
|
return true;
|
|
#endif
|
|
}
|
|
half AlphaMy(half albedoAlpha, half4 color, half cutoff)
|
|
{
|
|
#if !defined(_SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A) && !defined(_GLOSSINESS_FROM_BASE_ALPHA)
|
|
half alpha = albedoAlpha * color.a;
|
|
#else
|
|
half alpha = color.a;
|
|
#endif
|
|
#ifdef _ALPHATEST_ON
|
|
if (IsAlphaDiscardEnabledMy())
|
|
alpha = AlphaClip(alpha, cutoff);
|
|
#endif
|
|
|
|
return alpha;
|
|
}
|
|
half4 SampleAlbedoAlpha(float2 uv, TEXTURE2D_PARAM(albedoAlphaMap, sampler_albedoAlphaMap))
|
|
{
|
|
return half4(SAMPLE_TEXTURE2D(albedoAlphaMap, sampler_albedoAlphaMap, uv));
|
|
}
|
|
half3 SampleNormal(float2 uv, TEXTURE2D_PARAM(bumpMap, sampler_bumpMap), half scale = half(1.0))
|
|
{
|
|
#ifdef _NORMALMAP
|
|
half4 n = SAMPLE_TEXTURE2D(bumpMap, sampler_bumpMap, uv);
|
|
#if BUMP_SCALE_NOT_SUPPORTED
|
|
return UnpackNormal(n);
|
|
#else
|
|
return UnpackNormalScale(n, scale);
|
|
#endif
|
|
#else
|
|
return half3(0.0h, 0.0h, 1.0h);
|
|
#endif
|
|
}
|
|
#if UNITY_VERSION < 202100
|
|
half4 SampleSpecularSmoothnessMy(half2 uv, half alpha, half4 specColor, TEXTURE2D_PARAM( specMap, sampler_specMap))
|
|
{
|
|
half4 specularSmoothness = half4(0.0h, 0.0h, 0.0h, 1.0h);
|
|
#ifdef _SPECGLOSSMAP
|
|
specularSmoothness = SAMPLE_TEXTURE2D(specMap, sampler_specMap, uv) * specColor;
|
|
#elif defined(_SPECULAR_COLOR)
|
|
specularSmoothness = specColor;
|
|
#endif
|
|
|
|
#ifdef _GLOSSINESS_FROM_BASE_ALPHA
|
|
specularSmoothness.a = exp2(10 * alpha + 1);
|
|
#else
|
|
specularSmoothness.a = exp2(10 * specularSmoothness.a + 1);
|
|
#endif
|
|
return specularSmoothness;
|
|
}
|
|
#else
|
|
|
|
half4 SampleSpecularSmoothnessMy(float2 uv, half alpha, half4 specColor, TEXTURE2D_PARAM(specMap, sampler_specMap))
|
|
{
|
|
half4 specularSmoothness = half4(0, 0, 0, 1);
|
|
#ifdef _SPECGLOSSMAP
|
|
specularSmoothness = SAMPLE_TEXTURE2D(specMap, sampler_specMap, uv) * specColor;
|
|
#elif defined(_SPECULAR_COLOR)
|
|
specularSmoothness = specColor;
|
|
#endif
|
|
|
|
#ifdef _GLOSSINESS_FROM_BASE_ALPHA
|
|
specularSmoothness.a = alpha;
|
|
#endif
|
|
|
|
return specularSmoothness;
|
|
}
|
|
#endif
|
|
half3 SampleEmissionMy(float2 uv, half3 emissionColor, TEXTURE2D_PARAM(emissionMap, sampler_emissionMap))
|
|
{
|
|
#ifndef _EMISSION
|
|
return 0;
|
|
#else
|
|
return SAMPLE_TEXTURE2D(emissionMap, sampler_emissionMap, uv).rgb * emissionColor;
|
|
#endif
|
|
}
|
|
#ifndef BUILTIN_TARGET_API
|
|
half2 ParallaxOffset1Step(half height, half amplitude, half3 viewDirTS)
|
|
{
|
|
height = height * amplitude - amplitude / 2.0;
|
|
half3 v = normalize(viewDirTS);
|
|
v.z += 0.42;
|
|
return height * (v.xy / v.z);
|
|
}
|
|
#endif
|
|
|
|
float2 ParallaxMapping(TEXTURE2D_PARAM(heightMap, sampler_heightMap), half3 viewDirTS, half scale, float2 uv)
|
|
{
|
|
half h = SAMPLE_TEXTURE2D(heightMap, sampler_heightMap, uv).g;
|
|
float2 offset = ParallaxOffset1Step(h, scale, viewDirTS);
|
|
return offset;
|
|
}
|
|
#ifdef _SPECULAR_SETUP
|
|
#define SAMPLE_METALLICSPECULAR(uv) SAMPLE_TEXTURE2D(_SpecGlossMap, sampler_SpecGlossMap, uv)
|
|
#else
|
|
#define SAMPLE_METALLICSPECULAR(uv) SAMPLE_TEXTURE2D(_MetallicGlossMap, sampler_MetallicGlossMap, uv)
|
|
#endif
|
|
|
|
half4 SampleMetallicSpecGloss(float2 uv, half albedoAlpha)
|
|
{
|
|
half4 specGloss;
|
|
|
|
#ifdef _METALLICSPECGLOSSMAP
|
|
specGloss = half4(SAMPLE_METALLICSPECULAR(uv));
|
|
#ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
|
specGloss.a = albedoAlpha * _Smoothness;
|
|
#else
|
|
specGloss.a *= _Smoothness;
|
|
#endif
|
|
#else
|
|
#if _SPECULAR_SETUP
|
|
specGloss.rgb = _SpecColor.rgb;
|
|
#else
|
|
specGloss.rgb = _Metallic.rrr;
|
|
#endif
|
|
|
|
#ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
|
specGloss.a = albedoAlpha * _Smoothness;
|
|
#else
|
|
specGloss.a = _Smoothness;
|
|
#endif
|
|
#endif
|
|
|
|
return specGloss;
|
|
}
|
|
|
|
half SampleOcclusion(float2 uv)
|
|
{
|
|
#ifdef _OCCLUSIONMAP
|
|
half occ = SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
|
|
return LerpWhiteTo(occ, _OcclusionStrength);
|
|
#else
|
|
return half(1.0);
|
|
#endif
|
|
}
|
|
half SampleOcclusionMy(float2 uv)
|
|
{
|
|
#ifdef _OCCLUSIONMAP
|
|
#if defined(SHADER_API_GLES)
|
|
return SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
|
|
#else
|
|
half occ = SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
|
|
return LerpWhiteTo(occ, _OcclusionStrength);
|
|
#endif
|
|
#else
|
|
return 1.0;
|
|
#endif
|
|
}
|
|
half2 SampleClearCoat(float2 uv)
|
|
{
|
|
#if defined(_CLEARCOAT) || defined(_CLEARCOATMAP)
|
|
half2 clearCoatMaskSmoothness = half2(_ClearCoatMask, _ClearCoatSmoothness);
|
|
|
|
#if defined(_CLEARCOATMAP)
|
|
clearCoatMaskSmoothness *= SAMPLE_TEXTURE2D(_ClearCoatMap, sampler_ClearCoatMap, uv).rg;
|
|
#endif
|
|
|
|
return clearCoatMaskSmoothness;
|
|
#else
|
|
return half2(0.0, 1.0);
|
|
#endif
|
|
}
|
|
|
|
void ApplyPerPixelDisplacement(half3 viewDirTS, inout float2 uv)
|
|
{
|
|
#if defined(_PARALLAXMAP)
|
|
uv += ParallaxMapping(TEXTURE2D_ARGS(_ParallaxMap, sampler_ParallaxMap), viewDirTS, _Parallax, uv);
|
|
#endif
|
|
}
|
|
|
|
half3 ScaleDetailAlbedo(half3 detailAlbedo, half scale)
|
|
{
|
|
return half(2.0) * detailAlbedo * scale - scale + half(1.0);
|
|
}
|
|
|
|
half3 ApplyDetailAlbedo(float2 detailUv, half3 albedo, half detailMask)
|
|
{
|
|
#if defined(_DETAIL)
|
|
half3 detailAlbedo = SAMPLE_TEXTURE2D(_DetailAlbedoMap, sampler_DetailAlbedoMap, detailUv).rgb;
|
|
#if defined(_DETAIL_SCALED)
|
|
detailAlbedo = ScaleDetailAlbedo(detailAlbedo, _DetailAlbedoMapScale);
|
|
#else
|
|
detailAlbedo = half(2.0) * detailAlbedo;
|
|
#endif
|
|
|
|
return albedo * LerpWhiteTo(detailAlbedo, detailMask);
|
|
#else
|
|
return albedo;
|
|
#endif
|
|
}
|
|
|
|
half3 ApplyDetailNormal(float2 detailUv, half3 normalTS, half detailMask)
|
|
{
|
|
#if defined(_DETAIL)
|
|
#if BUMP_SCALE_NOT_SUPPORTED
|
|
half3 detailNormalTS = UnpackNormal(SAMPLE_TEXTURE2D(_DetailNormalMap, sampler_DetailNormalMap, detailUv));
|
|
#else
|
|
half3 detailNormalTS = UnpackNormalScale(SAMPLE_TEXTURE2D(_DetailNormalMap, sampler_DetailNormalMap, detailUv), _DetailNormalMapScale);
|
|
#endif
|
|
detailNormalTS = normalize(detailNormalTS);
|
|
|
|
return lerp(normalTS, BlendNormalRNM(normalTS, detailNormalTS), detailMask);
|
|
#else
|
|
return normalTS;
|
|
#endif
|
|
}
|
|
void Ext_SurfaceFunction1 (inout Surface o, ShaderData d)
|
|
{
|
|
|
|
float4 texcoords;
|
|
texcoords.xy = d.texcoord0.xy * _BaseMap_ST.xy + _BaseMap_ST.zw;
|
|
float2 uv = texcoords.xy;
|
|
|
|
#if _SHADING_BLINNPHONG || _SHADING_COLOR
|
|
half4 diffuseAlpha = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, texcoords.xy);
|
|
o.Albedo = diffuseAlpha.rgb * _BaseColor.rgb;
|
|
#if !_PASSFORWARD
|
|
if(_EnableToonShading == 0 || _ShadingAffectedByNormalMap == 1)
|
|
{
|
|
o.Normal = SampleNormal(texcoords.xy, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
}
|
|
#else
|
|
o.Normal = SampleNormal(texcoords.xy, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
#endif
|
|
o.Alpha = diffuseAlpha.a;
|
|
o.Alpha = o.Alpha * _BaseColor.a;
|
|
AlphaDiscard(o.Alpha, _Cutoff);
|
|
half3 emission = SampleEmissionMy(uv, _EmissionColor.rgb, TEXTURE2D_ARGS(_EmissionMap, sampler_EmissionMap));
|
|
o.Emission = emission;
|
|
#endif
|
|
|
|
if(_ShadingMode == 1 && _LightFunction == 0 )
|
|
{
|
|
#if _SHADING_BLINNPHONG
|
|
half4 specular = SampleSpecularSmoothnessMy(uv, o.Alpha, _SpecColor, TEXTURE2D_ARGS(_SpecGlossMap, sampler_SpecGlossMap));
|
|
half smoothness = specular.a;
|
|
|
|
o.Specular = specular;
|
|
o.Smoothness = smoothness;
|
|
#endif
|
|
|
|
}
|
|
else if (_ShadingMode == 1 && _LightFunction == 1)
|
|
{
|
|
#if _SHADING_PBR
|
|
#if defined(_PARALLAXMAP)
|
|
ApplyPerPixelDisplacement(d.tangentSpaceViewDir, uv);
|
|
#endif
|
|
half4 albedoAlpha = SampleAlbedoAlpha(uv, TEXTURE2D_ARGS(_BaseMap, sampler_BaseMap));
|
|
o.Alpha = AlphaMy(albedoAlpha.a, _BaseColor, _Cutoff);
|
|
|
|
half4 specGloss = SampleMetallicSpecGloss(uv, albedoAlpha.a);
|
|
o.Albedo = albedoAlpha.rgb * _BaseColor.rgb;
|
|
o.Albedo = AlphaModulate(o.Albedo, o.Alpha);
|
|
#if _SPECULAR_SETUP
|
|
o.Metallic = half(1.0);
|
|
o.Specular = specGloss.rgb;
|
|
#else
|
|
o.Metallic = specGloss.r;
|
|
o.Specular = half3(0.0, 0.0, 0.0);
|
|
#endif
|
|
o.Smoothness = specGloss.a;
|
|
#if !_PASSFORWARD
|
|
if(_EnableToonShading == 0 || _ShadingAffectedByNormalMap == 1)
|
|
{
|
|
o.Normal = SampleNormal(uv, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
}
|
|
#else
|
|
o.Normal = SampleNormal(uv, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
#endif
|
|
o.Occlusion = SampleOcclusion(uv);
|
|
o.Emission = SampleEmissionMy(uv, _EmissionColor.rgb, TEXTURE2D_ARGS(_EmissionMap, sampler_EmissionMap));
|
|
|
|
#if defined(_DETAIL)
|
|
half detailMask = SAMPLE_TEXTURE2D(_DetailMask, sampler_DetailMask, uv).a;
|
|
float2 detailUv = uv * _DetailAlbedoMap_ST.xy + _DetailAlbedoMap_ST.zw;
|
|
o.Albedo = ApplyDetailAlbedo(detailUv, o.Albedo, detailMask);
|
|
o.Normal = ApplyDetailNormal(detailUv, o.Normal, detailMask);
|
|
#endif
|
|
|
|
#endif
|
|
}
|
|
|
|
}
|
|
void ChainSurfaceFunction(inout Surface l, inout ShaderData d)
|
|
{
|
|
Ext_SurfaceFunction0(l, d);
|
|
Ext_SurfaceFunction1(l, d);
|
|
}
|
|
|
|
#if !_DECALSHADER
|
|
|
|
void ChainModifyVertex(inout VertexData v, inout VertexToPixel v2p, float4 time)
|
|
{
|
|
ExtraV2F d;
|
|
ZERO_INITIALIZE(ExtraV2F, d);
|
|
ZERO_INITIALIZE(Blackboard, d.blackboard);
|
|
d.time = time;
|
|
|
|
Ext_ModifyVertex0(v, d);
|
|
v2p.extraV2F0 = d.extraV2F0;
|
|
}
|
|
|
|
void ChainModifyTessellatedVertex(inout VertexData v, inout VertexToPixel v2p)
|
|
{
|
|
ExtraV2F d;
|
|
ZERO_INITIALIZE(ExtraV2F, d);
|
|
ZERO_INITIALIZE(Blackboard, d.blackboard);
|
|
d.extraV2F0 = v2p.extraV2F0;
|
|
v2p.extraV2F0 = d.extraV2F0;
|
|
}
|
|
|
|
void ChainFinalColorForward(inout Surface l, inout ShaderData d, inout half4 color)
|
|
{
|
|
}
|
|
|
|
void ChainFinalGBufferStandard(inout Surface s, inout ShaderData d, inout half4 GBuffer0, inout half4 GBuffer1, inout half4 GBuffer2, inout half4 outEmission, inout half4 outShadowMask)
|
|
{
|
|
}
|
|
#endif
|
|
#if _DECALSHADER
|
|
|
|
ShaderData CreateShaderData(SurfaceDescriptionInputs IN)
|
|
{
|
|
ShaderData d = (ShaderData)0;
|
|
d.TBNMatrix = float3x3(IN.WorldSpaceTangent, IN.WorldSpaceBiTangent, IN.WorldSpaceNormal);
|
|
d.worldSpaceNormal = IN.WorldSpaceNormal;
|
|
d.worldSpaceTangent = IN.WorldSpaceTangent;
|
|
|
|
d.worldSpacePosition = IN.WorldSpacePosition;
|
|
d.texcoord0 = IN.uv0.xyxy;
|
|
d.screenPos = IN.ScreenPosition;
|
|
|
|
d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - d.worldSpacePosition);
|
|
|
|
d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir);
|
|
#if _HDRP
|
|
#else
|
|
#endif
|
|
return d;
|
|
}
|
|
#else
|
|
|
|
ShaderData CreateShaderData(VertexToPixel i
|
|
#if NEED_FACING
|
|
, bool facing
|
|
#endif
|
|
)
|
|
{
|
|
ShaderData d = (ShaderData)0;
|
|
d.clipPos = i.pos;
|
|
d.worldSpacePosition = i.worldPos;
|
|
|
|
d.worldSpaceNormal = normalize(i.worldNormal);
|
|
d.worldSpaceTangent.xyz = normalize(i.worldTangent.xyz);
|
|
|
|
d.tangentSign = i.worldTangent.w * unity_WorldTransformParams.w;
|
|
float3 bitangent = cross(d.worldSpaceTangent.xyz, d.worldSpaceNormal) * d.tangentSign;
|
|
d.TBNMatrix = float3x3(d.worldSpaceTangent, -bitangent, d.worldSpaceNormal);
|
|
d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - i.worldPos);
|
|
|
|
d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir);
|
|
d.texcoord0 = i.texcoord0;
|
|
d.texcoord1 = i.texcoord1;
|
|
d.texcoord2 = i.texcoord2;
|
|
d.texcoord3 = i.texcoord3;
|
|
#if _HDRP
|
|
#else
|
|
#endif
|
|
d.extraV2F0 = i.extraV2F0;
|
|
return d;
|
|
}
|
|
|
|
#endif
|
|
#if defined(_PASSSHADOW)
|
|
float3 _LightDirection;
|
|
float3 _LightPosition;
|
|
#endif
|
|
|
|
#if (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)))
|
|
|
|
#define GetWorldToViewMatrix() _ViewMatrix
|
|
#define UNITY_MATRIX_I_V _InvViewMatrix
|
|
#define GetViewToHClipMatrix() OptimizeProjectionMatrix(_ProjMatrix)
|
|
#define UNITY_MATRIX_I_P _InvProjMatrix
|
|
#define GetWorldToHClipMatrix() _ViewProjMatrix
|
|
#define UNITY_MATRIX_I_VP _InvViewProjMatrix
|
|
#define UNITY_MATRIX_UNJITTERED_VP _NonJitteredViewProjMatrix
|
|
#define UNITY_MATRIX_PREV_VP _PrevViewProjMatrix
|
|
#define UNITY_MATRIX_PREV_I_VP _PrevInvViewProjMatrix
|
|
|
|
void MotionVectorPositionZBias(VertexToPixel input)
|
|
{
|
|
#if UNITY_REVERSED_Z
|
|
input.pos.z -= unity_MotionVectorsParams.z * input.pos.w;
|
|
#else
|
|
input.pos.z += unity_MotionVectorsParams.z * input.pos.w;
|
|
#endif
|
|
}
|
|
|
|
#endif
|
|
VertexToPixel Vert (VertexData v)
|
|
{
|
|
VertexToPixel o = (VertexToPixel)0;
|
|
|
|
UNITY_SETUP_INSTANCE_ID(v);
|
|
UNITY_TRANSFER_INSTANCE_ID(v, o);
|
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
|
|
#if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)))
|
|
VertexData previousMesh = v;
|
|
#endif
|
|
#if !_TESSELLATION_ON
|
|
ChainModifyVertex(v, o, _Time);
|
|
#endif
|
|
|
|
o.texcoord0 = v.texcoord0;
|
|
o.texcoord1 = v.texcoord1;
|
|
o.texcoord2 = v.texcoord2;
|
|
o.texcoord3 = v.texcoord3;
|
|
float3 positionWS = TransformObjectToWorld(v.vertex.xyz);
|
|
float3 normalWS = TransformObjectToWorldNormal(v.normal);
|
|
float4 tangentWS = float4(TransformObjectToWorldDir(v.tangent.xyz), v.tangent.w);
|
|
VertexPositionInputs vertexInput = GetVertexPositionInputs(v.vertex.xyz);
|
|
o.worldPos = positionWS;
|
|
o.worldNormal = normalWS;
|
|
o.worldTangent = tangentWS;
|
|
#if _PASSSHADOW
|
|
#if _CASTING_PUNCTUAL_LIGHT_SHADOW
|
|
float3 lightDirectionWS = normalize(_LightPosition - o.worldPos);
|
|
#else
|
|
float3 lightDirectionWS = _LightDirection;
|
|
#endif
|
|
o.pos = TransformWorldToHClip(ApplyShadowBias(o.worldPos, o.worldNormal, lightDirectionWS));
|
|
#if UNITY_REVERSED_Z
|
|
o.pos.z = min(o.pos.z, UNITY_NEAR_CLIP_VALUE);
|
|
#else
|
|
o.pos.z = max(o.pos.z, UNITY_NEAR_CLIP_VALUE);
|
|
#endif
|
|
#elif _PASSMETA
|
|
o.pos = MetaVertexPosition(float4(v.vertex.xyz, 0), v.texcoord1.xy, v.texcoord2.xy, unity_LightmapST, unity_DynamicLightmapST);
|
|
#else
|
|
o.pos = TransformWorldToHClip(o.worldPos);
|
|
#endif
|
|
#if _PASSFORWARD || _PASSGBUFFER
|
|
float2 uv1 = v.texcoord1.xy;
|
|
OUTPUT_LIGHTMAP_UV(uv1, unity_LightmapST, o.lightmapUV);
|
|
o.texcoord1.xy = uv1;
|
|
OUTPUT_SH(o.worldNormal, o.sh);
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
|
o.dynamicLightmapUV.xy = v.texcoord2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw;
|
|
#if UNITY_VERSION >= 60000009
|
|
OUTPUT_SH(o.worldNormal, o.sh);
|
|
#endif
|
|
#elif (defined(PROBE_VOLUMES_L1) || defined(PROBE_VOLUMES_L2)) && UNITY_VERSION >= 60000009
|
|
OUTPUT_SH4(vertexInput.positionWS, o.worldNormal.xyz, GetWorldSpaceNormalizeViewDir(vertexInput.positionWS), o.sh, o.probeOcclusion);
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef VARYINGS_NEED_FOG_AND_VERTEX_LIGHT
|
|
half fogFactor = 0;
|
|
#if defined(_FOG_FRAGMENT)
|
|
fogFactor = ComputeFogFactor(o.pos.z);
|
|
#endif
|
|
#if _BAKEDLIT
|
|
o.fogFactorAndVertexLight = half4(fogFactor, 0, 0, 0);
|
|
#else
|
|
half3 vertexLight = VertexLighting(o.worldPos, o.worldNormal);
|
|
o.fogFactorAndVertexLight = half4(fogFactor, vertexLight);
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
|
|
o.shadowCoord = GetShadowCoord(vertexInput);
|
|
#endif
|
|
|
|
#if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)))
|
|
#if !defined(TESSELLATION_ON)
|
|
MotionVectorPositionZBias(o);
|
|
#endif
|
|
|
|
o.previousPositionCS = float4(0.0, 0.0, 0.0, 1.0);
|
|
bool forceNoMotion = unity_MotionVectorsParams.y == 0.0;
|
|
|
|
if (!forceNoMotion)
|
|
{
|
|
#if defined(HAVE_VFX_MODIFICATION)
|
|
float3 previousPositionOS = currentFrameMvData.vfxParticlePositionOS;
|
|
#if defined(VFX_FEATURE_MOTION_VECTORS_VERTS)
|
|
const bool applyDeformation = false;
|
|
#else
|
|
const bool applyDeformation = true;
|
|
#endif
|
|
#else
|
|
const bool hasDeformation = unity_MotionVectorsParams.x == 1;
|
|
float3 previousPositionOS = hasDeformation ? previousMesh.previousPositionOS : previousMesh.vertex.xyz;
|
|
|
|
#if defined(AUTOMATIC_TIME_BASED_MOTION_VECTORS) && defined(GRAPH_VERTEX_USES_TIME_PARAMETERS_INPUT)
|
|
const bool applyDeformation = true;
|
|
#else
|
|
const bool applyDeformation = hasDeformation;
|
|
#endif
|
|
#endif
|
|
#if defined(FEATURES_GRAPH_VERTEX)
|
|
if (applyDeformation)
|
|
previousPositionOS = GetLastFrameDeformedPosition(previousMesh, currentFrameMvData, previousPositionOS);
|
|
else
|
|
previousPositionOS = previousMesh.positionOS;
|
|
|
|
#if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT)
|
|
previousPositionOS -= previousMesh.precomputedVelocity;
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(UNITY_DOTS_INSTANCING_ENABLED) && defined(DOTS_DEFORMED)
|
|
ApplyPreviousFrameDeformedVertexPosition(previousMesh.vertexID, previousPositionOS);
|
|
#endif
|
|
#if defined (_ADD_PRECOMPUTED_VELOCITY)
|
|
previousPositionOS -= previousMesh.precomputedVelocity;
|
|
#endif
|
|
o.positionCS = mul(UNITY_MATRIX_UNJITTERED_VP, float4(positionWS, 1.0f));
|
|
|
|
#if defined(HAVE_VFX_MODIFICATION)
|
|
#if defined(VFX_FEATURE_MOTION_VECTORS_VERTS)
|
|
#if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT) || defined(_ADD_PRECOMPUTED_VELOCITY)
|
|
#error Unexpected fast path rendering VFX motion vector while there are vertex modification afterwards.
|
|
#endif
|
|
o.previousPositionCS = VFXGetPreviousClipPosition(previousMesh, currentFrameMvData.vfxElementAttributes, o.positionCS);
|
|
#else
|
|
#if VFX_WORLD_SPACE
|
|
const float3 previousPositionWS = previousPositionOS;
|
|
#else
|
|
const float3 previousPositionWS = mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1.0f)).xyz;
|
|
#endif
|
|
o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, float4(previousPositionWS, 1.0f));
|
|
#endif
|
|
#else
|
|
o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1)));
|
|
#endif
|
|
}
|
|
#endif
|
|
|
|
return o;
|
|
}
|
|
void Frag (VertexToPixel IN
|
|
, out half4 outNormalWS : SV_Target0
|
|
#ifdef _WRITE_RENDERING_LAYERS
|
|
, out float4 outRenderingLayers : SV_Target1
|
|
#endif
|
|
#ifdef _DEPTHOFFSET_ON
|
|
, out float outputDepth : SV_Depth
|
|
#endif
|
|
#if NEED_FACING
|
|
, bool facing : SV_IsFrontFace
|
|
#endif
|
|
)
|
|
{
|
|
UNITY_SETUP_INSTANCE_ID(IN);
|
|
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(IN);
|
|
|
|
#if defined(LOD_FADE_CROSSFADE)
|
|
LODFadeCrossFade(IN.pos);
|
|
#endif
|
|
|
|
ShaderData d = CreateShaderData(IN
|
|
#if NEED_FACING
|
|
, facing
|
|
#endif
|
|
);
|
|
Surface l = (Surface)0;
|
|
|
|
#ifdef _DEPTHOFFSET_ON
|
|
l.outputDepth = outputDepth;
|
|
#endif
|
|
|
|
l.Albedo = half3(0.5, 0.5, 0.5);
|
|
l.Normal = float3(0,0,1);
|
|
l.Occlusion = 1;
|
|
l.Alpha = 1;
|
|
|
|
ChainSurfaceFunction(l, d);
|
|
|
|
#ifdef _DEPTHOFFSET_ON
|
|
outputDepth = l.outputDepth;
|
|
#endif
|
|
|
|
#if defined(_GBUFFER_NORMALS_OCT)
|
|
float3 normalWS = d.worldSpaceNormal;
|
|
float2 octNormalWS = PackNormalOctQuadEncode(normalWS);
|
|
float2 remappedOctNormalWS = saturate(octNormalWS * 0.5 + 0.5);
|
|
half3 packedNormalWS = PackFloat2To888(remappedOctNormalWS);
|
|
outNormalWS = half4(packedNormalWS, 0.0);
|
|
#else
|
|
float3 wsn = l.Normal;
|
|
#if !_WORLDSPACENORMAL
|
|
wsn = TangentToWorldSpace(d, l.Normal);
|
|
#endif
|
|
outNormalWS = half4(NormalizeNormalPerPixel(wsn), 0.0);
|
|
#endif
|
|
|
|
#ifdef _WRITE_RENDERING_LAYERS
|
|
uint renderingLayers = GetMeshRenderingLayer();
|
|
outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0);
|
|
#endif
|
|
}
|
|
|
|
ENDHLSL
|
|
|
|
}
|
|
Pass
|
|
{
|
|
Name "MotionVectors"
|
|
Tags
|
|
{
|
|
"LightMode" = "MotionVectors"
|
|
}
|
|
Cull Back
|
|
ZTest LEqual
|
|
ZWrite On
|
|
ColorMask RG
|
|
|
|
Cull [_Cull]
|
|
HLSLPROGRAM
|
|
|
|
#pragma vertex Vert
|
|
#pragma fragment Frag
|
|
|
|
#define _PASSMOTIONVECTOR 1
|
|
|
|
#if (defined(SHADER_API_GLES) || defined(SHADER_API_GLES3) || defined(SHADER_API_GLES30))
|
|
#pragma target 3.0
|
|
#else
|
|
#pragma target 4.5
|
|
#endif
|
|
#pragma multi_compile_instancing
|
|
#pragma multi_compile _ DOTS_INSTANCING_ON
|
|
|
|
#define SHADERPASS SHADERPASS_MOTION_VECTORS
|
|
#define RAYTRACING_SHADER_GRAPH_DEFAULT
|
|
#define VARYINGS_NEED_PASS
|
|
#define _PASSMOTIONVECTOR 1
|
|
#pragma shader_feature_local_fragment _SHADING_COLOR _SHADING_BLINNPHONG _SHADING_PBR
|
|
// Commented out Curved World defines
|
|
// #define CURVEDWORLD_BEND_TYPE_CLASSICRUNNER_X_POSITIVE
|
|
// #define CURVEDWORLD_BEND_ID_1
|
|
// #pragma shader_feature_local CURVEDWORLD_DISABLED_ON
|
|
// #pragma shader_feature_local CURVEDWORLD_NORMAL_TRANSFORMATION_ON
|
|
// #include "Assets/Amazing Assets/Curved World/Shaders/Core/CurvedWorldTransform.cginc"
|
|
#pragma shader_feature_local _NORMALMAP
|
|
#pragma shader_feature_local_fragment _EMISSION
|
|
|
|
#pragma shader_feature_local_fragment _ALPHATEST_ON
|
|
#pragma shader_feature_local _RECEIVE_SHADOWS_OFF
|
|
#pragma shader_feature_local_fragment _ _SPECGLOSSMAP _SPECULAR_COLOR
|
|
#pragma shader_feature_local_fragment _GLOSSINESS_FROM_BASE_ALPHA
|
|
|
|
#pragma shader_feature_local_fragment _OCCLUSIONMAP
|
|
#pragma shader_feature_local _PARALLAXMAP
|
|
#pragma shader_feature_local _ _DETAIL_MULX2 _DETAIL_SCALED
|
|
#pragma shader_feature_local_fragment _SURFACE_TYPE_TRANSPARENT
|
|
|
|
#pragma shader_feature_local_fragment _ _ALPHAPREMULTIPLY_ON _ALPHAMODULATE_ON
|
|
|
|
#pragma shader_feature_local_fragment _METALLICSPECGLOSSMAP
|
|
#pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
|
#pragma shader_feature_local_fragment _SPECULARHIGHLIGHTS_OFF
|
|
#pragma shader_feature_local_fragment _ENVIRONMENTREFLECTIONS_OFF
|
|
#pragma shader_feature_local_fragment _SPECULAR_SETUP
|
|
#define _URP 1
|
|
#define _USINGTEXCOORD1 1
|
|
#define _USINGTEXCOORD2 1
|
|
#include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl"
|
|
#include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl"
|
|
#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.universal/ShaderLibrary/Input.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl"
|
|
#include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl"
|
|
#include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRendering.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/DebugMipmapStreamingMacros.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl"
|
|
#include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl"
|
|
#undef WorldNormalVector
|
|
#define WorldNormalVector(data, normal) mul(normal, data.TBNMatrix)
|
|
#define UnityObjectToWorldNormal(normal) mul(GetObjectToWorldMatrix(), normal)
|
|
|
|
#define _WorldSpaceLightPos0 _MainLightPosition
|
|
#define UNITY_DECLARE_TEX2D(name) TEXTURE2D(name); SAMPLER(sampler##name);
|
|
#define UNITY_DECLARE_TEX2D_NOSAMPLER(name) TEXTURE2D(name);
|
|
#define UNITY_DECLARE_TEX2DARRAY(name) TEXTURE2D_ARRAY(name); SAMPLER(sampler##name);
|
|
#define UNITY_DECLARE_TEX2DARRAY_NOSAMPLER(name) TEXTURE2D_ARRAY(name);
|
|
|
|
#define UNITY_SAMPLE_TEX2DARRAY(tex,coord) SAMPLE_TEXTURE2D_ARRAY(tex, sampler##tex, coord.xy, coord.z)
|
|
#define UNITY_SAMPLE_TEX2DARRAY_LOD(tex,coord,lod) SAMPLE_TEXTURE2D_ARRAY_LOD(tex, sampler##tex, coord.xy, coord.z, lod)
|
|
#define UNITY_SAMPLE_TEX2D(tex, coord) SAMPLE_TEXTURE2D(tex, sampler##tex, coord)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER(tex, samp, coord) SAMPLE_TEXTURE2D(tex, sampler##samp, coord)
|
|
|
|
#define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) SAMPLE_TEXTURE2D_LOD(tex, sampler_##tex, coord, lod)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) SAMPLE_TEXTURE2D_LOD (tex, sampler##samplertex,coord, lod)
|
|
#if defined(UNITY_COMPILER_HLSL)
|
|
#define UNITY_INITIALIZE_OUTPUT(type,name) name = (type)0;
|
|
#else
|
|
#define UNITY_INITIALIZE_OUTPUT(type,name)
|
|
#endif
|
|
|
|
#define sampler2D_float sampler2D
|
|
#define sampler2D_half sampler2D
|
|
struct VertexToPixel
|
|
{
|
|
float4 pos : SV_POSITION;
|
|
float3 worldPos : TEXCOORD0;
|
|
float3 worldNormal : TEXCOORD1;
|
|
float4 worldTangent : TEXCOORD2;
|
|
float4 texcoord0 : TEXCOORD3;
|
|
float4 texcoord1 : TEXCOORD4;
|
|
float4 texcoord2 : TEXCOORD5;
|
|
float4 texcoord3 : TEXCOORD6;
|
|
#if defined(LIGHTMAP_ON)
|
|
float2 lightmapUV : TEXCOORD8;
|
|
#endif
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
|
float2 dynamicLightmapUV : TEXCOORD9;
|
|
#endif
|
|
#if !defined(LIGHTMAP_ON)
|
|
float4 probeOcclusion : TEXCOORD8;
|
|
float3 sh : TEXCOORD10;
|
|
#endif
|
|
|
|
#if defined(VARYINGS_NEED_FOG_AND_VERTEX_LIGHT)
|
|
float4 fogFactorAndVertexLight : TEXCOORD11;
|
|
#endif
|
|
|
|
#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
|
|
float4 shadowCoord : TEXCOORD12;
|
|
#endif
|
|
float4 extraV2F0 : TEXCOORD13;
|
|
#if UNITY_ANY_INSTANCING_ENABLED
|
|
uint instanceID : CUSTOM_INSTANCE_ID;
|
|
#endif
|
|
#if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE)))
|
|
uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0;
|
|
#endif
|
|
#if (defined(UNITY_STEREO_INSTANCING_ENABLED))
|
|
uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex;
|
|
#endif
|
|
#if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE)
|
|
FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC;
|
|
#endif
|
|
|
|
#if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))
|
|
float4 previousPositionCS : TEXCOORD21;
|
|
float4 positionCS : TEXCOORD22;
|
|
#endif
|
|
};
|
|
struct Surface
|
|
{
|
|
half3 Albedo;
|
|
half Height;
|
|
half3 Normal;
|
|
half Smoothness;
|
|
half3 Emission;
|
|
half Metallic;
|
|
half3 Specular;
|
|
half Occlusion;
|
|
half SpecularPower;
|
|
half Alpha;
|
|
float outputDepth;
|
|
half SpecularOcclusion;
|
|
half SubsurfaceMask;
|
|
half Thickness;
|
|
half CoatMask;
|
|
half CoatSmoothness;
|
|
half Anisotropy;
|
|
half IridescenceMask;
|
|
half IridescenceThickness;
|
|
int DiffusionProfileHash;
|
|
float SpecularAAThreshold;
|
|
float SpecularAAScreenSpaceVariance;
|
|
float3 DiffuseGI;
|
|
float3 BackDiffuseGI;
|
|
float3 SpecularGI;
|
|
float ior;
|
|
float3 transmittanceColor;
|
|
float atDistance;
|
|
float transmittanceMask;
|
|
float4 ShadowMask;
|
|
float NormalAlpha;
|
|
float MAOSAlpha;
|
|
};
|
|
struct Blackboard
|
|
{
|
|
float blackboardDummyData;
|
|
};
|
|
struct ShaderData
|
|
{
|
|
float4 clipPos;
|
|
float3 localSpacePosition;
|
|
float3 localSpaceNormal;
|
|
float3 localSpaceTangent;
|
|
float3 worldSpacePosition;
|
|
float3 worldSpaceNormal;
|
|
float3 worldSpaceTangent;
|
|
float tangentSign;
|
|
|
|
float3 worldSpaceViewDir;
|
|
float3 tangentSpaceViewDir;
|
|
|
|
float4 texcoord0;
|
|
float4 texcoord1;
|
|
float4 texcoord2;
|
|
float4 texcoord3;
|
|
|
|
float2 screenUV;
|
|
float4 screenPos;
|
|
|
|
float4 vertexColor;
|
|
bool isFrontFace;
|
|
|
|
float4 extraV2F0;
|
|
float4 extraV2F1;
|
|
float4 extraV2F2;
|
|
float4 extraV2F3;
|
|
float4 extraV2F4;
|
|
float4 extraV2F5;
|
|
float4 extraV2F6;
|
|
float4 extraV2F7;
|
|
|
|
float3x3 TBNMatrix;
|
|
Blackboard blackboard;
|
|
};
|
|
|
|
struct VertexData
|
|
{
|
|
#if SHADER_TARGET > 30
|
|
#endif
|
|
float4 vertex : POSITION;
|
|
float3 normal : NORMAL;
|
|
float4 tangent : TANGENT;
|
|
float4 texcoord0 : TEXCOORD0;
|
|
#if _URP && (_USINGTEXCOORD1 || _PASSMETA || _PASSFORWARD || _PASSGBUFFER)
|
|
float4 texcoord1 : TEXCOORD1;
|
|
#endif
|
|
|
|
#if _URP && (_USINGTEXCOORD2 || _PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && defined(DYNAMICLIGHTMAP_ON)))
|
|
float4 texcoord2 : TEXCOORD2;
|
|
#endif
|
|
|
|
#if _STANDARD && (_USINGTEXCOORD1 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER || _PASSFORWARDADD) && LIGHTMAP_ON)))
|
|
float4 texcoord1 : TEXCOORD1;
|
|
#endif
|
|
#if _STANDARD && (_USINGTEXCOORD2 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && DYNAMICLIGHTMAP_ON)))
|
|
float4 texcoord2 : TEXCOORD2;
|
|
#endif
|
|
#if _HDRP
|
|
float4 texcoord1 : TEXCOORD1;
|
|
float4 texcoord2 : TEXCOORD2;
|
|
#endif
|
|
float4 texcoord3 : TEXCOORD3;
|
|
#if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))
|
|
float3 previousPositionOS : TEXCOORD4;
|
|
#if defined (_ADD_PRECOMPUTED_VELOCITY)
|
|
float3 precomputedVelocity : TEXCOORD5;
|
|
#endif
|
|
#endif
|
|
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
};
|
|
|
|
struct TessVertex
|
|
{
|
|
float4 vertex : INTERNALTESSPOS;
|
|
float3 normal : NORMAL;
|
|
float4 tangent : TANGENT;
|
|
float4 texcoord0 : TEXCOORD0;
|
|
float4 texcoord1 : TEXCOORD1;
|
|
float4 texcoord2 : TEXCOORD2;
|
|
float4 texcoord3 : TEXCOORD3;
|
|
float4 extraV2F0 : TEXCOORD5;
|
|
#if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))
|
|
float3 previousPositionOS : TEXCOORD13;
|
|
#if defined (_ADD_PRECOMPUTED_VELOCITY)
|
|
float3 precomputedVelocity : TEXCOORD14;
|
|
#endif
|
|
#endif
|
|
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
UNITY_VERTEX_OUTPUT_STEREO
|
|
};
|
|
|
|
struct ExtraV2F
|
|
{
|
|
float4 extraV2F0;
|
|
float4 extraV2F1;
|
|
float4 extraV2F2;
|
|
float4 extraV2F3;
|
|
float4 extraV2F4;
|
|
float4 extraV2F5;
|
|
float4 extraV2F6;
|
|
float4 extraV2F7;
|
|
Blackboard blackboard;
|
|
float4 time;
|
|
};
|
|
float3 WorldToTangentSpace(ShaderData d, float3 normal)
|
|
{
|
|
return mul(d.TBNMatrix, normal);
|
|
}
|
|
|
|
float3 TangentToWorldSpace(ShaderData d, float3 normal)
|
|
{
|
|
return mul(normal, d.TBNMatrix);
|
|
}
|
|
#if _STANDARD
|
|
float3 TransformWorldToObject(float3 p) { return mul(unity_WorldToObject, float4(p, 1)); };
|
|
float3 TransformObjectToWorld(float3 p) { return mul(unity_ObjectToWorld, float4(p, 1)); };
|
|
float4 TransformWorldToObject(float4 p) { return mul(unity_WorldToObject, p); };
|
|
float4 TransformObjectToWorld(float4 p) { return mul(unity_ObjectToWorld, p); };
|
|
float4x4 GetWorldToObjectMatrix() { return unity_WorldToObject; }
|
|
float4x4 GetObjectToWorldMatrix() { return unity_ObjectToWorld; }
|
|
#if (defined(SHADER_API_D3D11) || defined(SHADER_API_XBOXONE) || defined(UNITY_COMPILER_HLSLCC) || defined(SHADER_API_PSSL) || (SHADER_TARGET_SURFACE_ANALYSIS && !SHADER_TARGET_SURFACE_ANALYSIS_MOJOSHADER))
|
|
#define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) tex.SampleLevel (sampler##tex,coord, lod)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) tex.SampleLevel (sampler##samplertex,coord, lod)
|
|
#else
|
|
#define UNITY_SAMPLE_TEX2D_LOD(tex,coord,lod) tex2D (tex,coord,0,lod)
|
|
#define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord,lod) tex2D (tex,coord,0,lod)
|
|
#endif
|
|
|
|
#undef GetWorldToObjectMatrix()
|
|
|
|
#define GetWorldToObjectMatrix() unity_WorldToObject
|
|
#endif
|
|
|
|
float3 GetCameraWorldPosition()
|
|
{
|
|
#if _HDRP
|
|
return GetCameraRelativePositionWS(_WorldSpaceCameraPos);
|
|
#else
|
|
return _WorldSpaceCameraPos;
|
|
#endif
|
|
}
|
|
|
|
#if _GRABPASSUSED
|
|
#if _STANDARD
|
|
TEXTURE2D(%GRABTEXTURE%);
|
|
SAMPLER(sampler_%GRABTEXTURE%);
|
|
#endif
|
|
|
|
half3 GetSceneColor(float2 uv)
|
|
{
|
|
#if _STANDARD
|
|
return SAMPLE_TEXTURE2D(%GRABTEXTURE%, sampler_%GRABTEXTURE%, uv).rgb;
|
|
#else
|
|
return SHADERGRAPH_SAMPLE_SCENE_COLOR(uv);
|
|
#endif
|
|
}
|
|
#endif
|
|
#if _STANDARD
|
|
UNITY_DECLARE_DEPTH_TEXTURE(_CameraDepthTexture);
|
|
float GetSceneDepth(float2 uv) { return SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv); }
|
|
float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv)); }
|
|
float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv)); }
|
|
#else
|
|
float GetSceneDepth(float2 uv) { return SHADERGRAPH_SAMPLE_SCENE_DEPTH(uv); }
|
|
float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv), _ZBufferParams); }
|
|
float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv), _ZBufferParams); }
|
|
#endif
|
|
|
|
float3 GetWorldPositionFromDepthBuffer(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
float eye = GetLinearEyeDepth(uv);
|
|
float3 camView = mul((float3x3)GetObjectToWorldMatrix(), transpose(mul(GetWorldToObjectMatrix(), UNITY_MATRIX_I_V)) [2].xyz);
|
|
|
|
float dt = dot(worldSpaceViewDir, camView);
|
|
float3 div = worldSpaceViewDir/dt;
|
|
float3 wpos = (eye * div) + GetCameraWorldPosition();
|
|
return wpos;
|
|
}
|
|
|
|
#if _HDRP
|
|
float3 ObjectToWorldSpacePosition(float3 pos)
|
|
{
|
|
return GetAbsolutePositionWS(TransformObjectToWorld(pos));
|
|
}
|
|
#else
|
|
float3 ObjectToWorldSpacePosition(float3 pos)
|
|
{
|
|
return TransformObjectToWorld(pos);
|
|
}
|
|
#endif
|
|
|
|
#if _STANDARD
|
|
UNITY_DECLARE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture);
|
|
float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
float4 depthNorms = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture, uv);
|
|
float3 norms = DecodeViewNormalStereo(depthNorms);
|
|
norms = mul((float3x3)GetWorldToViewMatrix(), norms) * 0.5 + 0.5;
|
|
return norms;
|
|
}
|
|
#elif _HDRP && !_DECALSHADER
|
|
float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
NormalData nd;
|
|
DecodeFromNormalBuffer(_ScreenSize.xy * uv, nd);
|
|
return nd.normalWS;
|
|
}
|
|
#elif _URP
|
|
#if (SHADER_LIBRARY_VERSION_MAJOR >= 10)
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl"
|
|
#endif
|
|
|
|
float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir)
|
|
{
|
|
#if (SHADER_LIBRARY_VERSION_MAJOR >= 10)
|
|
return SampleSceneNormals(uv);
|
|
#else
|
|
float3 wpos = GetWorldPositionFromDepthBuffer(uv, worldSpaceViewDir);
|
|
return normalize(-cross(ddx(wpos), ddy(wpos))) * 0.5 + 0.5;
|
|
#endif
|
|
|
|
}
|
|
#endif
|
|
|
|
#if _HDRP
|
|
|
|
half3 UnpackNormalmapRGorAG(half4 packednormal)
|
|
{
|
|
packednormal.x *= packednormal.w;
|
|
|
|
half3 normal;
|
|
normal.xy = packednormal.xy * 2 - 1;
|
|
normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy)));
|
|
return normal;
|
|
}
|
|
half3 UnpackNormal(half4 packednormal)
|
|
{
|
|
#if defined(UNITY_NO_DXT5nm)
|
|
return packednormal.xyz * 2 - 1;
|
|
#else
|
|
return UnpackNormalmapRGorAG(packednormal);
|
|
#endif
|
|
}
|
|
#endif
|
|
#if _HDRP || _URP
|
|
|
|
half3 UnpackScaleNormal(half4 packednormal, half scale)
|
|
{
|
|
#ifndef UNITY_NO_DXT5nm
|
|
packednormal.x *= packednormal.w;
|
|
#endif
|
|
half3 normal;
|
|
normal.xy = (packednormal.xy * 2 - 1) * scale;
|
|
normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy)));
|
|
return normal;
|
|
}
|
|
|
|
#endif
|
|
void GetSun(out float3 lightDir, out float3 color)
|
|
{
|
|
lightDir = float3(0.5, 0.5, 0);
|
|
color = 1;
|
|
#if _HDRP
|
|
if (_DirectionalLightCount > 0)
|
|
{
|
|
DirectionalLightData light = _DirectionalLightDatas[0];
|
|
lightDir = -light.forward.xyz;
|
|
color = light.color;
|
|
}
|
|
#elif _STANDARD
|
|
lightDir = normalize(_WorldSpaceLightPos0.xyz);
|
|
color = _LightColor0.rgb;
|
|
#elif _URP
|
|
Light light = GetMainLight();
|
|
lightDir = light.direction;
|
|
color = light.color;
|
|
#endif
|
|
}
|
|
CBUFFER_START(UnityPerMaterial)
|
|
half _LightSource;
|
|
|
|
half _ShadingMode;
|
|
half _LightFunction;
|
|
half _UseAlphaOnlyFromBaseMap;
|
|
half _EnableToonShading;
|
|
half _ShadingFunction;
|
|
int _NumberOfCells;
|
|
float _CellTransitionSmoothness;
|
|
half _RoundingMethod;
|
|
half _SumLightsBeforePosterization;
|
|
half _ShadingUseLightColors;
|
|
half _GradientMode;
|
|
half _GradientBlending;
|
|
float _GradientBlendFactor;
|
|
|
|
float4 _GradientTex_TexelSize;
|
|
half _ShadingAffectedByNormalMap;
|
|
half _EnableShadows;
|
|
float4 _CoreShadowColor;
|
|
float _TerminatorPosition;
|
|
float _TerminatorWidth;
|
|
float _TerminatorSmoothness;
|
|
float4 _FormShadowColor;
|
|
|
|
half _EnableCastShadows;
|
|
float _CastShadowsStrength;
|
|
float _CastShadowsSmoothness;
|
|
half _CastShadowColorMode;
|
|
float4 _CastShadowColor;
|
|
half _EnableSpecular;
|
|
half _SpecularBlending;
|
|
half4 _SpecularColor;
|
|
float _SpecularSize;
|
|
float _SpecularSmoothness;
|
|
float _SpecularOpacity;
|
|
half _SpecularAffectedByNormalMap;
|
|
half _SpecularUseLightColors;
|
|
half _EnableRim;
|
|
half _RimBlending;
|
|
float4 _RimColor;
|
|
float _RimSize;
|
|
float _RimSmoothness;
|
|
float _RimOpacity;
|
|
half _RimAffectedArea;
|
|
half _RimAffectedByNormalMap;
|
|
half _EnableStyling;
|
|
|
|
half _EnableStylingDistanceFade;
|
|
float _StylingDFStartingDistance;
|
|
float _StylingDFFalloff;
|
|
half _StylingAdjustDistanceFadeValue;
|
|
float _StylingDistanceFadeValue;
|
|
half _HatchingAffectedByNormalMap;
|
|
half _EnableAntiAliasing;
|
|
float4 _NoiseTex2_TexelSize;
|
|
half _EnableShadingStyling;
|
|
half _StylingShadingSyncWithOtherStyling;
|
|
half _ShadingStyle;
|
|
half _SyncWithLightPartitioning;
|
|
half _NumberOfCellsHatching;
|
|
half _StylingTerminatorPosition;
|
|
float _StylingOvermodelingFactor;
|
|
half _StylingShadingBlending;
|
|
half _StylingShadingIsInverted;
|
|
half _DrawSpace;
|
|
|
|
half _UVSet;
|
|
|
|
half _SSCameraDistanceScaled;
|
|
half _AnchorSSToObjectsOrigin;
|
|
half _CoordinateSystem;
|
|
half _PolarCenterMode;
|
|
float4 _PolarCenter;
|
|
float _StylingShadingDensity;
|
|
float _StylingShadingInitialDirection;
|
|
float _StylingShadingRotationBetweenCells;
|
|
float _StylingShadingHalftonesOffset;
|
|
float4 _StylingColor;
|
|
float _StylingShadingOpacity;
|
|
float _StylingShadingOpacityFalloff;
|
|
float _StylingShadingThicknessControl;
|
|
float _StylingShadingThickness;
|
|
float _StylingShadingThicknessFalloff;
|
|
float _StylingShadingHardness;
|
|
float _StylingShadingHalftonesRoundness;
|
|
float _StylingShadingHalftonesRoundnessFalloff;
|
|
half _StylingShadingEnableDashes;
|
|
float _StylingShadingDashesSize;
|
|
half _StylingShadingDashesUseHatchingDensity;
|
|
float _StylingShadingDashesDensity;
|
|
float _StylingShadingDashesType;
|
|
float _StylingShadingDashesRoundness;
|
|
float _StylingShadingDashesOffset;
|
|
|
|
float _StylingShadingDashesTransitionPosition;
|
|
float _StylingShadingDashesTransitionSoftness;
|
|
half _EnableShadingRandomizer;
|
|
float _ShadingNoise1Size;
|
|
float _ShadingNoise1Seed;
|
|
float _ShadingNoise2Seed;
|
|
float _NoiseIntensity;
|
|
half _SpacingRandomMode;
|
|
float _SpacingRandomIntensity;
|
|
half _OpacityRandomMode;
|
|
float _OpacityRandomIntensity;
|
|
half _LengthRandomMode;
|
|
float _LengthRandomIntensity;
|
|
half _HardnessRandomMode;
|
|
float _HardnessRandomIntensity;
|
|
half _ThicknessRandomMode;
|
|
float _ThicknesshRandomIntensity;
|
|
half _EnableCastShadowsStyling;
|
|
half _CastShadowsNumberOfCellsHatching;
|
|
float _StylingCastShadowsSmoothness;
|
|
half _StylingCastShadowsSyncWithOtherStyling;
|
|
half _CastShadowsStyle;
|
|
half _StylingCastShadowsBlending;
|
|
half _StylingCastShadowsIsInverted;
|
|
half _CastShadowsDrawSpace;
|
|
half _CastShadowsUVSet;
|
|
half _CastShadowsSSCameraDistanceScaled;
|
|
half _CastShadowsAnchorSSToObjectsOrigin;
|
|
half _CastShadowsCoordinateSystem;
|
|
half _CastShadowsPolarCenterMode;
|
|
float4 _CastShadowsPolarCenter;
|
|
float _StylingCastShadowsDensity;
|
|
float _StylingCastShadowsInitialDirection;
|
|
float _StylingCastShadowsRotationBetweenCells;
|
|
float _StylingCastShadowsHalftonesOffset;
|
|
float4 _StylingCastShadowsColor;
|
|
float _StylingCastShadowsOpacity;
|
|
float _StylingCastShadowsOpacityFalloff;
|
|
half _StylingCastShadowsThicknessControl;
|
|
float _StylingCastShadowsThickness;
|
|
float _StylingCastShadowsThicknessFalloff;
|
|
float _StylingCastShadowsHardness;
|
|
float _StylingCastShadowsHalftonesRoundness;
|
|
float _StylingCastShadowsHalftonesRoundnessFalloff;
|
|
half _StylingCastShadowsEnableDashes;
|
|
float _StylingCastShadowsDashesSize;
|
|
half _StylingCastShadowsDashesUseHatchingDensity;
|
|
float _StylingCastShadowsDashesDensity;
|
|
float _StylingCastShadowsDashesRoundness;
|
|
float _StylingCastShadowsDashesType;
|
|
float _StylingCastShadowsDashesOffset;
|
|
|
|
float _StylingCastShadowsDashesTransitionPosition;
|
|
float _StylingCastShadowsDashesTransitionSoftness;
|
|
half _EnableCastShadowsRandomizer;
|
|
float _CastShadowsNoise1Size;
|
|
float _CastShadowsNoise1Seed;
|
|
float _CastShadowsNoise2Seed;
|
|
float _CastShadowsNoiseIntensity;
|
|
half _CastShadowsSpacingRandomMode;
|
|
float _CastShadowsSpacingRandomIntensity;
|
|
half _CastShadowsOpacityRandomMode;
|
|
float _CastShadowsOpacityRandomIntensity;
|
|
half _CastShadowsHardnessRandomMode;
|
|
float _CastShadowsHardnessRandomIntensity;
|
|
half _CastShadowsLengthRandomMode;
|
|
float _CastShadowsLengthRandomIntensity;
|
|
half _CastShadowsThicknessRandomMode;
|
|
float _CastShadowsThicknesshRandomIntensity;
|
|
half _EnableSpecularStyling;
|
|
half _SyncWithSpecular;
|
|
float _StylingSpecularSize;
|
|
float _StylingSpecularSmoothness;
|
|
half _StylingSpecularCutOutShading;
|
|
half _StylingSpecularUseLightColors;
|
|
half _StylingSpecularSyncWithOtherStyling;
|
|
half _SpecularStyle;
|
|
half _StylingSpecularBlending;
|
|
half _StylingSpecularIsInverted;
|
|
half _SpecularDrawSpace;
|
|
half _SpecularUVSet;
|
|
half _SpecularSSCameraDistanceScaled;
|
|
half _SpecularAnchorSSToObjectsOrigin;
|
|
half _SpecularCoordinateSystem;
|
|
half _SpecularPolarCenterMode;
|
|
float4 _SpecularPolarCenter;
|
|
float _StylingSpecularDensity;
|
|
float _StylingSpecularRotation;
|
|
float _StylingSpecularHalftonesOffset;
|
|
float4 _StylingSpecularColor;
|
|
float _StylingSpecularOpacity;
|
|
float _StylingSpecularOpacityFalloff;
|
|
float _StylingSpecularThicknessControl;
|
|
float _StylingSpecularThickness;
|
|
float _StylingSpecularThicknessFalloff;
|
|
float _StylingSpecularHardness;
|
|
float _StylingSpecularHalftonesRoundness;
|
|
float _StylingSpecularHalftonesRoundnessFalloff;
|
|
half _StylingSpecularEnableDashes;
|
|
float _StylingSpecularDashesSize;
|
|
half _StylingSpecularDashesUseHatchingDensity;
|
|
float _StylingSpecularDashesDensity;
|
|
float _StylingSpecularDashesRoundness;
|
|
float _StylingSpecularDashesType;
|
|
float _StylingSpecularDashesOffset;
|
|
|
|
float _StylingSpecularDashesTransitionPosition;
|
|
float _StylingSpecularDashesTransitionSoftness;
|
|
float _EnableSpecularRandomizer;
|
|
float _SpecularNoise1Size;
|
|
float _SpecularNoise1Seed;
|
|
float _SpecularNoise2Seed;
|
|
float _SpecularNoiseIntensity;
|
|
half _SpecularSpacingRandomMode;
|
|
float _SpecularSpacingRandomIntensity;
|
|
half _SpecularOpacityRandomMode;
|
|
float _SpecularOpacityRandomIntensity;
|
|
half _SpecularLengthRandomMode;
|
|
float _SpecularLengthRandomIntensity;
|
|
half _SpecularHardnessRandomMode;
|
|
float _SpecularHardnessRandomIntensity;
|
|
half _SpecularThicknessRandomMode;
|
|
float _SpecularThicknesshRandomIntensity;
|
|
half _EnableRimStyling;
|
|
half _StylingRimSyncWithOtherStyling;
|
|
half _SyncWithRim;
|
|
float _StylingRimSize;
|
|
float _StylingRimSmoothness;
|
|
half _StylingRimAffectedArea;
|
|
half _RimStyle;
|
|
half _StylingRimBlending;
|
|
half _StylingRimIsInverted;
|
|
half _RimDrawSpace;
|
|
half _RimUVSet;
|
|
half _RimSSCameraDistanceScaled;
|
|
half _RimAnchorSSToObjectsOrigin;
|
|
half _RimCoordinateSystem;
|
|
half _RimPolarCenterMode;
|
|
float4 _RimPolarCenter;
|
|
float _StylingRimDensity;
|
|
float _StylingRimRotation;
|
|
float _StylingRimHalftonesOffset;
|
|
float4 _StylingRimColor;
|
|
float _StylingRimOpacity;
|
|
float _StylingRimOpacityFalloff;
|
|
float _StylingRimThicknessControl;
|
|
float _StylingRimThickness;
|
|
float _StylingRimThicknessFalloff;
|
|
float _StylingRimHardness;
|
|
float _StylingRimHalftonesRoundness;
|
|
float _StylingRimHalftonesRoundnessFalloff;
|
|
half _StylingRimEnableDashes;
|
|
float _StylingRimDashesSize;
|
|
half _StylingRimDashesUseHatchingDensity;
|
|
float _StylingRimDashesDensity;
|
|
float _StylingRimDashesRoundness;
|
|
float _StylingRimDashesType;
|
|
float _StylingRimDashesOffset;
|
|
|
|
float _StylingRimDashesTransitionPosition;
|
|
float _StylingRimDashesTransitionSoftness;
|
|
float _EnableRimRandomizer;
|
|
float _RimNoise1Size;
|
|
float _RimNoise1Seed;
|
|
float _RimNoise2Seed;
|
|
float _RimNoiseIntensity;
|
|
half _RimSpacingRandomMode;
|
|
float _RimSpacingRandomIntensity;
|
|
half _RimOpacityRandomMode;
|
|
float _RimOpacityRandomIntensity;
|
|
half _RimLengthRandomMode;
|
|
float _RimLengthRandomIntensity;
|
|
half _RimHardnessRandomMode;
|
|
float _RimHardnessRandomIntensity;
|
|
half _RimThicknessRandomMode;
|
|
float _RimThicknesshRandomIntensity;
|
|
half4 _OutlineColor;
|
|
half _OutlineWidth;
|
|
half _EnableOutline;
|
|
half _OutlineConstantScreenWidth;
|
|
half4 _BaseColor;
|
|
float _BumpScale;
|
|
float4 _BaseMap_ST;
|
|
half _Cutoff;
|
|
half4 _EmissionColor;
|
|
half4 _SpecColor;
|
|
float _Smoothness;
|
|
float4 _DetailAlbedoMap_ST;
|
|
half _Metallic;
|
|
half _Parallax;
|
|
half _OcclusionStrength;
|
|
half _DetailAlbedoMapScale;
|
|
half _DetailNormalMapScale;
|
|
#if UNITY_VERSION < 202200
|
|
float _AlphaToMaskAvailable;
|
|
#endif
|
|
CBUFFER_END
|
|
sampler2D _NoiseMap1;
|
|
sampler2D _NoiseMap2;
|
|
|
|
sampler2D _HatchingMap;
|
|
sampler2D _GradientTex;
|
|
void Ext_ModifyVertex0 (inout VertexData v, inout ExtraV2F d)
|
|
{
|
|
#if defined(CURVEDWORLD_IS_INSTALLED) && !defined(CURVEDWORLD_DISABLED_ON)
|
|
#ifdef CURVEDWORLD_NORMAL_TRANSFORMATION_ON
|
|
CURVEDWORLD_TRANSFORM_VERTEX_AND_NORMAL(v.vertex, v.normal, v.tangent)
|
|
#else
|
|
CURVEDWORLD_TRANSFORM_VERTEX(v.vertex)
|
|
#endif
|
|
#endif
|
|
float4x4 UnityObjectToClipPosMatrix = mul(GetWorldToHClipMatrix(), GetObjectToWorldMatrix());
|
|
float4 pos = mul(UnityObjectToClipPosMatrix, v.vertex);
|
|
float4 objectOriginClipPos = mul(UnityObjectToClipPosMatrix, float4(0, 0, 0, 1));
|
|
objectOriginClipPos.xy = clamp(objectOriginClipPos.xy, -1.0*objectOriginClipPos.w, 1.0*objectOriginClipPos.w);
|
|
float4 originScreenPos = ComputeScreenPos(objectOriginClipPos);
|
|
float2 originScreenUV = originScreenPos.xy/originScreenPos.w;
|
|
float4 screenPos = ComputeScreenPos(pos);
|
|
float2 uv = ((screenPos.xy) / screenPos.w);
|
|
float4 ssss = ComputeScreenPos(pos);
|
|
d.extraV2F0 = float4(originScreenUV,originScreenUV);
|
|
}
|
|
void Ext_SurfaceFunction0 (inout Surface o, ShaderData d)
|
|
{
|
|
float2 test = d.texcoord1.xy;
|
|
test = d.texcoord2.xy;
|
|
test = d.texcoord3.xy;
|
|
|
|
}
|
|
TEXTURE2D(_BaseMap); SAMPLER(sampler_BaseMap);
|
|
TEXTURE2D(_BumpMap); SAMPLER(sampler_BumpMap);
|
|
TEXTURE2D(_EmissionMap); SAMPLER(sampler_EmissionMap);
|
|
TEXTURE2D(_SpecGlossMap); SAMPLER(sampler_SpecGlossMap);
|
|
TEXTURE2D(_ParallaxMap); SAMPLER(sampler_ParallaxMap);
|
|
TEXTURE2D(_OcclusionMap); SAMPLER(sampler_OcclusionMap);
|
|
TEXTURE2D(_DetailMask); SAMPLER(sampler_DetailMask);
|
|
TEXTURE2D(_DetailAlbedoMap); SAMPLER(sampler_DetailAlbedoMap);
|
|
TEXTURE2D(_DetailNormalMap); SAMPLER(sampler_DetailNormalMap);
|
|
TEXTURE2D(_MetallicGlossMap); SAMPLER(sampler_MetallicGlossMap);
|
|
TEXTURE2D(_ClearCoatMap); SAMPLER(sampler_ClearCoatMap);
|
|
#if defined(_DETAIL_MULX2) || defined(_DETAIL_SCALED)
|
|
#define _DETAIL
|
|
#endif
|
|
|
|
#if _SPECULAR_SETUP
|
|
#define _USESPECULAR 1
|
|
#else
|
|
#undef _USESPECULAR
|
|
#endif
|
|
float SharpenAlphaMy(float alpha, float alphaClipTreshold)
|
|
{
|
|
return saturate((alpha - alphaClipTreshold) / max(fwidth(alpha), 0.0001) + 0.5);
|
|
}
|
|
#if UNITY_VERSION < 202200
|
|
half3 AlphaModulate(half3 albedo, half alpha)
|
|
{
|
|
#if defined(_ALPHAMODULATE_ON)
|
|
return lerp(half3(1.0, 1.0, 1.0), albedo, alpha);
|
|
#else
|
|
return albedo;
|
|
#endif
|
|
}
|
|
|
|
#if defined(_ALPHATEST_ON)
|
|
bool IsAlphaToMaskAvailable()
|
|
{
|
|
return (_AlphaToMaskAvailable != 0.0);
|
|
}
|
|
half AlphaClip(half alpha, half cutoff)
|
|
{
|
|
half clippedAlpha = (alpha >= cutoff) ? float(alpha) : 0.0;
|
|
|
|
half alphaToCoverageAlpha = SharpenAlphaMy(alpha, cutoff);
|
|
|
|
alpha = IsAlphaToMaskAvailable() ? alphaToCoverageAlpha : clippedAlpha;
|
|
clip(alpha - 0.0001);
|
|
|
|
return alpha;
|
|
}
|
|
#endif
|
|
#endif
|
|
#if UNITY_VERSION < 202220
|
|
int _DebugSceneOverrideMode;
|
|
#endif
|
|
|
|
bool IsAlphaDiscardEnabledMy()
|
|
{
|
|
#if defined(DEBUG_DISPLAY)
|
|
return (_DebugSceneOverrideMode == DEBUGSCENEOVERRIDEMODE_NONE);
|
|
#else
|
|
return true;
|
|
#endif
|
|
}
|
|
half AlphaMy(half albedoAlpha, half4 color, half cutoff)
|
|
{
|
|
#if !defined(_SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A) && !defined(_GLOSSINESS_FROM_BASE_ALPHA)
|
|
half alpha = albedoAlpha * color.a;
|
|
#else
|
|
half alpha = color.a;
|
|
#endif
|
|
#ifdef _ALPHATEST_ON
|
|
if (IsAlphaDiscardEnabledMy())
|
|
alpha = AlphaClip(alpha, cutoff);
|
|
#endif
|
|
|
|
return alpha;
|
|
}
|
|
half4 SampleAlbedoAlpha(float2 uv, TEXTURE2D_PARAM(albedoAlphaMap, sampler_albedoAlphaMap))
|
|
{
|
|
return half4(SAMPLE_TEXTURE2D(albedoAlphaMap, sampler_albedoAlphaMap, uv));
|
|
}
|
|
half3 SampleNormal(float2 uv, TEXTURE2D_PARAM(bumpMap, sampler_bumpMap), half scale = half(1.0))
|
|
{
|
|
#ifdef _NORMALMAP
|
|
half4 n = SAMPLE_TEXTURE2D(bumpMap, sampler_bumpMap, uv);
|
|
#if BUMP_SCALE_NOT_SUPPORTED
|
|
return UnpackNormal(n);
|
|
#else
|
|
return UnpackNormalScale(n, scale);
|
|
#endif
|
|
#else
|
|
return half3(0.0h, 0.0h, 1.0h);
|
|
#endif
|
|
}
|
|
#if UNITY_VERSION < 202100
|
|
half4 SampleSpecularSmoothnessMy(half2 uv, half alpha, half4 specColor, TEXTURE2D_PARAM( specMap, sampler_specMap))
|
|
{
|
|
half4 specularSmoothness = half4(0.0h, 0.0h, 0.0h, 1.0h);
|
|
#ifdef _SPECGLOSSMAP
|
|
specularSmoothness = SAMPLE_TEXTURE2D(specMap, sampler_specMap, uv) * specColor;
|
|
#elif defined(_SPECULAR_COLOR)
|
|
specularSmoothness = specColor;
|
|
#endif
|
|
|
|
#ifdef _GLOSSINESS_FROM_BASE_ALPHA
|
|
specularSmoothness.a = exp2(10 * alpha + 1);
|
|
#else
|
|
specularSmoothness.a = exp2(10 * specularSmoothness.a + 1);
|
|
#endif
|
|
return specularSmoothness;
|
|
}
|
|
#else
|
|
|
|
half4 SampleSpecularSmoothnessMy(float2 uv, half alpha, half4 specColor, TEXTURE2D_PARAM(specMap, sampler_specMap))
|
|
{
|
|
half4 specularSmoothness = half4(0, 0, 0, 1);
|
|
#ifdef _SPECGLOSSMAP
|
|
specularSmoothness = SAMPLE_TEXTURE2D(specMap, sampler_specMap, uv) * specColor;
|
|
#elif defined(_SPECULAR_COLOR)
|
|
specularSmoothness = specColor;
|
|
#endif
|
|
|
|
#ifdef _GLOSSINESS_FROM_BASE_ALPHA
|
|
specularSmoothness.a = alpha;
|
|
#endif
|
|
|
|
return specularSmoothness;
|
|
}
|
|
#endif
|
|
half3 SampleEmissionMy(float2 uv, half3 emissionColor, TEXTURE2D_PARAM(emissionMap, sampler_emissionMap))
|
|
{
|
|
#ifndef _EMISSION
|
|
return 0;
|
|
#else
|
|
return SAMPLE_TEXTURE2D(emissionMap, sampler_emissionMap, uv).rgb * emissionColor;
|
|
#endif
|
|
}
|
|
#ifndef BUILTIN_TARGET_API
|
|
half2 ParallaxOffset1Step(half height, half amplitude, half3 viewDirTS)
|
|
{
|
|
height = height * amplitude - amplitude / 2.0;
|
|
half3 v = normalize(viewDirTS);
|
|
v.z += 0.42;
|
|
return height * (v.xy / v.z);
|
|
}
|
|
#endif
|
|
|
|
float2 ParallaxMapping(TEXTURE2D_PARAM(heightMap, sampler_heightMap), half3 viewDirTS, half scale, float2 uv)
|
|
{
|
|
half h = SAMPLE_TEXTURE2D(heightMap, sampler_heightMap, uv).g;
|
|
float2 offset = ParallaxOffset1Step(h, scale, viewDirTS);
|
|
return offset;
|
|
}
|
|
#ifdef _SPECULAR_SETUP
|
|
#define SAMPLE_METALLICSPECULAR(uv) SAMPLE_TEXTURE2D(_SpecGlossMap, sampler_SpecGlossMap, uv)
|
|
#else
|
|
#define SAMPLE_METALLICSPECULAR(uv) SAMPLE_TEXTURE2D(_MetallicGlossMap, sampler_MetallicGlossMap, uv)
|
|
#endif
|
|
|
|
half4 SampleMetallicSpecGloss(float2 uv, half albedoAlpha)
|
|
{
|
|
half4 specGloss;
|
|
|
|
#ifdef _METALLICSPECGLOSSMAP
|
|
specGloss = half4(SAMPLE_METALLICSPECULAR(uv));
|
|
#ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
|
specGloss.a = albedoAlpha * _Smoothness;
|
|
#else
|
|
specGloss.a *= _Smoothness;
|
|
#endif
|
|
#else
|
|
#if _SPECULAR_SETUP
|
|
specGloss.rgb = _SpecColor.rgb;
|
|
#else
|
|
specGloss.rgb = _Metallic.rrr;
|
|
#endif
|
|
|
|
#ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
|
specGloss.a = albedoAlpha * _Smoothness;
|
|
#else
|
|
specGloss.a = _Smoothness;
|
|
#endif
|
|
#endif
|
|
|
|
return specGloss;
|
|
}
|
|
|
|
half SampleOcclusion(float2 uv)
|
|
{
|
|
#ifdef _OCCLUSIONMAP
|
|
half occ = SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
|
|
return LerpWhiteTo(occ, _OcclusionStrength);
|
|
#else
|
|
return half(1.0);
|
|
#endif
|
|
}
|
|
half SampleOcclusionMy(float2 uv)
|
|
{
|
|
#ifdef _OCCLUSIONMAP
|
|
#if defined(SHADER_API_GLES)
|
|
return SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
|
|
#else
|
|
half occ = SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
|
|
return LerpWhiteTo(occ, _OcclusionStrength);
|
|
#endif
|
|
#else
|
|
return 1.0;
|
|
#endif
|
|
}
|
|
half2 SampleClearCoat(float2 uv)
|
|
{
|
|
#if defined(_CLEARCOAT) || defined(_CLEARCOATMAP)
|
|
half2 clearCoatMaskSmoothness = half2(_ClearCoatMask, _ClearCoatSmoothness);
|
|
|
|
#if defined(_CLEARCOATMAP)
|
|
clearCoatMaskSmoothness *= SAMPLE_TEXTURE2D(_ClearCoatMap, sampler_ClearCoatMap, uv).rg;
|
|
#endif
|
|
|
|
return clearCoatMaskSmoothness;
|
|
#else
|
|
return half2(0.0, 1.0);
|
|
#endif
|
|
}
|
|
|
|
void ApplyPerPixelDisplacement(half3 viewDirTS, inout float2 uv)
|
|
{
|
|
#if defined(_PARALLAXMAP)
|
|
uv += ParallaxMapping(TEXTURE2D_ARGS(_ParallaxMap, sampler_ParallaxMap), viewDirTS, _Parallax, uv);
|
|
#endif
|
|
}
|
|
|
|
half3 ScaleDetailAlbedo(half3 detailAlbedo, half scale)
|
|
{
|
|
return half(2.0) * detailAlbedo * scale - scale + half(1.0);
|
|
}
|
|
|
|
half3 ApplyDetailAlbedo(float2 detailUv, half3 albedo, half detailMask)
|
|
{
|
|
#if defined(_DETAIL)
|
|
half3 detailAlbedo = SAMPLE_TEXTURE2D(_DetailAlbedoMap, sampler_DetailAlbedoMap, detailUv).rgb;
|
|
#if defined(_DETAIL_SCALED)
|
|
detailAlbedo = ScaleDetailAlbedo(detailAlbedo, _DetailAlbedoMapScale);
|
|
#else
|
|
detailAlbedo = half(2.0) * detailAlbedo;
|
|
#endif
|
|
|
|
return albedo * LerpWhiteTo(detailAlbedo, detailMask);
|
|
#else
|
|
return albedo;
|
|
#endif
|
|
}
|
|
|
|
half3 ApplyDetailNormal(float2 detailUv, half3 normalTS, half detailMask)
|
|
{
|
|
#if defined(_DETAIL)
|
|
#if BUMP_SCALE_NOT_SUPPORTED
|
|
half3 detailNormalTS = UnpackNormal(SAMPLE_TEXTURE2D(_DetailNormalMap, sampler_DetailNormalMap, detailUv));
|
|
#else
|
|
half3 detailNormalTS = UnpackNormalScale(SAMPLE_TEXTURE2D(_DetailNormalMap, sampler_DetailNormalMap, detailUv), _DetailNormalMapScale);
|
|
#endif
|
|
detailNormalTS = normalize(detailNormalTS);
|
|
|
|
return lerp(normalTS, BlendNormalRNM(normalTS, detailNormalTS), detailMask);
|
|
#else
|
|
return normalTS;
|
|
#endif
|
|
}
|
|
void Ext_SurfaceFunction1 (inout Surface o, ShaderData d)
|
|
{
|
|
|
|
float4 texcoords;
|
|
texcoords.xy = d.texcoord0.xy * _BaseMap_ST.xy + _BaseMap_ST.zw;
|
|
float2 uv = texcoords.xy;
|
|
|
|
#if _SHADING_BLINNPHONG || _SHADING_COLOR
|
|
half4 diffuseAlpha = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, texcoords.xy);
|
|
o.Albedo = diffuseAlpha.rgb * _BaseColor.rgb;
|
|
#if !_PASSFORWARD
|
|
if(_EnableToonShading == 0 || _ShadingAffectedByNormalMap == 1)
|
|
{
|
|
o.Normal = SampleNormal(texcoords.xy, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
}
|
|
#else
|
|
o.Normal = SampleNormal(texcoords.xy, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
#endif
|
|
o.Alpha = diffuseAlpha.a;
|
|
o.Alpha = o.Alpha * _BaseColor.a;
|
|
AlphaDiscard(o.Alpha, _Cutoff);
|
|
half3 emission = SampleEmissionMy(uv, _EmissionColor.rgb, TEXTURE2D_ARGS(_EmissionMap, sampler_EmissionMap));
|
|
o.Emission = emission;
|
|
#endif
|
|
|
|
if(_ShadingMode == 1 && _LightFunction == 0 )
|
|
{
|
|
#if _SHADING_BLINNPHONG
|
|
half4 specular = SampleSpecularSmoothnessMy(uv, o.Alpha, _SpecColor, TEXTURE2D_ARGS(_SpecGlossMap, sampler_SpecGlossMap));
|
|
half smoothness = specular.a;
|
|
|
|
o.Specular = specular;
|
|
o.Smoothness = smoothness;
|
|
#endif
|
|
|
|
}
|
|
else if (_ShadingMode == 1 && _LightFunction == 1)
|
|
{
|
|
#if _SHADING_PBR
|
|
#if defined(_PARALLAXMAP)
|
|
ApplyPerPixelDisplacement(d.tangentSpaceViewDir, uv);
|
|
#endif
|
|
half4 albedoAlpha = SampleAlbedoAlpha(uv, TEXTURE2D_ARGS(_BaseMap, sampler_BaseMap));
|
|
o.Alpha = AlphaMy(albedoAlpha.a, _BaseColor, _Cutoff);
|
|
|
|
half4 specGloss = SampleMetallicSpecGloss(uv, albedoAlpha.a);
|
|
o.Albedo = albedoAlpha.rgb * _BaseColor.rgb;
|
|
o.Albedo = AlphaModulate(o.Albedo, o.Alpha);
|
|
#if _SPECULAR_SETUP
|
|
o.Metallic = half(1.0);
|
|
o.Specular = specGloss.rgb;
|
|
#else
|
|
o.Metallic = specGloss.r;
|
|
o.Specular = half3(0.0, 0.0, 0.0);
|
|
#endif
|
|
o.Smoothness = specGloss.a;
|
|
#if !_PASSFORWARD
|
|
if(_EnableToonShading == 0 || _ShadingAffectedByNormalMap == 1)
|
|
{
|
|
o.Normal = SampleNormal(uv, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
}
|
|
#else
|
|
o.Normal = SampleNormal(uv, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
#endif
|
|
o.Occlusion = SampleOcclusion(uv);
|
|
o.Emission = SampleEmissionMy(uv, _EmissionColor.rgb, TEXTURE2D_ARGS(_EmissionMap, sampler_EmissionMap));
|
|
|
|
#if defined(_DETAIL)
|
|
half detailMask = SAMPLE_TEXTURE2D(_DetailMask, sampler_DetailMask, uv).a;
|
|
float2 detailUv = uv * _DetailAlbedoMap_ST.xy + _DetailAlbedoMap_ST.zw;
|
|
o.Albedo = ApplyDetailAlbedo(detailUv, o.Albedo, detailMask);
|
|
o.Normal = ApplyDetailNormal(detailUv, o.Normal, detailMask);
|
|
#endif
|
|
|
|
#endif
|
|
}
|
|
|
|
}
|
|
void ChainSurfaceFunction(inout Surface l, inout ShaderData d)
|
|
{
|
|
Ext_SurfaceFunction0(l, d);
|
|
Ext_SurfaceFunction1(l, d);
|
|
}
|
|
|
|
#if !_DECALSHADER
|
|
|
|
void ChainModifyVertex(inout VertexData v, inout VertexToPixel v2p, float4 time)
|
|
{
|
|
ExtraV2F d;
|
|
ZERO_INITIALIZE(ExtraV2F, d);
|
|
ZERO_INITIALIZE(Blackboard, d.blackboard);
|
|
d.time = time;
|
|
|
|
Ext_ModifyVertex0(v, d);
|
|
v2p.extraV2F0 = d.extraV2F0;
|
|
}
|
|
|
|
void ChainModifyTessellatedVertex(inout VertexData v, inout VertexToPixel v2p)
|
|
{
|
|
ExtraV2F d;
|
|
ZERO_INITIALIZE(ExtraV2F, d);
|
|
ZERO_INITIALIZE(Blackboard, d.blackboard);
|
|
d.extraV2F0 = v2p.extraV2F0;
|
|
v2p.extraV2F0 = d.extraV2F0;
|
|
}
|
|
|
|
void ChainFinalColorForward(inout Surface l, inout ShaderData d, inout half4 color)
|
|
{
|
|
}
|
|
|
|
void ChainFinalGBufferStandard(inout Surface s, inout ShaderData d, inout half4 GBuffer0, inout half4 GBuffer1, inout half4 GBuffer2, inout half4 outEmission, inout half4 outShadowMask)
|
|
{
|
|
}
|
|
#endif
|
|
#if _DECALSHADER
|
|
|
|
ShaderData CreateShaderData(SurfaceDescriptionInputs IN)
|
|
{
|
|
ShaderData d = (ShaderData)0;
|
|
d.TBNMatrix = float3x3(IN.WorldSpaceTangent, IN.WorldSpaceBiTangent, IN.WorldSpaceNormal);
|
|
d.worldSpaceNormal = IN.WorldSpaceNormal;
|
|
d.worldSpaceTangent = IN.WorldSpaceTangent;
|
|
|
|
d.worldSpacePosition = IN.WorldSpacePosition;
|
|
d.texcoord0 = IN.uv0.xyxy;
|
|
d.screenPos = IN.ScreenPosition;
|
|
|
|
d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - d.worldSpacePosition);
|
|
|
|
d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir);
|
|
#if _HDRP
|
|
#else
|
|
#endif
|
|
return d;
|
|
}
|
|
#else
|
|
|
|
ShaderData CreateShaderData(VertexToPixel i
|
|
#if NEED_FACING
|
|
, bool facing
|
|
#endif
|
|
)
|
|
{
|
|
ShaderData d = (ShaderData)0;
|
|
d.clipPos = i.pos;
|
|
d.worldSpacePosition = i.worldPos;
|
|
|
|
d.worldSpaceNormal = normalize(i.worldNormal);
|
|
d.worldSpaceTangent.xyz = normalize(i.worldTangent.xyz);
|
|
|
|
d.tangentSign = i.worldTangent.w * unity_WorldTransformParams.w;
|
|
float3 bitangent = cross(d.worldSpaceTangent.xyz, d.worldSpaceNormal) * d.tangentSign;
|
|
d.TBNMatrix = float3x3(d.worldSpaceTangent, -bitangent, d.worldSpaceNormal);
|
|
d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - i.worldPos);
|
|
|
|
d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir);
|
|
d.texcoord0 = i.texcoord0;
|
|
d.texcoord1 = i.texcoord1;
|
|
d.texcoord2 = i.texcoord2;
|
|
d.texcoord3 = i.texcoord3;
|
|
#if _HDRP
|
|
#else
|
|
#endif
|
|
d.extraV2F0 = i.extraV2F0;
|
|
return d;
|
|
}
|
|
|
|
#endif
|
|
#if defined(_PASSSHADOW)
|
|
float3 _LightDirection;
|
|
float3 _LightPosition;
|
|
#endif
|
|
|
|
#if (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)))
|
|
|
|
#define GetWorldToViewMatrix() _ViewMatrix
|
|
#define UNITY_MATRIX_I_V _InvViewMatrix
|
|
#define GetViewToHClipMatrix() OptimizeProjectionMatrix(_ProjMatrix)
|
|
#define UNITY_MATRIX_I_P _InvProjMatrix
|
|
#define GetWorldToHClipMatrix() _ViewProjMatrix
|
|
#define UNITY_MATRIX_I_VP _InvViewProjMatrix
|
|
#define UNITY_MATRIX_UNJITTERED_VP _NonJitteredViewProjMatrix
|
|
#define UNITY_MATRIX_PREV_VP _PrevViewProjMatrix
|
|
#define UNITY_MATRIX_PREV_I_VP _PrevInvViewProjMatrix
|
|
|
|
void MotionVectorPositionZBias(VertexToPixel input)
|
|
{
|
|
#if UNITY_REVERSED_Z
|
|
input.pos.z -= unity_MotionVectorsParams.z * input.pos.w;
|
|
#else
|
|
input.pos.z += unity_MotionVectorsParams.z * input.pos.w;
|
|
#endif
|
|
}
|
|
|
|
#endif
|
|
VertexToPixel Vert (VertexData v)
|
|
{
|
|
VertexToPixel o = (VertexToPixel)0;
|
|
|
|
UNITY_SETUP_INSTANCE_ID(v);
|
|
UNITY_TRANSFER_INSTANCE_ID(v, o);
|
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
|
|
#if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)))
|
|
VertexData previousMesh = v;
|
|
#endif
|
|
#if !_TESSELLATION_ON
|
|
ChainModifyVertex(v, o, _Time);
|
|
#endif
|
|
|
|
o.texcoord0 = v.texcoord0;
|
|
o.texcoord1 = v.texcoord1;
|
|
o.texcoord2 = v.texcoord2;
|
|
o.texcoord3 = v.texcoord3;
|
|
float3 positionWS = TransformObjectToWorld(v.vertex.xyz);
|
|
float3 normalWS = TransformObjectToWorldNormal(v.normal);
|
|
float4 tangentWS = float4(TransformObjectToWorldDir(v.tangent.xyz), v.tangent.w);
|
|
VertexPositionInputs vertexInput = GetVertexPositionInputs(v.vertex.xyz);
|
|
o.worldPos = positionWS;
|
|
o.worldNormal = normalWS;
|
|
o.worldTangent = tangentWS;
|
|
#if _PASSSHADOW
|
|
#if _CASTING_PUNCTUAL_LIGHT_SHADOW
|
|
float3 lightDirectionWS = normalize(_LightPosition - o.worldPos);
|
|
#else
|
|
float3 lightDirectionWS = _LightDirection;
|
|
#endif
|
|
o.pos = TransformWorldToHClip(ApplyShadowBias(o.worldPos, o.worldNormal, lightDirectionWS));
|
|
#if UNITY_REVERSED_Z
|
|
o.pos.z = min(o.pos.z, UNITY_NEAR_CLIP_VALUE);
|
|
#else
|
|
o.pos.z = max(o.pos.z, UNITY_NEAR_CLIP_VALUE);
|
|
#endif
|
|
#elif _PASSMETA
|
|
o.pos = MetaVertexPosition(float4(v.vertex.xyz, 0), v.texcoord1.xy, v.texcoord2.xy, unity_LightmapST, unity_DynamicLightmapST);
|
|
#else
|
|
o.pos = TransformWorldToHClip(o.worldPos);
|
|
#endif
|
|
#if _PASSFORWARD || _PASSGBUFFER
|
|
float2 uv1 = v.texcoord1.xy;
|
|
OUTPUT_LIGHTMAP_UV(uv1, unity_LightmapST, o.lightmapUV);
|
|
o.texcoord1.xy = uv1;
|
|
OUTPUT_SH(o.worldNormal, o.sh);
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
|
o.dynamicLightmapUV.xy = v.texcoord2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw;
|
|
#if UNITY_VERSION >= 60000009
|
|
OUTPUT_SH(o.worldNormal, o.sh);
|
|
#endif
|
|
#elif (defined(PROBE_VOLUMES_L1) || defined(PROBE_VOLUMES_L2)) && UNITY_VERSION >= 60000009
|
|
OUTPUT_SH4(vertexInput.positionWS, o.worldNormal.xyz, GetWorldSpaceNormalizeViewDir(vertexInput.positionWS), o.sh, o.probeOcclusion);
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef VARYINGS_NEED_FOG_AND_VERTEX_LIGHT
|
|
half fogFactor = 0;
|
|
#if defined(_FOG_FRAGMENT)
|
|
fogFactor = ComputeFogFactor(o.pos.z);
|
|
#endif
|
|
#if _BAKEDLIT
|
|
o.fogFactorAndVertexLight = half4(fogFactor, 0, 0, 0);
|
|
#else
|
|
half3 vertexLight = VertexLighting(o.worldPos, o.worldNormal);
|
|
o.fogFactorAndVertexLight = half4(fogFactor, vertexLight);
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR)
|
|
o.shadowCoord = GetShadowCoord(vertexInput);
|
|
#endif
|
|
|
|
#if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)))
|
|
#if !defined(TESSELLATION_ON)
|
|
MotionVectorPositionZBias(o);
|
|
#endif
|
|
|
|
o.previousPositionCS = float4(0.0, 0.0, 0.0, 1.0);
|
|
bool forceNoMotion = unity_MotionVectorsParams.y == 0.0;
|
|
|
|
if (!forceNoMotion)
|
|
{
|
|
#if defined(HAVE_VFX_MODIFICATION)
|
|
float3 previousPositionOS = currentFrameMvData.vfxParticlePositionOS;
|
|
#if defined(VFX_FEATURE_MOTION_VECTORS_VERTS)
|
|
const bool applyDeformation = false;
|
|
#else
|
|
const bool applyDeformation = true;
|
|
#endif
|
|
#else
|
|
const bool hasDeformation = unity_MotionVectorsParams.x == 1;
|
|
float3 previousPositionOS = hasDeformation ? previousMesh.previousPositionOS : previousMesh.vertex.xyz;
|
|
|
|
#if defined(AUTOMATIC_TIME_BASED_MOTION_VECTORS) && defined(GRAPH_VERTEX_USES_TIME_PARAMETERS_INPUT)
|
|
const bool applyDeformation = true;
|
|
#else
|
|
const bool applyDeformation = hasDeformation;
|
|
#endif
|
|
#endif
|
|
#if defined(FEATURES_GRAPH_VERTEX)
|
|
if (applyDeformation)
|
|
previousPositionOS = GetLastFrameDeformedPosition(previousMesh, currentFrameMvData, previousPositionOS);
|
|
else
|
|
previousPositionOS = previousMesh.positionOS;
|
|
|
|
#if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT)
|
|
previousPositionOS -= previousMesh.precomputedVelocity;
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(UNITY_DOTS_INSTANCING_ENABLED) && defined(DOTS_DEFORMED)
|
|
ApplyPreviousFrameDeformedVertexPosition(previousMesh.vertexID, previousPositionOS);
|
|
#endif
|
|
#if defined (_ADD_PRECOMPUTED_VELOCITY)
|
|
previousPositionOS -= previousMesh.precomputedVelocity;
|
|
#endif
|
|
o.positionCS = mul(UNITY_MATRIX_UNJITTERED_VP, float4(positionWS, 1.0f));
|
|
|
|
#if defined(HAVE_VFX_MODIFICATION)
|
|
#if defined(VFX_FEATURE_MOTION_VECTORS_VERTS)
|
|
#if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT) || defined(_ADD_PRECOMPUTED_VELOCITY)
|
|
#error Unexpected fast path rendering VFX motion vector while there are vertex modification afterwards.
|
|
#endif
|
|
o.previousPositionCS = VFXGetPreviousClipPosition(previousMesh, currentFrameMvData.vfxElementAttributes, o.positionCS);
|
|
#else
|
|
#if VFX_WORLD_SPACE
|
|
const float3 previousPositionWS = previousPositionOS;
|
|
#else
|
|
const float3 previousPositionWS = mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1.0f)).xyz;
|
|
#endif
|
|
o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, float4(previousPositionWS, 1.0f));
|
|
#endif
|
|
#else
|
|
o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1)));
|
|
#endif
|
|
}
|
|
#endif
|
|
|
|
return o;
|
|
}
|
|
float2 CalcNdcMotionVectorFromCsPositions(float4 posCS, float4 prevPosCS)
|
|
{
|
|
bool forceNoMotion = unity_MotionVectorsParams.y == 0.0;
|
|
if (forceNoMotion)
|
|
return float2(0.0, 0.0);
|
|
float2 posNDC = posCS.xy * rcp(posCS.w);
|
|
float2 prevPosNDC = prevPosCS.xy * rcp(prevPosCS.w);
|
|
|
|
float2 velocity;
|
|
#if defined(SUPPORTS_FOVEATED_RENDERING_NON_UNIFORM_RASTER)
|
|
UNITY_BRANCH if (_FOVEATED_RENDERING_NON_UNIFORM_RASTER)
|
|
{
|
|
float2 posUV = RemapFoveatedRenderingResolve(posNDC * 0.5 + 0.5);
|
|
float2 prevPosUV = RemapFoveatedRenderingPrevFrameLinearToNonUniform(prevPosNDC * 0.5 + 0.5);
|
|
velocity = (posUV - prevPosUV);
|
|
#if UNITY_UV_STARTS_AT_TOP
|
|
velocity.y = -velocity.y;
|
|
#endif
|
|
}
|
|
else
|
|
#endif
|
|
{
|
|
velocity = (posNDC.xy - prevPosNDC.xy);
|
|
#if UNITY_UV_STARTS_AT_TOP
|
|
velocity.y = -velocity.y;
|
|
#endif
|
|
velocity.xy *= 0.5;
|
|
}
|
|
|
|
return velocity;
|
|
}
|
|
|
|
float4 Frag(
|
|
VertexToPixel input) : SV_Target
|
|
{
|
|
UNITY_SETUP_INSTANCE_ID(input);
|
|
|
|
float4 motionVector = float4(CalcNdcMotionVectorFromCsPositions(input.positionCS, input.previousPositionCS), 0, 0);
|
|
return motionVector;
|
|
}
|
|
|
|
ENDHLSL
|
|
}
|
|
}
|
|
CustomEditor "ShaderCrew.TheToonShader.TheToonShaderGUIEditor"
|
|
}
|