ビューポートのシェーディング設定
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
[ビューポート設定](Viewport Configuration)ダイアログ ボックスの[ライトとシャドウ](Lighting and Shadows)タブにある[ハードウェア シェーディングを有効](Enable Hardware Shading)チェックボックスの状態を取得/設定します。
ハードウェア シェーディングを有効にするには true に設定し、無効にするには false に設定します。
これは IViewportShadingMgr.ShadingLimit=#None と同等です。
IObject:ViewportShadingSettings>.ShadingQuality: enum : Read|Write
ShadingQuality enums: {#Good|#Best}
[ビューポート設定](Viewport Configuration)ダイアログ ボックスの[ライトとシャドウ](Lighting and Shadows)タブにある[グローバル設定](Global
Settings)領域の[品質/ハードウェア サポート](Quality/Hardware Support)ラジオ ボタンの状態を取得/設定します。
これらは以下と同等です。
IViewportShadingMgr.ShadingLimit=#Good
以下を使用する場合では、何が違いますか。
IViewportShadingMgr.ShadingLimit=#Best
例:
|
vss = maxops.getViewportShadingSettings()
--><IObject:ViewportShadingSettings>
vss.ActivateViewportShading
-->false
vss.ActivateViewportShading = true
-->true
|
IObject:ViewportShadingSettings>.ShadowsActive: bool : Read|Write
[ビューポート設定](Viewport Configuration)ダイアログ ボックスの[ライトとシャドウ](Lighting and Shadows)タブにある[シャドウ
オプション](Shadow Options)領域の[シャドウを有効](Enable Shadows)チェックボックスの状態を取得/設定します。
IObject:ViewportShadingSettings>.TonemappingActive: bool : Read|Write
[ビューポート設定](Viewport Configuration)ダイアログ ボックスの[ライトとシャドウ](Lighting and Shadows)タブにある[ビューポート トーン マッピングを有効](Enable Exposure Control in Viewport)チェックボックスの状態を取得/設定します。
true に設定した場合は、[露出制御](Exposure Control)はビューポートに適用されます。
false に設定した場合は、最終レンダリングにのみ適用されます。
Interface: ViewportGISettings
プロパティ:
アンビエント オクルージョン
<IObject:ViewportShadingSettings>.AmbientOcclusionMode : enum : Read|Write
AmbientOcclusionMode enums: {#GIOff|#AOOnly|#AOComposite}
ビューポートのアンビエント オクルージョンのモードを取得/設定します。
[ビューポート設定](Viewport Configuration)ダイアログ ボックスの[ライトとシャドウ](Lighting and Shadows)タブは、チェックボックスがオフである場合は
#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 です。
間接光(サポートされていません)
注:間接光のプレビュー機能は、UI には公開されておらず、3ds Max 2010ではサポートされていません。
<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
|
結果(間接光のみ)
|
|
被写界深度(サポートされていません)
注:被写界深度のプレビュー機能は、UI には公開されておらず、3ds Max 2010 ではサポートされていません。
<IObject:ViewportShadingSettings>.DepthOfFieldActive: bool : Read|Write
被写界深度の有効状態を取得/設定します。
<IObject:ViewportShadingSettings>.DepthOfFieldNearPlane: float : Read|Write
被写界深度の[近接平面](Near Plane)の値を取得/設定します。
<IObject:ViewportShadingSettings>.DepthOfFieldFarPlane: float : Read|Write
被写界深度の[遠方平面](Far Plane)の値を取得/設定します。
<IObject:ViewportShadingSettings>.DepthOfFieldFocusPlane: float : Read|Write
被写界深度の[フォーカス プレーン](Focus Plane)の値を取得/設定します。
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}
[ビューポート設定](Viewport Configuration)ダイアログ ボックスの[ライトとシャドウ](Lighting and Shadows)タブにある[シャドウ
オプション](Shadow Options)領域の[ハード シャドウ](Hard Shadow)、[ソフト シャドウ](Soft Shadow)ラジオ ボタンの状態を取得/設定します。
#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
)
|