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

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

C# 画像に選択範囲のような枠線を引く

前回の記事のつづき。
effect.hatenablog.com

よくある「選択範囲」の描画を実装してみた際のメモです。
ラバーバンドと呼ばれるもののようです。
Shiftキーを押している場合は正方形に補正されるようにしています。

f:id:moko_03_25:20200308052820g:plain

考え方としては、カーソルの開始位置と終了位置から4点の座標を出して「DrawLine」関数を4回実行して矩形の破線(枠線)を描画しています。
ボタンでライン描画と矩形ライン描画を切り替えられるようにしているためソースコードが冗長になっていますが、貼り付けておきたいと思います。

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

namespace SampleRubberBand
{
	public partial class Form1 : Form
	{
		public Form1()
		{
			InitializeComponent();
		}

		private void Form1_Load(object sender, EventArgs e)
		{
			// 画像ファイルからImageを作成
			Image img = Image.FromFile("sample.png");

			// 画像を表示
			pictureBox1.Image = img;

			// 画像をバックアップしておく
			backupImage = new Bitmap(img);
		}

		// 変数
		bool quadMode = false;

		Point startPoint;
		Point endPoint;

		Color lineColer = Color.Red;
		int lineBorder = 4;

		Bitmap backupImage;
		Graphics g;
		Pen linePen;

		// マウスダウン時
		private void PictureBox1_MouseDown(object sender, MouseEventArgs e)
		{
			// 座標を保存
			startPoint.X = cursorPos().X;
			startPoint.Y = cursorPos().Y;
		}

		// マウスドラッグ中
		private void PictureBox1_MouseMove(object sender, MouseEventArgs e)
		{
			// ライン描画の場合
			if (quadMode == false)
			{
				// マウスの左ボタンが押されている場合のみ処理
				if ((Control.MouseButtons & MouseButtons.Left) == MouseButtons.Left)
				{
					// Shiftキーが押されていれば直線にする
					if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
					{
						// 比較のためにXとYの移動距離を算出
						int checkPosX = Math.Abs(cursorPos().X - startPoint.X);
						int checkPosY = Math.Abs(cursorPos().Y - startPoint.Y);

						// 角度を算出
						double d = 0.0;

						if (checkPosX != 0 && checkPosY != 0) // 0除算対策
						{
							// 角度を求める
							d = Math.Atan2(checkPosY, checkPosX);

							// ラジアンから度数に変換
							d = d * 180 / Math.PI;

							// ラベルに表示
							label2.Text = d.ToString();
						}

						// XとYのどちらが長いか比較する
						if (checkPosX >= checkPosY) // 横長の場合
						{
							if (40.0 < d && d < 50.0)
							{
								// 座標を取得
								// 開始位置に対して現在位置が正負どちらか判定して処理
								endPoint.X = cursorPos().X;
								endPoint.Y = startPoint.Y +
									(Math.Sign(cursorPos().Y - startPoint.Y) * checkPosX);
							}
							else
							{
								// 座標を取得
								endPoint.X = cursorPos().X;
								endPoint.Y = startPoint.Y;
							}
						}
						else // 縦長の場合
						{
							if (40.0 < d && d < 50.0)
							{
								// 座標を取得
								// 開始位置に対して現在位置が正負どちらか判定して処理
								endPoint.X = startPoint.X +
									(Math.Sign(cursorPos().X - startPoint.X) * checkPosY);
								endPoint.Y = cursorPos().Y;
							}
							else
							{
								// 座標を取得
								endPoint.X = startPoint.X;
								endPoint.Y = cursorPos().Y;
							}
						}
					}
					else
					{
						// 座標を取得
						endPoint.X = cursorPos().X;
						endPoint.Y = cursorPos().Y;
					}

					// 描画
					DrawLine(startPoint, endPoint);
				}
			}
			// 矩形ライン描画の場合
			else
			{
				// マウスの左ボタンが押されている場合のみ処理
				if ((Control.MouseButtons & MouseButtons.Left) == MouseButtons.Left)
				{
					// Shiftキーが押されていれば直線にする
					if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
					{
						// 比較のためにXとYの移動距離を算出
						int checkPosX = Math.Abs(cursorPos().X - startPoint.X);
						int checkPosY = Math.Abs(cursorPos().Y - startPoint.Y);

						// ラベルに表示
						label2.Text = "0".ToString();

						// XとYのどちらが長いか比較する
						if (checkPosX >= checkPosY) // 横長の場合
						{
							// 座標を取得
							// 開始位置に対して現在位置が正負どちらか判定して処理
							endPoint.X = cursorPos().X;
							endPoint.Y = startPoint.Y +
								(Math.Sign(cursorPos().Y - startPoint.Y) * checkPosX);
						}
						else // 縦長の場合
						{
							// 座標を取得
							// 開始位置に対して現在位置が正負どちらか判定して処理
							endPoint.X = startPoint.X +
								(Math.Sign(cursorPos().X - startPoint.X) * checkPosY);
							endPoint.Y = cursorPos().Y;
						}
					}
					else
					{
						// 座標を取得
						endPoint.X = cursorPos().X;
						endPoint.Y = cursorPos().Y;
					}

					// 描画
					Point p0 = new Point(startPoint.X, startPoint.Y);
					Point p1 = new Point(endPoint.X, startPoint.Y);
					Point p2 = new Point(startPoint.X, endPoint.Y);
					Point p3 = new Point(endPoint.X, endPoint.Y);
					DrawQuadLine(p0, p1, p2, p3);
				}
			}
		}

		// マウスアップ時
		private void PictureBox1_MouseUp(object sender, MouseEventArgs e)
		{
			// リソースを解放
			linePen.Dispose();
			g.Dispose();
		}

		// カーソル位置を取得
		private Point cursorPos()
		{
			// 画面座標でカーソルの位置を取得
			Point p = Cursor.Position;
			// 画面座標からコントロール上の座標に変換
			Point cp = this.PointToClient(p);

			return cp;
		}

		// ラインを描画
		private void DrawLine(Point p0, Point p1)
		{
			// 画像のバックアップを取得
			Bitmap canvasBase = new Bitmap(pictureBox1.Image);

			// 描画するImageオブジェクトを作成
			// サイズだけ指定すると無色透明のキャンバスになる
			Bitmap canvas = new Bitmap(pictureBox1.Width, pictureBox1.Height);
			//ImageオブジェクトのGraphicsオブジェクトを作成する
			g = Graphics.FromImage(canvas);

			// Penオブジェクトの作成
			linePen = new Pen(lineColer, lineBorder);

			// 先にバックアップしていた画像で塗り潰す
			g.DrawImage(backupImage, 0, 0);

			// スタイルを指定
			linePen.DashStyle = DashStyle.Solid;
			// ラインを描画
			g.DrawLine(linePen, p0.X, p0.Y, p1.X, p1.Y);

			// PictureBox1に表示
			pictureBox1.Image = canvas;
		}

		// 矩形ラインを描画
		private void DrawQuadLine(Point p0, Point p1, Point p2, Point p3)
		{
			// 画像のバックアップを取得
			Bitmap canvasBase = new Bitmap(pictureBox1.Image);

			// 描画するImageオブジェクトを作成
			// サイズだけ指定すると無色透明のキャンバスになる
			Bitmap canvas = new Bitmap(pictureBox1.Width, pictureBox1.Height);
			//ImageオブジェクトのGraphicsオブジェクトを作成する
			g = Graphics.FromImage(canvas);

			// Penオブジェクトの作成
			linePen = new Pen(lineColer, lineBorder);

			// 先にバックアップしていた画像で塗り潰す
			g.DrawImage(backupImage, 0, 0);

			// スタイルを指定
			linePen.DashStyle = DashStyle.Dot;
			// ラインを描画
			g.DrawLine(linePen, p0, p1); // 上辺
			g.DrawLine(linePen, p2, p3); // 底辺
			g.DrawLine(linePen, p0, p2); // 左辺
			g.DrawLine(linePen, p1, p3); // 右辺

			// PictureBox1に表示
			pictureBox1.Image = canvas;
		}

		private void BtnLine_Click(object sender, EventArgs e)
		{
			btnLine.BackColor = Color.YellowGreen;
			btnQuad.BackColor = Color.FromArgb(127, 127, 127);

			quadMode = false;
		}

		private void BtnQuad_Click(object sender, EventArgs e)
		{
			btnLine.BackColor = Color.FromArgb(127, 127, 127);
			btnQuad.BackColor = Color.YellowGreen;

			quadMode = true;
		}
	}
}

C# 画像にラインを引く際にShiftキーで45度に補正する

前回の記事のつづき。

effect.hatenablog.com

45度に補正する処理を加えました。

f:id:moko_03_25:20200308043127g:plain

考え方としては、まず開始位置から終了位置に向かうベクトルの角度をアークタンジェントatan2)で算出して度数に直しています。
この時、ベクトルを絶対値にすることで360度どの方向でも0~90度でチェックできます。
atanやatan2使用時には0除算対策をしないとエラーが出るので注意。

// マウスドラッグ中
private void PictureBox1_MouseMove(object sender, MouseEventArgs e)
{
	// マウスの左ボタンが押されている場合のみ処理
	if ((Control.MouseButtons & MouseButtons.Left) == MouseButtons.Left)
	{
		// Shiftキーが押されていれば直線にする
		if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
		{
			// 比較のためにXとYの移動距離を算出
			int checkPosX = Math.Abs(cursorPos().X - startPoint.X);
			int checkPosY = Math.Abs(cursorPos().Y - startPoint.Y);

			// 角度を算出
			double d = 0.0;

			if (checkPosX != 0 && checkPosY != 0) // 0除算対策
			{
				// 角度を求める
				d = Math.Atan2(checkPosY, checkPosX);

				// ラジアンから度数に変換
				d = d * 180 / Math.PI;

				// ラベルに表示
				label2.Text = d.ToString();
			}

			// XとYのどちらが長いか比較する
			if (checkPosX >= checkPosY) // 横長の場合
			{
				if (40.0 < d && d < 50.0)
				{
					// 座標を取得
					// 開始位置に対して現在位置が正負どちらか判定して処理
					endPoint.X = cursorPos().X;
					endPoint.Y = startPoint.Y +
						(Math.Sign(cursorPos().Y - startPoint.Y) * checkPosX);
				}
				else
				{
					// 座標を取得
					endPoint.X = cursorPos().X;
					endPoint.Y = startPoint.Y;
				}
			}
			else // 縦長の場合
			{
				if (40.0 < d && d < 50.0)
				{
					// 座標を取得
					// 開始位置に対して現在位置が正負どちらか判定して処理
					endPoint.X = startPoint.X +
						(Math.Sign(cursorPos().X - startPoint.X) * checkPosY);
					endPoint.Y = cursorPos().Y;
				}
				else
				{
					// 座標を取得
					endPoint.X = startPoint.X;
					endPoint.Y = cursorPos().Y;
				}
			}
		}
		else
		{
			// 座標を取得
			endPoint.X = cursorPos().X;
			endPoint.Y = cursorPos().Y;
		}

		// 描画
		DrawLine(startPoint, endPoint);
	}
}

C# 画像にラインを引く際にShiftキーで垂直/水平に補正する

前回の記事の続き。
effect.hatenablog.com

色んなツールで定番の機能として、ラインを引く際にShiftキーを押せば縦または横に真っすぐになるよう補正されるというのがあります。
それを取り入れてみました。

f:id:moko_03_25:20200308032744g:plain

考え方としては、開始位置と終了位置の長さを出して「Math.Abs」関数で絶対値にしてXとYを比較して、Xの方が大きければ横線・Yの方が大きければ縦線と判断して補正してあげます。

// マウスドラッグ中
private void PictureBox1_MouseMove(object sender, MouseEventArgs e)
{
	// マウスの左ボタンが押されている場合のみ処理
	if ((Control.MouseButtons & MouseButtons.Left) == MouseButtons.Left)
	{
		// Shiftキーが押されていれば直線にする
		if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
		{
			// 比較のためにXとYの移動距離を算出
			int checkPosX = Math.Abs(cursorPos().X - startPoint.X);
			int checkPosY = Math.Abs(cursorPos().Y - startPoint.Y);

			// XとYのどちらが長いか比較する
			if (checkPosX >= checkPosY) // 横長の場合
			{
				// 座標を取得
				endPoint.X = cursorPos().X;
				endPoint.Y = startPoint.Y;
			}
			else // 縦長の場合
			{
				// 座標を取得
				endPoint.X = startPoint.X;
				endPoint.Y = cursorPos().Y;
			}
		}
		else
		{
			// 座標を取得
			endPoint.X = cursorPos().X;
			endPoint.Y = cursorPos().Y;
		}

		// 描画
		DrawLine(startPoint, endPoint);
	}
}

C# 画像にラインを引く

C#でPictureBoxに表示している画像上に直線を引きたい場合についてのメモ。

f:id:moko_03_25:20200308025641g:plain

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

namespace SampleRubberBand
{
	public partial class Form1 : Form
	{
		public Form1()
		{
			InitializeComponent();
		}

		private void Form1_Load(object sender, EventArgs e)
		{
			// 画像ファイルからImageを作成
			Image img = Image.FromFile("sample.png");

			// 画像を表示
			pictureBox1.Image = img;

			// 画像をバックアップしておく
			backupImage = new Bitmap(img);
		}

		// 変数
		Point startPoint;
		Point endPoint;

		Color lineColer = Color.Red;
		int lineBorder = 4;

		Bitmap backupImage;
		Graphics g;
		Pen linePen;

		// マウスダウン時
		private void PictureBox1_MouseDown(object sender, MouseEventArgs e)
		{
			// 座標を保存
			startPoint.X = cursorPos().X;
			startPoint.Y = cursorPos().Y;
		}

		// マウスドラッグ中
		private void PictureBox1_MouseMove(object sender, MouseEventArgs e)
		{
			// マウスの左ボタンが押されている場合のみ処理
			if ((Control.MouseButtons & MouseButtons.Left) == MouseButtons.Left)
			{
				// 座標を取得
				endPoint.X = cursorPos().X;
				endPoint.Y = cursorPos().Y;

				// 描画
				DrawLine(startPoint, endPoint);
			}
		}

		// マウスアップ時
		private void PictureBox1_MouseUp(object sender, MouseEventArgs e)
		{
			// リソースを解放
			linePen.Dispose();
			g.Dispose();
		}

		// カーソル位置を取得
		private Point cursorPos()
		{
			// 画面座標でカーソルの位置を取得
			Point p = Cursor.Position;
			// 画面座標からコントロール上の座標に変換
			Point cp = this.PointToClient(p);

			return cp;
		}

		// ラインを描画
		private void DrawLine(Point p0, Point p1)
		{
			// 画像のバックアップを取得
			Bitmap canvasBase = new Bitmap(pictureBox1.Image);

			// 描画するImageオブジェクトを作成
			// サイズだけ指定すると無色透明のキャンバスになる
			Bitmap canvas = new Bitmap(pictureBox1.Width, pictureBox1.Height);
			//ImageオブジェクトのGraphicsオブジェクトを作成する
			g = Graphics.FromImage(canvas);

			// Penオブジェクトの作成
			linePen = new Pen(lineColer, lineBorder);

			// 先にバックアップしていた画像で塗り潰す
			g.DrawImage(backupImage, 0, 0);

			// ドットスタイルを指定
			linePen.DashStyle = DashStyle.Dot;
			// ラインを描画
			g.DrawLine(linePen, p0.X, p0.Y, p1.X, p1.Y);

			// PictureBox1に表示
			pictureBox1.Image = canvas;
		}
	}
}

英語学習のためにプレイしたSteamゲーム(随時更新)

以前にこんな記事を書きました。

今回は、実際に英語学習を兼ねて英語版でプレイしたsteamのゲームをプレイした順にメモっていきたいと思います。

続きを読む

UE4 格子付きモザイクマテリアル | Mosaic Material with Checker Pattern

シェーダーアドベントカレンダー2日目の記事になります。
マテリアル初心者でも簡単に作れる内容です。

This is the post that is the second day of "Shader Advent Calendar".
It is content who make easily even a beginner for making material.


きっかけは Ka-punn(@PunnKa)さんのこちらのツイート。

The event that led to me posting this article was a tweet posted by Ka-punn(@PunnKa).


こちらに対して山中(@serano_vfx)さんもツイート。
1つ目はモザイクマテリアル。

Then, on the other hand, Yamanaka(@serano_vfx) also tweeted.
The first tweet was about a mosaic material.


そして2つ目は格子付きモザイク用のUVの生成。

And the second tweet was about generation UV for mosaic pattern with a checker pattern.


面白い!と思って自分も作ってみました。

I thought "so interested!". So I also tried to make mosaic material with a checker pattern.

まず全体はこんな感じでとてもシンプルです。

First, a whole of the material is very simple as this picture.

f:id:moko_03_25:20191128010410j:plain


Make Mosaic」についての説明です。

タテヨコ何個のブロックでモザイクにするかを「Tile Number」で指定して、UVに掛けます。この画像では8倍していますが、すると0~1のUVが0~8になります。
そして「Floor」で切り捨てると0・1・2‥と整数ごとに平らになり、最後に8で割れば0~1の範囲で8つのブロックが出来上がります。

About the description of "Make Mosaic".

First, set a value depending on a number of blocks in U and V for the mosaic to the parameter "Tile Number". This example is setting to 8. So the gradation 0-1 of UV become 0-8.
Next, Use the "Floor" node, and gradation became flat per integer as 0, 1, 2...
Last, Divided by 8, So It make 8 blocks within 0-1.

f:id:moko_03_25:20191128010416j:plain


Make Checker」の説明です。

「Floor」ではなく「Frac」で小数点だけを取り出すと、0~1のグラデーションを8回繰り返す状態になります。そして「Line Width」で指定した格子の太さと一緒に自作のカスタムノード「PULSE」に繋ぐと横と縦の縞模様ができるので、掛け合わせて格子模様にします。

About the description of "Make Checker".

Take out a decimal point by not "Floor" bat "Flac" node, so it become gradation 0-1 of repeating 8 times. Then the result and a width of a checker who is set the parameter "Line Width" connect to the input of self-made custom node "PULSE". So the horizontal and vertical stripes are created. Then multiply by each other, and it becomes a checker pattern.

f:id:moko_03_25:20191128010421j:plain

このカスタムノードではHLSLの「step関数」を2つ使って「矩形波(パルス波)」を作ることで、簡単に格子模様を作成できます。

This custom node makes "square/pulse wave" using the "step" of the HLSL function twice, So you can create the checker pattern easily.

f:id:moko_03_25:20191128025413j:plain

こちらの記事がとても参考になります。

This article is very helpful.


最後にテクスチャのUVsにモザイクの構成を繋げて、格子模様を掛け合わせたら完成です!

Last, the structure of the mosaic connects to "UVs" of any texture, and multiply the result by the checker pattern, so it's complete!

f:id:moko_03_25:20191128011332j:plain

ただしこのモザイクの作り方だと、ブロックごとにテクスチャの左上の色で塗り潰されます。ブロックの中央の色で塗り潰したいですよね。

そこで「Make Mosaic」では「Floor」と「Divide」の間で0.5を足してあげたらOKです。

However, In the case of how to make this mosaic pattern, It uses a top-left pixel of texture per block for coloring.You want to use a center pixel, don't you?

Then, Add 0.5 between "Floor" and "Divide", So that's OK.

f:id:moko_03_25:20191129002423j:plain

こんなテクスチャを用意してみました。白い点が4つあります。

I made this texture. There are 4 white points.

f:id:moko_03_25:20191129002255j:plain

「Tile Number」を2にすると、真っ白に塗り潰されました。バッチリです!

If I set "2" to the parameter "Tile Number", It's colored completely white. Year, it's perfect!

f:id:moko_03_25:20191129002301j:plain

以上になります!

そして次は@vakさんの記事 "[UE4によるunlit芸のすすめ] ライティング完全無視カレー作ります(カレーではな" ‥です!

That's all!

And the next article is made by vak-san!

シェーダーアドベントカレンダー Advent Calendar 2019 - Qiita vak - Qiita

"「デビルメイクライ5」におけるVFX解説"の感想 | Thoughts of "The Description of VFX on The 'Devil May Cry 5'"

今年の9月にカプコンオープンカンファレンスが東京と大阪で開催されました。

CAPCOM Open Conference was held in Tokyo and Osaka last September.

その際の講演の動画が先日公開されました!
下記URL先から視聴できます。

Then, the videos were public recently!
Please check the URL below, so you can watch them.

忘れないうちに "「デビルメイクライ5」におけるVFX解説" で気になった部分を記事にしておきたいと思います。
今回は英語も頑張って書いてみました。

Before I forget, I wrote this post about "the Description of VFX on the "Devil May Cry 5" that I was interested in, and I also tried hard to write in English.

ちなみにカプコンオープンカンファレンスは全てのセッションが写真撮影とSNSへの投稿どころかビデオ撮影でさえもOKでした。
なので、いくつか動画中のスライドの画像を掲載させていただいています。

By the way, at every presentation of the conference, they allowed not only taking photos and posting to SNS but also taking videos.
So I've posted some slide picture from this video.

講演者はプロダクション部VFXアーティストの相曽さんです。

Speaker is Mr. AISO who is responsible for VFX in the production department.

まず最初にDMC5のエフェクトのコンセプトの話があり、次に"Vertex Animation Texture(VAT)"を使用した液体表現について紹介があります。

First, he talked about the concept of DMC5's VFX.
Next, he talked about the depiction of realtime fluids using "Vertex Animation Textures(VAT)" of fluids.

頂点アニメーションの導入メリットとして「スローなどの時間可変対応がしやすい」と挙げられていますが、流体シミュレーションで利用する場合、毎フレーム頂点IDが変動してしまうことについても触れられています(5:03~)。

He said "it is easy to deal with changing speed when game speed becomes slow" as one of the merit of using VAT.
However, he also refers to changing the indices of vertices per frame in the case of fluids(at 5:03~).

 

●Shaderで解決
"Solved by shader"

f:id:moko_03_25:20191104194727j:plain

その解決法として、シェーダ内でメッシュのノーマル方向にノーマルマップを投影しているということです。
つまり毎フレーム分のノーマルはテクスチャにベイクしているので、そのノーマルに合わせて3方向(6方向?)から凹凸のあるノーマルマップを投影してブレンドしている感じでしょうか。

As one solution, a normal map is projected along the mesh's normal in a shader.
There is a texture that is baked mesh's normal per frame.
So I think a bumpy normal map is projected from 3 or 6 directions with referencing to that normal direction of the mesh.

ゲーム中では、死んだ瞬間のポーズと溶けるアニメーションの開始フレームのポーズが一致していないのでフレームが飛んだみたいに見えることがあってちょっぴり残念ですが、溶けていく感じがとても良く、流体のVATがとても大きな効果を発揮しているのが伺えました。

In this game, it's a bit disappointing that seems to be skipped frames because the pose of death and the pose of the first frame of the melting body does not match.
However, I feel that melting is so good, and VAT of fluids displays working so much.

 

●EffectEditorと連動
"Linking with the effect editor"

f:id:moko_03_25:20191104194731j:plain

まず装備によって時間がスローになるシステムがあること、間欠泉のような表現が登場することから、エフェクトエディタでVATをメッシュパーティクルとして扱えるようにしたという解説があります。
ゲームの再生速度に合わせてエフェクトの再生速度も可変するようにしているのだと思いますが、ここでは「パーツNoを~」と説明されているので、メッシュの連番アニメーション(スライドにはパーツアニメーションと記載されている)が使われているということでしょうか。

First, he talked there is a depiction of geyser, and system of slowing game speed depending on the equipment.
So he said we made the fanction of emitting mesh particles using VAT.
I think... DMC5's effects speed according to the game's speed, and he said "parts number" for the explanation, so it probably uses the animation with consecutive meshes(This page will read "parts animation".).

一点気になったのは、スライド右側の「パターン切り替えとの比較」でパーツアニメが頂点可変ベイクアニメーションと比較されていることです。
その上のスプライトアニメのブレンド有り無しの比較のように「パーツアニメよりVATの方がスロー再生に強いですよ」という説明のように見えるので、「どうやって流体のVATをフレーム補間しているのだろう?」と驚きました。

I have one question.
This page will read on the right "Compared to changing the pattern", and there is comparing the parts animation and baked variable vertex animation.
As the comparing blend animation of sprites and without blend animation above this page, it seems the explanation that VAT is more appropriate at slow speed than the parts animation, so I surprised and I thought "How are the vertices interpolated by VAT(fluids)?".

すでに相曽さんが説明されているようにフレームごとにトポロジだけでなく頂点数自体が変わるため補間は困難という認識です。
どうしたら頂点を補間できるか同僚と話していました。

As Mr. Aiso has already talked about, I'm aware that it's difficult to interpolate because changing the number of vertices and changing the indices of vertices per frame in the case of fluids.
So I talked about this with my co-workers.

結局「きっとスロー時に合わせた長尺のVATを再生速度を可変させているという説明なのだろう」という結論に落ち着きました。
実際どうなのでしょう‥?

In the end, we understood that the explanation is probably just changing animation speed that has many frames for slow speed.
Is it correct?

 

●Shaderによる頂点アニメーションの動き 作例
"Moving of vertex animation by shader | for example"

近年、様々な場面でVATの作例を見かけますが、さすがカプコンさん、絵作りが良いためとても効果的に使用されているように思えます。
この黒いイエローデビルのような敵(かっこいい!)のねじりながら引っ込んだり出てきたりする動きがとても良い感じ。。

Lately, I can see various examples of VAT at various scenes, but that's so CAPCOM, everything has great looks and seems to be used effectually.
This black enemy as a Yellow Devil(that's cool!) moves with twisting motion is so nice.

 

●Shaderで変化を表現
"Depiction of changing by shader"

キャラクター自体にディゾルブのためのマスクテクスチャが用意されていて、非常に凝った変身演出になっていて素敵です!

The main characters have mask textures for dissolving, and the transformation performance is so detailed. It's wonderful!

 

●メッシュエミッターで情報量UP
"Increasing details by mesh emitter"

f:id:moko_03_25:20191104194735j:plain

毎フレームスキニングされるスケルタルメッシュからパーティクルを出しつつさらにディゾルブ用マスクをサンプリングしているというのは非常に重そうですが、パフォーマンス軽減としてキャラクターのLODモデルを使用可能にしているというのは良いアイデアですね!

It seems that processing is so heavy because it is sampling mask textures for dissolving while emitting particles from skeletal mesh skinned per frame.
However, It can decrease that processing by using the LOD model of that character.
It's a great idea!

キャラクターの消滅にきっちりと位置を合わせてパーティクルを発生させたいと誰しも一度は思ったことがあるはず‥!
そしてスライドの敵が消滅する動画からは素晴らしい効果を生んでいる様子が伝わります。

Anyone should think that I want to emit particle from the accurate position on the surface of dissolving character once in my life...!
Then, I felt it works wonderfully by the video of dissolving the enemy on slide.

 

●真魔人化/ゆがみ表現で環境変化を表現
"Transfrome to Gradely Deamon / Depiction of changing environment by distotion"

f:id:moko_03_25:20191104194739j:plain

ここは自分の理解が足りていないのですが、カメラに球体モデルをアタッチして、そのモデルにシーンカラーを歪めたシェーダを適用しているという感じでしょうか。
その際にシーンデプスも参照して指定距離から奥にのみ歪ませている(フェードする幅も持たせている?)感じでしょうか。
勘違いも含まれているかも知れませんが、しかし非常に面白いアイデアですね!

I may have misunderstood, but...
First, they constrain a sphere model to the camera.
Next, they apply the shader that has distorted scene color to that model.
It may refers the scene depth then, and it distorted only from the specified distance to the back.
(Is there also a specified width for the fading strength of distortion? Is it correct?)
What a really interesting idea!

シーンカラーを歪ませる際に、そのシーンカラーは半透明オブジェクトが描画される前のものなのか後のものなのかが気になりますが、前の場合だとしたら球体モデルの奥にある半透明オブジェクトがシーンカラーには含まれず、球体モデルで隠れてしまいそう。そのあたりはうまくいくような形に落とし込まれてるのでしょうね。

When the scene color is distorted, I want to know which timing is actually, before drawing translucent objects or after.
If it's before that and translucent objects are behind the sphere model, the scene color doesn't include that translucent objects, so the sphere model may hide that translucent objects.
They must have solved the problem, but how have they solved that?

面白いなあと思ったのでUE4で軽く試してみました。

I thought it's so interesting, and I tried it on Unreal Engine 4.

f:id:moko_03_25:20191104194659g:plain

レベルに球体モデルを置いて、マテリアルを適用しました。
カメラから離れたピクセルほど歪みが強くなるようにしています。

I put a sphere model on a level, and apply one material. 
The more distant pixels are from the camera, the distortion increases.

f:id:moko_03_25:20191104194715j:plain

このマテリアルはかなり適当な構成です。

This material is a sloppy structure.

f:id:moko_03_25:20191104194720j:plain

UE4のマテリアルでシーンカラーを利用するにはブレンドモードを半透明にする必要があります。

You need to set "Translucent" to the property "Blend Mode" if you want to use Scene Color on the materials of UE4.

f:id:moko_03_25:20191104194723j:plain

マテリアルインスタンスのパラメータはこのような感じです。

The parameter of the material instance looks like the above picture.

 

●その他Shaderによるゆがみ表現
"Depiction of distortion by other shaders"

f:id:moko_03_25:20191104194744j:plain

かっこいいですね!
さらにVATと組み合わせたならば切られたメッシュがめくれていくようにもできますし、十字のマスクをアニメーションさせても良いですし、色々と応用が効きそうですね。。

It's so cool!
Besides, we can depict gradually flip meshes by using VAT, and we can animate a cross-shaped mask texture. We can probably be widely applicable to various cases by using this technique.

 

●その他Shaderによる物体/環境変化
"Changing the environment/objects by other shaders"

f:id:moko_03_25:20191104194645j:plain

こちらに関してはUnityで同じようなことを試されている方の記事を同僚に教えてもらったのでこちらでも紹介しておきたいと思います。

For this explanation, my co-worker told me a posted article written by one engineer that tried as before.
Please check the URL below.

斬撃跡の幅に合わせた狭い範囲でデカールを投影しているような見た目ですが、それだけではキャラクターの動きに追従しないのでちゃんとUVマッピングする必要がある訳ですね。
なので攻撃がヒットした最初のフレームでベイクして、その後は毎フレームベイクし直す必要は無いので、コストパフォーマンスも良い感じでしょうか?

It looks like a projected decal at narrow width depending on slashed trail by sword.
However, It can't follow the character's moving by only that, so It requires UV mapping properly.
To summary, It bakes at the first frame when hitting an attack, and it doesn't need to bake again after that, so It seems that performance is reasonable.

バイオ2reやバイオ7でも使われていたということなので、3年前にはすでに実践されていた手法のようですね。
(バイオ7ってもうすぐリリースして3年になるのですね‥!時間が経つのが早すぎる。。。)

He talks this technique was also used in "BIOHAZARD 7" and "BIOHAZARD RE:2". In other words, I can say they had already practiced it more than 3 years ago.
(Wow! It's been such a long time since BIOHAZARD 7 released...! Time passes by so quickly...)

 

●Expressionによる効率化
"Improve work efficiency by Expression"

f:id:moko_03_25:20191104194650j:plain

「Extern」についてはモンハンワールドの講演でも登場していましたね。

"Extern" was also explained in the plesentation of "MONSTER HUNTER WORLD".

非常に便利なように思います。
例えばパーティクルの発生範囲を大きくしても、パーティクルの密度が変わらないようにしてあげたりとか、剣の軌跡のようなトレイルの長さに応じてUVのタイリング数を変えてテクスチャの密度が変わらないようにしてあげたりとか、様々な応用が効くと思います。

I think it's so useful.
For example, they can keep a constant density of particles even if the range of emitting particles scales up, and they can keep a constant resolution of texture even if it changes the UV scale of the trail of slash, and so on.
They can apply this to various cases.


カプコンオープンカンファレンスの講演はどれも見所が沢山あり、非常に参考になりました!

All presentation is plenty to see, and really informative!

英語学習「Legend of Grimrock 2」をプレイ&クリア

Legend of Grimrock」はsteamでリリースされている、ファンタジーな世界を舞台にしたダンジョン探索RPGです。そしてその続編である2をプレイしてクリア(約30時間)。

このシリーズはグリッド状に区切られたマスを移動する形で探索するゲームですが、時間はリアルタイムで経過して敵も動き回るし、お腹が減っていくといった概念があったりと「ダンジョンマスター」ライクなゲームシステムになっています。

アイテムを投げたりルーンの組み合わせで魔法を唱えたりなど、多くの要素がダンジョンマスターから取り入れられているようです。

前作はダンジョンをひたすら潜っていく感じでしたが、ギミックと謎解きが詰まっていてクリアまで非常に楽しく遊べました。ラスボス戦もシチュエーション含めテンション上がりましたよ。

そしてその後は続編をずっと心待ちにしていたのですが‥

2がリリースされた際にマップが屋外ベースになったことでテンションがガクっと落ちました。というのもはるか昔に「Wizardry 6」をプレイした際に、屋外ベースになって新しい種族やジョブが追加された全く別物のそれは、それまでのWiz好きの自分の肌に完全に合わないものだったからです。

本作も屋外ベースになり新しい種族やジョブが増えて‥と「Wizardry 6」を彷彿とさせるバージョンアップ内容になっていて、手を出すのを控えてしまったのを覚えています。。

で、2には手を出さずに随分と経ってしまっていたのですが、英語の学習を始めたことで何かしらゲームを英語でプレイしたいという衝動に駆られ、色々なsteamのゲームをチェックしている中で本作が良さそうに思い、今になってようやくプレイに至ったという訳です。

 

クリアしてみての感想


Normalモードで一度クリアしたのみではありますが、ノーマルエンドとトゥルーエンド両方とも確認しました。その感想としては大変満足のいくものでした!屋外探索も楽しかったし、特に単調でストレスに思える水中探索が意外にもとても楽しかった。

英語が分からなくても遊べますし、英語を学習するにもとても手頃に感じました。

オススメです!

ただし今作の謎解きは難しく‥英語が分からないと厳しいものも当然ありますが、そもそも英語が分かったところで「わかるかー!」というものも多かったため「これ以上先に進めない‥」と詰まったらYouTube等で調べました。そんな感じのスタンスでも良いと思います。

細かい不満点も色々ありはするのですが、大半はご愛敬といった感じでしょうか。
(前作をプレイした身なので、開始直後から全ての壁をチェックするプレイとなり大変面倒ではありましたが、おかげで隠しボタン系のシークレットはほとんど逃さずに済みました。このあたりは何とかして欲しい部分ではあります)

▼エンディング直前のプレイ統計。secrets は4つ残ってますね。。

f:id:moko_03_25:20191021030647j:plain

 

英語学習的にどうだったか?


このシリーズはNPCとの会話イベントのような要素はありません。

では英文がいつ登場するかというと、主なタイミングは以下のような感じです。

●キャラクターメイキング時の説明文
 種族、ステータス、スキル等の説明

●ゲーム中に拾ったアイテムの説明文
 効能の説明 + フレーバーテキスト、または手紙のような文章

●ゲーム中に何かオブジェクトに触った時のメッセージ
 世界観を補間するもの、または謎解きのためのもの

プレイしていると新しいアイテムはそこそこの頻度で登場するものの短い文章ではあるので、英訳しながらでも疲れない程度であり、丁度良い物量でした。

ゲームがリアルタイムに進行するといってもEscキーでメインメニューを表示するとゲームにポーズがかかるので、アイテムを拾ったりメッセージが表示されたらスクショを撮っては貼り付けてゲームを一時停止し、頑張って読んでみて、分からなければGoogle翻訳で音声を訳を確認、知らない単語は英辞郎Webで調べ、知らないフレーズはググって解説記事を読む‥というのを繰り返しました。

この作業が無ければプレイ時間も20時間切ってるのではと思います。

そして調べたものはエクセルに貼り付ける‥といった感じです。

f:id:moko_03_25:20191021030628j:plain

いやはや、ほぼ全ての文章に分からない単語&フレーズが存在しました。つまり、文章を読んでみてネットで何も調べなくて済むことはほぼ無かったということです。

とにかくまだまだ単語力が圧倒的に足りないと痛感します。

ちなみに、すでに知っていて何となくイメージは頭に浮かぶカタカナ英語の武具やアイテム名なんかも沢山出てくるのですが(カジェル・スタッフ・ワンド・セプター・ハープーンなど)、正確な意味を知らないので調べました。

ただ‥ファンタジーRPGなので、日常会話に登場しない単語が数多く登場します。

例えばお墓関係の名詞だけでも「burial (埋葬, 墓所)」「catacombs (地下墓地)」「crypt (遺体安置所)」「mausoleum (墓, 霊廟)」「tomb (墓地, 霊廟)」と色々出てきます。

「embalming (防腐処理)」なんて知らなくても良い&忘れても良い単語ですよね。。

とまあそんな感じなので、メモったは良いもののすぐにでも忘却してしまいそうですが、英文に楽しく触れながら色んな発見を得ることが大事だと思うので、実施してみてとても良かったと思っています。

で、例によってメモった単語を挙げてみます。

名詞


140個。

abode 住居, 滞在, 住所
accuracy 精度, 正確さ
ally 味方, 同盟, 協力者, 同族
ambassador 大使
ancestor 先祖, 祖先, 原種, 原型, 先駆者
annals 年代記, 歴史, 史実
arrival 到着
ascension 上昇
betrayal 裏切り, 密告, 背信
blacksmith 鍛冶屋
blow 打撃, 一撃
bog
brace 留め具, 装具
breeze そよ風, 楽な仕事
bud つぼみ, 芽生え, 新芽
burial 埋葬, 墓所, 葬式, 墓
cache 隠し場所
catacombs 地下墓地
chamber 部屋, 応接室, 会議場
champions 戦士
chant 詠唱, 聖歌
conjure 手品師
constitution 規約, 構成, 気質/体質, 形成
cord 紐, より糸, コード, ズボン, 筋
crypt 穴蔵, 地下室, 遺体安置所
cudgel こん棒
cuisse (甲冑の)もも当て
curse 呪い, 呪文, 不幸の元凶
decay 腐敗, 衰え, 減衰
dexterity 器用さ, 熟練
disease 疾患
diviner 占い師
duality 二重性
element 要素
embalming 防腐処理
enchantment 魔法(をかけること/かかること), 魔力, 魅力
enlightenment 啓発, 啓蒙
entanglement もつれ, 絡み合い
envoy 使者, 代理人, 大使
eon 10億年, 永劫
equilibrium 均衡, 落ち着き(感情の安定)
essence 本質
ether エーテル
evasion 回避
excretion 排泄, 糞尿
exile 国外追放, 亡命
existence 存在, 生存, 生活
famine 飢饉
figure 形, 外観, 図, 図式, 姿, 人物, 肖像, 数字, 数量
fingertip 指先
flurry にわか雪, 疾風, 突風, 通り雨, 動揺, 興奮
foe
forge 火事場
fragment 断片, 欠片
frostbite 凍傷
glutton 食いしん坊, 大食い
gumtree ゴムの木
hamlet 集落
harpoon
hue 色合い, 色彩
immunity 免疫, 免除, 免責, 耐性
individual 個人, 人間
ingredient 成分, 材料
irritation 炎症
journal 日記, 日誌, 議事録, 航海日誌
lair 巣, 穴, 隠れ家
larvae 幼虫
limb 手足, 翼, ひれ, 大枝
load 荷重, 重さ, 負担, 負荷, 処理量
lunge 突き
mankind 人類, 人間
maul 大きい斧
mausoleum 墓, 霊廟
measurement 寸法, 計測
mechanism 機械, 装置, 構造, 働き, 方法, 過程, 作用
meditation 瞑想
mercenary 傭兵
mold 型, カビ
myth 神話, 伝説的人物, 虚構
nature 自然, 本質, 気質, 本物
nectar 花の蜜
offering 申し出, 提供, 贈り物, 捧げもの, 生贄
opponent 敵(相手)
path 道, 進路
patience 忍耐, 辛抱強さ, 根気
permanency 普遍性, 永続性, 永続的なもの
pilgrim 巡礼者, 放浪者, 最初の移住者
plague 大災厄, 伝染病
possession 所持, 占有, 所有権, 財産, 所有物
predecessor 前任者, 先行したもの
presence 存在, 出席
proficiency 熟練, 技量
prong (フォークのような)先端の尖ったもの, 枝分かれしたもの
provision 食べ物, 条例
pulsating 脈動
rash 発疹
realm 領域, 範囲, 分野, 部門, 王国
remain 残り物, 遺作, 遺跡, 遺体, 遺骨
reservoir 貯水池
riddle
rite 儀式, 式典
ritual 儀式, 祭祀
riverbed 河底
rogue ローグ, ならず者
sacrifice 捧げもの, 犠牲, 放棄
sage 聖人
scepter (王を象徴する)杖, しゃく
seafaring 船乗り, 船旅
serpent 蛇, 悪魔, 悪意のある人
sewer 下水道
shard 欠片
shore 岸, 海岸, 支柱
shrine 聖堂, 祭壇
simulacrum 像, 肖像, 面影, 心象, 幻影
sleet みぞれ
spike
spire 尖塔, らせん
starvation 飢え, 餓死
stonemason 石工
successor 継承者, 代わりの者
talismans 魔除け, タリスマン
testament 証, 証拠, 遺書, 聖書, (神との)契約
thread 糸, 衣服, (話の)脈絡
timepiece ストップウォッチ
tingle ピリピリする痛み, ゾクゾクする興奮
tip 情報, 先端
tomb 墓地, 霊廟, 墓石
tome 学術書, 研究所, 一巻
trait 特性
treetop
tribesman 部族の男
vault 金庫, 貴重品保管室, アーチ型の天井/部屋/地下墓所
vessel 船舶, 大型船, 体内の管, 血管, (飲み物を入れる)器, (器としての)人
vial 小瓶
victim 被害者, 犠牲者, 餌食
wearer 着用者
weed 雑草
will 意思, 意向, 態度
wound
wrath 激怒, 天罰, 復讐, 報復

 

動詞


90個。

accustom 慣らす, 習慣付ける
act 行動する, 振る舞う, 作動する, 演じる
adorn 飾り付ける, 塗る, より魅力的にする
associate 結び付ける, 連想する
beware 注意する
burden 荷物を積む, 運ばせる, 責任を負わせる
bury 埋める
cause 引き起こす
cease 終わる, 止む, 停止する
channel (良い方向へ)導く
claim 主張する, 断言する, 要求する
cleave / clove / cloven 割る, 割く, 貫く
consume 消費する
contain 含む, 収容する, 封じる
crack 割る, 破る, 押し入る
crawl 這う, のろのろ進む, 媚びへつらう, (恐怖などで)鳥肌が立つ
crumble [自] 粉々に砕ける, 崩壊する [他] ~を砕く
deal / dealt / dealt 食らわせる
demand 求める
design 考案する, 計画する, 設計する, ~の意図で作る
determine [他] 決心する, 決心させる, 決定する, 見つけ出す, 特定する, 終結させる
disembowel ~を解体する, ~から臓物を取り除く
disguise 変装させる, 隠す, 偽装する
disrupt ~を中断させる, 邪魔する, 混乱させる
disturb 邪魔をする
embed 埋め込む, 組み込む, はめ込む
encounter 出逢う, 遭遇する
endue [他] 授ける, 与える
engrave 刻む, 彫る, 深く刻み込む
enhance 高める, 向上させる
enlighten 教えを導く, 啓発する
enter 入る
equip 備える
esteem 高く評価する, 尊重する
feed / fed / fed 食物を与える, 養う, 搬送する
fizzle シューと音がする, 失敗に終わる
flourish 花開く, 繁栄する, 蔓延する
flutter はためく, 揺れる, 震える
freeze / froze / frozen 凍らせる
fuse 溶かす, 融合する
glance ちらちと見る, 煌めく
grant 与える
grant 承諾する, 与える, 聞き入れる
hallow 神聖化する
imbibe 飲む, 吸収する, 受け入れる
imbue 染み込ませる
infest はびこる, 出没する
inscribe 刻み込む, 彫る
invent [他] 発明する, 考案する, でっちあげる
load 乗せる, 担がせる, 装着する, 投入する
negate 無効にする, 否定する
observe 観察する, 見学する, 監視する, (法を)順守する
perish 滅びる, 死ぬ
permeate 充満する, 浸透する
pierce 突き刺す, 貫く
place 置く, 取り付ける, 認識する
prevent 防ぐ, 止める, 阻む
proceed 進む, 出向く
pulsate 脈動する, 振動する
radiate 輝く, 放射する
reflect 映す, 照り返す
refurbish 改装する, 一新する
refuse 嫌がる, 拒む
repurpose (既存のものを別の目的で)使う
require 必要とする
resemble ~のようだ, ~に似ている
reside 住む, 存在する, 宿る, 属する
resonate 鳴り響く, 響き渡る, 共振する
restore 引き戻す
reveal 見せる, 公開する, 明らかにする, 啓示する
rise / rose / risen 立ち上がる, 起きる, 上る, 増える
roam 散策する, 放浪する
rumble ガラガラ通る, ゴロゴロ鳴る, グーグー鳴る
scribble 落書きする, 殴り書きする
seduce 誘惑する, 口説く
seek / sought / sought 探し求める, 向かう
seep 染み出る, 浸透する, 漏れる
sense 感知する, 気付く
shatter 叩き割る, へし折る
sizzle シューシュー音を立てる
spare 取っておく, 割く, 手放す, 見逃す, 分け与える
strengthen 元気づける, 高める, 強化する, 向上させる
stride 大股で歩く, またぐ, またがる
symbolize ~を象徴する, ~を記号で表す
tear / tore / tone 引き裂く
transmute [自] 変わる [他] ~を変える
tread / trod / trod, trodden 歩く, 踏む, 踏みにじる
unleash 爆発させる, 解き放つ, 引き起こす
weave / weaved, wove / weaved, woven 織る, 編む, 組み上げる
wield 巧みに使う, 振るう, 及ぼす

 

形容詞


85個。

aquatic 水の, 水中の, 水生の, 水辺の
arcane  難解な, 一部の人にしか理解できない
arcane  難解な( 一部の人にしか理解できない, 門外漢には理解し難い)
bloated 膨張した, 肥大化した, 慢心した
brief 束の間
bulky 大きい, 分厚い, かさばった, ごわごわした
ceremonial 堅苦しい, 儀式用の
common 一般的な, 公衆の, 日常的な, どこにでもいる, 並の, 共通の
daring 大胆不敵な, 向こう見ずな
detrimental 有害な
devastating 壊滅的な
devastating 破壊的な, 壊滅的な, 圧倒的な, 辛辣な
devious 巧妙な, ずる賢い, 曲がりくねった
effective 効果的な
elastic 伸縮する, 弾力のある
enjoyable 楽しめる, 楽しい
extreme 最も遠い, 最も高い, 極度の, 行き過ぎた, 徹底的な, 危険をはらんだ
faint 淡い, 微かな
faint 朧げな, 微かな, 淡い, 弱弱しい
favored 指示された
feathery 羽の生えた, 羽のような
fine 細かい, 緻密な
fragrant 香しい, 香ばしい
frustrated 挫かれた, 失望した, 苛立った
heroic 英雄的な, 壮絶な, 健気な
hopeful 頼もしい, 期待している
horned ツノのある
humble 謙虚な, 謙遜する, 慎ましい, (身分が)低い, 粗末な
immortal 不死身の
inaudible 聞き取れない
inhuman 非人間的な, 怪物のような, 人が使えない
intricate 入り組んだ, 複雑な
keen 鋭い
lone 孤独な
massive 巨大な, 非常に重い, 極めて多い, 圧倒的な
measuring 計測用の
minor 小さい, 大した事ない
monumental 記念碑の, 非常に大きな, 歴史的価値のある, 途方もない
musty カビ臭い
nasty 不快な, 意地の悪い, 扱いにくい
nimble 素早い, 鋭敏な
nimble 速い, 機敏な, 鋭敏な
numerous 数々の
numerous 多数の, 数えきれないほど多くの
obedient 従順な, 素直な, 服従する
ominous 脅迫的な, 不吉な
opposing 対立する, 正反対の
perilous 邪悪な, 危険な
petrified 石化した, 茫然自失状態で
poignant ひどく痛む, 痛恨の, 辛辣な, 心を打つ, 強烈な
potent 強力な, 効能のある
precious 貴重な
putrid ひどい, くだらない
randomly ランダムに, 無作為に
reliable 頼もしい, 信頼できる
remaining 残っている
ruthless 無慈悲な, 凶悪な
sealed 知られていない, 封印された
searing 焼け付くような, 力強い
sentient 知覚できる, 感情で理解する, 意識を持つ
serrated 鋸歯状の
several 数個の, 一部の, それぞれの
soothing 落ち着かせる, 心地良い, 和らげる
splendid 素晴らしい
stinging 強く刺すような, 猛烈な
sturdy 丈夫な, 逞しい, 勇敢な, 不屈の
suitable 適切な
sunken 沈んだ, 沈没した, くぼんだ
surrounding 周囲の
tattered ボロボロ, ずたずたの
thick 太い, 濃い, 深い
thin 細い, 薄い, 希薄な
trained 訓練を受けた, 熟練した
tribal 部族の
unbeatable 無敵の, 強力な
uncanny 異様な, 不可思議な, 正確な
undefeatable 難攻不落の, 無敵の, 強力な
unholy 祝福されていない, 不浄の
uninterrupted 途切れない, 連続した, どこまでも続く
unrecoverable 取り戻せない
venomous 毒々しい
vicious 悪質な, ひどい
vicious 意地の悪い, 悪意のある, 不道徳な, 危険な, 凶暴な, 欠点のある
void 空っぽの, 役に立たない, 無効の
worthy ~に値する, 尊敬すべき

 

副詞 / 接続詞


19個。

apart 離れて, バラバラに, 別々に
commonly 一般的に
deadly 致命的な, 死を思わせる, 完全な, 非常に正確な
deathly 死(人)のような, 死ぬほど(形容詞も同じ)
directly 直に, ただちに
entirely 全く, 完全に
forth 前方へ, 先へ, 外部へ, ~以後
forward 前へ, 将来へ
gradually 徐々に
hence それ故に, したがって, 今後
massively とてつもなく, 大規模に, 飛躍的に
masterfully 優れた技量で
merely ただ単に, に過ぎない
permanently 永続的に
precisely 正確に, 詳細に, 明確に, まさに
though (副詞) ~だけど / (接続詞) ~にも関わらず, 例え~でも
unnaturally 不自然に, 異常なほど
utterly 完全に, 徹底的に
widely 幅広く, 広範囲に渡り, 大いに

 

代名詞


2個。

whence  その場所
thee 汝, そなた

 

前置詞


8個。

against ~に反対して, ~に逆らって
among ~に囲まれた, ~の間の, 中にいる, 共通した
beneath の下で
beyond を越えて, の彼方に
despite ~にも関わらず
towards に対して, に向かって
underneath の下に, の表面下に
upon の上に, ~上(upon a contract = 契約上)

 

フレーズ


40個。簡単な単語の組み合わせでも「そうなんだ!」と思うものが色々と。

a series of ~ 一連の~
be aware  知っている, 気付いている
can't make heads nor tails of ~が何だかさっぱり分からない
https://catherin.at.webry.info/201008/article_1.html
close combat 接近戦
common sight  ありふれた光景, よく見かける
Don’t let it get to you. ま、気にするなよ
https://nic-english.com/phrase/dont-let-it-get-to-you/
don't need to concern yourself あなたには関係無い(あなた自身、関与する必要は無い)
https://eigobu.jp/magazine/concern
eons ago 大昔に
even though ~にも関わらず~
https://eigobu.jp/magazine/even-though
fall apart ひっくり返る, バラバラになる, 崩壊する
figure it out 計算する => 解決する
for a while しばらくの間
from a distance 遠くから
get this far こんなに遠くまで来る=ここまで成し遂げる
go back and forth 行ったり来たりする
hand-to-hand combat 白兵戦
hear ya (ya=you) 言いたいことは分かる
hold down 押さえる, 組みつく
in search of ~ ~を探し求めて
It depends on you あなた次第だ
https://eigobu.jp/magazine/it-is-up-to-you
lay on 置く, 用意する, 傷付ける
let it go to one’s head うぬぼれるな, 調子に乗るな
https://www.eigowithluke.com/let-it-go-to-ones-head/
light source 光源
like no other 他には無い, 唯一無二の
living tissue 生きている(生体)組織
made out 作り上げる
make it this far ここまでやり遂げる
naked eye 肉眼, 裸眼
night falls 夜になる
of them all 全ての中で~
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11146257491
on one's way out ~ ~を出る途中
on one's way to ~ ~へ行く途中
over my head チンプンカンプン
https://www.bizmates.jp/bizmates-ch/for-beginners/point-216-over-my-head.html
over time 時間とともに
point out 指示する, 指摘する
right off すぐに, 直ちに
stand on your way あなたの行く手を遮る
step aside 脇へ寄る=身を引く
way out 出口, 脱出方法, 解決法
Why not ~ なぜ~しないのか?, もちろん~する, ~してみては?
https://nexseed.net/blog/why_not/

以上です!

モンスターズ・パーティに登場する英語

Pixarのショートムービー「モンスターズ・パーティ (Party Central)」に登場した英文の中から分からなかったものを調べてみました。

ちなみにこの作品は 5分 ちょっとのかなり短いものです。
それでも、分からないところを調べながらだと1時間くらいかかりました。

fashionably late

 ファッショナブルに遅れる = "粋" なようにわざと遅れる
 留学用語集【fashionably lateってどういう意味?】 | 留学くらべーる

face it

 これに向き合え = 現実を見ろ
 「フェイス」から学ぶ→ Let’s face it. | GirlLish | 知っている英語から学ぶ、使える素敵な英語フレーズ!

frat party

 frat = fraternity ( 友愛 / 友好 )
 俗語としての意味もある様子です
 えいご1日1語: frat party

that is why ~

 (前述の会話に対して)「だから~だ」
 超簡単!This is whyとThis is becauseの違いとは?これが誰でも分かる使い分けだ! | まこちょ英語ブログ

throw rug

 「小型の敷物」のことのようです
 "Beach Ball to Throw Rug." は "こちらビーチボール、スローラグ応答せよ" 的な
 throw rugの意味・使い方・読み方 | Weblio英和辞書

in position

 「適切な位置」のことのようです
 "in position"の意味・使い方|英辞郎 on the WEB:アルク

is a go

 「ゴー」「実行だ」ということのようです
 It's a go. 日常生活、仕事などのどのようなシチュエーションで使用... - Yahoo!知恵袋

What's going on?

 What are you doing now? と同じ意味で「何してるの?」
 「What's going on?」の意味と3つの使い方!返事の仕方も解説します | 英語部

throw a party

 「have a party」同様に「パーティを開く」という意味になるようです
 パーティを投げる?Throw a Party? | 植田英語英会話便り

is eyeing

 「eye」を動詞で使うと「じろじろ見る」となるようです
 ニューヨーク駐在英語 : 金曜日はH系アメリカンジョークの日(笑)

eyeballs right at me

 rightは動詞で「眼球が真っすぐ私を向いている = こっちを見てる」でしょうか

snore(スノア)

 いびきをかく

make out

 日本語字幕だと「イチャついている」と訳されてますね
 下記の記事 ”情熱的なキスやハグをする際に使うスラングでもあります" とのこと
 make outの意味とは、通常の使い方とスラングの使い方 - 英語 with Luke

righteous(ライチェス)

 すごい、素晴らしい、という意味もあるようです
 righteousの意味 - goo辞書 英和和英

it's working

 「うまくいってる」
 簡単ワンポイント英会話 vol.67 「うまくいった!」 : Vector International Academy

lame(レイム)

 「ダサい」「退屈だ」というスラングだそうな
 スラング「lame」の意味と使い方 | 英語部

hi there

 挨拶で馴染みのあるこちらの「there」って何?‥と思ったら解説が!
 "Hi there" の意味は? "there" って何? | 日刊英語ライフ

pledge(プレッジ)

 「誓う」「契約する」「保証する」という意味のようです
 入会すると訳されていますね

いやはや、英語の難度的には易しい作品だとは思うのですが、それでもまだまだ調べながらじゃないと観れなくて、そうすると5分くらいのボリュームが丁度良い!です。

英語学習向けのSteamゲームは?

英語学習に良さそうと思って目をつけたものをメモがてらまとめてみます。

本記事はちょっと情報が古いですが、その後に実際に英語でプレイしたゲームはこちらの記事で紹介していますので、こちらの方が参考になるかも知れません。

 

続きを読む