/// <summary>
        /// Change the blend mode of a Standard material at runtime.
        /// </summary>
        public static void SetBlendMode(
            Material material,
            CustomBlendMode blendMode,
            CustomSmoothnessMapChannel smoothnessChannel,
            float metallic,
            float glossiness)
        {
            // Set properties
            material.SetFloat("_Mode", (int)blendMode);
            material.SetFloat("_SmoothnessTextureChannel", (int)smoothnessChannel);
            material.SetFloat("_Metallic", metallic);
            material.SetFloat("_Glossiness", glossiness);

            switch (blendMode)
            {
            case CustomBlendMode.Opaque:
                material.SetOverrideTag("RenderType", "");
                material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
                material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
                material.SetInt("_ZWrite", 1);
                material.DisableKeyword("_ALPHATEST_ON");
                material.DisableKeyword("_ALPHABLEND_ON");
                material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
                material.renderQueue = -1;
                break;

            case CustomBlendMode.Cutout:
                material.SetOverrideTag("RenderType", "TransparentCutout");
                material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
                material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
                material.SetInt("_ZWrite", 1);
                material.EnableKeyword("_ALPHATEST_ON");
                material.DisableKeyword("_ALPHABLEND_ON");
                material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
                material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.AlphaTest;
                break;

            case CustomBlendMode.Fade:
                material.SetOverrideTag("RenderType", "Transparent");
                material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
                material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
                material.SetInt("_ZWrite", 0);
                material.DisableKeyword("_ALPHATEST_ON");
                material.EnableKeyword("_ALPHABLEND_ON");
                material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
                material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.Transparent;
                break;

            case CustomBlendMode.Transparent:
                material.SetOverrideTag("RenderType", "Transparent");
                material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
                material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
                material.SetInt("_ZWrite", 0);
                material.DisableKeyword("_ALPHATEST_ON");
                material.DisableKeyword("_ALPHABLEND_ON");
                material.EnableKeyword("_ALPHAPREMULTIPLY_ON");
                material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.Transparent;
                break;
            }
        }
Example #2
0
        /// <summary>
        /// Change the blend mode of a Standard material at runtime.
        /// </summary>
        public static void SetBlendMode(
            Material material,
            CustomBlendMode blendMode,
            CustomSmoothnessMapChannel smoothnessChannel,
            float metallic,
            float glossiness)
        {
            // Set properties
            material.SetFloat(Uniforms.Mode, (int)blendMode);
            material.SetFloat(Uniforms.SmoothnessTextureChannel, (int)smoothnessChannel);
            material.SetFloat(Uniforms.Metallic, metallic);
            material.SetFloat(Uniforms.Glossiness, glossiness);

            switch (blendMode)
            {
            case CustomBlendMode.Opaque:
                material.SetOverrideTag("RenderType", "");
                material.SetInt(Uniforms.SrcBlend, (int)UnityEngine.Rendering.BlendMode.One);
                material.SetInt(Uniforms.DstBlend, (int)UnityEngine.Rendering.BlendMode.Zero);
                material.SetInt(Uniforms.ZWrite, 1);
                material.DisableKeyword(KeyWords.CutOut);
                material.DisableKeyword(KeyWords.Fade);
                material.DisableKeyword(KeyWords.Transparent);
                material.renderQueue = -1;
                break;

            case CustomBlendMode.Cutout:
                material.SetOverrideTag("RenderType", "TransparentCutout");
                material.SetInt(Uniforms.SrcBlend, (int)UnityEngine.Rendering.BlendMode.One);
                material.SetInt(Uniforms.DstBlend, (int)UnityEngine.Rendering.BlendMode.Zero);
                material.SetInt(Uniforms.ZWrite, 1);
                material.EnableKeyword(KeyWords.CutOut);
                material.DisableKeyword(KeyWords.Fade);
                material.DisableKeyword(KeyWords.Transparent);
                material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.AlphaTest;
                break;

            case CustomBlendMode.Fade:
                material.SetOverrideTag("RenderType", "Transparent");
                material.SetInt(Uniforms.SrcBlend, (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
                material.SetInt(Uniforms.DstBlend, (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
                material.SetInt(Uniforms.ZWrite, 0);
                material.DisableKeyword(KeyWords.CutOut);
                material.EnableKeyword(KeyWords.Fade);
                material.DisableKeyword(KeyWords.Transparent);
                material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.Transparent;
                break;

            case CustomBlendMode.Transparent:
                material.SetOverrideTag("RenderType", "Transparent");
                material.SetInt(Uniforms.SrcBlend, (int)UnityEngine.Rendering.BlendMode.One);
                material.SetInt(Uniforms.DstBlend, (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
                material.SetInt(Uniforms.ZWrite, 0);
                material.DisableKeyword(KeyWords.CutOut);
                material.DisableKeyword(KeyWords.Fade);
                material.EnableKeyword(KeyWords.Transparent);
                material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.Transparent;
                break;
            }
        }
Example #3
0
        /// <summary>
        /// Creates new Standard material with default properties suitable for most Daggerfall textures.
        /// </summary>
        /// <returns></returns>
        public static Material CreateStandardMaterial(CustomBlendMode blendMode = CustomBlendMode.Opaque, float metallic = 0, float glossiness = 0)
        {
            // Create material
            Shader   shader   = Shader.Find(_StandardShaderName);
            Material material = new Material(shader);

            // Set properties
            material.SetFloat("_Metallic", metallic);
            material.SetFloat("_Glossiness", glossiness);
            SetBlendMode(material, blendMode);

            return(material);
        }
Example #4
0
        ///// <summary>
        ///// TEMP: Gets a special misc billboards super-atlas for scene builders.
        ///// </summary>
        //public TextureAtlasBuilder MiscBillboardAtlas
        //{
        //    get
        //    {
        //        // Create new atlas or return existing
        //        if (miscBillboardsAtlas == null)
        //        {
        //            if (!IsReady)
        //                return null;

        //            miscBillboardsAtlas = textureReader.CreateTextureAtlasBuilder(
        //                textureReader.MiscFlatsTextureArchives,
        //                2,
        //                true,
        //                DaggerfallUnity.Settings.MeshAndTextureReplacement ? 4096 : 2048,
        //                AlphaTextureFormat,
        //                NonAlphaTextureFormat);

        //            return miscBillboardsAtlas;
        //        }
        //        else
        //        {
        //            return miscBillboardsAtlas;
        //        }
        //    }
        //}

        #endregion

        #region Material Creation

        /// <summary>
        /// Creates new Standard material with default properties suitable for most Daggerfall textures.
        /// </summary>
        /// <returns></returns>
        public static Material CreateStandardMaterial(
            CustomBlendMode blendMode = CustomBlendMode.Opaque,
            CustomSmoothnessMapChannel smoothnessChannel = CustomSmoothnessMapChannel.AlbedoAlpha,
            float metallic   = 0,
            float glossiness = 0)
        {
            // Create material
            Shader   shader   = Shader.Find(_StandardShaderName);
            Material material = new Material(shader);

            // Set blend mode
            SetBlendMode(material, blendMode, smoothnessChannel, metallic, glossiness);

            return(material);
        }
Example #5
0
        /// <summary>
        /// Change the blend mode of a Standard material at runtime.
        /// </summary>
        public static void SetBlendMode(Material material, CustomBlendMode blendMode)
        {
            material.SetFloat("_Mode", (int)blendMode);
            switch (blendMode)
            {
            case CustomBlendMode.Opaque:
                material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
                material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
                material.SetInt("_ZWrite", 1);
                material.DisableKeyword("_ALPHATEST_ON");
                material.DisableKeyword("_ALPHABLEND_ON");
                material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
                material.renderQueue = -1;
                break;

            case CustomBlendMode.Cutout:
                material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
                material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
                material.SetInt("_ZWrite", 1);
                material.EnableKeyword("_ALPHATEST_ON");
                material.DisableKeyword("_ALPHABLEND_ON");
                material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
                material.renderQueue = 2450;
                break;

            case CustomBlendMode.Fade:
                material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
                material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
                material.SetInt("_ZWrite", 0);
                material.DisableKeyword("_ALPHATEST_ON");
                material.EnableKeyword("_ALPHABLEND_ON");
                material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
                material.renderQueue = 3000;
                break;

            case CustomBlendMode.Transparent:
                material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
                material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
                material.SetInt("_ZWrite", 0);
                material.DisableKeyword("_ALPHATEST_ON");
                material.DisableKeyword("_ALPHABLEND_ON");
                material.EnableKeyword("_ALPHAPREMULTIPLY_ON");
                material.renderQueue = 3000;
                break;
            }
        }
 /// <summary>
 /// Change the blend mode of a Standard material at runtime.
 /// </summary>
 public static void SetBlendMode(Material material, CustomBlendMode blendMode)
 {
     material.SetFloat("_Mode", (int)blendMode);
     switch (blendMode)
     {
         case CustomBlendMode.Opaque:
             material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
             material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
             material.SetInt("_ZWrite", 1);
             material.DisableKeyword("_ALPHATEST_ON");
             material.DisableKeyword("_ALPHABLEND_ON");
             material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
             material.renderQueue = -1;
             break;
         case CustomBlendMode.Cutout:
             material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
             material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
             material.SetInt("_ZWrite", 1);
             material.EnableKeyword("_ALPHATEST_ON");
             material.DisableKeyword("_ALPHABLEND_ON");
             material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
             material.renderQueue = 2450;
             break;
         case CustomBlendMode.Fade:
             material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
             material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
             material.SetInt("_ZWrite", 0);
             material.DisableKeyword("_ALPHATEST_ON");
             material.EnableKeyword("_ALPHABLEND_ON");
             material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
             material.renderQueue = 3000;
             break;
         case CustomBlendMode.Transparent:
             material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
             material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
             material.SetInt("_ZWrite", 0);
             material.DisableKeyword("_ALPHATEST_ON");
             material.DisableKeyword("_ALPHABLEND_ON");
             material.EnableKeyword("_ALPHAPREMULTIPLY_ON");
             material.renderQueue = 3000;
             break;
     }
 }
        /// <summary>
        /// Creates new Standard material with default properties suitable for most Daggerfall textures.
        /// </summary>
        /// <returns></returns>
        public static Material CreateStandardMaterial(CustomBlendMode blendMode = CustomBlendMode.Opaque, float metallic = 0, float glossiness = 0)
        {
            // Create material
            Shader shader = Shader.Find(_StandardShaderName);
            Material material = new Material(shader);

            // Set properties
            material.SetFloat("_Metallic", metallic);
            material.SetFloat("_Glossiness", glossiness);
            SetBlendMode(material, blendMode);

            return material;
        }
        /// <summary>
        /// Change the blend mode of a Standard material at runtime.
        /// </summary>
        public static void SetBlendMode(
            Material material,
            CustomBlendMode blendMode,
            CustomSmoothnessMapChannel smoothnessChannel,
            float metallic,
            float glossiness)
        {
            // Set properties
            material.SetFloat("_Mode", (int)blendMode);
            material.SetFloat("_SmoothnessTextureChannel", (int)smoothnessChannel);
            material.SetFloat("_Metallic", metallic);
            material.SetFloat("_Glossiness", glossiness);

            switch (blendMode)
            {
                case CustomBlendMode.Opaque:
                    material.SetOverrideTag("RenderType", "");
                    material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
                    material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
                    material.SetInt("_ZWrite", 1);
                    material.DisableKeyword("_ALPHATEST_ON");
                    material.DisableKeyword("_ALPHABLEND_ON");
                    material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
                    material.renderQueue = -1;
                    break;
                case CustomBlendMode.Cutout:
                    material.SetOverrideTag("RenderType", "TransparentCutout");
                    material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
                    material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
                    material.SetInt("_ZWrite", 1);
                    material.EnableKeyword("_ALPHATEST_ON");
                    material.DisableKeyword("_ALPHABLEND_ON");
                    material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
                    material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.AlphaTest;
                    break;
                case CustomBlendMode.Fade:
                    material.SetOverrideTag("RenderType", "Transparent");
                    material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
                    material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
                    material.SetInt("_ZWrite", 0);
                    material.DisableKeyword("_ALPHATEST_ON");
                    material.EnableKeyword("_ALPHABLEND_ON");
                    material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
                    material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.Transparent;
                    break;
                case CustomBlendMode.Transparent:
                    material.SetOverrideTag("RenderType", "Transparent");
                    material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
                    material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
                    material.SetInt("_ZWrite", 0);
                    material.DisableKeyword("_ALPHATEST_ON");
                    material.DisableKeyword("_ALPHABLEND_ON");
                    material.EnableKeyword("_ALPHAPREMULTIPLY_ON");
                    material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.Transparent;
                    break;
            }
        }
        /// <summary>
        /// Creates new Standard material with default properties suitable for most Daggerfall textures.
        /// </summary>
        /// <returns></returns>
        public static Material CreateStandardMaterial(
            CustomBlendMode blendMode = CustomBlendMode.Opaque,
            CustomSmoothnessMapChannel smoothnessChannel = CustomSmoothnessMapChannel.AlbedoAlpha,
            float metallic = 0,
            float glossiness = 1)
        {
            // Create material
            Shader shader = Shader.Find(_StandardShaderName);
            Material material = new Material(shader);

            // Set blend mode
            SetBlendMode(material, blendMode, smoothnessChannel, metallic, glossiness);

            return material;
        }