Pip-Boy Flashlightをベースに試行錯誤したことをまとめます。
光る仕組み
Pip-boyは防具なのでArmorレコードとArmor Addonレコードがあります。
Armor Addonでメッシュが指定されています。
meshes\pipboy\characterassets\PipboyLowPlayer.nif
これがプレイヤーが装備しているPip-boyの見た目になるようです。
このメッシュファイルをNifScopeで覗いてみると、BSConnectionPoint::Parentsというノードがあります。
ここにConnect Pointsというのが2つあります。
バニラの場合は上の1つしかありません。Pip-Boy Flashlightに同梱されているものは2つあります。
おそらく下のP-AttachLightOverrideで名前の通り上書きしているのだと思います。上をそのまま残すのは互換性を考えてのことでしょうか。
Parentが光源の接続箇所になるようです。Pip-Boy Flashlightの場合はHead_skinになっています。頭に接続するということだと思います。
ここに、光源用のメッシュをアタッチメントで装着することで、光源が出たり消えたりするようです。
光源の位置を調整する
Head_skinになっていると頭の動き(アニメーション)に連動して光源も動いてしまうという問題があります。イマーシブではあるのですが、静止していても光源だけがちょくちょく動いて遊びにくいです。特にピストルで構えているときに正面を照らしてくれないのがとても困ります。
Rootにかえて問答無用で正面を照らす
そこでRootにかえてみました。Rootはおそらく原点座標のことで、ActorであればSkeletonで設定されている原点座標になるのだと思います。足元の両足の中間あたりになります。
Rotationで向きを、Translationで位置を調整できますので、胸のあたりから正面に向けて照らすようにしてみました。上の画像が調整済みのパラメータです。
アニメーションの影響を受けないということはスニークしても動かないということなので、頭に接続する場合に比べると若干違和感がありますが、前が見えないよりはマシです。
Neckにしたりしてみたのですが、どれも角度の影響を受けるので、スニークすると下を向いてしまってダメでした。
HEADのままで角度を調整する
Rをプラスにすると左を向くようです。10くらいにしました。
立っているときとスニークするときで角度が微妙に違うので、立っている時に正面になるようにしました。
1人称視点の場合はアニメーション用の3Dモデルが切り替わるらしく、このメッシュの設定とは関係なく常に真正面を照らすようでした。