From 01e47a3052b49337c0156e588cb30a6e635dbf2d Mon Sep 17 00:00:00 2001 From: Matias Lavik Date: Wed, 26 Feb 2020 18:55:58 +0100 Subject: [PATCH] Centralised code for setting material properties, and made sure the gradient texture is null when not needed. --- .../Editor/TransferFunction2DEditorWindow.cs | 5 +- Assets/Editor/TransferFunctionEditorWindow.cs | 4 +- .../VolumeRenderedObjectCustomInspector.cs | 2 +- Assets/Scripts/VolumeObject/RenderMode.cs | 6 ++ .../VolumeObject/VolumeObjectFactory.cs | 2 +- .../VolumeObject/VolumeRenderedObject.cs | 61 +++++++++++++------ 6 files changed, 55 insertions(+), 25 deletions(-) diff --git a/Assets/Editor/TransferFunction2DEditorWindow.cs b/Assets/Editor/TransferFunction2DEditorWindow.cs index 15bc3f7..069b70b 100644 --- a/Assets/Editor/TransferFunction2DEditorWindow.cs +++ b/Assets/Editor/TransferFunction2DEditorWindow.cs @@ -148,9 +148,8 @@ namespace UnityVolumeRendering tf2d.GenerateTexture(); needsRegenTexture = false; } - // TODO: - volRendObject.GetComponent().sharedMaterial.SetTexture("_TFTex", tf2d.GetTexture()); - volRendObject.GetComponent().sharedMaterial.EnableKeyword("TF2D_ON"); + + volRendObject.SetTransferFunctionMode(TFRenderMode.TF2D); return; } diff --git a/Assets/Editor/TransferFunctionEditorWindow.cs b/Assets/Editor/TransferFunctionEditorWindow.cs index 7218e68..4859dcb 100644 --- a/Assets/Editor/TransferFunctionEditorWindow.cs +++ b/Assets/Editor/TransferFunctionEditorWindow.cs @@ -189,9 +189,7 @@ namespace UnityVolumeRendering GUI.skin.label.wordWrap = false; GUI.Label(new Rect(0.0f, bgRect.y + bgRect.height + 85.0f, 700.0f, 30.0f), "Left click to select and move a control point. Right click to add a control point, and ctrl + right click to delete."); - // TEST!!! TODO - volRendObject.GetComponent().sharedMaterial.SetTexture("_TFTex", tfTexture); - volRendObject.GetComponent().sharedMaterial.DisableKeyword("TF2D_ON"); + volRendObject.SetTransferFunctionMode(TFRenderMode.TF1D); GUI.color = oldColour; } diff --git a/Assets/Editor/VolumeRenderedObjectCustomInspector.cs b/Assets/Editor/VolumeRenderedObjectCustomInspector.cs index 1256c92..0f1a745 100644 --- a/Assets/Editor/VolumeRenderedObjectCustomInspector.cs +++ b/Assets/Editor/VolumeRenderedObjectCustomInspector.cs @@ -10,7 +10,7 @@ namespace UnityVolumeRendering { VolumeRenderedObject myTarget = (VolumeRenderedObject)target; - RenderMode oldRenderMode = myTarget.GetRemderMode(); + RenderMode oldRenderMode = myTarget.GetRenderMode(); RenderMode newRenderMode = (RenderMode)EditorGUILayout.EnumPopup("Render mode", oldRenderMode); if (newRenderMode != oldRenderMode) diff --git a/Assets/Scripts/VolumeObject/RenderMode.cs b/Assets/Scripts/VolumeObject/RenderMode.cs index ca5dbcf..84fc5b6 100644 --- a/Assets/Scripts/VolumeObject/RenderMode.cs +++ b/Assets/Scripts/VolumeObject/RenderMode.cs @@ -6,4 +6,10 @@ MaximumIntensityProjectipon, IsosurfaceRendering } + + public enum TFRenderMode + { + TF1D, + TF2D + } } diff --git a/Assets/Scripts/VolumeObject/VolumeObjectFactory.cs b/Assets/Scripts/VolumeObject/VolumeObjectFactory.cs index 8dd4c1d..801a993 100644 --- a/Assets/Scripts/VolumeObject/VolumeObjectFactory.cs +++ b/Assets/Scripts/VolumeObject/VolumeObjectFactory.cs @@ -28,7 +28,7 @@ namespace UnityVolumeRendering volObj.transferFunction2D = tf2D; meshRenderer.sharedMaterial.SetTexture("_DataTex", dataset.GetDataTexture()); - meshRenderer.sharedMaterial.SetTexture("_GradientTex", dataset.GetGradientTexture()); + meshRenderer.sharedMaterial.SetTexture("_GradientTex", null); meshRenderer.sharedMaterial.SetTexture("_NoiseTex", noiseTexture); meshRenderer.sharedMaterial.SetTexture("_TFTex", tfTexture); diff --git a/Assets/Scripts/VolumeObject/VolumeRenderedObject.cs b/Assets/Scripts/VolumeObject/VolumeRenderedObject.cs index e8971dd..f5ed12c 100644 --- a/Assets/Scripts/VolumeObject/VolumeRenderedObject.cs +++ b/Assets/Scripts/VolumeObject/VolumeRenderedObject.cs @@ -13,7 +13,8 @@ namespace UnityVolumeRendering [HideInInspector] public VolumeDataset dataset; - private RenderMode remderMode; + private RenderMode renderMode; + private TFRenderMode tfRenderMode; public SlicingPlane CreateSlicingPlane() { @@ -34,37 +35,63 @@ namespace UnityVolumeRendering public void SetRenderMode(RenderMode mode) { - remderMode = mode; + renderMode = mode; + UpdateMaaterialProperties(); + } - switch (mode) + public void SetTransferFunctionMode(TFRenderMode mode) + { + tfRenderMode = mode; + UpdateMaaterialProperties(); + } + + public RenderMode GetRenderMode() + { + return renderMode; + } + + private void UpdateMaaterialProperties() + { + MeshRenderer meshRenderer = GetComponent(); + + bool useGradientTexture = tfRenderMode == TFRenderMode.TF2D || renderMode == RenderMode.IsosurfaceRendering; + meshRenderer.sharedMaterial.SetTexture("_GradientTex", useGradientTexture ? dataset.GetGradientTexture() : null); + + if(tfRenderMode == TFRenderMode.TF2D) + { + meshRenderer.sharedMaterial.SetTexture("_TFTex", transferFunction2D.GetTexture()); + meshRenderer.sharedMaterial.EnableKeyword("TF2D_ON"); + } + else + { + meshRenderer.sharedMaterial.SetTexture("_TFTex", transferFunction.GetTexture()); + meshRenderer.sharedMaterial.DisableKeyword("TF2D_ON"); + } + + switch (renderMode) { case RenderMode.DirectVolumeRendering: { - GetComponent().sharedMaterial.EnableKeyword("MODE_DVR"); - GetComponent().sharedMaterial.DisableKeyword("MODE_MIP"); - GetComponent().sharedMaterial.DisableKeyword("MODE_SURF"); + meshRenderer.sharedMaterial.EnableKeyword("MODE_DVR"); + meshRenderer.sharedMaterial.DisableKeyword("MODE_MIP"); + meshRenderer.sharedMaterial.DisableKeyword("MODE_SURF"); break; } case RenderMode.MaximumIntensityProjectipon: { - GetComponent().sharedMaterial.DisableKeyword("MODE_DVR"); - GetComponent().sharedMaterial.EnableKeyword("MODE_MIP"); - GetComponent().sharedMaterial.DisableKeyword("MODE_SURF"); + meshRenderer.sharedMaterial.DisableKeyword("MODE_DVR"); + meshRenderer.sharedMaterial.EnableKeyword("MODE_MIP"); + meshRenderer.sharedMaterial.DisableKeyword("MODE_SURF"); break; } case RenderMode.IsosurfaceRendering: { - GetComponent().sharedMaterial.DisableKeyword("MODE_DVR"); - GetComponent().sharedMaterial.DisableKeyword("MODE_MIP"); - GetComponent().sharedMaterial.EnableKeyword("MODE_SURF"); + meshRenderer.sharedMaterial.DisableKeyword("MODE_DVR"); + meshRenderer.sharedMaterial.DisableKeyword("MODE_MIP"); + meshRenderer.sharedMaterial.EnableKeyword("MODE_SURF"); break; } } } - - public RenderMode GetRemderMode() - { - return remderMode; - } } }