読者です 読者をやめる 読者になる 読者になる

ゲームエフェクトデザイナーのブログ (新)

Houdini勉強開始。レポート記事とか色々。

メインコンテンツ目次

目次

●ニュース

●Houdiniについて書いた記事

Houdiniの学習について
Billowy Smokeを使った煙のチュートリアル(前半)
Billowy Smokeを使った煙のチュートリアル(後半)

Mayaについて書いた記事

MELの最初のステップ
MELのウインドウ作成について
MELでシェーダー作成 1
MELでシェーダー作成 2
MELスクリプトのある場所を参照する
MELを配布する時のプロシージャについて
UVの正規化
頂点カラーを別のモデルに転送
テクスチャの色を頂点カラーに転送

BISHAMONについて書いた記事

BISHAMONの最初のステップ
BISHAMON Personal v1.8 の新機能について
BISHAMONへのカメラのインポートについて

Unreal Engine 4UE4)について書いた記事(主にVFX Artist向け)

エフェクトツールを使ってできること
エフェクトのワークフロー

テクスチャのインポートについて
テクスチャのプロパティについて
テクスチャのフォーマットについて

マテリアル作成の基本的な知識
最終マテリアル入力の各ポートについて
パーティクル向けのマテリアルの設定について

●その他の記事

イチオシゲームエフェクトアレコレ

処理速度と処理量のお話 ms(ミリセカンド)について
ドローコールについて

おおまかな開発コストの計算方法
おおまかなゲームソフトの売り上げの計算方法

勉強会開催のすすめ
大阪・京都の貸し会議室メモ

●著書 / 寄稿

・『BISHAMON ゲームエフェクトデザイン入門』を共同で執筆させて頂きました!

BISHAMONゲームエフェクトデザイン入門 (GAME DEVELOPER BOOKS)

BISHAMONゲームエフェクトデザイン入門 (GAME DEVELOPER BOOKS)

 

・Kindole版がリリースされました!

BISHAMON ゲームエフェクトデザイン入門

BISHAMON ゲームエフェクトデザイン入門

 

・『CGWORLD 199号』にエフェクトのメイキング(動画)を寄稿させて頂きました!

・『萌えるCG読本plus』に「ゲームCGの基礎について PBR編」を寄稿させて頂きました!

・『萌えるCG読本 vol.03.1』イラスト本にイラストでゲスト参加しました!

・『萌えるCG読本』にテクスチャのメイキングを寄稿させて頂きました!

・『萌えるCGテクニカル読本』にエフェクトのメイキングを寄稿させて頂きました!

エクセルで条件付き書式を適用したのち書式を残してクリアする方法

テキストエディタ

エクセルの備忘録。

下図のようなリストで、B列の値が一定の値以上ならその行の書式を変えたいといったような場合には「条件付き書式」機能を使うと便利です。

f:id:moko_03_25:20160831022607p:plain

まず書式を反映させたい列、または範囲を選択しておきます。

f:id:moko_03_25:20160831022608p:plain

ホームタブにある「条件付き書式」の「新しいルール」を選択。

f:id:moko_03_25:20160831022609p:plain

数式を使用して、書式設定するセルを決定」を選択し、下図のように計算式を記述した後に「書式」ボタンを押して自由に書式を設定します。

=$B1>=80

この図の場合は「B列に対してB1のセル以降の値が80以上なら赤文字にする」です。

f:id:moko_03_25:20160831022610p:plain

するとB列の値が80以上の行の文字が赤くなりました。

f:id:moko_03_25:20160831022611p:plain

ただしこれで表が完成した場合、このままでは少し問題があります。
下図のように行を挿入すると赤くなる文字がズレました‥
今はまだ「条件付き書式」の情報が残っていて編集する際に厄介なので、これを通常の書式に換えて条件付き書式はクリアしてしまいます。

f:id:moko_03_25:20160831022612p:plain

この時、もう一度「条件付き書式」から「ルールのクリア」を行うだけで書式を残したままクリアがすんなりいく場合と、書式が全て失われてしまう場合があります。
オプション設定なのかエクセルのバージョンなのか‥
とりあえず後者の場合の対処方法を追記しておきます。

まず条件付き書式を外したいセルを選択して一旦コピーします。
次にホームタブの「貼り付け」の右下にあるクリップボードオプションのボタンを押して「すべて貼り付け」ボタンを押して、そのまま上から貼り付けてしまいます。

f:id:moko_03_25:20160831022613p:plain

これで書式自体は移せたので、あとは「条件付き書式」>「ルールのクリア」で条件付き書式をすっきりと除去することができます。

f:id:moko_03_25:20160831022614p:plain

以上です。

エクセルで便利なVBAマクロのメモ

テキストエディタ

エクセルのVBAで便利な記述の備忘録。
標準操作でできる範囲ならマクロの記録である程度なんとかなりますね。。

A1からA列の最下行の範囲


A列の1行目からA列で何か記入している最下行の範囲を表す場合。

Range("A1", .Range("A" & .Rows.Count).End(xlUp))

 

データサイズのバイト表記をKiB表記にする

A列にデータサイズが並んでいてB列にKiB表記にしたいときはこちら。

' A列を1024で割ったものをB列に入れる
Range("B1").Select
ActiveCell.FormulaR1C1 = "=RC[-1]/1024"
Range("B1").AutoFill Destination:=Range("B1:B" & Cells(2).CurrentRegion.Rows.Count)

' B列を文字列に変えてKB表示にする
Columns("B:B").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.NumberFormatLocal = "0 ""KiB"""

MiB表示にしたいならさらに1024で割ればOK。

A列の値が50以上のA~B列を赤文字・太文字にする

条件付き書式>新しいルール>数式を使用して、書式設定をするセルを決定‥と同じもの。

Columns("A:B").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$A1>=50"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.Bold = True
.Italic = False
.Color = -16776961
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False

 

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

秀丸で便利な置換のメモ

テキストエディタ

秀丸での便利な置換についての備忘録。
ちなみに「秀丸の検索機能を強化する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 エフェクト マテリアル

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 エフェクト

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を買おうと誓うのでした。。