Live2D Cubism link

Live2D Cubism はビジュアルノベルのキャラクター画像のような2D画像をアニメーション出来るようにするシステムです。これらの画像は例えば、虹彩と瞳孔のレイヤーや、白目のレイヤー、眉のレイヤーなどのように一連のレイヤーに描画されます。

Live2Dソフトウェアは制作者にメッシュとこれらの各レイヤーを関連付けさせ、パラメータの調整でどのようにメッシュが変形されるかを指定します(各メッシュの形は変形します)。Live2Dソフトウェアは時間と共にどのようにこれらのパラメーターが調整されるかを決定するモーションファイルと expressionを決定するexpressionファイルを作成します。

Ren'Py のLive2D組み込みではLive2Dが生成するファイルを所得してRen'Pyに表示されるアニメーションを定義するのに使用します。Ren'Pyはモーションとexpressionを処理してパラメータを決定します。これがCubism SDK for Nativeに渡されるとRen'Pyに表示するメッシュのリストが返されます。Ren'Pyはこれらのメッシュを描画してその結果が画面のLive2Dキャラクターとなります。

Ren'PyはCubism 3, 4形式のLive2Dアニメーションをサポートします。これはexpressionとモーションのプレイバックをサポートします。

警告

DLL がプラットフォームに提供されていないため、Live2D は x86_64 Android プラットフォームではサポートされません。つまり Android エミュレーターや ChromOS での実行には問題があります(訳注* スマフォのAndroidはx86_64ではなくArmなので問題ないと思われます)。

Live2D はウェブプラットフォームをサポートしません。

Live2D を iOS にインストールするには情的ライブラリを iOS プロジェクトに手動でコピーしなければなりません。

Live2Dのインストール link

Live2D を使えるようになる前に、 Live2D website から Cubism SDK for Native をダウンロードしてインストールしなければいけません。年間一定以上の金額となるビジネスに使用するにはライセンスを購入する必要があることに注意してください。

一旦 Live2D をダウンロードしたら、 Ren'Py ランチャーからインストールできます。インストールには "preferences" の "Install libraries" をクリックしましょう。 CubismSdkForNative-4-r.1.zip ファイルをインストールライブラリ画面の右下にあるボタンからアクセスできる Ren'Py SDK ディレクトリに置いてください。 "Install Live2D Cubism SDK for Native" をクリックしましょう。少したつと、 Live2D がインストールされます。

GL2の設定 link

Live2Dを使用するには、モデルベースのレンダリング設定が必要です。次の行を追加します。

define config.gl2 = True

これはゲームごとに設定してください。

アニメーション定義 link

Live2DアニメーションはLive2D Displayable と image ステートメントを使用して定義されます。 :

Live2D(filename, zoom=None, top=0.0, base=1.0, height=1.0, alias={}, loop=False, fade=None, seamless=None, attribute_function=None, attribute_filter=None, **properties) link

この Displayable は Live2D アニメーションを表示します。

filename

Live2D アニメーションを定義する model3.json ファイルまたはアニメーションを含むディレクトリーです。後者の場合、そのディレクトリーの最後の要素に .model3.json を追加しします。

例えば "Resources/Hiyori" と "Resources/Hiyori/Hiyori.model3.json" は等価です。

zoom

None または適用されるズーム係数です。これは topbase に優先します。

top

サイズ決定のための画像の上端です。これは画像の割合で、 0.0 が上端で、 1.0 が下端となります。

base

サイズ決定のための画像の下端です。これは画像の割合で、 0.0 が上端で、 1.0 が下端となります。これは yanchor のデフォルト値にもなります。

height

画像がスケーリングされる高さです。これはスクリーンの高さに対する割合です。

loop

最後のモーションがループされるべきならば True, そうでないなら False です。

alias

エイリアスに対するそのエイリアスが示すモーションまたはexpression の辞書です。

fade

モーションフェードが有効になるべきならば True, そうでないなら False です。 _live2d_fade の値を使用するなら None です。

nonexclusive

None または非排他的な exppression の名前のリストです。 expression はデフォルトでは排他的で、一度に1つのみが表示されます。ここにリストされていれば、排他的な expression 1つに加え非排他的な expression をいくつでも表示できます。

seamless

シームレスなループを使用するか決定します。シームレスループは 1 つのモーションのループ間のフェードを避けます。これが True ならシームレスループはいつも有効となり、 False ならいつも無効になります。もしくはシームレスループされるモーションの set です。

default_fade

デフォルトの motion と expression のフェード時間です。これはデフォルトでは Live2D ごとに 1.0 なので、期待しないフェードを起こします。 0.0 に設定すると明示的に要求されたときのみフェードは実行されます。

attribute_function

None または属性のタプルをとり、別の属性のタプルを返す関数です。これを使用して表示する属性を置き換えられます。返す属性は画像表示時には使用されません。ある expression に対して最大でも 1 つの属性が指定されるようにするべきです。

attribute_filter

None または属性のタプルをとり、別の属性のタプルを返す関数です。これはを通常互いに衝突する非排他的 expression をフィルターするために使用されます。属性は整列され、新しくリクエストされた属性ほど始めになります。このため、衝突する場合は最初の属性が勝つはずです。

attribute_functionattribute_filter 間の違い前者は一般的に置き換えのために使用され、2つの属性があれば 1 つは 3 つ目によって置き換えられるはずです。後者はグループ中の1つのみが有効となるような属性間の衝突を解決するために使用されます。

filename のみが位置引数で、他のすべての引数はキーワード引数として指定されるべきです。

aliasfade, nonexclusive, seamless, default_fade, attribute_function, attribute_filter の値は filename を共有するすべての Live2D オブジェクト間で共有されるので一回のみ供給されるべきです

Live2D Displayableはimage ステートメントで代入するべきです。

image hiyori = Live2D("Resources/Hiyori", base=.6)

属性も定義でき、これは様々なズームとスケーリングの係数にとても便利です。

image hiyori close = Live2D("Resources/Hiyori", base=.6)
image hiyori far = Live2D("Resources/Hiyori", base=.9)

アニメーションの使用 link

Live2D 画像を表示する通常の方法は show ステートメントの使用です。image ステートメントの一部として追加された属性を追加して expression とモーションの名前が使用出来ます。

show natori exp_00 mtn_01
show hiyori m10
show hiyori m10 m01

これらは Cubism SDKのサンプル名にあるデフォルトの名前を使用しています。モーションとexpressionの名前は Live2D ファイルから取られて小文字になり、もしそれらがmodel3.jsonファイルの名前(ディレクトリや拡張子を除く)で始まり、アダースコアが続くなら、接頭辞は除去されます(例えば "Hiyori_m01" はただの m01 になります)。

排他的expressionは最大で1つ、非排他的なexpressionとモーションはいくつでも使用可能です。1つ以上のモーションが指定されると、そのモーションが順に再生され、(*訳注 Live2D Displayableの引数) loop がTrue なら最後のモーションがループします。これによりアイドル時のアニメーションが続くモーションが再生出来るようになります。各モーションはそのモーションに複数のエイリアスが作成されない限り一度だけ現れます。

2つの特別な属性 nullstill があります。null 属性は非排他的な expression ファイルが適用されることを意味し、キャラクターのデフォルトの expression を指定します。 still モーションはすべてのモーションを停止します。

非排他的な expression は属性の否定で除去されるまで保持されます。

show hiyori -wave

スケーリング link

多くの Live2D モデルは少なくともモデルが使用する内部座標では高解像度で定義されます。これを調整するため、 Ren'Py には Live2D をスケールダウンする 2つの方法があります。

1つめは zoom 引数です。これは直接モデルの拡大係数を設定します。zoomが使用されると他のスケーリングパラメーターは無視されます。

もう一つは top, base, height 引数を使用します。最初の 2つは2つのラインを画像の上端と下端からの相対指定で指定します (Ren'Py の他の場所では、 0.0 は上端で、1.0 は下端です)。これらの引数が使用されると次の2つが起きます。 :

  • 画像は topbase の間の領域が height になるまでスケーリングされます。ここで height はスクリーンの割合です。

  • アンカーが調整され、 base はスクリーンの下端に配置されます。

Live2D アニメーションがどのようにスケーリングされるかを理解したら、まず base パラメータをアニメーションの正しい部分がスクリーンの下端に揃えられるまで調整します。つぎに :

  • 画像が大きすぎたら、 height を正しいサイズまで縮めます。

  • 画像が小さすぎたら、 top を大きくしてアニメーション上部の空き空間を縮めます。

Motion Fading link

Ren'Py の Live2D サポートにはモーションフェードを含みます。通常、 Ren'Py があるアニメーションから他のアニメーションに変化するとき、その変化は突然ものとなり、元のアニメーションが停止して次のものが開始します。トランジションをする場合は両方のアニメーションが同時に再生されます。

Live2D では異なるモデルをサポートしており、以前のアニメーションからスムーズに新しいものに繋がるようにパラメーターが補間されます。この考え方はある場所から別の場所へディゾルブすると言うよりキャラクターがその腕の位置を移動するようなものを考えてください。

モーションフェードは(*訳注 Live2D Displayableの) fade 引数で制御されます。 true なら、モーションフェードが使用され、 False なら突発的な変化になります。 None ならモーションフェードは _live2d_fade 変数によって制御されます。 :

_live2d_fade = True link

True なら、 Live2D アニメーションはモーションフェードを使用し、 False なら、アニメーションは突発的に変化します。

エイリアス link

alias パラメーターは自動的に定義されるモーションの固有名を制作者に指定させます。例えば、次のコードにより

image hiyori = Live2D("Resources/Hiyori", base=.6, aliases={"idle" : "m01"})

次が使用可能になります

show hiyori idle

これは次のコードの代替となります。

show hiyori m01

ループと画像の予測 link

Ren'Py の Live2D サポートは loop パラメーターが True なら最後のアニメーションをループ出来ます。アニメーションがループされるなら、Ren'Py が高価な画像の予測を処理するのに利用できる 0.2 秒以上のポーズの追加が重要です(これは画像予測とロードが他の時に終わっていれば不要です)。

Functions link

renpy.has_live2d() link

現在のプラットフォームで Live2d がサポートされていれば True を、そうでなければ False 返します。