Pencil+ 4 Line Effect リファレンス
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_SettingsはtextureMapを継承しており、マテリアルエディタ上でも扱える。- カーブのフラグ値(266, 267 等)は Pencil+ 内部のポイントタイプを示す(公式ドキュメント未公開)。
- ラインセットの対象指定:
.mtls(マテリアルベース)と.objects(オブジェクトベース)の両方が空の場合、そのラインセットは実質無効。