リファレンス / 3ds Max / Pencil+ 4 リファレンス

Pencil+ 4 Line Effect リファレンス

  • 3ds Max
  • MaxScript
  • Pencil+ 4
Pencil+ 4 リファレンス の章一覧

3ds Max 2022 / Pencil+ 4 プロパティ・メソッド一覧
プロパティなどをInspectして少し加筆しました。


1. Pencil__4_Line(renderEffect)

Line Effect 本体。getEffect i で取得。

クラス名の注意
MaxScript上のクラス名は Pencil__4_Line(アンダースコア 2つ)。
「Pencil+ 4 Line」の + と空白がそれぞれ _ に変換されるため。

classOf (getEffect 1)  -- => Pencil__4_Line

プロパティ

プロパティ デフォルト 説明
.name String エフェクト名
.linesets ArrayParameter (Pencil__4_Line_Set) ラインセット配列
.randomSeed Integer 0 ランダムシード
.OffscreenDistance Float 150.0 オフスクリーン距離
.RenderElementOnly Boolean false レンダーエレメントのみ出力
.overSampling Integer 2 オーバーサンプリング
.antiAliasing Float 1.0 アンチエイリアシング
.animationEnable Boolean false アニメーション有効
.animationInterval Integer 1 アニメーション間隔
.animationMotionOnly Boolean false モーションのみ
.lineSizeType Integer 1 ラインサイズタイプ (0:pixel(絶対) / 1:absolute(相対))
.multithread Boolean true マルチスレッド

インターフェイス: Pcl4Line

メソッド 戻り値 説明
solveDuplicatedMtlsByName() Integer 重複マテリアルを名前で統合
removeUnusedMtls() Integer 未使用マテリアルを削除

2. 環境効果の管理API

Pencil+ 4 Line は 3ds Max の環境効果(Environment Effects)に属する。大気効果(Atmospherics)とは別系統のため、操作APIが異なる。

環境効果(Pencil+ 4 Line が属する側)

関数 戻り値 説明
numEffects Integer 環境効果の総数
getEffect i renderEffect インデックスで効果を取得
deleteEffect i インデックスで効果を削除

大気効果(Fog, Volume Fog 等)

関数 戻り値 説明
numAtmospherics Integer 大気効果の総数
getAtmospheric i atmospheric インデックスで効果を取得
deleteAtmospheric i インデックスで効果を削除

注意: renderers.current はレンダラー(Scanline, V-Ray等)を返すものであり、Pencil+ 4 Line エフェクトは取得できない。必ず getEffect i を使用すること。

効果の収集パターン

-- シーン内の全 Pencil+ 4 Line エフェクトを収集
fn collectPencilLineEffects = (
    local result = #()
    for i = 1 to numEffects do (
        local effect = getEffect i
        if classOf effect == Pencil__4_Line do (
            append result effect
        )
    )
    return result
)

効果の削除パターン

削除時は逆順で行う。順方向で削除するとインデックスがずれる。

-- 条件に一致する環境効果を削除
-- ※逆順で削除しないとインデックスずれが発生する
for i = numEffects to 1 by -1 do (
    local effect = getEffect i
    if classOf effect == Pencil__4_Line do (
        deleteEffect i
    )
)

3. Pencil__4_Line_Set(ReferenceTarget)

effect.linesets[i] で取得。1ラインセットの全設定を保持。

基本プロパティ

プロパティ デフォルト 説明
.name String “ラインセット1” ラインセット名
.id Integer 1 ラインセットID
.Enable Boolean true 有効フラグ
.objects ArrayParameter (Node) #() 対象オブジェクト配列
.mtls ArrayParameter (material) #() 対象マテリアル配列
.weldEdgesBetweenObjects Boolean false オブジェクト間エッジ結合
.maskHiddenLinesOfOtherLinesets Boolean false 他ラインセットの隠線マスク
.load undefined .pl4拡張子としてラインセットの情報をロード
.save undefined .pl4拡張子でラインセットの情報をセーブ

.pl4について

テキストで各パラメータの直書きをI/Oするものっぽい

大まかな設定は持っていけるようだが、.ColorMapに紐づいているtextureMapなどは持っていけない。

細かい設定をちゃんと持っていけなさそうなので、使用は非推奨かも…

ラインセットの対象指定方式

ラインセットは マテリアルベース.mtls)または オブジェクトベース.objects)のどちらかで描画対象を指定できる。

.mtls .objects 状態
無効(描画対象なし)
あり 有効(オブジェクトベース)
あり 空 or あり 有効(マテリアルベース)

.mtls にマテリアルが登録されている場合、そのマテリアルが実際にシーン内のオブジェクトに割り当てられているかどうかで、ラインセットが実質的に有効かを判定できる。

-- ラインセットに有効な対象が存在するかチェック
fn isLinesetActive ls sceneMats = (
    local hasMtls = ls.mtls != undefined and ls.mtls.count > 0
    local hasObjects = ls.objects != undefined and ls.objects.count > 0
    
    -- 両方空なら無効
    if not hasMtls and not hasObjects then return false
    
    -- オブジェクトベースなら有効
    if not hasMtls and hasObjects then return true
    
    -- マテリアルベース: シーン内に存在するマテリアルがあるか
    for mat in ls.mtls do (
        if mat != undefined and findItem sceneMats mat > 0 then
            return true
    )
    
    false
)

エッジ表示(Visible ライン)

プロパティ デフォルト 説明
.edgeOutlineVisible Boolean true アウトライン
.openEdgeOutlineVisible Boolean true 開いたエッジのアウトライン
.groupOutlineVisible Boolean false グループアウトライン
.edgeObjectVisible Boolean true オブジェクトエッジ
.openEdgeObjectVisible Boolean true 開いたエッジのオブジェクト
.edgeIsectVisible Boolean true 交差エッジ
.edgeSelfIsectVisible Boolean true 自己交差エッジ
.edgeSmoothVisible Boolean true スムージングエッジ
.edgeMatIDVisible Boolean true マテリアルIDエッジ
.edgeNormalVisible Boolean false 法線角エッジ
.edgeNormalMaxVisible Float 180.0 法線角 最大値
.edgeNormalMinVisible Float 45.0 法線角 最小値
.edgeWireVisible Boolean false ワイヤーエッジ
.edgeSelVisible Boolean true 選択エッジ

エッジ表示(Hidden ライン)

プロパティ デフォルト 説明
.edgeOutlineHidden Boolean false アウトライン
.openEdgeOutlineHidden Boolean true 開いたエッジのアウトライン
.groupOutlineHidden Boolean false グループアウトライン
.edgeObjectHidden Boolean false オブジェクトエッジ
.openEdgeObjectHidden Boolean true 開いたエッジのオブジェクト
.edgeIsectHidden Boolean false 交差エッジ
.edgeSelfIsectHidden Boolean true 自己交差エッジ
.edgeSmoothHidden Boolean false スムージングエッジ
.edgeMatIDHidden Boolean false マテリアルIDエッジ
.edgeNormalHidden Boolean false 法線角エッジ
.edgeNormalMaxHidden Float 180.0 法線角 最大値
.edgeNormalMinHidden Float 45.0 法線角 最小値
.edgeWireHidden Boolean false ワイヤーエッジ
.edgeSelHidden Boolean false 選択エッジ

個別ブラシ有効化(Visible / Hidden)

命名規則: .specific{EdgeType}Enable{Visible|Hidden}

Visible Hidden デフォルト
.specificOutlineEnableVisible .specificOutlineEnableHidden false
.specificObjectEnableVisible .specificObjectEnableHidden false
.specificIsectEnableVisible .specificIsectEnableHidden false
.specificSmoothEnableVisible .specificSmoothEnableHidden false
.specificMatIDEnableVisible .specificMatIDEnableHidden false
.specificNormalEnableVisible .specificNormalEnableHidden false
.specificWireEnableVisible .specificWireEnableHidden false
.specificSelEnableVisible .specificSelEnableHidden false

減衰 有効化

プロパティ デフォルト
.sizeReductionEnableVisible Boolean false
.alphaReductionEnableVisible Boolean false
.sizeReductionEnableHidden Boolean false
.alphaReductionEnableHidden Boolean false

ブラシ設定参照

各エッジタイプに対し Visible 用 / Hidden 用のブラシを持つ。

Visible ブラシ Hidden ブラシ 対応エッジ
.brush .brush_Hidden 共通(デフォルト)
.brushOutline .brushOutline_Hidden アウトライン
.brushObject .brushObject_Hidden オブジェクト
.brushIntersection .brushIntersection_Hidden 交差
.brushSmoothingGroup .brushSmoothingGroup_Hidden スムージング
.brushMaterialID .brushMaterialID_Hidden マテリアルID
.brushNormalAngle .brushNormalAngle_Hidden 法線角
.brushWire .brushWire_Hidden ワイヤー
.brushSelectedEdge .brushSelectedEdge_Hidden 選択エッジ

減衰設定参照

Visible Hidden 対象
.sizeReduction .sizeReduction_Hidden サイズ減衰
.alphaReduction .alphaReduction_Hidden アルファ減衰

4. Brush_Settings(textureMap)

ブラシ設定。各エッジタイプごとに1インスタンス。

プロパティ

プロパティ デフォルト 説明
.detail Brush_Details ブラシ詳細設定
.color Color (0, 0, 0) ライン色
.colorMapOpacity Float 100.0 カラーマップ不透明度
.colorMapEnable Boolean true カラーマップ有効
.ColorMap textureMap / undefined undefined カラーマップ
.Blend Integer 0 ブレンドモード
.alpha Float 100.0 アルファ値
.size Float 1.0 ラインサイズ
.sizeMapAmount Float 100.0 サイズマップ量
.sizeMapEnable Boolean true サイズマップ有効
.sizeMap textureMap / undefined undefined サイズマップ
.dialogOpen Boolean false ダイアログ開閉状態
.detailDialogOpen Boolean false 詳細ダイアログ開閉状態

.ColorMapについて

TextureMapを貼り付けるとその色の線が出る。 UVに沿って色が描画されるので、テクスチャごとに色線を分けることは可能。

標準UIからはbitmap内のパラメータは触れないが、設定したbitmapを割り当てたりなどは可能なので、クロッピングなども一応可能。

現状のプロジェクトでは安全性重視で素のbitmapで統一してたりする。


5. Brush_Details(textureMap)

ブラシの詳細パラメータ(ストローク・ノイズ等)。

基本パラメータ

プロパティ デフォルト 説明
.type Integer 2 ブラシタイプ
.map textureMap / undefined undefined テクスチャマップ
.mapOpacity Float 100.0 マップ不透明度
.mapEnable Boolean true マップ有効
.Stretch Float 0.0 ストレッチ
.stretchRnd Float 0.0 ストレッチ ランダム
.angle Float 0.0 角度
.angleRnd Float 0.0 角度 ランダム
.groove Float 0.0
.grooveNum Integer 5 溝の数
.size Float 16.0 ブラシサイズ
.sizeRnd Float 80.0 サイズ ランダム
.anti Float 50.0 アンチエイリアシング
.hSpace Float 10.0 水平間隔
.hSpaceRnd Float 100.0 水平間隔 ランダム
.vSpace Float 10.0 垂直間隔
.vSpaceRnd Float 100.0 垂直間隔 ランダム
.reductionStart Float 100.0 減衰開始
.reductionEnd Float 100.0 減衰終了

カーブ

プロパティ 説明
.sizeCurveIF Pencil__4_Curve_Control_Interface サイズカーブ
.alphaCurveIF Pencil__4_Curve_Control_Interface アルファカーブ

ストローク

プロパティ デフォルト 説明
.strokeType Integer 0 ストロークタイプ
.strokeStyle Integer 0 ストロークスタイル
.strokeLength Float 5.0 長さ
.strokeLengthRnd Float 0.0 長さ ランダム
.strokeSizeRnd Float 0.0 サイズ ランダム
.strokeSpace Float 5.0 間隔
.strokeSpaceRnd Float 0.0 間隔 ランダム
.strokeExtend Float 0.0 延長
.strokeeExtendRnd Float 0.0 延長 ランダム(※typo: strokee
.strokeCopy Integer 1 コピー数
.strokeCopyRnd Integer 0 コピー ランダム
.strokeNormalOffset Float 0.0 法線オフセット
.strokeNormalOffsetRnd Float 0.0 法線オフセット ランダム
.strokeOffsetX Float 0.0 Xオフセット
.strokeOffsetXRnd Float 0.0 Xオフセット ランダム
.strokeOffsetY Float 0.0 Yオフセット
.strokeOffsetYRnd Float 0.0 Yオフセット ランダム
.strokeSplitAngle Float 90.0 分割角度
.strokeMinLength Float 0.0 最小長
.linkLength Float 2.0 リンク長
.strokeDirectionAngle Float -30.0 方向角
.strokeLoopDirection Integer 1 ループ方向

ノイズ

プロパティ デフォルト 説明
.noiseEnable Boolean false ノイズ有効
.noiseMap textureMap / undefined undefined ノイズマップ
.noiseMapOpacity Float 5.0 ノイズマップ不透明度
.noiseMapEnable Boolean true ノイズマップ有効
.noiseAmount Float 5.0 ノイズ量
.noiseAmountRandom Float 0.0 ノイズ量 ランダム
.noiseCycle Float 100.0 ノイズ周期
.noiseCycleRandom Float 0.0 周期 ランダム
.noisePhase Float 0.0 ノイズ位相
.noisePhaseRandom Float 0.0 位相 ランダム

減衰・カラー範囲

プロパティ デフォルト 説明
.sizeReductionEnable Boolean false サイズ減衰有効
.alphaReductionEnable Boolean false アルファ減衰有効
.colorRangeType Integer 0 カラー範囲タイプ
.colorRangeR Float 0.0 カラー範囲 R
.colorRangeG Float 0.0 カラー範囲 G
.colorRangeB Float 0.0 カラー範囲 B
.cctl CurveControl カーブコントロール

6. Reduction_Settings(textureMap)

サイズ・アルファ減衰の距離設定。

プロパティ

プロパティ デフォルト 説明
.start Float 100.0 減衰開始距離
.End Float 1000.0 減衰終了距離
.objectEnable Boolean false オブジェクト基準有効
.objectnode Node / undefined undefined 基準オブジェクト
.curveIF Pencil__4_Curve_Control_Interface 減衰カーブ

減衰カーブのデフォルト値

ポイント2点: (0.0, 1.0)(1.0, 0.1) (近→遠で 100%→10%)

オブジェクト基準の減衰

.objectnode にシーン内のオブジェクト(球体等)を割り当てると、カメラからの距離ではなく、そのオブジェクトからの距離でラインの減衰が計算される。口周りや顔の輪郭線などで、特定部位に近い線を細くする用途で使用する。

-- ラインセットの sizeReduction にオブジェクト基準の減衰を設定
local ls = pencilLineEffect.linesets[1]
local sphereObj = getNodeByName "mouthline_sphere"

ls.sizeReduction.objectnode = sphereObj
ls.sizeReduction.objectEnable = true
ls.sizeReduction.start = 10.0    -- 減衰開始距離
ls.sizeReduction.End = 50.0      -- 減衰終了距離

7. Pencil__4_Curve_Control_Interface(ReferenceTarget)

カーブ制御インターフェイス。ブラシ詳細設定・減衰設定のカーブに使用。

プロパティ

プロパティ 説明
.CurveControl CurveControl 内部カーブコントロール
.controlCurveIndex Integer カーブインデックス
.numPoints Integer ポイント数
.pointsX ArrayParameter (Float) X座標配列
.pointsY ArrayParameter (Float) Y座標配列
.inTangentsX ArrayParameter (Float) 入力タンジェント X
.inTangentsY ArrayParameter (Float) 入力タンジェント Y
.outTangentsX ArrayParameter (Float) 出力タンジェント X
.outTangentsY ArrayParameter (Float) 出力タンジェント Y
.flags ArrayParameter (Integer) ポイントフラグ

インターフェイス: Pcl4CurveControlIF

メソッド 戻り値 引数 説明
getValues Float Array &xValues (Float Array, In/Out) X値配列からY値配列を取得

フラグ値の参考

意味(推定)
1 スムース
266 コーナー(端点)
267 コーナー(端点、減衰カーブ用)

8. アクセスパス早見表

-- Effect 取得(環境効果から走査)
for i = 1 to numEffects do (
    local e = getEffect i
    if classOf e == Pencil__4_Line do ( /* ... */ )
)

-- エフェクト名
fx = getEffect 1
fx.name                         -- エフェクト名

-- ラインセット
ls = fx.linesets[1]
ls.name                         -- ラインセット名
ls.objects                      -- 対象オブジェクト配列
ls.mtls                         -- 対象マテリアル配列

-- ブラシ(Visible / Hidden)
ls.brush                        -- デフォルトブラシ (Visible)
ls.brush_Hidden                 -- デフォルトブラシ (Hidden)
ls.brushOutline                 -- アウトライン用 (Visible)
ls.brushOutline_Hidden          -- アウトライン用 (Hidden)

-- ブラシ詳細
ls.brush.detail                 -- Brush_Details
ls.brush.detail.size            -- ブラシサイズ
ls.brush.detail.noiseEnable     -- ノイズ有効

-- ブラシのカラー・サイズ(Brush_Settings レベル)
ls.brush.color                  -- (color 0 0 0)
ls.brush.size                   -- 1.0
ls.brush.alpha                  -- 100.0

-- 減衰設定
ls.sizeReduction.start          -- 100.0
ls.sizeReduction.End            -- 1000.0
ls.sizeReduction.objectnode     -- 基準オブジェクト
ls.sizeReduction.objectEnable   -- オブジェクト基準有効

-- カーブ操作
curveIF = ls.brush.detail.sizeCurveIF
curveIF.numPoints               -- ポイント数
curveIF.pointsX                 -- X座標配列
curveIF.pointsY                 -- Y座標配列

-- カーブからY値取得(Pcl4CurveControlIF)
xVals = #(0.0, 0.25, 0.5, 0.75, 1.0)
yVals = curveIF.Pcl4CurveControlIF.getValues &xVals

-- 環境効果の削除(逆順必須)
for i = numEffects to 1 by -1 do (
    local e = getEffect i
    if classOf e == Pencil__4_Line do deleteEffect i
)

9. 注意事項

  • クラス名: Pencil__4_Line(アンダースコア2つ)が正式名。Pencil++ と空白がそれぞれ _ に変換される。classOf での比較時に注意。
  • 環境効果と大気効果の区別: Pencil+ 4 Line は環境効果(getEffect / deleteEffect)に属する。getAtmospheric では取得できない。
  • 効果の削除は逆順: deleteEffect はインデックス指定のため、順方向で削除するとインデックスがずれる。必ず numEffects to 1 by -1 のパターンで行う。
  • .strokeeExtendRnd は Pencil+ 4 側のtypo(e が二重)。スクリプトでもそのまま使用する。
  • ブラシ設定は Visible 用と Hidden 用で別インスタンス。同一オブジェクトの共有ではない。
  • Brush_SettingstextureMap を継承しており、マテリアルエディタ上でも扱える。
  • カーブのフラグ値(266, 267 等)は Pencil+ 内部のポイントタイプを示す(公式ドキュメント未公開)。
  • ラインセットの対象指定: .mtls(マテリアルベース)と .objects(オブジェクトベース)の両方が空の場合、そのラインセットは実質無効。

← Pencil+ 4 リファレンス へ