はじめに
人物やキャラクターの目を作るとき、リアルな眼球として球体を使い、黒目や虹彩を眼球の一部として作る方法があります。
この方法は自然ですが、斜め方向から見ると、黒目が球面の奥へ回り込み、見えにくくなることがあります。特にアニメ調・イラスト調の表現では、「横を向いていても黒目の形を見せたい」という場面があります。
そこで本アドオン KenJin Eye Look Driver v1.4.0 では、黒目を回転させるのではなく、白目を模したスクリーン上で黒目を上下左右に滑らせる方式を採用しています。
黒目Objectは Location X と Location 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可能 |
| 中心点Offset | Base 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として説明されています。
推奨設定
| 項目 | 推奨 |
|---|---|
| Target | White_Screen.L / White_Screen.R |
| Method | Nearest Surface Point または Project |
| 避けたいMethod | Nearest Vertex |
| Offset | 0.001〜0.005程度 |
| 白目スクリーン | 必要ならSubdivision Surfaceを追加 |
Nearest Vertex は近い頂点に寄るため、白目スクリーンの頂点数が少ない場合に段階的な動きになりやすいです。滑らかなスクリーン移動を狙う場合は、まず Nearest Surface Point または Project を試します。
インストール方法
- アドオンコードを以下のような名前で保存します。
kenjin_eye_look_driver_v1_4_0.py
- Blender 5.1を開きます。
- 以下の順に進みます。
Edit
> Preferences
> Add-ons
> Install from Disk
- 保存した
.pyファイルを選択します。 - Add-on一覧で KenJin Eye Look Driver を有効化します。
- 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 Pupil | Pupil Objectに保存済みの値をNパネルへ読み込み |
| Repair Properties | Pupil Objectに不足しているCustom Propertyをdefault値で再作成 |
Driver Structure
| 項目 | 内容 |
|---|---|
| Mode | 方向計算方式 |
| Forward Axis | 目の正面方向 |
| Invert X | 左右が逆に動く場合にON |
| Invert Z | 上下が逆に動く場合にON |
Modeの選び方
| Mode | 内容 | 向いている場面 |
|---|---|---|
| World Normalized | World座標のCamera-Reference方向を正規化して使用 | 顔やReferenceが大きく回転しない場合 |
| Reference Z Normalized | Reference ObjectのZ回転だけ補正 | 人体や頭部が主に左右方向へ回る場合 |
注意点として、Reference Z Normalized はReference ObjectのZ回転のみを補正します。頭部がX/Y/Zに複合的に大きく傾く場合は、完全なlocal変換ではありません。
Forward Axis
| 設定 | 意味 |
|---|---|
| +Y Forward | Reference Objectのlocal +Yを目の正面とみなす |
| -Y Forward | local -Yを目の正面とみなす |
| +X Forward | local +Xを目の正面とみなす |
| -X Forward | local -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 Offset | Offsetを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 Range | 0.030 |
| Z Range | 0.020 |
| X Sensitivity | 0.350 |
| Z Sensitivity | 0.350 |
黒目の動きが大きすぎる場合は、Sensitivityを下げます。
動きが小さすぎる場合は、Sensitivityを上げます。
Live Limits Relative to Offset
Offsetを中心とした移動制限です。
| 項目 | 内容 |
|---|---|
| X Min | Base X Offsetから見た左方向の限界 |
| X Max | Base X Offsetから見た右方向の限界 |
| Z Min | Base Z Offsetから見た下方向の限界 |
| Z Max | Base 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 Drivers | Pupil 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 / Skipped | driverが適用されたか |
| Mode | 使用した計算方式 |
| Pupil | driver対象Object |
| Reference | 方向計算の基準Object |
| Offset X/Z | 保存されている中心位置 |
| X/Z initial | Apply時点の初期driver評価値 |
| clamped | Min/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_x | Base X Offset |
| kj_eye_offset_z | Base Z Offset |
| kj_eye_range_x | X Range |
| kj_eye_range_z | Z Range |
| kj_eye_sens_x | X Sensitivity |
| kj_eye_sens_z | Z Sensitivity |
| kj_eye_min_x | X Min |
| kj_eye_max_x | X Max |
| kj_eye_min_z | Z Min |
| kj_eye_max_z | Z Max |
これにより、add-onパネルを閉じても、.blendを保存すれば値はPupil Object側に残ります。
DriverはこれらのCustom PropertyをSingle Property変数として参照します。
そのため、OffsetやRangeなどは再Applyなしで反映されます。
再Applyが必要な項目
次の項目を変更した場合は、driver式やDriver Variablesの構造が変わるため、再Applyが必要です。
| 項目 | 再Applyが必要な理由 |
|---|---|
| Camera Object | Driver Variableの参照先が変わる |
| Pupil Object | driver対象が変わる |
| Reference Object | Driver 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 Result で reached Min や reached 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パネルで調整した値をリアルタイムに反映できます。
黒目の中心位置を設定し、画面を見ながら微調整できる点が、このバージョンの大きな利点です。

