123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- using System;
- using UnityEngine;
- using UnityEngine.Rendering;
- using UnityEditor.Rendering.Universal;
- namespace UnityEditor.Rendering.Universal.ShaderGUI
- {
- internal class LitShader : BaseShaderGUI
- {
- // Properties
- private LitGUI.LitProperties litProperties;
- // collect properties from the material properties
- public override void FindProperties(MaterialProperty[] properties)
- {
- base.FindProperties(properties);
- litProperties = new LitGUI.LitProperties(properties);
- }
- // material changed check
- public override void MaterialChanged(Material material)
- {
- if (material == null)
- throw new ArgumentNullException("material");
- SetMaterialKeywords(material, LitGUI.SetMaterialKeywords);
- }
- // material main surface options
- public override void DrawSurfaceOptions(Material material)
- {
- if (material == null)
- throw new ArgumentNullException("material");
- // Use default labelWidth
- EditorGUIUtility.labelWidth = 0f;
- // Detect any changes to the material
- EditorGUI.BeginChangeCheck();
- if (litProperties.workflowMode != null)
- {
- DoPopup(LitGUI.Styles.workflowModeText, litProperties.workflowMode, Enum.GetNames(typeof(LitGUI.WorkflowMode)));
- }
- if (EditorGUI.EndChangeCheck())
- {
- foreach (var obj in blendModeProp.targets)
- MaterialChanged((Material)obj);
- }
- base.DrawSurfaceOptions(material);
- }
- // material main surface inputs
- public override void DrawSurfaceInputs(Material material)
- {
- base.DrawSurfaceInputs(material);
- LitGUI.Inputs(litProperties, materialEditor, material);
- DrawEmissionProperties(material, true);
- DrawTileOffset(materialEditor, baseMapProp);
- }
- // material main advanced options
- public override void DrawAdvancedOptions(Material material)
- {
- if (litProperties.reflections != null && litProperties.highlights != null)
- {
- EditorGUI.BeginChangeCheck();
- materialEditor.ShaderProperty(litProperties.highlights, LitGUI.Styles.highlightsText);
- materialEditor.ShaderProperty(litProperties.reflections, LitGUI.Styles.reflectionsText);
- if(EditorGUI.EndChangeCheck())
- {
- MaterialChanged(material);
- }
- }
- base.DrawAdvancedOptions(material);
- }
- 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/"))
- {
- SetupMaterialBlendMode(material);
- return;
- }
- SurfaceType surfaceType = SurfaceType.Opaque;
- BlendMode blendMode = BlendMode.Alpha;
- if (oldShader.name.Contains("/Transparent/Cutout/"))
- {
- surfaceType = 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 = SurfaceType.Transparent;
- blendMode = BlendMode.Alpha;
- }
- material.SetFloat("_Surface", (float)surfaceType);
- material.SetFloat("_Blend", (float)blendMode);
- if (oldShader.name.Equals("Standard (Specular setup)"))
- {
- material.SetFloat("_WorkflowMode", (float)LitGUI.WorkflowMode.Specular);
- Texture texture = material.GetTexture("_SpecGlossMap");
- if (texture != null)
- material.SetTexture("_MetallicSpecGlossMap", texture);
- }
- else
- {
- material.SetFloat("_WorkflowMode", (float)LitGUI.WorkflowMode.Metallic);
- Texture texture = material.GetTexture("_MetallicGlossMap");
- if (texture != null)
- material.SetTexture("_MetallicSpecGlossMap", texture);
- }
- MaterialChanged(material);
- }
- }
- }
|