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