MaxOps struct によって公開される以下のメソッドは 3ds Max 以降、ViewportShadingSettings オブジェクトを返し、ソフト シャドウ、アンビエント オクルージョン、露出コントロール プレビューなどの高度なビューポート設定をコントロールするためのインタフェースを提供します。
3ds Max 2012 では、これらの設定は Direct3D ドライバに適用されます。Nitrous グラフィックス マネージャを実行している場合、これらのプロパティとメソッドのほとんどは影響しません。たとえば、後述するプロパティ .ActivateViewportShading は、ビューポートが「リアリスティック」モードに設定されている場合に true を返しますが、プロパティを false に設定しても、ビューポートのモードやプロパティの値には影響しません。
<IObject>maxops.getViewportShadingSettings()
高度なビューポート シェーディング コントロールに関連するいくつかのインタフェースを公開する <IObject:ViewportShadingSettings> オブジェクトを返します。
例: |
vss = maxops.getViewportShadingSettings() --> <IObject:ViewportShadingSettings> showInterfaces vss |
Interface: ViewportBasicSettings
プロパティ:
IObject:ViewportShadingSettings>.ActivateViewportShading: bool : Read|Write
[ビューポート設定]ダイアログ ボックスの[ライトとシャドウ]タブにある[ハードウェア シェーディングを有効]チェックボックスの状態を取得/設定します。
ハードウェア シェーディングを有効にするには true に設定し、無効にするには false に設定します。
これは IViewportShadingMgr.ShadingLimit=#None と同等です。
IObject:ViewportShadingSettings>.ShadingQuality: enum : Read|Write ShadingQuality enums: {#Good|#Best}
[ビューポート設定]ダイアログ ボックスの[ライトとシャドウ]タブにある[グローバル設定]領域の[品質/ハードウェア サポート]ラジオ ボタンの状態を取得/設定します。
これらは以下と同等です。
IViewportShadingMgr.ShadingLimit=#Good
以下を使用する場合では、何が違いますか。
IViewportShadingMgr.ShadingLimit=#Best
例: |
vss = maxops.getViewportShadingSettings() --><IObject:ViewportShadingSettings> vss.ActivateViewportShading -->false vss.ActivateViewportShading = true -->true |
IObject:ViewportShadingSettings>.ShadowsActive: bool : Read|Write
[ビューポート設定]ダイアログ ボックスの[ライトとシャドウ]タブにある[シャドウ オプション]領域の[シャドウを有効]チェックボックスの状態を取得/設定します。
IObject:ViewportShadingSettings>.TonemappingActive: bool : Read|Write
[ビューポート設定]ダイアログ ボックスの[ライトとシャドウ]タブにある[ビューポート トーン マッピングを有効]チェックボックスの状態を取得/設定します。
true に設定した場合は、[露出制御]はビューポートに適用されます。
false に設定した場合は、最終レンダリングにのみ適用されます。
Interface: ViewportGISettings
プロパティ:
<IObject:ViewportShadingSettings>.AmbientOcclusionMode : enum : Read|Write AmbientOcclusionMode enums: {#GIOff|#AOOnly|#AOComposite}
ビューポートのアンビエント オクルージョンのモードを取得/設定します。
[ビューポート設定]ダイアログ ボックスの[ライトとシャドウ]タブは、チェックボックスがオフである場合は #GIOff に対応し、オンである場合は #AOComposite に対応するチェックボックスのみを公開しています。enum の位置には基数 0 の整数を使用できます。
使用可能な数値および enum 値は以下の通りです。
0 (#GIOff) - グローバル イルミネーションなし
1 (#AOOnly) - アンビエント オクルージョンのみ、その他のシェーディングのない白黒
2 (#AOComposite) - シェーディングされたシーン上に合成されるアンビエント オクルージョン
<IObject:ViewportShadingSettings>.AmbientOcclusionQuality: enum : Read|Write AmbientOcclusionQuality enums: {#Low|#Medium|#High}
ビューポートのアンビエント オクルージョンの品質を取得/設定します。
使用可能な数値および enum 値は以下の通りです。
0 (#Low) - サンプル ポイント 16 個
1 (#Medium) - サンプル ポイント 32 個
2 (#High) - サンプル ポイント 64 個
<IObject:ViewportShadingSettings>.AmbientOcclusionRadius: float : Read|Write
アンビエント オクルージョンのサンプルの半径値を取得/設定します。
<IObject:ViewportShadingSettings>.AmbientOcclusionStrength: float : Read|Write
アンビエント オクルージョンの強度値を取得/設定します。これは効果の強度をコントロールします。効果の範囲は 0.0 から 1.0 です。
<IObject:ViewportShadingSettings>.IndirectLightingMode: enum : Read|Write IndirectLightingMode enums: {#ILOff|#ILOnly|#ILAOComposite}
間接光 モードを取得/設定します。
使用可能な数値および enum 値は以下の通りです。
0 (#ILOff) - 間接光なし (既定値)
1 (#ILOnly) - 間接光効果のみを使用
2 (#ILAOComposite) - 間接光とアンビエント オクルージョンの合成モード
<IObject:ViewportShadingSettings>.IndirectLightingQuality: enum : Read|Write IndirectLightingQuality enums: {#Low|#Medium|#High}
間接光の品質を取得/設定します。
使用可能な数値および enum 値は以下の通りです。
0 (#Low) - サンプル ポイント 16 個
1 (#Medium) - サンプル ポイント 32 個 (既定値)
2 (#High) - サンプル ポイント 64 個
<IObject:ViewportShadingSettings>.IndirectLightingRadius: float : Read|Write
間接光の半径の値を取得/設定します。
コーネル ボックスの例: |
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 |
結果: |
![]() |
vss.IndirectLightingMode = #ILOnly |
結果(間接光のみ) |
![]() |
<IObject:ViewportShadingSettings>.DepthOfFieldActive: bool : Read|Write
被写界深度の有効状態を取得/設定します。
<IObject:ViewportShadingSettings>.DepthOfFieldNearPlane: float : Read|Write
被写界深度の[近接平面]の値を取得/設定します。
<IObject:ViewportShadingSettings>.DepthOfFieldFarPlane: float : Read|Write
被写界深度の[遠方平面]の値を取得/設定します。
<IObject:ViewportShadingSettings>.DepthOfFieldFocusPlane: float : Read|Write
被写界深度の[フォーカス プレーン]の値を取得/設定します。
DOF ボックスの例: |
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 |
結果: |
![]() |
Interface: ViewportShadowSettings
プロパティ:
<IObject:ViewportShadingSettings>.ShadowMode: enum : Read|Write ShadowMode enums: {#Hard|#Soft}
[ビューポート設定]ダイアログ ボックスの[ライトとシャドウ]タブにある[シャドウ オプション]領域の[ハード シャドウ]、[ソフト シャドウ]ラジオ ボタンの状態を取得/設定します。
#Hard に設定した場合は、シャドウは 3ds Max 2008 で導入されたオリジナル モードで描画されます。
#Soft に設定した場合は、3ds Max 2010 で導入されたソフト シャドウ モードが使用されます。
ビューポート シェーディング エクスプローラのスクリプト: |
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 ) |