Appearance
第04回 半透明表現と UV アニメーション
前回: 第03回 テクスチャーサンプリングと UV / 次回: 第05回 TextMeshPro と SDF
今回の授業内容
- 半透明を使うためのGraph設定を理解する
AlphaとAlpha Clipの違いを比較する- テクスチャーとマスクから透明度を作る
Timeを使ってUVをスクロールする- フリップブックによるコマ送りを実装する
- 速度をマテリアルから調整できるようにする
Alphaを使った半透明表現
色と透明度を出力する
半透明の描画を行うシェーダーを作るには最終的な色だけでなく透明度も出力する必要があります
Shader Graph では Alpha へ値を接続することでピクセルごとの透明度を指定できます
ただしマテリアルや Graph の設定が不透明のままだと Alpha の値を変えても透明にはなりません
値の計算と描画設定の両方が必要です
Surface TypeをTransparentにする
- Shader Graph を開く
Graph Inspectorを表示するGraph Settingsを確認するSurface TypeをTransparentにする- 必要に応じて
Blending Modeを選ぶ
- 半透明の見え方は Graph 側だけでなくマテリアル側の設定にも影響されます
0から1で透明度を表すAlpha


Alpha = 1 は完全に不透明です
Alpha = 0 は完全に透明です
0 と 1 の間の値を使うと背景が透けて見える半透明になります
RGBとAlphaを持つテクスチャー


上: 色と Alpha を持つ PNG 下: Alpha チャンネルを白黒で表示出典: para, OpenGameArt.org, CC0
前回触れたように、PNGやTGAなどはRGBに加えて透明度を表すAlphaチャンネルを持てます
Shader Graph では Sample Texture 2D から RGB と A を別々に取り出せます
RGB は色へ、A は Alpha へつなぐと画像の透明部分をシェーダーに反映できます
しきい値で切り抜くAlpha Clip



半透明, 半透明 + Alpha Clip, Alpha Clip の例出典: para, OpenGameArt.org, CC0
Alpha Clip はアルファがしきい値未満の部分を描画しないようにする設定です
葉っぱやフェンスのように、 形をくっきり切り抜きたい表現に向いています
影を落とす範囲をはっきりさせられる、 無駄な描画を減らせるなどのメリットがありますが、表示品質に影響があります
色と透明度を別画像で扱う

別の画像をAlphaとして適用している例白黒画像の R 成分をAlphaとして使っているが問題なくマスクとして機能している
PNG や TGA などの画像フォーマットでは RGB に加えて透明度を表す A を持てます
これらの画像形式は便利ですが、 シェーダーで Alpha を使う要件ではありません
シェーダーでは別画像や計算式として用意した Alpha を扱うことも可能です
UVアニメーション
時間でテクスチャーを読む場所をずらす
テクスチャーそのものを動かすのではなく UV の読み取り位置を時間でずらします
Offset に時間変化を加えることで画像が流れているように見えます
炎、煙、雲、水、魔法の流れなど連続的な変化を作るときに使います
Timeノードで経過時間を使う

Time ノードはシェーダー内で時間の値を使うためのノードです
例えば時間をそのまま UV に足すと一定方向へスクロールします
速度や方向を調整したい場合は Time に Float の係数を掛けてから Offset に入れます
外部コードなしでアニメーションを作れる非常に便利で強力なノードです
時間をUVに加えるスクロール

Timeに係数を掛けて適用している例横方向にだけスクロールさせるためにX成分だけを使用
text
UV = 元のUV + 時間 * スクロール速度
Texture Color = Sample Texture 2D(Texture, UV)
Base Color = Texture Color.rgb
Alpha = Texture Color.a実際の Shader Graph では UV、Time、Multiply、Add、 Sample Texture 2D などの各ノードをつなぎます
フリップブックアニメーション
1枚のテクスチャーに複数コマを並べる

出典: highwizard, OpenGameArt.org, CC0
フリップブックはいわゆるパラパラ漫画の意味 1枚のテクスチャーに複数コマを並べたものです
シェーダーでは時間に応じて読み取るコマを切り替えます
煙、炎、爆発のような形が変わる表現でよく使われます
UV スクロールが連続的に読む場所をずらす表現フリップブックは読む絵を切り替える表現です
全体UVをコマ単位のUVに変換する

Flipbook ノードの適用例
例えば横 5、縦 5 に並んだテクスチャーなら 1コマは 1 / 5 の幅と 1 / 5 の高さになります
現在のフレーム番号から読むコマの行と列を計算します
元の UV を 1コマ分に縮小し読みたいコマの位置へオフセットします
専用のノードがありますので通常はそちらを使いますが内部で上記の計算が行われています
コマ番号から読む範囲を決める
text
columns = 横のコマ数
rows = 縦のコマ数
frame = floor(Time * fps) % (columns * rows)
cellX = frame % columns
cellY = floor(frame / columns)
flipbookUV = (UV + float2(cellX, cellY)) / float2(columns, rows)実際の Shader Graph では専用ノードや Floor、Modulo、Divide などを使って組み立てます
UVアニメーションを調整する
X方向とY方向の速度を分ける
Vector2 プロパティでスクロール速度を持たせると横方向と縦方向の速度を分けられます
(1, 0) なら右方向へ流れます
(0, 1) なら上方向へ流れます
(0.2, -0.5) のようにすれば斜め方向へ流せます
Tilingとスクロールを組み合わせる
Tilingは模様の密度を決めますOffsetは読み取り位置を決めます- 密度を変えたいときは
Tiling動かしたいときはOffsetを調整します - 同じテクスチャーでも密度と速度を変えるだけで炎、煙、水流のように印象を変えられます
パーティクルの見た目へ応用する
- エフェクト実習では Particle System で発生、寿命、速度、サイズを制御します
- シェーダー側では色、透明度、テクスチャーの流れ、コマ送り、マスクを制御します
- 火花やヒット表現では短い寿命と発光が重要です
- 煙や炎ではフリップブックで形の変化を作ることがあります
- 魔法表現では半透明、マスク、UV スクロールが重要になります
実習:半透明で流れるテクスチャーを作る
ここまでに確認したAlphaとUVアニメーションを組み合わせて実装します
実習1:半透明シェーダーを作る
URP Unlit Shader Graphを作成するSurface TypeをTransparentにするColorプロパティをBase Colorへ接続するFloatプロパティをAlphaへ接続する- マテリアルから透明度を変えて結果を確認する
実習2:テクスチャーのAlphaを使う
Texture2Dプロパティを追加するSample Texture 2Dで画像を読むRGBをBase Colorへ接続するAをAlphaへ接続する- 画像の透明部分が反映されるか確認する
実習3:UVスクロールを作る
UVノードを用意するTimeにスクロール速度を掛ける- 元の UV と時間変化を
Addする - 結果を
Sample Texture 2DのUVへ接続する - 保存してマテリアル上で動きを確認する
実習4:スクロール速度を調整できるようにする
Vector2のScroll Speedプロパティを追加するTime * Scroll Speedを UV に足す(0.2, 0)、(0, 0.5)、(-0.3, 0.1)を試す- 方向と速度がどう変わるか説明できるようにする
実習5:フリップブック表現を作る
- 横と縦にコマを並べたテクスチャーを用意する
Columns、Rows、FPSのプロパティを追加するTime * FPSから現在のフレーム番号を作る- フレーム番号から読むコマの位置を計算する
- UV を 1コマ分に縮小し、対象コマへオフセットする
授業内課題:Timeノードでアニメーションを作る
テクスチャーやマスクの透明度を時間で変化させ、用途を説明できるシェーダーにします
完成条件
- テクスチャーやマスクを使って形や濃淡に透明度を持たせている
Timeを使って UV スクロール、 またはフリップブック再生を行っている- 速度や色、透明度などをマテリアル側から調整できる
- スクリーンショットまたは動画に加えて、 何のエフェクト素材として作ったかを一言で説明する
今回のまとめ
- 半透明表現では
Alphaの計算とSurface Typeなどの描画設定をあわせて扱います Alphaはやわらかい透明表現に向きAlpha Clipは形をはっきり切り抜く表現に向いていますTimeで UV をずらすとテクスチャーを流れるように表示できます- フリップブックでは読み取るコマを切り替えます
- この考え方はエフェクト制作でも有効です
使用画像と出典
- grass blades alpha card texture (side view) para, CC0, via OpenGameArt.org
https://opengameart.org/content/grass-blades-alpha-card-texture-side-view - Animated flame / Fire sprite Sheet highwizard, CC0, via OpenGameArt.org
https://opengameart.org/content/flame-fire-sprite-sheet