Skip to content

Commit

Permalink
Make ambient shadows intensity configurable with shift and scale
Browse files Browse the repository at this point in the history
  • Loading branch information
lassoan committed Jun 6, 2024
1 parent b684739 commit c8ddc75
Show file tree
Hide file tree
Showing 2 changed files with 239 additions and 166 deletions.
20 changes: 18 additions & 2 deletions Lights/Lights.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ def setup(self):
self.ui.ambientShadowsSizeScaleSliderWidget.connect('valueChanged(double)', lambda value: self.logic.setAmbientShadowsSizeScale(value))
self.ui.ambientShadowsVolumeOpacityThresholdPercentSliderWidget.connect('valueChanged(double)', lambda value: self.logic.setAmbientShadowsVolumeOpacityThreshold(value*0.01))
self.ui.ambientShadowsIntensityScaleSliderWidget.connect('valueChanged(double)', lambda value: self.logic.setAmbientShadowsIntensityScale(value*0.01))
self.ui.ambientShadowsIntensityShiftSliderWidget.connect('valueChanged(double)', lambda value: self.logic.setAmbientShadowsIntensityShift(value*0.01))

self.ui.adaptiveRenderingQualityCheckBox.connect('toggled(bool)', self.logic.setAdaptiveRenderingQuality)

Expand Down Expand Up @@ -302,9 +303,12 @@ def updateWidgetFromLogic(self):
self.ui.ambientShadowsVolumeOpacityThresholdPercentSliderWidget.value = self.logic.ambientShadowsVolumeOpacityThreshold*100
if hasattr(slicer.vtkMRMLViewNode, "SetAmbientShadowsIntensityScale"):
self.ui.ambientShadowsIntensityScaleSliderWidget.value = self.logic.ambientShadowsIntensityScale*100
self.ui.ambientShadowsIntensityShiftSliderWidget.value = self.logic.ambientShadowsIntensityShift*100
else:
self.ui.ambientShadowsIntensityScaleLabel.hide()
self.ui.ambientShadowsIntensityScaleSliderWidget.hide()
self.ui.ambientShadowsIntensityShiftLabel.hide()
self.ui.ambientShadowsIntensityShiftSliderWidget.hide()
else:
self.ui.SSAOCollapsibleButton.hide()

Expand All @@ -328,12 +332,13 @@ def __init__(self):
self.lightkitObserverTag = self.lightKit.AddObserver(vtk.vtkCommand.ModifiedEvent, self.onLightkitModified)

self.slicerCoreSupportsShadows = hasattr(slicer.vtkMRMLViewNode, "SetShadowsVisibility")
self.slicerCoreSupportsShadowsIntensityScale = hasattr(slicer.vtkMRMLViewNode, "SetAmbientShadowsIntensityScale")
self.slicerCoreSupportsShadowsIntensityShiftScale = hasattr(slicer.vtkMRMLViewNode, "SetAmbientShadowsIntensityScale")

self.shadowsVisibility = True
self.ambientShadowsSizeScale = 0.3
self.ambientShadowsVolumeOpacityThreshold = 0.25
self.ambientShadowsIntensityScale = 1.0
self.ambientShadowsIntensityShift = 0.0

self.adaptiveRenderingQuality = True

Expand Down Expand Up @@ -401,6 +406,7 @@ def addManagedView(self, viewNode):
self.setAmbientShadowsSizeScale(self.ambientShadowsSizeScale, viewNode)
self.setAmbientShadowsVolumeOpacityThreshold(self.ambientShadowsVolumeOpacityThreshold, viewNode)
self.setAmbientShadowsIntensityScale(self.ambientShadowsIntensityScale, viewNode)
self.setAmbientShadowsIntensityShift(self.ambientShadowsIntensityShift, viewNode)
self.setAdaptiveRenderingQuality(self.adaptiveRenderingQuality, viewNode)
self.requestRender(viewNode)

Expand Down Expand Up @@ -504,9 +510,19 @@ def setAmbientShadowsIntensityScale(self, intensityScale, viewNode=None):
else:
viewNodes = [viewNode]
for viewNode in viewNodes:
if self.slicerCoreSupportsShadowsIntensityScale:
if self.slicerCoreSupportsShadowsIntensityShiftScale:
viewNode.SetAmbientShadowsIntensityScale(intensityScale)

def setAmbientShadowsIntensityShift(self, intensityShift, viewNode=None):
if viewNode is None:
self.ambientShadowsIntensityShift = intensityShift
viewNodes = self.managedViewNodes
else:
viewNodes = [viewNode]
for viewNode in viewNodes:
if self.slicerCoreSupportsShadowsIntensityShiftScale:
viewNode.SetAmbientShadowsIntensityShift(intensityShift)

def setAdaptiveRenderingQuality(self, enable, viewNode=None):
if viewNode is None:
self.adaptiveRenderingQuality = enable
Expand Down
Loading

0 comments on commit c8ddc75

Please sign in to comment.