多重着せ替え定義について

Last-modified: 2021-05-07 (金) 00:05:48

執筆者:もっしょくし  ※編集に許可は不要ですが、相談には応じます。

 

この記事は伺か Advent Calendar 2015の22日目です

 

SSPが実装する「多重着せ替え定義」についての解説記事です。

基本的な着せ替え設定はできる方向けの記事です。


目次


多重着せ替え定義とは

どんなもの?

実は名前を知らないだけで普通に使っている方もいらっしゃる気がしてるのですが…。

一言でいうと「着せ替えのパーツがさらに着せ替えを持つ仕様」です。

といって済ませるくらいならこんな記事を書くこともないので、以下普通の着せ替えとの比較という形で見ていきましょう。

まずは以下のイメージ図に普通の着せ替えをざっくり表してみました。

1.png


ご覧のように、元(キャラクターの体など)となるサーフェスがパーツ(服など)となるサーフェスを呼び出す関係ですね。

そう、体や服といくら呼び分けたところで、実際これらはどちらもサーフェスには違いないのです。

であれば、パーツとなるサーフェスにさらに着せ替えを定義することもできないでしょうか。

つまりこんな感じです。

2.png


実はSSPではこのような多重的なサーフェスの呼び出し関係が、着せ替えに限って(intervalがbindのアニメーションに限って)許されています。

実際に上記定義のままシェルとして動かしてみると…

3.png

このように、「着せ替えのパーツにさらに定義されている着せ替え」もきちんと表示に反映されます。

これを多重着せ替え定義といいます。

どんなことができるのか

さて、できるのはわかったが実際これがどういう場面で役立つの? という疑問にこたえるべく、続いていくつかの例をあげてみたいと思います。

特定の着せ替えがONのときのみ有効な着せ替え

例えばキャラクターが「服A」「服B」の2種類の着せ替えを持っているとします。

そして、「服A」の時だけ「飾りA」、「服B」の時だけ「飾りB」が表示できるようにしたいとしましょう。

言い換えると「服B」のときに「飾りA」(「服A」のときに「飾りB」)は表示したくない、ということですね。

4.png


多重着せ替え定義なら、これが可能です。

「服A」や「服B」を着る身体サーフェスではなくて、「服A」のパーツサーフェスに対して「飾りA」を多重的に定義してしまえば、当然「服A」が表示されていない場合には「飾りA」は表示されなくなる、という理屈です。

5.png

上図のように定義しても、着せ替えメニュー自体から適応外の着せ替えを隠すことはできませんが、例えば「服A」が選ばれているときに「飾りB」が選ばれたとしても、シェルの表示上は変化が起きなくなります。

着せ替えを反映したアニメーション

すこし特殊な例がこちらです。

普通のアニメーションを着せ替えと同時にやろうとすると、なかなかうまくいかないことが多いです。

アニメーションで動く部位が着せ替えによって変化のある部位だと、着せ替えによってアニメーションが影響を受けてしまうからです。

6.png

上図は腕を上下に振るアニメーションの各コマを表していますが、着せ替えによって動く部分(この場合は袖)が変化するため、単純にアニメーションを定義しようとしてもできません

ここでピンとくるかもしれません。そう、アニメーションのコマもそれぞれサーフェスなわけですから、そのサーフェス一つ一つに多重着せ替え定義ができます。

つまり、着せ替えによって表示の変わるコマを指定できる=着せ替えを反映したアニメーションを設定することが可能になるのです。

7.png

さっき多重定義は着せ替え(intervalがbindのアニメーション)に限って有効だとか言ってなかったか、と思うかもしれませんが、それは多重的に呼び出される側の話であって、呼ぶ側が(多重的でない)アニメーションのコマのサーフェスである分には動作するようです。

ポーズ差分用に表示位置だけ異なる着せ替え定義をする場合の記述の省力化

言葉で聞くとちょっとわかりにくいかもしれませんが、以下の図を見てください

8.png

上記のように立っているポーズと屈んでいるポーズがあるとして、帽子を色々着せ替えできるシェルを考えます。

普通ポーズ差分があると、着せ替えも各ポーズ用に素材を作り直して定義もし直して、と大変なのですが、幸運にもこのケースだと頭の向きが全く同じなので帽子の向きも変わりません。

つまり「帽子の画像素材自体はどっちも同じでいいけど、合成位置だけ変える必要がある」という状況ですね。

しかしそれにもかかわらず、普通はポーズの数だけ同じような帽子の着せ替え定義をずらっと並べなければなりません。

9.png

ここで多重着せ替え定義を使ってもう一工夫してみましょう。

帽子のHUBサーフェスとでもよべるものを一つ用意し、ここに基本的な帽子の着せ替え定義を一セットまとめるのです。

10.png

そして、各身体サーフェスでは直接帽子の着せ替えを定義せずに、この帽子HUBサーフェスのみを着せ替えとして定義します。

このときポイントになるのは、着せ替えのパーツの設定(pattern定義)でオフセットがそれぞれ指定できるということです。

したがって以下のようにそれぞれ別の位置指定をすれば、それぞれ適切な位置に着せ替えが表示されます。

11.png


着せ替え数が多ければ多いほど、また表示位置だけ変更すればいいポーズ差分が増えるほど、効果を発揮するでしょう。

補足

ところでこのHUBサーフェスを使う方法だと、HUBサーフェスが着せ替えOFFの場合、HUBサーフェスで定義されているすべての着せ替えが表示されなくなってしまいますね。

どうせHUBサーフェスそのものはONでもOFFでも見えない透明な存在なので、常にONだと都合がいいでしょう。

というわけで、descript.txtのように以下のような記述を追加しておきましょう。

sakura.bindgroup100.default,1
sakura.bindoption1.group,帽子HUB,mustselect

それぞれの記述の詳細はUKADOCへ!

なお当然ながらHUBサーフェス自体はメニューに表示しないようにします。ユーザさんが弄る意味はなく、不具合の原因にしかなりません。

特定の着せ替えをメニューに表示しない設定については「着せ替えをメニューで非表示にする」を参照してください。

ということなので、すべての着せ替えをメニューに自動表示するmenu,autoとは相性が悪いですね…

難点

  • 普通の着せ替え定義と区別がつかないので、surfaces.txtを一見しただけではパーツ呼び出し関係の構造が分かりにくくなりやすい
  • アニメーションの種類が増えがちなので、アニメーションIDの割り振りに少し苦労するかもしれない
  • 当然ながらSSP以外のベースウェアでは正しく表示されない

まとめ

名前だけ聞くと難しそうですが、わかってみればそれほど複雑な話ではありません。

便利というよりも、特定のことをしたい時に「これしか方法がない!」ということがあるように思います。

シェル周りで少し複雑なことをやりたい方は、頭の片隅に置いておくといいんじゃないでしょうか。


このページへのコメント

このページに関係する内容

Tag: シェル 着せ替え surfaces.txt アニメーション