using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.Rendering; #if USING_URP using UnityEngine.Rendering.Universal; #endif namespace ShaderCrew.TheToonShader { public static class ShaderUtils { public enum RenderPipelineOptions { HDRP, URP, BiRP, URP2D, NONE } public static RenderPipelineOptions getCurrentRenderPipeline() { RenderPipelineOptions rp; if (GraphicsSettings.currentRenderPipeline) { if (GraphicsSettings.currentRenderPipeline.GetType().ToString().Contains("HighDefinition")) { rp = RenderPipelineOptions.HDRP; } else { rp = RenderPipelineOptions.URP; } #if USING_URP2D && USING_URP UniversalRenderPipelineAsset urpAsset = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset; ScriptableRenderer renderer = urpAsset.scriptableRenderer; if (renderer.GetType().Name.Contains("Renderer2D")) { rp = RenderPipelineOptions.URP2D; } #endif } else { rp = RenderPipelineOptions.BiRP; } return rp; } public static readonly Dictionary STS_BIRP_SHADER_DICTIONARY = new Dictionary { #if __I_AM_A_THETOONSHADER_DEV__ { TheToonShaderConstants.TTS_SHADER_DEFAULT_KEY, "Dev/TheToonShaderDev_BiRP_WithOutline"}, { TheToonShaderConstants.TTS_SHADER_STANDARD_WITH_OUTLINE_KEY, "Dev/TheToonShaderDev_BiRP_WithOutline"}, { TheToonShaderConstants.TTS_SHADER_STANDARD_KEY, "Dev/TheToonShaderDev_BiRP"}, #else { TheToonShaderConstants.TTS_SHADER_DEFAULT_KEY, TheToonShaderConstants.TTS_SHADER_NAME_BIRP_WITH_OUTLINE}, { TheToonShaderConstants.TTS_SHADER_STANDARD_WITH_OUTLINE_KEY, TheToonShaderConstants.TTS_SHADER_NAME_BIRP_WITH_OUTLINE}, { TheToonShaderConstants.TTS_SHADER_STANDARD_KEY, TheToonShaderConstants.TTS_SHADER_NAME_BIRP}, { TheToonShaderConstants.TTS_SHADER_STS_KEY, TheToonShaderConstants.TTS_SHADER_NAME_BIRP_WITH_STS}, { TheToonShaderConstants.TTS_SHADER_STS_WITH_OUTLINE_KEY, TheToonShaderConstants.TTS_SHADER_NAME_BIRP_WITH_OUTLINE_AND_STS}, #endif }; //#if USING_HDRP // public static readonly Dictionary TTS_HDRP_SHADER_DICTIONARY = new Dictionary // { //#if UNITY_2023 || UNITY_6000 // //{ "HDRP/Unlit", "SeeThroughShader/HDRP/2023/Unlit" }, // { "HDRP/Lit", "SeeThroughShader/HDRP/2023/Lit" }, // { TheToonShaderConstants.TTS_SHADER_DEFAULT_KEY, "SeeThroughShader/HDRP/2023/Lit" }, //#elif UNITY_2022 // //{ "HDRP/Unlit", "SeeThroughShader/HDRP/2022/Unlit" }, // { "HDRP/Lit", "SeeThroughShader/HDRP/2022/Lit" }, // { TheToonShaderConstants.TTS_SHADER_DEFAULT_KEY, "SeeThroughShader/HDRP/2022/Lit" }, //#elif UNITY_2021 // //{ "HDRP/Unlit", "SeeThroughShader/HDRP/2021/Unlit" }, // { "HDRP/Lit", "SeeThroughShader/HDRP/2021/Lit" }, // { TheToonShaderConstants.TTS_SHADER_DEFAULT_KEY, "SeeThroughShader/HDRP/2021/Lit" }, //#elif UNITY_2020 // //{ "HDRP/Unlit", "SeeThroughShader/HDRP/2020/Unlit" }, // { "HDRP/Lit", "SeeThroughShader/HDRP/2020/Lit" }, // { TheToonShaderConstants.TTS_SHADER_DEFAULT_KEY, "SeeThroughShader/HDRP/2020/Lit" }, //#else // //{ "HDRP/Unlit", "SeeThroughShader/HDRP/2019/Unlit" }, // { "HDRP/Lit", "SeeThroughShader/HDRP/2019/Lit" }, // { TheToonShaderConstants.TTS_SHADER_DEFAULT_KEY, "SeeThroughShader/HDRP/2019/Lit" }, //#endif // }; //#endif #if USING_URP public static readonly Dictionary TTS_URP_SHADER_DICTIONARY = new Dictionary { #if __I_AM_A_THETOONSHADER_DEV__ { TheToonShaderConstants.TTS_SHADER_DEFAULT_KEY, "Dev/TheToonShaderDev_URP_WithOutline"}, { TheToonShaderConstants.TTS_SHADER_STANDARD_WITH_OUTLINE_KEY, "Dev/TheToonShaderDev_URP_WithOutline"}, { TheToonShaderConstants.TTS_SHADER_STANDARD_KEY, "Dev/TheToonShaderDev_URP"}, #else #if UNITY_6000_3_OR_NEWER { TheToonShaderConstants.TTS_SHADER_DEFAULT_KEY, TheToonShaderConstants.TTS_SHADER_NAME_URP_UNITY6_3_WITH_OUTLINE}, { TheToonShaderConstants.TTS_SHADER_STANDARD_WITH_OUTLINE_KEY, TheToonShaderConstants.TTS_SHADER_NAME_URP_UNITY6_3_WITH_OUTLINE}, { TheToonShaderConstants.TTS_SHADER_STANDARD_KEY, TheToonShaderConstants.TTS_SHADER_NAME_URP_UNITY6_3}, { TheToonShaderConstants.TTS_SHADER_STS_KEY, TheToonShaderConstants.TTS_SHADER_NAME_URP_UNITY6_3_WITH_STS}, { TheToonShaderConstants.TTS_SHADER_STS_WITH_OUTLINE_KEY, TheToonShaderConstants.TTS_SHADER_NAME_URP_UNITY6_3_WITH_OUTLINE_AND_STS}, #elif UNITY_2023 || UNITY_6000 { TheToonShaderConstants.TTS_SHADER_DEFAULT_KEY, TheToonShaderConstants.TTS_SHADER_NAME_URP_UNITY6_WITH_OUTLINE}, { TheToonShaderConstants.TTS_SHADER_STANDARD_WITH_OUTLINE_KEY, TheToonShaderConstants.TTS_SHADER_NAME_URP_UNITY6_WITH_OUTLINE}, { TheToonShaderConstants.TTS_SHADER_STANDARD_KEY, TheToonShaderConstants.TTS_SHADER_NAME_URP_UNITY6}, { TheToonShaderConstants.TTS_SHADER_STS_KEY, TheToonShaderConstants.TTS_SHADER_NAME_URP_UNITY6_WITH_STS}, { TheToonShaderConstants.TTS_SHADER_STS_WITH_OUTLINE_KEY, TheToonShaderConstants.TTS_SHADER_NAME_URP_UNITY6_WITH_OUTLINE_AND_STS}, #elif UNITY_2022 { TheToonShaderConstants.TTS_SHADER_DEFAULT_KEY, TheToonShaderConstants.TTS_SHADER_NAME_URP_2022_WITH_OUTLINE}, { TheToonShaderConstants.TTS_SHADER_STANDARD_WITH_OUTLINE_KEY, TheToonShaderConstants.TTS_SHADER_NAME_URP_2022_WITH_OUTLINE}, { TheToonShaderConstants.TTS_SHADER_STANDARD_KEY, TheToonShaderConstants.TTS_SHADER_NAME_URP_2022}, { TheToonShaderConstants.TTS_SHADER_STS_KEY, TheToonShaderConstants.TTS_SHADER_NAME_URP_2022_WITH_STS}, { TheToonShaderConstants.TTS_SHADER_STS_WITH_OUTLINE_KEY, TheToonShaderConstants.TTS_SHADER_NAME_URP_2022_WITH_OUTLINE_AND_STS}, #elif UNITY_2021 { TheToonShaderConstants.TTS_SHADER_DEFAULT_KEY, TheToonShaderConstants.TTS_SHADER_NAME_URP_2021_WITH_OUTLINE}, { TheToonShaderConstants.TTS_SHADER_STANDARD_WITH_OUTLINE_KEY, TheToonShaderConstants.TTS_SHADER_NAME_URP_2021_WITH_OUTLINE}, { TheToonShaderConstants.TTS_SHADER_STANDARD_KEY, TheToonShaderConstants.TTS_SHADER_NAME_URP_2021}, { TheToonShaderConstants.TTS_SHADER_STS_KEY, TheToonShaderConstants.TTS_SHADER_NAME_URP_2021_WITH_STS}, { TheToonShaderConstants.TTS_SHADER_STS_WITH_OUTLINE_KEY, TheToonShaderConstants.TTS_SHADER_NAME_URP_2021_WITH_OUTLINE_AND_STS}, #elif UNITY_2020 { TheToonShaderConstants.TTS_SHADER_DEFAULT_KEY, TheToonShaderConstants.TTS_SHADER_NAME_URP_2020_WITH_OUTLINE}, { TheToonShaderConstants.TTS_SHADER_STANDARD_WITH_OUTLINE_KEY, TheToonShaderConstants.TTS_SHADER_NAME_URP_2020_WITH_OUTLINE}, { TheToonShaderConstants.TTS_SHADER_STANDARD_KEY, TheToonShaderConstants.TTS_SHADER_NAME_URP_2020}, { TheToonShaderConstants.TTS_SHADER_STS_KEY, TheToonShaderConstants.TTS_SHADER_NAME_URP_2020_WITH_STS}, { TheToonShaderConstants.TTS_SHADER_STS_WITH_OUTLINE_KEY, TheToonShaderConstants.TTS_SHADER_NAME_URP_2020_WITH_OUTLINE_AND_STS}, #endif #endif }; public static readonly Dictionary TTS_URP2D_SHADER_DICTIONARY = new Dictionary { #if __I_AM_A_THETOONSHADER_DEV__ { TheToonShaderConstants.TTS_URP2D_SHADER_STANDARD_KEY, TheToonShaderConstants.TTS_SHADER_FILENAME_2D_SHADERGRAPH} #else { TheToonShaderConstants.TTS_URP2D_SHADER_STANDARD_KEY, TheToonShaderConstants.TTS_SHADER_FILENAME_2D_SHADERGRAPH} #endif }; #endif public static Dictionary getUnityToTTSShaderMapping() { Dictionary UnityToTTSShaderMapping = null; if (GraphicsSettings.currentRenderPipeline) { if (GraphicsSettings.currentRenderPipeline.GetType().ToString().Contains("HighDefinition")) { //#if USING_HDRP // UnityToTTSShaderMapping = TTS_HDRP_SHADER_DICTIONARY; //#endif } else //UTP { #if USING_URP UniversalRenderPipelineAsset urpAsset = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset; ScriptableRenderer renderer = urpAsset.scriptableRenderer; if (renderer.GetType().Name.Contains("Renderer2D")) { UnityToTTSShaderMapping = TTS_URP2D_SHADER_DICTIONARY; } else { UnityToTTSShaderMapping = TTS_URP_SHADER_DICTIONARY; } #endif } } else { UnityToTTSShaderMapping = STS_BIRP_SHADER_DICTIONARY; } return UnityToTTSShaderMapping; } public static bool IsNativeTTSShader(Shader shader) { if(shader != null) { return IsNativeTTSShader(shader.name); } return false; } //public static bool IsNativeTTSShader(string shaderName) //{ // if (shaderName != null && !shaderName.Equals("")) // { // if (THETOONSHADER_SHADER_LIST.Contains(shaderName)) // { // return true; // } // } // return false; //} public static bool IsNativeTTSShader(string shaderName) { if (shaderName != null && !shaderName.Equals("")) { if (getUnityToTTSShaderMapping().ContainsValue(shaderName)) { return true; } } return false; } public class UnityVersionRenderPipelineShaderInfo { public string unityVersion; public string renderPipeline; public string versionAndRPCorrectedShader; public string shaderFolder; public UnityVersionRenderPipelineShaderInfo(string unityVersion, string renderPipeline, string shader, string shaderFolder) { this.unityVersion = unityVersion; this.renderPipeline = renderPipeline; this.versionAndRPCorrectedShader = shader; this.shaderFolder = shaderFolder; } } public static UnityVersionRenderPipelineShaderInfo getUnityVersionAndRenderPipelineCorrectedShaderString() { string unityVersion; string renderPipeline; string shaderString; string shaderFolder; unityVersion = Application.unityVersion; if (GraphicsSettings.currentRenderPipeline) { if (GraphicsSettings.currentRenderPipeline.GetType().ToString().Contains("HighDefinition")) { renderPipeline = "HDRP"; //if (unityVersion.Substring(0, 4).Equals("2019")) //{ // shaderString = "TheToonShader/HDRP/TheToonShader_HDRP2019"; // shaderFolder = "TheToonShader/HDRP/..."; //} //else if (unityVersion.Substring(0, 4).Equals("2020")) //{ // shaderString = "TheToonShader/HDRP/TheToonShader_HDRP2020"; // shaderFolder = "TheToonShader/HDRP/..."; //} //else if (unityVersion.Substring(0, 4).Equals("2021")) //{ // shaderString = "TheToonShader/HDRP/TheToonShader_HDRP2021"; // shaderFolder = "TheToonShader/HDRP/..."; //} //else if (unityVersion.Substring(0, 4).Equals("2022")) //{ // shaderString = "TheToonShader/HDRP/TheToonShader_HDRP2022"; // shaderFolder = "TheToonShader/HDRP/..."; //} //else //{ // shaderString = "TheToonShader/HDRP/TheToonShader_HDRP2023"; // shaderFolder = "TheToonShader/HDRP/..."; //} shaderString = "unsupported"; shaderFolder = "unsupported"; } else { renderPipeline = "URP"; if (unityVersion.Substring(0, 4).Equals("2020")) { shaderString = "TheToonShader/URP/2020/TheToonShader"; shaderFolder = "TheToonShader/URP/2020/..."; } else if (unityVersion.Substring(0, 4).Equals("2021")) { shaderString = "TheToonShader/URP/2021/TheToonShader"; shaderFolder = "TheToonShader/URP/2021/..."; } else if (unityVersion.Substring(0, 4).Equals("2022")) { shaderString = "TheToonShader/URP/2022/TheToonShader"; shaderFolder = "TheToonShader/URP/2022/..."; } else { if (unityVersion.StartsWith("6000")) { int minor = int.Parse(unityVersion.Split('.')[1]); if (minor < 3) { shaderString = "TheToonShader/URP/Unity6/TheToonShader"; shaderFolder = "TheToonShader/URP/Unity6/..."; } else { shaderString = "TheToonShader/URP/Unity6_3/TheToonShader"; shaderFolder = "TheToonShader/URP/Unity6_3/..."; } } else { shaderString = "unsupported"; shaderFolder = "unsupported"; } } shaderString = "Dev/TheToonShaderDev_URP"; #if __I_AM_A_THETOONSHADER_DEV_ shaderString = "Dev/TheToonShaderDev_URP"; #endif } } else { renderPipeline = "Built-in RP"; shaderString = "TheToonShader/URP/TheToonShader_BiRP"; #if __I_AM_A_THETOONSHADER_DEV_ shaderString = "Dev/TheToonShaderDev_BiRP"; #endif shaderFolder = "TheToonShader/BiRP/..."; } return new UnityVersionRenderPipelineShaderInfo(unityVersion, renderPipeline, shaderString, shaderFolder); } public static List SURFACEOPTIONS_PROPERTIES_LIST = new List { "_Cutoff", "_Surface", "_Blend", "_Cull", "_AlphaClip", "_ReceiveShadows", }; public static Dictionary> SURFACEOPTIONSANDINPUTS_CATEGORIES = new Dictionary> { { "Surface Options", SURFACEOPTIONS_PROPERTIES_LIST}, {"Surface Inputs", SURFACEOPTIONS_PROPERTIES_LIST} }; //public static readonly List ALL_PROPERTIES_LIST = SURFACEOPTIONSANDINPUTS_PROPERTIES_LIST.Concat(TOONSHADING_PROPERTIES_LIST) // .Concat(STYLING_PROPERTIES_LIST) // .Concat(OUTLINE_PROPERTIES_LIST).ToList(); //public static readonly Dictionary THETOONSHADER_PROPERTIES_LIST = new Dictionary { }; public static readonly List ALL_PROPERITES = new List // public static string[] SURFACEOPTIONSANDINPUTS_PROPERTIES_LIST = { "_LightSource", "_ShadingMode", "_LightFunction", "_UseAlphaOnlyFromBaseMap", //BiRP and URP: "_Cull", "_AlphaClip", "_Cutoff", "_BumpScale", "_BumpMap", "_EmissionColor", "_EmissionMap", "_SmoothnessTextureChannel", "_Metallic", "_MetallicGlossMap", "_Parallax", "_ParallaxMap", "_OcclusionStrength", "_OcclusionMap", "_DetailMask", "_DetailAlbedoMap", "_DetailNormalMapScale", "_DetailNormalMap", #if USING_URP //URP only: "_BaseMap", "_BaseColor", "_Surface", "_Blend", "_ReceiveShadows", "_SpecularHighlights", "_SpecColor", "_SpecGlossMap", "_Smoothness", "_SmoothnessSource", "_WorkflowMode", "_EnvironmentReflections", "_DetailAlbedoMapScale", #else //BiRP only: "_Color","_MainTex", "_Glossiness","_GlossMapScale", "_UVSec","_Mode", #endif "_EnableToonShading", "_ShadingFunction", "_GradientTex", "_GradientMode", "_GradientBlending", "_GradientBlendFactor", "_NumberOfCells", "_CellTransitionSmoothness", "_SumLightsBeforePosterization", "_ShadingUseLightColors", "_EnableShadows", "_CoreShadowColor", "_TerminatorPosition", "_TerminatorWidth", "_TerminatorSmoothness", "_FormShadowColor", "_EnableCastShadows", //"_CastShadowsStrength", "_CastShadowsSmoothness", "_CastShadowColor", "_CastShadowColorMode", "_ShadingAffectedByNormalMap", //Specular "_EnableSpecular", "_SpecularBlending", "_SpecularColor", "_SpecularSize", "_SpecularSmoothness","_SpecularOpacity", "_SpecularAffectedByNormalMap", "_SpecularUseLightColors", //Rim "_EnableRim", "_RimBlending", "_RimColor", "_RimSize", "_RimSmoothness", "_RimOpacity", "_RimAffectedArea", "_RimAffectedByNormalMap", //Styling "_EnableStyling", "_EnableStylingDistanceFade", "_StylingDFStartingDistance", "_StylingDFFalloff", "_StylingAdjustDistanceFadeValue", "_StylingDistanceFadeValue", "_EnableAntiAliasing", ///////////////////// // SHADING STYLING // ///////////////////// "_EnableShadingStyling", "_StylingShadingSyncWithOtherStyling", "_StylingColor", //Style "_ShadingStyle", //Partitioning "_SyncWithLightPartitioning", "_NumberOfCellsHatching", "_StylingTerminatorPosition", "_StylingOvermodelingFactor", //Blending "_StylingShadingBlending", "_StylingShadingIsInverted", //DrawSpace "_DrawSpace", "_UVSet", "_SSCameraDistanceScaled","_AnchorSSToObjectsOrigin", "_CoordinateSystem", "_PolarCenterMode", "_PolarCenter", //Density and Direction "_StylingShadingDensity", "_StylingShadingInitialDirection", "_StylingShadingRotationBetweenCells", "_StylingShadingHalftonesOffset", //Style Settings "_StylingShadingOpacity", "_StylingShadingOpacityFalloff", "_StylingShadingThicknessControl", "_StylingShadingThickness", "_StylingShadingThicknessFalloff", "_StylingShadingHardness", "_StylingShadingHalftonesRoundness", "_StylingShadingHalftonesRoundnessFalloff", "_StylingShadingEnableDashes", "_StylingShadingDashesSize", "_StylingShadingDashesUseHatchingDensity", "_StylingShadingDashesDensity", "_StylingShadingDashesType", "_StylingShadingDashesRoundness", "_StylingShadingDashesOffset", "_StylingShadingDashesTransitionPosition","_StylingShadingDashesTransitionSoftness", //Randomizer "_EnableShadingRandomizer", "_ShadingNoise1Size", "_ShadingNoise1Seed", "_ShadingNoise2Seed", "_NoiseIntensity", "_SpacingRandomMode", "_SpacingRandomIntensity","_OpacityRandomMode", "_OpacityRandomIntensity", "_HardnessRandomMode", "_HardnessRandomIntensity", "_LengthRandomMode", "_LengthRandomIntensity", "_ThicknessRandomMode", "_ThicknesshRandomIntensity", ////////////////////////// // Cast Shadows Styling // ////////////////////////// "_EnableCastShadowsStyling", "_StylingCastShadowsColor", "_StylingCastShadowsSyncWithOtherStyling", //Style "_CastShadowsStyle", //Partitioning "_CastShadowsNumberOfCellsHatching", "_StylingCastShadowsSmoothness", //Blending "_StylingCastShadowsBlending", "_StylingCastShadowsIsInverted", //DrawSpace "_CastShadowsDrawSpace", "_CastShadowsUVSet", "_CastShadowsSSCameraDistanceScaled","_CastShadowsAnchorSSToObjectsOrigin", "_CastShadowsCoordinateSystem", "_CastShadowsPolarCenterMode", "_CastShadowsPolarCenter", //Density and Direction "_StylingCastShadowsDensity", "_StylingCastShadowsInitialDirection", "_StylingCastShadowsRotationBetweenCells", "_StylingCastShadowsHalftonesOffset", //Style Settings "_StylingCastShadowsOpacity", "_StylingCastShadowsOpacityFalloff", "_StylingCastShadowsThicknessControl", "_StylingCastShadowsThickness", "_StylingCastShadowsThicknessFalloff", "_StylingCastShadowsHardness", "_StylingCastShadowsHalftonesRoundness", "_StylingCastShadowsHalftonesRoundnessFalloff", "_StylingCastShadowsEnableDashes", "_StylingCastShadowsDashesSize", "_StylingCastShadowsDashesUseHatchingDensity", "_StylingCastShadowsDashesDensity", "_StylingCastShadowsDashesType", "_StylingCastShadowsDashesRoundness", "_StylingCastShadowsDashesOffset", "_StylingCastShadowsDashesTransitionPosition","_StylingCastShadowsDashesTransitionSoftness", //Randomizer "_EnableCastShadowsRandomizer", "_CastShadowsNoise1Size", "_CastShadowsNoise1Seed", "_CastShadowsNoise2Seed", "_CastShadowsNoiseIntensity", "_CastShadowsSpacingRandomMode", "_CastShadowsSpacingRandomIntensity","_CastShadowsOpacityRandomMode", "_CastShadowsOpacityRandomIntensity", "_CastShadowsHardnessRandomMode", "_CastShadowsHardnessRandomIntensity", "_CastShadowsLengthRandomMode", "_CastShadowsLengthRandomIntensity", "_CastShadowsThicknessRandomMode", "_CastShadowsThicknesshRandomIntensity", ////////////////////// // Specular Styling // ////////////////////// "_EnableSpecularStyling", "_StylingSpecularSyncWithOtherStyling", //Specular Settings "_SyncWithSpecular", "_StylingSpecularSize", "_StylingSpecularSmoothness", "_StylingSpecularColor", "_StylingSpecularUseLightColors", //Style "_SpecularStyle", //Blending "_StylingSpecularBlending", "_StylingSpecularIsInverted", //DrawSpace "_SpecularDrawSpace", "_SpecularUVSet", "_SpecularSSCameraDistanceScaled", "_SpecularAnchorSSToObjectsOrigin", "_SpecularCoordinateSystem", "_SpecularPolarCenterMode", "_SpecularPolarCenter", //Density and Direction "_StylingSpecularDensity", "_StylingSpecularRotation", "_StylingSpecularHalftonesOffset", //Style Settings "_StylingSpecularOpacity", "_StylingSpecularOpacityFalloff", "_StylingSpecularThicknessControl", "_StylingSpecularThickness", "_StylingSpecularThicknessFalloff", "_StylingSpecularHardness", "_StylingSpecularHalftonesRoundness", "_StylingSpecularHalftonesRoundnessFalloff", "_StylingSpecularEnableDashes", "_StylingSpecularDashesSize", "_StylingSpecularDashesUseHatchingDensity", "_StylingSpecularDashesDensity", "_StylingSpecularDashesType", "_StylingSpecularDashesRoundness", "_StylingSpecularDashesOffset", "_StylingSpecularDashesTransitionPosition","_StylingSpecularDashesTransitionSoftness", //Randomizer "_EnableSpecularRandomizer", "_SpecularNoise1Size", "_SpecularNoise1Seed", "_SpecularNoise2Seed", "_SpecularNoiseIntensity", "_SpecularSpacingRandomMode", "_SpecularSpacingRandomIntensity", "_SpecularOpacityRandomMode", "_SpecularOpacityRandomIntensity", "_SpecularHardnessRandomMode", "_SpecularHardnessRandomIntensity", "_SpecularLengthRandomMode", "_SpecularLengthRandomIntensity", "_SpecularThicknessRandomMode", "_SpecularThicknesshRandomIntensity", ///////////////// // Rim Styling // ///////////////// "_EnableRimStyling", "_StylingRimSyncWithOtherStyling", //Rim Settings "_SyncWithRim", "_StylingRimSize", "_StylingRimSmoothness", "_StylingRimAffectedArea", "_StylingRimColor", //Style "_RimStyle", //Blending "_StylingRimBlending", "_StylingRimIsInverted", //DrawSpace "_RimDrawSpace", "_RimSSCameraDistanceScaled", "_RimAnchorSSToObjectsOrigin", "_RimCoordinateSystem", "_RimPolarCenterMode", "_RimPolarCenter", //Density and Direction "_StylingRimDensity", "_RimUVSet", "_StylingRimRotation", "_StylingRimHalftonesOffset", //Style Settings "_StylingRimThicknessControl", "_StylingRimThickness", "_StylingRimThicknessFalloff", "_StylingRimOpacity", "_StylingRimOpacityFalloff", "_StylingRimHardness", "_StylingRimHalftonesRoundness", "_StylingRimHalftonesRoundnessFalloff", "_StylingRimEnableDashes", "_StylingRimDashesSize", "_StylingRimDashesUseHatchingDensity", "_StylingRimDashesDensity", "_StylingRimDashesType", "_StylingRimDashesRoundness", "_StylingRimDashesOffset", "_StylingRimDashesTransitionPosition","_StylingRimDashesTransitionSoftness", //Randomizer "_EnableRimRandomizer", "_RimNoise1Size", "_RimNoise1Seed", "_RimNoise2Seed", "_RimNoiseIntensity", "_RimSpacingRandomMode", "_RimSpacingRandomIntensity", "_RimOpacityRandomMode", "_RimOpacityRandomIntensity", "_RimHardnessRandomMode", "_RimHardnessRandomIntensity", "_RimLengthRandomMode", "_RimLengthRandomIntensity", "_RimThicknessRandomMode", "_RimThicknesshRandomIntensity", "_HatchingAffectedByNormalMap", "_HatchingCameraDistanceFade", "_HalftonePatternCameraDistanceFade", "_EnableOutline", "_OutlineColor", "_OutlineWidth", "_OutlineDepthOffset", "_OutlineConstantScreenWidth", //"_OutlineCameraDistanceImpact", }; static readonly Dictionary PropertyToKeywordsURP = new() { ["_ShadingMode"] = new[] { "_SHADING_COLOR", "_SHADING_BLINNPHONG", "_SHADING_PBR" }, ["_BumpMap"] = new[] { "_NORMALMAP" }, ["_EmissionMap"] = new[] { "_EMISSION" }, ["_EmissionColor"] = new[] { "_EMISSION" }, ["_AlphaClip"] = new[] { "_ALPHATEST_ON" }, ["_ReceiveShadows"] = new[] { "_RECEIVE_SHADOWS_OFF" }, ["_SpecGlossMap"] = new[] { "_SPECGLOSSMAP", "_METALLICSPECGLOSSMAP" }, ["_MetallicGlossMap"] = new[] { "_METALLICSPECGLOSSMAP" }, ["_SpecColor"] = new[] { "_SPECULAR_COLOR" }, ["_SpecularHighlights"] = new[] { "_SPECGLOSSMAP", "_SPECULAR_COLOR", "_SPECULARHIGHLIGHTS_OFF" }, ["_SmoothnessSource"] = new[] { "_GLOSSINESS_FROM_BASE_ALPHA" }, ["_EnvironmentReflections"] = new[] { "_ENVIRONMENTREFLECTIONS_OFF" }, ["_WorkflowMode"] = new[] { "_SPECULAR_SETUP" }, ["_OcclusionMap"] = new[] { "_OCCLUSIONMAP" }, ["_ParallaxMap"] = new[] { "_PARALLAXMAP" }, ["_SmoothnessTextureChannel"] = new[] { "_SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A" }, ["_DetailAlbedoMap"] = new[] { "_DETAIL_MULX2" }, ["_DetailNormalMap"] = new[] { "_DETAIL_MULX2" }, ["_DetailAlbedoMapScale"] = new[] { "_DETAIL_SCALED" } }; static readonly Dictionary PropertyToKeywordsBiRP = new() { ["_ShadingMode"] = new[] { "_SHADING_COLOR", "_SHADING_BLINNPHONG", "_SHADING_PBR" }, ["_BumpMap"] = new[] { "_NORMALMAP" }, ["_DetailNormalMap"] = new[] { "_NORMALMAP", "_DETAIL_MULX2" }, ["_DetailMask"] = new[] { "_DETAIL_MULX2" }, ["_DetailAlbedoMap"] = new[] { "_DETAIL_MULX2" }, ["_EmissionMap"] = new[] { "_EMISSION" }, ["_EmissionColor"] = new[] { "_EMISSION" }, ["_SmoothnessTextureChannel"] = new[] { "_SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A" }, ["_MetallicGlossMap"] = new[] { "_METALLICGLOSSMAP" }, ["_ParallaxMap"] = new[] { "_PARALLAXMAP" } }; public static List GetKeywordList(List properties, Dictionary propertyToKeywordsDict) { HashSet keywords = new HashSet(); foreach (var property in properties) { if (!propertyToKeywordsDict.TryGetValue(property, out var mapped)) continue; foreach (var k in mapped) keywords.Add(k); } return keywords.ToList(); } public static List GetKeywordListURP(List properties) { return GetKeywordList(properties, PropertyToKeywordsURP); } public static List GetKeywordListBiRP(List properties) { return GetKeywordList(properties, PropertyToKeywordsBiRP); } public static List GetKeywordList(List properties) { List keywords = new List(); #if USING_URP return ShaderUtils.GetKeywordListURP(properties); #else return ShaderUtils.GetKeywordListBiRP(properties); #endif } public static readonly List THETOONSHADER_KEYWORDS_LIST = new List { "_SHADING_COLOR", "_SHADING_BLINNPHONG", "_SHADING_PBR", #if USING_URP "_NORMALMAP", // _BumpMap "_EMISSION", // _EmissionMap, _EmissionColor "_ALPHATEST_ON", //_AlphaClip "_RECEIVE_SHADOWS_OFF", //_ReceiveShadows "_SPECGLOSSMAP", //_SpecGlossMap, _SpecularHighlights "_SPECULAR_COLOR", //_SpecColor, _SpecularHighlights "_GLOSSINESS_FROM_BASE_ALPHA", //_SmoothnessSource "_SPECULARHIGHLIGHTS_OFF", // _SpecularHighlights "_ENVIRONMENTREFLECTIONS_OFF", // _EnvironmentReflections "_SPECULAR_SETUP", //_WorkflowMode "_METALLICSPECGLOSSMAP", //_SpecGlossMap, _MetallicGlossMap "_OCCLUSIONMAP", // _OcclusionMap "_PARALLAXMAP", //_ParallaxMap "_SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A", //_SmoothnessTextureChannel "_DETAIL_MULX2", //_DetailAlbedoMap, _DetailNormalMap, "_DETAIL_SCALED", //_DetailAlbedoMapScale "_CLEARCOAT", "_CLEARCOATMAP", "_ALPHAPREMULTIPLY_ON", "_ALPHAMODULATE_ON", "_SURFACE_TYPE_TRANSPARENT", #else "_NORMALMAP", // _BumpMap, _DetailNormalMap "_DETAIL_MULX2", // _DetailNormalMap, _DetailMask, _DetailAlbedoMap "_EMISSION", // _EmissionMap, _EmissionColor "_SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A", // _SmoothnessTextureChannel "_METALLICGLOSSMAP", //_MetallicGlossMap, "_PARALLAXMAP", // _ParallaxMap, #endif }; public static readonly List TOONSHADING_PROPERTIES_LIST = new List //public static string[] TOONSHADING_PROPERTIES_LIST = { "_EnableToonShading", "_ShadingFunction", "_GradientTex", "_GradientMode", "_GradientBlending", "_GradientBlendFactor", "_NumberOfCells", "_CellTransitionSmoothness", "_EnableShadows", "_CoreShadowColor", "_TerminatorWidth", "_TerminatorSmoothness", "_FormShadowColor", "_EnableCastShadows", "_CustomizeCastShadowsColor", "_CastShadowsStrength", "_CastShadowsSmoothness", "_CastShadowColorMode", "_CastShadowColor", "_ShadowsAffectByNormalMap", "_EnableSpecular", "_SpecularBlending", "_SpecularColor", "_SpecularSize", "_SpecularSmoothness", "_SpecularOpacity", "_SpecularAffectedByNormalMap", "_EnableRim", "_RimBlending", "_RimColor", "_RimSize", "_RimSmoothness", "_RimOpacity", "_RimAffectedArea", "_RimAffectedByNormalMap" }; //public static readonly List STYLING_PROPERTIES_LIST = new List ////public static string[] STYLING_PROPERTIES_LIST = //{ // "_EnableStyling", "_EnableShadingStyling", "_ShadingStyle", "_StylingShadingBlending", "_DrawSpace", // "_SSCameraDistanceScaled", "_CoordinateSystem", "_PolarCenterMode", "_PolarCenter", "_SyncWithLightPartitioning", // "_NumberOfCellsHatching", "_StylingOvermodelingFactor", "_StylingColor", "_StylingShadingDensity", "_StylingShadingHalftonesOffset", // "_StylingShadingThicknessControl", "_StylingShadingThickness", "_StylingShadingOpacity", "_StylingShadingOpacityFalloff", "_StylingShadingThicknessFalloff", // "_StylingShadingHardness", "_StylingShadingInitialDirection", "_StylingShadingRotationBetweenCells", "_StylingShadingHalftonesRoundness", "_StylingShadingHalftonesRoundnessFalloff", // "_EnableShadingRandomizer", "_PerlinNoiseSize", "_NoiseIntensity", "_SpacingRandomMode", "_SpacingRandomIntensity", // "_OpacityRandomMode", "_OpacityRandomIntensity", "_HardnessRandomMode", "_HardnessRandomIntensity", "_LengthRandomMode", // "_LengthRandomIntensity", "_ThicknessRandomMode", "_ThicknesshRandomIntensity", "_EnableSpecularStyling", "_SpecularStyle", // "_StylingSpecularBlending", "_SpecularDrawSpace", "_SpecularSSCameraDistanceScaled", "_SpecularCoordinateSystem", "_SpecularPolarCenterMode", // "_SpecularPolarCenter", "_SyncWithSpecular", "_StylingSpecularSize", "_StylingSpecularSmoothness", "_StylingSpecularColor", // "_StylingSpecularDensity", "_StylingSpecularHalftonesOffset", "_StylingSpecularThicknessControl", "_StylingSpecularThickness", "_StylingSpecularThicknessFalloff", // "_StylingSpecularOpacity", "_StylingSpecularOpacityFalloff", "_StylingSpecularHardness", "_StylingSpecularHalftonesRoundness", "_StylingSpecularHalftonesRoundnessFalloff", // "_StylingSpecularRotation", "_EnableSpecularRandomizer", "_SpecularPerlinNoiseSize", "_SpecularPerlinNoiseSeed", "_SpecularWhiteNoiseSeed", // "_SpecularNoiseIntensity", "_SpecularSpacingRandomMode", "_SpecularSpacingRandomIntensity", "_SpecularOpacityRandomMode", "_SpecularOpacityRandomIntensity", // "_SpecularHardnessRandomMode", "_SpecularHardnessRandomIntensity", "_SpecularLengthRandomMode", "_SpecularLengthRandomIntensity", "_SpecularThicknessRandomMode", // "_SpecularThicknesshRandomIntensity", "_EnableRimStyling", "_RimStyle", "_StylingRimBlending", "_RimDrawSpace", // "_RimSSCameraDistanceScaled", "_RimCoordinateSystem", "_RimPolarCenterMode", "_RimPolarCenter", "_SyncWithRim", // "_StylingRimSize", "_StylingRimSmoothness", "_StylingRimAffectedArea", "_StylingRimColor", "_StylingRimDensity", // "_StylingRimHalftonesOffset", "_StylingRimThicknessControl", "_StylingRimThickness", "_StylingRimThicknessFalloff", "_StylingRimOpacity", // "_StylingRimOpacityFalloff", "_StylingRimHardness", "_StylingRimHalftonesRoundness", "_StylingRimHalftonesRoundnessFalloff", "_StylingRimRotation", // "_EnableRimRandomizer", "_RimPerlinNoiseSize", "_RimPerlinNoiseSeed", "_RimWhiteNoiseSeed", "_RimNoiseIntensity", // "_RimSpacingRandomMode", "_RimSpacingRandomIntensity", "_RimOpacityRandomMode", "_RimOpacityRandomIntensity", "_RimHardnessRandomMode", // "_RimHardnessRandomIntensity", "_RimLengthRandomMode", "_RimLengthRandomIntensity", "_RimThicknessRandomMode", "_RimThicknesshRandomIntensity", // "_HatchingAffectedByNormalMap", "_NoiseMap1", "_NoiseMap2", "_HatchingCameraDistanceFade", "_HalftonePatternCameraDistanceFade" //}; //public static readonly List STYLING_GENERAL_PROPERTIES = new List //{ // "_EnableStyling", "_EnableShadingStyling", "_ShadingStyle", "_StylingShadingBlending", "_DrawSpace", // "_SSCameraDistanceScaled", "_CoordinateSystem", "_PolarCenterMode", "_PolarCenter", "_StylingColor", "_StylingShadingDensity", "_StylingShadingHalftonesOffset", // "_StylingShadingThicknessControl", "_StylingShadingThickness", "_StylingShadingOpacity", "_StylingShadingOpacityFalloff", "_StylingShadingThicknessFalloff", // "_StylingShadingHardness", "_StylingShadingInitialDirection", "_StylingShadingRotationBetweenCells", "_StylingShadingHalftonesRoundness", "_StylingShadingHalftonesRoundnessFalloff", // "_EnableSpecularStyling", "_SpecularStyle", // "_StylingSpecularBlending", "_SpecularDrawSpace", "_SpecularSSCameraDistanceScaled", "_SpecularCoordinateSystem", "_SpecularPolarCenterMode", // "_SpecularPolarCenter", "_SyncWithSpecular", "_StylingSpecularSize", "_StylingSpecularSmoothness", "_StylingSpecularColor", // "_StylingSpecularDensity", "_StylingSpecularHalftonesOffset", "_StylingSpecularThicknessControl", "_StylingSpecularThickness", "_StylingSpecularThicknessFalloff", // "_StylingSpecularOpacity", "_StylingSpecularOpacityFalloff", "_StylingSpecularHardness", "_StylingSpecularHalftonesRoundness", "_StylingSpecularHalftonesRoundnessFalloff", // "_StylingSpecularRotation", "_EnableSpecularRandomizer", "_SpecularPerlinNoiseSize", "_SpecularPerlinNoiseSeed", "_SpecularWhiteNoiseSeed", // "_SpecularNoiseIntensity", "_SpecularSpacingRandomMode", "_SpecularSpacingRandomIntensity", "_SpecularOpacityRandomMode", "_SpecularOpacityRandomIntensity", // "_SpecularHardnessRandomMode", "_SpecularHardnessRandomIntensity", "_SpecularLengthRandomMode", "_SpecularLengthRandomIntensity", "_SpecularThicknessRandomMode", // "_SpecularThicknesshRandomIntensity", "_EnableRimStyling", "_RimStyle", "_StylingRimBlending", "_RimDrawSpace", // "_RimSSCameraDistanceScaled", "_RimCoordinateSystem", "_RimPolarCenterMode", "_RimPolarCenter", "_SyncWithRim", // "_StylingRimSize", "_StylingRimSmoothness", "_StylingRimAffectedArea", "_StylingRimColor", "_StylingRimDensity", // "_StylingRimHalftonesOffset", "_StylingRimThicknessControl", "_StylingRimThickness", "_StylingRimThicknessFalloff", "_StylingRimOpacity", // "_StylingRimOpacityFalloff", "_StylingRimHardness", "_StylingRimHalftonesRoundness", "_StylingRimHalftonesRoundnessFalloff", "_StylingRimRotation", // "_EnableRimRandomizer", "_RimPerlinNoiseSize", "_RimPerlinNoiseSeed", "_RimWhiteNoiseSeed", "_RimNoiseIntensity", // "_RimSpacingRandomMode", "_RimSpacingRandomIntensity", "_RimOpacityRandomMode", "_RimOpacityRandomIntensity", "_RimHardnessRandomMode", // "_RimHardnessRandomIntensity", "_RimLengthRandomMode", "_RimLengthRandomIntensity", "_RimThicknessRandomMode", "_RimThicknesshRandomIntensity", // "_HatchingAffectedByNormalMap", "_HatchingCameraDistanceFade", "_HalftonePatternCameraDistanceFade" //}; public static readonly List STYLING_SHADING_PARTITIONING_PROPERTIES = new List { "_SyncWithLightPartitioning","_NumberOfCellsHatching", "_StylingOvermodelingFactor", }; public static readonly List STYLING_SHADING_RANDOMIZER_PROPERTIES = new List { "_EnableShadingRandomizer", "_PerlinNoiseSize", "_NoiseIntensity", "_SpacingRandomMode", "_SpacingRandomIntensity", "_OpacityRandomMode", "_OpacityRandomIntensity", "_HardnessRandomMode", "_HardnessRandomIntensity", "_LengthRandomMode", "_LengthRandomIntensity", "_ThicknessRandomMode", "_ThicknesshRandomIntensity", }; public static readonly List OUTLINE_PROPERTIES_LIST = new List //public static string[] OUTLINE_PROPERTIES_LIST = { "_EnableOutline", "_OutlineColor", "_OutlineWidth", "_OutlineDepthOffset", "_OutlineCameraDistanceImpact" }; public static List test = new List { }; //public static List ALL_STYLING_PROPERTIES() //{ // return STYLING_GENERAL_PROPERTIES.Concat(STYLING_SHADING_PARTITIONING_PROPERTIES).Concat(STYLING_SHADING_RANDOMIZER_PROPERTIES).ToList(); //} //public static List ALL_PROPERTIES() //{ // return SURFACEOPTIONSANDINPUTS_PROPERTIES_LIST.Concat(TOONSHADING_PROPERTIES_LIST).Concat(ALL_STYLING_PROPERTIES()).Concat(OUTLINE_PROPERTIES_LIST).ToList(); //} } }