public override void DrawFeatureGUI(Material mat) { bool isSurfaceShader = mat.IsKeywordEnabled("_MSRENDERLOOP_SURFACESHADER"); packMode = (TextureArrayConfig.PackingMode)EditorGUILayout.EnumPopup(CPackMode, packMode); perfMode = (PerformanceMode)EditorGUILayout.EnumPopup(CShaderPerfMode, perfMode); maxTextureCount = (MaxTextureCount)EditorGUILayout.EnumPopup(CMaxTexCount, maxTextureCount); if (isSurfaceShader) { lightingMode = (LightingMode)EditorGUILayout.EnumPopup(CLightingMode, lightingMode); } uvMode = (UVMode)EditorGUILayout.EnumPopup(CUVMode, uvMode); shaderModel = (ShaderModel)EditorGUILayout.EnumPopup(CForceShaderModel, shaderModel); samplerMode = (SamplerMode)EditorGUILayout.EnumPopup(CSamplerMode, samplerMode); emissiveArray = EditorGUILayout.Toggle(CEmissiveArray, emissiveArray); disableHeightBlend = EditorGUILayout.Toggle(CDisableHeightBlend, disableHeightBlend); //debugOutput = (DebugOutput)EditorGUILayout.EnumPopup("Debug", debugOutput); }
public override void DrawFeatureGUI(MicroSplatKeywords keywords) { bool isSurfaceShader = keywords.IsKeywordEnabled("_MSRENDERLOOP_SURFACESHADER"); packMode = (TextureArrayConfig.PackingMode)EditorGUILayout.EnumPopup(CPackMode, packMode); perfMode = (PerformanceMode)EditorGUILayout.EnumPopup(CShaderPerfMode, perfMode); maxTextureCount = (MaxTextureCount)EditorGUILayout.EnumPopup(CMaxTexCount, maxTextureCount); if (isSurfaceShader) { lightingMode = (LightingMode)EditorGUILayout.EnumPopup(CLightingMode, lightingMode); } uvMode = (UVMode)EditorGUILayout.EnumPopup(CUVMode, uvMode); shaderModel = (ShaderModel)EditorGUILayout.EnumPopup(CForceShaderModel, shaderModel); samplerMode = (SamplerMode)EditorGUILayout.EnumPopup(CSamplerMode, samplerMode); emissiveArray = EditorGUILayout.Toggle(CEmissiveArray, emissiveArray); perPixelNormal = EditorGUILayout.Toggle(CPerPixelNormal, perPixelNormal); disableHeightBlend = EditorGUILayout.Toggle(CDisableHeightBlend, disableHeightBlend); if (!keywords.IsKeywordEnabled("_MICROMESH")) { useCustomSplatMaps = EditorGUILayout.Toggle(CUseCustomSplatMaps, useCustomSplatMaps); } //debugOutput = (DebugOutput)EditorGUILayout.EnumPopup("Debug", debugOutput); }
public override void DrawFeatureGUI(MicroSplatKeywords keywords) { bool isSurfaceShader = keywords.IsKeywordEnabled("_MSRENDERLOOP_SURFACESHADER"); #if __MICROSPLAT_MESHTERRAIN__ || __MICROSPLAT_MESH__ workflow = (Workflow)EditorGUILayout.EnumPopup(CWorkflow, workflow); #endif packMode = (TextureArrayConfig.PackingMode)EditorGUILayout.EnumPopup(CPackMode, packMode); perfMode = (PerformanceMode)EditorGUILayout.EnumPopup(CShaderPerfMode, perfMode); maxTextureCount = (MaxTextureCount)EditorGUILayout.EnumPopup(CMaxTexCount, maxTextureCount); if (isSurfaceShader) { lightingMode = (LightingMode)EditorGUILayout.EnumPopup(CLightingMode, lightingMode); if (lightingMode != LightingMode.Automatic && lightingMode != LightingMode.StandardShaderNoSheen) { EditorGUILayout.HelpBox("Shader is forced to run in forward rendering due to lighting mode", MessageType.Info); } } uvMode = (UVMode)EditorGUILayout.EnumPopup(CUVMode, uvMode); shaderModel = (ShaderModel)EditorGUILayout.EnumPopup(CForceShaderModel, shaderModel); samplerMode = (SamplerMode)EditorGUILayout.EnumPopup(CSamplerMode, samplerMode); emissiveArray = EditorGUILayout.Toggle(CEmissiveArray, emissiveArray); perPixelNormal = EditorGUILayout.Toggle(CPerPixelNormal, perPixelNormal); disableHeightBlend = EditorGUILayout.Toggle(CDisableHeightBlend, disableHeightBlend); disableNormals = EditorGUILayout.Toggle(CDisableNormals, disableNormals); #if __MICROSPLAT_MESHTERRAIN__ || __MICROSPLAT_MESH__ if (workflow == Workflow.UnityTerrain) { useCustomSplatMaps = EditorGUILayout.Toggle(CUseCustomSplatMaps, useCustomSplatMaps); } #else useCustomSplatMaps = EditorGUILayout.Toggle(CUseCustomSplatMaps, useCustomSplatMaps); #endif debugOutput = (DebugOutput)EditorGUILayout.EnumPopup("Debug", debugOutput); }
public override void Unpack(string[] keywords) { if (HasFeature(keywords, DefineFeature._MAX2LAYER)) { perfMode = PerformanceMode.Fastest; } else if (HasFeature(keywords, DefineFeature._MAX3LAYER)) { perfMode = PerformanceMode.Balanced; } else { perfMode = PerformanceMode.BestQuality; } useCustomSplatMaps = (HasFeature(keywords, DefineFeature._CUSTOMSPLATTEXTURES)); packMode = HasFeature(keywords, DefineFeature._PACKINGHQ) ? TextureArrayConfig.PackingMode.Quality : TextureArrayConfig.PackingMode.Fastest; emissiveArray = HasFeature(keywords, DefineFeature._USEEMISSIVEMETAL); samplerMode = SamplerMode.Default; if (HasFeature(keywords, DefineFeature._USELODMIP)) { samplerMode = SamplerMode.LODSampler; } else if (HasFeature(keywords, DefineFeature._USEGRADMIP)) { samplerMode = SamplerMode.GradientSampler; } // force gradient sampling for stochastic mode if (samplerMode == SamplerMode.Default && System.Array.Exists(keywords, e => e == "_STOCHASTIC")) { samplerMode = SamplerMode.GradientSampler; } uvMode = HasFeature(keywords, DefineFeature._WORLDUV) ? UVMode.WorldSpace : UVMode.UV; /* * if (HasFeature(keywords, DefineFeature._SPHEREUVS)) * { * uvMode = UVMode.SphereUVs; * } */ perTexHeightOffset = HasFeature(keywords, DefineFeature._PERTEXHEIGHTOFFSET); perTexHeightContrast = HasFeature(keywords, DefineFeature._PERTEXHEIGHTCONTRAST); if (HasFeature(keywords, DefineFeature._MAX4TEXTURES)) { maxTextureCount = MaxTextureCount.Four; } else if (HasFeature(keywords, DefineFeature._MAX8TEXTURES)) { maxTextureCount = MaxTextureCount.Eight; } else if (HasFeature(keywords, DefineFeature._MAX12TEXTURES)) { maxTextureCount = MaxTextureCount.Twelve; } else if (HasFeature(keywords, DefineFeature._MAX20TEXTURES)) { maxTextureCount = MaxTextureCount.Twenty; } else if (HasFeature(keywords, DefineFeature._MAX24TEXTURES)) { maxTextureCount = MaxTextureCount.TwentyFour; } else if (HasFeature(keywords, DefineFeature._MAX28TEXTURES)) { maxTextureCount = MaxTextureCount.TwentyEight; } else if (HasFeature(keywords, DefineFeature._MAX32TEXTURES)) { maxTextureCount = MaxTextureCount.ThirtyTwo; } else { maxTextureCount = MaxTextureCount.Sixteen; } disableHeightBlend = HasFeature(keywords, DefineFeature._DISABLEHEIGHTBLENDING); lightingMode = LightingMode.Automatic; if (HasFeature(keywords, DefineFeature._BDRF1)) { lightingMode = LightingMode.StandardShader; } else if (HasFeature(keywords, DefineFeature._BDRF2)) { lightingMode = LightingMode.Simplified; } else if (HasFeature(keywords, DefineFeature._BDRF3)) { lightingMode = LightingMode.BlinnPhong; } else if (HasFeature(keywords, DefineFeature._BDRFLAMBERT)) { lightingMode = LightingMode.Lambert; } perTexUVScale = (HasFeature(keywords, DefineFeature._PERTEXUVSCALEOFFSET)); perTexInterpContrast = HasFeature(keywords, DefineFeature._PERTEXINTERPCONTRAST); perTexBrightness = HasFeature(keywords, DefineFeature._PERTEXBRIGHTNESS); perTexContrast = HasFeature(keywords, DefineFeature._PERTEXCONTRAST); perTexAOStr = (HasFeature(keywords, DefineFeature._PERTEXAOSTR)); perTexMetallic = (HasFeature(keywords, DefineFeature._PERTEXMETALLIC)); perTexNormStr = (HasFeature(keywords, DefineFeature._PERTEXNORMSTR)); perTexSmoothStr = (HasFeature(keywords, DefineFeature._PERTEXSMOOTHSTR)); perTexTint = (HasFeature(keywords, DefineFeature._PERTEXTINT)); shaderModel = ShaderModel.Automatic; if (HasFeature(keywords, DefineFeature._FORCEMODEL46)) { shaderModel = ShaderModel.Force46; } if (HasFeature(keywords, DefineFeature._FORCEMODEL50)) { shaderModel = ShaderModel.Force50; } debugOutput = DebugOutput.None; if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_ALBEDO)) { debugOutput = DebugOutput.Albedo; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_HEIGHT)) { debugOutput = DebugOutput.Height; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_NORMAL)) { debugOutput = DebugOutput.Normal; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_SMOOTHNESS)) { debugOutput = DebugOutput.Smoothness; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_METAL)) { debugOutput = DebugOutput.Metallic; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_AO)) { debugOutput = DebugOutput.AO; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_EMISSION)) { debugOutput = DebugOutput.Emission; } }
public override void Unpack(string[] keywords) { if (HasFeature(keywords, DefineFeature._MAX2LAYER)) { perfMode = PerformanceMode.Fastest; } else if (HasFeature(keywords, DefineFeature._MAX3LAYER)) { perfMode = PerformanceMode.Balanced; } else { perfMode = PerformanceMode.BestQuality; } useCustomSplatMaps = (HasFeature(keywords, DefineFeature._CUSTOMSPLATTEXTURES)); #if __MICROSPLAT_MESH__ || __MICROSPLAT_MESHTERRAIN__ workflow = Workflow.UnityTerrain; #endif #if __MICROSPLAT_MESH__ if (HasFeature(keywords, DefineFeature._MICROMESH)) { workflow = Workflow.Mesh; useCustomSplatMaps = false; } #endif #if __MICROSPLAT_MESHTERRAIN__ if (HasFeature(keywords, DefineFeature._MICROMESHTERRAIN)) { workflow = Workflow.MeshTerrain; useCustomSplatMaps = false; } #endif disableNormals = (HasFeature(keywords, DefineFeature._NONOMALMAP)); packMode = HasFeature(keywords, DefineFeature._PACKINGHQ) ? TextureArrayConfig.PackingMode.Quality : TextureArrayConfig.PackingMode.Fastest; emissiveArray = HasFeature(keywords, DefineFeature._USEEMISSIVEMETAL); samplerMode = SamplerMode.Default; if (HasFeature(keywords, DefineFeature._USELODMIP)) { samplerMode = SamplerMode.LODSampler; } else if (HasFeature(keywords, DefineFeature._USEGRADMIP)) { samplerMode = SamplerMode.GradientSampler; } // force gradient sampling for stochastic mode if (samplerMode == SamplerMode.Default && System.Array.Exists(keywords, e => e == "_STOCHASTIC")) { samplerMode = SamplerMode.GradientSampler; } perPixelNormal = HasFeature(keywords, DefineFeature._PERPIXNORMAL); uvMode = HasFeature(keywords, DefineFeature._WORLDUV) ? UVMode.WorldSpace : UVMode.UV; perTexHeightOffset = HasFeature(keywords, DefineFeature._PERTEXHEIGHTOFFSET); perTexHeightContrast = HasFeature(keywords, DefineFeature._PERTEXHEIGHTCONTRAST); if (HasFeature(keywords, DefineFeature._MAX4TEXTURES)) { maxTextureCount = MaxTextureCount.Four; } else if (HasFeature(keywords, DefineFeature._MAX8TEXTURES)) { maxTextureCount = MaxTextureCount.Eight; } else if (HasFeature(keywords, DefineFeature._MAX12TEXTURES)) { maxTextureCount = MaxTextureCount.Twelve; } else if (HasFeature(keywords, DefineFeature._MAX20TEXTURES)) { maxTextureCount = MaxTextureCount.Twenty; } else if (HasFeature(keywords, DefineFeature._MAX24TEXTURES)) { maxTextureCount = MaxTextureCount.TwentyFour; } else if (HasFeature(keywords, DefineFeature._MAX28TEXTURES)) { maxTextureCount = MaxTextureCount.TwentyEight; } else if (HasFeature(keywords, DefineFeature._MAX32TEXTURES)) { maxTextureCount = MaxTextureCount.ThirtyTwo; } else { maxTextureCount = MaxTextureCount.Sixteen; } disableHeightBlend = HasFeature(keywords, DefineFeature._DISABLEHEIGHTBLENDING); lightingMode = LightingMode.Automatic; if (HasFeature(keywords, DefineFeature._USESPECULARWORKFLOW)) { lightingMode = LightingMode.StandardShaderNoSheen; } else if (HasFeature(keywords, DefineFeature._BDRF1)) { lightingMode = LightingMode.StandardShader; } else if (HasFeature(keywords, DefineFeature._BDRF2)) { lightingMode = LightingMode.Simplified; } else if (HasFeature(keywords, DefineFeature._BDRF3)) { lightingMode = LightingMode.BlinnPhong; } else if (HasFeature(keywords, DefineFeature._BDRFLAMBERT)) { lightingMode = LightingMode.Lambert; } perTexUVScale = (HasFeature(keywords, DefineFeature._PERTEXUVSCALEOFFSET)); perTexUVRotation = (HasFeature(keywords, DefineFeature._PERTEXUVROTATION)); perTexInterpContrast = HasFeature(keywords, DefineFeature._PERTEXINTERPCONTRAST); perTexBrightness = HasFeature(keywords, DefineFeature._PERTEXBRIGHTNESS); perTexContrast = HasFeature(keywords, DefineFeature._PERTEXCONTRAST); perTexSaturation = HasFeature(keywords, DefineFeature._PERTEXSATURATION); perTexAOStr = (HasFeature(keywords, DefineFeature._PERTEXAOSTR)); perTexMetallic = (HasFeature(keywords, DefineFeature._PERTEXMETALLIC)); perTexNormStr = (HasFeature(keywords, DefineFeature._PERTEXNORMSTR)); perTexSmoothStr = (HasFeature(keywords, DefineFeature._PERTEXSMOOTHSTR)); perTexTint = (HasFeature(keywords, DefineFeature._PERTEXTINT)); shaderModel = ShaderModel.Automatic; if (HasFeature(keywords, DefineFeature._FORCEMODEL46)) { shaderModel = ShaderModel.Force46; } if (HasFeature(keywords, DefineFeature._FORCEMODEL50)) { shaderModel = ShaderModel.Force50; } debugOutput = DebugOutput.None; if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_ALBEDO)) { debugOutput = DebugOutput.Albedo; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_HEIGHT)) { debugOutput = DebugOutput.Height; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_NORMAL)) { debugOutput = DebugOutput.Normal; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_SMOOTHNESS)) { debugOutput = DebugOutput.Smoothness; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_METAL)) { debugOutput = DebugOutput.Metallic; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_AO)) { debugOutput = DebugOutput.AO; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_EMISSION)) { debugOutput = DebugOutput.Emission; } #if __MICROSPLAT_PROCTEX__ else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_SPLAT0)) { debugOutput = DebugOutput.ProceduralSplatOutput0; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_SPLAT1)) { debugOutput = DebugOutput.ProceduralSplatOutput1; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_SPLAT2)) { debugOutput = DebugOutput.ProceduralSplatOutput2; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_SPLAT3)) { debugOutput = DebugOutput.ProceduralSplatOutput3; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_SPLAT4)) { debugOutput = DebugOutput.ProceduralSplatOutput4; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_SPLAT5)) { debugOutput = DebugOutput.ProceduralSplatOutput5; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_SPLAT6)) { debugOutput = DebugOutput.ProceduralSplatOutput6; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_SPLAT7)) { debugOutput = DebugOutput.ProceduralSplatOutput7; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_SPLAT0A)) { debugOutput = DebugOutput.ProceduralSplatOutput0A; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_SPLAT1A)) { debugOutput = DebugOutput.ProceduralSplatOutput1A; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_SPLAT2A)) { debugOutput = DebugOutput.ProceduralSplatOutput2A; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_SPLAT3A)) { debugOutput = DebugOutput.ProceduralSplatOutput3A; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_SPLAT4A)) { debugOutput = DebugOutput.ProceduralSplatOutput4A; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_SPLAT5A)) { debugOutput = DebugOutput.ProceduralSplatOutput5A; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_SPLAT6A)) { debugOutput = DebugOutput.ProceduralSplatOutput6A; } else if (HasFeature(keywords, DefineFeature._DEBUG_OUTPUT_SPLAT7A)) { debugOutput = DebugOutput.ProceduralSplatOutput7A; } #endif }