public override void AssignNewShaderToMaterial(Material material, Shader oldShader, Shader newShader) { if (material == null) { throw new ArgumentNullException("material"); } // _Emission property is lost after assigning Standard shader to the material // thus transfer it before assigning the new shader if (material.HasProperty("_Emission")) { material.SetColor("_EmissionColor", material.GetColor("_Emission")); } base.AssignNewShaderToMaterial(material, oldShader, newShader); if (oldShader == null || !oldShader.name.Contains("Legacy Shaders/")) { PSXMaterialUtils.SetupMaterialBlendMode(material); return; } PSXMaterialUtils.SurfaceType surfaceType = PSXMaterialUtils.SurfaceType.Opaque; PSXMaterialUtils.BlendMode blendMode = PSXMaterialUtils.BlendMode.AlphaPostmultiply; if (oldShader.name.Contains("/Transparent/Cutout/")) { surfaceType = PSXMaterialUtils.SurfaceType.Opaque; material.SetFloat("_AlphaClip", 1); } else if (oldShader.name.Contains("/Transparent/")) { // NOTE: legacy shaders did not provide physically based transparency // therefore Fade mode surfaceType = PSXMaterialUtils.SurfaceType.Transparent; blendMode = PSXMaterialUtils.BlendMode.AlphaPostmultiply; } material.SetFloat("_Surface", (float)surfaceType); material.SetFloat("_Blend", (float)blendMode); MaterialChanged(material); }