2018/06/16

SLAL(SexLab Animation Loader)のPACKの作り方

きちんとどこかに書いておかないと、鳥頭の私は少し間が空いたらまたすぐにやり方を忘れてしまいそうなので、今日はSexLab Animation Loader(SLAL)のPACKの作り方の手順をまとめておきたいと思います。
ちょうど乳揉み専用アニメーションが欲しかったところなので、作者様の違う個別のモーションを組み合わせて、カスタマイズした一つのアニメーションとして登録するという流れをサンプルとして紹介しようかと思いますよ。人間のアニメで、小道具(AnimObject)なども使ったりしていないきわめて簡単な例になりますが、基本の流れさえ押さえておけば、小難しいオプションはその都度調べればいいだけなので、備忘録としては事足りるかなと思います。
今までSLALのPACKを自分で作ってみたいと思っていたけど、英語のガイドを読んでも意味不明だった、もしくは英語自体読む気がしない、という人がいましたら、参考にどうぞ。

こんな感じで別アニメのモーションを組み合わせたカスタムアニメを作ろうと思います。
ステージ1は「Babo_StandingBound01」のStage1。
ステージ2はSexLabに標準装備の「3jiou Breastfeeding Straight」のStage1。
ステージ3は「Babo_Conquering01」のStage2。


【1】まずはSLALのPACKを作るための作業フォルダを準備します。
私はMOを使っているので、MOの「mods」フォルダ内に「196_SLAL_obachan pack」という名前のフォルダを作りました。名前はもちろん適当でOK。
作業フォルダを用意したら、まずそこに「meshes」フォルダを作り、下記の階層の通りにフォルダを作っていきます。

「meshes」の中に「actors」、さらにその中に「character」を作ります。
ちなみに「character」は人間用のアニメのフォルダ名なので、クリーチャーアニメの場合はそれぞれの種族名のフォルダを作る必要があります。
「character」の中に、さらに「animations」と「behaviors」というフォルダを作ります。「animations」にはモーションのhkxファイル、「behaviors」にはFNIS様に作成してもらうモーションの定義ファイルが入ることになります。

【2】次にモーションファイル(hkxファイル)を用意します。
先ほど作った「meshes/actors/character/animations/」の中に、自分のPACK名(他のPACK名と被らなければ自由に付けてOK)のフォルダを作り、そこに使いたいモーションファイル(hkxファイル)を入れます。
ちなみに流用元の他のModのモーションファイル(hkxファイル)も、人間用でしたら「meshes/actors/character/animations/xxx」(※xxxはMod名やPACK名)の中に入っています。アニメーション名とかけ離れた名前がついていることは稀ですので、名前を頼りに見当をつけ、元のModやSLAL PACKのデータの中から取り出します。
私はPACK名は「obachan」にしました。
先ほど紹介したように既存の3つのアニメーションから乳揉みシーンのあるステージのみを使うので、流用元はこんな風にバラバラの名前になっています。

なお、SexLabではモーションファイルは各Actorの各ステージごとに1つずつ存在しています。
つまり男女2人のアニメだったら男性と女性は別々に、それぞれステージの数だけhkxファイルが存在しているということです。
さらに注記すべき点として、SexLabで使うモーションファイル(hkxファイル)は慣習的に下記のような命名法則で名前が付けられています。SLALに登録する場合も、モーションファイルの名前はこの命名法則に従って名づける必要がありますので、ちゃんとこのお約束の意味を理解しておく必要があります。
「作者名」_「アニメーション名」_「アクター番号」_「ステージ番号」.hkx
SexLabでは1つのアニメ内では、人間やクリーチャーは合わせて5人まで、つまり最大5Pのプレイが可能です。んで、このアクターには1から通し番号がついていまして、上記のファイル名で使う「アクター番号」というのはActorの頭文字の「A」とその順番のことを指しています。
(つまり「アクター番号」はA1からA5までしか存在しません)
基本的に女性、というか受身側のキャラが「A1」です。
同性同士の場合も、クリーチャーの場合も、攻められる側がA1、攻める側がA2、それ以上の参加者はアニメによってまちまちなので特に決まりはありません。
モーションファイルは各アクターごとに必要ですので、2Pのアニメだったら「A1」と「A2」、3Pだったら「A3」までのモーションファイルを用意する必要があります。

「ステージ番号」は言葉通り、Stageの頭文字の「S」と各ステージの数字が組み合わさった表記です。ちなみにこのステージ数、二年前までは10を超えるステージ数を持つアニメは存在しなかったので、Directorのサムネ画像枠もMax10個にしていたのですが、先日Komotorさんという方のアニメを導入したら、ステージ数が14もあるアニメーションがあって、のけぞってしまいました。
いやー、アニメの数や種類だけでなく、ステージ数までインフレを起こしていたとはね……
アクターと違って、ステージ数は特に限度は無いと思います。

そんなわけで上記の命名法則でhkxファイルをリネーム。
男女2人のステージ3までのアニメとして編集しようと思うので以下のようになります。
オリジナルの作者名のところをリネームするのは気が引けるのですが、PACK内のアニメーションは同じ作者名で統一する必要があるので、やむなく「oba」に改名させていただきました。
またアニメーション名も、同じアニメとして使用したい場合は共通の名称にしないと、SLALは一連のアニメとして認識してくれなくなります。
あとはアクターの区別(A1・A2)とその3ステージ分、順番を間違えないように名前を付けるだけです。今回はアニメは一個だけですが、もちろん複数のアニメを同じPACK内に入れることができます。Papyrus上で管理する関係上、おそらく1つのPACK内に入れることができるアニメは128個以下の筈ですが、まあ、数が多い時はまた新たにフォルダを作ってPACKを分ければ良いだけの話です。
自分のPACKフォルダにリネームしたファイルを用意したら、これでモーションファイルの準備は完了です。

【3】お次は「SLAnims」フォルダとそのソースファイルの準備です。
SexLab Animation Loader(SLAL)をダウンロードして、解凍したデータ内にある「SLAnims」フォルダ、これをごそっと【1】で作った作業フォルダの下に持ってきます。
つまり先ほどの「meshes」フォルダと同じところに並びます。
「SLAnims」フォルダの中にはまず「SLAnimGenerate.pyw」というPythonのスクリプトが入っています。これは後で使います。
次に「source」というフォルダの中に「Example.txt」というサンプル用のソースファイルが入っているのですが、こちらを参考に同じ場所に自分のPACK用のソースファイルを作ります。
ソースファイルの名前は、先ほど「meshes/actors/character/animations/」以下に作ったPACK名に拡張子の「txt」を付けた名前にします。
つまり、私の例ですと、「obachan.txt」です。
この新規作成した自分のPACK用のソースファイル(txtファイル)をメモ帳やエディタで開いてアニメーションの設定を記載します。ちなみに先ほど「SLAnims」フォルダ直下に入っていたPythonのスクリプトは、このソースファイルの内容を見て、FNIS様用の陳情ファイルを作ったり、SLAL用のJSONファイルを書き出したりするのです。

さて、それでは参考までに「obachan.txt」に実際に記載した内容をご紹介します。
is_example = False
mcm_name = "obachan pack"

anim_dir("obachan")
anim_id_prefix("oba_")
anim_name_prefix("oba ")
common_tags("custom")

Animation(
 id="BreastFeeding1",
 name="BreastFeeding 1",
 tags="Breast",
 sound=Sucking,
 actor1=Female(),
 a1_stage_params= [
  Stage(2, rotate=-180),
 ],
 actor2=Male(open_mouth=True,silent=True),
 a2_stage_params= [
  Stage(1, open_mouth=False),
  Stage(2, rotate=-180),
 ],
 stage_params = [
        Stage(1, sound=NoSound),
    ] 
)
これを初めて見る方は、うわ、なんだか面倒くさそうだなとげんなりするかもしれませんが、これでもSexLab本家のアニメの設定スクリプトに比べたら、かなり簡略化されていて、凄まじく効率化されているのですよ。
SexLabに特化した、かなり考え抜かれた無駄の無い書式だと心の底から感嘆します。今のエロアニメーションのインフレはこのSLAL無くしてはなかったことでしょう。
ちなみに今回は登録したアニメは1個なので、これで終わってますが、PACK内に複数のアニメがある時は「Animation(...)」の部分の記述をアニメの数だけ繰り返します。

さてそれでは各記述の意味をざっくり説明します。
「Animation(...)」という記述が始まるまでの前半部分は、PACKの名称やPACK配下のアニメすべてに共通する設定を行うところです。
is_example = False
mcm_name = "obachan pack"
「is_example」はこのソースファイル(txtファイル)がサンプルかどうかのフラグで、これが「True」になっている場合はSLALのビルドの対象になりません。
ちなみに同じ「source」フォルダ内に入っている「Example.txt」はこのフラグがTrueなので、SLALのスクリプトを実行しても対象から除外されています。
「mcm_name」は文字通り、SLALのMCMのメニュー上で、自分のPACKがどんな名前で表示されるかを指定します。
MCM上の表示なので、おそらくアルファベット順に並びます。なので他のSLALのPACK達よりも上の方に表示させたかったら、数字とか「a」とかを頭につけると良いですね。
念のために申しますと、こちらは単なるMCM上の表記ですので、先ほどモーションファイルのフォルダに付けたPACK名とまったくかけ離れた名前でも特に問題ありません。

anim_dir("obachan")
anim_id_prefix("oba_")
anim_name_prefix("oba ")
common_tags("custom")
「anim_dir」は「meshes/actors/character/animations/」以下に作ったPACK名のフォルダの名称を指定します。そして次の「anim_id_prefix」はモーションファイル(hkx)に付けた「作者名」をアンダーバー「_」付きで指定します。
「anim_name_prefix」はこのPACKのアニメすべての名称に付けられる接頭辞です。
「anim_id_prefix」と「anim_name_prefix」を揃える必要はないです。ちなみに「name」のアニメーション名の方は、名称が長くなるとMCMの表示欄から溢れてしまったりするので、「anim_name_prefix」は短めにつけるのが良いと思います。
また「common_tags」はこのPACKのアニメすべてに付与されるTagです。同じPACKシリーズのアニメだということがわかるように、ユニークなタグを付けてあげると良いですね。
また、強姦専用アニメのPACKであれば「AggressiveDefault」というTagを「common_tags」として設定しておくと、ユーザーがいちいち強姦用(Aggressive)のフラグを立てなくても、最初から強姦用のフラグがついた状態でレジストされます。
タグはカンマで区切れば複数指定が可能です。

さて、次は登録するアニメーションの詳細設定の部分です。
Animation(
 id="BreastFeeding1",
 name="BreastFeeding 1",
 tags="Breast",
 sound=Sucking,
 actor1=Female(),
 a1_stage_params= [
  Stage(2, rotate=-180),
 ],
 actor2=Male(open_mouth=True,silent=True),
 a2_stage_params= [
  Stage(1, open_mouth=False),
  Stage(2, rotate=-180),
 ],
 stage_params = [
        Stage(1, sound=NoSound),
    ] 
)
こちらも前半はアニメの全ステージを通しての設定が記載され、後方に行くに従って各アクターや各ステージの詳細が記述される、という流れになっています。
つまり最初に全体で共用される設定を書き、違うところだけ後から追記するというスタイルで、いちいちすべてを一つずつ指定しなくても最小限の記述で設定が記載できるようになっているのです。頭いいですね。

まずはAnimation(...)の最初の部分。
 id="BreastFeeding1",
 name="BreastFeeding 1",
 tags="Breast",
 sound=Sucking,
「id」は、先ほど設定した「anim_id_prefix」が接頭辞として頭について、アニメの固有のレジスト名となります。
つまり私の例の場合ですとレジスト名は「oba_BreastFeeding1」になりますね。
アニメのレジスト名というのは決して他のアニメとカブっていてはいけません(でないと後からレジストされる方に上書きされてしまいます)。だから不特定多数の他のModderのアニメとの競合を避けるために、接頭辞として必ず作者名を付ける仕様になっているのです。
ちなみにDirectorのサムネ画像のファイルの名称もこのレジスト名を使用しています。

一方「name」はそのアニメの一般的な名称のことです。こちらも先ほど設定した接頭辞の「anim_name_prefix」が頭についた名称となります。
(私の例だと「oba BreastFeeding 1」というアニメーション名になります)
レジスト名と違って、アニメーション名の方は、同名のアニメが他に存在していても特に問題ありません。
ところでアニメーションの名前についてですが、Directorのサムネ画像などが無い限り、ユーザーはどんなアニメーションなのかということはアニメーションの名前から想像するしかありません。
なので「Standing」とか「lover」とか、できるだけどういう状況のアニメなのかが伝わるような単語を含めた名称にすべきかと思うのですが、ただ先ほども注記したように、この名称はMCMのメニューに表示されますので、あんまり長いと表示枠から溢れてしまいます。
日本語名も付けられなくはないのですが、文字コードに気を遣わなくてはならなくなりますし、あんまりお勧めはできませんね。
ちなみにDirectorではフォントの都合上、どんな文字コードにしようが日本語のアニメーション名は必ず文字化けします。

続いて「tags」……これはこのアニメーション限定で指定するタグの設定です。
先ほどと同様、複数指定したい時はカンマで列挙できます。
ちなみにSexLabのアドオンModの多くが一般的なタグでアニメーションを候補にするかどうか判断します。なので「Vaginal」とか「Anal」とか「Oral」とかいうような一般的なタグを入れておかないと、アニメが再生される機会が激減してしまうかと思います。
今回の乳揉みアニメは私は自作のModで使うつもりなので、一般的なタグは使っていません。(逆に普通のSexシーンでは使いたくないので、「Oral」などはあえて設定しませんでした)

「sound」はこのアニメの最中、流すことになる効果音の設定です。
ステージによって効果音を変えたい場合は、後で個別に指定できますので、とりあえずこの前半の「sound」の項目では、一番多く使う効果音を指定しておくのが良いかと思います。
ちなみに指定するサウンドの種類はこんな感じです。

(1)Squishing:Sex時の一般的な音。
…「Sound/fx/SexLab/fxSex01」内にある効果音。
(2)Squirting:オーガズム時の発射音
…「Sound/fx/SexLab/fxOrgasm01」内にある効果音。
(3)Sucking:Oral時のぴちゃぴちゃ音
…「Sound/fx/SexLab/fxOral01」内にある効果音。
(4)SexMix:(1)と(3)の混合バージョン
…「fxSex01」と「fxOral01」の両方が含まれる
(5)NoSound:効果音無し

私の乳揉みアニメは、ステージ1を除いて、おっぱいをちゅぱちゅぱ吸ってる音がしていて欲しいので、「Sucking」としました。
しかし改めて調べて思ったんですが、ボイス同様、効果音も種類少なすぎですね。せっかくステージごとに設定できるのだから、もっと多種多様な効果音が欲しいです。

長くなってまいりましたが、続いてアクターの設定、行きましょう。
 actor1=Female(),
 a1_stage_params= [
  Stage(2, rotate=-180),
 ],
「actor1」は先ほどモーションファイルの命名でも使った「A1」に当たる受身のアクターのことです。アクターはまず男女人獣の指定をする必要があります。
乳揉みアニメのA1は女性のキャラクターに演じて欲しいので、Female()と設定。
他は今回は特に何も追加で設定するオプションが無いのでカッコの中は空ですが、射精後のテクスチャの場所の指定や口を開ける指定などがあるようでしたらカッコの中に記述していきます。(オプションはいろいろあるので他のPACKのソースファイルを参考に見るのが良いです)
続いて「a1_stage_params」のところですが、これは「A1」のアクターについて各ステージごとに細かな設定を追加したい時に使います。
今回、私はステージ2に使っているアニメだけ、男女ともに向きを180度変更したかったので「Stage(2, rotate=-180)」と追加しました。
(違う作者様の違うアニメを繋いだので、いきなりステージ2で男女の位置がくるっと逆になってしまうのが気になったのです)

お次は「A2」…乳を吸う男性側の設定です。
 actor2=Male(open_mouth=True,silent=True),
 a2_stage_params= [
  Stage(1, open_mouth=False),
  Stage(2, rotate=-180),
 ],
男性側はお口を開けていて欲しいので「open_mouth=True」の指定をつけます。ただステージ1は乳を揉んでいるだけで吸ってはいないので「Stage(1, open_mouth=False)」としています。
また「silent=True」の指定はSex中のボイスを無しにする指定です。
男が乳吸いながら「ウオウ」とか「アアッ」とか吠えてたらキモイので黙らせています。

最後に……よく考えたらステージ1は乳は吸っていないので、「Sucking」のちゅぱちゅぱ音が響いているのはおかしいと気づき、ステージ1のみサウンド無しにしました。
 stage_params = [
        Stage(1, sound=NoSound),
    ] 
こんな風にその気になればステージごとに事細かにカスタマイズできます。
今回は大したことはしてませんが、アニメオブジェクトを使ったり、SOSのちんぽの角度を調整したりと、他にもいろいろオプションがありますので、凝り症の方はがんばってください。

ソースファイルの準備はこれでやっと完了です。

【4】ソースファイルの準備ができたら、先ほど後で使うと書いた、「SLAnims」フォルダの「SLAnimGenerate.pyw」をダブルクリックします。
※pythonはバージョン3.x以上のものを予めインストールしておく必要があります。
ちゃんと「source」フォルダにソースファイルを用意し、「meshes」以下のモーションファイルについても、フォルダの階層やファイル名など、何の誤りもなく用意ができていれば、特に「Browse」ボタンを押してディレクトリを選択しなくても、上記のように用意したPACKの名称とアニメーションがウィンドウに表示されます。
Categoriesの欄で、新しく用意したPACK名が(NEED BUILD)となっているのを確認したら、それを選択して「Build Category」のボタンを押します。
そうすると赤線で引いた部分からもわかるように、SLALのメニューに読み込まれるJSONファイル(obachan.json)と、FNIS様に陳情するためのアニメーションのリストファイル(FNIS_obachan_List.txt)の2つが作業フォルダ内の各フォルダ配下に書き出されます。
これでもう、SLAL側の準備は完了したも同然です。
後はゲーム内で新たなモーションを使用するため、FNIS側の処理を行う必要があります。

【5】さてお次はFNIS様のご登場です。
【4】の工程で「この新しいモーション達をスカイリムのゲーム内で使えるようにして下さい」とFNIS様に陳情するためのリストを作ってもらいましたので、FNIS様にお願いして実際にbehaviorのファイルを作ってもらいます。
この時、お願いするFNIS様は、いつも使うユーザー用の赤いFNIS様ではありません。Modder用の青いFNIS様(GenerateFNIS_for_Modders)です。

私はMOを使っているので、MOからFNIS様を立ち上げればフォルダの移動はしなくて良いのですが、MO使いじゃない方は、作業フォルダの「meshes」フォルダをSkyrimのDataフォルダ配下に移す必要があるかと思います。FNIS様を起動する前に適宜準備して下さい。
※私は作業フォルダの「196_SLAL_obachan pack」をMOのmodとして読み込んでいるので、作業フォルダ内の「meshes」はSkyrimの「Data」配下に置いてあるのと同義なのです。

青いFNIS様(GenerateFNIS_for_Modders)の画面
「Generate Mod Behavior」のボタンを押して、「meshes/actors/character/animations/PACK名」の中にある「FNIS_PACK名_List.txt」を選択してください。
青いFNIS様の処理は、赤いFNIS様と違ってすぐに終わります。
問題無く処理がすめば赤枠にあるように「FNIS_PACK名_Behavior.hkx」というファイルが「Data/meshes/actors/character/behaviors/」の中に生成されている筈です。
※ただしMOから起動しますと、仕組み的に「overwrite」以下の「meshes」フォルダ配下に作られます(生成されたbehaviorファイルは元の作業フォルダの配下のbehaviorsフォルダに移してやると良いです)

【6】いつもの赤いFNIS様を実行して、ゲーム起動!
あとは他の制作者のSLAL PACKをインスコする時と同様に、赤いFNIS様を走らせるだけです。
ちゃんと読み込まれていますね……よしよし。
V1.0というバージョン表記はSLALが勝手に付けてくれたみたいです。

ソースファイルで設定した通りのMCM_name名、アニメーション名になっています。
「MCM_name」はアニメーション名よりもさらに表示枠が狭いので注意が必要ですね。
(まあ、文字が溢れても読めますけどね)
ちなみにアニメーションのタグですが、「common_tags」で設定した「custom」、アニメーションの「tags」で設定した「Brest」以外に、下記のように「FM」「MF」のタグが勝手に追加されていました。

効果音も口の開け閉めも、ばっちりでした。
これで搾り立てのミルクを直飲みしてもらう素敵なプレイが楽しめそうです。

1 件のコメント:

  1. こんな解説が欲しかったです。ぜひともやってみます。

    返信削除