Home - koturn/LilKustomShaders GitHub Wiki
簡単な説明書
lilToonカスタムシェーダー一覧
シェーダー名 | 説明 |
---|---|
LilCrossFade | Texture2DArrayをメインテクスチャの代わりにクロスフェード表示させるシェーダー |
LilEmissionWave | オブジェクト座標,またはワールド座標空間でエミッションの波をスクロールするようにしたシェーダー |
LilHueShift | マスクで指定した領域の色相を時間経過で変化させることができるシェーダー |
LilOptimized | lilToonの本体処理で最適化できそうな箇所を最適化したものに置換したシェーダー.他のカスタムシェーダーはこのシェーダーを参照している. |
LilRefProbe | Reflection Probeをブレンドすることができるようにしたシェーダー |
LilTextOverray | poiyomiのText Overrayと同等の機能を提供するシェーダー.ワールド入室からの経過時間,フレームレート,ワールド座標だけではなく,AudioLinkから現在時間取得して表示することも可能 |
LilWireframe | エミッションによるワイヤフレームの各辺を時間経過によりバラバラに点滅表示させるシェーダー |
ダウンロード
リリースページを参照してください.
lilToonのカスタムシェーダーとは
lilToonは本体のシェーダーを変更することなく,処理を追加,または変更を行ったシェーダーを別シェーダーとして簡単に作成できるようになっています. これを活用して作成したのが本シェーダー群となります.
Unityプロジェクトへの導入手順
- 予め,lilToonをインポートしておく
- unitypackage版,VCC版のどちらでも問題ありません
- 対象のカスタムシェーダーのunitypackageをインポートする
本カスタムシェーダーはlilToon 1.5.0 を対象に作成・動作確認しております. 最新のバージョンまたは少し古いバージョンでも問題なく動作するとは思いますが,うまく動かない場合はlilToon本体のバージョン変更をご検討ください.
シェーダー適用手順
既に適用されているシェーダーがlilToonの場合
マテリアルを選択し,右クリックで表示されるコンテキストメニューから
koturn -> LilXXXXXXXX -> Convert material to custom shader
を左クリックで実行してください(LilXXXXXXXXはLilEmissionWaveやLilWireframeです).
UTS2の場合
lilMaterialConverterを用いてlilToonを適用した後,前述の手順でカスタムシェーダーに変更してください. (前述のツールはある程度よしなにUTS2の設定をlilToonに引き継ぐためのものです)
その他の場合
マテリアルのシェーダー欄のコンボボックスから
koturn/LilEmissionWave/lilToon
koturn/LilWireframe/lilToon
等の目的のカスタムシェーダーを選択してください.
カスタムシェーダーから元のlilToonに戻す
マテリアルを選択し,右クリックで表示されるコンテキストメニューから
koturn -> LilXXXXXXXX -> Convert material to original shader
を左クリックで実行してください.
右クリックメニューでのカスタムシェーダーからカスタムシェーダーへの変更はサポートしていないため,別のカスタムシェーダーに変更する場合は一度オリジナルのlilToonを経由する必要があります.
LilCrossFade
カスタム設定項目一覧
項目名 | プロパティ名 | 説明 |
---|---|---|
メインテクスチャ配列 | _MainTexArray |
Texture2DArrayを設定する |
テクスチャ数 | _NumTextures |
メインテクスチャ配列のテクスチャ数です |
1テクスチャの表示時間(秒) | _DisplayTime |
1テクスチャを表示する時間.クロスフェード時間は含まない. |
クロスフェード時間(秒) | _CrossFadeTime |
クロスフェードにかける時間 |
Texture2DArrayはこのカスタムシェーダーに付属のエディタ拡張にて作成できるようになっています.
LilEmissionWave
カスタム設定項目一覧
項目名 | プロパティ名 | 説明 |
---|---|---|
色 | _EmissionWaveColor |
エミッションの色 |
ノイズ振幅 | _EmissionWaveNoiseAmp |
ノイズの幅.0より大きい値にすると電流のようなギザギザの波になる |
波の速度 | _EmissionWaveSpeed |
波の速度.0で移動しなくなる |
初期位相 | _EmissionWaveInitPhase |
時間スケールが0のときの表示位置の調整に用いる |
係数 | _EmissionWaveParam |
波の幅の調整に用いる.値が大きいほど波が鋭くなる(幅が狭くなる). |
位置の最小値 | _EmissionPosMin |
波がどこから伝播するかの値.再生しながら調整するとよい |
位置の最大値 | _EmissionPosMax |
波がどこまで伝播するかの値.再生しながら調整するとよい |
位置計算空間 | _WavePosSpace |
波の移動がオブジェクト空間ベースかワールド空間ベースかの選択 |
波方向軸 | _WaveAxis |
波の移動方向がX, Y, Zのどの軸であるかを選択.自由軸を選択することも可能 |
波方向角度(度) | _WaveAxisAngles |
自由軸を選択した際の方向の調整 |
位置計算空間をオブジェクト空間ベースにした場合,オブジェクトの回転に追従して波の進行方向も変化します. 例えば,人型のアバターで頭から足にかけての波に設定しているのであれば,横にあおむけに寝転がっても頭から足にかけての波となります. 一方で,ワールド空間ベースであれば,波の進行はオブジェクトの回転に追従しません. 例えば,頭から足にかけての波であれば,横にあおむけに寝転がった場合,お腹から背中にむけての波となります.
ノイズ振幅は3Dモデルの頂点毎に適用しています. そのため,ポリゴン数が少ない3Dモデルに対しては折れ線が少ない波となり,電流感があまりないかもしれません.
時間スケールを負の値にすると,波の進行方向が逆になります. また,時間スケールを0にし,ノイズ振幅を0.25などの0より大きい値を設定すると,定位置でビリビリするエミッションとなります.
係数は単純な説明は上記の表の通りです. もう少し詳しく説明すると,波の正体は大雑把には下記の通りです.
$$ \left( \dfrac{1}{2} \cos af(t)\pi + \dfrac{1}{2} \right)^b $$
$f(t)$ がワールド入室してからの経過時間,位置の最小値・最大値から計算された値であり, $a$ と $b$ が設定項目の係数に当たります. $a$ は波そのものを拡げる・狭めるイメージ, $b$ は波の始点と終点を保ったまま波の勾配を急にする・緩やかにするイメージです.
設定例
下記の画像はそれぞれ最初に示したアニメーションGIF画像の設定です.
LilHueShift
カスタム設定項目一覧
項目名 | プロパティ名 | 説明 |
---|---|---|
マスク | _HsMask |
色相変化させる領域のマスク |
時間スケール | _HsSpeed |
色相変化速度 |
マスクについて
マスクテクスチャは基本的に色相変化してほしい部分は白(RGB = (255, 255, 255)),変化してほしくない部分は黒(RGB = (0, 0, 0))にしてください.
実装詳細としては,マスクテクスチャはRチャンネルのみ参照しています. そのため,黒と赤のテクスチャにしても問題ありません.
また,色相の変化度合いは下記の計算で算出されます. (Rと色相値は0.0~1.0の値に正規化されています.色相の変化度合い1.0は0.0と同じ,すなわち変化なしで,1.5は0.5と等しくなります)
$$ \text{色相の変化度合い} = \text{マスクテクスチャのRの値} \times \text{時間スケール} \times \text{(ワールドに入室してからの経過時間)} $$
そのため,マスクテクスチャ内でRの濃度を異なるものにすることにより,ピクセル毎に異なる色相変化速度になります.
LilOptimized
カスタム設定項目一覧
なし
LilRefProbe
カスタム設定項目一覧
なし
項目名 | プロパティ名 | 説明 |
---|---|---|
マスク | _RefProbeMask |
適用する範囲のマスク |
ブレンド率 | _RefProbeBlendCoeff |
Reflection Probeをブレンドする割合 |
LilTextOverray
共通カスタム設定項目一覧
項目名 | プロパティ名 | 説明 |
---|---|---|
スプライトシート | _SpriteTex |
表示する数字のフォントになるテクスチャ |
経過時間設定項目一覧
項目名 | プロパティ名 | 説明 |
---|---|---|
色 | _ElapsedTimeColor |
表示する数字の色 |
オフセット | _ElapsedTimeOffset |
表示位置 |
スケール | _ElapsedTimeScale |
表示サイズ |
回転角 | _ElapsedTimeRotAngle |
表示回転角 |
数字個数 | _ElapsedTimeDisplayLength |
表示桁数 |
アラインメント | _ElapsedTimeAlign |
右寄せか左寄せか0埋めかを選択可能 |
オーディオリンク現在時刻設定項目一覧
項目名 | プロパティ名 | 説明 |
---|---|---|
色 | _ALTimeOfDayColor |
表示する数字の色 |
オフセット | _ALTimeOfDayOffset |
表示位置 |
スケール | _ALTimeOfDayScale |
表示サイズ |
回転角 | _ALTimeOfDayRotAngle |
表示回転角 |
数字個数 | _ALTimeOfDayDisplayLength |
表示桁数 |
アラインメント | _ALTimeOfDayAlign |
右寄せか左寄せか0埋めかを選択可能 |
時間種別 | _ALTimeOfDayKind |
ローカル時間(ユーザー各々が実行しているPCの現地時刻)かUTCかを選択可能 |
UTC非対応時のローカル時間へのフォールバック | _EnableALTimeOfDayUtcFallback |
ワールドに組み込まれているAudioLinkが古く,UTCが利用できない場合にローカル時間を表示するようにするかどうか. |
ローカル時間オフセット秒数 | _ALTimeOfDayLocalTimeOffsetSeconds |
ローカル時間に加味するオフセット秒数.通常は0でよい. |
UTCオフセット秒数 | _ALTimeOfDayUtcOffsetSeconds |
UTCに加味するオフセット秒数.日本在住で日本時間にしたいなら32400を設定. |
※オーディオリンクが組み込まれていないワールドではいかなる設定をしても非表示になります.
経過時間設定項目一覧
項目名 | プロパティ名 | 説明 |
---|---|---|
色 | _FramerateColor |
表示する数字の色 |
オフセット | _FramerateOffset |
表示位置 |
スケール | _FramerateScale |
表示サイズ |
回転角 | _FramerateRotAngle |
表示回転角 |
数字個数 | _FramerateDisplayLength |
表示桁数 |
アラインメント | _FramerateAlign |
右寄せか左寄せか0埋めかを選択可能 |
ワールド座標設定項目一覧
項目名 | プロパティ名 | 説明 |
---|---|---|
X座標色 | _WorldPosColorX |
X座標の数字の色 |
Y座標色 | _WorldPosColorY |
Y座標の数字の色 |
Z座標色 | _WorldPosColorZ |
Z座標の数字の色 |
オフセット | _WorldPosOffset |
表示位置 |
スケール | _WorldPosScale |
表示サイズ |
回転角 | _WorldPosRotAngle |
表示回転角 |
数字個数 | _WorldPosDisplayLength |
表示桁数 |
アラインメント | _WorldPosAlign |
右寄せか左寄せか0埋めかを選択可能 |
オフセット,スケール,回転角はUV座標(0.5, 0.5)を中心とした下記のアフィン変換後のUV座標に対して,目的の数字を描画することを意味します.
$$ \begin{pmatrix} u' \ v' \ 1 \end{pmatrix} = \begin{pmatrix} 1 & 0 & t_x \ 0 & 1 & t_y \ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} \cos \theta & -\sin \theta & 0 \ \sin \theta & \cos \theta & 0 \ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} s_x & 0 & 0 \ 0 & s_y & 0 \ 0 & 0 & 1 \end{pmatrix} \left( \begin{pmatrix} u \ v \ 1 \end{pmatrix} - \begin{pmatrix} \frac{1}{2} \ \frac{1}{2} \ 0 \end{pmatrix} \right) + \begin{pmatrix} \frac{1}{2} \ \frac{1}{2} \ 0 \end{pmatrix} $$
変数 | 説明 |
---|---|
$t_x$ | オフセットのX成分 |
$t_y$ | オフセットのY成分 |
$s_x$ | スケールのX成分 |
$s_y$ | スケールのY成分 |
$\theta$ | 回転角 |
LilWireframe
カスタム設定項目一覧
項目名 | プロパティ名 | 説明 |
---|---|---|
幅 | _WireframeWidth |
ワイヤフレームの幅(割合).割合なので0.0で非表示,1.0で完全に覆いつくす形になる. |
色 / マスク | _WireframeMaskAndColor |
ワイヤフレームの色とマスク.マスクで黒となっている領域はワイワフレームは描画されない. |
色相のランダム化 | _WireframeRandomizeColor |
チェックを付けるとワイヤフレームの辺ごとに色相がバラバラになる. |
アニメーション周期(秒) | _WireframeCycleTime |
アニメーションの周期. |
発光減衰時間(秒) | _WireframeDecayTime |
1つのワイヤフレーム辺が発光してから消失するまでにかかる時間.Infinityを指定すると表示されたままになる. |
1つのワイヤフレーム辺が発光するのは1アニメーション周期につき1回のみです. そのため,アニメーション周期(秒)はワイヤフレームの表示密度に関係するともいえます. 適用対象の3Dモデルのポリゴン数が多いなら長めの周期,短いなら短めの周期にするとよいでしょう.