bool GenerateShaderPass(SimpleLitMasterNode masterNode, ShaderPass pass, GenerationMode mode, ShaderGenerator result, List <string> sourceAssetDependencyPaths) { UniversalShaderGraphUtilities.SetRenderState(masterNode.surfaceType, masterNode.alphaMode, masterNode.twoSided.isOn, ref pass); // apply master node options to active fields var activeFields = GetActiveFieldsFromMasterNode(masterNode, pass); return(ShaderGraph.GenerationUtils.GenerateShaderPass(masterNode, pass, mode, activeFields, result, sourceAssetDependencyPaths, UniversalShaderGraphResources.s_Dependencies, UniversalShaderGraphResources.s_ResourceClassName, UniversalShaderGraphResources.s_AssemblyName)); }
ActiveFields GetActiveFieldsFromMasterNode(SimpleLitMasterNode masterNode, ShaderPass pass) { var activeFields = new ActiveFields(); var baseActiveFields = activeFields.baseInstance; // Graph Vertex if (masterNode.IsSlotConnected(SimpleLitMasterNode.PositionSlotId) || masterNode.IsSlotConnected(SimpleLitMasterNode.VertNormalSlotId) || masterNode.IsSlotConnected(SimpleLitMasterNode.VertTangentSlotId)) { baseActiveFields.Add("features.graphVertex"); } // Graph Pixel (always enabled) baseActiveFields.Add("features.graphPixel"); if (masterNode.IsSlotConnected(SimpleLitMasterNode.AlphaThresholdSlotId) || masterNode.GetInputSlots <Vector1MaterialSlot>().First(x => x.id == SimpleLitMasterNode.AlphaThresholdSlotId).value > 0.0f) { baseActiveFields.Add("AlphaClip"); } if (masterNode.IsSlotConnected(SimpleLitMasterNode.NormalSlotId)) { baseActiveFields.Add("Normal"); } // Keywords for transparent // #pragma shader_feature _SURFACE_TYPE_TRANSPARENT if (masterNode.surfaceType != ShaderGraph.SurfaceType.Opaque) { // transparent-only defines baseActiveFields.Add("SurfaceType.Transparent"); // #pragma shader_feature _ _BLENDMODE_ALPHA _BLENDMODE_ADD _BLENDMODE_PRE_MULTIPLY if (masterNode.alphaMode == AlphaMode.Alpha) { baseActiveFields.Add("BlendMode.Alpha"); } else if (masterNode.alphaMode == AlphaMode.Additive) { baseActiveFields.Add("BlendMode.Add"); } else if (masterNode.alphaMode == AlphaMode.Premultiply) { baseActiveFields.Add("BlendMode.Premultiply"); } } return(activeFields); }
public SimpleLitSettingsView(SimpleLitMasterNode node) { m_Node = node; PropertySheet ps = new PropertySheet(); ps.Add(new PropertyRow(new Label("Surface")), (row) => { row.Add(new EnumField(SurfaceType.Opaque), (field) => { field.value = m_Node.surfaceType; field.RegisterValueChangedCallback(ChangeSurface); }); }); ps.Add(new PropertyRow(new Label("RenderQueue")), (row) => { row.Add(new EnumField(SurfaceMaterialTags.RenderQueue.Geometry), (field) => { field.value = m_Node.surfaceType; field.RegisterValueChangedCallback(ChangeRenderQueue); }); }); ps.Add(new PropertyRow(new Label("ZTest")), (row) => { row.Add(new EnumField(ZTest.LEqual), (field) => { field.value = m_Node.zTest; field.RegisterValueChangedCallback(ChangeZTest); }); }); ps.Add(new PropertyRow(new Label("ZWrite")), (row) => { row.Add(new EnumField(ZWrite.On), (field) => { field.value = m_Node.zWrite; field.RegisterValueChangedCallback(ChangeZWrite); }); }); ps.Add(new PropertyRow(new Label("Blend")), (row) => { row.Add(new EnumField(AlphaMode.Additive), (field) => { field.value = m_Node.alphaMode; field.RegisterValueChangedCallback(ChangeAlphaMode); }); }); ps.Add(new PropertyRow(new Label("Two Sided")), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.twoSided.isOn; toggle.OnToggleChanged(ChangeTwoSided); }); }); Add(ps); }