« あぁまた、春がやってきた… | トップページ | C4D Python R12 テスト:ポリゴンオブジェクトのN-gonsってどうなってるの? »

C4D Python R12 テスト:標準マテリアルを少々やってみた。

マテリアルのパラメータにアクセスするのも、属性マネージャやマテリアルダイアログからパラメータの項目をスクリプトマネージャ(Python)へドロップするのは、プリミティブオブジェクト等と同様だよね…

試しに選択した1個のマテリアルのカラー属性のパラメータをコンソールに表示してみる。

Materials_01

Python
"""
マテリアルのカラー属性のパラメータを表示する。
2011.4.15
"""


import c4d

def main():
    mate = doc.GetActiveMaterial()
    print '-' * 20
    print '名前:', mate[c4d.ID_BASELIST_NAME]
    print '=== カラー ==='
    print 'カラー:', mate[c4d.MATERIAL_COLOR_COLOR]
    print '明るさ:', mate[c4d.MATERIAL_COLOR_BRIGHTNESS]
    print 'テクスチャ:', mate[c4d.MATERIAL_COLOR_SHADER]
    print '混合モード:', mate[c4d.MATERIAL_COLOR_TEXTUREMIXING]
    print '強度:', mate[c4d.MATERIAL_COLOR_TEXTURESTRENGTH]


if __name__ == '__main__':
    main()
--------------------
名前: Mat
=== カラー ===
カラー: Vector(0.8, 0.8, 0.8)
明るさ: 1.0
テクスチャ: None
混合モード: 0
強度: 1.0

もちろん、パラメータにアクセスするための定数は、属性マネージャからのドロップです。
表示されている数値も問題ないようですね。

では、C4D Pythonからパラメータを設定して新規でマテリアルを追加してみましょう。

Python
"""
新規でパラメータを設定しマテリアルを追加してみる。
2011.4.15
"""


import c4d
from c4d import documents

def main():
    mate = c4d.BaseMaterial(c4d.Mmaterial)

    mate[c4d.MATERIAL_COLOR_COLOR] = c4d.Vector(0.25, 0.50, 1.00)
    mate[c4d.MATERIAL_COLOR_BRIGHTNESS] = 0.75

    doc.InsertMaterial(mate)


if __name__ == '__main__':
    main()
    c4d.EventAdd()

実行すると、マテリアルマネージャに追加されます。

Materials_02

新規追加された青いマテリアルのパラメータを見てみる。

Materials_03

多分、同じようにカラーチャンネル以外の他のチャンネルの基本的なパラメータも問題なく設定できるだろう…

カラーチャンネルのテクスチャにチャンネルシャーダを追加するにはどうするんだ?

試しにテクスチャにグラデーションシェーダを設定して…

Materials_04

先ほどのマテリアルのパラメータをコンソールに表示するスクリプトを実行してみる。

Python
"""
マテリアルのカラー属性のパラメータを表示する。
2011.4.15
"""


import c4d

def main():
    mate = doc.GetActiveMaterial()
    print '-' * 20
    print '名前:', mate[c4d.ID_BASELIST_NAME]
    print '=== カラー ==='
    print 'カラー:', mate[c4d.MATERIAL_COLOR_COLOR]
    print '明るさ:', mate[c4d.MATERIAL_COLOR_BRIGHTNESS]
    print 'テクスチャ:', mate[c4d.MATERIAL_COLOR_SHADER]
    print '混合モード:', mate[c4d.MATERIAL_COLOR_TEXTUREMIXING]
    print '強度:', mate[c4d.MATERIAL_COLOR_TEXTURESTRENGTH]


if __name__ == '__main__':
    main()
--------------------
名前: Mat
=== カラー ===
カラー: Vector(0.8, 0.8, 0.8)
明るさ: 1.0
テクスチャ: <c4d.BaseList2D object at 0x206541F0>
混合モード: 0
強度: 1.0

テクスチャには、c4d.BaseList2Dと表示されているだけで、グラデーションシェーダの明確な型がわかりません…
シェーダは、どうやって割り当てるんだろうね…
全く、わかりません。

では、設定済みのシェーダのパラメータにはアクセスできないのだろうか…?

Materials_05

同じように、パラメータの項目をドロップしてスクリプトを作ってみる。

Python
"""
マテリアルのカラー属性のパラメータを表示する-2。
2011.4.15
"""


import c4d

def main():
    mate = doc.GetActiveMaterial()
    print '-' * 20
    print '名前:', mate[c4d.ID_BASELIST_NAME]
    print '=== カラー ==='
    print 'カラー:', mate[c4d.MATERIAL_COLOR_COLOR]
    print '明るさ:', mate[c4d.MATERIAL_COLOR_BRIGHTNESS]
    shd = mate[c4d.MATERIAL_COLOR_SHADER]
    print 'テクスチャ:', shd
    print ' ' * 4, '名前:', shd[c4d.ID_BASELIST_NAME]
    print ' ' * 4, 'グラデーション:', shd[c4d.SLA_GRADIENT_GRADIENT]
    print ' ' * 4, 'タイプ:', shd[c4d.SLA_GRADIENT_TYPE]
    print ' ' * 4, '繰り返し:', shd[c4d.SLA_GRADIENT_CYCLE]
    print ' ' * 4, '開始位置:', shd[c4d.SLA_GRADIENT_START]
    print ' ' * 4, '終了位置:', shd[c4d.SLA_GRADIENT_END]
    print ' ' * 4, '半径:', shd[c4d.SLA_GRADIENT_RADIUS]
    print ' ' * 4, 'タービュランス:', shd[c4d.SLA_GRADIENT_TURBULENCE]
    print ' ' * 4, '細かさ:', shd[c4d.SLA_GRADIENT_OCTAVES]
    print ' ' * 4, 'スケール:', shd[c4d.SLA_GRADIENT_SCALE]
    print ' ' * 4, '周波数:', shd[c4d.SLA_GRADIENT_FREQ]
    print ' ' * 4, 'シード:', shd[c4d.SLA_GRADIENT_SEED]
    print ' ' * 4, '角度:', shd[c4d.SLA_GRADIENT_ANGLE]
    print ' ' * 4, '絶対値:', shd[c4d.SLA_GRADIENT_ABSOLUTE]
    print ' ' * 4, '空間:', shd[c4d.SLA_GRADIENT_SPACE]

    print '混合モード:', mate[c4d.MATERIAL_COLOR_TEXTUREMIXING]
    print '強度:', mate[c4d.MATERIAL_COLOR_TEXTURESTRENGTH]


if __name__ == '__main__':
    main()
--------------------
名前: Mat
=== カラー ===
カラー: Vector(0.8, 0.8, 0.8)
明るさ: 1.0
テクスチャ: <c4d.BaseList2D object at 0x206541F0>
     名前: グラデーション
     グラデーション: <c4d.Gradient object at 0x2063E578>
     タイプ: 2000
     繰り返し: 1
     開始位置: Vector(-100, 0, 0)
     終了位置: Vector(100, 0, 0)
     半径: 100.0
     タービュランス: 0.0
     細かさ: 5.0
     スケール: 1.0
     周波数: None
     シード: 0
     角度: 0.0
     絶対値: 0
     空間: 2021
混合モード: 0
強度: 1.0

設定済みのシェーダを取得しパラメータの操作はできそうだ…
ただね、型がわからないから…
設定済みのシェーダがグラデーションなのか、ノイズなのか判別するにはどうするんだろうね…
グラデーションは、c4d.Gradient型なのかぁ…

|

« あぁまた、春がやってきた… | トップページ | C4D Python R12 テスト:ポリゴンオブジェクトのN-gonsってどうなってるの? »