rn.log

備忘録など

GitBookでWebサイトを作ってGitHub Pagesで公開する方法

はじめに

制作物をまとめた簡素なポートフォリオを作ってみました。

rngtm.github.io

今回のWebサイト、GitBookを利用して作成しています。
GitBook - Document Everything!



今回はGitBookを使用したWebサイトの作り方を紹介します。
そして、作ったWebページをGitHubPagesとして外部に公開する方法も解説したいと思います。


GitBookでWebサイトを作るまで

下のようなテキストファイルから...
f:id:r-ngtm:20200618103126p:plain:w400 f:id:r-ngtm:20200618103154p:plain:w400



以下のようなWebサイトをコマンド一発で生成します。
f:id:r-ngtm:20200618102945p:plain:w350

必要な知識

gitbookで作成したWebサイトを外部へ公開したい場合、以下の知識が必要になります。
1. PowerShellなどのコマンドラインツールの使い方(gitbook実行に必要)
2. Markdownの書き方(Webページを編集するときに必要)
3. Gitの知識(GitHubPagesを使うと、作ったWebページを外部へ公開できます)


GitBookの導入(Windows 10)

Windows 10 で GitBookを使えるようにするまでの手順を紹介します。


npm をインストール

GitBookを使うためには npm というものが必要になります。
公式サイトのインストーラを使ってインストールしましょう。

nodejs.org

f:id:r-ngtm:20200618111435p:plain:w450

インストールが完了すると、PowerShellからnpmコマンドが使えるようになっているはずです。(PowerShellでコマンドを実行してます)
f:id:r-ngtm:20200618111230p:plain:w450




gitbookのインストール

以下のコマンドを実行し、gitbookをインストールします。

npm install -g gitbook-cli


インストールが完了すると、gitbookコマンドが使えるようになるはずです。
f:id:r-ngtm:20200618111844p:plain:w450




Webサイトのひな型作成

gitbookを使ってWebサイトのひな型を作成します。

Webサイト用フォルダの初期化

Webサイトのファイルを置きたいフォルダの中で、以下のコマンドを実行します。

npm init


フォルダを見るとpackage.jsonができていることが確認できます。


f:id:r-ngtm:20200618112333p:plain

Webサイトのひな型の作成

以下のコマンドを実行します。

gitbook init



README.mdと、SAMMARY.mdが作成されます。
f:id:r-ngtm:20200618112616p:plain

これらがWebサイトの元データになります。

Webサイトをローカル表示してみる

以下のコマンドを実行してみます。

gitbook serve


f:id:r-ngtm:20200618113512p:plain

Webブラウザhttp://localhost:4000 へアクセスすると、たった今作成したWebページをプレビュー表示することができます。
f:id:r-ngtm:20200618113651p:plain


Webサイトの元データ

README.mdやSUMMARY.mdを編集することで、Webサイトを編集することができます。
また、Webページを新たに追加したい場合はmdファイルを増やします。

README.md の中身

見出し文字(Introduction)だけが入っています。

# Introduction

README.md はWebサイトで最初に表示されるWebページを記述するためのテキストファイルになります。

SUMMARY.md の中身

見出し文字(Summary)と、README.mdへのリンクが記述されています。

# Summary

* [Introduction](README.md)

SAMMARY.md は画面の左に並ぶメニューを記述するためのテキストファイルになります。

ページを追加してみる

markdown編集用のツール

markdownの編集に適したツールには複数ありますが、今回はVSCodeを使ってmarkdownを編集したいと思います。

code.visualstudio.com

仮ページ(test.md)の追加

markdownという名前のフォルダを作り、その中に test.md ファイルを作成します。
f:id:r-ngtm:20200618142650p:plain

test.mdは以下のような内容にします。

# Test
これはテストページです

README.mdへリンクの追加

README.mdにtest.mdへのリンクを追記してみます。

# Introduction

[テスト用ページ](markdown/test.md)

Introductionのページにリンク付きの文字が追加されます。
f:id:r-ngtm:20200618143753p:plain

SAMMARY.mdへリンクの追加

SAMMARY.mdにtest.mdへのリンクを追記してみます。

# Summary

* [Introduction](README.md)

* [Test](markdown/test.md)

これにより、Webサイト左側のメニューにTestという項目が追加されます。 f:id:r-ngtm:20200618143230p:plain

* [Test](markdown/test.md) という行が、Testという名前でtest.mdへのリンクを貼っている行になります。


Testという項目をクリックすると、test.mdがWebページとして表示されます。
f:id:r-ngtm:20200618144003p:plain

Webサイトのhtmlファイル化

現時点ではmdファイルを作成しただけなので、Webサイトとして公開することはできません。
公開するためには、htmlファイルへコンバートする必要があります。

以下のコマンドを実行します。

gitbook build


コマンドが完了すると、_bookフォルダが作成されます。
f:id:r-ngtm:20200618120006p:plain

_bookフォルダの中を見ると、htmlファイルなどが作成されています。
f:id:r-ngtm:20200618120206p:plain

この_bookフォルダの中身をGitHubへアップロードすることで、Webページを外部へ公開することができます。

予備知識 : _bookではなくdocsへ出力する

htmlファイルが出力されるフォルダ名は変えることができます。

gitbook build (元データが置いてあるディレクトリ) (出力先のディレクトリ)


以下のコマンドを実行すると _bookではなく docsというフォルダへhtmlファイルが出力されます。

gitbook build . docs

f:id:r-ngtm:20200618140740p:plain

Webページのアップロード(GitHub)

作成したWebページをGitHubへアップロードする手順を紹介します。

Gitの環境をインストールしておく必要があります。
git-scm.com

STEP1 : GitHubリポジトリを作る

GitHubにて好きな名前のリポジトリを作ります。
f:id:r-ngtm:20200618130906p:plain

今回はTestという名前でリポジトリを作ってみました。

STEP 2 : WebページのGitリポジトリ

Webページのルートフォルダにて、git initコマンドを実行してGitリポジトリ化します。

まずはgit init でgitを初期化します。

git init

フォルダを見ると.gitフォルダ作成され、gitリポジトリ化したことが確認できます。
f:id:r-ngtm:20200618131324p:plain

STEP 3 : WebページをGitHubへアップロードする

GitHubリポジトリの関連付け

git remote add origin https://github.com/{ユーザー名}/Test.git


ローカルにある全ファイルをバージョン管理の対象として追加

git add .


git addで追加したファイルのコミット

git commit -m "initial commit"


コミットをプッシュ(GitHub上のmasterブランチへ反映される)

git push origin master

参考 : リモートへのプッシュする方法
git pushでリモートリポジトリにプッシュする方法 | TechAcademyマガジン

結果

GitHubリポジトリを確認すると、ローカルのファイルがアップロードされていることが確認できます。 f:id:r-ngtm:20200618132918p:plain

Webページの公開設定(GitHub Pages)

STEP 1 : Settingsを開く

GitHubリポジトリのSettingsの部分をクリックします。
f:id:r-ngtm:20200618133214p:plain

STEP 2 : GitHub Pagesの設定

ページの下のほうにGit Hub Pagesと書かれている項目があります。
f:id:r-ngtm:20200618133444p:plain

Noneと書かれた部分をクリックすると、どのブランチをGitHub Pagesとして公開するかを選ぶことができます。
今回はWebページをmasterブランチにアップしているので、 master branchを選択します。
f:id:r-ngtm:20200618133608p:plain

今回アップしたWebページが https://(ユーザー名).github.io/{リポジトリ名} としてアクセスすることができるようになりました。
f:id:r-ngtm:20200618133852p:plain

今回、Webページのデータは _bookフォルダの中に入っているため、以下のURLでアクセスできます。

https://(ユーザー名).github.io/{リポジトリ名}/_book 

公開設定が反映されるまでにはラグがあるっぽいので気長に待ちましょう。

補足 : docsフォルダに入れたWebサイトは直接読める

_bookというフォルダの中にWebサイトのファイルを入れた場合、

https://(ユーザー名).github.io/{リポジトリ名}/_book 

というURLでアクセスできました。

docsという名前のフォルダに入れた場合は、

https://(ユーザー名).github.io/{リポジトリ名}

というURLでWebサイトにアクセスできるようになります。
こちらのURLのほうがスマートです。


docsを直接表示したい場合、GitHub Pagesの設定にて master branch / docs folder を選ぶ必要があります。
f:id:r-ngtm:20200618135028p:plain

今回アップロードしたTest用のWebサイトは以下から確認できます。
https://rngtm.github.io/Test/


【Houdini + Illustrator + Photoshop】 魔法陣テクスチャを作ってみた

 

はじめに

魔法陣テクスチャを作ってみました。

Houdini, Illustrator, Photoshopを使っているので、紹介したいと思います。

f:id:r-ngtm:20200606151353p:plain



使用ツール

  • AmazioGraph (魔法陣の下書き作成)
  • Houdini (基本となるパスをプロシージャルに作成)
  • Illustrator (パスを整える)
  • Photoshop (模様を書き加える)

 

1. 下書き

AmazioGraphというiPadのアプリを使って、魔法陣を描いてみました。

Amaziograph

Amaziograph

  • AMAZIOGRAPH OOD
  • エンターテインメント
  • ¥120

apps.apple.com

Amaziographを使うとマンダラ模様などを簡単に書くことができて楽しいです。

www.youtube.com

 

 

今回、Amaziographを使って以下のような魔法陣を描いてみました。

f:id:r-ngtm:20200606003149j:plain

魔法陣の下書き

 

この下書きを元にして魔法陣テクスチャを制作していきます。

 

2. Houdiniを利用したパスの作成

魔法陣は繰り返しや対称な形状が見られるため、プロシージャルな手法で作るのに向いているように見えます。

そこで、魔法陣のベースとなるパスをHoudiniでプロシージャルに作成することにしました。

 

今回は以下のようなパスをHoudiniで作成してみました。

f:id:r-ngtm:20200606004320p:plain

  

 

ネットワーク全体

魔法陣は以下のようなネットワークで作成しています。

f:id:r-ngtm:20200606010009p:plain

 

www.dropbox.com

 

 

曲線について

f:id:r-ngtm:20200606143844p:plain

 

上記のカーブはちょっと変わった方法で作っているので紹介したいと思います。

 

 

曲線のネットワーク

曲線は以下のようなネットワークで作成しています。

f:id:r-ngtm:20200606012449p:plain

 

曲線の作り方

Resampleノードで、ラインを細かく分割します。

f:id:r-ngtm:20200606012558p:plain

 

VEXで直線をカーブ状に変形します。

下に凸な放物線の方程式 y = (a * (x - 0.5))^b を使っています。

f:id:r-ngtm:20200606012628p:plain

float t_scale = chf("t_scale");
float x_scale = chf("x_scale");
float exponent = chf("exponent");

float t = (float)@ptnum / (@numpt - 1); // ポイント番号を 0 ~ 1の範囲に収める
float x = pow(abs(t - 0.5) * t_scale, exponent); // 放物線の方程式
@P.x += x * x_scale; // ポイントを動かす

 

今回の放物線は以下のようなカーブを描きます。(下に凸な放物線)

f:id:r-ngtm:20200606155650p:plain

Copy and Transformノードでカーブを回転させながらコピーし、曲線の完成です。

f:id:r-ngtm:20200606013353p:plain

 

dxfファイル書き出し

ROP Geometryノードでdxfファイルを出力します。

dxfファイルはIllustratorで読むことができ、Houdini上で設定したグループはそのままレイヤー分けされたまま取り込まれるので便利です。

f:id:r-ngtm:20200606150156p:plain

 

 

3. Illustratorで清書

Houdiniで出力したdxfファイルをイラレで開きます。

f:id:r-ngtm:20200606150412p:plain

 

Houdini上で設定したグループはそのままレイヤーとして設定されています。

f:id:r-ngtm:20200606155947p:plain


 

イラレで調整を加えます。

使用したフォント : GL-Runen Regular, Ultima Runes

f:id:r-ngtm:20200606150734p:plain

 

 

4 Photoshopで模様を加える

Photoshopの対称ペイント機能を使って模様を書き加えていきます。

ウィンドウ上部にある、蝶のようなアイコンをクリックします。

f:id:r-ngtm:20200606152220p:plain

 

メニューが表示されるので、マンダラを選択します。

f:id:r-ngtm:20200606152312p:plain

 

セグメント数を8に設定し、OKを押します。

f:id:r-ngtm:20200606152404p:plain

 

 

ガイドが魔法陣の中心に重なっていることを確認し、Enterキーでガイドを確定します。

f:id:r-ngtm:20200606152500p:plain

 

設定したガイドを軸として対象に線をペイントすることができるようになりました。 

f:id:r-ngtm:20200606153209g:plain

 

以下のような模様を書き加えて完成です。

f:id:r-ngtm:20200606151353p:plain

 

 

参考 

helpx.adobe.com

 

 

【ゲーム制作】Unity1Week(お題:密)に参加しました

 

はじめに

1週間ゲームジャム「Unity1Week」に参加してみました。

今回のゲームジャムのお題は「密」でした。

unityroom.com

 

作ったゲーム

地球に迫ってくるエネミーをレーザーとショットで破壊するシューティングゲームを作りました。

 

www.youtube.com

unityroom.com

 

Day 1 : 何を作るか決める

密という言葉から以下を連想しました。

 

「密」

-> 「エネルギーが集まる 」

-> エネルギーを溜めて(密)、レーザーを撃つ 

-> 派手なレーザーをぶっ放す

 

どういうゲームにするかはまだ決まっていませんでしたが、

「かっこいいレーザーエフェクトが作りたい!」

という熱い情熱で作業を始めました。

 

Day 1,2 : リファレンス収集

筆者はレーザーエフェクトをほとんど作ったことがなかったため、

かっこいいレーザーエフェクトって何だろう?

という状態になりました。

そこで、ネットでレーザーエフェクトを収集することにしました。

(ゲーム制作そっちのけでレーザーエフェクトのリファレンスを集め始めるダメな人)

アセットストア

assetstore.unity.com

 

Day2, 3 : レーザーエフェクトを試作

アセットストアのレーザーエフェクトを参考にしつつ、

以下のようなレーザーエフェクトを作成しました。

テクスチャはSubstanceDeisngerやAfterEffectsで作成したものを使用しています。

www.youtube.com

 

レーザー用のシェーダーはShaderGraphで作成しました。

4枚のグレースケールのノイズテクスチャを合成し、最後にRampテクスチャで色を付けています。

f:id:r-ngtm:20200503214657p:plain

 

Day2, 3 : ゲームへのレーザーの実装

レーザーを画面中央から撃たせたらゲームっぽくんじゃないか」と思い、

画面中央からマウス位置へ向けてレーザーを撃たせるようなシステムをUnityで実装してみました。

youtu.be

何となくゲームっぽいですが、ゲームにはなっていません。

 

Day 4 : ゲームっぽい要素をつけ足す

ここでゲームらしさを出すため、シューティングゲームの要素を導入してみました。

  • 宇宙
  • エネミーがプレイヤー位置(画面中央)へ向かってくる
  • 攻撃をエネミーに当てるとエネミーを倒せる

www.youtube.com

 

見た目はゲームっぽくはなりましたが、まだ面白くはない状態です。

 

Day 4 : 制限を設ける

ここで、

ある条件下でのみレーザーが撃てるようにしたらどうだろう

と思い、

エネルギーが最大の時だけレーザーを撃てる

という制約を設けてみました。

ayoutu.be

円形のゲージは何となくオシャレそうなイメージがあったので円形のゲージを入れてみました。

 

Day 5 : 破壊エフェクトを入れてみる

ここで私は思いました。

「画面が地味で面白くない。敵を破壊したときのエフェクトを入れよう。」

 

エネミー破壊エフェクトを入れたものは以下になります

youtu.be

破壊エフェクトを入れたことにより、何が起きているのかが分かりやすくなったのではないでしょうか。

 

何が起きているのかが分かりやすいという工夫の積み重ねが、最終的なゲームの面白さにつながると思う昨今です。

 

Day 5 : エネミーに数字を入れてみる

ここで、

「エネミーに数字を乗せてみたらどうなるだろうか」

というアイデアが湧きました。(深夜にシャワーを浴びているとき)

 

エネミーにの体力を数字をとして表示したものが以下になります。

www.youtube.com

 

 

着想元 : Ballz

数字を入れるというアイデアは、

2017年ごろに流行ったBallzというゲームから着想を得ました。

www.4gamer.net

 

 

Day 5 : エネミーを遅くする

ゲームを遊んだ私は思いました。

「エネミーが唐突に出てきて何が起きているのか全然わからない。速すぎる」

 

そして

「エネミーを遅くすれば分かりやすくなるのではないか」

というアイデアが下りてきました。

 

エネミーを遅くしたものは以下になります。

youtu.be

今回のU1Wのテーマが密だったので、なんとなくエネミーを密集させてみました。 

 

 

ゲームをテストプレイした私はこう思いました。

「画面上に映っているエネミーに対して、どうやって攻撃を与えるかを考えさせるゲームにしたら面白いのではないか」

ゲームの方向性が固まりました。

 

Day 5 : ショットを実装する

私はこう思いました。

「攻撃手段がレーザーだけというのは、行動の選択肢が少なすぎてつまらない。

STGでおなじみの通常ショットを入れてみよう」 

 

通常ショットを入れたものが以下になります。

youtu.be

円形ゲージは分かりにくかったので、長方形ゲージに置き換えました。

プレイヤーの視線は画面中央の地球に集中しそうなので、地球付近にUIを配置することにしました。

 

ようやく、ゲームになりそうなイメージが湧いてきました。

 

Day 5 : 音を入れる

効果音を入れる際には以下を意識しました。

  • 敵が弾に当たったかどうかは重要な情報なので、ヒット音は目立たせる
  • レーザーの音はトランスフォーマーあたりのSF映画的な音が欲しい(グォーン↓、ゴゴゴゴ的なイメージ)

youtu.be

 

レーザーの音はPro Sound Collectionの中にイメージに近いものがあったので採用しました。

assetstore.unity.com

 

通常ショットは10回/秒の連射スピードに落ち着きました。(テンポ感が気持ちよかったので)

 

Day 6 : 敵にバリエーションを持たせる

敵が1種類だけというのは単調でつまらないため、複数の種類のエネミーを用意することにしました。

youtu.be

見た目を分かりやすくするため、プレイヤーの攻撃色の黄色とは被らない色を採用しています(赤・緑・青)

 

エネミーの違いを分かりやすくするため、以下をイメージしてエネミーを設定しました。

  • 青 = ザコ敵(やわらかく、遅い)
  • 緑 = 強敵(硬くて速い)
  • 赤 = 変則的な動きをする敵

 

強敵(緑色)を優先してレーザーを当てる、というプレイスタイルを作れたのではないかと思います。

 

Day 7 : ラスボスを用意する(完成)

最後にゲームの締めとなるラスボスを作成しました。

今までの戦いとは違う何かが起きている」ということを強調させるために

ボス戦では熱いロック調のBGMを流してみました。

youtu.be

 

その他工夫したポイント

  • レーザー撃った瞬間はBGMの音量を小さくする
  • 弾のヒット音の音程を少しランダムにする

まとめ

今回、ゲームを決めないままエフェクトから作り始めるという危ない橋を渡ってしまいましたが、奇跡的にゲームとしてまとめることができました。

運が良かったのではないかと思います。

 

シューティングゲームのエフェクトを作ってみたい、という

長年の夢が叶ったのでとても楽しかったです。

Unityエフェクトレシピ01 - SFテイストのバリア

はじめに

SFテイストなバリアエフェクトを作ってみました。

今回の記事では、このエフェクトの作り方を紹介したいと思います。

www.youtube.com

 

 f:id:r-ngtm:20200424000150g:plain

 

サンプル(GitHub)

今回のエフェクトはGitHubにて公開しています。

github.com

 

環境

Unity 2020.1.0b2.33333

Universal RP(Version 9.0)

ShaderGraph (Version 9.0)

 

Substance Designer 2019

Houdini Version 18.0.287

 

エフェクトの構成

今回のエフェクトは3つの要素から構成されています。

  • オーラ
  • ベース
  • リング

f:id:r-ngtm:20200423000926g:plain

 

使用ツール

 

エフェクト要素01 - バリアのベース

f:id:r-ngtm:20200423023034g:plain

ノイズテクスチャをUVスクロールさせつつ、ノーマルマップでUVディストーションをかけています。

また、地面に近い部分や、シルエット部分を発光させています(フレネル)

 

発光の作り方

地面付近の発光やフレネルの作り方はUnity道場で丁寧に解説されているので、

そちらをご覧になると良いでしょう。

youtu.be

 

 

 

ShaderGraph

オーラ用に作成したShaderGraphを紹介します。

このShaderGraphは以下のような特徴を持っています

f:id:r-ngtm:20200423094352p:plain 

 

Unlit Masterノードは以下のように設定しています。

f:id:r-ngtm:20200423094718p:plain

 

シェーダーパラメータ

シェーダーのパラメータは以下を定義しています。 

シェーダーパラメータ
パラメータ名 説明 タイプ
Fresnel Color
フレネルの色
Color
Power(Fresnel)
フレネルのPowerの指数値
Vector1
Color1
グレースケールが0に近いところにつける色
Color
Color2
グレースケールが1に近いところにつける色
Color
ColorMap
カラーテクスチャ
Texture2D
Power(ColorMap)
カラーテクスチャに対して演算するPowerの指数値
Vector1
UVScroll(ColorMap)
1秒ごとにカラーテクスチャのUVが移動する量
Vector2
MaskMap
カラーテクスチャに乗算するマスクテクスチャ
Texture2D
DistortionMap
カラーテクスチャのUVディストーションに使用するNormalマップ
Texture2D
UVScroll(DistortionMap)
1秒ごとにディストーションマップのUVが移動する量
Vector2
DistortionStrength Vector1
GroundLightSize
地面付近の発光の長さ
Vector1
GroundLightStrength
地面付近の発光の強度
Vector1

 f:id:r-ngtm:20200423094658p:plain

 

マテリアル設定

上記のシェーダーからマテリアルを作成し、パラメータは以下のように設定しました。

f:id:r-ngtm:20200423211446p:plain

 

ColorMap(カラーテクスチャ)

テクスチャは以下のようなものを使用しました。

f:id:r-ngtm:20200423010709p:plain

 

以下のようなSubstanceGraphで作成しています。

f:id:r-ngtm:20200423010731p:plain

 

MaskMap(マスク用テクスチャ)

マスク用のテクスチャもほぼ同じものを使用しています。

f:id:r-ngtm:20200423214130p:plain

 

Distorionmap(ディストーション用テクスチャ) 

ディストーションには以下のようなテクスチャを使用しています。

f:id:r-ngtm:20200423214247p:plain

f:id:r-ngtm:20200423214219p:plain

 

 モデリング(Houdini)

モデルの上側が透けているような半球メッシュをHoudiniで作成します。

これにより、モデルの上部は透けていて、側面はモデルに貼り付けたテクスチャが見えるような表現にすることができます。

f:id:r-ngtm:20200423211148p:plain

 

 

アルファの設定部分

vector min, max;
getbbox(min, max);
float t = fit(@P.y, min.y, max.y, 0, 1);
f@Alpha = chramp("alpha_control", t);

f:id:r-ngtm:20200423211612p:plain

 

ParticleSystemにマテリアルと半球メッシュを適用すると以下のようになります。

f:id:r-ngtm:20200423023034g:plain

 

 

エフェクト要素02 - 地面の発光

f:id:r-ngtm:20200423095008p:plain

 

バリアの球をただ地面に置いただけでは、浮いて見えてしまうので、

発光しているように見えるリング素材を入れておきます。

f:id:r-ngtm:20200423100040p:plain

 

モデルの作成(Houdini)

Labs Disc Generatorを使って円盤メッシュを作成します。

f:id:r-ngtm:20200423100624p:plain

f:id:r-ngtm:20200423100339p:plain

 

テクスチャ

発光素材に使用したテクスチャは以下になります。

f:id:r-ngtm:20200423212811p:plain

f:id:r-ngtm:20200423212729p:plain

 

マテリアル

上記のテクスチャをAdditiveのマテリアルへ登録します。

f:id:r-ngtm:20200423101511p:plain 

 

 
マテリアルと円盤メッシュをParticleSystemに設定すると、以下のようになります。

f:id:r-ngtm:20200423095008p:plain

 

エフェクト要素03 - オーラ

オーラの作り方を紹介します。

f:id:r-ngtm:20200423001932g:plain

 

作り方

メインのテクスチャをUVスクロールさせつつ、ディストーションマップ(NormalMap)でUVディストーションをかけます。

f:id:r-ngtm:20200423012746g:plain

 

これを球体のメッシュに貼り付けると以下のようになります。

f:id:r-ngtm:20200423013350g:plain

 

シェーダーのPower関数を適用し、Powerのパラメータを変化させて形状を削ります。

f:id:r-ngtm:20200423014139g:plain

f:id:r-ngtm:20200423014155p:plain

 

オーラをたくさん発生させ、回転させると以下のようになります。

今回はUVスクロールの速さ・初期値・ParticleのLifetimeにランダム値を加えることで動きに複雑さを持たせています。

f:id:r-ngtm:20200423015048g:plain

 

モデリング(Houdini)

Houdiniで球メッシュを作成します。

f:id:r-ngtm:20200423213155p:plain

 

ShaderGraph

次にオーラエフェクト用にシェーダーを作成します。

 

シェーダーの特徴は以下になります。

  • メインテクスチャのUVディストーション
  • フレネル
  • メインテクスチャはUVスクロール
  • アルファマスク用テクスチャ(UV固定)
  • ParticleSystemのStableRandomをテクスチャUVに足してばらつきを持たせる
  • ParticleSystemのCustomDataでフレネルの強度をコントロールできる
  • テクスチャカラーにPowerをかけて形状を変化させる(PowerのパラメータはCustomDataでコントロールできる)

f:id:r-ngtm:20200423005420p:plain 

Unlit Masterノードは以下のように設定しています。

f:id:r-ngtm:20200423010447p:plain

 

シェーダーパラメータ 

シェーダーパラメータは以下のようなものを定義しました。

シェーダーパラメータ
パラメータ名 説明 タイプ
Fresnel Color
フレネルの色
Color
Power(Fresnel)
フレネルのPowerの指数値
Vector1
Color1
グレースケールが0に近いところにつける色
Color
Color2
グレースケールが1に近いところにつける色
Color
ColorMap
カラーテクスチャ
Texture2D
Power(ColorMap)
カラーテクスチャに対して演算するPowerの指数値
Vector1
Tiling(ColorMap)
カラーテクスチャのタイリング数
Vector2
UVScroll(ColorMap)
1秒ごとにカラーテクスチャのUVが移動する量
Vector2
MaskMap
カラーテクスチャに乗算するマスクテクスチャ
Texture2D
DistortionMap
カラーテクスチャのUVディストーションに使用するNormalマップ
Texture2D
UVScroll(DistortionMap)
1秒ごとにディストーションマップのUVが移動する量
Vector2
DistortionStrength Vector1

 

f:id:r-ngtm:20200424000917p:plain

 

上記のシェーダーから作成したマテリアルのパラメータを以下のように設定しました。

f:id:r-ngtm:20200423010321p:plain

上記のマテリアルでは三つのテクスチャ(ColorMap, MaskMap, DistortionMap)を使用しています。

 

ColorMap(カラーテクスチャ)

今回は以下のようなオーラ風テクスチャを使用しました。

f:id:r-ngtm:20200423002528j:plain

 

上記のテクスチャはSubstanceDesignerで以下のようなノード構成で作成しています。

f:id:r-ngtm:20200423002714p:plain

 

上記では以下の3つのカスタムノードを使用しています。無料です。

 

 

MaskMap(マスク用テクスチャ)

アルファマスク用のテクスチャは以下のようなものを使用しました。

f:id:r-ngtm:20200423010709p:plain

 

こちらのテクスチャの作りはシンプルで、

Clouds 2 ノードをHistgram Scanで加工し、アルファチャンネルに格納しています。

f:id:r-ngtm:20200423010731p:plain

 

 

DistortionMap(UVディストーション用テクスチャ)

ディストーション用のテクスチャは以下を使用しました。

f:id:r-ngtm:20200423020910p:plain

 

 

PerlinNoiseSlope Blur Grayscaleで加工し、ノーマルマップへ変換したものを使っています。

f:id:r-ngtm:20200423011031p:plain

 

Particle System

最後に、オーラのParticleSystemの設定値を載せます。

 

Mainモジュール

f:id:r-ngtm:20200423015714p:plain

 

Emissionモジュール

f:id:r-ngtm:20200423015815p:plain

 

Color over Lifetime モジュール

f:id:r-ngtm:20200423015920p:plain

 

Rotation over Lifetime モジュール

f:id:r-ngtm:20200423020014p:plain

 

Custom Dataモジュール

シェーダー側のPowerの指数の係数としてPower Rateを定義しています。

Power Rateの値を増やすとテクスチャの形状が削れていきます。

f:id:r-ngtm:20200423020135p:plain

 

Renderer モジュール

VertexStreamsでは以下を渡しています。

  • AgePercent(パーティクル発生時 : 0 , パーティクルが寿命を迎えるとき : 1)
  • StableRandom.x (パーティクルごとに0~1のランダムな値)
  • Custom1.xyzw (CustomData1)

f:id:r-ngtm:20200423020325p:plain

 

 

マテリアルと円盤メッシュをParticleSystemに設定すると、以下のようなオーラになります。

f:id:r-ngtm:20200423015048g:plain

 

 

エフェクト要素04 - リング状のオーラ

f:id:r-ngtm:20200423231746g:plain

 

モデリング(Houdini)

Labs Disc Generatorノードを使い、リング状のメッシュを作成します。

今回は半径1の球メッシュに少しだけめり込ませる形で使用したかったので、

内半径(Inner Radius)を0.95に設定しています。

f:id:r-ngtm:20200423232706p:plain

 

マテリアル

エフェクト要素03のオーラで使用したシェーダーからマテリアルを作成します。

マテリアルのパラメータは以下のように設定しました。

f:id:r-ngtm:20200423232911p:plain

 

Color Map(カラーテクスチャ)

カラーテクスチャには以下のようなテクスチャを使用しました。

f:id:r-ngtm:20200423233359p:plain

 

上記のテクスチャは、エフェクト要素03に使用した

SubstanceGraphのパラメータを変更することで作成しています。

f:id:r-ngtm:20200423233521p:plain

 

Mask Map(マスク用テクスチャ)

f:id:r-ngtm:20200423233731p:plain

f:id:r-ngtm:20200423232550p:plain

 

Distortion Map(ディストーションテクスチャ)

f:id:r-ngtm:20200423233831p:plain

f:id:r-ngtm:20200423233913p:plain

 

ParticleSystemにマテリアルと円盤メッシュを設定すると、以下のようになります。

f:id:r-ngtm:20200423231746g:plain

 

完成

要素01 ~ 04を合わせることで、バリアエフェクトの完成となります。

f:id:r-ngtm:20200424000150g:plain

 

2019年 振り返り

 はじめに

2019年にやってきた活動を簡単にまとめたいと思います。

 

やってきたこと

2019年では次のようなことをやりました

  1. 記事アウトプット(ShaderGraph、VFX Graph、 Houdini、 SubstanceDesigner)
  2. 1週間ゲームジャムに参加
  3. 勉強会登壇
  4. ゲームエフェクト講座の生徒になりました
  5. 手描きによる作画エフェクトの練習(2019年6月~)

 

2019年はエフェクトの面白さに気が付くことができた年でもありました。

 

その1. Unity関連の技術アウトプット

Unityプロジェクト内に存在するテクスチャを一覧表示するようなツールを作りました。

【UnityEditor】テクスチャ閲覧ツールを作ってみた - Qiita

 

LWRPを利用したポストエフェクトの作り方の解説記事を書きました。

【Unity2019 LWRP】ポストエフェクトを自作してゲームから利用する - Qiita

 

その2. Houdini系のアウトプット

Houdiniを利用したエフェクト素材の作り方を記事にしました。

【Houdini】煙で衝撃波エフェクトっぽいものを作ってみた - Qiita

【VisualEffectGraph+ Houdini】煙が広がるスプライトシートをHoudiniで作り、VisualEffectGraphで使用する - Qiita

【Houdini】ランダムな形状を持つローポリクリスタルの自動生成 - Qiita

 

エフェクト素材以外の記事も何件か執筆しました。

【Houdini + SubstanceDesigner + Unity HDRP】HDRPなワッフルをプロシージャルに作ってみる。 - Qiita

【Houdini】道路に沿ってモデルを配置させてみた - Qiita

【Houdini】立体的な令和を作ってみる - Qiita

 

また、ScrapboxにてHoudiniの簡単なレシピをまとめていくという活動も続けてきました。

Houdiniレシピ - rn-works

 

その3. Substance Designer系のアウトプット

SubstanceDesignerを利用したテクスチャの作り方のレシピをScrapboxにまとめるという活動を続けてきました。

SDレシピ - rn-works

 

その4. VFX Graphのアウトプット

UnityのVFX Graphに関する記事を書きました。

【VFX Graph】連番アニメーションを使ってみた - Qiita

【VFX Graph】宝箱をキラキラ光らせてみた。 - Qiita

【VFXGraph】冷気っぽいエフェクトを作ってみた - Qiita

 

その5. Shader Graphのアウトプット

2019年ではUnityのシェーダーグラフに関する記事を20件くらい書きました。

すべて紹介すると長くなるので数件紹介します。

【シェーダーグラフメモ その35】Unityロゴにエメラルドのような質感を与える - rn.log

【シェーダーグラフメモ その36】凱風快晴を正月っぽくする - rn.log

【シェーダーグラフメモ その53】テクスチャ無しで作るヒットエフェクト - rn.log

 

その6. ゲームジャムへの参加

オンライン上で2019年10月14日 ~ 10月20日で開催されたゲームジャムに参加し、

ToTheRightというアクション系のゲームを制作しました。

https://unityroom.com/unity1weeks/14

 

以下のページからゲームが遊べます。

ゲームバランスの調整があまりできておらず、難易度がかなり高めのゲームになっています。

ToTheRight | フリーゲーム投稿サイト unityroom

 

その7. 勉強会登壇

roppongi.unityという勉強会にてテクスチャを使わずにヒットエフェクトを作る方法を発表しました。

roppongiunity.connpass.com

www.slideshare.net

 

以下のようなヒットエフェクトの作り方を解説しています。

 

 

f:id:r-ngtm:20191221112707g:plain

 

 

 

その8. ゲームエフェクト

これまで、ゲームエフェクトを独学で2~3年ほど作っていましたが、

独学でゲームエフェクトを作ることに限界を感じたため、FLYPOTさんのエフェクト講座を受講することに決めました。 

 

 

エフェクト講座の詳細は下記リンク参照

flypot.jp

 

以下は講座の自由課題で作成したエフェクトです。

課題で用意されたテクスチャを利用して組み上げたものになります。

 

  

 

講座の感想

・エフェクトを学習するための教材や課題が用意されているため、エフェクトに関する知識を効率よく身に着けることができる

・作ったゲームエフェクトに対してアドバイスがもらえるため、独学でエフェクトを作るより経験が得やすい

・ほかの生徒さんの作品を見ることができるので、刺激を受けられる

・講師の方のエフェクトのレベルが高いため自分自身のエフェクトのレベルアップが見込める

・エフェクトに関して分からないことは講師の方に質問できる

 

お金はかかりますが、独学でやるより効率よくエフェクトのレベルアップが見込めると感じました。

 

その9. 作画エフェクトの練習

手描きのテクスチャを用いたゲームエフェクトが作ってみたいと思い、

2019年6月からエフェクトを手描きする練習を始めました。

 

最初に描いたエフェクト

以下は最初に描いたエフェクトになります。(2019年6月27日に描いたものです)

f:id:r-ngtm:20200103195850g:plain

最初に描いたエフェクト

  

描いたエフェクトをいくつか紹介

最初はゲーム系のエフェクトをメインに模写をしていましたが、

途中からアニメのエフェクトにも興味が湧き、最近はアニメのエフェクトを模写することが多くなっています。

 

f:id:r-ngtm:20200103201758g:plain

 

f:id:r-ngtm:20200103201704g:plain

 

f:id:r-ngtm:20200103201642g:plain

f:id:r-ngtm:20200103201733g:plain

 

 

 

エフェクトの練習物は以下のポートフォリオにもまとめています。

2Dエフェクト模写 | 🍡🍮かもそば 🍩🍘

 

 

2020年の目標


目標1. 技術アウトプットを続けたい

具体的には以下を考えています。

  • エフェクト関連ツール(Substance DesignerやHoudini、VFX Graph)のアウトプット
  • Unityを使ったゲームエフェクトに関するハウツー記事のアウトプット
  • 勉強会登壇

UE4もちょっと触りたいかも...

目標2. エフェクトを武器にしたい

エフェクトを武器にできたら良いなぁと考えてますが、

自分より若く、すごいエフェクトを作る方々が大勢いらっしゃるので、死に物狂いで頑張らないと厳しいかなぁとも考えていたりします。

 

直近でできるものとしては以下を考えています。

・エフェクト講座の課題をこなす

・ゲームを遊ぶことでゲームエフェクト・ゲーム演出をインプットする

・アニメや映画といった映像作品を鑑賞することで非ゲーム系のエフェクトや演出インプットする

・エフェクトの模写をすることで画力・観察力を磨く

・ゲームエフェクトを作ることでゲームエフェクトの引き出しを増やす

・ゲームエフェクト寄りのミドルウェア(Houdini、SubstanceDesigner、AfterEffectsなど)を使用することでゲームエフェクトを作る技術を身に着ける

【シェーダーグラフメモ その54】メッシュの表裏で2枚のテクスチャを貼る

はじめに

表と裏で別のテクスチャを貼る方法を紹介します。

f:id:r-ngtm:20191230115242g:plain

 

シェーダーグラフ全体

Is Front Face ノードを使うと、メッシュの表裏を判定できるのでこれを利用します。

f:id:r-ngtm:20191230115804p:plain

【シェーダーグラフメモ その53】テクスチャ無しで作るヒットエフェクト

はじめに

テクスチャを使わずにヒットエフェクトを作る方法を紹介します。

f:id:r-ngtm:20191221112707g:plain

 

エフェクトの構成

今回のエフェクトは以下の二つで構成されています。

  • 中心となる核(シェーダーグラフで作成)
  • 拡散する破片

f:id:r-ngtm:20191221112753p:plain



エフェクトの破片の作り方

基本はParticleSystemで四角形ポリゴンをまき散らすことで飛び散る破片を作ります。

 

サイズの緩急

  • ParticleSystemの Size over Lifetime モジュールにて設定
  • 最初は最大サイズ
  • 短時間で一気に下げる

f:id:r-ngtm:20191221112941p:plain

 

パラメータのランダム

Start Lifetime や Start Speedをランダムに設定することでエフェクトを豪華な感じにします。

f:id:r-ngtm:20191221113018p:plain

 

結果

サイズ変化ありのエフェクトと、サイズを固定したエフェクトの二つを並べてみました。

サイズ変化が入っている方がなんとなく良い感じに見えると思います。

f:id:r-ngtm:20191221113918g:plain

 

エフェクトの核の作り方

STEP1 : 球をノイズで変形

球体メッシュをシェーダーグラフで変形させて衝撃波っぽい形を作ります

f:id:r-ngtm:20191221113143p:plain

 

シェーダーグラフは以下のような構成になっています。

f:id:r-ngtm:20191221113217p:plain

 

STEP2 : サイズの変化を入れる

ParticleSystemの Size over Lifetime モジュールにてサイズの変化を設定します。

  • 最初は最大サイズ
  • 短時間で一気に下げる

f:id:r-ngtm:20191221113325p:plain

 

f:id:r-ngtm:20191221115433g:plain

 

 

STEP3 : 球を3つ重ねる

  • ParticleSystemを3用意・色をそれぞれを黒・赤・白にする
  • 完全に重ならないようにSizeやLifetimeを変える

f:id:r-ngtm:20191221114747p:plain

 

f:id:r-ngtm:20191221115543g:plain

 

低速再生したものは以下になります。

f:id:r-ngtm:20191221115558g:plain

 

 

完成

破片エフェクトと核を合わせてエフェクトの完成です。

f:id:r-ngtm:20191221115639g:plain