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とモーションのプレイバックをサポートします。
警告
Live2D はウェブプラットフォームをサポートしません。
Live2D を iOS にインストールするには静的ライブラリを iOS プロジェクトに手動でコピーしなければなりません。
Live2Dのインストール link
Live2D を使えるようになる前に、 Live2D website から Cubism SDK for Native をダウンロードしてインストールしなければいけません。年間一定以上の金額となるビジネスに使用するにはライセンスを購入する必要があることに注意してください。
一旦 Live2D をダウンロードしたら、 Ren'Py ランチャーからインストールできます。インストールには "preferences" の "Install libraries" をクリックしましょう。 CubismSdkForNative-5-r.1.zip
ファイルをインストールライブラリ画面の右下にあるボタンからアクセスできる Ren'Py SDK ディレクトリに置いてください。 "Install Live2D Cubism SDK for Native" をクリックしましょう。少したつと、 Live2D がインストールされます。
アニメーション定義 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, update_function=None, **properties) link
この Displayable は Live2D アニメーションを表示します。
- filename
Live2D アニメーションを定義する model3.json ファイルまたはアニメーションを含むディレクトリーです。後者の場合、そのディレクトリーの最後の要素に .model3.json を追加しします。
例えば "Resources/Hiyori" と "Resources/Hiyori/Hiyori.model3.json" は等しいです。
- zoom
None または適用されるズーム係数です。これは top と base に優先します。
- 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 をフィルターするために使用されます。属性は整列され、新しくリクエストされた属性ほど始めになります。このため、衝突する場合は最初の属性が勝つはずです。
- update_function
None または関数です。その関数は現在の motion と expression によってパラメーターが更新された後のアニメーションレンダリング時に呼び出されます。関数は2つの引数で呼び出されます。 :
Live2Dオブジェクト
秒数での出現時間軸
この関数によって、渡された Live2D オブジェクトの blend_parameter メソッドを使用して動的にパラメータを変更します。関数は次に呼び出されるまでの時間を秒数で返すか、 None を返して次のインタラクションの開始で呼び出されるようにします。 motion が実行中である間、この関数は displayable の再描画毎に呼び出されることに注意してください。
attribute_function と attribute_filter 間の違い前者は一般的に置き換えのために使用され、2つの属性があれば 1 つは別の 3 つ目によって置き換えられるはずです。後者はグループ中の1つのみが有効となるような属性間の衝突を解決するために使用されます。
filename のみが位置引数で、他のすべての引数はキーワード引数として指定されるべきです。
alias や fade, nonexclusive, seamless, default_fade, attribute_function, attribute_filter, update_function の値は filename を共有するすべての Live2D オブジェクト間で共有されるのでその filename を使用する最初の Live2D オブジェクトに一回のみ与えられるべきです
- blend_parameter(name, blend, value, weight=1.0) link
このメソッドはパラメーターの現在の値と value を合成します。これは update_function 外に副作用を持ちません。
- name
変更するパラメーター名ですの文字列。
- blend
"Add" や "Multiply", "Overwrite" のどれかです。使用する合成の種類になります。
- value
合成される値の浮動小数です。
- weight
0.0 から 1.0 までの浮動小数点で、新しい値が現在の値を変更するウェイトになります。
- blend_opacity(name, blend, value, weight=1.0) link
このメソッドは不透明度の現在の値と value を合成します。これは update_function 外に副作用を持ちません。
- name
このモデルに対して定義された変更するパラメーターの名前です。
- blend
"Add" や "Multiply", "Overwrite" のどれかです。使用する合成の種類になります。
- value
合成される不透明度の浮動小数です
- weight
0.0 から 1.0 までの浮動小数点で、新しい値が現在の値を変更するウェイトになります。
.model3.json からどのモーションと expression がロードされたかデバッグするのを助ける設定変数があります。
- define config.log_live2d_loading = False link
True なら、ロードされたパスと使用されたモーションと expression は log.txt に開始時に書き込まれます。
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)
ユーザーのハードウェアで Live2D を初期化できない可能性には気を付けて下さい。その場合一度 Live2D() を呼び出すとプロジェクト全体のロードが止まります。Web版で配布されたゲームの場合、同じ事が起こります。 Live2D なしでもあなたのゲームが動作するはずであったとしても例のようにラッパーや回避策を用意するべきです。
init python:
def MyLive2D(*args, fallback=Placeholder(text="no live2d"), **kwargs):
if renpy.has_live2d():
return Live2D(*args, **kwargs)
else:
return fallback
image kobayashi = MyLive2D(...)
image eileen moving = MyLive2D(..., fallback="eileen happy")
アニメーションの使用 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つの特別な属性 null
と still
があります。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つが起きます。 :
画像は top と base の間の領域が 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 返します。