ゲームエフェクトデザイナーのブログ | A Real-Time VFX Artist's Blog

About Making Materials on UE, Making Tools with C#, etc

秀丸で便利な置換のメモ

秀丸での便利な置換についての備忘録。
ちなみに「秀丸の検索機能を強化するHmJre.dllについて」も併せてどうぞ。

空行を削除


改行しか無い行を削除して詰めてしまいたいときはこちら。

検索 ^¥n

置換

 

○○○を含まない行を削除


ある文字列○○○を含む行は残して、含まない行は削除してしまいたいときはこちら。

検索 ^(?!○○○).+¥n

置換

これを使えば、例えば大量にファイルのパスが並んだリストから、自分が欲しい情報の行だけピックアップするのが楽になります。

○○○を残してそれ以外の文字列を削除


「○○○△△××」という文章から○○○のみを残したい場合はこちら。

検索 ○○○¥f△△¥f××¥f

置換 ¥0


 随時、追記していきます。

秀丸の検索機能を強化するHmJre.dllについて

秀丸正規表現の置換や置換マクロを試していて「ネットで調べた正規表現の置換ができないなぁ」‥と思っていたら、単に付属のdllのバージョンが古かったというだけのことでした。。

という訳でdllについての備忘録。

今お使いの秀丸で使用されている「HmJre.dll」のバージョン確認や設定の方法、そのdllによる機能強化等についてはこちらの記事にまとまっています。

そして公式の配布先はこちら。 

秀まるおのホームページ(サイトー企画)−HmJre.dll

残念ながらdllのみの配布は現在は行われていないようなので、バージョンが古い場合は最新の秀丸本体をDLしてインストールするのが良いようです。

とりあえず秀丸の置換を手元で試してうまくいかない場合は確認してみることをおすすめします。

エクセルで同じ文字列が並んだ行の合計値を出す

エクセルの備忘録。

下図のようにA列に同じ文字列が隣接する場合に、その文字列ごとのB列の合計値を算出‥それを全ての行に対して手軽に行う方法について。
この例だと同じパスのアセットのファイルサイズを合計したい場面になります。

f:id:moko_03_25:20160823023951p:plain

つまりこうなればOKという訳です。

f:id:moko_03_25:20160823023952p:plain

もっと簡単な表でやってみます。
空欄のC1セルを選んで‥

=IF($A1=$A2, "",SUMIF($A:$A,$A1,$B:$B))

と入力します。こちらは我がエクセル師匠に教えてもらいました。
意味は‥
①(IF部分)もしセルA1がセルA2と同じ値なら今選択しているセルC1は空白にする
②(SUMIF部分)IFに該当しないならA列全体の範囲で値がA1と同じ行のB列を合計する

しかしA列の値がA B A B C Aみたいにバラバラだったらうまくいかないのでソートして固めておかないとダメですね。

さてまだ何も表示されません。

f:id:moko_03_25:20160823023945p:plain

セルをだーーっと最下行までコピーします。
するとA列で同じ文字列が続いた場合は最後の行のC列に合計値が入ります。
それ以外のセルが空白のままというのがミソです。

f:id:moko_03_25:20160823023946p:plain

一番頭に一行挿入してC列をフィルタリング。

f:id:moko_03_25:20160823023947p:plain

空白セルを非表示にします。

f:id:moko_03_25:20160823023948p:plain

これで同じ行をまとめてしまって、ついでにB列の合計値を出せました。

f:id:moko_03_25:20160823023949p:plain

結果を別のシートにでもコピー&ペースト。
いらなくなったB列を削除して完成です。

f:id:moko_03_25:20160823023950p:plain

以上になります。

同じ文字列が隣接する場合にその行を削除してしまいつつも直接B列に合計値を上書けたらもっと手間が省けるのですがVBAでやるしか無いんですかね。。
良い方法をご存じでしたらご教授くださいっ。

*翌日の追記*
検索でこちらのページが見つかり、そのままサックリできました!

Sub Sample()
    Dim c As Range
    Dim dic As Object
    Set dic = CreateObject("Scripting.Dictionary")
    With Sheets("Sheet1")
        For Each c In .Range("A1", .Range("A" & .Rows.Count).End(xlUp))
            dic(c.Value) = dic(c.Value) + Val(c.Offset(, 1).Value)
        Next
        .Columns("C:D").ClearContents
        .Range("C1").Resize(dic.Count).Value = WorksheetFunction.Transpose(dic.keys)
        .Range("D1").Resize(dic.Count).Value = WorksheetFunction.Transpose(dic.items)
    End With
 End Sub
(上記サイト様より引用させて頂いています)

ついでにA列B列を削除して値の表示形式をユーザー定義でMiB表記に変えて、一定以上の値は赤字に塗るとかも追記してしまうと良さそうですね。

秀丸の正規表現でパスとアセット名を分離

正規表現の備忘録です。

例えばエクセルでリストを作っている時に、下図のようにパスとアセット名が一緒になった状態からパスとアセット名を別セルに分離したい場面があったりします。

 f:id:moko_03_25:20160823013319p:plain

f:id:moko_03_25:20160823013320p:plain

しかしエクセルの標準機能でのやり方が分からないので、秀丸正規表現で分離することにしました(もっとお手軽な方法があればご教授ください)。

まずはリストを秀丸にコピペします。

f:id:moko_03_25:20160823013321p:plain

次に置換ダイアログを表示。
正規表現をONにして「検索」と「置換」に下図のように入力します。

f:id:moko_03_25:20160823013322p:plain

.+¥¥¥f¥f
¥0¥t¥1

検索欄の文字列の意味は‥
「1文字以上の文字列で末尾は¥」と「以降の文字列」にグループを分ける
文字列の後ろに¥fを追加するとグループ分けできます。
置換欄の文字列の意味は‥
「0番のグループの文字列」「水平タブ」「1番のグループの文字列」
‥です。
元のパスの¥による階層の区切りの数が行によってバラバラですが、検索欄の指定がたったこれだけでOKなのは秀丸正規表現には「最長の一致」という性質があるからのようです。

それから、文字列をグループに分けて置換に元の文字列を残しつつ形態を変える方法についてはこちらの記事でとても丁寧に解説されています。

‥という訳で置換を実行したら下図にようになりました。
全体を選択してコピーします。

f:id:moko_03_25:20160823013323p:plain

エクセルにペースト。はい、分離できました!

f:id:moko_03_25:20160823013324p:plain

もしエクセルにペーストした時にタブスペースを挟んで文字列が別セルに分かれない場合には、ホームタブの「区切り番号」で区切り文字を「タブ」にチェックを入れてからもう一度ペーストしてみてください。

以上になります。

あ、ちなみにセルA1とセルB1の文字列を結合するのは簡単です。
どこかのセルに「=A1&B1」のように入力すれば文字列が合体します。

Particle Randomノードについて

UE4.12からマテリアルにParticle Random Valueというノードが追加されました。
ついにパーティクルごとにランダムな値を与えるノードが‥!

‥という訳でテスト用に組んだマテリアルがこちら。
値を視覚化するためにDebugノードに繋いでいます。

f:id:moko_03_25:20160816004220p:plain

で、Cascadeでエミッターに適用して、数字が見易いようビルボードを横長にしたのがこちら。
あれ‥全く効いていない‥?

f:id:moko_03_25:20160816004221p:plain

‥そこでタイプデータをGPUに変えたものがこちら。
0~1の範囲内でランダムな値が入力されている!
GPUパーティクルで効くということが分かります。

f:id:moko_03_25:20160816004222p:plain

さてこのランダム、何に使うか迷うところですが‥
定番ということでUVの開始ランダムに使ってみます。

f:id:moko_03_25:20160816004223p:plain

はい、見事にランダムになりました!
GPUパーティクルではDynamicParameterが利用できませんが、これでUVの初期位置をランダムにすることができます。ただし上記の構成ではUとVに同じ値が入るのでランダムと言えど斜めにスライドするだけの結果になってしまいますが、もう一工夫加えればもうちょっと崩れた感じにできると思います。

f:id:moko_03_25:20160816004224p:plain

以上、参考になれば幸いです。

パーティクルのLODについて

UE4のエフェクトツール「Cascade」で設定できるパーティクルのLODについて解説します。

パーティクルのLODとは


パーティクルの各種設定をカメラからの距離に応じて変えることができる機能です。
Unreal Engine | パーティクル システムの詳細度 (LOD)

例えば、ゲーム中にエフェクトがカメラから遠い場合はパーティクルの発生数を少なくしたところで見た目の違いはよく分からないので、一定距離を超えると発生数が少なくなるように設定することで計算負荷を抑えるといったことができます。

発生数以外にも変更可能な設定は沢山あります。
各種モジュールのほとんどの項目を変えることができるのではないでしょうか。
このあたりが強力な部分だと思います。
距離に応じてマテリアルを変えることもでき、これには色々と可能性を感じます。

下図は試しにUE4.12でパーティクルにLODを設定してレベルに配置した状態です。

f:id:moko_03_25:20160731015032p:plain

・LOD Level 0 ‥色は黄 / 発生数は秒間20個 / 初期サイズは10 / 距離は0
・LOD Level 1 ‥色は青 / 発生数は秒間5個 / 初期サイズは20 / 距離は300
 ※カメラと3m離れるとLOD Level が1になります

設定する手順


新しくパーティクルシステム(エフェクトデータ)を作成すると、現在のLODレベルは0の状態です。
必要に応じてCascade上部に並んでいる「Add LOD」ボタンを押してLODレベルを増やして、LODレベルごとに各種モジュールの設定を変えて、LODレベルごとにカメラからの距離を指定し、レベルに配置してプレイしてチェックする流れになります。

ちなみにLODを切り替える距離の設定はParticle Systemの詳細の中にあります。
(エミッターが無い空間をクリックすると表示される設定項目です)

f:id:moko_03_25:20160731015034p:plain

 

設定時の注意点


◆作業コストの増大
 LODの設定を細々と行う場合は、その設定自体の作業コストはもちろんのこと、エフェクトの修正時に各LODレベルも修正する必要が出てくるので注意が必要です。
 上記理由から、そのエフェクトデータの見た目がFIXしてから処理負荷対策としてLODレベルを追加して手を入れるというのが良いかと思います。

◆設定しているか一目で分からない
 エフェクトデータを開いてLODレベルをクリックしてみないと分からないので、設定漏れや逆に設定していても気付かずにLOD 0だけ修正してしまうなどのミスが起こり易いと思います。
 一応コンテンツブラウザ上でポップアップ表示される情報に書かれてはいます。
 (デフォルトは0の表示でLODを1つ増やすと2になるので紛らわしいですが。。)

f:id:moko_03_25:20160803100226p:plain

◆基本的には発生時にのみ影響する項目だけ触る
 例えばLODレベルによってSize Scaleの値を変えた場合、エフェクトに近付いたり離れたりすると現在発生している全てのパーティクルのスケールが突然変わってしまうことになります。
 初期サイズの設定であるInitial Sizeの値を変えた場合は、新たに生まれるパーティクルに対してスケールが変わることになります。

◆メッシュパーティクルのメッシュに対しては効果が無い
 LODを設定したメッシュをパーティクルとして飛ばしてもLODの効果はありません。
 また、エミッターで指定しているメッシュをLODレベルごとに変えても切り替わりません。

◆LODでエミッターの表示ON/OFF切り替え時には設定が必要
 デフォルト設定では、一度エミッターがOFFになると近付いたり離れたりしてももうパーティクルは発生しません。しかしCascadeでエミッターのプロパティ「Disabled LODsKeep Emitter Alive」にチェックを入れると再度近付いた時にまた表示されるようになります。特に背景に設置するエフェクトで注意が必要です。

◆ゲームをプレイしてチェックする必要がある
 レベルに配置しただけでなくゲームをプレイしないとLODのチェックができません。
 この辺は不便かも。でも「どのカメラ?」問題があるので仕方ないですね。
 設定したLOD距離を視覚的に表示する機能も欲しいところ。

◆深度ではなくカメラからの距離で変わる
 下図をみると一目瞭然と思います。深度だと思って設定してはダメです。

f:id:moko_03_25:20160731015033p:plain

以上、参考になれば幸いです!


p.s.
新エフェクトエディタ「Niagara」でLODの設定をどう行うのか興味深いです。
ノードベースということで、条件に応じてパーティクルの設定内容を変えたりといったことはかなり自由度が高くなりそうですが、なるべく設定が楽で、かつ設定していることが一目瞭然な見た目になると良いなあと。

auからUQ mobileに乗り換えてみた <後篇>

auからUQ mobileに乗り換えた話の前回の続きです。

翌日に即時開通店舗のヨドバシカメラに足を運びました。
そこで選べた機種は3つ。

KC-01 スペックが低くてやめた方が良いという声が。
arrows M02 UQ mobile公式の中ではコストパフォーマンス良いらしい。
LG G3 Beat リリース1年以上経ち生産しておらずスペックもやや低いとのこと。

元々はクチコミからも「arrows M02」にしようと思ってましたが、店頭でいざ触ってみるとGUIのあまりにものモサモサ具合にくらっと眩暈がして瞬間的に候補から外れました。
(ちなみにamazonのレビューでは衝撃にすごく弱く落としたら終わり的なレビューが沢山)

どうしたものかと途方に暮れつつ隣にあった「LG G3 Beat」(白)を触ってみると、GUIはまだ許せる感じだったのでこちらにしようかなと思いきや、白はもう在庫が無いとのこと。
そこで黒を見せてもらったところ、ややグレーな上に金属のヘアライン仕上げみたいな横筋が入っていてとてもカッコ悪い‥。「これを2年以上使うかも知れないのか」と思うと迷いが生じ、高いお金を払ってでもiPhone6にした方が良いのではないかと思い始めるも「どうせカバーを着せるだろうしいいや」と決めました。

「ぴったりプラン」と「データ+音声通話プラン」について


端末を窓口で受け取って一括で支払い。
プランは「データ+音声通話プラン」1680円/月(税抜)

前日に店員さんに強くおすすめされた「ぴったりプラン」はググると「騙されてはいけない」といった記事が色々と出てきます。なぜかをまとめると‥

◆スマ得
・自分の場合はauからの乗り換えなので「スマ得(-1000円/月)」が効かない
・25ヶ月目で終了(その後は長期利用割引に移行する?その点は良いのかも)

◆マンスリー割
・端末代「実質0円」の相殺サービス
 でもその分最初から上乗せされているような基本料金の高さ

◆2つの大きな落とし穴
① 3大キャリア同様の2年縛り&自動更新
② 途中でプラン変更ができない プランを変えたい場合は解約して再契約が必要
 ここを見逃していると詐欺にあったような気持ちになるのでは‥

◆データ容量
MVNOの中では基本料金の高さの割りに1G/月しかない
・2Gに増やしたいなら「たっぷりオプション(+1000円/月)」が必要
・「W増量」キャンペーンをやっているが増量分は自分でチャージする手間がある
・「W増量」は25ヶ月目で終了。

◆通話無料付き
・自分の場合はほぼLINEで通話するので音声通話は居酒屋の予約に月10分程度
 なので「○○分の通話無料付き」サービスは不要
・音声通話は20円/30秒だけど「楽天でんわ」アプリを使えば10円/30秒

計算してみると端末代が0円になるのを差し引いても割高だったのでこちらのプランを選ぶ理由がほとんど見当たらなかったのでデータ+音声通話プランで契約。
端末保障380円/月には加入。

LG 3G Beatを購入してみて


◆充電ケーブルが付いてない
なのでmicroUSBを購入。1000円ほど。

◆ケースの種類が少ない?
iPhoneと比べたらダメかも知れませんが、ヨドバシカメラ梅田店に3種類のみしか置かれていなくてショッキングでした。1年以上前の端末なのでこれは仕方ないのかも。
Amazonで調べると沢山出てきました(実物を見て決めたいところですが‥)。

◆電源ボタンが背後にある
これがかなり不便で面倒臭い感じ。

◆MENUボタンが無い
twiccaをインストールして使おうと思った時にどうやってメニューを出すのかググらないと分からなかったのですが「タスクボタン長押し」が正解でした。わかるかーw
ボタン長押しについては説明書にも書いてませんでした。

◆サイズがデカい
他の端末もデカいが、片手でしっかり握り落とさないよう固定しながら文字を打つのが自分の手のサイズでは無理。iPhone5のサイズが丁度良かった。。
手の平に乗せながら文字を打つ感じになって、いつかフリック動作時に落っことしそうで怖い。歩きながら片手で文字を打つのは快適とはおせじにも言えない。
ポケットも膨らむし、世間ではコンパクトサイズは需要が少ないのか‥

iPhoneは偉大
見た目の高級感、触り心地、重さの手への伝わり具合、薄さ、ボタンの押しやすさ、ディズプレイの見えやすさ、GUIの美しさ、OSの設定の分かり易さ、各アプリの通知の表示がちゃんとしている等々、iPhoneは一級品だったのだなあと今更ながら痛感しました。今の端末を十分に使い倒したら、その時に発売されているSIMフリーのコンパクトサイズのiPhoneを買おうと誓うのでした。。

auからUQ mobileに乗り換えてみた <前篇>

auiPhone5を契約してまる3年が経ち、月々の通信費約7000円が手痛いので格安simへのり換えを検討。結果UQ mobileに乗り換えましたが、色々と一筋縄ではいかない感じだったのでその辺りメモっておきたいと思います。

auiPhoneをそのまま使いたい」が条件


まず最初に「iPhoneを継続して使いたい」というのがありました。
欲を言えばSIMフリーiPhone6を新しく買いたいところですが、8万前後の額をポンとはとても出せないので、今使用しているauで購入したiPhone5をそのまま使えるという条件で月額が格安になる道を探し始めました。

つまり端末は新規購入せずiPhone5で使用できるnanoSIMのみ購入する方針。
そのためにはau回線を使用するMVNO業者に限られます。

そこで候補に挙がったのが、UQ mobileとmineo(マイネオ)。

このどちらが良いかは、月々のデータ通信が3G以内に収まるなら、大手キャリア並みの速度が出ると評判UQ mobileが良さそうです。3Gを超えるのならmineoかなと。

mineoの場合は速度はUQに劣っても、家族で一緒に契約した時に月額が少し割り引かれたり、余ったデータ量を家族に分け与えたりできるメリットがあるようです。
そうでなくとも、契約者によって余った通信量の提供によって集められた貯蔵から月最大1Gを無料で分けてもらえる仕組みもあるそうで。

自分の場合はちょうど月3G程度の利用だったので、UQ Mobileに乗り換えたいと考えました。

iPhone5がそのまま使えるのか?


いくつかのブログを読み漁ったところ、UQ mobileのnanoSIMを購入すれば、auiPhone5をそのまま使えるといった記事があることはありました。

ちなみにUQ Mobile公式では動作保証していません。
また、下記のような注意事項も同時に書かれていました。

・4Gは利用できるがLTEが利用できないため4G圏外では通信できなくなる
テザリングができなくなる
iOSのバージョンによって利用不可能だったり通信が不安定になったりする

色々と不安の残る感じでしたが、思い切って試してみることに。

実際にUQ mobileからnanoSIMを購入してみたが‥


まずは今契約しているauに予約番号を発行してもらいます。有効期限は14日。

そしてUQ mobileの公式サイトから「nanoSIMの単体購入」と「データ+音声通信」プランを申し込みました。注意することと言えば身分証明書を写真に撮ってアップする必要があり(健康保険証なら裏面の手書きでの住所の記載もアップする)、あとはクレジットカードの番号の入力が必要なことくらいです。

数日後にnanoSIMが届き、早速iPhone5にSIMを差し替えてiOS9用のAPNを入れるも、通信は常に「au 1x」の表示のままで、電話もデータ通信も全くできない状態に。
大阪市内どこへ行っても、本体を何度再起動しても「au 1x」表示のままです。

iPhone本体単体では通信が一切使えない状態になってしまったので、ひとまずauの元のSIMに戻して通信可能な状態に戻したいと思ったのですが、回線切り替え手続きはまだ行われていないものの、auのAPNを削除してしまったためかSIMを戻してもデータ通信できない状態になってしまいました(通信状態の表記は3Gになっているのですが)。

急きょ、家の近くのUQ mbileの即時開通店舗であるビッグカメラのスマフォ相談カウンターへ行くも「契約やSIM周りのトラブルについてはUQ Mobileのサポートセンターに問い合わせるのが良い」ということで、窓口で携帯電話を借りてそちらでサポートに問い合わせしました。

この辺りは情報が少なく、動作保障されてないものに手を出すのは初心者の自分には合ってなかったようです。しかしおかげでiPhone5を使うことへの諦めがつきました。

nanoSIM単体購入から端末購入プランに変更


さて、サポートセンターに質問した内容は「MNP予約番号の転入でnanoSIMのみを購入したが、今から端末セットプランに変更することは可能か?」です。

それに対して得られた回答が下記の5つ。
・回線切り替え手続きがまだなのでnanoSIMの申し込みはキャンセルできる
 ※回線切り替え手続きが済んでいると解約料が発生してしまう
・キャンセルした場合、nanoSIMは返送する必要はないが破棄すること
・キャンセル手続き終了後にまた新たにUQ mobileで端末購入プランを申し込めばOK
・ただしMNPの予約番号は一度しか使えないので、まだ有効期限内であればauに電話してキャンセルしてもらい、再度MNP予約番号を発行してもらえば良い
・申し込みのキャンセル手続きはすぐに行うので大丈夫とは思うが、新たな申し込みは念のため明日以降が良い

という訳で、nanoSIM購入とプランの申し込みキャンセルをお願いしてホっとしつつ、その場で端末購入プランを新たに申し込むべく、ビッグカメラの窓口でそのままauに電話してMNP予約番号のキャンセルもお願いしました。
ただしここでMNP予約番号のキャンセルと再発行は同日に行えないということが判明。
予約番号の再発行は翌日に行うことに。
それまでビッグカメラの店員さんはかなり強引に「たっぷりプラン」をオススメしていて危うくそちらに決めそうになっていましたが、帰ってからじっくり調べると2年縛りの自動更新を始め色んな落とし穴がありました。1日の猶予ができてむしろ良かった感じです。その辺りについては後編で触れています。

という訳で


なんだかんだで端末購入セットのプランに仕切り直しです。

この日得られた教訓は色々ありましたが、プランの申し込みキャンセルができたことやMNP予約番号もキャンセルして再発行が可能なこと、またMNP予約番号は契約成立してから手数料が発生するため再発行でさらにお金がかかったりはしないことなどは知ることができて良かった感じです。

続きでは端末を買ってみてどうだったかといったあたりをメモっておきたいと思います。

続く

bitsummit 4th に行ってきました

京都の平安神宮そば、みやこめっせまで行って参りました。

初の参加でしたが、外人さん含めて人がいっぱいで活気があり、一風変わった面白そうなタイトルが沢山並んでいて非常に刺激的でした。

VRタイトルはどれも気になるものばかりでしたが1時間以上待ちな感じだったので傍から覗いた程度ですが、中でもQ-Gamesの「Dead Hungry」がとても良い味出してました。

VRタイトル以外では会場で遊んだもの・遊んでないものどちらも含め、出展されていて気になったタイトルをざっとメモっておきたいと思いますが、下記リンクの記事で取り上げられているものは省き気味で。

■OKHLOS

http://coffeepoweredmachine.com/okhlos/

カオスな感じがとてもイイ。
動画を観るだけでもすごく楽しげな雰囲気が伝わってきます。

■spirit

http://spirit-thegame.com/

こちらは音楽込みで雰囲気がとても良く印象的でした。

■Aya Blaze

http://www.ayablaze.com/

爽やかなで色鮮やかなグラフィックも好みですが、音楽も相まっての疾走感がとても良い。

■MOMODORA: 月下のレクイエム

http://playism.jp/game/430/momodora-gekka-no-requiem

音楽も良いし良い動きしています。こちら時間を見つけて遊びたい。

■Dot Matrix Hero

https://www.hanaji.com/dot-matrix-hero/

■TonTonPirates

https://www.facebook.com/Drukhigh/

■Bloodstained: Ritual of the Night

Bloodstained: Ritual of the Night by Koji Igarashi — Kickstarter

Bloodstained: Ritual of the Night - YouTube

■Dragon Fin Soup

http://dragonfinsoup.com/

■strange telephon

http://magniflop.com/

■ToU

RiG++ - 立命館大学情報理工学部プロジェクト団体ゲーム&CG部門 :: Home

立命館大学の学生作品。非常に良く出来ていて驚きました。

あと印象に残ったものはと言えば会場でも異彩を放っていた「ボコスカウォーズII」でしょうか。。
PS4/XboxOneで出るのか‥


行きは最寄駅からみやこめっせへ水路沿いに歩きつつ「京都はやっぱりいいなあ」とつくづく思いました。京都最高。

京都に住んでいたときから平安神宮近辺はあまり来ることはなかったですが、久々に来るとまた一段と綺麗になってますね。5年前(!)のSCRAPのイベント「京都迷宮パズル」以来かも。同じ社内の人間で連れだって参加し、3人1組の4チームで戦でゴールへの順位を競い合って楽しかった。ゴールが平安神宮だったんですよね。

この日最後はみやこめっせそばの蔦谷書店&スターバックスで友達と優雅にお茶して帰りましたとさ。

UE4.11からの新機能「Particle Cutout」を使用する方法

 UE4.11から追加された新機能「Particle Cutout」を設定する手順を解説します。

Particle Cutoutとは?


主にSubUVアニメーションを利用するパーティクルで、ビルボードで表示している四辺形ポリゴンをテクスチャの透明部分に合わせてカットしてくれる機能です。
下図はUE4.11リリースノートより引用。

f:id:moko_03_25:20160704020116j:plain

アニメーションさせない1枚絵のパーティクルでも利用可能ですし、マテリアル内でのテクスチャの参照はParticleSubUVノードじゃなくTextureSampleノードでも可能だったりもします(ただしSubUVのブレンド補間が利用できなくなります)。

手順の解説


① まずはテクスチャを作成します。
この時、Opacity用の絵柄を必ずアルファチャンネルに格納しておく必要があります。

f:id:moko_03_25:20160704010109p:plain

② テクスチャをUE4にインポートしてサムネイル上で右クリック「Create SubUV Animation」を選択。
※バージョンアップにより項目が無くなりました
 コンテンツブラウザで 新規追加>その他 の中に「Sub UV Animation」が入っています

f:id:moko_03_25:20160704010110p:plain

③ Sub UVAnimationデータが作成されるので開きます。

f:id:moko_03_25:20160704010111p:plain

「Sub UVTexture」で用意したテクスチャが指定されているのを確認。
「Sub Images Horizontal」と「Vertical」でUとVのパターン数を指定します。
 ここをどちらも1に指定すれば1枚絵の状態でカッティングできるという訳です。
「Bounding Mode」で4頂点でカットするか8頂点でカットするか選べます。4頂点で十分カバーできるシンプルな絵柄なら4頂点を選択した方が若干データサイズが減る感じでしょうか。
UE4.16時点ではAlpha Thresholdは 0 だと機能しない不具合があります
 0.003 など1/256を下回る小さい値を入れましょう

f:id:moko_03_25:20160704010112p:plain

④ マテリアルを作成してBlend ModeをTranslucent、ShadingをUnlitに変更。
そしてアルファ用のテクスチャをOpacityに接続します。
下図がRチャンネルから接続しているのはテクスチャの圧縮タイプをBC4に設定したからです。
そうするとアルファチャンネルはSub UVAnimationデータの作成のみに使用して、でも実際には1チャンネルのグレースケールテクスチャとして扱うことができます。RGBAの4チャンネルのフォーマットしか使えない訳ではありません。

f:id:moko_03_25:20160704010113p:plain

⑤ Particle Systemを作成してRequiredモジュールを選択して詳細パネルでマテリアルを設定。

f:id:moko_03_25:20160704010114p:plain
詳細パネル下の方にある「Sub UV」の項目で通常通りSubUVアニメの設定を行います。

f:id:moko_03_25:20160704010115p:plain

さらに下にスクロールすると「Particle Cutout」という項目があり、ここに作成済みのSub UVAnimationデータを指定します。

⑥ Subimage Indexモジュールを追加してSubUVアニメーションを設定します。

f:id:moko_03_25:20160704010116p:plain

今回のテクスチャは4パターンのアニメーションなので開始は0、終了は3に設定。

⑦ 3Dプレビュー上でAlt + 2を押してワイヤーフレーム表示に変えて確認します。
カッティングされて正方形で無くなっていればうまくいっています。

UE4.16時点では正常にカッティングされない不具合があります
 例えば絵柄の描かれている領域をカットしてしまう場合があります
 また、ループアニメの場合にうまくカット形状が繋がらない場合があります

f:id:moko_03_25:20160704010118p:plainf:id:moko_03_25:20160704012442p:plain

従来だとこちらのように正方形です。元の表示に戻す場合はAlit + 4を押します。

f:id:moko_03_25:20160704012441p:plain

 

SubUVアニメのLinear Blendについて


マテリアル内でテクスチャの参照にParticle SubUVノードを使用して、エミッターのSubUVの設定でブレンド補間を指定すれば、前後のパターンをクロスフェードするようにブレンドできますが、パーティクルカットアウトと併用するとどうなるのか試してみました。
マテリアルは下図のようにParticle SubUVを使用。

f:id:moko_03_25:20160704010119p:plain

エミッターのRequiredの詳細パネルでLinear Blend設定で表示。
するとEmissive Colorはブレンドされているのが分かりますが、いくつかのパーティクルの絵柄がスパっと切り取られたような見た目になってしまっています。
これはパターンが切り替わる途中では前のパターンの形状でカッティングされているからだと思います。

f:id:moko_03_25:20160704010120p:plain

カットアウト情報である頂点自体を今のパターン+次のパターンをカバーするサイズに膨らませたりでもしない限り回避できなさそう(そうするとカッティングのうまみが減る)に思うので、これは仕方ないことかも‥。
ひとまず現状の仕様ではParticle Cutoutを使用する場合はSubUVアニメのブレンドを諦めるということになりますが、ゆっくり再生させたい煙テクスチャなどではブレンドは重宝するためこれは結構ジレンマとなりそうです。

UE4.16では前後のパターンをカバーするサイズでカットしてくれるようになっています
 ただし先にも書いたように綺麗にカットされない不具合があります
 以上を踏まえるとまだパーティクルカットアウトは使用するのが厳しいのが現状です‥