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.OnValueChanged(ChangeSurfaceType); }); }); if (m_Node.surfaceType == SurfaceType.Transparent) { ++indentLevel; if (!m_Node.HasRefraction()) { ps.Add(new PropertyRow(CreateLabel("Blend Mode", indentLevel)), (row) => { row.Add(new EnumField(HDLitMasterNode.AlphaModeLit.Additive), (field) => { field.value = GetAlphaModeLit(m_Node.alphaMode); field.OnValueChanged(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("Draw Before Refraction", indentLevel)), (row) => { row.Add(new Toggle(), (toggle) => { toggle.value = m_Node.drawBeforeRefraction.isOn; toggle.OnToggleChanged(ChangeDrawBeforeRefraction); }); }); if (!m_Node.drawBeforeRefraction.isOn) { ps.Add(new PropertyRow(CreateLabel("Refraction Model", indentLevel)), (row) => { row.Add(new EnumField(ScreenSpaceLighting.RefractionModel.None), (field) => { field.value = m_Node.refractionModel; field.OnValueChanged(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.OnValueChanged(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; } 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.OnValueChanged(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); }); }); 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.OnValueChanged(ChangeDoubleSidedMode); }); }); ps.Add(new PropertyRow(CreateLabel("Material Type", indentLevel)), (row) => { row.Add(new EnumField(HDLitMasterNode.MaterialType.Standard), (field) => { field.value = m_Node.materialType; field.OnValueChanged(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("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.OnValueChanged(ChangeSpecularOcclusionMode); }); }); Add(ps); }