私の散歩論

ページ

2023年6月17日土曜日

干渉色生成BlenderPythonスクリプトを作成して干渉色を楽しむ

 Enjoy interference colors by creating a BlenderPython script that generates interference colors


I created a Python script to play the interference color set for map art developed by Koji Yamada in Blender. I used this script to apply interference colors to the sloped shell layer terrain and enjoyed the micro-terrain interference color art.


やまだこーじさんが開発した地図アート向け干渉色を、Blenderで生成するPythonスクリプトを作成しました。このスクリプトで干渉色を斜面貝層地形に適用して、微地形干渉色アートを楽しみました。

1 やまだこーじさん開発干渉色セットを生成するBlenderPythonスクリプト

ChatGPTの支援も受けて、やまだこーじさんが開発した干渉色セットをBlenderColorRampセットとして生成するBlenderPythonスクリプトを作成しました。

●やまだこーじさん開発干渉色セットを生成するBlenderPythonスクリプト

……………………………………………………………………

#やまだこーじさん開発干渉色セット(テクスチャ座標、マッピング、グラデーションテクスチャ、カラーランプ)の生成。メッシュオブジェクトを1つ選択してからこのスクリプトを走らせる。

import bpy

# 選択されたオブジェクトを取得

selected_obj = bpy.context.object

# オブジェクトに関連付けられたマテリアルを取得

material = selected_obj.active_material

# マテリアルが存在しない場合は新しいマテリアルを作成

if material is None:

    material = bpy.data.materials.new(name="interference_color")

    selected_obj.active_material = material

    material.use_nodes = True

    material.blend_method = "BLEND"

# テクスチャ座標設定

ndtc = material.node_tree.nodes.new("ShaderNodeTexCoord")

ndtc.location = -800, 350

# マッピング設定

ndmp = material.node_tree.nodes.new("ShaderNodeMapping")

ndmp.location = -630, 350

# グラデーションテクスチャ設定

ndgr = material.node_tree.nodes.new("ShaderNodeTexGradient")

ndgr.location = -450, 350

# カラーランプノードの追加と設定

ndvr = material.node_tree.nodes.new("ShaderNodeValToRGB")

ndvr.location = -260, 350

ndvr.color_ramp.color_mode = "RGB"

ndvr.color_ramp.interpolation = "LINEAR"

# やまだこーじさん開発 干渉色カラーグラデーションの設定

ndvr.color_ramp.elements[0].position = 0.0

ndvr.color_ramp.elements[0].color = 0.888,0.991,0.965,1

ndvr.color_ramp.elements.new(position=0.042).color = 1,0.922,0.578,1

ndvr.color_ramp.elements.new(position=0.083).color = 0.913,0.578,0.112,1

ndvr.color_ramp.elements.new(position=0.125).color = 0.597,0.175,0.002,1

ndvr.color_ramp.elements.new(position=0.167).color = 0.205,0,0.352,1

ndvr.color_ramp.elements.new(position=0.208).color = 0,0.138,0.839,1

ndvr.color_ramp.elements.new(position=0.250).color = 0,0.533,1,1

ndvr.color_ramp.elements.new(position=0.292).color = 0.238,0.913,0.730,1

ndvr.color_ramp.elements.new(position=0.333).color = 0.716,1,0.235,1

ndvr.color_ramp.elements.new(position=0.375).color = 1,0.761,0,1

ndvr.color_ramp.elements.new(position=0.417).color = 1,0.342,0.198,1

ndvr.color_ramp.elements.new(position=0.458).color = 0.880,0.040,0.665,1

ndvr.color_ramp.elements.new(position=0.500).color = 0.323,0.054,0.965,1

ndvr.color_ramp.elements.new(position=0.542).color = 0,0.366,0.847,1

ndvr.color_ramp.elements.new(position=0.583).color = 0,0.753,0.440,1

ndvr.color_ramp.elements.new(position=0.625).color = 0.076,0.947,0.114,1

ndvr.color_ramp.elements.new(position=0.667).color = 0.672,0.839,0.141,1

ndvr.color_ramp.elements.new(position=0.708).color = 1,0.521,0.474,1

ndvr.color_ramp.elements.new(position=0.750).color = 1,0.212,0.791,1

ndvr.color_ramp.elements.new(position=0.792).color = 0.905,0.120,0.831,1

ndvr.color_ramp.elements.new(position=0.833).color = 0.337,0.275,0.584,1

ndvr.color_ramp.elements.new(position=0.875).color = 0,0.552,0.301,1

ndvr.color_ramp.elements.new(position=0.917).color = 0,0.768,0.223,1

ndvr.color_ramp.elements.new(position=0.958).color = 0.147,0.791,0.392,1

ndvr.color_ramp.elements.new(position=1.000).color = 0.624,0.638,0.631,1

# ノード間のリンク設定

material.node_tree.links.new(ndtc.outputs[0], ndmp.inputs[0])

material.node_tree.links.new(ndmp.outputs[0], ndgr.inputs[0])

material.node_tree.links.new(ndgr.outputs[0], ndvr.inputs[0])


……………………………………………………………………


このBlenderPythonスクリプトで生成するノードセット

2 有吉北貝塚北斜面貝層ガリー侵食基底面地形への干渉色の適用

有吉北貝塚北斜面貝層ガリー侵食基底面地形へ干渉色を適用すると次のような画像になります。


有吉北貝塚北斜面貝層ガリー侵食基底面地形へ干渉色を適用した様子

干渉色で染めた地形表現をより深めるために、干渉色と等高縞模様をカラーミックスノードでミックスして楽しみました。


Blenderカラーミックスノードによる干渉色と等高縞模様のミックスの様子

14種のミックスをテストしました。図の上の3つ(焼き込みカラー、ミックス(係数0.5)、リニアライト)は個性が強すぎて使う場面はなさそうです。しかし、それ以外の11種は面白い、楽しい、美しいモノばかりで、楽しみ場面だけでなく学習場面でも使いたくなります。

特に乗算、覆い焼きカラー、差分、スクリーンの4つは気に入りました。


乗算


覆い焼きカラー


差分


スクリーン

3 メモ

3-1 BlenderRGB値について

BlenderではRGB値を0-1の間の数で表示しています。この値と通常のRGB値(0-255)の値の関係は線形ではなく、ガンマ曲線の関係になっています。通常のRGB値(0-255)を255で除した数のBlenderRGB値(0-1)をガンマ補正2.2すると通常のRGB値(0-255)に戻ります。

3-2 Blenderの実際の色味

理論は3-1のようですが、実際のBlenderの色味はもう少し複雑になっているようです。

やまだこーじさんの干渉色セットは16進数あるいはそれに対応した通常のRGB値(0-255)で表示されています。今回はこの値が対応するBlenderRGB値(0-1)をBlenderカラー表示で1つ1つ確かめて入力しました。一方、やまだこーじさんの値を通常のRGB値(0-255)で整理して、それを255で除して、さらにガンマ補正2.2をしました。この二つを比べると、ガンマ補正した色の方がやまだこーじさん本来の色味に近いです。今回作成した干渉色は少し薄い色味になっています。このあたりの学習を今後深めることにします。

4 感謝

この記事の干渉色セットは次のページから取得させていただきました。

地図アート研究所 干渉色・抽出色地図アート作成ツール(試作版)

干渉色セットを開発して公開しているやまだこーじさんに感謝します。


0 件のコメント:

コメントを投稿