ビューポートのシェーディング設定

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: boolean : Read|Write

[ビューポート設定]ダイアログ ボックスの[ライトとシャドウ]タブにある[ハードウェア シェーディングを有効]チェックボックスの状態を取得/設定します。

ハードウェア シェーディングを有効にするには 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: boolean : Read|Write

[ビューポート設定]ダイアログ ボックスの[ライトとシャドウ]タブにある[シャドウ オプション]領域の[シャドウを有効]チェックボックスの状態を取得/設定します。

IObject:ViewportShadingSettings>.TonemappingActive: boolean : 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 です。

間接光(サポートされていません)

注: 間接光のプレビュー機能は、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: boolean : 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}

[ビューポート設定](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
    )