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

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

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

勉強会でHDMIビデオキャプチャーとマイクを使用してみた

勉強会なんかでノートPCで(もちろんデスクトップPCの場合も)アプリケーションを操作しながら解説したり、パワーポイントを流しながら講演するような時に、デスクトップ画面と音声を同時に収録したかったりします。
それも、画面と音声を別撮りして動画編集ソフトでタイミングを合わせて合成する手間を省くためにマイクで拾った音声を動画に直接ミックスして欲しい。

そんな時の方法を2つメモ代わりに書いておきます。

デスクトップキャプチャーとマイクを使用する方法


ノートPCにデスクトップキャプチャーソフトをインストールし(ここではBandicamを使用してテストしてみました)、マイクから入力した音声をミックスする設定にします。

Bandicamの場合、設定方法は公式サイトにありました。

この方法で無事に音声入りでキャプチャーできました。

ただ、ノートPCにHDMIケーブルを挿して液晶ディスプレイに繋げると、Bandicamでキャプチャーした動画にマイク音声がミックスされなくなりました。このあたりはコントロールパネルのサウンド設定あたりで対処できるのですかね?

ただ、自分のノートPCを使う場合は良いのですが勉強会等で他の講演者のノートPCにキャプチャーソフトを入れてもらうという訳にはいかないですし、ノートPCのスペックが十分でないとUE4やらHoudiniやら動かしながら録画もするのはしんどいかも知れないので、こちらの方法は3DCG系の勉強会向きでは無いかも。

逆に言えば、社内の自席のデスクトップPCでチームメンバーに共有するような時に良いと思います。ちなみに試してませんが、Skypeフリーソフトの連携でデスクトップ画面を共有した状態で録画&録音することもできるようです(調べてないです)。

HDMIビデオキャプチャーを使う方法


もうひとつはノートPCからHDMI出力した映像をキャプチャーする方法です。
ビデオキャプチャ」で検索すると、ゲーム録画用途のものが色々と出てきます。
商品ラインナップが充実しているのには、Youtubeニコニコ動画でゲームプレイ映像をアップする文化の影響が大きそうです。

その中でもポピュラーなのはAVerMedia製品になるのでしょうか。
種類も多くどれを選べばいいのか最初は悩みました。
ですが4GamerのレビューAmazonの低評価レビューを見ていると自分の用途と合わない要素がどんどん明らかになってきて1つに絞ることができました。

4Gamerのレビューはこちら。

PCレスキャプチャデバイスの進化形「AVT-C285」レビュー。実況動画作成や簡易編集,スマホアプリまでを総チェックしてみた - 4Gamer.net

ゲーマー向けのビデオキャプチャデバイス「AVT-C875」レビュー(前編)。HDMIにも対応したPCレス録画ツールの実力を検証する - 4Gamer.net

約1万3000円で買えるHDMI入力のみのビデオキャプチャデバイス「ER130」がAVerMediaから - 4Gamer.net

遅延を気にせず「ながら録画」できて,「テレビなしの据え置きゲーム機ライフ」も実現。USB 3.0接続のビデオキャプチャデバイス「GC550」を試してみた - 4Gamer.net

AVerMediaのビデオキャプチャデバイス「GC550」再テストレポート。プレビュー表示には4〜5フレーム相当の遅延があった - 4Gamer.net

4Gamerの方では実用面での丁寧なレビューがとても参考になります。
それと、Amazonの低評価レビューについてもざっと目を通した方が良いですね。。
購入者側の見落としや落ち度も多分に含まれていると思うので鵜呑みにしないよう注意が必要ですが、レビュー見ずに購入してたらハマっていたであろう落とし穴についても知ることができました。

◆種類について

勉強会向けに探しているので当然、デスクトップPCに内蔵するキャプチャーボードではなく、自分のPCだけでなく他の人のPCからHDMI出力したものをキャプチャーできる製品が購入ターゲットになります。

その中でも大きく分けて下記のように分類ができます。

① 録画した動画をPCに出力するもの / 動画を本体に繋いだHDDやUSBメモリに保存するもの(PC不要とかアプライアンスタイプと謳われる製品)

HDMIの映像とマイク音声を同時に収録できるもの / できないもの

①に関しては、キャプチャー機器単体で動画を保存できるものの方が良いと思いました。
というのも理由はいくつかあり、PCとUSB接続して利用するタイプではUSB3.0のみ対応(2.0非対応)の製品が目立つので勉強会の現場で使えないことが発覚するケースがありそうというのが1つ。また、PC側の入力ポートが3.0でも相性問題で入力できないというレビューをよく見かけました。
また、この相性問題では最悪の場合HDDの全データの消失に繋がるケースもあるようです。自身のノートPCならともかく、他の講演者のノートPCでそんなことが起きたら大変ですし責任も取れません。
加えて、録画ソフトをインストールする必要があるので他の講演者のPCにインストールしてもらう訳にもいかないですし、PC接続タイプはどのみち対象外ですね。。

②に関しては、HDMIから入力した映像とマイクの3.5mmステレオミニプラグから入力した音声を同時に収録可能な製品は限られます。案外ニーズは少ないのかもですね。
注意しないといけないのは、HDMIコンポーネントケーブル両対応している製品で、コンポーネントケーブル接続時のみマイクの収録が可能なタイプ。
例えばこちらなんかは古い製品で価格も安くAmazonで購入できるものの、HDMI接続時はマイクの音声を合成できないようです。また、低評価レビューを見ると15分しか録画できないとか色々と書かれています。

◆その他の注意点

注意が必要なのは、ビデオキャプチャー機器全般で壊れやすい印象を受けるレビューが多かったことです。小さくて軽いものは雑に扱いがちかも知れませんが、精密機器だと思って慎重に扱った方が良いと思いました。電源ON/OFF周りも説明書の手順通りにした方が良さそう。あと自分の場合は持ち運ぶのでクッションが効く状態で収納することも気を付けたいところです。
加えて言えば、初期不良の場合は面倒がらずに返品・交換依頼することでしょうか。

◆最終的に選んだのは‥

最終的に選んだ製品はAVerMediaの「AVT-C285 ゲームレコーダー HD II」です。

AVT-C285|ゲームレコーダー|AVerMediaアバーメディア

自分の場合には、HDDを内蔵させる要素はいらない・YouTubeアップロード機能いらない・動画編集機能いらない・PCで録画する機能はいらない・本体がでかい‥といったあたりが不満なので、HDD内蔵スペースとLANケーブル入力を削ったもう少し安価でコンパクトな製品があったら嬉しかったのですが。。
コンパクトなものは前述の①②の理由で良いものがありませんでした。
同じAVerMediaの会議用の製品も気になりましたが3万円だったので諦めました。

勉強会用に持ち運ぶ前提なので、6000円程度の120GBのSSDヨドバシカメラで購入して内蔵させました。SSDにしたのは衝撃と熱それぞれの耐性の理由からです。内蔵できなくてコンパクトの方が良いと書いたばかりですが、内蔵しっぱなしだと準備の手間が減るのでこれはこれで良いですね!
AVT-C285へのSSD/HDDの取り付け・取り外しはとても簡単で、SSDを買うついでに2000円ほどのUSB接続のHDDケースを買ったので、他マシンへの動画のコピーも楽でした。

◆使用感

肝心のPC画面の録画&音声収録に関しては、今のところ2台のノートPCで試してどちらも特にトラブル無く綺麗に収録されていました。滑り出し好調です。長く使っていけるのかはまだ分かりませんが、ヨドバシカメラで買って延長保証を申し込むとより安心かも知れないですね。

1点気になったのは購入して自宅でテストした時に、30分程度の稼働の中で5分程度の録画を行っただけで本体がものすごく熱くなったことです。電源をOFFにして本体を触った時には、フタを開けてSSDを触るのは無理だなと思ったくらい熱かったので長時間使用できるのか不安になりました。ビデオキャプチャーに故障や動作不具合のレビューが多い印象なのもこのあたりが関係するのでしょうか。
ただ、勉強会当日では冷房の利いた会議室で3時間稼働してもそこまで熱くなっていなかったので少し安心しましたが、ちょっとモヤっとするものが残ります。
場合によっては保冷対策を練る必要があるのかも‥?

それから作成される動画についてですが、MP4エンコードされた状態になっていて画質は非常に綺麗です。初期設定の最高画質で解像度は1080p、約3時間の収録で10GB程度。120GBのSSDで勉強会10回分は撮り溜めできそうなので十分と思いました。

◆マイクについて

ちなみにマイクはaudio-technicaの無指向性の「AT9920」をAmazonで6000円ほどで購入。

audio-technica ステレオマイクロホン(バウンダリー) AT9920

audio-technica ステレオマイクロホン(バウンダリー) AT9920

 

マイクはほとんど時間をかけて調べてはいませんが、サイズが小さいこと、評価が高く20名くらいの会議でもしっかり録れる等のコメントがあったことからこちらに決めました。実際にファーストインプレッションとしてはそこそこ好感触です。スクール形式で16名ほど収容可能な会議室でマイクは前の方に置き、後ろの方に座っている人の声も聞き取れました。マイクは1000~2000円くらいのものもありますが、安い製品ものだと近距離の声しか拾わなかったりノイズが目立ったりするようです。

「Industory 2016」参加レポート

記事にするのがかなり遅くなってしまいましたが、2016年の3/6に開催されたクリエイティブサミット「Industory 2016」に参加してきました!

映像・CG・イラスト・音楽といった様々なジャンルでのエキスパートな方々による講演と、会場内のブースではスポンサーによる展示や著名な方々によるデモンストレーションが行われていました。

NukeXとMMD使った簡易的なマッチムーブ。Mariの基礎的な使い方。


lunaさんのご講演。
実はこちら寝坊して拝見することができませんでした。
しかし映像が上がっています!ありがたや。。

industory2016 NukeXとMMD使った簡易的なマッチムーブ。Mariの基礎的な使い方。 from industory on Vimeo.

非常にレアな内容の講演ですね‥!
「Industory」のみならず「関西AECGオフ」もそうなのですが、普段なかなかお目にかかれないツールの実演や、面白い切り口の講演が多くあり、そこが魅力的でもあると思います。

Unreal Engine 4でのリアルタイムセルルック3DCGアニメーションでの映像表現について


関西UE4界のプリンス、Alweiさんの講演です。
こちらも講演動画がアップされています!

industory2016 Unreal Engine 4でのリアルタイムセルルック3DCGアニメーションでの映像表現について from industory on Vimeo.

UE4のシーケンサーとレースミクのモデル&アニメーションを使い、セルルックかつ4K/30fpsのPVを作っていく流れの実演でした。
軽くメモっていたものを添えておきます。

昼のライティング、夜のライティングどちらにも対応している
セルルック動画 GTX960 4K 30fps
講演GeFource840
Matineeでカメラを設定 5つのカメラ
Sequencerを表示ShotsとCameraActorを追加
レンダリングして動画出力可能 Render Movie Setting > Chapchure Movie
簡単に映像を作ることができる
連番で出力もできる PNGとか

アウトプットしていきましょう
下田さんのブログにNPRの詳しく解説がある
おぎまふさんのブログも

ノイズ的トランジションを多用し楽曲とシンクロさせた映像制作の一例


村田裕次さんによるAE実演を挟んだMVのメイキング。
ビートマニアの映像やドラマのタイトルバックなどを手掛けられているそうです。
講演動画はこちら!

industory2016 ノイズ的トランジションを多用し楽曲とシンクロさせた映像制作の一例 from industory on Vimeo.

個人的に最も刺激を受けた講演で、AEのレイヤーの量がすごいことになっていました。
以下、メモったものです。

今回はMV「ココロの質量」のメイキング(かめりあ/TORO缶)
作業的な面に絞ってお話しする

まずは動画素材の作成
C4Dで制作 AEでも作れるが 映像素材がたくさん必要
カメラを10個くらい置いてパターンを稼いでいる
グロー トーンカーブでがっつり絞って重ねていく
トラックトランスフォーム作業を快適に使用
LightLinks Macでしか動かないプラグイン ライトリークを作ってくれる
Particlurで 1フレごとに変わるレンズ円環素材をたくさん配置
ActionEssencial 実写素材 金属が擦れている 火花が散る
Lucks トーンカーブ エッジソフト ビネットのっけている

エフェクトについて
エフェクトだけのコンポ
シェイプレイヤーでチェック柄 チェック用 ガイドレイヤーにしておく
エフェクトのテンプレート
控えめに作っておいて、必要に応じて複数重ねる 時間をずらして
感覚でばばーっとタイムラインに並べている
シェイプレイヤー
音が盛り上がる場所で白や、ノイジーな場所で青(信号なしの意味で)をフラッシュさせる
カレイダ(万華鏡)も
ローテーションでカーブをつけている
エフェクトを沢山のせる
いったんここでプリレンダ、VJソフトを使って動画に加える
キーボードにアサインしてエフェクトをかけて録画、AEに戻す
カットが変わるところにエフェクトを挟んで繋ぎを自然にできる
真っ白に飛ばしてからノイズが入り、切り替わる感じ

さいごに
こんな映像作っちゃダメです
合作 個人制作 ネットだけに公開
フラッシュ激しいので放映できないので 忘れてください
‥というのは冗談

Q エフェクトはどんなものがある?
A データブリッジがのっかっている
  映像が前後にぶれる ドクンドクンと脈打つような
  ブラー シェイプレイヤーを上からスライドさせて一瞬拡大して戻る
  オプティカルフレアのレンズテクスチャを使ったり
  コラップストランスフォームよく使う

Q 溶ける表現をどうやっているか
A ディスプレイスメントフィルタで同じマップを選ぶ
  垂直の項目でエクスプレッションを設定

Q イラストにエフェクトをよくかけるが元の絵が崩れるのが怖い
  どう境界をつけているか?
A 真っ白や真っ黒になってしまわないようには気をつけている
  白飛び・黒潰れにはしない

Q ディスプレイスメントを斜めにすることはできないのか?
A プリコンポして斜めにしてエフェクトかけて戻してやるしかないのでは

Q このプラグインは抑えておいたほうが良いというものは?
A 別段変わったプラグインは使ってない Looksはみんな使っていると思うし‥

イラストの描き終わり、からの仕上げ作業


ニリツさんによるSAI、Photoshopの実演を織り交ぜたイラストメイキング。
フットペダル等の愛用されている道具を持ち込まれての実演がとても興味深かったです。
講演動画はこちら!

industory2016 イラストの描き終わり、からの仕上げ作業 from industory on Vimeo.

以下、メモったものです。

アキバ系萌えイラストレータ
ライトノベルカバー カードイラスト 実用書のカバーなど
イラストを描き終わった後のエフェクトなどの作業について紹介
背景は時間があれば説明

・線画と塗りをなじませるための色調整
・空気間を出すためのライティング
・疑似的なピント、奥行き表現のグラデーションぼかし

使用デバイスについて
ペンタブレット
・PowerMate ブラシツールのサイズ調整 USBでつなげる
・フットペダルスイッチ キャンバスの拡大縮小

SAIとPhotoshopを使って解説

スピードを上げないとお仕事にならないので
見た人を世界観に没入させたい 集客に繋がる 目を引く 滞在時間を長くしてもらう
二次元に入り込みたいと思ってもらうため 三次元を疑似的に表現する
現実世界にあるかどうか

肌の影色(AO的な)の色を肌の色に近づけさせる
極力黒い線は無くしたい
やり過ぎると絵がぼける
光源方向からグラデーションで明るい色を付与 スクリーンで合成

各種色調整と光の調整
フィルタ 逆光でやっている 35mmが好き 色は白
そのままでは強いのでソフトライト、薄めて合成
ディフージョンをかける
レベル補正でブラックポイントを右に寄せてハイコントラストに
スクリーンで合成してぼかしガウスをかける
エフェクトは目に見えなくてよい バレない、気づかない程度が良いと思っている
ぼかし 遠近感(DOF)
反対側から青い反射光(環境光)
周辺減光を入れる 視線を真ん中に集めたいときに効果的 ちょっと強めにかける

グラデーションマップレイヤーを作って 紫~赤~黄色にしてソフトライトで影に合成
ある程度の影の統一感を出してくれる
ソシャゲの仕事だとこれで満足してくれるクライアントさんがいるので良いのかなと

Octane Renderの活用法とフォトリアルの考え方


朝倉涼さんのCinema4DとOctane Renderを使った文房具のCMメイキング。
動画はこちら!

industory2016 Octane Renderの活用法とフォトリアルの考え方 from industory on Vimeo.

以下、メモったものです。

株式会社アカリ CGディレクター
SeventhGraphics個人名義で活動 映像制作やVJなど
会社は広告案件や番組タイトルが多い

ドイツの文具メーカーSTAEDTLER(ステッドラー)
Cinema4Dもドイツ生まれ
イラストはokamaさん
使用ソフトはC4D 全カットオクタンレンダーを使用
AE イラレ Photoshop CrazyBump

◆Octane Renderの良いところ
GPUレンダラーなので一般のものよりはるかに速い
PBRを導入している
ロゴが読めないと修正が入る いくらい綺麗にライティングしてもダメ
リアルタイムに質感がチェックできるプレビューが役に立つ

◆C4D
押し出しした後に結合してピラミッド型の表面を作る
ローレット加工
定規で寸法図って再現
実物と見紛うために
PBRとスペキュラリフレクションについて
フィルムは油膜 ほとんど使わない
他にもGPUレンダラー色々
IRay
Arnord

モーションブラーやビネットは本物のカメラのシミュレートで再現

Octane Render無しで標準でやる場合について
オブジェクトでライトを作る
Mayaと比べてどうなのか? R7Dくらいの頃からC4D使っていた
一つ一つの工程がやりやすい 保存中に落ちない(Mayaをやめたのはそれが理由)
個人単位の制作は間違いなくこれ一つでできる
だけど大規模制作には向いてない

習得が楽 設定が少ない
GPUベースで速い 1フレ平均2分 一番長いところで1フレ10分
VRayは設定項目が多くて大変

欠点もある
グラボの性能いかんによっては落ちる
VRAMのメモリ量をオーバーすると絶対にレンダリングしてくれない

       *       *       *       *

‥という訳で非常にバラエティーに富んだ講演の数々でした。
来年も開催予定だそうで、今からとても楽しみです!

「多人数格闘アクションゲームにおけるAIの設計と実装」レポート

関西ゲーム勉強会 2016夏』に参加してきました!
300人規模の勉強会で驚きました。
年に2回ほど開催していて、この冬にも開催予定だそうです。

その中で、サイバーコネクトツーのシニアプログラマーである猪上哲郎さんの講演「多人数格闘アクションゲームにおけるAIの設計と実装」でメモしたものを記事にしておきたいと思います。

 

前置き


月に一度、社内のプログラマー内で講義を行っている
情報共有を行う試み
扱うテーマは様々で、言語仕様・グラフィック・ローカライズゲームエンジン・AIなど
今日は実際にプロジェクトで使ったAIの実装手法について取り上げる
うまくいった部分もある半面、犠牲にした部分もある

AI実装の背景


◆ジャンル
ジャンルは対戦3D アクションゲーム
敵味方が複数存在
ステージは立体的な構成
アイテムやギミックも配置

◆物量
50を超えるキャラ分のAIを実装 難易度を合わせるとx何倍となる
プロジェクトによっては100を超えることも珍しくない

キャラの性能をカテゴライズしそのカテゴリ分のAIを用意することで対応
例えば遠距離キャラ・近距離キャラなど分類
しかし性能がユニークなものが多く通用しそうになかった

◆AI実装人数
PGひとりという状態
他のものも担当するので専任ではない
50超x難易度

◆見積もり
まともにやるとこなせない量 ⇒ 工夫が必要!

◆PG以外のセクションと作業分担
プログラマで部品を作り、ゲームデザイナーに調整込みで組み立ててもらう
どういったツールにしようか

 

ツールのイメージ


◆どんなツールが必要か

① シンプルなものが必要
 スクリプトのように自由度が高いのは複雑なものも組めてしまうので除外した
 できるだけ簡単に扱えるものがいい

② 当時ノードベースのグラフィカルスクリプトが流行っていた
 ツール作成に時間がかかる 工数で折り合いがつかない
 スクリプト同様自由そう ‥という理由から却下

③ 昔のプロジェクトで「コンボテーブル」というものを使ったことがある
 近距離、中距離、遠距離に応じて行動をいくつか登録しておきランダムに選択
 しかしそれよりもゲームが複雑なので拡張が必要だった

◆拡張要望

① 距離以外の条件も扱えるようにしたい
 残体力、標的との間の障害物の有無なども行動の選択する際の条件にしたい
 より細かく行動ごとに実行条件を付けていきたい
 論理演算も使えるようにする

② 実行可能な行動が複数あったときに乱数以外の要素で偏りを入れたい
 キャラの個性にあった行動を選択させたい
 乱数だけだと同じものがずっと続く恐れがある もっと絶対的な偏りを入れたい
 行動に優先度を持たせておき、複数並んだ場合は優先度が高い法を必ず選ぶ

③ 状況が次々と変わる場合に変化に順応していく
 回復アイテムを取りに行く途中で敵を発見、攻撃的なキャラの場合は
 取りに行くのをやめて敵を攻撃してほしい
 何かを実行中に、より望ましい行動ができるようになったらそちらに繊維する
 望ましさの定義に「優先度」を使用する
 優先度が高いと割り込む

◆拡張要望まとめ

優先度の設定ができる条件付き行動テーブル

※ここで実際の表を表示しつつ説明

名前:コマンド1 優先度:1 ビヘイビア:パワーアップ 条件:パワーアップ可能
頻度:100 リキャスト:0
(‥というように各行動に6つの項目があり、いくつも行動が並ぶ)

補足
・優先度:高いものが上にいくようソート
・条件:行動を行うための条件
・頻度:複数の選択肢が出てきた場合にひとつを選ぶための指標
 (くじ引きのあたりの数)
・リキャスト:行動完了後しばらく行えなくなる時間 単位はフレーム

① 優先度が高く、かつ条件を満たしているものがあるものから実行する
② 一度実行したものはしばらくの間実行できなくなる(リキャスト)
③ 何かを実行中にに、より優先度が高い行動が行えるようになったらキャンセルする
④ 同じ優先度のものが複数候補に挙がった場合は頻度に従って選択する(頻度)

・優先度が高いほうから順に実行可能なものを探す
・同じ条件のものが複数ある場合、頻度に従ってどちらかを選ぶ
 コマンド5は頻度100、コマンド6は頻度80の場合‥
 計算式は 100/(100+80)*100=56%
 コマンド5が選ばれてパートナーに近づくという行動を実行
・キャンセルして割り込みができるのは優先度が高いものだけ
‥これを繰り返す

◆やりたいことを追加
とある条件を満たしたときに、行動内容を「がらっと」変えたい

例:体力が一定割合いかになった後は強烈な技を連発してくる ボスキャラなど
   ⇒ テーブルを複数所持できて、切り替えられるようにする
    (条件追加もできないことはなかったがやると複雑になるので)

例:体力2割以上はテーブルA 2割未満はテーブルB

プログラマーの実装


プログラマは何を実装したのか?

◆PGが作る部品

主に以下の5つ(量産対象は2つ)
① 行動(ビヘイビアクラス) 量産対象
② 条件(コンディションクラス)量産対象
③ 選択アルゴリズムセレクタ)コア
④ コントローラクラス
 体を動かすためのインターフェース
 ツールからは見えてこない部分
⑤ センサークラ
 AI内外の状態を監視し、更新する部分 ツールからは見えてこない部分

◆①行動

1選択肢につき1クラス

◆1選択肢につき1クラスを対応させる目的

・他の選択肢との依存性をなくすため
 どういった流れで行動が開始されても不都合なくつながるように

・行動をきれいに終了させるため
 投擲物を拾って投げる行動の場合、持ったまま行動を終了してしまうと
 投擲物を本来扱わない行動側で投擲物の後始末をしないといけなくなる
 終了時に使い切ってから終わる(キャンセルの場合も同様)

◆②条件

 1選択肢につき1クラス

◆③選択アルゴリズム

ルール通りのアルゴリズムを組むだけなので割愛

◆④コントローラークラス

体を動かすインターフェース
対戦キャラクターゲームの場合操作の方法は大きく二つ ゲームパッドとAI
二つの操作方法を別々の実装にすると片方はできるが片方はできなくなることがある

◆⑤センサークラ

AIの内部状態の更新と外部の把握を行うクラス
最も負荷になる部分なので「負荷対策」を行った
 ⇒ 情報の更新頻度を細かく調整できるようにしている
例えば自分の周りの壁の状況を確認 四方八方にレイを飛ばすのは負荷が高い
1フレ-ムに5個までというような制限をかけて、残りは別のフレームに分散する
負荷の分散をセンサークラスで担っていた

結果


作業分担をした結果

◆目標に対しての成果

 50超のAIを少ないPGでこなすという目標は達成
 五月雨式の量産が行えた
 ゲームデザイナーもすぐに使い方を理解してくれて実装、調整を行えた

◆良かったこと

行動、条件が細かくカプセルかされたことに伴い、不具合の追跡が簡単だった
未完成のキャラも完成している部分だけを先行して作業できた

◆うまくいかなかったこと行動の独立性が高く、複数の講道館のつながりが乏しかった

例:特定の行動を行った後に条件次第で追撃させたい
  行動履歴を条件下することで可能ではあったが、直前の行動を条件として
  続いてやってほしいことを優先度が高いところに配置するしかなく、
  テーブルの見た目的にどうリンクしているかが見えなかった
 ⇒ 解決案:
   行動の後に「サブテーブル」へジャンプ、一時的にそのテーブル内で行動させる
   おおもとのルールを変えることなく適応させられる

例:場同じ条件で複数の行動を登録したい
  条件を複製し、登録したい行動に張り付けていけば可能だったが
  内容を変更したくなった場合にすべてを修正する必要があった
  また、発動条件を持つものは「リキャストを共有」させたかった

まとめ


・作業分担して量産を行える 部具合も追跡しやすい

・タイトルに依存しないので別ジャンルのゲームにも応用が利く

・出来上がったAIの動きとしては反省点も多かった
 複数の行動間のつながりが弱かった
 後から出る要望や試行に対応しにくい

・ツールorプログラム?
 適材適所
 用途に合わせて使い分けるのが良い
 ボスはユニークな制御が多い
 例えば、印象的なボスはプログラムで作り、ザコはツールで量産など

最後に


弊社のAI実装は、各プロジェクト内の担当たちが試行錯誤して実装する形をとっており、研究・リサーチされた成果が各プロジェクトとに還元されるということはできていないので‥
このような機会に交流、勉強したい

 

Q&A


◆Q.ツール作成の工数は?

 A.ツール作成コストは1カ月くらい
  ツールプログラマに任せたので思ったより少ない工数

◆Q.AIの難易度に関して難易度別への対応は個別にテーブルを用意したのか

 A.そうなる
  1つの難易度ごとにファイルが分かれている 完全に別のテーブルで制御

「VR×ロボ×美少女! UE4におけるVR向けの絵作りと最適化」レポート

UNREAL FEST OSAKA 2016』のメモ公開2つめ。

ヒストリアさんによる、UE4で制作されたVRコンテンツ「アーガイルシフト」の開発事例。

はじめに


原龍さん エンジニア / TechResearch 元家庭用・スマフォ向けゲーム開発
原伸吾さん アーティスト / TA 元映像業界
ハラハラコンビ

◆アーガイルシフトについて

ダイバーシティ東京プラザ VR ZONE
ヒストリアは開発協力
アイネというキャラクターのナビゲーション
テストパイロットとして有人兵器ルシファーに搭乗
「サマーレッスン」の原田さん監修

バンダイナムコ
 クオリティコントロール、アウトゲーム、実機の揺れやサウンドアセットの作成

SOLA DIGITAL ARTS
 Matineeを使った全体的な演出を作成
 キャラクター、背景などのアセット作成
 荒牧伸志監督

・ヒストリア
 UE4内のシェーダー、ライティング、ポストプロセス、エフェクト作成
 インタラクティブパートのプログラミング、サウンドの組み込み
 最適化

ワークフローの中心はUE4のMatinee(マチネ)
シーケンサーは現状は懸念が大きかったのでMatineeを選択
SOLAさんにMatineeを触ってもらう

VRでの没入感を高めるために ~演出強化~


◆背景はPBRで描画しつつ、キャラクターはアニメ的なシェーディングで描画したい!

疑似ライティングあり/なし(比較画像)
光源の角度と法線から疑似的に光の影響を表現
か0分アセットを用いて光源の角度や光の色を時間経過により変動させる仕組みづくり

キャラクターマテリアル
肌や髪は標準のライティングはしていない ライトベクトルから色を決めている
服や靴などは標準の物理ベースシェーディングを使用
最終的にハイブリッドな構成になった
全てUnlitにしてみたりすべてリアルにしてみたい色んな検証を行った

◆キャラクターがそこに存在している感じにしたい
◆プレイヤーを目で追うようにしたい

目線追従が無いとただそこにいるだけになり認識している感じが出ない
これが入ると没入感に繋がる
Two Borne IKを使った Look at Tableを利用
ただし常時こちらを見ているというのは不自然
演出に合わせてブレンド率を切り替えることにより自然な目線を実現

◆画面中央のレティクル(照準)に動きが無く視認性が悪くて機能していない
レティクルの追従にわずかなディレイを入れた 画面の真ん中にずっといる訳ではない
これにより視認性がぐっと上がった

◆自機の前進速度が速すぎて撃った弾がまっすぐ飛んでいかないように見える
 ⇒ うまく敵に当てることができない!
演出の都合上とても速く敵も自機も動く
かなりの距離を移動してしまう 弾が曲がって見える 弾が当たらない
計測してみたら時速400kmになっていた
位置補正を入れることで操作感が向上
ロックオンと重なったものは気づかない程度にホーミングを入れた
Projectile Movemnt Componentを使用
物理的に正しい挙動ではなくとも、見た目や操作感を重視

◆飛んでくるミサイルに対して頭を左右に動かすという操作が難しい
 だが単純にミサイルの速度を下げると危機感が無い

ミサイルが近づいた際にスローモーションを入れた
視界全体の色も変えて危険を知らせ、回避を促す(画面がやや赤くなる)
Set Global Time Dirationノードを使用
UE4では簡単にゲーム全体の時間経過速度を変更可能

良い演出を余すことなく伝える ~最適化~


ついに演出がFIX! しかし全体的に40fps Viveでは90fpsが理想
しかもVRではさらに2パスある
最適化して改善を目指す
マスターアップ直前で最適化作業に取り掛かれる状況になった
今回は演出にとことんこだわりたい案件だったのでギリギリのスケジューリングだった
それまでにどこを直そうという目算は立てていた 急ピッチで進めた

◆最適化に対しての方針

1「可能な限り、最適化前の演出や描画品質を落とさない」
最適化で描画品質を下げたり要素を削ることでコンテンツのクオリティを下げるのは本末転倒

2「最高のVR体験のために90fpsは厳守」
 TimeWorkという機能でフレーム間が補間される機能がViveにある
 しかし実際に体験すると一瞬でも90FPSを下回ると違和感があった
 全てのシーン、カメラ位置で90fpsを知ら回らないようにする

◆Stat Unitでボトルネックを調査

Gameスレッド(CPU)がボトルネック
GPUも同じくらいだったがGameスレッドを待つためにストールしているだけなので実際はそこまでかかっていない

◆CPUプロファイラ

C++、ブループリントともに細かく処理時間を確認することが可能

「突然ですが、ここで問題です」
どちらが軽いでしょうか? Make Array 純粋関数かそうでないか
純粋関数とは?
実行ピンを繋ぐ必要がない関数 いつでも切り替えられる
ノードの見た目がとてもすっきりする

それぞれ一万回実行したところ、非純粋関数の方が早くなった
300msと400ms 同じ処理にも関わらず大きな差が!
こちらに関しては二つの要因が含まれている

(ForEachLoopマクロの中身を出しながら‥)
① ループ回数判定のための評価(実行)
② ループ実行の引数のための評価(実行)
一度のループのために二回以上のArrayの評価が入ってしまう
10回のループのために21回の評価が入る
入力に渡された配列をキャッシュせずループするたびに最新のArrayを取得する
ループ実行中に配列の中身やサイズを変更すると思わぬバグを生む可能性がある

純粋関数の特徴
実行ピンにつながなくて良いため見た目がすっきりする
 バグを未然に防ぎやすい、作用内容を把握しやすい
繋がれている非純粋ノードが実装されるときに実行される
先ほどの例で使用したMakeArrayを非純粋関数に置き換えたら?
純粋じゃない関数はもう一度実行ピンを通過するまでキャッシュを残す

このため純粋関数はgetterのような単純な処理に限定すべき
何度も実行されると問題があるような処理は避ける

こういった処理の最適化やロジックの見直し、不要処理の削除を行った結果
エディタ上でGameスレッドが11ms以下になった!
Standalone時はエディタの処理が無くなり7ms
GC/ガベージコレクションが入っても問題なし)
デフォルト設定だと60fpsごとにGC起こる CPU負荷が上がる

◆ほとんど効果がなかった負荷対策

ベクトル長の比較時にLengthSquaredを使用する
10万回実行してもほとんど差が見られなかった
やっておくにこしたことは無い程度 ノード複雑化するくらいならやる必要なし
引数を参照にする事によりコピーコストの削減
値渡しとの一万回実行速度比較をしてもほぼ変わらず

ちなみにこれらはBPの話 C++では違ってくるかもなのでそちらは計測してみて
CPUに関しては約3日かけて最適化 これで50fpsになった

GPUプロファイラ

スナップショットをとって瞬間的なGPU処理時間を出力できるので対策の足がかりになる
Shader Complexity(シェーダー複雑度)の表示
シェーダー命令数を視覚化 単純に負荷に直結するものではない
半透明オブジェクトの重なりなど大まかなボトルネックの目安になる

◆具体的な最適化内

1「距離とカメラが向いている方向を利用した自前の軽量化リング」

半谷のアクターは表示やアニメーションの計算などを切る!
標準は各アセットに設定したボリュームでオクージョンカリングする
アセットにそこまで手を入れてなかった・表示だけじゃなくてもっと切りたいものもあったので自前実装
カメラからの距離、角度をプロパティで設定できるようにしてある
Z軸方向の回転角 アクターからカメラまでのベクトルを使って求めている
そのままアタッチするだけで使える

2「プリレンダ向けメッシュのリダクション」

とても効果があった
アセットの最適化の話になる
主なスケルタルメッシュの頂点数のリダクション
・輸送機 80万超x6
・味方機 35万超x11
・敵気 20万超x沢山
 とてもヘビー級‥
まずこれを何とかしようとしてリダクション
味方機は35万 ⇒ 15万に(約6割減)ビューポートで見た目上ほとんど変わらない
輸送機は80万 ⇒ 8万に
敵機は20万 ⇒ 6万に
にぎやかしとして遠くに多数配置した味方機のアクターはビルボードに変更
これで1シーンで数百万ポリゴンの削減
しかも言わないと誰も気づかなかった
余談だが一昨日スライドを佐々木代表に見てもらったら驚かれて良いリアクションをもらった

アニメションの計算負荷を抑える
アニメーションが無いメッシュはスタティックメッシュに変更
アニメーションするメッシュも必要部分だけスケルタルにしてスタティックと併用
演出上、絶対に見えない部分のメッシュは削除

3「マテリアルのブレンドモード最適化」

UE4はディファードレンダリング
半透明オブジェクトとは描画パスの都合上、相性が悪い

不必要に半透明マテリアルとして設定されているものはOpaque、Maskedに変えている
大きく効果はあったが気の重なりが多くMaskでも重い!
木は不透明のものにするとfpsの落ち込みが無くなったので不透明にできるか検討
形状で木を表現 ポリゴン数は増えてしまう
フォリッジはインスタンスドスタティックメッシュなので負荷が増えなかった

4「ダイナミックシャドウの調整」

キャストシャドウするアクターの数を抑えた
思っていた以上に有効だった
近くで目立つアクターのみON 遠くのアクターはOFF
負荷と見た目を見ながら調整していった

地道にやった結果ついに90fps達成!
思った以上の最適化効果があったので描画解像度を110パーセントに上げた
ある特定の演出の時にHUDが重なることがありそれだけはどうしようもなかった
こちらは良い演出だったので削れなかった

全てBPで実装した
プロジェクトの都合上ではあったがC++を使わずとも90fps実現可能という良い例になった
C++ならもっと最適化できたかも知れないが、BPでもいけるという指標になった

VR開発のまとめ


作ってみないと分からないことが多い
演出の確認をする場合はHMDでの確認を徹底する
視差による相性の悪さから、使えなかった表現もある
 キャラの輪郭線を描いていない 左右でレンダリングするのでブレて見える
 ブルームを抑えたり 片目だけ画面内に入っていると違和感が出るので
演出も最適化も妥協すると途端に没入感を失う

Instanced Stereo RenderngがUE4.11から入る
両画面を同時にレンダリングすることによる速度改善 1パスにまとめられる
CPU GPUともに処理コスト削減
一度検討してみると良いかも知れない


togetterのまとめ。こなべさん毎回ありがとうございます!