アニメ化とは
顔の造形がしいて言えばリアル調のゲームをアニメ風にかえることを指しています。アニメ化に関してはFallout 4のAnimeRace Nanakochanが有名かと思います。
今回は、手始めにプレイヤーと、既存のフォロワーをアニメ化してみました。
NPCのアニメ化が難しい理由
Skyrimの場合、顔のデータはFaceGenDataと呼ばれる、言ってみればキャッシュのようなものが必要です。ないと顔が表示されません。このFaceGenDataを作るのがかなり面倒な作業になります。
一方でFallout 4の場合、FaceGenData自体はあるのですが、CKやFO4Editで顔を変更するとFaceGenDataが使われなくなり、ゲーム内で動的に処理されるようになっているようです。つまり、FO4Editでスクリプトを使って一括処理したあと、そのまますぐにゲームを開始できるので、とても楽だということです。
使ったもの
Beofuledさんという方がアニメ風のスタンドアロンフォロワーを数多く作成されています。それらを使いました。それ以外は特に使っていません。
既に環境がある程度整っているという前提です。
- XP32 Maximum Skeleton Special Extended(スケルトンの拡張)
- Caliente’s Beautiful Bodies Enhancer -CBBE-(体型)
- CBBE 3BA(CBBEの派生)
- Faster HDT-SMP(揺れの実装)
これに加えて、CBBE用高品質スキンテクスチャを入れています。
とりあえず始める方法
Modをダウンロードしたら、Modマネージャでインストールして、ゲームを起動したらshowracemenuで種族を変更、これだけです。
BeofuledさんModは大抵、プレイヤー用のプリセットが用意されており、フォロワーがどこかに配置されています。場所はModによって異なります。
調整する
必要に応じて調整を行います。
ESPFE化
ほとんどがESP形式で、Form IDが4桁になっています。ESPFEにするには、以下の手順で作業します。
- NPCのForm IDを記録しておきます。
- SSEEditでForm IDを振りなおします。800からにするのが無難です。
- Record Header – Record FlagsでESLにチェックを入れます。プラグイン名.espをクリックして右ペインの一番上、Record Flagsを右クリックしてEditです。
- Check for Errorsを実施して問題がないか確認しておくと安心です。
- NPCのForm IDがどう変化したのかまとめます。
- アセットに含まれるFaceGenDataのメッシュとテクスチャをリネームします。
- FaceGenDataのメッシュの中にFaceTintのテクスチャ指定があるのでリネームします。
フォロワーの配置場所
フォロワーの配置場所はまちまちですが、LeafRyz.espのReisalin Stoutがドラゴンズリーチにいますので、CellとData – Position/Rotationを合わせると同じ場所に集められます。
素体のメッシュ
素体のメッシュはArmor Addonで指定されていますが、これは全フォロワーで共通化しました。CBBE 3BAなら問題ないようです。
既存のフォロワーをアニメ化する準備
動作確認を行う
基本中の基本です。Modが問題なく動作することを確認します。
必要なツールを用意する
以下のツールが絶対に必要です。
- SSEEdit
- NifScope
データ構造を理解する
Actorを構成するレコードを理解します。
- Race
- NPC (ActorBase)
- Armor
- Armor Addon
- Texture Set
- Armor Addon
- Voice Type
- Armor
- NPC (ActorBase)
既存のフォロワーをアニメ化する – ラビ編
例として、Rabi Follower_Japanese Custom VoiceのRabiをLeafMar with followerの宝鐘マリンにしてみます。
方針
Rabiはフルボイスで会話が用意されています。LeafMarの方は見た目だけです。よってLeafMarの見た目をRabiに移植します。この方が格段に楽だからです。
Rabi側のレコードを編集する際、レコードそのものを置き換えることはできるだけ避けます。動作不良や互換性の低下に繋がるからです。
- RabiのForm IDは変更しない
- Rabiの種族は変更しない
- Rabiのボイスタイプは変更しない
レコードの移植作業
SSEEditで両者のプラグインを読み込みます。
まずパッチを作ります。そうすればいつでも簡単に元に戻せるからです。
RabiのRaceである aaaRabiRace
を右クリックしてCopy as override intoを選択、新規プラグインを作成します。名前は MyPatch – Rabi Follower – LeafMar.esp としました。ESL形式で大丈夫です。以降はこのプラグインを編集していきます。
MyPatch – Rabi Follower – LeafMar.espを右クリックしてAdd Mastersを選択、LeafMar.espを指定します。
MyPatch – Rabi Follower – LeafMar.espの aaaRabiRace
とLeafMar.espの 11MarRace
を比較します。aaaRabiRace
をクリックしたら、11MarRace
をCtrlを押しながらクリック、右クリックしてCompare Selectedです。すると右ペインに並びます。
以下をコピーしていきます。ドラッグ&ドロップです。
- Data – Female Height
- ANAM – Female Skeletal Model
- Head Data(ツリーをまるごと)
これが容姿になります。身長、使用するスケルトン、顔パーツと顔テクスチャになります。
Rabi Follower.espのArmor Addonの3をすべて、パッチにCopy as override intoでコピーします。
NAM1 – Female Skin textureをLeafMar.espのものに置き換えます。
変更前 | 変更後 |
---|---|
aaaRabiSkinBodyFemale | 11SkinBodyFemale_Mar |
aaaRabiSkinHandFemale | 11SkinHandFemale_Mar |
aaaRabiSkinBodyFemale | 11SkinBodyFemale_Mar |
使用するボディテクスチャになります。
Rabi Follower.espのNPCをパッチにCopy as override intoでコピーします。
NAM6 Heightが0.9なので1.0にします。
FaceGenDataの移植作業
LeafMarに含まれるFaceGenDataをRabiに上書きコピーします。
LeafMar側は 00001DA0.NIF
を選びました。設置されているフォロワーのデータです。プレイヤーのプリセット分もありますが、多分どちらでも一緒です。
コピー先はRabiのパス、名前にします。その際、上書きするまえにバックアップをとっておきます。MO2ならMod化して上書きされるように配置するのがオススメです。
コピーしたメッシュをNifScopeで開き、顔全体のノードを探します。大抵はFemaleHeadという名前がついています。今回のケースでは 11FemaleHeadMar
でした。
このノードを展開していき、BSShaderTextureSetを探します。上から7番目がFaceTintの指定になりますので、バックアップしておいたRabiの値をここに上書きします。
補足
身長を決めるHeightですが、複雑に重なり合って決定されます。
- RaceのHeight
- ActorBase (NPC)のHeight
- スケルトンのデータ
- ゲーム内での動的変更
どれか1箇所のみで指定することをオススメします。私はRaceだけにしました。
幸い、LeafMar付属のスケルトンは身長はいじっていないようです。ですので、すべてを標準の1.0にすると、バニラのNPCと比較して顔がかなり大きくなります。
既存のフォロワーをアニメ化する – ジェイ・ザルゴ編
バニラフォロワーのジェイ・ザルゴをLeafKorの戌神ころねにしてみます。
方針
種族と性別をかえてみます。
- ジェイ・ザルゴのForm IDは変更しない
- ジェイ・ザルゴの種族をカジートから
11KorRace
に変更する - ジェイ・ザルゴの性別を男から女に変更する
レコードの移植作業
Rabiの時と同じように作業します。
Skyrim.esmのNPCから Jzargo
を探し出してCopy as override intoでコピー、名前はMyPatch – Jzargo – LeafKor.espとしました。
MyPatch – Jzargo – LeafKor.espの Jzargo
とLeafKor.espの 11KorFollower
を比較します。
以下をコピーしていきます。ドラッグ&ドロップです。
- ACBS – Configuration – Flags – Female
- RNAM – Race
- NAM7 – Weight
- FTST – Head Texture
- QNAM – Texture lighting
- NAM9 – Face morph
それから、以下は空にして 11KorFollower
側と合わせます。
- Head Parts
- Face Parts
- Tint Layers
しっぽですが、カジートは種族としてしっぽが設定されているようです。一方で 11KorRace
にはありません。装備としてしっぽが用意されているので、それを装備させることにしました。
FaceGenDataの移植作業
Rabiの時とまったく同じです。
声をなんとかする
ここまでの作業で見た目だけは戌神ころねになります。ですが、声は元のままです。
Skyrim.esmのVoiceTypeの MaleKhajiit
をCopy as new record intoで複製コピーします。名前を MaleKhajiitKorone
としました。
MyPatch – Jzargo – LeafKor.espの Jzargo
のVoiceTypeを変更します。
カジートの声を取り出してボイスチェンジャーで変更します。詳しい手順については声を作ってみた・ボイスチェンジャー編で解説しています。
作成した音声ファイルは以下のパスに配置します。
sound\voice\skyrim.esm\malekhajiitkorone
一部のセリフは条件を調整しないと話しません。
Skyrim.esmのVoiceTypeの MaleKhajiit
をクリックして右ペインのReferenced Byを選択、ソートしてINFOをCopy as override intoでコピーします。
条件式を調整していきます。条件式の書き方を覚えないとなかなか難しいです。
変更前 | 変更後 |
---|---|
Subject.GetIsVoiceType(MaleKhajiit) = 1 | Subject.GetIsVoiceType(MaleKhajiit) = 1 OR Subject.GetIsVoiceType(MaleKhajiitKorone) = 1 |
Subject.GetIsVoiceType(MaleKhajiit) = 1 OR Subject.GetIsVoiceType(FemaleKhajiit) = 1 | Subject.GetIsVoiceType(MaleKhajiit) = 1 OR Subject.GetIsVoiceType(MaleKhajiitKorone) = 1 OR Subject.GetIsVoiceType(FemaleKhajiit) = 1 |
Subject.GetIsVoiceType(MaleKhajiit) = 1 AND hogehoge | Subject.GetIsVoiceType(MaleKhajiit) = 1 OR Subject.GetIsVoiceType(MaleKhajiitKorone) = 1 AND hogehoge |
Subject.GetIsVoiceType(MaleKhajiit) = 0 AND hogehoge | Subject.GetIsVoiceType(MaleKhajiit) = 0 AND Subject.GetIsVoiceType(MaleKhajiitKorone) = 0 AND hogehoge |
既存のフォロワーをアニメ化する – セラーナ編
ジェイ・ザルゴと同じです。(以下略)
屋外ではフードを被りますが、これが合わないため、サングラスに変更しました。
余談ですが、私の環境ではセラーナが棺に入っておらず、話しかけてもクエストが進行しないため、アニメ化による不具合と勘違いしたのですが、正しくは棺をアクティベートでクエストが進行します。
不具合
頭が大きい
Scaleを下げて低身長にしているようです。デフォルトの1.0だと、バニラのNPCと並んだ時に、明らかに頭が大きいのです。大体0.7~0.9がいいようです。
家具を使うと埋まる
家具を使用したときに埋まってしまうのはHeels Fixで解決できるようです。
Improved Camera SE
Improved Camera SEでカメラが低すぎるのは、設定を調整するしかないようです。
プロファイルを作って切り替えられるので、うまく活用します。
ヘッドトラッキング
ヘッドトラッキングで目線が相手の顔まで上がらないのは、修正するModを見つけられませんでした。
Tiny Headtrackにて自前で修正しました。
頭装備
埋まったりします。丁寧になおすしかないようです。
Outfit Studioでスライダーを用意してゲーム内で適用するのがオススメです。
首に隙間ができる
ActorのWeightの初期値はNPCレコードのWeightで設定されています。0.0で0%、1.0で100%です。大抵は0.0になっているようです。ヘッドメッシュはこの値に合わせて作られているようです。
ゲーム内でのWeightを現在値とします。ニューゲーム直後は初期値がそのまま現在値になっています。現在値を変更すると首に隙間ができます。拙作のActor Weight Managerを使うと、隙間を作らずにWeightを変更できます。
アニメ化するなどしてActorのデータをゲームの途中で変更した場合、初期値が合わなくなることがあるため、正しい初期値を手動で設定する必要があります。