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

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

GCC2018 INEIのコンセプトアートの講演メモ

GCC2018に参加してきた際のメモになります。

ゲームクリエイターズカンファレンス'18 | GAME CREATORS CONFERENCE'18


◆講演タイトル

『どうしたらコンセプトアートを効果的につかえるのか』
 コンセプトアート専門の会社 INEI の講演です。

◆自己紹介

INEI 代表取締役・コンセプトアーティスト 富安健一郎さん
コンセプトアート専門の会社

講演のタイトルを変えた

「世界観を作るコンセプトアートの考え方・進め方」

質問はその場でどうぞ
「質問などあればどんどん言ってもらえれば
 楽しくやれればと」 

普段どういうお仕事をしているか?
FFXI アート
・黒騎士と白い魔王 アート
・写真家さんとコラボした企画のアート
 木とか岩の写真をコラージュしてアートに仕上げたもの
・富安さんの個人的なアート
・タバコのキャンペーン映像作品のアート
ポルトガル?の会社の作品のアート
・その他

爽やかなものからダークなものまで
空間が広がっていくような気持ちの良い絵が好き 得意技にしている

普段お仕事でこのようなコンセプトアートを描いているときに大切にしていることがある

それを今日は説明していく

実際にどのように考えて何を大切にしているか

◆会議を始める前にすること

仕事なので色んな人と会議をしながら進めていく

準備や心持ちについて

プロジェクトが現在どのような状況であるかを確認
まったく立ち上がってない状態のこともある
 次の会議で立ち上げようと思う みたいな 生まれる瞬間
 プリプロが進んでいる中だったり 

確認しないと入り方が変わってくるので 話がちぐはぐにならないよう確認する 

会議の出席メンバーと人数を確認

どういうポジションの人が出席しているのか
キャラクターデザインが先行している場合はデザイナーがどなたなのか
 お話優先なら脚本家や小説家がどなたなのか
 など

 顔ぶれからプロジェクトを掴んでいく
 最終的な決定権を誰が持っているかを把握する

会議の流れのイメージトレーニング

参加者がどういう反応をするかなども
素晴らしいプロジェクトだと当日意気込みすぎて肩に力が入り過ぎたりするので
慣れてリラックスして楽しめるようにしていきたいと考えてイメージしている

◆会議が始まったら心がけている事

話し合いがすごく重要と思っている
ただカッコイイ絵を描くのではなくクライアントが何を表現したいか汲み取る
そういうことを思いながら会議している

クライアントのお話をとにかくよく聞く

自由に描く アーティストという名前のイメージではなく
デザイナーのような正解はなんだろうなと探りあてるような仕事と思っている
望まれることはあるが、自分から描きたい、というのは無い

リラックスした空気になるようにする

有名なクリエイターさんがいて物が言えないような状況になると場が緩やかに回っていかないので
みなさんがフラットな関係性でいられるように
音楽をかけたりお菓子や飲み物を置いてみたり
基本的に笑顔でいるようにしていたり
雑談を挟んだり
始めて会う人の緊張をほぐすように 

出席者の発言をうながす

「Aさんこれどう思いますか?」みたいに

クライアントの中にあるコンセプトを引き出す

はっきりしたものがある場合もあるが
もやもやした状態のものをどう引き出していくかが勝負

モバイルノート ライブペインとを使って
「例えばこうですかね?」「こういう色ですかね?」「こういうデザインですかね?」と聞きながら引き出していく

クライアントが気が付いていないコンセプトも引き出す

対話して進めると新しいものが生まれたりもする
コンセプトに合っているなと思ったら提案してみたり
気づいたこと プロジェクトに対して有効なインフォメーションだなと思ったら話をしたり
クライアントさんが自分たちで考えたコンセプトって最高じゃんって思えるように
そこに向かうように

会議をあまく長くなりすぎないように

すごく集中して会議を進めるので大体みなさん1時間半くらいすると疲れてだらだらしだしてしまうので
なるべく1時間半で終わるように 

誰がどのように見るのかを確認する

どういうタイミングで誰に見せるのか
見え方、感じ方が変わるので 

ファシリテーターを目指す

こういうことはファシリテーションになる
会議がすごく大事なので
色んな手段を使ってクライアントさんの考えやコンセプトを引き出すことを常に目指している

Q「引き出しているうちにコンセプトが大きく変わっていったりもする?」

A「最初に描くコンセプトがあるので、そこから大きく外れることは今のところ経験していない」

◆コンセプトアートを描くときに考える事

ドラゴンが炎を吐いて辺りが焼けているコンセプトアートを例に紹介
書籍を出すときのサンプルの絵 
※下記リンク先にドラゴンのアートが掲載されています

タイトルをまず付ける

サンプルの例では「王都壊滅」
こちらがそのままコンセプトを示している
中二病っぽかったりもする 英語だったり記号だったりも
イメージを喚起できるので

 どういう状況かを文章で書き出す

「呪われたドラゴンが王都を襲撃し、壊滅しようとしている
 主人公は一般の兵士でこの事件で大きなダメージを負う」

そこからさらにイメージを膨らませていく

・暗雲が立ち込めている
 もしくは嵐の中なのか 青空ではないだろう
 どういう天候か

・融通がきかなそうな怖いドラゴンを登場させる
 色んなドラゴンがいると思うが 賢いドラゴン 守ってくれそうなドラゴンなど

・遠景の背の高い建物でここが栄えた街だった事を説明
高い塔がある

・破壊され尽した建物
 ディティールよりも
 無慈悲になぎ倒された 人間の意志が及ばす壊滅させられた状況

・最後の抵抗を試みる魔術師軍団
 この絵の中に瞬間、ストーリーを発生させて
 この絵を見る人が1分~3分くらい遊んでもらう 入り込んでもらう
 1秒後には魔術師軍団に炎が当たって大変なことになりそうな状況

・遠景に煙がたなびく
 この場所にいたくない 地獄のような場所 それを演出

・鑑賞者の目の前の炎で臨場感が出る
 ゲームの主人公と同じ目線にしたい
 今このゲームの主人公は地面に倒れているか隠れているかしていて
 崩壊した建物の陰から、ダメージを負いながら見ている 

絵の中で見る人が考える余地を残すことが結構必要だと思っている
仕掛けを散りばめるようにしている
見る人との関係性を築いてくれる絵にしたい

レンズのボケを結構作っている
臨場感を引き立てるようにしたい
レンズの汚れだったり
アニメーションだと画面が揺れたり
その中に飛び込んでいけるような絵を目指して描いている

もちろん描いている時に全体的なトーン 色や明暗 バランスにしようか 考えている
人間ドラマやサスペンス 映画のシーンの色をピックして塗ってみたり
周りが少し暗くなっていて中央がぼんやり明るくなっていて視線誘導するような構成にした

なるべく鑑賞時間が長くなって目がぐるぐる移動するようにして楽しませる
こういうゲームを作りたいと思えるような
こういうシーンならこういう演出やアニメーションが考えられる 想像力を喚起する
そういう狙いがある

例に挙げたアートのコンセプトは一言で表すと圧倒的な「絶望感
5秒くらいで焼き尽くされそうな
もしかしたら生き延びるかも知れない、正義の味方が現れるかも知れない
そういう希望を抱かせないくらいの

一つの大きなコンセプトを前面にバーンと押し出せているか?

これを常に気にしている

コンセプトアートで陥りやすい罠がある
色々なことを表現してしまおうとすることがある
絶望感があるけど村の端では人が生きているようにして欲しいとか
この村は戦闘状態、一方その頃別の村は温泉の町で賑わっている、とか
そういうのは描きづらい どちらも推しが弱くなってしまう
こういうことが頻繁に起こる

自分としては一枚のコンセプトアートで表現するコンセプトは1つが良い
そう打ち合わせではいつも言っている 

ただ、絶望の中で小さな希望があったり
一見楽しそうに見えるがすごく犠牲の上に成り立っている
そういうコンセプトもある

絵になった時にどういう表現になるか、先ほどのドラゴンの例のように会議の中で確認していく

すごく楽しそうに見える楽園だけど地下では奴隷のように働かされている人たちがいるとか
そのエネルギーがどこから来るのかなんとなくわからせるようなデザインにしたり
どこか怖いシルエットにしたり

実際に東京の刑務所の壁の絵で印象的だったものがある

壁に木の絵が描いてある 緑の生い茂った木が一本
骸骨の形の木
木という生命力が溢れるものがシルエットは骸骨
ここに入るのは良くないよということを暗喩しているのかなと思った
良いモチーフだけど不吉なデザインの例

逆に骸骨だけど尊いものと思わせることもできる

結局は一つの絵に対して一つのコンセプトを全面に出せているかが大事

言いたいことが散漫になっていないか?

一日描いて、帰る時に最後に赤丸を描いてレビュー ここはもう少しこうする、みたいな
赤ペン先生を自分でやって 一旦リセットして
次の日赤ペンを見て取り掛かる
そういうことをやっている

◆まとめ

クライアントに寄り添って立ち
 クライアントの気持ちを汲み取れるようなスタンスでずっといる
 クライアントがどう表現したいのかを意識しながら

何が本当に大切なのかを理解し
 このプロジェクトにとって何が本当に大事なものなのか
 全体のクオリティが必要なのか
 本当に大事なことは何なのかよく考える

絵を作っていくテクニックを総動員して

魅力のあるコンセプトアートを作っていく

Q「未来やファンタジー アセットのネタの引き出しは日頃どう得ている?」

A「お仕事で長い間やっているので頭の中にまず引き出しは多少ある
 さらにその上に 色んな書籍が出ている ファンタジー 部族 地形 食物がどう育つか
 そういう細かい設定のチェックリストを見つけて参考にして
 クライアントさんから設定を引き出す時にそれを織り交ぜながら」

Q「会議が重要だということだが、何回くらいの会議でどれくらい作品数を描く?」

A「よくあるのは コンセプトアート自体だと 1時間半を一区切り
 収まらなければ日を改めたり休憩したりすることもあるが大体一回で終わるようにしている
 これで合ってますよね どうですかというチェックを行う
 2~3回行ってFIXできるようにしている」

Q「コンセプトアートを依頼する側だが、こういう依頼のされ方は良い、困った、があれば」

A「どういう場合でも対応していきたいが 進めやすいのはこれが作りたいという想い
 根拠のない思いみたいなものが強いとすごく進めやすい
 加速してどんどんいいものができていったりする
 誰も何を作っていいのか分からないみたいな状態 足の設置場所が無い
 最終決定者がいない状態で進めていくとかなり難航する
 誰かが決めないと進めないので、まずはそれを進めるように促している」

Q「ボツもあるのか?」

A「コンセプトアートに関わるのは超初期段階が多いのでプロジェクトが無くなることが多い
 半分とは言わないがそれに近い作品が無くなる
 その判断をするのにもコンセプトアートが役に立つ
 誰もイメージする人がいなくて何となく進めて稟議が通りお金と人が動いてから止めると本当に大変なので
 判断が付ければそれはそれで役目を果たせている
 ボツという意識はあまり無い」

Q「ワークフロー色々あると思うが 使っているツールとか」

A「私自身はPhotoshopがほぼ全て
 最近は3Dソフトを使うことがINEIの中ではあるが 随時調整しながら
 板タブが好きで古いIntuosをずっと使っている
 感触が変わるのが好きじゃないので」

Q「コンセプトアートの平均的な描く時間は?」

A「決まりは無いが 大体 どんなにかかっても一か月は無いようにしている
 一週間とか二週間とかで上げていくのがクライアントさんにとっても良いペースなのかなと」

Q「海外など遠隔地でのやり取りは?」

A「海外になるとそこまでのコミュニケーションは難しいので
 依頼されて描くパターンが多い
 ここまで入り込んでいかない
 本当は紹介したような流れでやりたいが」

 

Flipbookマテリアルについて

※2018.6/9追記
 UE4標準のマテリアル関数「Flipbook」の中身の方がシンプルで不具合もありません
 この記事の組み方は良くないです‥
 また時間のある際にそちらを解説します

 

UE4でエフェクト向けにマテリアルを組む際に、Particle System側ではなくマテリアル内でSubUVアニメーション(Flipbook / パラパラアニメ)させたいことがあります。

今回はその方法についてメモしておきたいと思います。

UE4標準のFlipbookマテリアル関数を使用する


UE4.19時点で、Flipbookのためのマテリアル関数が2つ見当たります。
1つはGPUパーティクル用みたいですね。

f:id:moko_03_25:20180322002616j:plain

こちらを使用しても良いのですが、中身が少々分かり辛いのと不要な機能が入っていたりもするので、シンプルな構成のものを自作していきます。

基本的なマテリアル構成


テスト用にテクスチャを用意します。
縦と横のパターン数が違う方がデバッグしやすいと思います。

f:id:moko_03_25:20180322014431j:plain

まずベースとなる基本構成はこちら。1パターン分の絵が表示されるようにしています。
横・縦ともに1パターン分のサイズを出してUV座標に掛けています。
この時点では機能していないAddの部分にUVの移動を与えていきます。

f:id:moko_03_25:20180322002610j:plain

次に、1秒ごとにU方向へパターンが切り替わるようにします。
Timeの値をFloorで切り捨てると1秒ごとに1ずつ増える値を取得できるので、それをU座標に足すだけで1パターン分移動するようになります。
このようにTexcoordに対しては、パターン切り替えを先にAddで行って、後からMultiplyで1パターン分の大きさにUVをスケールする方が数値の流れを理解しやすいと思います。

f:id:moko_03_25:20180322002608j:plain

今度は、U方向のパターンが最後まで表示されたら次はV方向に1パターン分移動するように構成します。
つまりU方向に5パターンの絵が敷き詰められているなら、Timeで1カウントするのに5秒かかるようにします。そのためにはTimeを5で割れば良いのですが、これまでの手順で5で割っている部分があるので再利用しています。

f:id:moko_03_25:20180322002605j:plain

全体図を見てみます。これで1秒ごとにパターンが切り替わるようになりました。

f:id:moko_03_25:20180322002654j:plain

 

パーティクルごとにランダムなパターンから再生を開始させる


開始パターンをランダムにしたい場合、Timeノードから得られる値に全パターン分の範囲内でランダムな値を足すようにしてあげればOKです。

Dynamic Parameterノード(cascadeでDynamicモジュールを追加して0~1の乱数を設定する必要があります)やParticle Random Valueノード(こちらはGPUパーティクル限定 / 詳しくはこちらの記事をどうぞ)を使って得られる「0~1」のランダムな値に対して全パターン分の値を掛けて、Timeに足せばOKです。

f:id:moko_03_25:20180322002652j:plain

 

パターン切り替わり時に次のパターンをブレンドさせる


Timeから得られる値に1を足してあげるだけで次のパターンになります。
構成は一気に増えますがやっていることとしてはとてもシンプルです。

今の絵柄と次の絵柄をLerpノードでブレンドさせますが、遷移させるためにTimeの値をFracで小数点以下だけ取り出して、LerpのAlphaポートに繋いでいます。

f:id:moko_03_25:20180322002649j:plain

 

パターンが切り替わる速度を変える


説明が後回しになりましたが、1秒に1パターンの切り替え速度では遅いですよね。
図のようにTimeに30を掛けると1秒間に30回、パターンが切り替わります。

f:id:moko_03_25:20180322002646j:plain

ただし、Timeの値はもんしょさんの記事で解説されているようにパーシスタントレベル開始時からカウントされるため、時間経過とともに値がどんどん大きくなっていきますが、30のように大きな値を掛けるとさらに巨大な値になります。そして値が大きくなるにつれfloatの精度が悪くなるためか、このように絵が崩れていきます。

f:id:moko_03_25:20180322002643j:plain

そこでTimeノードのプロパティ「Period」で、ある程度のカウントで0にリセットされるようにしておきます。リセットされる瞬間は切り替わりがおかしい絵が一瞬出てしまいますが、これは仕方ないかと思います。。

f:id:moko_03_25:20180322013527j:plain

 

パーティクルの寿命に応じて一通り再生させる


パーティクルが生まれてから死ぬまでを0から1に遷移する値で取得できるParticle Relative Timeノードを使って、最初のパターンから最後のパターンまで再生させる構成は図のような感じになります。

f:id:moko_03_25:20180322013524j:plain

開始パターンをランダムにする必要が無いので構成も楽ですね。

以上になります!参考になれば幸いです。
 

C# PictureBoxの主なプロパティ

良く忘れるのでメモ。

デフォルトから変えることが多いものを中心にメモっています。

◆動作

SizeMode
 StretchImage ‥にするとPictureBoxのサイズに合わせて画像を拡大縮小する

◆直に記述しないといけないもの

pictureBox1.AllowDrop = true;
 ドラッグ&ドロップで画像を受け付ける場合にTrueにする
 public Form1() 内に記述すればOK

UE4にPythonプラグインを導入してみる

UE4.17でPythonを使用できるようにするUnrealEnginePythonプラグインを導入してみたのでメモ。

いくつかの記事を参考にさせて頂きました。

まず前提条件が以下になります。

Python環境そのものをPCにインストールしていなくても大丈夫
・ビルド環境が無くても大丈夫
プラグインの入ったzipをDLして所定の場所に入れるだけ

続きを読む

「eboard」で中学の数学をやり直してみる

3DCGツールでスクリプトに手を出したり、シェーダーなどに触れたりすると、数学が必要な場面があって、高校時代に全くと言って良いほど勉強しなかった自分は「高校数学を学び直さないと‥」「いや、高校数学どころか中学からやり直さねば多分わからん‥」と思うことがよくあります。

そう思いつつもほったらかしになっていたのですが、最近こんなツイートが流れてきました。

ほうほう、これはいいなーと思ってRTしたのですが、ついでに「中学の数学を学びなおすのに良いサービスはないかな?」と思ってググってみたらトップに出てきたのがこちら。

eboard」は主に中学生で学ぶ内容を動画で分かりやすく丁寧に教えてくれるサービスのようですが、ユーザー登録しなくても視聴可能で、ユーザー登録すればテスト問題を解いたりどこまで進めたかグラフィカルに表示されたりします。

高校生で学ぶ内容では「高校数学I」だけありますね。

こちらを試しに中学数学の頭から1年生の終わりまで視聴してみましたが、テストをすっ飛ばして動画を見るだけなら半日~1日あれば十分観終える感じでした。
1つの動画は数分程度で、短いものだと2~3分だったりもします。

ということは3日間くらい集中して観れば、中学数学の復習ができるなあ!と。

思ったより短時間で高校数学まで辿りつきそうでモチベーションが上がってきました。
非常に素敵なサービスだと思います。

寄付のページをざっと見てみてもちゃんとしているなあと思いましたし、大きな企業からの協賛もあって素晴らしいなと。寄付は定額だけでなく単発でもいけるようなので、高校数学Iを終えたら感謝の分の寄付をしたいなと思いました。

しかし数学を学習してみて思うのは、1つずつステップアップしていくカリキュラムの流れが美しいなあと。今覚えたものが次に役立つ、の繰り返しで。
国内独自の工夫が盛り込まれているのか、海外と同じなのか。海外がどういったカリキュラムなのかは知りませんが、沢山の頭の良い人達によって長年の間に洗練されてきているのでしょうか。
「はじき」とか「ひとよひとよに‥」が昔と全く変わっていなくてそこはほほえましく思いつつも、こういったカリキュラムを考えられるというのはすごいなと思うのでした。
ハードウェアやソフトウェア、3Dグラフィックスパイプラインやリアルタイムグラフィックス、ゲームエフェクト、果ては開発とかマネジメントとかも順を追って基礎から学べる動画があると良いなあとぼんやり考えたり。

しかし反面、数学は他の教科と比べて、何のために役立つのかイメージしにくくて子供たちにはモチベーションになりにくいだろうなあという点と、他の教科に比べて学習が階段的であるというか‥1つ躓くと以降のステップがどんどん分からなくなっていって脱落しやすい科目だなあというのをあらためて感じました。
先生も教えたりついていけない子をフォローしていくのも大変だろうなと。。

数学だと特にグラフとか図形では3DCGアニメーションを使ってグラフィカルに提示したら理解のしやすさが格段に上がるだろうし、またゲームのプログラミングでは数学が活用される場面が多いと思うので活用例とシリアスゲームがうまくミックスされたようなコンテンツがあれば良さそうと思いましたがすでにあるのかな?

ちなみに、実のところ中学の数学についてはYouTubeで解説動画が色々と上がっていて、ちょこっと視聴したことはあるのですが、YouTubeの動画リストからでは一覧性が悪くアクセスし辛い印象なので、こういった学習に特化したサイトで視聴できる方がやっぱりいいですね。

Udemyも探せば高校数学とかCGクリエーター向けの数学の講座もあるのでしょうか。
Online Courses - Anytime, Anywhere | Udemy

またこちらも漁ってみたいと思います。

 

追記:
後日、無事に中学数学の視聴を一通り終えました。
先に書いたように3日間集中して視聴すれば一通り観終える感じでした。
早く高校数学に入っていきたかったのですが、そういう場合にどこか飛ばせる要素は無いか振り返ってみたものの、無いですね。。
因数分解も覚える必要あるんだろうかと思いましたが、高校の数学Iでまた出てきますし‥

と言う訳で、引き続き高校数学を学んでいきたいと思います。
3DCG周りで必要なのは「三角関数」「ベクトル」「行列」あたりになるようです。

メモ:

 

ゲーム開発者による情報発信や副業について考えてみる

今日は2017年の大晦日ですね。

今年は色々と感慨深い年でもあったので、私にとって永遠のテーマでもある「ゲーム開発者にとってのプライベートでの情報発信や副業」について、さらっとではありますが今の考えを書いてみます。

続きを読む

C# DataGridViewの主なプロパティと関数

良く忘れるのでメモ。

デフォルトから変えることが多いものを中心にメモっています。

DataGridViewの主なプロパティ


◆動作

AllowUserToAddRows  False ‥にするとユーザーが行を追加できなくなる

AllowUserToDeleteRows  False ‥にするとユーザーが行を削除できなくなる

ReadOnly  True ‥にするとユーザーがセルを編集できなくなる

◆配置

AutoSizeColumnsMode  Fill ‥にすると列が枠にピタっと収まる

◆表示

RowHeaderVisible False ‥にすると行ヘッダーを非表示にする
ColumnHeadersDefaultCellStyle>AlignmentをMiddleCenter ‥にすると行ヘッダーを中央揃えにできる

DataGridViewでよく利用する関数


//全ての行の内容をクリア
dataGridView1.Rows.Clear();
//全ての列の内容をクリア
dataGridView1.Columns.Clear();
//行数をカウント
dataGridView1.Rows.Count;
//指定セルの背景色を変更
dataGridView1.Rows[0].Cells[0].Style.BackColor = Color.FromArgb(0, 0, 0);
//選択している行を削除
dataGridView1.Rows.Remove(dataGridView1.CurrentRow)

C# List<T>の中身をDataGridViewに追加する方法

C#でListの中身をDataGridViewに追加する方法。 すぐに忘れてしまうのでメモ。。

▼外観はこんな感じで用意しておいて‥ f:id:moko_03_25:20171226002429j:plain ▼ボタンを押すとこうなる感じです。 f:id:moko_03_25:20171226002446j:plain

複数のListの中で最も多い要素数を割り出して、その分の行を最初に追加しています。
単にMath.Maxだと2つの値しか比較できないので、LINQで検索したら出てきたこちらの記事を参考にさせて頂きました。 qiita.com

コードはこんな感じ。

// Listの中身を適当に定義
List<string> list1 = new List<string> { "a", "b" ,"c" };
List<string> list2 = new List<string> { "1", "2", "3" };
List<string> list3 = new List<string> { "A", "B", "C", "D", "E" };
List<string> list4 = new List<string> { "4", "5", "6" };

//下準備
private void Form1_Load(object sender, EventArgs e)
{
    foreach (string s in list1)
    {
        textBox1.AppendText(s + "\r\n");
    }
    foreach (string s in list2)
    {
        textBox2.AppendText(s + "\r\n");
    }
    foreach (string s in list3)
    {
        textBox3.AppendText(s + "\r\n");
    }
    foreach (string s in list4)
    {
        textBox4.AppendText(s + "\r\n");
    }

    //行ヘッダを非表示にする ※Formデザイナーのプロパティ内でも設定可能
    dataGridView1.RowHeadersVisible = false;
}

// ボタン押下でDataGridViewに表示
private void button1_Click(object sender, EventArgs e)
{
    //Listの最大格納数を割り出す
    int iMax = new List<int> { list1.Count, list2.Count, list3.Count, list4.Count }.Max();

    //Listの最大格納数だけ行を追加
    for (int i = 0; i < iMax; i++)
    {
        dataGridView1.Rows.Add();
    }

    //行にデータを入力
    for (int i = 0; i < list1.Count; i++)
    {
        dataGridView1.Rows[i].Cells[0].Value = list1[i];
    }
    for (int i = 0; i < list2.Count; i++)
    {
        dataGridView1.Rows[i].Cells[1].Value = list2[i];
    }
    for (int i = 0; i < list3.Count; i++)
    {
        dataGridView1.Rows[i].Cells[2].Value = list3[i];
    }
    for (int i = 0; i < list4.Count; i++)
    {
        dataGridView1.Rows[i].Cells[3].Value = list4[i];
    }
}

C# UE4のアセットの命名規則チェックツールを作ってみた

QiitaのUE4アドベントカレンダー初参加です。

UE4の大量のアセットに対して「命名規則が守られているかをチェックしたい!」と思い、せっかく覚えたC#でチェックツールを作ってみました。

完成したツールはこんな感じ。

f:id:moko_03_25:20171206010311j:plain

左のテキストボックスにUE4のアセットのリファレンス情報を貼り付けて、アセットの種類に応じたボタンを押せば、命名規則が守られていないものだけが右のテキストボックスにリストアップされます。

命名規則をどうチェックするかというと、あらかじめ正しい規則をチェック用のテキストファイルに正規表現で指定しておきます。

その正規表現にマッチしないものがリストアップされるという訳です。

2017.12.17 ver2.0にアップデートしました!
 ・レベルとスケルタルメッシュを追加対応
 ・ボタンの並び順を変更
 ・アセットの種類をリファレンス情報を元に判定
  ボタンに対応するアセットが無い場合にメッセージを表示
 ・結果の数を正しい値が出るよう修正
 ・変数名や関数名が分かりにくかったので全体的に修正

2017.12.28 ver3.0にアップデートしました!
 ・チェックボタン一発で表に全タイプのアセットを一括でリストアップ
 ・Exelに貼り付け時にセル内で折り返さないようクリップボードへコピーボタンを追加

続きを読む

ライセンスについてのメモ

最近、ツールのソースコードを公開したりする機会もあり「ライセンス(使用許諾条件)」について軽く調べたのでまとめておきたいと思います。

アーティストだって素材を配布したりもするので関係ありますよね。

さて、参考にさせて頂いた記事はこちらの2つ。

続きを読む