はじめに
Blender で自由曲線群を定める以下の画像のようなUIありますよね。CurveMappingというらしいです。

自作の Addon 開発時に調べた内容を記そうと思います。
Blender のバージョンは 4.4.3 です。
初期化と表示
「まずこれ利用できるものなの?」という疑問があると思います。
ググると、今のままじゃ使えないパッチが必要とかいう記事にたどり着きましたが、パッチは不要です。
ブラシとして作成することにより、利用できます。
私はスカルプト用のブラシとして作成しています。
ブラシの作成関数は以下です。
def create_brush_if_needed(name): brush = bpy.data.brushes.get(name) if not brush: brush = bpy.data.brushes.new(name=name, mode='SCULPT') return brush
表示は template_curve_mapping() で行います。
点列の更新
点列(制御点)の数は最低でも2が必要です。
UIを触ってみれば分かりますが、2未満にできないです。
brush.curve.curves[0].points が制御点配列です。
removeで減らし、newで追加し、更新したら update 関数を呼びます。
点列の更新を検知
一番面倒くさいのはここです。
update が動かないので、私は変更時(変更されない時も)に呼ばれるdraw method 内で、
1つ前の状態と比較し変更されていたら「on change」とみなし update 処理を行います。
この draw method は大量に発生するので必ず debounce の処理も併せて利用してください。
debounce とは、最後に発生して一定時間(0.2秒ぐらいが良い)経過したときに処理を行うことです。
点列の補間
補間は evaluate method で行います。
下の例では、念のため clamp もしています。
def eval_curve_mapping(brush, value): curve = brush.curve curve_map = curve.curves[0] return utils.clamp(curve.evaluate(curve_map, value), 0, 1)
制御できないもの
下画像の Reset Curve は私にとって不要なのでですが、これは非表示にしたり override できないようです。
他にも制御不能なものはあると思います。

最後に
多少不自由さはあるものの、このUIはめちゃ便利!
自分用のメモなので雑ですが、このページまでたどり着いた人にはこれで充分だと思います。