public override string ToString() { return(string.Format("{0} {1}, {2}{3}", TypeDescription, Operand, SamplerMode.GetDescription(), IsSM51 ? $", space={SpaceIndex}" : "")); }
public override void DrawFeatureGUI(Material mat) { perfMode = (PerformanceMode)EditorGUILayout.EnumPopup(CShaderPerfMode, perfMode); maxTextureCount = (MaxTextureCount)EditorGUILayout.EnumPopup(CMaxTexCount, maxTextureCount); 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(Material mat) { bool isSurfaceShader = mat.IsKeywordEnabled("_MSRENDERLOOP_SURFACESHADER"); 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); disableNormals = EditorGUILayout.Toggle(CDisableNormals, disableNormals); 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 string[] Pack() { List <string> features = new List <string>(); features.Add(GetFeatureName(DefineFeature._MICROSPLAT)); if (perTexUVScale && samplerMode == SamplerMode.Default) { samplerMode = SamplerMode.GradientSampler; } if (useCustomSplatMaps) { features.Add(GetFeatureName(DefineFeature._CUSTOMSPLATTEXTURES)); } if (samplerMode == SamplerMode.LODSampler) { features.Add(GetFeatureName(DefineFeature._USELODMIP)); } else if (samplerMode == SamplerMode.GradientSampler) { features.Add(GetFeatureName(DefineFeature._USEGRADMIP)); } if (packMode == TextureArrayConfig.PackingMode.Quality) { features.Add(GetFeatureName(DefineFeature._PACKINGHQ)); } if (emissiveArray) { features.Add(GetFeatureName(DefineFeature._USEEMISSIVEMETAL)); } if (perfMode == PerformanceMode.Balanced) { features.Add(GetFeatureName(DefineFeature._MAX3LAYER)); } else if (perfMode == PerformanceMode.Fastest) { features.Add(GetFeatureName(DefineFeature._MAX2LAYER)); } if (disableHeightBlend) { features.Add(GetFeatureName(DefineFeature._DISABLEHEIGHTBLENDING)); } if (maxTextureCount == MaxTextureCount.Four) { features.Add(GetFeatureName(DefineFeature._MAX4TEXTURES)); } else if (maxTextureCount == MaxTextureCount.Eight) { features.Add(GetFeatureName(DefineFeature._MAX8TEXTURES)); } else if (maxTextureCount == MaxTextureCount.Twelve) { features.Add(GetFeatureName(DefineFeature._MAX12TEXTURES)); } else if (maxTextureCount == MaxTextureCount.Twenty) { features.Add(GetFeatureName(DefineFeature._MAX20TEXTURES)); } else if (maxTextureCount == MaxTextureCount.TwentyFour) { features.Add(GetFeatureName(DefineFeature._MAX24TEXTURES)); } else if (maxTextureCount == MaxTextureCount.TwentyEight) { features.Add(GetFeatureName(DefineFeature._MAX28TEXTURES)); } else if (maxTextureCount == MaxTextureCount.ThirtyTwo) { features.Add(GetFeatureName(DefineFeature._MAX32TEXTURES)); } if (lightingMode == LightingMode.StandardShader) { features.Add(GetFeatureName(DefineFeature._BDRF1)); } else if (lightingMode == LightingMode.Simplified) { features.Add(GetFeatureName(DefineFeature._BDRF2)); } else if (lightingMode == LightingMode.BlinnPhong) { features.Add(GetFeatureName(DefineFeature._BDRF3)); } else if (lightingMode == LightingMode.Lambert) { features.Add(GetFeatureName(DefineFeature._BDRFLAMBERT)); } if (perTexUVScale) { features.Add(GetFeatureName(DefineFeature._PERTEXUVSCALEOFFSET)); } if (perTexHeightOffset) { features.Add(GetFeatureName(DefineFeature._PERTEXHEIGHTOFFSET)); } if (perTexHeightContrast) { features.Add(GetFeatureName(DefineFeature._PERTEXHEIGHTCONTRAST)); } if (uvMode == UVMode.WorldSpace) { features.Add(GetFeatureName(DefineFeature._WORLDUV)); } /* * else if (uvMode == UVMode.SphereUVs) * { * features.Add(GetFeatureName(DefineFeature._SPHEREUVS)); * } */ if (perTexInterpContrast) { features.Add(GetFeatureName(DefineFeature._PERTEXINTERPCONTRAST)); } if (perTexTint) { features.Add(GetFeatureName(DefineFeature._PERTEXTINT)); } if (perTexBrightness) { features.Add(GetFeatureName(DefineFeature._PERTEXBRIGHTNESS)); } if (perTexContrast) { features.Add(GetFeatureName(DefineFeature._PERTEXCONTRAST)); } if (perTexAOStr) { features.Add(GetFeatureName(DefineFeature._PERTEXAOSTR)); } if (perTexNormStr) { features.Add(GetFeatureName(DefineFeature._PERTEXNORMSTR)); } if (perTexSmoothStr) { features.Add(GetFeatureName(DefineFeature._PERTEXSMOOTHSTR)); } if (perTexMetallic) { features.Add(GetFeatureName(DefineFeature._PERTEXMETALLIC)); } if (shaderModel != ShaderModel.Automatic) { if (shaderModel == ShaderModel.Force46) { features.Add(GetFeatureName(DefineFeature._FORCEMODEL46)); } else { features.Add(GetFeatureName(DefineFeature._FORCEMODEL50)); } } if (debugOutput != DebugOutput.None) { if (debugOutput == DebugOutput.Albedo) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_ALBEDO)); } else if (debugOutput == DebugOutput.Height) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_HEIGHT)); } else if (debugOutput == DebugOutput.Normal) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_NORMAL)); } else if (debugOutput == DebugOutput.Metallic) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_METAL)); } else if (debugOutput == DebugOutput.Smoothness) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_SMOOTHNESS)); } else if (debugOutput == DebugOutput.AO) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_AO)); } else if (debugOutput == DebugOutput.Emission) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_EMISSION)); } } return(features.ToArray()); }
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; } 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; } uvMode = HasFeature(keywords, DefineFeature._WORLDUV) ? UVMode.WorldSpace : UVMode.UV; 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; } 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 }
public override string[] Pack() { List <string> features = new List <string>(); features.Add(GetFeatureName(DefineFeature._MICROSPLAT)); #if __MICROSPLAT_MESHTERRAIN__ if (workflow == Workflow.MeshTerrain) { features.Add(GetFeatureName(DefineFeature._MICROMESHTERRAIN)); } #endif #if __MICROSPLAT_MESH__ if (workflow == Workflow.Mesh) { features.Add(GetFeatureName(DefineFeature._MICROMESH)); } #endif if (perTexUVScale && samplerMode == SamplerMode.Default) { samplerMode = SamplerMode.GradientSampler; } if (useCustomSplatMaps) { features.Add(GetFeatureName(DefineFeature._CUSTOMSPLATTEXTURES)); } if (disableNormals) { features.Add(GetFeatureName(DefineFeature._NONOMALMAP)); } if (samplerMode == SamplerMode.LODSampler) { features.Add(GetFeatureName(DefineFeature._USELODMIP)); } else if (samplerMode == SamplerMode.GradientSampler) { features.Add(GetFeatureName(DefineFeature._USEGRADMIP)); } if (packMode == TextureArrayConfig.PackingMode.Quality) { features.Add(GetFeatureName(DefineFeature._PACKINGHQ)); } if (emissiveArray) { features.Add(GetFeatureName(DefineFeature._USEEMISSIVEMETAL)); } if (perfMode == PerformanceMode.Balanced) { features.Add(GetFeatureName(DefineFeature._MAX3LAYER)); } else if (perfMode == PerformanceMode.Fastest) { features.Add(GetFeatureName(DefineFeature._MAX2LAYER)); } if (disableHeightBlend) { features.Add(GetFeatureName(DefineFeature._DISABLEHEIGHTBLENDING)); } if (maxTextureCount == MaxTextureCount.Four) { features.Add(GetFeatureName(DefineFeature._MAX4TEXTURES)); } else if (maxTextureCount == MaxTextureCount.Eight) { features.Add(GetFeatureName(DefineFeature._MAX8TEXTURES)); } else if (maxTextureCount == MaxTextureCount.Twelve) { features.Add(GetFeatureName(DefineFeature._MAX12TEXTURES)); } else if (maxTextureCount == MaxTextureCount.Twenty) { features.Add(GetFeatureName(DefineFeature._MAX20TEXTURES)); } else if (maxTextureCount == MaxTextureCount.TwentyFour) { features.Add(GetFeatureName(DefineFeature._MAX24TEXTURES)); } else if (maxTextureCount == MaxTextureCount.TwentyEight) { features.Add(GetFeatureName(DefineFeature._MAX28TEXTURES)); } else if (maxTextureCount == MaxTextureCount.ThirtyTwo) { features.Add(GetFeatureName(DefineFeature._MAX32TEXTURES)); } if (perPixelNormal) { features.Add(GetFeatureName(DefineFeature._PERPIXNORMAL)); } if (lightingMode == LightingMode.StandardShaderNoSheen) { features.Add(GetFeatureName(DefineFeature._USESPECULARWORKFLOW)); } else if (lightingMode == LightingMode.StandardShader) { features.Add(GetFeatureName(DefineFeature._BDRF1)); } else if (lightingMode == LightingMode.Simplified) { features.Add(GetFeatureName(DefineFeature._BDRF2)); } else if (lightingMode == LightingMode.BlinnPhong) { features.Add(GetFeatureName(DefineFeature._BDRF3)); } else if (lightingMode == LightingMode.Lambert) { features.Add(GetFeatureName(DefineFeature._BDRFLAMBERT)); } if (perTexUVScale) { features.Add(GetFeatureName(DefineFeature._PERTEXUVSCALEOFFSET)); } if (perTexUVRotation) { features.Add(GetFeatureName(DefineFeature._PERTEXUVROTATION)); } if (perTexHeightOffset) { features.Add(GetFeatureName(DefineFeature._PERTEXHEIGHTOFFSET)); } if (perTexHeightContrast) { features.Add(GetFeatureName(DefineFeature._PERTEXHEIGHTCONTRAST)); } if (uvMode == UVMode.WorldSpace) { features.Add(GetFeatureName(DefineFeature._WORLDUV)); } if (perTexSaturation) { features.Add(GetFeatureName(DefineFeature._PERTEXSATURATION)); } if (perTexInterpContrast) { features.Add(GetFeatureName(DefineFeature._PERTEXINTERPCONTRAST)); } if (perTexTint) { features.Add(GetFeatureName(DefineFeature._PERTEXTINT)); } if (perTexBrightness) { features.Add(GetFeatureName(DefineFeature._PERTEXBRIGHTNESS)); } if (perTexContrast) { features.Add(GetFeatureName(DefineFeature._PERTEXCONTRAST)); } if (perTexAOStr) { features.Add(GetFeatureName(DefineFeature._PERTEXAOSTR)); } if (perTexNormStr) { features.Add(GetFeatureName(DefineFeature._PERTEXNORMSTR)); } if (perTexSmoothStr) { features.Add(GetFeatureName(DefineFeature._PERTEXSMOOTHSTR)); } if (perTexMetallic) { features.Add(GetFeatureName(DefineFeature._PERTEXMETALLIC)); } if (shaderModel != ShaderModel.Automatic) { if (shaderModel == ShaderModel.Force46) { features.Add(GetFeatureName(DefineFeature._FORCEMODEL46)); } else { features.Add(GetFeatureName(DefineFeature._FORCEMODEL50)); } } if (debugOutput != DebugOutput.None) { if (debugOutput == DebugOutput.Albedo) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_ALBEDO)); } else if (debugOutput == DebugOutput.Height) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_HEIGHT)); } else if (debugOutput == DebugOutput.Normal) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_NORMAL)); } else if (debugOutput == DebugOutput.Metallic) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_METAL)); } else if (debugOutput == DebugOutput.Smoothness) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_SMOOTHNESS)); } else if (debugOutput == DebugOutput.AO) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_AO)); } else if (debugOutput == DebugOutput.Emission) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_EMISSION)); } #if __MICROSPLAT_PROCTEX__ else if (debugOutput == DebugOutput.ProceduralSplatOutput0) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_SPLAT0)); } else if (debugOutput == DebugOutput.ProceduralSplatOutput1) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_SPLAT1)); } else if (debugOutput == DebugOutput.ProceduralSplatOutput2) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_SPLAT2)); } else if (debugOutput == DebugOutput.ProceduralSplatOutput3) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_SPLAT3)); } else if (debugOutput == DebugOutput.ProceduralSplatOutput4) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_SPLAT4)); } else if (debugOutput == DebugOutput.ProceduralSplatOutput5) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_SPLAT5)); } else if (debugOutput == DebugOutput.ProceduralSplatOutput6) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_SPLAT6)); } else if (debugOutput == DebugOutput.ProceduralSplatOutput7) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_SPLAT7)); } else if (debugOutput == DebugOutput.ProceduralSplatOutput0A) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_SPLAT0A)); } else if (debugOutput == DebugOutput.ProceduralSplatOutput1A) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_SPLAT1A)); } else if (debugOutput == DebugOutput.ProceduralSplatOutput2A) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_SPLAT2A)); } else if (debugOutput == DebugOutput.ProceduralSplatOutput3A) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_SPLAT3A)); } else if (debugOutput == DebugOutput.ProceduralSplatOutput4A) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_SPLAT4A)); } else if (debugOutput == DebugOutput.ProceduralSplatOutput5A) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_SPLAT5A)); } else if (debugOutput == DebugOutput.ProceduralSplatOutput6A) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_SPLAT6A)); } else if (debugOutput == DebugOutput.ProceduralSplatOutput7A) { features.Add(GetFeatureName(DefineFeature._DEBUG_OUTPUT_SPLAT7A)); } #endif } return(features.ToArray()); }