Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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;
            }
        }
Esempio n. 5
0
        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
        }