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

レポート記事とかUE4のマテリアルとか。C#とかも触ったり。

Main Contents

●TOPIC

▼デスクトップキャプチャ『Tenpu Gazo Maker』をリリースしました!

▼シンプルなテキストエディタList Fusen 2』をリリースしました!

▼タスク管理アプリ『TaskQuest』をリリースしました!

▼作ったツールやスライドはこちらで公開しています
 moko-vfx (moko) · GitHub
 Moko, Video game fx artist | SlideShare

▼エフェクトの資料は Pinterest にまとめています。

▼ご支援いただけたらありがたいです。。


Unreal Engine 4(UE4

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

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

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


●BISHAMON

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

Maya

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

Photoshop

Photoshopのスクリプトを書いてみる

C#やプログラム全般

「C#」の記事一覧

●その他の記事

数学が苦手な人向けのCG数学シリーズ

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

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

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

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

 

TEDの視聴に公式サイトを活用する

TEDを視聴したい時、YouTubeで探すよりも公式サイトで視聴する方がオススメです。

理由は下記のような感じです。

・あらゆるTEDの動画が網羅されている

・ジャンルや動画の時間など複数の条件で検索できる

・公式で字幕が用意されていて日本語字幕に対応しているものもある

・公式で全文が書き起こされているものもある

・全文がある場合、再生されている場所がハイライト表示される

・全文がある場合、文をクリックするとその場所をすぐに再生してくれる

 

これら全ての解説はここでは行いませんが、以下の3点についてご紹介します。

 

条件を絞って動画を検索する方法


検索はページ右上から直接可能ですが、メニューの WATCHTED Talks を選んで‥

f:id:moko_03_25:20210123130709p:plain

表示される複数のプルダウンから動画を絞ることができます。例えば、 Topics で興味のあるテーマを選んだり Duration 6分以内の動画に絞ることができます。

また検索条件は More ボタンで増やせます。

f:id:moko_03_25:20210123130911p:plain

また、Topics のプルダウンから「See all topics」を選ぶと細かくキーワードを選べますが、最近は「Education」で神話など短い物語のアニメーションを観ています。

f:id:moko_03_25:20210123131233p:plain

 

日本語字幕が無い場合に自動翻訳しながら視聴する方法


動画を視聴する際に、字幕設定に日本語が無かった場合は‥
▼ Iseult Gillespie: Savitri and Satyavan: The legend of the princess who outwitted Death | TED Talk

f:id:moko_03_25:20210123133012p:plain

Google ChromeMicrosoft Edge を使っているならページ内で右クリック「日本語に翻訳」を選ぶと、動画を再生した際の字幕さえもリアルタイムで翻訳してくれます。

f:id:moko_03_25:20210123133914p:plain

f:id:moko_03_25:20210123134329p:plain

もし他のブラウザで翻訳機能が無かったりGoogle翻訳ツールバーを入れていない場合でも、Google翻訳のページに飛んでURLを入力すれば翻訳が有効な状態のリンクを生成してくれるので、知っていると便利です。

f:id:moko_03_25:20210123133258p:plain

 

英語学習のために Mouse Dictionary を併用する方法


ChromeFirefox のアドオンであるこちらを導入すると、ブラウザに表示されている英単語や熟語の意味を手早く調べることができるので大変オススメです。

作者の方が解説されているように、私も英辞郎の辞書の導入(約500円)と Mouse Dictionary ON/OFF のショートカットを設定して使っていますが大変便利です。

少なくともショートカットの設定は必須(Alt + Z が便利)だと思います。

こんな感じで TED や YouTube はもちろん、LLN や LLY でも有効です。

f:id:moko_03_25:20210123135836p:plain

意味を表示してくれるウインドウはドラッグして自由な位置に移動できるので、字幕のそばに移動させて視聴すると快適になります。

またこんな感じでイディオム(熟語)も登録されていれば表示してくれます。

f:id:moko_03_25:20210123140314p:plain

ちなみに Mouse Dictionary はマウスカーソル上の単語について表示してくれますが、ページ中の単語をドラッグして選択状態(ハイライト表示)しておけば、その単語を表示したままマウスカーソルを自由に移動できます。単語の情報量が多くてウインドウからはみ出していて、ウインドウサイズを引き延ばしたいような場合に試してみてください。

以上になります。この記事が英語学習ライフに役立てば幸いです!

英語学習を1年半続けてみた所感

スミオさんが英語学習の取り組みについてとても素敵な記事をアップされています!


そして私も現状について記事を書きたくなりました!

英語の学習を始めて約1年半になりますが、その間にどんなことを感じて・どれくらい力が上がった実感があるのかなどについてまとめたいと思います。

続きを読む

GDEnglish is started on Discord!

今年の初めに、ゲーム開発者のための英語学習コミュニティ「GDEnglish(Game Developers English」をDiscordで開設しました!
Earlier this year, I opened an English learning community "GDEnglish" for game developers on Discord!

「ゲーム開発者」と謳っていますが、事務職の方やCG業界(映像・アニメ・デザイン・建築など)の方もウェルカムです!
I said "Game Developers", but office workers and people in the CG industrys (movie, anime, design, architecture and so on) are also welcome!

英語や日本語を勉強している海外の方々も参加してくださっています!
People from overseas who are studying English and Japanese have also joined us!

招待リンクを用意しましたので、興味のある方はぜひこちらからご参加くださいっ!
I've provided an invite link, so if you're interested, please join us!

主要コンテンツは、日本語での雑談チャンネル・英語での雑談チャンネルの他に、お役立ちの記事・動画・ツールなどの情報交換チャンネルや、1日に1つ単語や文章を書きましょうというチャンネルがあります。もちろんボイスチャンネルも。
The main contents include a chat channel in Japanese/English, as well as an information exchange channel with useful articles, videos, and tools, and a channel where you can write one word/sentence a day. And of course, there are some voice channels.

f:id:moko_03_25:20210117110400p:plain


それから「IndieGamesJp.dev」で記事に取り上げてくださいました!大変光栄です。。
And then, it was covered by "IndieGamesJp.dev"! It's an honor.


という訳で、どうかお気軽にご参加ください~!
So I'm looking forward to seeing you!

英語ボイチャでAmong Usをプレイする際の英文集

先日、英語学習をしているゲーム業界人のコミュニティをDiscordで立ち上げましたが、「英語ボイチャでAmong Usをプレイしよう」というのをメンバーで試してみました。

そして以下のような良い点を感じました。

・議論の時間があるので英会話に持ってこい

・単語の羅列でも伝わる

・特定のフレーズを繰り返すので覚えていきやすい

・ワイワイやるので初対面での英会話の恥ずかしさを軽減できる

・5人以上じゃないとゲームとして厳しいが英会話目的なら4人でもOK


以上により、英会話初心者が英会話に慣れる方法としてとても良い手応えがありました。

ただし、ゲームでの議論の際に伝えたいことがパっと出てこない場面も多かったです。
そこでプレイ時の注意や主な英文をまとめておきたいと思います。

続きを読む

VFXアーティストのスキル自己評価シートを公開しました

前々から作りたいと思っていた、ゲームエフェクトアーティスト向けに自身のスキルをチェックできるExcelシートGitHubにアップしました。

ページ右下の Download ボタンからDLできます。
マクロ付きのファイルになるので、Excelを開いたらマクロを有効にしてください。

続きを読む

C# TextBoxを数値専用にする際のTIPS

フォームアプリでユーザーが数値入力だけ行える入力ボックスを用意したい場合に、コントロールを自作したり継承して改造せずに標準機能だけで実現しようと思うと主に2つの方法があるかと思います。

NumericUpDownを使う方法

1つは NumericUpDown コントロールを使う方法です。

f:id:moko_03_25:20200920162740p:plain

こちらは数値入力のみ入力可能なコントロールで、最小値と最大値を指定するプロパティが用意されているため、容易に0の入力を無効にできます。

描画する線の太さや画像サイズなど 0を指定してはいけない場面は多いため便利です。

ただしいくつか面倒な点があり‥横の上下ボタンが不要な場合に非表示にすると背景画くり抜かれたような見た目になったり、数値を変更した際のイベント「ValueChanged」では数値を変更する前の値しか取得できないため変更後の値を取得するのに困ります‥(こちら勘違いだったり簡単な解決法があれば教えてください)

TextBoxを使う方法

そこで TextBox コントロールを数値入力のみ受け付けるようにして利用する場合ですが、今回は1以上の整数値のみ入力可能にしてあげたかったため、下記のような挙動を実装しました。

・TextBoxがアクティブになったら全選択状態にする
・TextBoxでEnterを押した時も全選択状態にする

・TextBoxでEnterやEscapeキーの入力時にビープ音を鳴らさない

・半角0~9 / Enter / Escape / Delete /Backspace の入力のみ受け付ける

・Enterを押した際に入力が0の場合はエラーメッセージを出す
・Enterを押した際にゼロパディングを打ち消す

・フォーカスが移動した際に入力が0の場合はエラーメッセージを出す
 そして元のTextBoxにフォーカスを戻す
・フォーカスが移動した際にゼロパディングを打ち消す


こうして見ると分かるのですがTextBox1つ追加するのにこれだけ手を入れてやらないと快適にならないというのがUIを作る際の非常に面倒臭いところですね。。

フォーム上に TextBoxを2つ並べた形でテストしました。

f:id:moko_03_25:20200920165506p:plain

そして下記のように実装することでうまくいきました。
(フォームデザイナ側で TextBox の ImeMode Disable に設定しています)

using System;
using System.Windows.Forms;

namespace InputNumber
{
	public partial class Form1 : Form
	{
		double d = 0;

		public Form1()
		{
			InitializeComponent();
		}

		// アクティブになったら選択状態
		private void textBox1_Enter(object sender, EventArgs e)
		{
			textBox1.SelectAll();
		}
		private void textBox2_Enter(object sender, EventArgs e)
		{
			textBox2.SelectAll();
		}

		private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
		{
			// EnterやEscapeキーでビープ音が鳴らないようにする
			if (e.KeyChar == (char)Keys.Enter || e.KeyChar == (char)Keys.Escape)
			{
				e.Handled = true;
			}

			// Enterを押したら選択状態
			if (e.KeyChar == (char)Keys.Enter)
			{
				if (textBox1.Text == "0")
				{
					MessageBox.Show("1以上の値を入力してください");
				}
				else
				{
					// ゼロパティングを打ち消す
					string s = textBox1.Text;
					textBox1.Text = s.TrimStart((char)'0');
				}

				textBox1.SelectAll();
			}
			else
			{
				// 0~9と、バックスペース以外の時は、イベントをキャンセルする
				if ((e.KeyChar < '0' || '9' < e.KeyChar) && e.KeyChar != '\b')
				{
					e.Handled = true;
				}
			}
		}

		private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
		{
			// EnterやEscapeキーでビープ音が鳴らないようにする
			if (e.KeyChar == (char)Keys.Enter || e.KeyChar == (char)Keys.Escape)
			{
				e.Handled = true;
			}

			// Enterを押したら選択状態
			if (e.KeyChar == (char)Keys.Enter)
			{
				if (textBox2.Text == "0")
				{
					MessageBox.Show("1以上の値を入力してください");
				}
				else
				{
					// ゼロパティングを打ち消す
					string s = textBox2.Text;
					textBox2.Text = s.TrimStart((char)'0');
				}

				textBox2.SelectAll();
			}
			else
			{
				// 0~9と、バックスペース以外の時は、イベントをキャンセルする
				if ((e.KeyChar < '0' || '9' < e.KeyChar) && e.KeyChar != '\b')
				{
					e.Handled = true;
				}
			}
		}

		private void textBox1_Leave(object sender, EventArgs e)
		{
			if (textBox1.Text == "0")
			{
				MessageBox.Show("1以上の値を入力してください");

				// フォーカスを戻す必要がある
				textBox1.Select();
			}
			else
			{
				// ゼロパティングを打ち消す
				string s = textBox1.Text;
				textBox1.Text = s.TrimStart((char)'0');
			}
		}

		private void textBox2_Leave(object sender, EventArgs e)
		{
			if (textBox2.Text == "0")
			{
				MessageBox.Show("1以上の値を入力してください");

				// フォーカスを戻す必要がある
				textBox2.Select();
			}
			else
			{
				// ゼロパティングを打ち消す
				string s = textBox2.Text;
				textBox2.Text = s.TrimStart((char)'0');
			}
		}
	}
}

 

こちらの記事を参考にさせていただきました。

TextBoxに数字しか入力できないようにする - .NET Tips (VB.NET,C#...)
単一行テキストボックスでEnterやEscapeキーを押した時にビープ音が鳴らないようにする - .NET Tips (VB.NET,C#...)

 

今回、ユーザーが画像を自由に拡大縮小できる機能を追加しようと思ったのですが、「縦横比を固定フラグをONにしていたら片方のサイズが自動で決まるようにしたい」と思いました。

f:id:moko_03_25:20200920171355p:plain

その際には TextChanged イベントでは値を入力している最中にも計算してしまうので、ユーザーがEnterキーを押した際またはフォーカスを別のコントロールに移した際に0が入力されていないか判定した後に実行してあげる方が不具合が起こりにくい気がします。

でもそうして考えると「TextBox を使う方法」ではなく「NumericUpDown を使用して ValueChanged は利用しない」方がスマートかも知れないですね。。

Helix Core(Perforce)の .NET向けAPIの導入方法 ③

前回に引き続き「Helix Core(旧称 Perforce)」を使ったファイルのバージョン管理の操作を、.NET/C# で制作するWindows Forms Application上で行います。

本記事で解説する内容はこちら。

  • ワークスペースの切断
  • ファイルがワークスペースルートに存在するか判定
  • ファイルがバージョン管理されているか判定
  • ファイルがチェックアウト状態か判定
  • 実装方法の調べ方
  • その他の注意点


今回もまたp4miscさんに随所で助けていただきました(ありがとうございます!)

ちなみにワークスペース名の取得に関してはこちらの記事をご覧ください。

続きを読む

P4 Mini Tool をリリースしました!

Helix Core(旧称 Perforce)」でバージョン管理している開発者向けのシンプルでコンパクトなチェックアウト&サブミットツールです。

f:id:moko_03_25:20200914015442g:plain

開発の動機

開発では基本的にはUE4のようなゲームエンジン上やP4V上でアセットの操作を行うと思いますが、ゲームエンジン外の特定のドキュメント(仕様書やガントチャートやアセット管理リストなど)頻繁に編集する人向けにお手軽なツールを作りたいと思ったのがきっかけです。

あと Helix Core(Perforce)の仕組みを理解したかったのもあります。理解できれば、Pythonを使ってMayaやUE4からの操作も自力で可能になりそうだと思いました。

謝辞

今回、Helix Core の概念からP4コマンド・P4Adimin・P4Vの使い方、またC#での実装に至るまで、かなりの知見を p4miscさんにご教授いただきました。p4miscさん無くしてこのツールは完成していません。ありがとうございました!

ダウンロード方法

実行ファイルとソースコードGitHubにアップしています。

binaryフォルダ内にある「P4MiniTool_v100.zip」にツール本体の実行ファイルが入っていますので、こちらをクリックして飛んだ先の「Download」ボタンからDLしてお使いください。

ライセンスは MIT License です。

使い方は各ボタンにカーソルを置くと表示されるツールチップをご覧ください。
不具合があったらtwitter(@moko_03_25)等でお知らせいただけると助かります!

P4関連で言えば、他にもデフォルトチェンジリストに大量にアセットを残したまま帰宅してしまいがちな人向けにPCシャットダウン前にワーニング出したりできないかなあとか密かに思っています。UE4やP4Vを落とすタイミングで表示する感じですかね。。

P4 Mini Tool の特徴


ワークスペースへの接続

・サーバー / ユーザー / パスワード / ワークスペース名を指定
・起動と同時に接続するよう設定可能

●ファイルのバージョン操作

・ドラッグ&ドロップでファイルを1つだけ指定
・ボタン1つでチェックアウト
・ドロップと同時に自動チェックアウトも設定可能
・ボタン1つでリバート
・ボタン1つでサブミット
 テキストボックス内の文章がサブミット時のコメントに反映されます

使用方法


① ツールを起動したらまずは設定ボタンを押します。

f:id:moko_03_25:20200914142150p:plain

② 接続先の情報を入力します。

f:id:moko_03_25:20200914142159p:plain

③ 接続ボタンを押して接続します(緑になったら成功)。

f:id:moko_03_25:20200914142209p:plain

④ 編集したいファイルをツール上にドロップすると編集ボタンが押せるようになります。
※チェンジリスト作成の都合上、まだチェックアウトされていないファイルを放り込んでください

f:id:moko_03_25:20200914142219p:plain

⑤ 編集ボタンでチェックアウトしてからファイルを編集して、編集終わったら更新内容についてコメントを入力してサブミットボタンでサーバーに反映させます。

f:id:moko_03_25:20200914142228p:plain

以上になります。

更新履歴


・2020.09.14 v.1.00 リリース!

 

作者 / 著作権


moko

動作確認済みのOS


Windows10(64bit)

使用条件


本ツールはOSSオープンソース・ソフトウェア・ライセンス)です。
商用・非商用に関わらず(プライベートでもお仕事でも)ご自由にお使いください。
複製、改変、再配布も自由です。

免責事項


本ソフトウェアは予告なく機能を変更することがあります。
本ソフトウェアは動作環境を満たす全ての環境で正常に動作することを期待していますが、保証はできません。
本ソフトウェアの使用により生じたいかなる損害に関して、作者は一切の責任を負いません。