Viewport Shading Settings

 

   

Viewport Shading - Quick Navigation

The following method exposed by the MaxOps struct in 3ds Max 2010 and higher returns a ViewportShadingSettings object which in turn provides interfaces to control some advanced viewport settings including Soft Shadows, Ambient Occlusion and Exposure Control preview.

NOTE:

In 3ds Max 2012, these settings apply to the Direct3D driver. When running the Nitrous Graphics Manager, most of these properties and methods will have no effect, for example the property .ActivateViewportShading documented below will return true when the viewport is set to "Realistic" mode, but setting the property to false will have no effect on the viewport mode or on the value of the property.

<IObject>maxops.getViewportShadingSettings() 	 

Returns an <IObject:ViewportShadingSettings> object exposing several interfaces related to advanced viewport shading controls.

EXAMPLE:

vss = maxops.getViewportShadingSettings()
--> <IObject:ViewportShadingSettings>
showInterfaces vss

   

Interface: ViewportBasicSettings 

Properties:

IObject:ViewportShadingSettings>.ActivateViewportShading: bool : Read|Write 

Get/set the state of the Enable Hardware Shading checkbox in the Lighting and Shadows tab of the Viewport Configuration dialog.

Set to true to enable hardware shading, set to false to disable it.

This is equivalent to IViewportShadingMgr.ShadingLimit=#None

   

IObject:ViewportShadingSettings>.ShadingQuality: enum : Read|Write 
ShadingQuality enums: {#Good|#Best} 

Get/set thestate of the Quality/Hardware Support radio buttons in the Global Settings group of controls in the Lighting and Shadows tab of the Viewport Configuration dialog.

These are equivalent to

IViewportShadingMgr.ShadingLimit=#Good 

and

IViewportShadingMgr.ShadingLimit=#Best 

EXAMPLE:

vss = maxops.getViewportShadingSettings()
--><IObject:ViewportShadingSettings>
vss.ActivateViewportShading
-->false
vss.ActivateViewportShading = true
-->true

   

IObject:ViewportShadingSettings>.ShadowsActive: bool : Read|Write 

Get/set the state of the Enable Shadows checkbox in the Shadow Options group of controls in the Lighting and Shadows tab of the Viewport Configuration dialog.

   

IObject:ViewportShadingSettings>.TonemappingActive: bool : Read|Write 

Get/set the state of the Enable Exposure Control in Viewport checkbox in the Lighting and Shadows tab of the Viewport Configuration dialog.

When set to true, the Exposure Control will be applied to the viewport.

When set to false, it will be applied only to the final rendering.

   

Interface: ViewportGISettings 

Properties:

Ambient Occlusion

 <IObject:ViewportShadingSettings>.AmbientOcclusionMode : enum : Read|Write 

AmbientOcclusionMode enums: {#GIOff|#AOOnly|#AOComposite} 

Get/set the Viewport Ambient Occlusion mode.

The Lighting and Shadows tab of the Viewport Configuration dialog exposes only a checkbox which corresponds to #GIOff when the checkbox is unchecked and #AOComposite when the checkbox is checked. Zero-based integers can be used in place of the enums.

Possible numeric or enum values are:

0 (#GIOff) - No Global Illumination.

1 (#AOOnly) - Only Ambient Occlusion, black and white with no other shading.

2 (#AOComposite) - Ambient Occlusion composited over the shaded scene.

   

<IObject:ViewportShadingSettings>.AmbientOcclusionQuality: enum : Read|Write 

AmbientOcclusionQuality enums: {#Low|#Medium|#High} 

Get/set the Viewport Ambient Occlusion quality.

Possible numeric or enum values are:

0 (#Low) - 16 sample points

1 (#Medium) - 32 sample points

2 (#High) - 64 sample points

   

<IObject:ViewportShadingSettings>.AmbientOcclusionRadius: float : Read|Write 

Get/set the Ambient Occlusion sample radius value.

   

<IObject:ViewportShadingSettings>.AmbientOcclusionStrength: float : Read|Write 

Get/set the Ambient Occlusion strength value. It controls the intensity of the effect. Effective range is from 0.0 to 1.0.

Indirect Lighting (Unsupported)

NOTE:The Indirect Lighting preview feature is not exposed to the UI and is not supported in 3ds Max 2010.
<IObject:ViewportShadingSettings>.IndirectLightingMode: enum : Read|Write 

IndirectLightingMode enums: {#ILOff|#ILOnly|#ILAOComposite} 

Get/set the Indirect Illumination mode.

Possible numeric or enum values are:

0 (#ILOff) - No Indirect Lighting (default)

1 (#ILOnly) - Only the Indirect Lighting effect will be used.

2 (#ILAOComposite) - Indirect Lighting and Ambient Occlusion Composite mode.

   

<IObject:ViewportShadingSettings>.IndirectLightingQuality: enum : Read|Write 

IndirectLightingQuality enums: {#Low|#Medium|#High} 

Get/set the Indirect Lighting quality.

Possible numeric or enum values are:

0 (#Low) - 16 sample points

1 (#Medium) - 32 sample points (default)

2 (#High) - 64 sample points

   

<IObject:ViewportShadingSettings>.IndirectLightingRadius: float : Read|Write 

Get/set the Indirect Lighting radius value.

CORNELL BOX EXAMPLE:

resetMaxFile #noPrompt
viewport.setTM (matrix3 [1,0,0] [0,0,-1] [0,1,0] [6,-150,-800])
bx = box width:300 height:300 length:300 backfacecull:true
addModifier bx (normalModifier flip:true)
mtl = multiMaterial numsubs:6
mtlred = standard diffusecolor:red
mtlblue = standard diffusecolor:blue
mtlwht = standard diffusecolor:white
mtl.materialList = #(mtlwht,mtlwht,mtlred,mtlblue,mtlwht,mtlwht)
bx.material = mtl
om = omniLight pos:[0,0,250] rgb:white shadowMultiplier:0.5
om.baseobject.castshadows = true
sph = sphere radius:50 pos:[0,0,50] segs:32
sph.material = standard diffusecolor:green selfillumamount:15.0
vss = maxops.getViewportShadingSettings()
vss.ActivateViewportShading = true
vss.ShadowsActive = true
vss.IndirectLightingRadius = 200
vss.IndirectLightingQuality = #medium
vss.IndirectLightingMode = #ILAOComposite

RESULT:

 
vss.IndirectLightingMode = #ILOnly

RESULT (Indirect Lighting Only)

 

Depth Of Field (Unsupported)

NOTE:The Depth Of Field preview feature is not exposed to the UI and is not supported in 3ds Max 2010.
<IObject:ViewportShadingSettings>.DepthOfFieldActive: bool : Read|Write 

Get/set the Depth Of Field enabled state.

   

<IObject:ViewportShadingSettings>.DepthOfFieldNearPlane: float : Read|Write 

Get/set the Depth Of Field Near Plane value.

   

<IObject:ViewportShadingSettings>.DepthOfFieldFarPlane: float : Read|Write 

Get/set the Depth Of Field Far Plane value.

   

<IObject:ViewportShadingSettings>.DepthOfFieldFocusPlane: float : Read|Write 

Get/set the Depth Of Field Focus Plane value.

DOF BOX EXAMPLE:

resetMaxFile #noPrompt
viewport.setTM (matrix3 [1,0,0] [0,0,-1] [0,1,0] [6,-150,-800])
bx = box width:500 height:300 length:2000 backfacecull:true
addModifier bx (normalModifier flip:true)
mp1 = checker color1:[0,200,255] color2:[255,255,200]
mp1.coords.U_Tiling = 10
mp1.coords.V_Tiling = 10
bx.material = standard diffusecolor:white diffusemap:mp1
showTextureMap bx.material mp1 true
om = omniLight pos:[0,0,250] rgb:white shadowMultiplier:0.5
om.baseobject.castshadows = true
sph = sphere radius:50 pos:[0,0,50] segs:32
sph.material = standard diffusecolor:green selfillumamount:15.0
tp1 = teapot radius:50 pos:[80,-250,0]
tp1.material = standard diffusecolor:red
tp2 = teapot radius:50 pos:[-100,500,0]
tp2.material = standard diffusecolor:blue
vss = maxops.getViewportShadingSettings()
vss.ActivateViewportShading = true
vss.ShadowsActive = true
vss.ShadowMode = #Soft
vss.AmbientOcclusionMode = #AOComposite
vss.DepthOfFieldActive = true
vss.DepthOfFieldNearPlane = 300
vss.DepthOfFieldFarPlane = 1500
vss.DepthOfFieldFocusPlane = 800

RESULT:

 

   

Interface: ViewportShadowSettings 

Properties:

<IObject:ViewportShadingSettings>.ShadowMode: enum : Read|Write 
ShadowMode enums: {#Hard|#Soft} 

Get/set thestate of the Hard/Soft Shadow radio buttons in the Shadow Options group of controls in the Lighting and Shadows tab of the Viewport Configuration dialog.

When set to #Hard , the shadows will be drawn in the original mode introduced in 3ds Max 2008.

When set to #Soft , the soft shadows mode introduced in 3ds Max 2010 will be used instead.

VIEWPORT SHADING EXPLORER SCRIPT:

macroScript ViewportShadingExplorer category:"MAXScript Help"
(
global Viewport_Shading_Explorer_Dialog
try(destroyDialog Viewport_Shading_Explorer_Dialog)catch()
rollout Viewport_Shading_Explorer_Dialog "Viewport Shading Explorer"
(
local vss = maxops.getViewportShadingSettings()
group "Hardware Shading"
(
checkbox chk_ActivateViewportShading "Activate Viewport Shading "checked:vss.ActivateViewportShading
dropdownlist ddl_ShadingQuality items:#("Good Quality", "Best Quality") selection: (findItem #(#Good, #Best) vss.ShadingQuality)
checkbox chk_TonemappingActive "Exposure Control In Viewport" checked:vss.TonemappingActive
)
group "Shadows"
(
checkbox chk_ShadowsActive "Shadows Active" checked:vss.ShadowsActive
dropdownlist ddl_ShadowMode items:#("Hard Shadows","Soft Shadows") selection:(if vss.ShadowMode == #Hard then 1 else 2)
)
group "Soft and Area Shadows"
(
spinner spn_CubeBias "Cube Bias" range:[0,1000,ViewportSSB.CubeBias] fieldwidth:50
spinner spn_ShadowMapSize "Shadow Map Size (2^N)" range:[1,10,sqrt ViewportSSB.ShadowMapSize] type:#integer fieldwidth:50
checkbox chk_AreaShadow "Area Shadow" checked:ViewportSSB.AreaShadow
checkbox chk_TransAreaShadow "Transparent Area Shadow" checked:ViewportSSB.TransAreaShadow
)
group "Ambient Occlusion"
(
dropdownlist ddl_AmbientOcclusionMode items:#("Ambient Occlusion Off","Ambient Occlusion Only", "Ambient Occlusion Composite") selection:(findItem #(#AOOff,#AOOnly,#AOComposite) vss.AmbientOcclusionMode )
dropdownlist ddl_AmbientOcclusionQuality items:#("Low Quality","Medium Quality", "High Quality") selection:(findItem #(#Low,#Medium,#High) vss.AmbientOcclusionQuality )
spinner spn_AmbientOcclusionRadius "Sample Radius:" range:[0,1000,vss.AmbientOcclusionRadius] fieldwidth:50
spinner spn_AmbientOcclusionStrength "Strength:" range:[0,1000,vss.AmbientOcclusionStrength] fieldwidth:50
)
group "Indirect Lighting"
(
dropdownlist ddl_IndirectLightingMode items:#("Indirect Lighting Off","Indirect Lighting Only", "Indirect Lighting AO Composite") selection:(findItem #(#ILOff,#ILOnly,#ILAOComposite) vss.IndirectLightingMode )
dropdownlist ddl_IndirectLightingQuality items:#("Low Quality","Medium Quality", "High Quality") selection:(findItem #(#Low,#Medium,#High) vss.IndirectLightingQuality )
spinner spn_IndirectLightingRadius "Sample Radius:" range:[0,1000,vss.IndirectLightingRadius] fieldwidth:50
)
group "Depth Of Field"
(
checkbox chk_DepthOfFieldActive "Depth Of Field Active" checked:vss.DepthOfFieldActive
spinner spn_DepthOfFieldNearPlane "Near Plane" range:[0,10000000,vss.DepthOfFieldNearPlane] fieldwidth:50
spinner spn_DepthOfFieldFarPlane "Far Plane" range:[0,10000000,vss.DepthOfFieldFarPlane] fieldwidth:50
spinner spn_DepthOfFieldFocusPlane "Focus Plane" range:[0,10000000,vss.DepthOfFieldFocusPlane] fieldwidth:50
)
on chk_ActivateViewportShading changed state do
vss.ActivateViewportShading = state
on ddl_ShadingQuality selected itm do
vss.ShadingQuality = (#(#Good, #Best))[itm]
on chk_TonemappingActive changed state do
vss.TonemappingActive = state
on chk_ShadowsActive changed state do
vss.ShadowsActive = state
on ddl_ShadowMode selected itm do
vss.ShadowMode = (#(#Hard, #Soft))[itm]
on spn_CubeBias changed val do
ViewportSSB.CubeBias = val
on spn_ShadowMapSize changed val do
ViewportSSB.ShadowMapSize = 2^val
on chk_AreaShadow changed state do
ViewportSSB.AreaShadow = state
on chk_TransAreaShadow changed state do
ViewportSSB.TransAreaShadow = state
on ddl_AmbientOcclusionMode selected itm do
vss.AmbientOcclusionMode = (#(#AOOff,#AOOnly,#AOComposite))[itm]
on ddl_AmbientOcclusionQuality selected itm do
vss.AmbientOcclusionQuality = (#(#Low,#Medium,#High))[itm]
on spn_AmbientOcclusionRadius changed val do
vss.AmbientOcclusionRadius = val
on spn_AmbientOcclusionStrength changed val do
vss.AmbientOcclusionStrength = val
on ddl_IndirectLightingMode selected itm do
vss.IndirectLightingMode = (#(#ILOff,#ILOnly,#ILAOComposite))[itm]
on ddl_IndirectLightingQuality selected itm do
vss.IndirectLightingQuality = (#(#Low,#Medium,#High))[itm]
on spn_IndirectLightingRadius changed val do
vss.IndirectLightingRadius = val
on chk_DepthOfFieldActive changed state do
vss.DepthOfFieldActive = state
on spn_DepthOfFieldNearPlane changed val do
vss.DepthOfFieldNearPlane = val
on spn_DepthOfFieldFarPlane changed val do
vss.DepthOfFieldFarPlane = val
on spn_DepthOfFieldFocusPlane changed val do
vss.DepthOfFieldFocusPlane = val
)
createDialog Viewport_Shading_Explorer_Dialog 200 605
)

   

See Also