public DecalSettingsView(DecalMasterNode node) { m_Node = node; PropertySheet ps = new PropertySheet(); int indentLevel = 0; ps.Add(new PropertyRow(CreateLabel("Affect Metal", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.affectsMetal.isOn; toggle.RegisterValueChangedCallback(ChangeAffectsMetal); }); }); ps.Add(new PropertyRow(CreateLabel("Affect AO", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.affectsAO.isOn; toggle.RegisterValueChangedCallback(ChangeAffectsAO); }); }); ps.Add(new PropertyRow(CreateLabel("Affect Smoothness", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.affectsSmoothness.isOn; toggle.RegisterValueChangedCallback(ChangeAffectsSmoothness); }); }); Add(ps); }
VisualElement CreateGUI(CustomFunctionNode node, InspectableAttribute attribute, out VisualElement propertyVisualElement) { var propertySheet = new PropertySheet(PropertyDrawerUtils.CreateLabel($"{node.name} Node", 0, FontStyle.Bold)); PropertyDrawerUtils.AddDefaultNodeProperties(propertySheet, node, m_setNodesAsDirtyCallback, m_updateNodeViewsCallback); var inputListView = new ReorderableSlotListView(node, SlotType.Input, true); inputListView.OnAddCallback += list => inspectorUpdateDelegate(); inputListView.OnRemoveCallback += list => inspectorUpdateDelegate(); inputListView.OnListRecreatedCallback += () => inspectorUpdateDelegate(); propertySheet.Add(inputListView); var outputListView = new ReorderableSlotListView(node, SlotType.Output, true); outputListView.OnAddCallback += list => inspectorUpdateDelegate(); outputListView.OnRemoveCallback += list => inspectorUpdateDelegate(); outputListView.OnListRecreatedCallback += () => inspectorUpdateDelegate(); propertySheet.Add(outputListView); propertySheet.Add(new HlslFunctionView(node)); propertyVisualElement = null; return(propertySheet); }
public VisualElement CreateSettingsElement() { PropertySheet ps = new PropertySheet(); ps.Add(new ReorderableSlotListView(this, SlotType.Input)); return(ps); }
static void AddPropertyRowToSheet(PropertySheet propertySheet, VisualElement control, string labelName) { propertySheet.Add(new PropertyRow(new Label(labelName)), (row) => { row.styleSheets.Add(Resources.Load <StyleSheet>("Styles/PropertyRow")); row.Add(control); }); }
public ToonSettingsView(ToonMasterNode node) { m_Node = node; PropertySheet ps = new PropertySheet(); ps.Add(new PropertyRow(new Label("Workflow")), (row) => { row.Add(new EnumField(ToonMasterNode.Model.Metallic), (field) => { field.value = m_Node.model; field.RegisterValueChangedCallback(ChangeWorkFlow); }); }); 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("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); }
VisualElement CreateGUI(SubGraphOutputNode node, InspectableAttribute attribute, out VisualElement propertyVisualElement) { var propertySheet = new PropertySheet(PropertyDrawerUtils.CreateLabel($"{node.name} Node", 0, FontStyle.Bold)); var inputListView = new ReorderableSlotListView(node, SlotType.Input); inputListView.OnAddCallback += list => inspectorUpdateDelegate(); inputListView.OnRemoveCallback += list => inspectorUpdateDelegate(); inputListView.OnListRecreatedCallback += () => inspectorUpdateDelegate(); propertySheet.Add(inputListView); propertyVisualElement = propertySheet; return(propertySheet); }
public SettingsView(VfxMasterNode node) { m_Node = node; PropertySheet ps = new PropertySheet(); ps.Add(new PropertyRow(new Label("Alpha Mask")), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.alphaTest.isOn; toggle.OnToggleChanged(ChangeAlphaTest); }); }); ps.Add(new PropertyRow(new Label("Lit")), (System.Action <PropertyRow>)((row) => { row.Add(new Toggle(), (System.Action <Toggle>)((toggle) => { toggle.value = m_Node.lit.isOn; toggle.OnToggleChanged(this.ChangeLit); })); })); Add(ps); }
VisualElement CreateGUI(SubGraphOutputNode node, InspectableAttribute attribute, out VisualElement propertyVisualElement) { var propertySheet = new PropertySheet(PropertyDrawerUtils.CreateLabel($"{node.name} Node", 0, FontStyle.Bold)); PropertyDrawerUtils.AddDefaultNodeProperties(propertySheet, node, m_setNodesAsDirtyCallback, m_updateNodeViewsCallback); var inputListView = new ReorderableSlotListView(node, SlotType.Input, false); inputListView.OnAddCallback += list => inspectorUpdateDelegate(); inputListView.OnRemoveCallback += list => inspectorUpdateDelegate(); inputListView.OnListRecreatedCallback += () => inspectorUpdateDelegate(); inputListView.AllowedTypeCallback = SlotValueHelper.AllowedAsSubgraphOutput; propertySheet.Add(inputListView); propertyVisualElement = propertySheet; return(propertySheet); }
public HDLitSettingsView(HDLitMasterNode node) { m_Node = node; PropertySheet ps = new PropertySheet(); int indentLevel = 0; ps.Add(new PropertyRow(CreateLabel("Surface Type", indentLevel)), (row) => { row.Add(new EnumField(SurfaceType.Opaque), (field) => { field.value = m_Node.surfaceType; field.RegisterValueChangedCallback(ChangeSurfaceType); }); }); if (m_Node.surfaceType == SurfaceType.Transparent) { ++indentLevel; if (!m_Node.HasRefraction()) { ps.Add(new PropertyRow(CreateLabel("Blending Mode", indentLevel)), (row) => { row.Add(new EnumField(HDLitMasterNode.AlphaModeLit.Additive), (field) => { field.value = GetAlphaModeLit(m_Node.alphaMode); field.RegisterValueChangedCallback(ChangeBlendMode); }); }); ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Preserve Specular Lighting", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.blendPreserveSpecular.isOn; toggle.OnToggleChanged(ChangeBlendPreserveSpecular); }); }); --indentLevel; } m_SortPiorityField = new IntegerField(); ps.Add(new PropertyRow(CreateLabel("Sorting Priority", indentLevel)), (row) => { row.Add(m_SortPiorityField, (field) => { field.value = m_Node.sortPriority; field.RegisterValueChangedCallback(ChangeSortPriority); }); }); ps.Add(new PropertyRow(CreateLabel("Receive Fog", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.transparencyFog.isOn; toggle.OnToggleChanged(ChangeTransparencyFog); }); }); ps.Add(new PropertyRow(CreateLabel("Appear in Refraction", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.drawBeforeRefraction.isOn; toggle.OnToggleChanged(ChangeDrawBeforeRefraction); }); }); ps.Add(new PropertyRow(CreateLabel("Back Then Front Rendering", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.backThenFrontRendering.isOn; toggle.OnToggleChanged(ChangeBackThenFrontRendering); }); }); ps.Add(new PropertyRow(CreateLabel("Transparent Depth Prepass", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.alphaTestDepthPrepass.isOn; toggle.OnToggleChanged(ChangeAlphaTestPrepass); }); }); ps.Add(new PropertyRow(CreateLabel("Transparent Depth Postpass", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.alphaTestDepthPostpass.isOn; toggle.OnToggleChanged(ChangeAlphaTestPostpass); }); }); if (!m_Node.drawBeforeRefraction.isOn) { ps.Add(new PropertyRow(CreateLabel("Refraction Model", indentLevel)), (row) => { row.Add(new EnumField(ScreenSpaceRefraction.RefractionModel.None), (field) => { field.value = m_Node.refractionModel; field.RegisterValueChangedCallback(ChangeRefractionModel); }); }); } ps.Add(new PropertyRow(CreateLabel("Distortion", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.distortion.isOn; toggle.OnToggleChanged(ChangeDistortion); }); }); if (m_Node.distortion.isOn) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Mode", indentLevel)), (row) => { row.Add(new EnumField(DistortionMode.Add), (field) => { field.value = m_Node.distortionMode; field.RegisterValueChangedCallback(ChangeDistortionMode); }); }); ps.Add(new PropertyRow(CreateLabel("Depth Test", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.distortionDepthTest.isOn; toggle.OnToggleChanged(ChangeDistortionDepthTest); }); }); --indentLevel; } --indentLevel; } ps.Add(new PropertyRow(CreateLabel("Double-Sided", indentLevel)), (row) => { row.Add(new EnumField(DoubleSidedMode.Disabled), (field) => { field.value = m_Node.doubleSidedMode; field.RegisterValueChangedCallback(ChangeDoubleSidedMode); }); }); ps.Add(new PropertyRow(CreateLabel("Alpha Clipping", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.alphaTest.isOn; toggle.OnToggleChanged(ChangeAlphaTest); }); }); if (m_Node.surfaceType == SurfaceType.Transparent && m_Node.alphaTest.isOn) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Use Shadow Threshold", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.alphaTestShadow.isOn; toggle.OnToggleChanged(ChangeAlphaTestShadow); }); }); --indentLevel; } ps.Add(new PropertyRow(CreateLabel("Material Type", indentLevel)), (row) => { row.Add(new EnumField(HDLitMasterNode.MaterialType.Standard), (field) => { field.value = m_Node.materialType; field.RegisterValueChangedCallback(ChangeMaterialType); }); }); ++indentLevel; if (m_Node.materialType == HDLitMasterNode.MaterialType.SubsurfaceScattering) { ps.Add(new PropertyRow(CreateLabel("Transmission", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.sssTransmission.isOn; toggle.OnToggleChanged(ChangeSSSTransmission); }); }); } if (m_Node.materialType == HDLitMasterNode.MaterialType.SpecularColor) { ps.Add(new PropertyRow(CreateLabel("Energy Conserving Specular", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.energyConservingSpecular.isOn; toggle.OnToggleChanged(ChangeEnergyConservingSpecular); }); }); } --indentLevel; ps.Add(new PropertyRow(CreateLabel("Receive Decals", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.receiveDecals.isOn; toggle.OnToggleChanged(ChangeDecal); }); }); ps.Add(new PropertyRow(CreateLabel("Receive SSR", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.receiveSSR.isOn; toggle.OnToggleChanged(ChangeSSR); }); }); ps.Add(new PropertyRow(CreateLabel("Geometric Specular AA", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.specularAA.isOn; toggle.OnToggleChanged(ChangeSpecularAA); }); }); ps.Add(new PropertyRow(CreateLabel("Specular Occlusion Mode", indentLevel)), (row) => { row.Add(new EnumField(SpecularOcclusionMode.Off), (field) => { field.value = m_Node.specularOcclusionMode; field.RegisterValueChangedCallback(ChangeSpecularOcclusionMode); }); }); Add(ps); }
public StackLitSettingsView(StackLitMasterNode node) : base(node) { m_Node = node; PropertySheet ps = new PropertySheet(); int indentLevel = 0; ps.Add(new PropertyRow(CreateLabel("Surface Type", indentLevel)), (row) => { row.Add(new EnumField(SurfaceType.Opaque), (field) => { field.value = m_Node.surfaceType; field.RegisterValueChangedCallback(ChangeSurfaceType); }); }); if (m_Node.surfaceType == SurfaceType.Transparent) { ++indentLevel; // No refraction in StackLit, always show this: ps.Add(new PropertyRow(CreateLabel("Blending Mode", indentLevel)), (row) => { row.Add(new EnumField(StackLitMasterNode.AlphaModeLit.Additive), (field) => { field.value = GetAlphaModeLit(m_Node.alphaMode); field.RegisterValueChangedCallback(ChangeBlendMode); }); }); ps.Add(new PropertyRow(CreateLabel("Blend Preserves Specular", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.blendPreserveSpecular.isOn; toggle.OnToggleChanged(ChangeBlendPreserveSpecular); }); }); ps.Add(new PropertyRow(CreateLabel("Fog", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.transparencyFog.isOn; toggle.OnToggleChanged(ChangeTransparencyFog); }); }); ps.Add(new PropertyRow(CreateLabel("Distortion", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.distortion.isOn; toggle.OnToggleChanged(ChangeDistortion); }); }); if (m_Node.distortion.isOn) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Distortion Blend Mode", indentLevel)), (row) => { row.Add(new EnumField(DistortionMode.Add), (field) => { field.value = m_Node.distortionMode; field.RegisterValueChangedCallback(ChangeDistortionMode); }); }); ps.Add(new PropertyRow(CreateLabel("Distortion Depth Test", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.distortionDepthTest.isOn; toggle.OnToggleChanged(ChangeDistortionDepthTest); }); }); --indentLevel; } m_SortPiorityField = new IntegerField(); ps.Add(new PropertyRow(CreateLabel("Sort Priority", indentLevel)), (row) => { row.Add(m_SortPiorityField, (field) => { field.value = m_Node.sortPriority; field.RegisterValueChangedCallback(ChangeSortPriority); }); }); ps.Add(new PropertyRow(CreateLabel("Depth Write", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.zWrite.isOn; toggle.OnToggleChanged(ChangeZWrite); }); }); if (m_Node.doubleSidedMode == DoubleSidedMode.Disabled) { ps.Add(new PropertyRow(CreateLabel("Cull Mode", indentLevel)), (row) => { row.Add(new EnumField(m_Node.transparentCullMode), (e) => { e.value = m_Node.transparentCullMode; e.RegisterValueChangedCallback(ChangeTransparentCullMode); }); }); } ps.Add(new PropertyRow(CreateLabel("Depth Test", indentLevel)), (row) => { row.Add(new EnumField(m_Node.zTest), (e) => { e.value = m_Node.zTest; e.RegisterValueChangedCallback(ChangeZTest); }); }); --indentLevel; } ps.Add(new PropertyRow(CreateLabel("Alpha Clipping", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.alphaTest.isOn; toggle.OnToggleChanged(ChangeAlphaTest); }); }); ps.Add(new PropertyRow(CreateLabel("Double-Sided", indentLevel)), (row) => { row.Add(new EnumField(DoubleSidedMode.Disabled), (field) => { field.value = m_Node.doubleSidedMode; field.RegisterValueChangedCallback(ChangeDoubleSidedMode); }); }); ps.Add(new PropertyRow(CreateLabel("Fragment Normal Space", indentLevel)), (row) => { row.Add(new EnumField(NormalDropOffSpace.Tangent), (field) => { field.value = m_Node.normalDropOffSpace; field.RegisterValueChangedCallback(ChangeSpaceOfNormalDropOffMode); }); }); // Rest of UI looks like this: // // baseParametrization // energyConservingSpecular // // anisotropy // coat // coatNormal // dualSpecularLobe // dualSpecularLobeParametrization // capHazinessWrtMetallic // iridescence // subsurfaceScattering // transmission // // receiveDecals // receiveSSR // addPrecomputedVelocity // geometricSpecularAA // specularOcclusion // // anisotropyForAreaLights // recomputeStackPerLight // shadeBaseUsingRefractedAngles // Base parametrization: ps.Add(new PropertyRow(CreateLabel("Base Color Parametrization", indentLevel)), (row) => { row.Add(new EnumField(StackLit.BaseParametrization.BaseMetallic), (field) => { field.value = m_Node.baseParametrization; field.RegisterValueChangedCallback(ChangeBaseParametrization); }); }); if (m_Node.baseParametrization == StackLit.BaseParametrization.SpecularColor) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Energy Conserving Specular", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.energyConservingSpecular.isOn; toggle.OnToggleChanged(ChangeEnergyConservingSpecular); }); }); --indentLevel; } // Material type enables: ps.Add(new PropertyRow(CreateLabel("Material Core Features", indentLevel)), (row) => {}); ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Anisotropy", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.anisotropy.isOn; toggle.OnToggleChanged(ChangeAnisotropy); }); }); ps.Add(new PropertyRow(CreateLabel("Coat", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.coat.isOn; toggle.OnToggleChanged(ChangeCoat); }); }); if (m_Node.coat.isOn) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Coat Normal", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.coatNormal.isOn; toggle.OnToggleChanged(ChangeCoatNormal); }); }); --indentLevel; } ps.Add(new PropertyRow(CreateLabel("Dual Specular Lobe", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.dualSpecularLobe.isOn; toggle.OnToggleChanged(ChangeDualSpecularLobe); }); }); if (m_Node.dualSpecularLobe.isOn) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Dual SpecularLobe Parametrization", indentLevel)), (row) => { row.Add(new EnumField(StackLit.DualSpecularLobeParametrization.HazyGloss), (field) => { field.value = m_Node.dualSpecularLobeParametrization; field.RegisterValueChangedCallback(ChangeDualSpecularLobeParametrization); }); }); if ((m_Node.baseParametrization == StackLit.BaseParametrization.BaseMetallic) && (m_Node.dualSpecularLobeParametrization == StackLit.DualSpecularLobeParametrization.HazyGloss)) { ps.Add(new PropertyRow(CreateLabel("Cap Haziness For Non Metallic", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.capHazinessWrtMetallic.isOn; toggle.OnToggleChanged(ChangeCapHazinessWrtMetallic); }); }); } --indentLevel; } ps.Add(new PropertyRow(CreateLabel("Iridescence", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.iridescence.isOn; toggle.OnToggleChanged(ChangeIridescence); }); }); if (m_Node.surfaceType != SurfaceType.Transparent) { ps.Add(new PropertyRow(CreateLabel("Subsurface Scattering", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.subsurfaceScattering.isOn; toggle.OnToggleChanged(ChangeSubsurfaceScattering); }); }); } ps.Add(new PropertyRow(CreateLabel("Transmission", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.transmission.isOn; toggle.OnToggleChanged(ChangeTransmission); }); }); --indentLevel; // ...Material type enables. ps.Add(new PropertyRow(CreateLabel("Receive Decals", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.receiveDecals.isOn; toggle.OnToggleChanged(ChangeReceiveDecals); }); }); ps.Add(new PropertyRow(CreateLabel("Receive SSR", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.receiveSSR.isOn; toggle.OnToggleChanged(ChangeReceiveSSR); }); }); ps.Add(new PropertyRow(CreateLabel("Add Precomputed Velocity", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.addPrecomputedVelocity.isOn; toggle.OnToggleChanged(ChangeAddPrecomputedVelocity); }); }); ps.Add(new PropertyRow(CreateLabel("Geometric Specular AA", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.geometricSpecularAA.isOn; toggle.OnToggleChanged(ChangeGeometricSpecularAA); }); }); //ps.Add(new PropertyRow(CreateLabel("Specular Occlusion (main enable)", indentLevel)), (row) => //{ // row.Add(new Toggle(), (toggle) => // { // toggle.value = m_Node.specularOcclusion.isOn; // toggle.OnToggleChanged(ChangeSpecularOcclusion); // }); //}); // SpecularOcclusion from SSAO if (m_Node.devMode.isOn) { // Only in dev mode do we show controls for SO fed from SSAO: otherwise, we keep the default which is DirectFromAO ps.Add(new PropertyRow(CreateLabel("Specular Occlusion (from SSAO)", indentLevel)), (row) => { row.Add(new EnumField(StackLitMasterNode.SpecularOcclusionBaseMode.DirectFromAO), (field) => { field.value = m_Node.screenSpaceSpecularOcclusionBaseMode; field.RegisterValueChangedCallback(ChangeScreenSpaceSpecularOcclusionBaseMode); }); }); if (StackLitMasterNode.SpecularOcclusionModeUsesVisibilityCone(m_Node.screenSpaceSpecularOcclusionBaseMode)) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Specular Occlusion (SS) AO Cone Weight", indentLevel)), (row) => { row.Add(new EnumField(StackLitMasterNode.SpecularOcclusionAOConeSize.CosWeightedAO), (field) => { field.value = m_Node.screenSpaceSpecularOcclusionAOConeSize; field.RegisterValueChangedCallback(ChangeScreenSpaceSpecularOcclusionAOConeSize); }); }); ps.Add(new PropertyRow(CreateLabel("Specular Occlusion (SS) AO Cone Dir", indentLevel)), (row) => { row.Add(new EnumField(StackLitMasterNode.SpecularOcclusionAOConeDir.ShadingNormal), (field) => { field.value = m_Node.screenSpaceSpecularOcclusionAOConeDir; field.RegisterValueChangedCallback(ChangeScreenSpaceSpecularOcclusionAOConeDir); }); }); --indentLevel; } } // SpecularOcclusion from input AO (baked or data-based SO) { ps.Add(new PropertyRow(CreateLabel("Specular Occlusion (from input AO)", indentLevel)), (row) => { if (m_Node.devMode.isOn) { row.Add(new EnumField(StackLitMasterNode.SpecularOcclusionBaseMode.DirectFromAO), (field) => { field.value = m_Node.dataBasedSpecularOcclusionBaseMode; field.RegisterValueChangedCallback(ChangeDataBasedSpecularOcclusionBaseMode); }); } else { row.Add(new EnumField(StackLitMasterNode.SpecularOcclusionBaseModeSimple.DirectFromAO), (field) => { // In non-dev mode, parse any enum value set to a method not shown in the simple UI as SPTD (highest quality) method: StackLitMasterNode.SpecularOcclusionBaseModeSimple simpleUIEnumValue = Enum.TryParse(m_Node.dataBasedSpecularOcclusionBaseMode.ToString(), out StackLitMasterNode.SpecularOcclusionBaseModeSimple parsedValue) ? parsedValue : StackLitMasterNode.SpecularOcclusionBaseModeSimple.SPTDIntegrationOfBentAO; field.value = simpleUIEnumValue; field.RegisterValueChangedCallback(ChangeDataBasedSpecularOcclusionBaseModeSimpleUI); }); } }); if (StackLitMasterNode.SpecularOcclusionModeUsesVisibilityCone(m_Node.dataBasedSpecularOcclusionBaseMode)) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Specular Occlusion AO Cone Weight", indentLevel)), (row) => { row.Add(new EnumField(StackLitMasterNode.SpecularOcclusionAOConeSize.CosWeightedBentCorrectAO), (field) => { field.value = m_Node.dataBasedSpecularOcclusionAOConeSize; field.RegisterValueChangedCallback(ChangeDataBasedSpecularOcclusionAOConeSize); }); }); --indentLevel; } } if (m_Node.SpecularOcclusionUsesBentNormal()) { if (m_Node.devMode.isOn) { ps.Add(new PropertyRow(CreateLabel("Specular Occlusion Bent Cone Fixup", indentLevel)), (row) => { row.Add(new EnumField(StackLitMasterNode.SpecularOcclusionConeFixupMethod.Off), (field) => { field.value = m_Node.specularOcclusionConeFixupMethod; field.RegisterValueChangedCallback(ChangeSpecularOcclusionConeFixupMethod); }); }); } else { // Just show a simple toggle when not in dev mode ps.Add(new PropertyRow(CreateLabel("Specular Occlusion Bent Cone Fixup", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.specularOcclusionConeFixupMethod != StackLitMasterNode.SpecularOcclusionConeFixupMethod.Off; toggle.OnToggleChanged(ChangeSpecularOcclusionConeFixupMethodSimpleUI); }); }); } } ps.Add(new PropertyRow(CreateLabel("Support LOD CrossFade", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.supportLodCrossFade.isOn; toggle.OnToggleChanged(ChangeSupportLODCrossFade); }); }); ps.Add(new PropertyRow(CreateLabel("Advanced Options", indentLevel)), (row) => {}); ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Anisotropy For Area Lights", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.anisotropyForAreaLights.isOn; toggle.OnToggleChanged(ChangeAnisotropyForAreaLights); }); }); // Per Punctual/Directional Lights { ps.Add(new PropertyRow(CreateLabel("Per Punctual/Directional Lights:", indentLevel)), (row) => { }); ++indentLevel; if (m_Node.coat.isOn) { ps.Add(new PropertyRow(CreateLabel("Base Layer Uses Refracted Angles", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.shadeBaseUsingRefractedAngles.isOn; toggle.OnToggleChanged(ChangeShadeBaseUsingRefractedAngles); }); }); } if (m_Node.coat.isOn || m_Node.iridescence.isOn) { ps.Add(new PropertyRow(CreateLabel("Recompute Stack & Iridescence", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.recomputeStackPerLight.isOn; toggle.OnToggleChanged(ChangeRecomputeStackPerLight); }); }); } ps.Add(new PropertyRow(CreateLabel("Honor Per Light Max Smoothness", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.honorPerLightMinRoughness.isOn; toggle.OnToggleChanged(ChangeHonorPerLightMinRoughness); }); }); --indentLevel; } // Per Punctual/Directional Lights // Uncomment to show the dev mode UI: // //ps.Add(new PropertyRow(CreateLabel("Enable Dev Mode", indentLevel)), (row) => //{ // row.Add(new Toggle(), (toggle) => // { // toggle.value = m_Node.devMode.isOn; // toggle.OnToggleChanged(ChangeDevMode); // }); //}); if (m_Node.devMode.isOn) { ps.Add(new PropertyRow(CreateLabel("Show And Enable StackLit Debugs", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.debug.isOn; toggle.OnToggleChanged(ChangeDebug); }); }); } ps.Add(new PropertyRow(CreateLabel("Override Baked GI", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.overrideBakedGI.isOn; toggle.OnToggleChanged(ChangeoverrideBakedGI); }); }); ps.Add(new PropertyRow(CreateLabel("Depth Offset", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.depthOffset.isOn; toggle.OnToggleChanged(ChangeDepthOffset); }); }); --indentLevel; //...Advanced options Add(ps); Add(GetShaderGUIOverridePropertySheet()); }
public FabricSettingsView(FabricMasterNode node) : base(node) { m_Node = node; PropertySheet ps = new PropertySheet(); int indentLevel = 0; ps.Add(new PropertyRow(CreateLabel("Surface Type", indentLevel)), (row) => { row.Add(new EnumField(SurfaceType.Opaque), (field) => { field.value = m_Node.surfaceType; field.RegisterValueChangedCallback(ChangeSurfaceType); }); }); if (m_Node.surfaceType == SurfaceType.Transparent) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Blend Preserves Specular", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.blendPreserveSpecular.isOn; toggle.OnToggleChanged(ChangeBlendPreserveSpecular); }); }); ps.Add(new PropertyRow(CreateLabel("Fog", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.transparencyFog.isOn; toggle.OnToggleChanged(ChangeTransparencyFog); }); }); m_SortPiorityField = new IntegerField(); ps.Add(new PropertyRow(CreateLabel("Sort Priority", indentLevel)), (row) => { row.Add(m_SortPiorityField, (field) => { field.value = m_Node.sortPriority; field.RegisterValueChangedCallback(ChangeSortPriority); }); }); ps.Add(new PropertyRow(CreateLabel("Depth Write", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.zWrite.isOn; toggle.OnToggleChanged(ChangeZWrite); }); }); if (m_Node.doubleSidedMode == DoubleSidedMode.Disabled) { ps.Add(new PropertyRow(CreateLabel("Cull Mode", indentLevel)), (row) => { row.Add(new EnumField(m_Node.transparentCullMode), (e) => { e.value = m_Node.transparentCullMode; e.RegisterValueChangedCallback(ChangeTransparentCullMode); }); }); } ps.Add(new PropertyRow(CreateLabel("Depth Test", indentLevel)), (row) => { row.Add(new EnumField(m_Node.zTest), (e) => { e.value = m_Node.zTest; e.RegisterValueChangedCallback(ChangeZTest); }); }); --indentLevel; } ps.Add(new PropertyRow(CreateLabel("Alpha Clipping", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.alphaTest.isOn; toggle.OnToggleChanged(ChangeAlphaTest); }); }); if (m_Node.alphaTest.isOn) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Alpha to Mask", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.alphaToMask.isOn; toggle.OnToggleChanged(ChangeAlphaToMask); }); }); --indentLevel; } ps.Add(new PropertyRow(CreateLabel("Double-Sided", indentLevel)), (row) => { row.Add(new EnumField(DoubleSidedMode.Disabled), (field) => { field.value = m_Node.doubleSidedMode; field.RegisterValueChangedCallback(ChangeDoubleSidedMode); }); }); ps.Add(new PropertyRow(CreateLabel("Energy Conserving Specular", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.energyConservingSpecular.isOn; toggle.OnToggleChanged(ChangeEnergyConservingSpecular); }); }); ps.Add(new PropertyRow(CreateLabel("Material Type", indentLevel)), (row) => { row.Add(new EnumField(FabricMasterNode.MaterialType.CottonWool), (field) => { field.value = m_Node.materialType; field.RegisterValueChangedCallback(ChangeMaterialType); }); }); if (m_Node.surfaceType != SurfaceType.Transparent) { ps.Add(new PropertyRow(CreateLabel("Subsurface Scattering", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.subsurfaceScattering.isOn; toggle.OnToggleChanged(ChangeSubsurfaceScattering); }); }); } ps.Add(new PropertyRow(CreateLabel("Transmission", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.transmission.isOn; toggle.OnToggleChanged(ChangeTransmission); }); }); ps.Add(new PropertyRow(CreateLabel("Receive Decals", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.receiveDecals.isOn; toggle.OnToggleChanged(ChangeDecal); }); }); ps.Add(new PropertyRow(CreateLabel("Receive SSR", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.receiveSSR.isOn; toggle.OnToggleChanged(ChangeSSR); }); }); ps.Add(new PropertyRow(CreateLabel("Add Precomputed Velocity", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.addPrecomputedVelocity.isOn; toggle.OnToggleChanged(ChangeAddPrecomputedVelocity); }); }); ps.Add(new PropertyRow(CreateLabel("Specular Occlusion Mode", indentLevel)), (row) => { row.Add(new EnumField(SpecularOcclusionMode.Off), (field) => { field.value = m_Node.specularOcclusionMode; field.RegisterValueChangedCallback(ChangeSpecularOcclusionMode); }); }); ps.Add(new PropertyRow(CreateLabel("Override Baked GI", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.overrideBakedGI.isOn; toggle.OnToggleChanged(ChangeoverrideBakedGI); }); }); ps.Add(new PropertyRow(CreateLabel("Depth Offset", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.depthOffset.isOn; toggle.OnToggleChanged(ChangeDepthOffset); }); }); ps.Add(new PropertyRow(CreateLabel("Support LOD CrossFade", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.supportLodCrossFade.isOn; toggle.OnToggleChanged(ChangeSupportLODCrossFade); }); }); Add(ps); Add(GetShaderGUIOverridePropertySheet()); }
public HDUnlitSettingsView(HDUnlitMasterNode node) { m_Node = node; PropertySheet ps = new PropertySheet(); int indentLevel = 0; ps.Add(new PropertyRow(CreateLabel("Surface Type", indentLevel)), (row) => { row.Add(new EnumField(SurfaceType.Opaque), (field) => { field.value = m_Node.surfaceType; field.RegisterValueChangedCallback(ChangeSurfaceType); }); }); if (m_Node.surfaceType == SurfaceType.Transparent) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Blending Mode", indentLevel)), (row) => { row.Add(new EnumField(HDUnlitMasterNode.AlphaModeLit.Additive), (field) => { field.value = GetAlphaModeLit(m_Node.alphaMode); field.RegisterValueChangedCallback(ChangeBlendMode); }); }); m_SortPiorityField = new IntegerField(); ps.Add(new PropertyRow(CreateLabel("Sorting Priority", indentLevel)), (row) => { row.Add(m_SortPiorityField, (field) => { field.value = m_Node.sortPriority; field.RegisterValueChangedCallback(ChangeSortPriority); }); }); ps.Add(new PropertyRow(CreateLabel("Receive Fog", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.transparencyFog.isOn; toggle.OnToggleChanged(ChangeTransparencyFog); }); }); ps.Add(new PropertyRow(CreateLabel("Appear in Refraction", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.drawBeforeRefraction.isOn; toggle.OnToggleChanged(ChangeDrawBeforeRefraction); }); }); ps.Add(new PropertyRow(CreateLabel("Distortion", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.distortion.isOn; toggle.OnToggleChanged(ChangeDistortion); }); }); if (m_Node.distortion.isOn) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Mode", indentLevel)), (row) => { row.Add(new EnumField(DistortionMode.Add), (field) => { field.value = m_Node.distortionMode; field.RegisterValueChangedCallback(ChangeDistortionMode); }); }); ps.Add(new PropertyRow(CreateLabel("Distortion Only", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.distortionOnly.isOn; toggle.OnToggleChanged(ChangeDistortionOnly); }); }); ps.Add(new PropertyRow(CreateLabel("Depth Test", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.distortionDepthTest.isOn; toggle.OnToggleChanged(ChangeDistortionDepthTest); }); }); --indentLevel; } --indentLevel; } ps.Add(new PropertyRow(new Label("Double-Sided")), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.doubleSided.isOn; toggle.OnToggleChanged(ChangeDoubleSided); }); }); ps.Add(new PropertyRow(CreateLabel("Alpha Clipping", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.alphaTest.isOn; toggle.OnToggleChanged(ChangeAlphaTest); }); }); Add(ps); }
public HDUnlitSettingsView(HDUnlitMasterNode node) { m_Node = node; PropertySheet ps = new PropertySheet(); int indentLevel = 0; ps.Add(new PropertyRow(CreateLabel("Surface Type", indentLevel)), (row) => { row.Add(new EnumField(SurfaceType.Opaque), (field) => { field.value = m_Node.surfaceType; field.RegisterValueChangedCallback(ChangeSurfaceType); }); }); ++indentLevel; switch (m_Node.surfaceType) { case SurfaceType.Opaque: ps.Add(new PropertyRow(CreateLabel("Rendering Pass", indentLevel)), (row) => { var valueList = HDSubShaderUtilities.GetRenderingPassList(true, true); row.Add(new PopupField <HDRenderQueue.RenderQueueType>(valueList, HDRenderQueue.RenderQueueType.Opaque, HDSubShaderUtilities.RenderQueueName, HDSubShaderUtilities.RenderQueueName), (field) => { field.value = HDRenderQueue.GetOpaqueEquivalent(m_Node.renderingPass); field.RegisterValueChangedCallback(ChangeRenderingPass); }); }); break; case SurfaceType.Transparent: ps.Add(new PropertyRow(CreateLabel("Rendering Pass", indentLevel)), (row) => { Enum defaultValue; switch (m_Node.renderingPass) // Migration { default: //when deserializing without issue, we still need to init the default to something even if not used. case HDRenderQueue.RenderQueueType.Transparent: defaultValue = HDRenderQueue.TransparentRenderQueue.Default; break; case HDRenderQueue.RenderQueueType.PreRefraction: defaultValue = HDRenderQueue.TransparentRenderQueue.BeforeRefraction; break; } var valueList = HDSubShaderUtilities.GetRenderingPassList(false, true); row.Add(new PopupField <HDRenderQueue.RenderQueueType>(valueList, HDRenderQueue.RenderQueueType.Transparent, HDSubShaderUtilities.RenderQueueName, HDSubShaderUtilities.RenderQueueName), (field) => { field.value = HDRenderQueue.GetTransparentEquivalent(m_Node.renderingPass); field.RegisterValueChangedCallback(ChangeRenderingPass); }); }); break; default: throw new ArgumentException("Unknown SurfaceType"); } --indentLevel; if (m_Node.surfaceType == SurfaceType.Transparent) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Blending Mode", indentLevel)), (row) => { row.Add(new EnumField(HDUnlitMasterNode.AlphaModeLit.Additive), (field) => { field.value = GetAlphaModeLit(m_Node.alphaMode); field.RegisterValueChangedCallback(ChangeBlendMode); }); }); m_SortPiorityField = new IntegerField(); ps.Add(new PropertyRow(CreateLabel("Sorting Priority", indentLevel)), (row) => { row.Add(m_SortPiorityField, (field) => { field.value = m_Node.sortPriority; field.RegisterValueChangedCallback(ChangeSortPriority); }); }); ps.Add(new PropertyRow(CreateLabel("Receive Fog", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.transparencyFog.isOn; toggle.OnToggleChanged(ChangeTransparencyFog); }); }); ps.Add(new PropertyRow(CreateLabel("Distortion", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.distortion.isOn; toggle.OnToggleChanged(ChangeDistortion); }); }); if (m_Node.distortion.isOn) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Mode", indentLevel)), (row) => { row.Add(new EnumField(DistortionMode.Add), (field) => { field.value = m_Node.distortionMode; field.RegisterValueChangedCallback(ChangeDistortionMode); }); }); ps.Add(new PropertyRow(CreateLabel("Distortion Only", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.distortionOnly.isOn; toggle.OnToggleChanged(ChangeDistortionOnly); }); }); ps.Add(new PropertyRow(CreateLabel("Depth Test", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.distortionDepthTest.isOn; toggle.OnToggleChanged(ChangeDistortionDepthTest); }); }); --indentLevel; } --indentLevel; } ps.Add(new PropertyRow(new Label("Double-Sided")), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.doubleSided.isOn; toggle.OnToggleChanged(ChangeDoubleSided); }); }); ps.Add(new PropertyRow(CreateLabel("Alpha Clipping", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.alphaTest.isOn; toggle.OnToggleChanged(ChangeAlphaTest); }); }); Add(ps); }
VisualElement CreateGUI(SampleVirtualTextureNode node, InspectableAttribute attribute, out VisualElement propertyVisualElement) { PropertySheet propertySheet = new PropertySheet(); var enumPropertyDrawer = new EnumPropertyDrawer(); propertySheet.Add(enumPropertyDrawer.CreateGUI((newValue) => { if (node.addressMode == (SampleVirtualTextureNode.AddressMode)newValue) { return; } node.owner.owner.RegisterCompleteObjectUndo("Address Mode Change"); node.addressMode = (SampleVirtualTextureNode.AddressMode)newValue; }, node.addressMode, "Address Mode", SampleVirtualTextureNode.AddressMode.VtAddressMode_Wrap, out var addressModeVisualElement)); propertySheet.Add(enumPropertyDrawer.CreateGUI((newValue) => { if (node.lodCalculation == (SampleVirtualTextureNode.LodCalculation)newValue) { return; } node.owner.owner.RegisterCompleteObjectUndo("Lod Mode Change"); node.lodCalculation = (SampleVirtualTextureNode.LodCalculation)newValue; }, node.lodCalculation, "Lod Mode", SampleVirtualTextureNode.LodCalculation.VtLevel_Automatic, out var lodCalculationVisualElement)); propertySheet.Add(enumPropertyDrawer.CreateGUI((newValue) => { if (node.sampleQuality == (SampleVirtualTextureNode.QualityMode)newValue) { return; } node.owner.owner.RegisterCompleteObjectUndo("Quality Change"); node.sampleQuality = (SampleVirtualTextureNode.QualityMode)newValue; }, node.sampleQuality, "Quality", SampleVirtualTextureNode.QualityMode.VtSampleQuality_High, out var qualityVisualElement)); var boolPropertyDrawer = new BoolPropertyDrawer(); propertySheet.Add(boolPropertyDrawer.CreateGUI((newValue) => { if (node.noFeedback == !newValue) { return; } node.owner.owner.RegisterCompleteObjectUndo("Feedback Settings Change"); node.noFeedback = !newValue; }, !node.noFeedback, "Automatic Streaming", out var propertyToggle)); propertySheet.Add(boolPropertyDrawer.CreateGUI((newValue) => { if (node.enableGlobalMipBias == newValue) { return; } node.owner.owner.RegisterCompleteObjectUndo("Enable Global Mip Bias VT Change"); node.enableGlobalMipBias = newValue; }, node.enableGlobalMipBias, "Use Global Mip Bias", out var enableGlobalMipBias)); // display warning if the current master node doesn't support virtual texturing // TODO: Add warning when no active subTarget supports VT // if (!node.owner.isSubGraph) // { // bool supportedByMasterNode = // node.owner.GetNodes<IMasterNode>().FirstOrDefault()?.supportsVirtualTexturing ?? false; // if (!supportedByMasterNode) // propertySheet.Add(new HelpBoxRow(MessageType.Warning), // (row) => row.Add(new Label( // "The current master node does not support Virtual Texturing, this node will do regular 2D sampling."))); // } // display warning if the current render pipeline doesn't support virtual texturing IVirtualTexturingEnabledRenderPipeline vtRp = GraphicsSettings.currentRenderPipeline as IVirtualTexturingEnabledRenderPipeline; if (vtRp == null) { propertySheet.Add(new HelpBoxRow(MessageType.Warning), (row) => row.Add(new Label( "The current render pipeline does not support Virtual Texturing, this node will do regular 2D sampling."))); } else if (vtRp.virtualTexturingEnabled == false) { propertySheet.Add(new HelpBoxRow(MessageType.Warning), (row) => row.Add(new Label( "The current render pipeline has disabled Virtual Texturing, this node will do regular 2D sampling."))); } else { #if !ENABLE_VIRTUALTEXTURES propertySheet.Add(new HelpBoxRow(MessageType.Warning), (row) => row.Add(new Label( "Virtual Texturing is disabled globally (possibly by the render pipeline settings), this node will do regular 2D sampling."))); #endif } propertyVisualElement = propertySheet; return(propertySheet); }
public HairSettingsView(HairMasterNode node) { m_Node = node; PropertySheet ps = new PropertySheet(); int indentLevel = 0; ps.Add(new PropertyRow(CreateLabel("Surface Type", indentLevel)), (row) => { row.Add(new EnumField(SurfaceType.Opaque), (field) => { field.value = m_Node.surfaceType; field.RegisterValueChangedCallback(ChangeSurfaceType); }); }); if (m_Node.surfaceType == SurfaceType.Transparent) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Preserve Specular Lighting", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.blendPreserveSpecular.isOn; toggle.OnToggleChanged(ChangeBlendPreserveSpecular); }); }); m_SortPriorityField = new IntegerField(); ps.Add(new PropertyRow(CreateLabel("Sorting Priority", indentLevel)), (row) => { row.Add(m_SortPriorityField, (field) => { field.value = m_Node.sortPriority; field.RegisterValueChangedCallback(ChangeSortPriority); }); }); ps.Add(new PropertyRow(CreateLabel("Receive Fog", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.transparencyFog.isOn; toggle.OnToggleChanged(ChangeTransparencyFog); }); }); ps.Add(new PropertyRow(CreateLabel("Back Then Front Rendering", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.backThenFrontRendering.isOn; toggle.OnToggleChanged(ChangeBackThenFrontRendering); }); }); ps.Add(new PropertyRow(CreateLabel("Transparent Depth Prepass", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.alphaTestDepthPrepass.isOn; toggle.OnToggleChanged(ChangeAlphaTestPrepass); }); }); ps.Add(new PropertyRow(CreateLabel("Transparent Depth Postpass", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.alphaTestDepthPostpass.isOn; toggle.OnToggleChanged(ChangeAlphaTestPostpass); }); }); ps.Add(new PropertyRow(CreateLabel("Transparent Writes Motion Vector", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.transparentWritesMotionVec.isOn; toggle.OnToggleChanged(ChangeTransparentWritesMotionVec); }); }); ps.Add(new PropertyRow(CreateLabel("ZWrite", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.zWrite.isOn; toggle.OnToggleChanged(ChangeZWrite); }); }); if (m_Node.doubleSidedMode == DoubleSidedMode.Disabled) { ps.Add(new PropertyRow(CreateLabel("Cull Mode", indentLevel)), (row) => { row.Add(new EnumField(m_Node.transparentCullMode), (e) => { e.value = m_Node.transparentCullMode; e.RegisterValueChangedCallback(ChangeTransparentCullMode); }); }); } ps.Add(new PropertyRow(CreateLabel("Z Test", indentLevel)), (row) => { row.Add(new EnumField(m_Node.zTest), (e) => { e.value = m_Node.zTest; e.RegisterValueChangedCallback(ChangeZTest); }); }); --indentLevel; } ps.Add(new PropertyRow(CreateLabel("Double-Sided", indentLevel)), (row) => { row.Add(new EnumField(DoubleSidedMode.Disabled), (field) => { field.value = m_Node.doubleSidedMode; field.RegisterValueChangedCallback(ChangeDoubleSidedMode); }); }); ps.Add(new PropertyRow(CreateLabel("Alpha Clipping", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.alphaTest.isOn; toggle.OnToggleChanged(ChangeAlphaTest); }); }); if (m_Node.alphaTest.isOn) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Use Shadow Threshold", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.alphaTestShadow.isOn; toggle.OnToggleChanged(ChangeAlphaTestShadow); }); }); --indentLevel; } ps.Add(new PropertyRow(CreateLabel("Receive Decals", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.receiveDecals.isOn; toggle.OnToggleChanged(ChangeDecal); }); }); ps.Add(new PropertyRow(CreateLabel("Receive SSR", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.receiveSSR.isOn; toggle.OnToggleChanged(ChangeSSR); }); }); ps.Add(new PropertyRow(CreateLabel("Geometric Specular AA", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.specularAA.isOn; toggle.OnToggleChanged(ChangeSpecularAA); }); }); ps.Add(new PropertyRow(CreateLabel("Specular Occlusion Mode", indentLevel)), (row) => { row.Add(new EnumField(SpecularOcclusionMode.Off), (field) => { field.value = m_Node.specularOcclusionMode; field.RegisterValueChangedCallback(ChangeSpecularOcclusionMode); }); }); ps.Add(new PropertyRow(CreateLabel("Override Baked GI", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.overrideBakedGI.isOn; toggle.OnToggleChanged(ChangeoverrideBakedGI); }); }); ps.Add(new PropertyRow(CreateLabel("Depth Offset", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.depthOffset.isOn; toggle.OnToggleChanged(ChangeDepthOffset); }); }); ps.Add(new PropertyRow(CreateLabel("Use Light Facing Normal", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.useLightFacingNormal.isOn; toggle.OnToggleChanged(ChangeUseLightFacingNormal); }); }); Add(ps); }
public SampleVirtualTextureNodeSettingsView(SampleVirtualTextureNode node) { m_Node = node; PropertySheet ps = new PropertySheet(); ps.Add(new PropertyRow(new Label("Lod Mode")), (row) => { row.Add(new UIElements.EnumField(m_Node.lodCalculation), (field) => { field.value = m_Node.lodCalculation; field.RegisterValueChangedCallback(evt => { if (m_Node.lodCalculation == (LodCalculation)evt.newValue) { return; } m_Node.owner.owner.RegisterCompleteObjectUndo("Lod Mode Change"); m_Node.lodCalculation = (LodCalculation)evt.newValue; }); }); }); ps.Add(new PropertyRow(new Label("Quality")), (row) => { row.Add(new UIElements.EnumField(m_Node.sampleQuality), (field) => { field.value = m_Node.sampleQuality; field.RegisterValueChangedCallback(evt => { if (m_Node.sampleQuality == (QualityMode)evt.newValue) { return; } m_Node.owner.owner.RegisterCompleteObjectUndo("Quality Change"); m_Node.sampleQuality = (QualityMode)evt.newValue; }); }); }); ps.Add(new PropertyRow(new Label("No Feedback")), (row) => { row.Add(new UnityEngine.UIElements.Toggle(), (field) => { field.value = m_Node.noFeedback; field.RegisterValueChangedCallback(evt => { if (m_Node.noFeedback == evt.newValue) { return; } m_Node.owner.owner.RegisterCompleteObjectUndo("Feedback Settings Change"); m_Node.noFeedback = evt.newValue; }); }); }); var vtProperty = m_Node.GetSlotProperty(VirtualTextureInputId) as VirtualTextureShaderProperty; if (vtProperty == null) { ps.Add(new HelpBoxRow(MessageType.Warning), (row) => row.Add(new Label("Please connect a VirtualTexture property to configure texture sampling type."))); } else { int numLayers = vtProperty.value.layers.Count; for (int i = 0; i < numLayers; i++) { int currentIndex = i; // to make lambda by-ref capturing happy ps.Add(new PropertyRow(new Label("Layer " + (i + 1) + " Type")), (row) => { row.Add(new UIElements.EnumField(m_Node.m_TextureTypes[i]), (field) => { field.value = m_Node.m_TextureTypes[i]; field.RegisterValueChangedCallback(evt => { if (m_Node.m_TextureTypes[currentIndex] == (TextureType)evt.newValue) { return; } m_Node.owner.owner.RegisterCompleteObjectUndo("Texture Type Change"); m_Node.m_TextureTypes[currentIndex] = (TextureType)evt.newValue; m_Node.Dirty(ModificationScope.Graph); }); }); }); } } ps.Add(new PropertyRow(new Label("Normal Space")), (row) => { row.Add(new UIElements.EnumField(m_Node.normalMapSpace), (field) => { field.value = m_Node.normalMapSpace; field.RegisterValueChangedCallback(evt => { if (m_Node.normalMapSpace == (NormalMapSpace)evt.newValue) { return; } m_Node.owner.owner.RegisterCompleteObjectUndo("Normal Map space Change"); m_Node.normalMapSpace = (NormalMapSpace)evt.newValue; }); }); }); // display warning if the current master node doesn't support virtual texturing if (!m_Node.owner.isSubGraph) { bool supportedByMasterNode = m_Node.owner.GetNodes <IMasterNode>().FirstOrDefault()?.supportsVirtualTexturing ?? false; if (!supportedByMasterNode) { ps.Add(new HelpBoxRow(MessageType.Warning), (row) => row.Add(new Label("The current master node does not support Virtual Texturing, this node will do regular 2D sampling."))); } } // display warning if the current render pipeline doesn't support virtual texturing IVirtualTexturingEnabledRenderPipeline vtRp = GraphicsSettings.currentRenderPipeline as IVirtualTexturingEnabledRenderPipeline; if (vtRp == null) { ps.Add(new HelpBoxRow(MessageType.Warning), (row) => row.Add(new Label("The current render pipeline does not support Virtual Texturing, this node will do regular 2D sampling."))); } else if (vtRp.virtualTexturingEnabled == false) { ps.Add(new HelpBoxRow(MessageType.Warning), (row) => row.Add(new Label("The current render pipeline has disabled Virtual Texturing, this node will do regular 2D sampling."))); } else { #if !ENABLE_VIRTUALTEXTURES ps.Add(new HelpBoxRow(MessageType.Warning), (row) => row.Add(new Label("Virtual Texturing is disabled globally (possibly by the render pipeline settings), this node will do regular 2D sampling."))); #endif } Add(ps); }
public StackLitSettingsView(StackLitMasterNode node) { m_Node = node; PropertySheet ps = new PropertySheet(); int indentLevel = 0; ps.Add(new PropertyRow(CreateLabel("Surface Type", indentLevel)), (row) => { row.Add(new EnumField(SurfaceType.Opaque), (field) => { field.value = m_Node.surfaceType; field.RegisterValueChangedCallback(ChangeSurfaceType); }); }); if (m_Node.surfaceType == SurfaceType.Transparent) { ++indentLevel; // No refraction in StackLit, always show this: ps.Add(new PropertyRow(CreateLabel("Blending Mode", indentLevel)), (row) => { row.Add(new EnumField(StackLitMasterNode.AlphaModeLit.Additive), (field) => { field.value = GetAlphaModeLit(m_Node.alphaMode); field.RegisterValueChangedCallback(ChangeBlendMode); }); }); ps.Add(new PropertyRow(CreateLabel("Blend Preserves Specular", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.blendPreserveSpecular.isOn; toggle.OnToggleChanged(ChangeBlendPreserveSpecular); }); }); ps.Add(new PropertyRow(CreateLabel("Fog", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.transparencyFog.isOn; toggle.OnToggleChanged(ChangeTransparencyFog); }); }); ps.Add(new PropertyRow(CreateLabel("Distortion", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.distortion.isOn; toggle.OnToggleChanged(ChangeDistortion); }); }); if (m_Node.distortion.isOn) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Mode", indentLevel)), (row) => { row.Add(new EnumField(DistortionMode.Add), (field) => { field.value = m_Node.distortionMode; field.RegisterValueChangedCallback(ChangeDistortionMode); }); }); ps.Add(new PropertyRow(CreateLabel("Depth Test", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.distortionDepthTest.isOn; toggle.OnToggleChanged(ChangeDistortionDepthTest); }); }); --indentLevel; } m_SortPiorityField = new IntegerField(); ps.Add(new PropertyRow(CreateLabel("Sort Priority", indentLevel)), (row) => { row.Add(m_SortPiorityField, (field) => { field.value = m_Node.sortPriority; field.RegisterValueChangedCallback(ChangeSortPriority); }); }); --indentLevel; } ps.Add(new PropertyRow(CreateLabel("Alpha Cutoff", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.alphaTest.isOn; toggle.OnToggleChanged(ChangeAlphaTest); }); }); ps.Add(new PropertyRow(CreateLabel("Double-Sided", indentLevel)), (row) => { row.Add(new EnumField(DoubleSidedMode.Disabled), (field) => { field.value = m_Node.doubleSidedMode; field.RegisterValueChangedCallback(ChangeDoubleSidedMode); }); }); // Rest of UI looks like this: // // baseParametrization // energyConservingSpecular // // anisotropy // coat // coatNormal // dualSpecularLobe // dualSpecularLobeParametrization // capHazinessWrtMetallic // iridescence // subsurfaceScattering // transmission // // receiveDecals // receiveSSR // geometricSpecularAA // specularOcclusion // // anisotropyForAreaLights // recomputeStackPerLight // shadeBaseUsingRefractedAngles // Base parametrization: ps.Add(new PropertyRow(CreateLabel("Base Color Parametrization", indentLevel)), (row) => { row.Add(new EnumField(StackLit.BaseParametrization.BaseMetallic), (field) => { field.value = m_Node.baseParametrization; field.RegisterValueChangedCallback(ChangeBaseParametrization); }); }); if (m_Node.baseParametrization == StackLit.BaseParametrization.SpecularColor) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Energy Conserving Specular", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.energyConservingSpecular.isOn; toggle.OnToggleChanged(ChangeEnergyConservingSpecular); }); }); --indentLevel; } // Material type enables: ps.Add(new PropertyRow(CreateLabel("Material Core Features", indentLevel)), (row) => {}); ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Anisotropy", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.anisotropy.isOn; toggle.OnToggleChanged(ChangeAnisotropy); }); }); ps.Add(new PropertyRow(CreateLabel("Coat", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.coat.isOn; toggle.OnToggleChanged(ChangeCoat); }); }); if (m_Node.coat.isOn) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Coat Normal", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.coatNormal.isOn; toggle.OnToggleChanged(ChangeCoatNormal); }); }); --indentLevel; } ps.Add(new PropertyRow(CreateLabel("Dual Specular Lobe", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.dualSpecularLobe.isOn; toggle.OnToggleChanged(ChangeDualSpecularLobe); }); }); if (m_Node.dualSpecularLobe.isOn) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Dual SpecularLobe Parametrization", indentLevel)), (row) => { row.Add(new EnumField(StackLit.DualSpecularLobeParametrization.HazyGloss), (field) => { field.value = m_Node.dualSpecularLobeParametrization; field.RegisterValueChangedCallback(ChangeDualSpecularLobeParametrization); }); }); if ((m_Node.baseParametrization == StackLit.BaseParametrization.BaseMetallic) && (m_Node.dualSpecularLobeParametrization == StackLit.DualSpecularLobeParametrization.HazyGloss)) { ps.Add(new PropertyRow(CreateLabel("Cap Haziness For Non Metallic", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.capHazinessWrtMetallic.isOn; toggle.OnToggleChanged(ChangeCapHazinessWrtMetallic); }); }); } --indentLevel; } ps.Add(new PropertyRow(CreateLabel("Iridescence", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.iridescence.isOn; toggle.OnToggleChanged(ChangeIridescence); }); }); if (m_Node.surfaceType != SurfaceType.Transparent) { ps.Add(new PropertyRow(CreateLabel("Subsurface Scattering", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.subsurfaceScattering.isOn; toggle.OnToggleChanged(ChangeSubsurfaceScattering); }); }); } ps.Add(new PropertyRow(CreateLabel("Transmission", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.transmission.isOn; toggle.OnToggleChanged(ChangeTransmission); }); }); --indentLevel; // ...Material type enables. ps.Add(new PropertyRow(CreateLabel("Receive Decals", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.receiveDecals.isOn; toggle.OnToggleChanged(ChangeReceiveDecals); }); }); ps.Add(new PropertyRow(CreateLabel("Receive SSR", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.receiveSSR.isOn; toggle.OnToggleChanged(ChangeReceiveSSR); }); }); ps.Add(new PropertyRow(CreateLabel("Specular AA (for geometry)", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.geometricSpecularAA.isOn; toggle.OnToggleChanged(ChangeGeometricSpecularAA); }); }); ps.Add(new PropertyRow(CreateLabel("Specular Occlusion", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.specularOcclusion.isOn; toggle.OnToggleChanged(ChangeSpecularOcclusion); }); }); ps.Add(new PropertyRow(CreateLabel("Advanced Options", indentLevel)), (row) => {}); ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Anisotropy For Area Lights", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.anisotropyForAreaLights.isOn; toggle.OnToggleChanged(ChangeAnisotropyForAreaLights); }); }); if (m_Node.coat.isOn || m_Node.iridescence.isOn) { ps.Add(new PropertyRow(CreateLabel("Per Punctual/Directional Lights:", indentLevel)), (row) => { }); ++indentLevel; } if (m_Node.coat.isOn) { ps.Add(new PropertyRow(CreateLabel("Base Layer Uses Refracted Angles", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.shadeBaseUsingRefractedAngles.isOn; toggle.OnToggleChanged(ChangeShadeBaseUsingRefractedAngles); }); }); } if (m_Node.coat.isOn || m_Node.iridescence.isOn) { ps.Add(new PropertyRow(CreateLabel("Recompute Stack & Iridescence", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.recomputeStackPerLight.isOn; toggle.OnToggleChanged(ChangeRecomputeStackPerLight); }); }); } if (m_Node.coat.isOn || m_Node.iridescence.isOn) { --indentLevel; // Per Punctual/Directional Lights: } ps.Add(new PropertyRow(CreateLabel("Show And Enable StackLit Debugs", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.debug.isOn; toggle.OnToggleChanged(ChangeDebug); }); }); --indentLevel; //...Advanced options Add(ps); }
public FabricSettingsView(FabricMasterNode node) { m_Node = node; PropertySheet ps = new PropertySheet(); int indentLevel = 0; ps.Add(new PropertyRow(CreateLabel("Surface Type", indentLevel)), (row) => { row.Add(new EnumField(SurfaceType.Opaque), (field) => { field.value = m_Node.surfaceType; field.RegisterValueChangedCallback(ChangeSurfaceType); }); }); if (m_Node.surfaceType == SurfaceType.Transparent) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Blend Preserves Specular", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.blendPreserveSpecular.isOn; toggle.OnToggleChanged(ChangeBlendPreserveSpecular); }); }); ps.Add(new PropertyRow(CreateLabel("Fog", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.transparencyFog.isOn; toggle.OnToggleChanged(ChangeTransparencyFog); }); }); ps.Add(new PropertyRow(CreateLabel("Back Then Front Rendering", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.backThenFrontRendering.isOn; toggle.OnToggleChanged(ChangeBackThenFrontRendering); }); }); m_SortPiorityField = new IntegerField(); ps.Add(new PropertyRow(CreateLabel("Sort Priority", indentLevel)), (row) => { row.Add(m_SortPiorityField, (field) => { field.value = m_Node.sortPriority; field.RegisterValueChangedCallback(ChangeSortPriority); }); }); --indentLevel; } ps.Add(new PropertyRow(CreateLabel("Alpha Clipping", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.alphaTest.isOn; toggle.OnToggleChanged(ChangeAlphaTest); }); }); if (m_Node.surfaceType == SurfaceType.Transparent && m_Node.alphaTest.isOn) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Alpha Cutoff Depth Prepass", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.alphaTestDepthPrepass.isOn; toggle.OnToggleChanged(ChangeAlphaTestPrepass); }); }); ps.Add(new PropertyRow(CreateLabel("Alpha Cutoff Depth Postpass", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.alphaTestDepthPostpass.isOn; toggle.OnToggleChanged(ChangeAlphaTestPostpass); }); }); --indentLevel; } ps.Add(new PropertyRow(CreateLabel("Double-Sided", indentLevel)), (row) => { row.Add(new EnumField(DoubleSidedMode.Disabled), (field) => { field.value = m_Node.doubleSidedMode; field.RegisterValueChangedCallback(ChangeDoubleSidedMode); }); }); ps.Add(new PropertyRow(CreateLabel("Energy Conserving Specular", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.energyConservingSpecular.isOn; toggle.OnToggleChanged(ChangeEnergyConservingSpecular); }); }); ps.Add(new PropertyRow(CreateLabel("Material Type", indentLevel)), (row) => { row.Add(new EnumField(FabricMasterNode.MaterialType.CottonWool), (field) => { field.value = m_Node.materialType; field.RegisterValueChangedCallback(ChangeMaterialType); }); }); if (m_Node.surfaceType != SurfaceType.Transparent) { ps.Add(new PropertyRow(CreateLabel("Subsurface Scattering", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.subsurfaceScattering.isOn; toggle.OnToggleChanged(ChangeSubsurfaceScattering); }); }); } ps.Add(new PropertyRow(CreateLabel("Transmission", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.transmission.isOn; toggle.OnToggleChanged(ChangeTransmission); }); }); ps.Add(new PropertyRow(CreateLabel("Receive Decals", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.receiveDecals.isOn; toggle.OnToggleChanged(ChangeDecal); }); }); ps.Add(new PropertyRow(CreateLabel("Receive SSR", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.receiveSSR.isOn; toggle.OnToggleChanged(ChangeSSR); }); }); ps.Add(new PropertyRow(CreateLabel("Specular Occlusion Mode", indentLevel)), (row) => { row.Add(new EnumField(SpecularOcclusionMode.Off), (field) => { field.value = m_Node.specularOcclusionMode; field.RegisterValueChangedCallback(ChangeSpecularOcclusionMode); }); }); ps.Add(new PropertyRow(CreateLabel("Override Baked GI", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.overrideBakedGI.isOn; toggle.OnToggleChanged(ChangeoverrideBakedGI); }); }); Add(ps); }
public DecalSettingsView(DecalMasterNode node) : base(node) { m_Node = node; PropertySheet ps = new PropertySheet(); int indentLevel = 0; ps.Add(new PropertyRow(CreateLabel("Affect BaseColor", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.affectsAlbedo.isOn; toggle.RegisterValueChangedCallback(ChangeAffectsAlbedo); }); }); ps.Add(new PropertyRow(CreateLabel("Affects Normal", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.affectsNormal.isOn; toggle.RegisterValueChangedCallback(ChangeAffectsNormal); }); }); ps.Add(new PropertyRow(CreateLabel("Affects Metal", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.affectsMetal.isOn; toggle.RegisterValueChangedCallback(ChangeAffectsMetal); }); }); ps.Add(new PropertyRow(CreateLabel("Affects AO", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.affectsAO.isOn; toggle.RegisterValueChangedCallback(ChangeAffectsAO); }); }); ps.Add(new PropertyRow(CreateLabel("Affects Smoothness", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.affectsSmoothness.isOn; toggle.RegisterValueChangedCallback(ChangeAffectsSmoothness); }); }); ps.Add(new PropertyRow(CreateLabel("Affects Emission", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.affectsEmission.isOn; toggle.RegisterValueChangedCallback(ChangeAffectsEmission); }); }); Add(ps); Add(GetShaderGUIOverridePropertySheet()); }
public HDLitSettingsView(HDLitMasterNode node) : base(node) { m_Node = node; PropertySheet ps = new PropertySheet(); int indentLevel = 0; ps.Add(new PropertyRow(CreateLabel("Surface Type", indentLevel)), (row) => { row.Add(new EnumField(SurfaceType.Opaque), (field) => { field.value = m_Node.surfaceType; field.RegisterValueChangedCallback(ChangeSurfaceType); }); }); ++indentLevel; switch (m_Node.surfaceType) { case SurfaceType.Opaque: ps.Add(new PropertyRow(CreateLabel("Rendering Pass", indentLevel)), (row) => { var valueList = HDSubShaderUtilities.GetRenderingPassList(true, false); row.Add(new PopupField <HDRenderQueue.RenderQueueType>(valueList, HDRenderQueue.RenderQueueType.Opaque, HDSubShaderUtilities.RenderQueueName, HDSubShaderUtilities.RenderQueueName), (field) => { field.value = HDRenderQueue.GetOpaqueEquivalent(m_Node.renderingPass); field.RegisterValueChangedCallback(ChangeRenderingPass); }); }); break; case SurfaceType.Transparent: ps.Add(new PropertyRow(CreateLabel("Rendering Pass", indentLevel)), (row) => { Enum defaultValue; switch (m_Node.renderingPass) // Migration { default: //when deserializing without issue, we still need to init the default to something even if not used. case HDRenderQueue.RenderQueueType.Transparent: defaultValue = HDRenderQueue.TransparentRenderQueue.Default; break; case HDRenderQueue.RenderQueueType.PreRefraction: defaultValue = HDRenderQueue.TransparentRenderQueue.BeforeRefraction; break; } var valueList = HDSubShaderUtilities.GetRenderingPassList(false, false); row.Add(new PopupField <HDRenderQueue.RenderQueueType>(valueList, HDRenderQueue.RenderQueueType.Transparent, HDSubShaderUtilities.RenderQueueName, HDSubShaderUtilities.RenderQueueName), (field) => { field.value = HDRenderQueue.GetTransparentEquivalent(m_Node.renderingPass); field.RegisterValueChangedCallback(ChangeRenderingPass); }); }); break; default: throw new ArgumentException("Unknown SurfaceType"); } --indentLevel; if (m_Node.surfaceType == SurfaceType.Transparent) { ++indentLevel; if (!m_Node.HasRefraction()) { ps.Add(new PropertyRow(CreateLabel("Blending Mode", indentLevel)), (row) => { row.Add(new EnumField(HDLitMasterNode.AlphaModeLit.Additive), (field) => { field.value = GetAlphaModeLit(m_Node.alphaMode); field.RegisterValueChangedCallback(ChangeBlendMode); }); }); ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Preserve Specular Lighting", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.blendPreserveSpecular.isOn; toggle.OnToggleChanged(ChangeBlendPreserveSpecular); }); }); --indentLevel; } m_SortPriorityField = new IntegerField(); ps.Add(new PropertyRow(CreateLabel("Sorting Priority", indentLevel)), (row) => { row.Add(m_SortPriorityField, (field) => { field.value = m_Node.sortPriority; field.RegisterValueChangedCallback(ChangeSortPriority); }); }); ps.Add(new PropertyRow(CreateLabel("Receive Fog", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.transparencyFog.isOn; toggle.OnToggleChanged(ChangeTransparencyFog); }); }); ps.Add(new PropertyRow(CreateLabel("Back Then Front Rendering", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.backThenFrontRendering.isOn; toggle.OnToggleChanged(ChangeBackThenFrontRendering); }); }); ps.Add(new PropertyRow(CreateLabel("Transparent Depth Prepass", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.alphaTestDepthPrepass.isOn; toggle.OnToggleChanged(ChangeAlphaTestPrepass); }); }); ps.Add(new PropertyRow(CreateLabel("Transparent Depth Postpass", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.alphaTestDepthPostpass.isOn; toggle.OnToggleChanged(ChangeAlphaTestPostpass); }); }); ps.Add(new PropertyRow(CreateLabel("Transparent Writes Motion Vector", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.transparentWritesMotionVec.isOn; toggle.OnToggleChanged(ChangeTransparentWritesMotionVec); }); }); if (m_Node.renderingPass != HDRenderQueue.RenderQueueType.PreRefraction) { ps.Add(new PropertyRow(CreateLabel("Refraction Model", indentLevel)), (row) => { row.Add(new EnumField(ScreenSpaceRefraction.RefractionModel.None), (field) => { field.value = m_Node.refractionModel; field.RegisterValueChangedCallback(ChangeRefractionModel); }); }); } ps.Add(new PropertyRow(CreateLabel("Distortion", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.distortion.isOn; toggle.OnToggleChanged(ChangeDistortion); }); }); if (m_Node.distortion.isOn) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Distortion Blend Mode", indentLevel)), (row) => { row.Add(new EnumField(DistortionMode.Add), (field) => { field.value = m_Node.distortionMode; field.RegisterValueChangedCallback(ChangeDistortionMode); }); }); ps.Add(new PropertyRow(CreateLabel("Distortion Depth Test", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.distortionDepthTest.isOn; toggle.OnToggleChanged(ChangeDistortionDepthTest); }); }); --indentLevel; } ps.Add(new PropertyRow(CreateLabel("Depth Write", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.zWrite.isOn; toggle.OnToggleChanged(ChangeZWrite); }); }); if (m_Node.doubleSidedMode == DoubleSidedMode.Disabled) { ps.Add(new PropertyRow(CreateLabel("Cull Mode", indentLevel)), (row) => { row.Add(new EnumField(m_Node.transparentCullMode), (e) => { e.value = m_Node.transparentCullMode; e.RegisterValueChangedCallback(ChangeTransparentCullMode); }); }); } ps.Add(new PropertyRow(CreateLabel("Depth Test", indentLevel)), (row) => { row.Add(new EnumField(m_Node.zTest), (e) => { e.value = m_Node.zTest; e.RegisterValueChangedCallback(ChangeZTest); }); }); --indentLevel; } ps.Add(new PropertyRow(CreateLabel("Double-Sided", indentLevel)), (row) => { row.Add(new EnumField(DoubleSidedMode.Disabled), (field) => { field.value = m_Node.doubleSidedMode; field.RegisterValueChangedCallback(ChangeDoubleSidedMode); }); }); ps.Add(new PropertyRow(CreateLabel("Fragment Normal Space", indentLevel)), (row) => { row.Add(new EnumField(NormalDropOffSpace.Tangent), (field) => { field.value = m_Node.normalDropOffSpace; field.RegisterValueChangedCallback(ChangeSpaceOfNormalDropOffMode); }); }); ps.Add(new PropertyRow(CreateLabel("Alpha Clipping", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.alphaTest.isOn; toggle.OnToggleChanged(ChangeAlphaTest); }); }); if (m_Node.alphaTest.isOn) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Use Shadow Threshold", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.alphaTestShadow.isOn; toggle.OnToggleChanged(ChangeAlphaTestShadow); }); }); --indentLevel; } ps.Add(new PropertyRow(CreateLabel("Material Type", indentLevel)), (row) => { row.Add(new EnumField(HDLitMasterNode.MaterialType.Standard), (field) => { field.value = m_Node.materialType; field.RegisterValueChangedCallback(ChangeMaterialType); }); }); ++indentLevel; if (m_Node.materialType == HDLitMasterNode.MaterialType.SubsurfaceScattering) { ps.Add(new PropertyRow(CreateLabel("Transmission", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.sssTransmission.isOn; toggle.OnToggleChanged(ChangeSSSTransmission); }); }); } if (m_Node.materialType == HDLitMasterNode.MaterialType.SpecularColor) { ps.Add(new PropertyRow(CreateLabel("Energy Conserving Specular", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.energyConservingSpecular.isOn; toggle.OnToggleChanged(ChangeEnergyConservingSpecular); }); }); } --indentLevel; ps.Add(new PropertyRow(CreateLabel("Receive Decals", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.receiveDecals.isOn; toggle.OnToggleChanged(ChangeDecal); }); }); ps.Add(new PropertyRow(CreateLabel("Receive SSR", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.receiveSSR.isOn; toggle.OnToggleChanged(ChangeSSR); }); }); ps.Add(new PropertyRow(CreateLabel("Add Precomputed Velocity", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.addPrecomputedVelocity.isOn; toggle.OnToggleChanged(ChangeAddPrecomputedVelocity); }); }); ps.Add(new PropertyRow(CreateLabel("Geometric Specular AA", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.specularAA.isOn; toggle.OnToggleChanged(ChangeSpecularAA); }); }); ps.Add(new PropertyRow(CreateLabel("Specular Occlusion Mode", indentLevel)), (row) => { row.Add(new EnumField(SpecularOcclusionMode.Off), (field) => { field.value = m_Node.specularOcclusionMode; field.RegisterValueChangedCallback(ChangeSpecularOcclusionMode); }); }); ps.Add(new PropertyRow(CreateLabel("Override Baked GI", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.overrideBakedGI.isOn; toggle.OnToggleChanged(ChangeoverrideBakedGI); }); }); ps.Add(new PropertyRow(CreateLabel("Depth Offset", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.depthOffset.isOn; toggle.OnToggleChanged(ChangeDepthOffset); }); }); ps.Add(new PropertyRow(CreateLabel("DOTS instancing", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.dotsInstancing.isOn; toggle.OnToggleChanged(ChangeDotsInstancing); }); }); ps.Add(new PropertyRow(CreateLabel("Support LOD CrossFade", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.supportLodCrossFade.isOn; toggle.OnToggleChanged(ChangeSupportLODCrossFade); }); }); Add(ps); Add(GetShaderGUIOverridePropertySheet()); }
public StackLitSettingsView(StackLitMasterNode node) { m_Node = node; PropertySheet ps = new PropertySheet(); int indentLevel = 0; ps.Add(new PropertyRow(CreateLabel("Surface Type", indentLevel)), (row) => { row.Add(new EnumField(SurfaceType.Opaque), (field) => { field.value = m_Node.surfaceType; field.RegisterValueChangedCallback(ChangeSurfaceType); }); }); if (m_Node.surfaceType == SurfaceType.Transparent) { ++indentLevel; // No refraction in StackLit, always show this: ps.Add(new PropertyRow(CreateLabel("Blending Mode", indentLevel)), (row) => { row.Add(new EnumField(StackLitMasterNode.AlphaModeLit.Additive), (field) => { field.value = GetAlphaModeLit(m_Node.alphaMode); field.RegisterValueChangedCallback(ChangeBlendMode); }); }); ps.Add(new PropertyRow(CreateLabel("Blend Preserves Specular", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.blendPreserveSpecular.isOn; toggle.OnToggleChanged(ChangeBlendPreserveSpecular); }); }); ps.Add(new PropertyRow(CreateLabel("Fog", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.transparencyFog.isOn; toggle.OnToggleChanged(ChangeTransparencyFog); }); }); ps.Add(new PropertyRow(CreateLabel("Distortion", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.distortion.isOn; toggle.OnToggleChanged(ChangeDistortion); }); }); if (m_Node.distortion.isOn) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Mode", indentLevel)), (row) => { row.Add(new EnumField(DistortionMode.Add), (field) => { field.value = m_Node.distortionMode; field.RegisterValueChangedCallback(ChangeDistortionMode); }); }); ps.Add(new PropertyRow(CreateLabel("Depth Test", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.distortionDepthTest.isOn; toggle.OnToggleChanged(ChangeDistortionDepthTest); }); }); --indentLevel; } m_SortPiorityField = new IntegerField(); ps.Add(new PropertyRow(CreateLabel("Sort Priority", indentLevel)), (row) => { row.Add(m_SortPiorityField, (field) => { field.value = m_Node.sortPriority; field.RegisterValueChangedCallback(ChangeSortPriority); }); }); ps.Add(new PropertyRow(CreateLabel("ZWrite", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.zWrite.isOn; toggle.OnToggleChanged(ChangeZWrite); }); }); if (m_Node.doubleSidedMode == DoubleSidedMode.Disabled) { ps.Add(new PropertyRow(CreateLabel("Cull Mode", indentLevel)), (row) => { row.Add(new EnumField(m_Node.transparentCullMode), (e) => { e.value = m_Node.transparentCullMode; e.RegisterValueChangedCallback(ChangeTransparentCullMode); }); }); } ps.Add(new PropertyRow(CreateLabel("Z Test", indentLevel)), (row) => { row.Add(new EnumField(m_Node.zTest), (e) => { e.value = m_Node.zTest; e.RegisterValueChangedCallback(ChangeZTest); }); }); --indentLevel; } ps.Add(new PropertyRow(CreateLabel("Alpha Clipping", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.alphaTest.isOn; toggle.OnToggleChanged(ChangeAlphaTest); }); }); ps.Add(new PropertyRow(CreateLabel("Double-Sided", indentLevel)), (row) => { row.Add(new EnumField(DoubleSidedMode.Disabled), (field) => { field.value = m_Node.doubleSidedMode; field.RegisterValueChangedCallback(ChangeDoubleSidedMode); }); }); // Rest of UI looks like this: // // baseParametrization // energyConservingSpecular // // anisotropy // coat // coatNormal // dualSpecularLobe // dualSpecularLobeParametrization // capHazinessWrtMetallic // iridescence // subsurfaceScattering // transmission // // receiveDecals // receiveSSR // addPrecomputedVelocity // geometricSpecularAA // specularOcclusion // // anisotropyForAreaLights // recomputeStackPerLight // shadeBaseUsingRefractedAngles // Base parametrization: ps.Add(new PropertyRow(CreateLabel("Base Color Parametrization", indentLevel)), (row) => { row.Add(new EnumField(StackLit.BaseParametrization.BaseMetallic), (field) => { field.value = m_Node.baseParametrization; field.RegisterValueChangedCallback(ChangeBaseParametrization); }); }); if (m_Node.baseParametrization == StackLit.BaseParametrization.SpecularColor) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Energy Conserving Specular", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.energyConservingSpecular.isOn; toggle.OnToggleChanged(ChangeEnergyConservingSpecular); }); }); --indentLevel; } // Material type enables: ps.Add(new PropertyRow(CreateLabel("Material Core Features", indentLevel)), (row) => {}); ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Anisotropy", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.anisotropy.isOn; toggle.OnToggleChanged(ChangeAnisotropy); }); }); ps.Add(new PropertyRow(CreateLabel("Coat", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.coat.isOn; toggle.OnToggleChanged(ChangeCoat); }); }); if (m_Node.coat.isOn) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Coat Normal", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.coatNormal.isOn; toggle.OnToggleChanged(ChangeCoatNormal); }); }); --indentLevel; } ps.Add(new PropertyRow(CreateLabel("Dual Specular Lobe", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.dualSpecularLobe.isOn; toggle.OnToggleChanged(ChangeDualSpecularLobe); }); }); if (m_Node.dualSpecularLobe.isOn) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Dual SpecularLobe Parametrization", indentLevel)), (row) => { row.Add(new EnumField(StackLit.DualSpecularLobeParametrization.HazyGloss), (field) => { field.value = m_Node.dualSpecularLobeParametrization; field.RegisterValueChangedCallback(ChangeDualSpecularLobeParametrization); }); }); if ((m_Node.baseParametrization == StackLit.BaseParametrization.BaseMetallic) && (m_Node.dualSpecularLobeParametrization == StackLit.DualSpecularLobeParametrization.HazyGloss)) { ps.Add(new PropertyRow(CreateLabel("Cap Haziness For Non Metallic", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.capHazinessWrtMetallic.isOn; toggle.OnToggleChanged(ChangeCapHazinessWrtMetallic); }); }); } --indentLevel; } ps.Add(new PropertyRow(CreateLabel("Iridescence", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.iridescence.isOn; toggle.OnToggleChanged(ChangeIridescence); }); }); if (m_Node.surfaceType != SurfaceType.Transparent) { ps.Add(new PropertyRow(CreateLabel("Subsurface Scattering", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.subsurfaceScattering.isOn; toggle.OnToggleChanged(ChangeSubsurfaceScattering); }); }); } ps.Add(new PropertyRow(CreateLabel("Transmission", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.transmission.isOn; toggle.OnToggleChanged(ChangeTransmission); }); }); --indentLevel; // ...Material type enables. ps.Add(new PropertyRow(CreateLabel("Receive Decals", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.receiveDecals.isOn; toggle.OnToggleChanged(ChangeReceiveDecals); }); }); ps.Add(new PropertyRow(CreateLabel("Receive SSR", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.receiveSSR.isOn; toggle.OnToggleChanged(ChangeReceiveSSR); }); }); ps.Add(new PropertyRow(CreateLabel("Add Precomputed Velocity", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.addPrecomputedVelocity.isOn; toggle.OnToggleChanged(ChangeAddPrecomputedVelocity); }); }); ps.Add(new PropertyRow(CreateLabel("Geometric Specular AA", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.geometricSpecularAA.isOn; toggle.OnToggleChanged(ChangeGeometricSpecularAA); }); }); //ps.Add(new PropertyRow(CreateLabel("Specular Occlusion (main enable)", indentLevel)), (row) => //{ // row.Add(new Toggle(), (toggle) => // { // toggle.value = m_Node.specularOcclusion.isOn; // toggle.OnToggleChanged(ChangeSpecularOcclusion); // }); //}); ps.Add(new PropertyRow(CreateLabel("Specular Occlusion (from SSAO)", indentLevel)), (row) => { row.Add(new EnumField(StackLitMasterNode.SpecularOcclusionBaseMode.DirectFromAO), (field) => { field.value = m_Node.screenSpaceSpecularOcclusionBaseMode; field.RegisterValueChangedCallback(ChangeScreenSpaceSpecularOcclusionBaseMode); }); }); if (StackLitMasterNode.SpecularOcclusionModeUsesVisibilityCone(m_Node.screenSpaceSpecularOcclusionBaseMode)) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Specular Occlusion (SS) AO Cone Weight", indentLevel)), (row) => { row.Add(new EnumField(StackLitMasterNode.SpecularOcclusionAOConeSize.CosWeightedAO), (field) => { field.value = m_Node.screenSpaceSpecularOcclusionAOConeSize; field.RegisterValueChangedCallback(ChangeScreenSpaceSpecularOcclusionAOConeSize); }); }); ps.Add(new PropertyRow(CreateLabel("Specular Occlusion (SS) AO Cone Dir", indentLevel)), (row) => { row.Add(new EnumField(StackLitMasterNode.SpecularOcclusionAOConeDir.ShadingNormal), (field) => { field.value = m_Node.screenSpaceSpecularOcclusionAOConeDir; field.RegisterValueChangedCallback(ChangeScreenSpaceSpecularOcclusionAOConeDir); }); }); --indentLevel; } // TODO: we would ideally need one value per lobe //ps.Add(new PropertyRow(CreateLabel("Specular Occlusion Custom Input", indentLevel)), (row) => //{ // row.Add(new Toggle(), (toggle) => // { // toggle.value = m_Node.specularOcclusionIsCustom.isOn; // toggle.OnToggleChanged(ChangeSpecularOcclusionIsCustom); // }); //}); //if (!m_Node.specularOcclusionIsCustom.isOn) { ps.Add(new PropertyRow(CreateLabel("Specular Occlusion (from input AO)", indentLevel)), (row) => { row.Add(new EnumField(StackLitMasterNode.SpecularOcclusionBaseMode.DirectFromAO), (field) => { field.value = m_Node.dataBasedSpecularOcclusionBaseMode; field.RegisterValueChangedCallback(ChangeDataBasedSpecularOcclusionBaseMode); }); }); if (StackLitMasterNode.SpecularOcclusionModeUsesVisibilityCone(m_Node.dataBasedSpecularOcclusionBaseMode)) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Specular Occlusion AO Cone Weight", indentLevel)), (row) => { row.Add(new EnumField(StackLitMasterNode.SpecularOcclusionAOConeSize.CosWeightedBentCorrectAO), (field) => { field.value = m_Node.dataBasedSpecularOcclusionAOConeSize; field.RegisterValueChangedCallback(ChangeDataBasedSpecularOcclusionAOConeSize); }); }); --indentLevel; } } if (m_Node.SpecularOcclusionUsesBentNormal()) { ps.Add(new PropertyRow(CreateLabel("Specular Occlusion Bent Cone Fixup", indentLevel)), (row) => { row.Add(new EnumField(StackLitMasterNode.SpecularOcclusionConeFixupMethod.Off), (field) => { field.value = m_Node.specularOcclusionConeFixupMethod; field.RegisterValueChangedCallback(ChangeSpecularOcclusionConeFixupMethod); }); }); } ps.Add(new PropertyRow(CreateLabel("Advanced Options", indentLevel)), (row) => {}); ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Anisotropy For Area Lights", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.anisotropyForAreaLights.isOn; toggle.OnToggleChanged(ChangeAnisotropyForAreaLights); }); }); if (m_Node.coat.isOn || m_Node.iridescence.isOn) { ps.Add(new PropertyRow(CreateLabel("Per Punctual/Directional Lights:", indentLevel)), (row) => { }); ++indentLevel; } if (m_Node.coat.isOn) { ps.Add(new PropertyRow(CreateLabel("Base Layer Uses Refracted Angles", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.shadeBaseUsingRefractedAngles.isOn; toggle.OnToggleChanged(ChangeShadeBaseUsingRefractedAngles); }); }); } if (m_Node.coat.isOn || m_Node.iridescence.isOn) { ps.Add(new PropertyRow(CreateLabel("Recompute Stack & Iridescence", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.recomputeStackPerLight.isOn; toggle.OnToggleChanged(ChangeRecomputeStackPerLight); }); }); } if (m_Node.coat.isOn || m_Node.iridescence.isOn) { --indentLevel; // Per Punctual/Directional Lights: } ps.Add(new PropertyRow(CreateLabel("Show And Enable StackLit Debugs", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.debug.isOn; toggle.OnToggleChanged(ChangeDebug); }); }); ps.Add(new PropertyRow(CreateLabel("Override Baked GI", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.overrideBakedGI.isOn; toggle.OnToggleChanged(ChangeoverrideBakedGI); }); }); ps.Add(new PropertyRow(CreateLabel("Depth Offset", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.depthOffset.isOn; toggle.OnToggleChanged(ChangeDepthOffset); }); }); --indentLevel; //...Advanced options Add(ps); }
public EyeSettingsView(EyeMasterNode node) { m_Node = node; PropertySheet ps = new PropertySheet(); int indentLevel = 0; ps.Add(new PropertyRow(CreateLabel("Surface Type", indentLevel)), (row) => { row.Add(new EnumField(SurfaceType.Opaque), (field) => { field.value = m_Node.surfaceType; field.RegisterValueChangedCallback(ChangeSurfaceType); }); }); if (m_Node.surfaceType == SurfaceType.Transparent) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Blend Preserves Specular", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.blendPreserveSpecular.isOn; toggle.OnToggleChanged(ChangeBlendPreserveSpecular); }); }); ps.Add(new PropertyRow(CreateLabel("Fog", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.transparencyFog.isOn; toggle.OnToggleChanged(ChangeTransparencyFog); }); }); m_SortPiorityField = new IntegerField(); ps.Add(new PropertyRow(CreateLabel("Sort Priority", indentLevel)), (row) => { row.Add(m_SortPiorityField, (field) => { field.value = m_Node.sortPriority; field.RegisterValueChangedCallback(ChangeSortPriority); }); }); ps.Add(new PropertyRow(CreateLabel("ZWrite", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.zWrite.isOn; toggle.OnToggleChanged(ChangeZWrite); }); }); if (m_Node.doubleSidedMode == DoubleSidedMode.Disabled) { ps.Add(new PropertyRow(CreateLabel("Cull Mode", indentLevel)), (row) => { row.Add(new EnumField(m_Node.transparentCullMode), (e) => { e.value = m_Node.transparentCullMode; e.RegisterValueChangedCallback(ChangeTransparentCullMode); }); }); } ps.Add(new PropertyRow(CreateLabel("Z Test", indentLevel)), (row) => { row.Add(new EnumField(m_Node.zTest), (e) => { e.value = m_Node.zTest; e.RegisterValueChangedCallback(ChangeZTest); }); }); --indentLevel; } ps.Add(new PropertyRow(CreateLabel("Alpha Clipping", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.alphaTest.isOn; toggle.OnToggleChanged(ChangeAlphaTest); }); }); if (m_Node.surfaceType == SurfaceType.Transparent && m_Node.alphaTest.isOn) { ++indentLevel; ps.Add(new PropertyRow(CreateLabel("Alpha Cutoff Depth Prepass", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.alphaTestDepthPrepass.isOn; toggle.OnToggleChanged(ChangeAlphaTestPrepass); }); }); ps.Add(new PropertyRow(CreateLabel("Alpha Cutoff Depth Postpass", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.alphaTestDepthPostpass.isOn; toggle.OnToggleChanged(ChangeAlphaTestPostpass); }); }); --indentLevel; } ps.Add(new PropertyRow(CreateLabel("Double-Sided", indentLevel)), (row) => { row.Add(new EnumField(DoubleSidedMode.Disabled), (field) => { field.value = m_Node.doubleSidedMode; field.RegisterValueChangedCallback(ChangeDoubleSidedMode); }); }); ps.Add(new PropertyRow(CreateLabel("Material Type", indentLevel)), (row) => { row.Add(new EnumField(EyeMasterNode.MaterialType.Eye), (field) => { field.value = m_Node.materialType; field.RegisterValueChangedCallback(ChangeMaterialType); }); }); if (m_Node.surfaceType != SurfaceType.Transparent) { ps.Add(new PropertyRow(CreateLabel("Subsurface Scattering", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.subsurfaceScattering.isOn; toggle.OnToggleChanged(ChangeSubsurfaceScattering); }); }); } ps.Add(new PropertyRow(CreateLabel("Receive Decals", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.receiveDecals.isOn; toggle.OnToggleChanged(ChangeDecal); }); }); ps.Add(new PropertyRow(CreateLabel("Receive SSR", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.receiveSSR.isOn; toggle.OnToggleChanged(ChangeSSR); }); }); ps.Add(new PropertyRow(CreateLabel("Add Precomputed Velocity", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.addPrecomputedVelocity.isOn; toggle.OnToggleChanged(ChangeAddPrecomputedVelocity); }); }); ps.Add(new PropertyRow(CreateLabel("Specular Occlusion Mode", indentLevel)), (row) => { row.Add(new EnumField(SpecularOcclusionMode.Off), (field) => { field.value = m_Node.specularOcclusionMode; field.RegisterValueChangedCallback(ChangeSpecularOcclusionMode); }); }); ps.Add(new PropertyRow(CreateLabel("Override Baked GI", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.overrideBakedGI.isOn; toggle.OnToggleChanged(ChangeoverrideBakedGI); }); }); ps.Add(new PropertyRow(CreateLabel("Depth Offset", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.depthOffset.isOn; toggle.OnToggleChanged(ChangeDepthOffset); }); }); Add(ps); }
public SGECustomLitSettingsView(SGECustomLitMasterNode node) { m_Node = node; PropertySheet ps = new PropertySheet(); ps.Add(new PropertyRow(new Label("Render Type")), (row) => { row.Add(new EnumField(SurfaceMaterialTags.RenderType.Opaque), (field) => { field.value = m_Node.RenderType; field.RegisterValueChangedCallback(ChangeRenderType); }); }); ps.Add(new PropertyRow(new Label("Render Queue")), (row) => { row.Add(new EnumField(SurfaceMaterialTags.RenderQueue.Geometry), (field) => { field.value = m_Node.RenderQueue; field.RegisterValueChangedCallback(ChangeRenderQueue); }); }); ps.Add(new PropertyRow(new Label("Blend")), (row) => { row.Add(new EnumField(BlendMode.Off), (field) => { field.value = m_Node.BlendMode; field.RegisterValueChangedCallback(ChangeBlendMode); }); }); ps.Add(new PropertyRow(new Label("Cull")), (row) => { row.Add(new EnumField(SurfaceMaterialOptions.CullMode.Back), (field) => { field.value = m_Node.CullMode; field.RegisterValueChangedCallback(ChangeCullMode); }); }); ps.Add(new PropertyRow(new Label("ZWrite")), (row) => { row.Add(new EnumField(SurfaceMaterialOptions.ZWrite.On), (field) => { field.value = m_Node.ZWrite; field.RegisterValueChangedCallback(ChangeZWrite); }); }); ps.Add(new PropertyRow(new Label("ZTest")), (row) => { row.Add(new EnumField(SurfaceMaterialOptions.ZTest.LEqual), (field) => { field.value = m_Node.ZTest; field.RegisterValueChangedCallback(ChangeZTest); }); }); ps.Add(new PropertyRow(new Label("Fragment Normal Space")), (row) => { row.Add(new EnumField(NormalDropOffSpace.Tangent), (field) => { field.value = m_Node.normalDropOffSpace; field.RegisterValueChangedCallback(ChangeSpaceOfNormalDropOffMode); }); }); ps.Add(new PropertyRow(new Label("Custom Editor")), (row) => { row.Add(new TextField(String.Empty), (field) => { field.value = m_Node.CustomEditor; field.RegisterValueChangedCallback(ChangeCustomEditor); }); }); Add(ps); }