前回に引き続きパーティクルの拡張をする。
今回は魔法陣の演出をやってみたい。
円盤メッシュ
まずパーティクル用メッシュに用意したのは矩形メッシュ。
今回はこれに加えて、円盤のメッシュを追加しようと思う。
ただ、今まで円盤のメッシュを扱ったことがない。
やりたいことは、テクスチャの画像が円に沿ってぐるっと張り付いて、UVのU方向のスクロールが回転、V方向のスクロールが中心に吸い込まれていく感じに動いてほしい。
円盤のUVの展開について色々調べたけど全然見つからなかった。
仕方がないので自分で考えた方法がこれ。
![]() |
| UV展開図 |
円の分割数を指定すると各頂点の位置を計算する。
x = cos( i ÷ 分割数 ✕ 2π ) ※ i は0~分割数までのループカウンタ
y = sin( i ÷ 分割数 ✕ 2π )
u = i ÷ 分割数
この図の場合、分割数3で中心に点0、UVは点0が一番上の中心。
そこから半径 (x,y) ✕ 0.5の位置に点2、(x,y) ✕ 約10%の位置に1の点を置く。
Vは点2が1、点1が上から約10%の位置。
後は分割数分ループする。
謎のエネルギー
とりあえずはメッシュにテクスチャを貼り付けて確認してみる。
![]() |
| セルラーノイズにフラクタルノイズを掛けたもの |
まずノイズテクスチャを用意する。
![]() |
| 円盤メッシュにテクスチャ展開 |
メッシュに貼り付けた結果。
なんかうまく行ってるっぽい。
![]() |
| マスクイメージ |
上記にこのマスクを掛けて
ひねりを加えるとこうなって
色をつけたらこうなる。
最後にUVスクロールでvのマイナス方向に動かすとこんな感じになった。
シェーダ
float2 uv = In.UV + float2( -0.7 * In.UV.y, 0.0 ) ; // ひねり Out.Col = Tex.Sample( Sampler, uv + float2( 0.0, -Param.Time )) ; // マイナス:外側 / プラス:内側 float mask = ( 1 - cos( In.UV.y*2*3.14159265 )) * 0.5 ; Out.Col = pow( Out.Col, 1.25 ) * mask ; Out.Col *= In.Col ; Out.Emissive = Out.Col ;
魔法陣
![]() |
| 魔法陣テクスチャ |
絵かきツールで適当に画像を用意して、背景をアルファ0になるようにして保存。
シェーダ
Out.Col = Tex.Sample( Sampler, In.UV + float2( Param.Time*-(( step( 0.5,In.UV.y ) + step( 0.5,In.UV.y ) - step( 0.75,In.UV.y ))*2-1)*0.1, 0.0f )) ; Out.Col *= float4( 0.25f, In.Col.gba ) ; Out.Emissive = Out.Col * 2 + In.Col.r * float4(1,1,1,1) ;
3つの階層に分かれているので、中心を時計回り、真ん中を反時計回りで高速、外側も反時計回りで低速で回すようにしてみた。
あと、出現時にEmissiveを最大にして光らせるようにした。
更新関数から受け取るrの値で制御している。
![]() |
| 魔法陣 |









0 件のコメント:
コメントを投稿