Viewport Shading Settings

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() --> showInterfaces vss

```

Interface: ViewportBasicSettings 

Properties:

IObject:ViewportShadingSettings>.ActivateViewportShading: boolean : 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 the state 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() --> vss.ActivateViewportShading -->false vss.ActivateViewportShading = true -->true

```

IObject:ViewportShadingSettings>.ShadowsActive: boolean : 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: boolean : 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: boolean : 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 the state 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 )

```