/// <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> /// 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; } }
/// <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> ///// 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); }
/// <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> /// 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; }