タグ: 取説

  • Blender : add-on「Eye Look Driver」取扱説明書:黒目を白目スクリーン上でカメラ方向に滑らせる

    Blender : add-on「Eye Look Driver」取扱説明書:黒目を白目スクリーン上でカメラ方向に滑らせる

    はじめに

    人物やキャラクターの目を作るとき、リアルな眼球として球体を使い、黒目や虹彩を眼球の一部として作る方法があります。

    この方法は自然ですが、斜め方向から見ると、黒目が球面の奥へ回り込み、見えにくくなることがあります。特にアニメ調・イラスト調の表現では、「横を向いていても黒目の形を見せたい」という場面があります。

    そこで本アドオン KenJin Eye Look Driver v1.4.0 では、黒目を回転させるのではなく、白目を模したスクリーン上で黒目を上下左右に滑らせる方式を採用しています。

    黒目Objectは Location XLocation Z のdriverで制御され、カメラ方向に応じて白目スクリーン上を移動します。黒目ObjectにはShrinkwrap Modifierを併用することで、白目スクリーン表面に貼り付いたように見せることができます。

    BlenderのDriverは、Driver Variablesを使ってプロパティやTransform Channelを参照できます。公式マニュアルでも、object dataをPython式で直接参照するよりDriver Variablesを使う方が依存関係を追跡しやすいと説明されています。本アドオンもこの考え方に合わせ、CameraやReference ObjectのTransform Channel、Pupil ObjectのCustom PropertyをDriver Variablesとして使用します。

    要望があれば公開もあります.


    このアドオンでできること

    KenJin Eye Look Driver v1.4.0では、以下の操作ができます。

    機能内容
    黒目の左右移動Pupil ObjectのLocation Xをdriver制御
    黒目の上下移動Pupil ObjectのLocation Zをdriver制御
    カメラ方向追従CameraとReference Objectの位置差から方向を計算
    白目スクリーン貼り付き黒目Object側にShrinkwrap Modifierを併用
    左右別設定Left Eye / Right Eyeを個別に設定
    片目だけApply左目だけ、右目だけ、設定済み側だけApply可能
    中心点OffsetBase X Offset / Base Z Offsetで黒目の中心位置を調整
    リアルタイム調整Offset、Range、Sensitivity、Min/MaxをNパネルから即時調整
    値の保存Pupil ObjectのCustom Propertyに値を保存
    add-on非起動時の保持.blend内のPupil Objectが設定値を保持

    基本構造

    推奨するObject構成は次のようになります。

    Human / Head / Face
    └─ Eye_Base.L ← Left Reference Object
    ├─ White_Screen.L ← Shrinkwrap Target
    └─ Pupil.L ← Left Pupil Object

    Human / Head / Face
    └─ Eye_Base.R ← Right Reference Object
    ├─ White_Screen.R ← Shrinkwrap Target
    └─ Pupil.R ← Right Pupil Object

    Camera ← Camera Object

    各Objectの役割

    Object役割
    Camera Object黒目が追随する方向の参照先
    Pupil Object実際にLocation X/Z driverが入る黒目Object
    Reference Object目の基準位置・方向を表すObject
    White Screen白目を模した平面または曲面。Shrinkwrap Targetとして使う

    なぜTrack ToではなくLocation Driverを使うのか

    Track ToやDamped Trackは、Objectの向きをTarget方向へ向けるためのConstraintです。つまり、基本的には回転制御です。

    しかし今回の目的は、黒目Objectを回転させることではありません。

    目的は次です。

    黒目の面の向きを保ったまま、
    白目スクリーン上を上下左右に滑らせる。

    これにより、実際の球体眼球では黒目が見えにくくなるような角度でも、黒目の見かけ形状を維持できます。


    Shrinkwrapとの関係

    黒目Objectには、必要に応じてShrinkwrap Modifierを設定します。

    Pupil.L
    └─ Shrinkwrap Modifier
    Target = White_Screen.L

    Shrinkwrap Modifierは、変更されるObjectの各頂点を別ObjectのSurfaceへ移動させるModifierです。Blender公式マニュアルでも、Shrinkwrap ModifierはObjectを別ObjectのSurfaceへ“収縮”させるためのModifierとして説明されています。

    推奨設定

    項目推奨
    TargetWhite_Screen.L / White_Screen.R
    MethodNearest Surface Point または Project
    避けたいMethodNearest Vertex
    Offset0.001〜0.005程度
    白目スクリーン必要ならSubdivision Surfaceを追加

    Nearest Vertex は近い頂点に寄るため、白目スクリーンの頂点数が少ない場合に段階的な動きになりやすいです。滑らかなスクリーン移動を狙う場合は、まず Nearest Surface Point または Project を試します。


    インストール方法

    1. アドオンコードを以下のような名前で保存します。
    kenjin_eye_look_driver_v1_4_0.py
    1. Blender 5.1を開きます。
    2. 以下の順に進みます。
    Edit
    > Preferences
    > Add-ons
    > Install from Disk
    1. 保存した .py ファイルを選択します。
    2. Add-on一覧で KenJin Eye Look Driver を有効化します。
    3. 3D Viewportで N キーを押し、右側サイドバーの Eye Driver タブを開きます。

    Nメニュータブ名は Eye Driver です。


    Nパネルの項目

    Common

    項目内容
    Camera Object黒目が追随する対象。通常はCamera

    Left Eye / Right Eye

    左目と右目は独立して設定できます。

    Object設定

    項目内容
    Left / Right Pupil Object黒目Object
    Left / Right Reference Object目の基準Object
    Set Selected as Pupil現在選択中ObjectをPupilとして登録
    Set Selected as Reference現在選択中ObjectをReferenceとして登録
    Load Values From PupilPupil Objectに保存済みの値をNパネルへ読み込み
    Repair PropertiesPupil Objectに不足しているCustom Propertyをdefault値で再作成

    Driver Structure

    項目内容
    Mode方向計算方式
    Forward Axis目の正面方向
    Invert X左右が逆に動く場合にON
    Invert Z上下が逆に動く場合にON

    Modeの選び方

    Mode内容向いている場面
    World NormalizedWorld座標のCamera-Reference方向を正規化して使用顔やReferenceが大きく回転しない場合
    Reference Z NormalizedReference ObjectのZ回転だけ補正人体や頭部が主に左右方向へ回る場合

    注意点として、Reference Z Normalized はReference ObjectのZ回転のみを補正します。頭部がX/Y/Zに複合的に大きく傾く場合は、完全なlocal変換ではありません。

    Forward Axis

    設定意味
    +Y ForwardReference Objectのlocal +Yを目の正面とみなす
    -Y Forwardlocal -Yを目の正面とみなす
    +X Forwardlocal +Xを目の正面とみなす
    -X Forwardlocal -Xを目の正面とみなす

    多くの場合、最初は +Y Forward または -Y Forward を試します。


    Live Center / Offset

    v1.4.0の重要機能です。
    黒目の中心位置を、Nパネルからリアルタイムに調整できます。

    項目内容
    Base X Offset黒目の中心となるLocation X
    Base Z Offset黒目の中心となるLocation Z
    Set Current as Offset現在のPupil Location X/ZをOffsetとして保存
    Reset OffsetOffsetを0に戻す

    Offsetの考え方

    最終的な黒目の位置は、次のように計算されます。

    Location X = Base X Offset + Camera方向によるX移動
    Location Z = Base Z Offset + Camera方向によるZ移動

    これにより、黒目の中心位置を0固定ではなく、白目スクリーン上の任意の位置にできます。


    Live Movement

    黒目の移動量と反応の強さを設定します。

    項目内容
    X Range左右方向の最大移動幅
    Z Range上下方向の最大移動幅
    X Sensitivity左右方向の反応倍率
    Z Sensitivity上下方向の反応倍率

    推奨初期値

    項目推奨値
    X Range0.030
    Z Range0.020
    X Sensitivity0.350
    Z Sensitivity0.350

    黒目の動きが大きすぎる場合は、Sensitivityを下げます。
    動きが小さすぎる場合は、Sensitivityを上げます。


    Live Limits Relative to Offset

    Offsetを中心とした移動制限です。

    項目内容
    X MinBase X Offsetから見た左方向の限界
    X MaxBase X Offsetから見た右方向の限界
    Z MinBase Z Offsetから見た下方向の限界
    Z MaxBase Z Offsetから見た上方向の限界

    Base X Offset = 0.010
    X Min = -0.030
    X Max = 0.030

    この場合、実際のLocation Xの範囲は次です。

    -0.020 ~ 0.040

    Min/Maxは絶対座標ではなく、Offsetから見た相対範囲として扱います。


    Applyボタン

    Apply Left Eye Driver

    左目の設定が揃っている場合だけ、左目Pupil Objectにdriverを設定します。

    Apply Right Eye Driver

    右目の設定が揃っている場合だけ、右目Pupil Objectにdriverを設定します。

    Apply Available Eye Drivers

    左右のうち、設定が揃っている側だけdriverを設定します。
    例えば右目だけ設定されている場合は、右目だけApplyされ、左目はスキップされます。

    Right Eye: Applied
    Left Eye: Skipped - Left Eye Pupil Object is not set.

    Clearボタン

    ボタン内容
    Clear Left Eye Driver左目PupilのLocation X/Z driverを削除
    Clear Right Eye Driver右目PupilのLocation X/Z driverを削除
    Clear Available Eye DriversPupil Objectが設定されている側のdriverを削除

    Last Apply Result

    Apply後、Nパネル下部に結果が表示されます。

    表示例:

    Right Eye: Applied
    Mode: WORLD_NORMALIZED
    Pupil: Pupil.R
    Reference: Eye_Base.R
    Offset X/Z: 0.01000, -0.00200
    X initial: 0.01452 / X: not clamped
    Z initial: -0.00311 / Z: not clamped

    ここで確認できる内容は次です。

    表示意味
    Applied / Skippeddriverが適用されたか
    Mode使用した計算方式
    Pupildriver対象Object
    Reference方向計算の基準Object
    Offset X/Z保存されている中心位置
    X/Z initialApply時点の初期driver評価値
    clampedMin/Maxに到達しているか

    基本的な使い方

    1. Objectを準備する

    以下を用意します。

    Camera
    Eye_Base.L
    White_Screen.L
    Pupil.L
    Eye_Base.R
    White_Screen.R
    Pupil.R

    片目だけでも使えます。


    2. PupilにShrinkwrapを設定する

    黒目ObjectにShrinkwrap Modifierを追加します。

    Pupil.L
    Shrinkwrap Target = White_Screen.L

    右目も同様です。

    Pupil.R
    Shrinkwrap Target = White_Screen.R

    3. NパネルでObjectを指定する

    Eye Driver タブを開きます。

    Camera Object = Camera
    Left Pupil Object = Pupil.L
    Left Reference Object = Eye_Base.L
    Right Pupil Object = Pupil.R
    Right Reference Object = Eye_Base.R

    4. Offsetを設定する

    黒目を手動で白目スクリーン中央へ配置します。
    その後、以下を押します。

    Set Current as Left Offset
    Set Current as Right Offset

    安全な手順は次です。

    1. Clear Eye Driver
    2. 黒目を手動で中央へ配置
    3. Set Current as Offset
    4. Apply Eye Driver

    5. DriverをApplyする

    片目ずつ設定する場合:

    Apply Left Eye Driver
    Apply Right Eye Driver

    設定済み側だけまとめて設定する場合:

    Apply Available Eye Drivers

    6. 画面を見ながら調整する

    v1.4.0では、次の項目はリアルタイムに反映されます。

    Base X Offset
    Base Z Offset
    X Range
    Z Range
    X Sensitivity
    Z Sensitivity
    X Min / X Max
    Z Min / Z Max

    スライダーまたは数値入力で調整し、Viewportで黒目位置を確認します。


    値が保存される仕組み

    v1.4.0では、Nパネルで設定した値はPupil ObjectのCustom Propertyに保存されます。

    保存される値は次です。

    Custom Property内容
    kj_eye_offset_xBase X Offset
    kj_eye_offset_zBase Z Offset
    kj_eye_range_xX Range
    kj_eye_range_zZ Range
    kj_eye_sens_xX Sensitivity
    kj_eye_sens_zZ Sensitivity
    kj_eye_min_xX Min
    kj_eye_max_xX Max
    kj_eye_min_zZ Min
    kj_eye_max_zZ Max

    これにより、add-onパネルを閉じても、.blendを保存すれば値はPupil Object側に残ります。

    DriverはこれらのCustom PropertyをSingle Property変数として参照します。
    そのため、OffsetやRangeなどは再Applyなしで反映されます。


    再Applyが必要な項目

    次の項目を変更した場合は、driver式やDriver Variablesの構造が変わるため、再Applyが必要です。

    項目再Applyが必要な理由
    Camera ObjectDriver Variableの参照先が変わる
    Pupil Objectdriver対象が変わる
    Reference ObjectDriver Variableの参照先が変わる
    Mode式構造が変わる
    Forward Axis式構造が変わる
    Invert X/Z式構造が変わる

    再Applyなしで調整できる項目

    次の項目は、Pupil ObjectのCustom Propertyとしてdriverが読むため、リアルタイム調整できます。

    項目再Apply
    Base X Offset不要
    Base Z Offset不要
    X Range不要
    Z Range不要
    X Sensitivity不要
    Z Sensitivity不要
    X Min / X Max不要
    Z Min / Z Max不要

    トラブルシューティング

    黒目が動かない

    確認する項目:

    Camera Objectが設定されているか
    Pupil Objectが設定されているか
    Reference Objectが設定されているか
    Applyボタンを押したか
    Location X/Zにdriverが入っているか

    左右が逆に動く

    Invert X を切り替えます。
    切り替え後は再Applyしてください。


    上下が逆に動く

    Invert Z を切り替えます。
    切り替え後は再Applyしてください。


    黒目が端に張り付く

    以下を調整します。

    X Sensitivityを下げる
    Z Sensitivityを下げる
    X Rangeを下げる
    Z Rangeを下げる
    Min/Max範囲を広げすぎていないか確認

    Last Apply Resultreached Minreached Max と表示される場合、制限値に到達しています。


    Cameraを動かしても動きが不自然

    まず Forward Axis を変更して再Applyします。

    候補:

    +Y Forward
    -Y Forward
    +X Forward
    -X Forward

    次に、人体や頭部が左右に回転する構成なら、Modeを Reference Z Normalized にして再Applyします。


    ShrinkwrapをONにすると動きが変になる

    Shrinkwrapを一時OFFにして、Pupil ObjectのLocation X/Zが滑らかに変化しているか確認します。

    結果判断
    OFFで滑らかDriverは正常。Shrinkwrap設定を確認
    OFFでも不自然Driver設定、Mode、Forward Axisを確認

    Shrinkwrap側では、以下を確認します。

    MethodがNearest Vertexになっていないか
    Offsetが0で面が重なっていないか
    Project方向が合っているか
    白目スクリーンの法線が正しいか

    このアドオンの限界

    v1.4.0は、Driver Variablesを使い、Blender標準のDriver Panelで参照先を確認しやすい構成です。
    一方で、Reference Objectの完全な3D local変換を行う方式ではありません。

    特に、頭部がX/Y/Zに大きく複合回転する場合は、Reference Z Normalized だけでは完全に追従できないことがあります。

    この場合は、将来的には以下のような方式が必要になります。

    内部関数による完全local変換
    Custom Propertyへ計算結果を書き出す方式
    Geometry NodesでPupil Meshを局所平面上に移動する方式

    まとめ

    KenJin Eye Look Driver v1.4.0は、黒目Objectを回転させず、白目スクリーン上で上下左右に移動させるためのBlender 5.1用アドオンです。

    特に、次のような目的に向いています。

    アニメ調の目を作りたい
    斜めから見ても黒目を見せたい
    球体眼球のように黒目が回り込んで消える表現を避けたい
    Track Toではなく、平面的な視線表現をしたい

    v1.4.0では、Offsetや移動幅をPupil ObjectのCustom Propertyに保存し、Driver Variablesから読むため、Nパネルで調整した値をリアルタイムに反映できます。

    黒目の中心位置を設定し、画面を見ながら微調整できる点が、このバージョンの大きな利点です。


    参考文献・出典