Pencil+ 4 Material リファレンス
Pencil+ 4 リファレンス の章一覧
3ds Max 2022 / Pencil+ 4 マテリアル プロパティ・メソッド一覧
プロパティなどをInspectして少し加筆しました。
1. Pencil__4_Material(material)
Pencil+ 4 マテリアル本体。オブジェクトに割り当てるトップレベルマテリアル。
クラス名の注意
MaxScript上のクラス名はPencil__4_Material(アンダースコア 2つ)。
「Pencil+ 4 Material」の+と空白がそれぞれ_に変換されるため。classOf $.material -- => Pencil__4_Material
プロパティ
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
.basicMaterial |
Standardmaterial | — | ベースマテリアル(Standard Legacy 等) |
.shade |
Float | 0.0 | シェーディング(グラデーション位置?) |
.advancedMaterial |
Advanced_Settings | — | 高度な設定 |
.lineFunctionsMaterial |
Line_Related_Functions | — | ライン関連機能 |
.zones |
ArrayParameter (Zone) | 4個 | ゾーン配列(1〜8ゾーン) |
.basicMaterialについて
大まかな設定はbasicMaterial依存のようです。
Standard Legacyの設定を両面にすればPencil側も両面表示(両面が外れていると裏面はアルファになってしまいます。)
不透明度が0なら不透明度も0などなど
またPencilラインのエフェクトをかけている場合、マテリアル側の不透明度が0やモディファイア側でレンダリング表示をオフにしたシェイプなどオブジェクトのレンダリングはPencilラインだけ出たりします。
ハイライト設定
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
.hiColor |
Color | (255, 255, 255) | ハイライト色 |
.hiBlend |
Integer | 0 | ブレンドモード |
.hiAlpha |
Float | 100.0 | アルファ |
.hiLevel |
Integer | 0 | レベル |
.hiGloss |
Integer | 10 | 光沢 |
.hiSquash |
Integer | 0 | スカッシュ |
.hiAniso |
Integer | 0 | 異方性 |
.hiOrient |
Integer | 0 | 向き |
.hiSharp |
Integer | 0 | シャープネス |
.hiDiff |
Integer | 0 | ディフューズ |
.hiDiffRange |
Integer | 0 | ディフューズ範囲 |
.hiMapOpacity |
Float | 100.0 | マップ不透明度 |
.hiMapEnable |
Boolean | true | マップ有効 |
.hiMap |
textureMap / undefined | undefined | ハイライトマップ |
.hiLevelMap |
textureMap / undefined | undefined | レベルマップ |
.hiGlossMap |
textureMap / undefined | undefined | 光沢マップ |
.hiMapChannelEnable |
Boolean | false | マップチャンネル有効 |
.hiMapChannel |
Integer | 99 | マップチャンネル番号 |
バンプ・反射
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
.bumpEnable |
Boolean | false | バンプ有効 |
.bumpAmount |
Integer | 30 | バンプ量 |
.bumpMap |
textureMap / undefined | undefined | バンプマップ |
.bumpHiDisable |
Boolean | false | ハイライトへのバンプ無効化 |
.reflecEnable |
Boolean | false | 反射有効 |
.reflecAmount |
Integer | 100 | 反射量 |
.reflecMap |
textureMap / undefined | undefined | 反射マップ |
ストロークアニメーション
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
.strokeAnimationEnable |
Boolean | false | ストロークアニメーション有効 |
.strokeAnimationInterval |
Integer | 1 | アニメーション間隔 |
.strokeAnimationMotionOnly |
Boolean | false | モーションのみ |
.strokeOnly |
Boolean | false | ストロークのみ描画 |
.strokeScale |
Float | 100.0 | ストロークスケール |
.strokeRemoveHiddenSurfce |
Boolean | false | 隠面除去(※typo: Surfce) |
インターフェイス: Pcl4StaticInterface
| メソッド | 戻り値 | 引数 | 説明 |
|---|---|---|---|
openBrushSettings |
Boolean | brush (maxObject) |
ブラシ設定ダイアログを開く |
getLangID |
Integer | — | 言語IDを取得 |
2. Zone(ReferenceTarget / Pencil_4_Zone)
ゾーン設定。material.zones[i] で取得。デフォルトで4ゾーン。
ゾーンの制約
| 項目 | 値 |
|---|---|
| 最小ゾーン数 | 1 |
| 最大ゾーン数 | 8 |
| デフォルトゾーン数 | 4 |
先頭ゾーンの posMin |
0.0 で強制 |
末尾ゾーンの posMax |
100.0 で強制 |
プロパティ
| プロパティ | 型 | デフォルト例 | 説明 |
|---|---|---|---|
.id |
Integer (1〜8) | 1〜4 | ゾーンID |
.posMin |
Float | 0.0 / 25.0 / 50.0 / 75.0 | グラデーション位置 下限 (%) |
.posMax |
Float | 25.0 / 50.0 / 75.0 / 100.0 | グラデーション位置 上限 (%) |
.Enable |
Boolean | true | ゾーン有効 |
.color |
Color | ゾーンごとに異なる | ゾーン色 |
.mapOpacity |
Float | 100.0 | マップ不透明度 |
.mapEnable |
Boolean | true | マップ有効 |
.ColorMap |
textureMap / undefined | undefined | カラーマップ |
.blendMode |
Integer | 0 | ブレンドモード |
.blendAmount |
Float | 100.0 | ブレンド量 |
.strokesEnable |
ArrayParameter (Boolean) | #() | ストローク有効配列 |
.Strokes |
ArrayParameter | #() | ストローク配列 |
デフォルトゾーン構成
| Zone | id | posMin | posMax | color |
|---|---|---|---|---|
| zones[1] | 1 | 0.0 | 25.0 | (0, 0, 0) |
| zones[2] | 2 | 25.0 | 50.0 | (63.75, 63.75, 63.75) |
| zones[3] | 3 | 50.0 | 75.0 | (127.5, 127.5, 127.5) |
| zones[4] | 4 | 75.0 | 100.0 | (191.25, 191.25, 191.25) |
ゾーンの動的操作
Pencil_4_Zone() コンストラクタで新規ゾーンを作成し、.zones 配列に対して追加・削除ができる。
ゾーンの追加
-- 空のゾーンを新規作成
local newZone = Pencil_4_Zone()
newZone.posMin = 100.0
newZone.posMax = 100.0
newZone.color = color 0 0 0
newZone.colorMap = undefined
newZone.id = 5
-- マテリアルのゾーン配列の末尾に追加(copyで独立コピーとして追加)
append pencilMat.zones (copy newZone)
ゾーンの削減
残したいゾーンだけを集めた配列を .zones に直接代入する。
-- ゾーンを3つに減らす(先頭3つを残す)
local newZones = #()
for i = 1 to 3 do
append newZones pencilMat.zones[i]
pencilMat.zones = newZones
3. Advanced_Settings(material)
高度な設定。material.advancedMaterial で取得。
グラデーションオフセット
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
.gradOffsetEnable |
Boolean | false | グラデーションオフセット有効 |
.gradOffsetAmount |
Integer | 100 | オフセット量 |
.gradOffsetMap |
textureMap / undefined | undefined | オフセットマップ |
.gradOffsetMapOffset |
Float | -0.5 | マップオフセット値 |
シャドウブレンド
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
.sblendEnable |
Boolean | false | シャドウブレンド有効 |
.sblendColor |
Color | (0, 0, 0) | ブレンド色 |
.sblendMapOpacity |
Float | 100.0 | マップ不透明度 |
.sblendMapEnable |
Boolean | false | マップ有効 |
.sblendMap |
textureMap / undefined | undefined | ブレンドマップ |
.sblendMode |
Integer | 0 | ブレンドモード |
.sblendAmount |
Float | 100.0 | ブレンド量 |
ライトカラー
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
.lightColEnable |
Boolean | false | ライトカラー有効 |
.lightColBlend |
Integer | 0 | ブレンドモード |
.lightcolAmount |
Float | 100.0 | 量(※小文字 col) |
.lightcolZoneIDs |
ArrayParameter (Boolean) | #(true ×8) | 対象ゾーンID (8個) |
.lightColRelpaceEnable |
Boolean | false | 置換有効(※typo: Relpace) |
.lightColRelpaceColor |
Color | (0, 0, 0) | 置換色(※typo: Relpace) |
.lightColReplaceAmount |
Float | 100.0 | 置換量 |
ハイライトデザイン
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
.hiDesignEnable |
Boolean | false | ハイライトデザイン有効 |
.hiDesignAmount |
Float | 100.0 | 量 |
.hiDesignAngle |
Float | 0.0 | 角度 |
ゾーンアンチエイリアシング
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
.zoneAntiIntensity |
Float | 100.0 | アンチエイリアシング強度 |
.zoneAntiEnable |
Boolean | true | アンチエイリアシング有効 |
特定ライト
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
.specificLightsEnable |
Boolean | false | 特定ライト有効 |
.specificLights |
ArrayParameter (Node) | #() | 対象ライト配列 |
.specificLightsStrength |
ArrayParameter (Float) | #() | ライト強度配列 |
特定透過
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
.specificTranspEnable |
Boolean | false | 特定透過有効 |
.specificTranspMaterials |
ArrayParameter (material) | #() | 透過マテリアル配列 |
.specificTranspMaterialsValue |
ArrayParameter (Float) | #() | 透過値配列 |
.specificTranspMapEnable |
Boolean | false | 透過マップ有効 |
.specificTranspMap |
textureMap / undefined | undefined | 透過マップ |
.specificTranspMapAmount |
Float | 100.0 | 透過マップ量 |
特定透過の配列操作
specificTranspMaterials と specificTranspMaterialsValue は インデックスが1:1で対応するペア配列。操作時は両方を同時に変更しないとペアが崩れる。
操作の基本方針は「残すものだけ新配列に収集 → ペアで一括代入」。同じループの同じ分岐で append するため、長さとインデックスの対応が構造的に保証される。
削除(名前にマッチするマテリアルを除去)
local adv = pencilMat.advancedMaterial
if not adv.specificTranspEnable do return false
local oldMats = adv.specificTranspMaterials
local oldVals = adv.specificTranspMaterialsValue
local newMats = #()
local newVals = #()
for k = 1 to oldMats.count do
(
if oldMats[k] != undefined and
matchPattern oldMats[k].name pattern:"*target_name*" then
(
-- 除去対象 → スキップ
format "Removed: %\n" oldMats[k].name
)
else
(
-- 残す
append newMats oldMats[k]
append newVals oldVals[k]
)
)
-- ペアで一括代入(常に同じ長さが保証される)
adv.specificTranspMaterials = newMats
adv.specificTranspMaterialsValue = newVals
追加(マテリアルと透過値のペアを追加)
local adv = pencilMat.advancedMaterial
local mats = adv.specificTranspMaterials
local vals = adv.specificTranspMaterialsValue
-- ペアで追加
append mats someMaterial -- 追加するマテリアル参照
append vals 100.0 -- 対応する透過値
-- ペアで一括代入
adv.specificTranspMaterials = mats
adv.specificTranspMaterialsValue = vals
-- 特定透過を有効化(まだ無効の場合)
adv.specificTranspEnable = true
注意点
- 各要素
mats[k]はマテリアルへの参照であり、.nameでマテリアル名を取得可能。- 追加・削除いずれの場合も
matsとvalsを必ずペアで操作・代入すること。
TKPolygonCtrl(内部カーブ)
Advanced_Settings 内の無名プロパティ . で参照される内部カーブコントローラ。ハイライトデザインのポリゴン形状制御に使用。
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
.polyNodeAngle |
ArrayParameter (Float) | 6点(0〜-2π) | ノード角度(ラジアン) |
.polyNodeRadius |
ArrayParameter (Float) | #(1.0 ×6) | ノード半径 |
.polyNodeTYPE |
ArrayParameter (Integer) | #(0 ×6) | ノードタイプ |
.polyHandle0 |
ArrayParameter (Point3) | #([0,0,0] ×6) | ハンドル0 |
.polyHandle1 |
ArrayParameter (Point3) | #([0,0,0] ×6) | ハンドル1 |
.polyNodeResetNum |
Integer | 6 | リセット時のノード数 |
4. Line_Related_Functions(material)
ライン関連機能。material.lineFunctionsMaterial で取得。
エッジ制御
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
.isectDisable |
Boolean | false | 交差線無効化 |
.maskingDisable |
Boolean | false | マスキング無効化 |
.maskingOffTargetsEnable |
Boolean | false | マスキングオフ対象有効 |
.maskHiddenLinesTargetsEnable |
Boolean | false | 隠線マスク対象有効 |
ライン色置換(エッジタイプ別)
各エッジタイプに対し Enable / Color / Amount の3プロパティセット。
| エッジタイプ | Enable | Color | Amount |
|---|---|---|---|
| Outline | .replaceEnableOutline |
.replaceColorOutline |
.replaceAmountOutline |
| Object | .replaceEnableObject |
.replaceColorObject |
.replaceAmountObject |
| Intersection | .replaceEnableIsect |
.replaceColorISect |
.replaceAmountISect |
| Smoothing | .replaceEnableSmooth |
.replaceColorSmooth |
.replaceAmountSmooth |
| Material ID | .replaceEnableMatid |
.replaceColorMatid |
.replaceAmountMatid |
| Selected Edge | .replaceEnableSel |
.replaceColorSel |
.replaceAmountSel |
| Normal Angle | .replaceEnableNormal |
.replaceColorNormal |
.replaceAmountNormal |
| Wire | .replaceEnableWire |
.replaceColorWire |
.replaceAmountWire |
デフォルト: 全 Enable = false、全 Color = (0,0,0)、全 Amount = 100.0
マスキング対象
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
.maskingOffObjects |
ArrayParameter (Node) | #() | マスキングオフ対象オブジェクト |
.maskingOffMtls |
ArrayParameter | #() | マスキングオフ対象マテリアル |
.maskHiddenLinesObjects |
ArrayParameter (Node) | #() | 隠線マスク対象オブジェクト |
.maskHiddenLinesMtls |
ArrayParameter | #() | 隠線マスク対象マテリアル |
5. マテリアル階層の走査パターン
実際のプロダクションでは、Pencil+ 4 マテリアルは Shell_Material や Multi/Sub-Object マテリアルの下にネストされていることが多い。スクリプトから Pencil+ 4 マテリアルにアクセスするには、親マテリアルの種類に応じて再帰的に走査する必要がある。
対応すべき親マテリアルの種類
| 親マテリアル | クラス名 | 子マテリアルへのアクセス |
|---|---|---|
| Shell マテリアル | Shell_Material |
.originalMaterial(レンダリング用)、.bakedMaterial(ビューポート用) |
| Multi/Sub-Object | Multimaterial |
.materialIDList でID一覧 → mat[id] で各サブマテリアル |
| 両面マテリアル | doubleSided |
.material1(表面)、.material2(裏面) |
走査コード例
-- マテリアルを再帰的に走査して Pencil__4_Material を処理する
fn processPencilMaterials mat callback =
(
local matClass = classOf mat
if matClass == Pencil__4_Material then
(
-- Pencil+4マテリアルに到達 → コールバックで処理
callback mat
)
else if matClass == Shell_Material then
(
-- Shell: レンダリング用とビューポート用の両方を走査
if mat.originalMaterial != undefined then
processPencilMaterials mat.originalMaterial callback
if mat.bakedMaterial != undefined then
processPencilMaterials mat.bakedMaterial callback
)
else if matClass == Multimaterial then
(
-- Multi/Sub: 全サブマテリアルを走査
local idList = mat.materialIDList
for i = 1 to idList.count do
(
if mat[idList[i]] != undefined then
processPencilMaterials mat[idList[i]] callback
)
)
else if matClass == doubleSided then
(
-- 両面: 表面と裏面を走査
if mat.material1 != undefined then
processPencilMaterials mat.material1 callback
if mat.material2 != undefined then
processPencilMaterials mat.material2 callback
)
)
-- 使用例: 全ゾーンの色を赤に変更
processPencilMaterials $.material (fn callback pencilMat = (
for i = 1 to pencilMat.zones.count do
pencilMat.zones[i].color = color 255 0 0
))
注意点
- Shell_Material は
.originalMaterialと.bakedMaterialの 両方 にPencilマテリアルが入っている場合がある。片方だけ処理すると表示と描画で不一致が生じる。- Multimaterial のサブマテリアルは
mat[idList[i]]でアクセスする。mat[i]だとインデックスとIDの不一致でスキップが発生する。- これらの親マテリアルは入れ子になり得る(例: Multi/Sub → Shell → 両面 → Pencil+4)。
6. アクセスパス早見表
-- Pencil+ 4 Material を取得
mat = $.material -- 選択オブジェクトから(直接割り当ての場合)
-- または
mat = meditmaterials[1] -- マテリアルエディタから
-- ベースマテリアル
mat.basicMaterial -- Standardmaterial (Legacy)
mat.basicMaterial.Diffuse -- ディフューズ色
-- ゾーン
mat.zones.count -- ゾーン数(デフォルト4、最大8)
mat.zones[1].color -- ゾーン1のカラー
mat.zones[1].posMin -- グラデーション位置 下限
mat.zones[1].posMax -- グラデーション位置 上限
mat.zones[1].ColorMap -- カラーマップ
-- ゾーンの動的操作
local z = Pencil_4_Zone() -- 新規ゾーン作成
append mat.zones (copy z) -- ゾーン追加
mat.zones = #(mat.zones[1], mat.zones[2]) -- ゾーン2つに縮小
-- ハイライト
mat.hiColor -- (color 255 255 255)
mat.hiLevel -- 0
mat.hiGloss -- 10
-- バンプ・反射
mat.bumpEnable -- false
mat.bumpMap -- undefined
mat.reflecEnable -- false
mat.reflecMap -- undefined
-- 高度な設定
adv = mat.advancedMaterial
adv.gradOffsetEnable -- グラデーションオフセット
adv.sblendEnable -- シャドウブレンド
adv.lightColEnable -- ライトカラー
adv.specificLightsEnable -- 特定ライト
adv.specificLights -- ライト配列
adv.specificTranspEnable -- 特定透過
adv.specificTranspMaterials -- 透過マテリアル配列(ペア配列、後述)
adv.specificTranspMaterialsValue -- 透過値配列(ペア配列)
-- ライン関連機能
lf = mat.lineFunctionsMaterial
lf.isectDisable -- 交差線無効化
lf.replaceEnableOutline -- アウトライン色置換
lf.replaceColorOutline -- 置換色
lf.maskingOffObjects -- マスキングオフ対象
-- ストローク
mat.strokeAnimationEnable -- false
mat.strokeOnly -- false
mat.strokeScale -- 100.0
7. 注意事項
- クラス名:
Pencil__4_Material(アンダースコア2つ)が正式名。Pencil+の+と空白がそれぞれ_に変換される。classOfでの比較時に注意。 .strokeRemoveHiddenSurfceは Pencil+ 4 側のtypo(Surface→Surfce)。スクリプトでもそのまま使用する。.lightColRelpaceEnable/.lightColRelpaceColorも同様にtypo(Replace→Relpace)。Zone.strokesEnableとZone.Strokesはデフォルト空配列。ストロークをゾーンに割り当てると要素が増える。basicMaterialには Standard (Legacy) 以外のマテリアルも割り当て可能(Physical Material 等)。ダンプの Standardmaterial プロパティは basicMaterial の種類に依存する。- ゾーンの制約: 最小1ゾーン、最大8ゾーン。先頭ゾーンの
posMinは 0.0、末尾ゾーンのposMaxは 100.0 で強制される。 - 特定透過のペア配列:
specificTranspMaterialsとspecificTranspMaterialsValueはインデックス1:1対応。片方だけ操作するとペアが崩れるため、常にセットで操作すること。 - マテリアル階層: 実プロダクションでは Shell_Material / Multimaterial / doubleSided の下にネストされることが多い。再帰走査パターン(セクション5参照)の実装が必要。