public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] properties) { this.materialEditor = materialEditor; material = materialEditor.target as Material; // Init Prop.Initialize(properties); Layout.Initialize(materialEditor); ShaderSetup.Initialize(materialEditor); if (!ShaderSetup.isProjector) { bmode = ShaderSetup.GetBlendMode(); } if (firstTimeApply) { ShaderSetup.MaterialChanged(); firstTimeApply = false; } EditorGUI.BeginChangeCheck(); DrawGUI(); if (EditorGUI.EndChangeCheck()) { ShaderSetup.MaterialChanged(); } }
void DrawGUI() { var renderModeDrawer = ShaderSetup.isProjector ? Prop._ModeProj : (ShaderSetup.isDX11 && !ShaderSetup.isUnlit ? null : Prop._ModeStd); if (Prop._Mode.Draw(0, renderModeDrawer)) { bmode = ShaderSetup.GetBlendMode(); ShaderSetup.SetZWrite(); //only set zwrite when changing the render mode, because there is a zwrite option in the GUI if (bmode == WFABlendMode.CutoutTwoSided) { Prop._Cull._int = (int)CullMode.Back; } } if (bmode == WFABlendMode.Cutout || bmode == WFABlendMode.CutoutTwoSided) { Prop._Cutoff.Draw(indentation: 2); } EditorGUILayout.Space(); if (Layout.BeginFold("Wireframe")) { DrawWireframeGUI(); } Layout.EndFold(); if (!ShaderSetup.isProjector) { if (Layout.BeginFold("Surface")) { DrawSurfaceGUI(); } Layout.EndFold(); } if (Layout.BeginFold("Glow")) { DrawGlowGUI(); } Layout.EndFold(); if (!ShaderSetup.isProjector && !ShaderSetup.isMobile) { if (Layout.BeginFold("Fade")) { DrawFadeGUI(); } Layout.EndFold(); } if (Layout.BeginFold("Preferences")) { DrawPrefGUI(); } Layout.EndFold(); }
static Material[] ApplyMaterials(Material[] materials) { if (materials == null || materials.Length == 0) { throw new MissingException("Materials are missing."); } for (int i = 0; i < materials.Length; i++) { var mat = materials[i]; if (mat == null) { throw new MissingException("Materials are missing."); } Material newMat; if (AssetDatabase.GetAssetPath(mat) == "Resources/unity_builtin_extra") { var matFolder = CreateFolder(dstFolder, "Materials"); var matDstPath = matFolder + "/" + Suffix(mat.name) + ".mat"; newMat = AssetDatabase.LoadAssetAtPath <Material>(matDstPath); if (newMat == null) { newMat = new Material(defaultShader); AssetDatabase.CreateAsset(newMat, matDstPath); newMat = AssetDatabase.LoadAssetAtPath <Material>(matDstPath); } } else { var matDstPath = SetupPaths(mat, isMaterial: true); newMat = CopyAssetUnlessExists <Material>(srcPath, matDstPath); newMat.shader = defaultShader; } var wireMode = BakeWindow.bakingMode; if (wireMode == BakingMode.AngleThreshold) { wireMode = BakingMode.Barycentric; } newMat.SetInt("_WMode", (int)wireMode); newMat.SetFloat("_Channel", (int)BakeWindow.channel); ShaderSetup.Initialize(newMat, newMat.shader); ShaderSetup.MaterialChanged(); materials[i] = newMat; } return(materials); }
public override void AssignNewShaderToMaterial(Material material, Shader oldShader, Shader newShader) { ShaderSetup.Initialize(material, newShader); if (ShaderSetup.isProjector) { material.SetFloat("_Mode", (float)WFABlendMode.Fade); base.AssignNewShaderToMaterial(material, oldShader, newShader); ShaderSetup.MaterialChanged(); return; } // _Emission property is lost after assigning this 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/")) { ShaderSetup.MaterialChanged(); return; } var blendMode = WFABlendMode.Opaque; if (oldShader.name.Contains("/Transparent/Cutout/")) { blendMode = WFABlendMode.Cutout; } else if (oldShader.name.Contains("/Transparent/")) { // NOTE: legacy shaders did not provide physically based transparency // therefore Fade mode blendMode = WFABlendMode.Fade; } material.SetFloat("_Mode", (float)blendMode); ShaderSetup.SetZWrite(); ShaderSetup.MaterialChanged(); }