UE4の勉強記録

UE4の勉強の記録です。個人用です。

「Unreal Engine 4.xを使用してRPGを作成する」の足りない部分を作成する。アニメレンダリングについて2

<前文>

<安倍元総理暗殺と日本の終わりの始まり>

今週はrtx 3060 12gb vs rtx 3070 8gbのどっちを買うべきなのかについてか、ラーメン屋の食中毒事件についての見解を前文に書こうと思っていたのですが、日本の元首相暗殺事件というとんでもないNewsが入ってきて、これについて何らかのコメントを書き残しておくのは絶対必要だと思い急遽話題を変更しました。

正直、びっくりして何を書くべきなのか全く頭が働かない状態ですが、何とか頭を整理して以下の課題点を見つけました。

  • 元総理が暗殺されたのに悲しんでいる人がいない
  • 警備をしていた警察が自分達の落ち度がない事を主張している
  • 誰でも作成出来る様な手製の銃で元首相が暗殺出来てしまった
  • 渡辺昇一氏が作った戦後保守が韓国系の某団体に完全に乗っ取られていたみたいな状況だった件

これらについて簡単に書き残しておきます。

<<元総理が暗殺されたのに悲しんでいる人がいない>>

私は英語で考える時は左、日本語で考える時は右な思想をしています。

しかしそのどちらかの思想で考えてもあまり政治家としての安倍晋三氏は好きではないです。

しかしそれと人の死は全く別な話で、その悲劇に対してはとても悲しい気持ちになりました。

私ですらこんなに悲しい気持ちになったんですから、あんなにネットでも安倍さん、安倍さんと言っていた人たちの悲しさは大変なものであると思っていました。

ところがちっとも悲しみのコメントが現れないです。

唖然としました。

小室直樹氏の著作で以下の事が述べられていたのを覚えています。

文化によって何が悪かは変わってくる。日本文化では人殺しは絶対的な悪である。となっていてヤクザでも人殺しだけは勘弁。と言う人が多いが、アメリカでは殺し屋という職業が成り立つほど、人殺しは絶対的な悪とはみなされてはいない。むしろ契約したのに契約を履行しないほうが悪とみなされる。殺す事を約束してお金を受け取ったら、契約を守らない方が悪とアメリカでは見なされる。と書かれていました。

その後、10年くらいアメリカで生活するようになって、幸いにも殺し屋と会う事はありませんでしたが、アメリカ人の契約を守る事に対しての敬意には何度も驚かされました。

これ、何度かここにも書きましたが、バットマンの映画でこんなシーンがありました。バットマンが銃を使用したら友人を助けられたのに、バットマンは銃を使用しないと誓っていたので結局銃を使用しないで友人を殺してしまうんです。

この映画が日本のテレビで公開された時、日本人が大激怒したんです。そこは誓いを破っても銃を使用して友人を助けるべきだろうと。

それについてアメリカ人の友人に意見を聞いて回ったんですが、ほとんど全てのアメリカ人がバットマンは自分の誓いを守ったんだからバットマンは正しい。と答えたので凄い驚いたのを覚えています。

この話を聞いたのはまだ日本のアニメが流行る前だったので今のアメリカ人の若者はまた違う考えを持っているかもしれません。が当時は本当に私が聞いたアメリカ人全てが、バットマンは自分の誓いを守ったんだからバットマンは正しい。と思っていました。

そして今回の暗殺です。

暗殺という人殺しと言う事態に対して、昔の日本人だったらどんな理由があったとしても人殺しはいかんだろうと心の中では思ったと思うんです。だって人殺しは日本文化における最大の悪ですから。

所が、誰もそう言う人がいない。と言うかほとんどの日本人はそう思っていないように思えます。

この理由には2パターンあって

  • 人殺ししても仕方ない場合もある
  • 殺せる状態にしている方が悪い

ように感じました。

これは自己責任を押し付けられて苦しめられた庶民がとうとう精神的に旧日本人から新日本人に進化した証拠なんだろうなと思いました。

<<警備をしていた警察が自分達の落ち度がない事を主張している>>

さすがにこれは無理があるだろうと思いましたが、Texas州で起きたUvalde school shootingの警官も同じ事を主張しているのを聞いて妙に納得しました。

これ何度も私がこの前文で述べていますが、

これ。これが全くないんです。

恐らくこの警備にあたっていた警官もTexas州のUvalde school shootingの警官と同じで警備にどんだけ一生懸命頑張っても何の報酬ももらえないんでしょう。だから頑張らないのが特なんです。

そして頑張っても無駄な社会に日本を変えたのがまた安倍元首相だったというのが皮肉です。

良くネットでは、小泉、竹中の派遣制度の改悪が日本の景気を悪くした原因と言われていて、それについては私は良く知らないのでコメントは控えますが、小泉内閣が郵政を民営化して民間と平等に競争させると決め、それに反対する自民党議員に対して自民党から破門までして追い出したのに、その後継者だった安倍氏がその破門された自民党議員を全員復党させてしまったんです。

私はこの日から日本では公平な競争と言う概念が消えてしまったと思っています。

<<誰でも作成出来る様な手製の銃で元首相が暗殺出来てしまった>>

私は何度もこのBlogの前文で日本と言う国が崩壊するのは確実と書いていましたが、具体的にそれはどういう状態かと言うと法律を守らない人達が次々に出て来るのにそれを止める手段がない状態であると書いていました。

誰でも作成出来る様な手製の銃で元首相が殺されてしまったと言う事は、もうそういう状態に現実的になってしまったと言う事です。

そしてもうこれを止める手段が日本国に残されていないんです。

30年くらい前だったら大改革をして競争社会に対応出来るようにしてもまだ国民に体力があったので何とか持ったかもしれません。今、それをやったら日本国は体力が無くて死ぬでしょう。もう遅すぎます。

アメリカにいた時、友達だった韓国人はソウル大のElectrical Engineering卒でサムソンで働いていましたが35歳で退職させられるので、35で首切られてたらもう歳で何も出来ない。と20代で自分で退職してアメリカの大学院に来ました。

その人の奥さんが夕飯を作ってくれた時、その奥さんが子供を作る余裕はない。我々は子供なしで生きるしかないと言っていました。ソウル大の電気工学を出ても子供を作れないほど貧しい生活しか送れないのかと悲しかったのですが、それをやったから韓国の企業は国際競争で生き残る事が出来たんです。

今、日本企業で国際競争でやっていけない人材を首にする大改革をやったら、全員首にするしかないでしょう。

今更、競争社会に改革しようとしてもすべての分野が利権を持っている人で埋まっていてその人達をクビにする事は出来ないのが現実です。

だから、暗殺を防ぐために警察機構の改革ももう出来ないんです。

ので政府の要人もずっと暗殺されるでしょう。

暗殺者にとってのボーナスステージにずっとなる訳です。

<渡辺昇一氏が作った戦後保守が韓国系の某団体に完全に乗っ取られていたみたいな状況だった件>>

これが事実なのかあんまりはっきりしませんが、ネットの情報を見る限り本当のようです。

渡辺昇一氏は戦後日本の保守派の言論の礎を築いた人です。それが韓国系の某団体に完全に乗っ取られていたなんてとても悲しいです。

そういう生臭い話は非常に疎い私ですが、自民党改憲議論で彼が証言した時に、渡辺氏の普段言っている改憲論と自民党がやろうとしている改憲論は全く違うのに何で彼が担がれているんだろうと不思議に思った事は覚えています。

それで山本義隆氏の話になります。渡辺昇一氏は戦後日本の保守派の言論の礎を築いた人なら、山本義隆氏は戦後日本の左派の言論の礎を築いた人だと個人的には思っています。

彼の熱学思想の史的展開は何度読んでも面白くて、熱力学の誕生の歴史を肌で理解出来ました。

それで常々思っているのは、この彼の思想は、渡辺昇一氏が戦後日本の保守派の言論を広く庶民に広げ草の根運動のような形で庶民の間に根付いたのと違い、日本の熱力学の研究者の間に密かに伝わったような気がしています。

その彼の思想の結晶がヒートポンプだったと思います。

そう言えばヒートポンプの研究も全く聞かなくなってしまったんですが、こっちも何処かの団体に乗っ取られてしまったのかもしれませんね。

それでは今週の勉強を始めます。

<本文>

1.今週の勉強について

今週も以下の内容についてやっていきます。

  • Niagara: CGHOW氏のTutorialをやる
  • Materialの勉強
  • RPGのStoryの改善
  • Open Worldの検証
  • Gaeaの勉強
  • 雪山のMapの作成
  • UI Designの勉強
  • Anime Renderingの勉強

2.Niagara: CGHOW氏のTutorialをやる

今週もUnreal Engine 5 Niagara Beginner Tutorial - UE5 Niagara Starter Course! [1]の続きを勉強していきます。

2.1 Unreal Engine 5 Niagara Beginner Tutorial - UE5 Niagara Starter Course! [1]の続きを勉強する

<Update Overlife (Size, Color, Rotation)

<<Size>>

以下のParticleのSizeを途中で変化させたいとします。

Particle Update SectionにScale Sprite Size Moduleを追加します。

以下の様にParticleのサイズが変化するようになりました。

Scale Sprite Size Moduleは以下の様なParameterがあり、DefaultでCurveがセットされていました。

ここでCurveの使用方法について簡単に説明しています。

まずUniform Curve Indexですが、ここにはNormalized Ageが必ずセットされています。

これはCurveの横軸がParticleの寿命を表し、0かそのParticleが誕生した時、1がそのParticleの寿命が尽きて消滅する時を表しています。

そしてCurveの縦軸がParticleのSizeを表していて、0が0%、1が100%になります。

以下のTemplateを押す事でCurveの形状を変化させる事が出来ます。

左端のTemplatesを押してみました。

以下の+のButtonを押す事で

CurveのPointを増やすことが出来ます。

Scale Sprite Size Moduleでは、Non-Uniform Curveを選択する事も出来ます。

Non-Uniform CurveではXとYの値を別々に設定する事が出来ます。

<<Color>>

月にParticleの色を時間と共に変化させたい時に使用するModuleです。

Scale AlphaにFloat from Curveを追加して以下の様なCurveの設定にしました。

以下の縦軸の表示を直したいですがやり方が分かりません。

いやAlphaを変えるんじゃなくてParticleの色を変化させたいんです。と思う人もいると思います。

そういう人には、Color Moduleを使用します。

ColorにColor From CurveをセットしてCurveの色を以下の様にすると

Particleの色が最初は緑で次に赤に変化します。

以下の色を指定するBoxはMouseの左クリックで追加出来ます。

<<Rotation>>

今度はRotationです。使用するModuleはSprite Rotation Rateです。

Rotation Rateを200に変更しました。

以下の様に回転を追加します。

どうせならX軸やY軸に対してのみの回転とかを追加したいです。

Sprite Rotation Rate Moduleの実装を見ましたが、Particleの回転を管理しているSprite RotationはFloatでXYZ軸で値を分ける事は出来ないみたいです。

<Solve Forces and Velocity Module

TutorialではSolve Forces and Velocity ModuleとSprite Renderer ModuleはUpdate Overlife (Size, Color, Rotation)の中で解説されていますが、この2つは全く違う内容なので別枠で解説します。

Solve Forces and Velocity Moduleに関してはVelocity ModuleやForce Moduleを使用する時は必ず使用しなければならないModuleとだけ紹介されていました。

<Sprite Renderer Module

Sprite Renderer Moduleについての解説です。

Materialの設定です。

Source Modeです。Particleにセットしてあります。

これをEmitterにセットするとEmitterに対して一個だけ上記のMaterialをRenderingします。

面白いですがEmitterにセットする事なんであるんでしょうか?

Default Pivot in UV Spaceについてです。

Tutorialにおけるこの値の解説、面白いんですが、MaterialでTextureの回転について散々やっている私には自明過ぎる内容でした。

やっぱりこういう基礎はMaterialで先に教えておくべきな気がします。

Sorting Modeについてです。

これはParticleが重なっている時の重なり具合の順番をSortするためのものです。

個々の内容については別な動画で解説するそうです。

<Using Sub UV

Sub UVの勉強です。

これも初心者の内容に追加するのか?と一寸驚きです。

Sub UVがあるか調べたら以下のSub UVがあったのでこれを使用してTutorialをやります。

まずSub UV用のMaterialを作成します。

作りました。

以下の様な感じになりました。

このMaterialをNiagaraで使用します。

以下の様になりました。

Sprite Renderer ModuleのSub UVを以下の様に変更します。

以下の様になりました。

これはSub UVのImageからRandomに一個が選択されそれのみが再生されている状態です。

ここからSub UVのImageを順番に変更する方法を説明します。

Particle Update SectionにSub UV Animation Moduleを追加します。

Sub UV Animation ModuleのStart Frameに0、End FrameにSub UVにあるImageの数-1をセットします。

以下の様にImageが次々に変化してアニメーションになりました。

Use Material Cutout Textureです。

これを使用するとTextureの透明な部分をカットして計算コストを少しだけ削減するそうです。

この後、TutorialではSortingについてとBindingについての解説をしています。

しかしそれほど分かり易い解説ではなかったので今回はこの部分の記録はスキップします。

一寸駆け足でしたが、今週のNiagaraの勉強は予定の箇所まで終わったのでここで終了します。

3.Materialの勉強

今週からBen Cloward先生のPost Process Seriesを勉強していきます。

このSeriesの最初のTutorialであるBasic Post-Processing Effects - Shader Graph Basics - Episode 49 [2]は2022-06-19のBlogで少しだけ勉強しました。のでいきなり実装からやります。

3.1 Basic Post-Processing Effects - Shader Graph Basics - Episode 49 [2]を実装する

Post Process Volumeを追加します。

Post Process Volume SettingsのInfinite Extend (unbound) にCheckを入れます。

これでLevel全体にPost Process Effectが掛かるはずです。

以下に示した様にInfinite Extend (unbound) にCheckを入れてもPost Process VolumeのBoxは消えません。

Post Processに使用するMaterialを作成します。

そしてResult NodeのMaterial DomainをPost Processに変更します。

その結果、Result Nodeが以下の様になります。

流石にこの辺はもう常識になっています。

Post Processに使用するMaterial用の設定です。

Scene Textureノードを追加します。

Post ProcessはDeferred shadingで生成したG Bufferに干渉する事で最後のRenderingである光の干渉に影響を与える手法です。

なのでG BufferにTextureとして保持されているデータにアクセスする事が最初の仕事になります。

それを行うのがScene Textureノードとなります。

Scent TextureノードにPost Process Input 0をセットしてEmissive Colorに繋ぎます。

このPost Process Input 0がもう良く分からないです。これ普通のRenderingしたのと全く同じ結果を返します。

WikipediaDeferred shading [3]によると

と書かれていてPost Process Input 0のような全部計算した後のImageのDataをG Bufferに保持する機能はDeferred Shadingにはないはずです。

と言っても私はDeferred Shadingを実際に実装した事はないです。Learning OpenGLに紹介されているDeferred Shading [4]を見ると結構基礎Levelの内容みたいですのでいつか勉強したいとは思っていますが。

このMaterialをPost Process の以下の箇所にセットします。

本当にPost Processが効いているのか確認する為に以下のように実装を変えます。

Tutorialでは画面を暗くする為に0.1を掛けていたんですが、私のLevel画面は既に真っ暗なので2を掛ける事にしました。

結果です。

元の画像です。

明るくなっています。

次は以下の様にConstant 4 Vectorノードを追加しました。

これOpacityは別なんで最後の要素は関係ない気がします。

結果です。

画面全体が赤くなりました。

それではDistortion Effectの作成をします。

以下のCodeを追加しました。

結果です。

今週はMaterialの勉強はこれだけなのでこの実装の意味を深堀します。

まずTime ノードですが当然ですがこれが歪みに動きを追加しています。

これを外すと歪みが変化しなくなります。

さらに言うと以下の赤丸で囲った部分を外しても画面は歪むはずです。

以下の部分の実装は単に時間によってDistortion Textureのどの部分のDataを読み込むのかを決定しているだけですから。

一応確認して見ましたがやっぱり歪んでいました。

次はTexture Sampleノードです。

これに使用しているDistortion TextureのRの値を見ると

ただのNoiseですね。

あ。分かりました。この値を足すわけですから白い箇所は大きくずれ、黒い箇所は全くずれない訳です。

残りの実装です。

Texture Sampleノードから出てきた値をTexCoord[0]に追加して歪みを発生させています。

今度は歪み方を少しだけ今より複雑で自然な感じにします。

以下の実装を追加して歪みがY軸方向にも起きる様にします。

これは2つ目の歪み用の実装でTimeノードにかける値をY軸方向に大きくしただけです。

結果です。

あんまり歪まなくなりました。

勿論、歪みが生じてはいますが、全く歪まない時間もあります。上記のScreenshotでも歪みはほとんど見られません。

理由が分かりました。

Tutorialではこの二つの歪みの計算結果を足していました。私は掛けていました。

直しました。

結果です。

今度は上下左右に大きく歪んでいます。

3.2 Fluid Ninja VFX Toolsを一寸だけ見る

無料で貰った以下のToolですが、これがかなり凄いらしいです。

一寸だけどんなToolなのか見てみます。

Tutorial VideoをClickしたら以下のYouTube Channelに飛びました。

あれ。このTutorial、昔見たことがあるかも、でも中国語だったような。

確認のために一個だけ見てみます。

英語でした。

あー良かった。

どうやらこのToolはFluid Simulatorのようですね。

SimulateしたFluidをSub UVにBakeしてそれをNiagaraで使用する感じなんでしょうか?

でもFluid Simulatorって標準でUE5についていますよね。

うーん。

取りあえずProjectを作成してみます。

UE4でもProjectは作成出来るみたいですね。UE5でFluid Simulationをやった時、私のPCは壊れるんじゃないかというぐらいの轟音を発して恐ろしくなって途中で中止した記憶があるので、今回は4.27でProjectを作る事にします。

完成したProjectを開いたら以下の様になっていました。

Playボタンを押せと書いてあります。

押しました。

以下の画面が現れ直ぐに使用出来る仕組みになっているみたいです。

うーん。

来週、一寸だけ勉強してみようかな。

3.3 Fluid Ninja VFX Tools for Unreal - 01 - Overview [UE4] [5]を軽く見る

来週、勉強するかどうか決めるのに最初のTutorialを軽く見てみます。

2019か、3年前のTutorialですか。

CGHOW氏の3年前のTutorialはUEのUIがもう訳分からない変わっているので初心者にはどう直して良いのか全く分からない内容になってしまっていますがこの人のTutorialはどうでしょうか?

まず画面が全然違う。

Tutorialの画面は以下の様になっていますが、

私のは以下の様になっています。

TutorialにあるLevelは以下の二つだけですが、

私のは以下の様に大量のLevelがあります。

次にTutorialではいかのImageを写していますが、これらのImageは私のProjectではどこにもありませんでした。

まあどっかにはあるのかもしれませんが、初めて触る人には謎です。

次のSlideですがこれの意味はわかります。

Particle、BitMapsそしてPaintを入力するとFluid Simulationの結果が表示されるという意味でしょう。

次のSlideです.

Fluid Simulationの結果をSub UV TextureとしてBakeしてそれをMaterialやNiagara内で使用します。

と言う意味でしょうね。

うん。UE5には同じ機能がありますね。

次のSlideです。Ninja fluid には以下の様な沢山のサンプルがあるそうです。

これは確か似たようなのが私のにもあった気がします。

Usecasesを開くと以下の様になっています。

後、Ninja ToolsのIntroにも似たような画面がありました。

要するにこれらはSampleと言う事みたいです。

あれ、Tutorialで(今まではUser casesを見てましたが)今度はNinja Toolを開きましょうと言っています。

そうだったの。

まあいいです。

次にTutorialでは以下のCascadeのImageを紹介しています。

ええ。Cascadeかよ。Niagara使ってないの?

普段は、4.24 を使用していてVersionの古さなんて関係ないと散々主張しているくせに、TutorialがCascade使ってたら素直に見下していました。

自分の器の小ささにびっくりです。

これをInput に使用するそうです。

Toolを開始してFlower の部分にPreset Placement Example1をセットしています。

そしてInputのDensityに先程のCascadeを選択します。

うん。

これ簡単に出来そう。

一寸だけやってみます。

普通に出来ました。

なんかそれっぽいのが表示されています。

ひょっとして滅茶苦茶簡単?

Tutorialの方は以下に示したようにInputとOutputがしっかり表示されていますが、

私のは表示されていません。

Viewport じゃなくてNew Editor Window(PIE)にしたら表示されました。

Tutorialでは以下の中からRandomに色々なのを選択して変化を見せています。

真似してみます。

うん。

良く分かりません。

Free Hand Density_H…だったら自分で書いた絵がInputになるみたいです。

試してみました。

なんじゃこれは。

この機能を上手く使うにはかなり芸術力が必要みたいです。

Bakeの仕方を解説するみたいです。

Tutorialではさりげなく以下のボタンを押していますが、このButtonの説明が一切ないです。

Bakeが終わったらこのButtonを押すのか、それとも何か別な理由なのか分かりません。気になります。

以下のbuttonを押してTextureをSaveします。

次に以下のMaterial Buttonをクリックします。

このどのButtonをClickしているのかが非常に分かりにくい。

Clickした時に色がプリッと変化してほしいかったです。

OutputにBakeしたTextureがあるそうです。

一寸真似してやってみます。

あれ、何か一寸違うものが出来てる。

出来たMaterial見たらMaterial Instanceでした。

む。Materialは見せてくれないみたいですね。Materialの実装は企業秘密なの?

Sub UVが4x6で生成されています。

この辺の調整方法は調べたら直ぐ分かりそうです。

VelocityのTextureです。

これは全く意味不明ですね。

これを開いたんですが、

動きが全く無いです。

うーん。今週はここまでにしておきます。

残りは来週勉強します。

3.4 Fluid Ninja VFX Tools for Unreal - 01 - Overview [UE4] [5]を軽く見た感想

かなり使いやすい印象です。

Tutorialも分かり易いですし、使い方を覚えてたらVFXを作成するのにかなり強力な武器になりそうです。

ただし、Materialそのものは生成しないみたいですね。

Materialがないとどうやって実装したのかは分からないので実際に同じEffectを実装出来る人の仕事を奪う事はなさそうですね。

4.RPGStoryの改善

4.1 繁盛するラーメン屋の作り方マニュアルを探したら

これは来週の前文に書こうと思った事なんですが、先々週、物語を作成するのにかなり役に立った繁盛するラーメン屋の作り方マニュアルを探していたら、そのマニュアルを作成したラーメン屋の元の会社がこの前の食中毒事件を起こした所だと判明しました。

それで、かなりびっくりしたんです。

と言うのはこういう凄いマニュアルを作成出来る、頭の良い人が、何で生の鶏肉をレアチャーシューと言って売り出していたのが論理的に納得出来なかったんです。

でも少し考えたら納得しました。

何故、この人が生の鶏肉を出す事が食中毒の危険がある事が理解出来なかったのかを。

それは科学を信じていないんです。

頭は切れるし物事の本質を見極めるのも上手いんですが、科学を信じていないので、食中毒という問題に対して世間一般から見ると頓珍漢な対応を取ってしまうんです。

一説によるときちんと保健所の指導通りに鶏肉の中心温度が63℃で30分間、熱を加えていたという話もありますが、真偽は不明です。

もしそれが本当ならば、その事は真っ先に説明する義務があるはず。なのにそれをしていないの事からやっぱり科学を信じていないんです。

それで話はGame Engineに戻るんですが、やっぱり数学の基礎が出来てない人が使用するのは無理なのではないかと考えを元に戻しました。

多分、Materialとかも線形代数を理解しなくてもそれなりのものは作れるようになるんでしょう。

でもそれはこの人の作るラーメンと同じなんです。科学を理解していないから(もしくは信じてないから、ハナから理解しようという気にならない。)食中毒という最も大切な部分で頓珍漢な事をしてしまうんです。

やっぱり私は、英語も数学も(更に言えば物理も)分からない人はGame Engineを使用する事は出来ないという立場を貫く事にしました。

4.2 RPGのStoryについては

そしてRPGのStoryに関して何ですが、これはそういう科学が分からない人でも自身の経験から学んだ何かがあると思うんです。そういうものに関しては積極的に受け入れて行こうと思っています。

正しこれはanecdoteの危険性という有名な話で、検数1の成功例がどれだれ再現性があるんだ。と言う反証が常にある事は理解しておかないといけないです。

今回のRPGの骨子はすでに完成しています。

取りあえずはこれで完成までこぎつけます。ただ慌てて作成する事はしませんが。

来週からは今まで作成したStoryに基づいてEventを組んでいこうと思います。

5.Open Worldの検証

5.1  Unreal Engine 5 Beginner Tutorial - UE5 Starter Course 2022 [5]を軽く見るの続きをやる

先週、何をやったのかすっかり忘れていてBlogを見直したらこのTutorialを途中までやって残りは来週やります。みたいな事が書いてありました。

<Castle Intro

実はこれが一番興味があってどうやって城を建設するのか知りたかったんです。

見て下さい。この綺麗さを!

ここで新しいProjectを作成してます。また一から作り直すみたいです。

こっからEmptyのMapを作成してるんですが、World Partitionに変更する方法あるんでしょうか?

空の作成方法は前回とほぼ同じですが、今回はExponential Height FogとVolumetric Cloudも追加しています。

後、Level上に配置するStatic Meshのサイズが変に成る事を避けるために、mannequinを最初から配置すべきと言っていました。

これは勉強になります。

後、HDRを消すためにPost Processも追加していました。

<Auto Landscape Material

付属のAssetを使用して城を作成するそうです。

これで城は作成出来るでしょうが、Landscapeが平らのままです。

なんとLandscape用のMaterialも既に作成された物を使用しました。

それぞれのLayerのWeight-Blended Layerを作成しています。

初心者がこのLandscape用のMaterialで使用しているMaterialと同じLevelのものを自分で作成出来る様になるのは何年後なんでしょう?

その時に、ここで習ったやり方が最善の方法だったと気が付いてびっくりしたりするんでしょうか?

<Large Details

Bookmarkの仕方が紹介されていました。

これはBookmarkした位置にいつでも戻ってこれる仕組みだそうです。

錠をロックした状態でRGBの一個の値を変化させると全ての値が同時に変化するそうです。

こんな感じに仕上がっていました。

この時点でかなり綺麗です。

そして何でUnreal Sensei氏のLandscapeが他のLandscape製作者に比べて段違いで綺麗なのか分かりました。

Bookmarkで常にMain Cameraの位置に戻って確認しながらLandscapeを作成するからです。

<Water

湖と池の追加ですが、UE5にあるWater Systemは使用しないで昔通りのやり方、つまりPlanにWater のMaterialを貼り付ける方法、で作成するそうです。

まだUE5のWater Systemは実用に耐えれるレベルではないそうです。

うーん。

これはどうなんでしょう?

まだ実用に耐えれるLevelじゃなくたって使用したって良い気もします。

これは川が太すぎる気がします。

Material InstanceのDetail Panelだけ抜き出して使用しています。

こんな事出来るんですね。びっくりです。

後、このLandscape結構Tilingしています。何故かUnreal Sensei氏はここではこの問題を完全に無視していて気持ち悪いです。

<Cliffs

崖はQuixelにあるStatic Meshを使用するそうです。

NaniteだとMemoryが大きくなりすぎて問題が発生するみたいです。それでImportするサイズはHighにしたそうです。

これってVRAMの問題なんでしょうか?

それだとやっぱりVRAMのサイズが大きいVideo Cardの方が良いんでしょうか?

うーん。悩みます。

Quixel からImportしたStatic Meshを以下のような感じで繋げています。

正直あんまり上手いとは思えないです。

これ位なら直ぐに出来そうです。

<Trees

木のStatic Meshは以下に示したのを使用するそうです。

以下のやり方で4.27のAssetをUE5に無理やり追加していました。

こんな事が出来るの知らなかったです。

さっきのやつはPine Treeしか入ってないからこれも追加したと言っています。

Black Alderって松の事なんでしょうか?

気になって調べたら、松ではないんですが、松ぼっくりは出来るみたいです。Pine Treeって松の事だとずっと思っていたんですが、松ぼっくりが出来る木は全てPine Treeと言うのかもしれませんね。

ここからFasten your Sheet Beltです。なぜなら、これからどうやって配置した木の調整をするのかについて凄い細かく説明していくからです。

まずMega Scanからです。

一端、全ての木をLevel上に配置してそれぞれの木の様子を確認します。

この時、必ずMannequinを配置して実際の人の高さと比較します。

<<LODの確認>>

カメラの位置を変更してLODの確認をします。

現VersionのUE5では木に対してNaniteは使用出来ません。

のでLODを使用する以外の選択肢はないです。

因みにLODをOffにするCommandはr.forcelod 0です。

元に戻すCommandはr.forcelod -1だそうです。

更にFoliageでPaintした木にはこれらのCommandは使用出来ず、代わりにFoliage.ForceLODを使用する必要があるそうです。

<<Wind Speedなど>>

風の速度って何だ?と思ったら木の揺らぎを調節するための方法についてでした。

成程。

今の3D Gameには空気の概念は無くて風を仮想的に作り出す事は出来ないので、その代わり木そのものを揺らす事で風を表現している訳ですね。

BP Global Foliage ActorをLevel上に配置します。

何と、このActorが全部のTree(勿論、Mega Scanだけ)の風の影響を管理しています。

のでBP Global Foliage Actorで木の揺れ具合を調整します。

まず今の状態でPlayを押すと以下の様な大量のErrorが表示されます。

これはBP Global Foliage ActorのDirectional Lightが空白のためです。

以下に示したようにBP Global Foliage ActorのDirectional LightにDirectional Lightをセットします。

これでErrorは無くなります。

更にWindを調節して

木の(風による)揺れを調節します。

近づいて木の揺れを確認するとある問題に気が付きます。

Motion Blur、つまり被写体ぶれが酷いんです。

これを直します。

やり方は、木を選択してMobilityをMoviableに変更するだけです。

今度は、木の季節を変更します。

BP Global Foliage ActorのSeason Strengthの値を大きくすると

木の色が黄色くなり秋のSeasonの木を表しているようになりました。

Fantasyの世界なのでBrightnessとSaturationを高くして木をもっと明るくします。

このFantasyの世界なのでSaturationを高くする。って凄く納得出来ます。アニメの絵も写真と比較すると凄くSaturationが高いんです。

<<Forest>>

Mega Scanの設定は大体終わったので、今度はForestをやります。

これを選んだのはPine Treeがあるからです。て言っていました。

あれ?

って言ってませんでしたっけ?

逆みたいですね。

Pine Treeを全部Level上に配置しました。

これ見ると松と言うより杉ですね。

杉もPine Treeなんでしょうか?

調べたら、杉は世界で日本にしか生えていない日本固有の種です。と出て来て、

はれー。杉ってそんなに貴重だったのと誇らしい気になったんですが、一応英語の文献も調べて見たら、

WikipediaCryptomeria [6]のPageに

中国の杉と日本の杉は全く同じ種です。と書かれていました。

はい。

中国にも全く同じ杉が生えているそうです。

こういう安易な自国ナンバーワン主義がカルトに付け入る原因になるんですよ。

<<LODが間違っている件>>

以下のScreenshotを見ると分かりますが、LODで凄く遠くの場合のみに使用されるべきのやつがかなり近い位置で使用されています。

これを直します。

それぞれのStatic Meshを開きLODを確認します。

以下の例ではLOD3が滅茶苦茶なのが設定されています。

Remove LODを押してこのLODを外します。

他のStatic Meshも同じ様に直します。

はああ。

木を配置するために、こんな細かい点まで気を使っていたんですね。

Motion BlurもあるのでMega Scanでやったのと同じ方法で直します。

最後に幹の色をもっとオレンジにします。

Static Meshを選択してMaterialを見るとElement 0にBark(幹)のMaterialがセットされています。

何故これが分かるのかと言うと、

Static Meshを開いてMaterial SlotsのElement 0のHighlightにCheckを入れると

以下の様にそのMaterialがStatic Meshのどこを担当しているのかが分かります。

はあ。

これ知りませんでした。

というかStatic Meshに複数のMaterialを貼り付ける方法も知らないんです。

この辺を分かり易く教えてくれるTutorialってどこにあるんでしょうか?

後、先週Blenderで2つのMaterialを1つのMeshに貼りつけていましたが

UEでも同じ事出来るんでしょうか?

Element 0にセットされているMaterial Instanceを開き、以下のBark ParametersのBark TintにCheckを入れます。

更に色をオレンジ色に変更すると

幹の色がオレンジ色になりました。

<<Wind の調整>>

今度は風による揺らぎの調整です。

木に近づいて見ると風邪による揺らぎが追加されていますが、何か変です。外しましょう。

これはScreenshotでは全く分かりませんが、Gifで動画にすると先週みたく文字制限を食らってBlogを一回で挙げれなくなってしまうので、雰囲気だけ感じてもらうためにScreenshotだけ上げました。

以下のWindのParameterを外します。

このParameterですが、Level上に配置したPine Treeの一つを選択した時に表示されるDetail内にあるようです。

ハッキリ言ってそう言う気がするだけで本当にそうかは分かりません。Tutorialではこの辺の展開が一寸早すぎて見ているだけでは付いていけません。

すると木の一部分だけ揺れが止まりましたがその他の部分は前と同じ様に揺れています。

これもScreenshotを見ただけでは全く分かりません。が無いとそもそもどこの話をしているのかすら分からなくなってしまうので追加しました。

これを直すためにMaterial Instanceの葉を担当しているのを開いて以下の様にWindの設定を外します。

うん。

これ見るとWindの設定はMaterial Instance内にあるみたいですね。

この辺は自分で実装しないと分からないですね。

<<Foliageの設定>>

この辺は既に何回も勉強しているので軽くやります。

Paintすると木が密集しすぎているのでDensity/1Kuuを0.25に変更します。

標準のままでは以下の様に木が斜めに生えたりするのでこれを直します。

直し方は簡単でAlign to NormalのCheckを外します。

FoliageでPaintした木にはMotion Blurがまだあります。

これは以下の設定でMobilityをMovableに変更する事で直せます。

<<木のサイズを確認する>>

Mannequinを配置してPaintした木と比較します。

少し幹が太すぎる気がします。

Scale Xで調節します。

<<Mega Scanの木をFoliageに追加して設定を変更する>>

追加しました。

前のTreeと同じ様にDensityを変更します。

Align to NormalのCheckを外します。

MobilityにMovableをセットします。

この後もそれぞれの木に対して微調整をしていましたが、あまりに量が多くなってしまったので多少は端折って記録する事にしました。

結果です。

<<Post ProcessのSaturationとContrastを上げる>>

最後の仕上げにPost ProcessのSaturationとContrastの値を上げて全体的に彩度を上げます。

<<Texture Streaming Pool Over 519…..>>

最後に以下のErrorの直し方についてです。

R.Streaming.poolsize で10000位の値を指定します。

これでこのErrorが消える事は分かったんですが、それ以外は全く分かりませんね。

何でこのErrorが起きるのかとか、そもそもTexture Streaming Poolって何なのかについてすら分かりません。これは後で調べる事にします。

まさか、木の作成にこんなに時間と手間がかかるとは思いませんでした。

今週はここまでとして城の作成は来週やります。

5.2  Unreal Engine 5 Beginner Tutorial - UE5 Starter Course 2022 [5]の感想

今週、勉強した範囲での感想というか木の配置に関しての感想です。

こんなに木の設定を弄る必要があるんでしょうか?

私、Game はあんまりしないので分かりませんが、背景の木なんてあんまり気にしていないと思います。

こういうのは結局、記号なんです。

ここに木が生えています。だから砂漠ではありません、サバンナでもありません。遠くは見えません。という記号です。

それで今回、木に関してした設定に対して

  • 絶対必要、
  • 必要、
  • 出来たらやるべき、
  • 要らない。

の4つに分類してみようと思います。

さらにUserの立場から見て必要かどうかと、Programmingを総括する立場から人員をそんなところに長時間さけるのかどうかについても考えてみます。

<全ての木をLevel上に配置してそれぞれの木の様子を確認する。その時は必ずMannequinを配置して実際の人の高さと比較する>

絶対必要。

これはやった事はなかったですがやったらかなり役に立つと思いました。特にMannequinと比較する事で相関的な正しさの確認が出来ます。

日常生活でも木の高さって結構規準になっています。

だいたい電信柱と同じ高さとか、そんな感じでみんなの心の中に大きさの基準として有る気がします。

のでGameをPlayして木のサイズがMannequinと比較して大きすぎたり小さすぎたりしたら、かなり奇抜な感じがすると思います。

Costの観点から言えば、時間をかけてもやらないといけないでしょうね。

これ少数でGameを製作していた場合で、製作者が全員Programmerだとします。

そういう場合でもこれに時間をかけるべきなのかと言うと、かけるべきだと思いますね。

でもProgrammingに疲れた後で、休憩を兼ねてやっても出来る内容ではあると思うのでそういう感じでやるべきでしょう。

<LODの確認>

絶対必要。

まさか間違ったLODが混入されたTreeが販売されているなんで思いもしなかったです。

納入時の品質チェックみたいなもんですね。

でもこれってProgrammerじゃなくてもDesignerでも出来そうですよね。

後、Programmingが全く理解出来ないけどGameを作成したいって人を安く雇って、それ専門でやってもらうのもありかもしれません。

<LODをOffにする>

要らない。

これの意味はあんまりないと思います。遠くのモノは良く見えないのが普通なのであえてLODをOffにして何を確認するのか良く分かりません。

<風による木の揺れ>

要らない。

風が吹いているかどうかをわざわざ木を見て確認するUserはいないでしょう。

だってGameに関係ないもの。

これが関係するのは釣り竿がしなっているのが、風のせいなのか魚が餌をつついているかなら別です。

<Motion Blur、つまり被写体ぶれの補正>

絶対必要。

被写体ブレがあると映像が見にくくなります。折角UEで綺麗な映像を作成しているのに全部無駄になってしまいます。

こんなの全部Movableにセットするだけです。直ぐに出来ます。Costもかかりません。

<幹の色など、購入したAssetを修正する事>

出来たらやるべき。

これはやりたくてもきちんとしたDesignerがいないと修正したらもっと悪くなりました。状態になってしまうでしょう。

そのDesignerが例えば絵ではこの木よりも精密で綺麗な木を描けたとしても、実際に一人でUEを触って直せるかと言ったら直せない訳で、Designの能力があって更にUEのMaterialの設定にも詳しい必要があります。

そういう人が暇しているならやってもらうのは良いですが、それ以外は現実問題として無理だと思います。

<木が斜めに生えるのを直す>

必要。

確かに木が斜めに生えたらおかしいです。

直しましょう。

しかもCostがかかりません。Checkを一個外すだけです。すぐ出来ます。

ただしこの問題、私はGameの本質を見失う可能性もあると思っています。

と言うのは昔、漫画に出て来る人物の首が細いのをバカにする人達が居たんです。

彼らは、漫画家は美大で習うデッサンの基礎が出来てないからだとバカにしたんですが、そしたらその辺りから漫画に出て来る人達の首が急に太くなったんです。

でもそれに比例して漫画が面白く無くなってしまったんです。

一番、分かり易いのはOne Pieceです。登場人物の首が太くなるにつれて漫画がつまらなくなっていきます。ホントに面白い程、相関関係があります。

である時、アメリカのスーパーでBarbie人形を見たら凄く首が細いんです。マンガやアニメみたく。

それで気が付いたんです。

漫画の登場人物の首が細いのはなにもデッサンが狂っていたからじゃないんです。そうした方が美しく見えるからだったんです。

そういうマンガ界の今まで培ってきた遺産を捨てて安易に正しい事に乗っかるととんでもないCostを払う事になってしまいます。One PieceがつまらなくなったようなCostを払う事になる訳です。

<BrightnessとSaturationの調整>

絶対必要

これ上げるだけで、絶対きれいに見える様になります。

商業的な成功を目指すならば美術のプロの言葉なんで無視すべきです。

<木の季節の調整>

絶対必要

緑の木と赤い木が並んでいると映えます。

これ美術の専門家に言わせると赤と緑は補色だから、うんたらかんたらと言いますが、絶対間違っています。

以上です。

6.Gaeaの勉強

6.1 先週の反省と再挑戦

 先週はGaea Beginner Tutorial Series : Part 6 - Importing to Unreal Engine/ Blender [7]を実装するまでやりましたが、その結果は、以下の通りで

成功したとは言い難いです。

この原因は、OutputしたMaskの質が良くなかったのとその内の幾つかが読み込めなかったのが原因です。

読み込めなかった原因は分かりました。名前が悪かったからです。

これ一個のPngしか指定出来ないようになっていますが、実際は沢山のPngのDataを読み込む時もある訳です。

その時は、まず名前の付け方ですが、名前_0_0から始まって、名前_1_0みたく全部の名前をある法則に沿って名付けるみたいです。

その法則に沿ってないからErrorになったようです。

のでPngの名前を変更したらErrorが消えました。

取りあえずこれでLandscapeを作成してみます。

あ、大きさをそろえるのを忘れていました。

もう一回やり直します。

うーん。前よりは確実にイイですね。

もう少し細かく見てみましょう。

Top Viewです。

川が上手く出ていないですね。

いや影の部分が黒いのでそこが川にみえるのかもしれません。

Unlitにしたら更に黒い部分がでてきてしまいました。

確認のためのLandscape用のMaterialを開いたらLayer Riverには何も接続していなかった。

これでは仕方ないです。

黄色くしてみました。

今度は出て来ました。

後、黒い部分が問題ですね。

これはどうやってLayerに分割するんでしょう。

でも先週と比べたらかなり良いです。

ちょっとPlayして実際に歩いて見ます。

6.2 実際に歩いて見る

デコボコ過ぎます。

これは実用には耐えれないでしょう。

World Partitionは効いているんでしょうか?

wp.Runtime.ToggleDrawRuntimeHash2Dを使用して確認します。

以下に配置したStatic Meshが

消えました。

World Partitionは効いています。

見やすいように色を変えました。

結果です。

こうやって見ると川はしっかり写っていますが、

近づくと、以下の様に川なのに他の箇所より高くなっていたりします。

Height MapがGray Scaleなので高さってやっぱり255段階で表していると考えられます。

となると20cm位が限界な気がします。

255x20≂5100cmつまり51倍位でやったら綺麗になるんじゃないでしょうか。

それ以上の高さはMapを重ねる事で対応すべきな気がします。

試しに51で作成してみます。

平ら過ぎました。

200で試してみます。

全体的にはSmoothだったんですがやっぱり尖っている箇所は尖っていました。

こういうのはどうやって直すんでしょうか?

やっぱり最後は人力になるんでしょうか?

6.3 これからの課題

以下の事を解明する必要があります。

<Gaea

  • Gaeaで一辺4kmTerrainを作成する方法
  • 1009x1009 pixel16枚のPngOutputする方法
  • 高さによってHeight Mapを複数枚作成する方法

<UEのImportに関して>

  • UEImport出来る最大の高さ
  • 複数枚作成したHeight MapUEImportする方法

<UEの地形の修復方法について>

  • 歪んだ部分の修復方法について
  • 川や湖の作成について(Water Systemを使用)
  • 雪や砂漠での足跡の追加
  • 建物の追加
  • Monsterの追加

この中で絶対確かなのかGaeaの有料版を買わないと複数のMapのExportは出来ない事です。

ので今出来る範囲で勉強するがまあ無難なとこでしょう。

6.4 来週からの何をするか?

取りあえず、Klaus氏のGaeaのTutorialを幾つか試してみます。6.3にある目的を忘れずに手元にあるTutorialをコツコツこなす所からやっていきます。

7.雪山のMapの作成

先週、UE4: Step-by-Step to Creating Your First Volumetric Cloud Material [8]を勉強しました。それでかなりVolumetric Cloudに使用されているMaterialの作成方法について理解出来ました。

ので今週はBen Cloward 先生のVolumetric Cloud用のMaterialについて解説してるVolumetric Cloud Materials - Building Worlds In Unreal - Episode 33 [10]を勉強します。ただしこのTutorialの前に同じVolumetric CloudのTutorialであるVolumetric Clouds - Building Worlds In Unreal - Episode 32 [9]があるのでそれを先に勉強します。

7.1 Volumetric Clouds - Building Worlds In Unreal - Episode 32 [9]を軽く見る

 ここではVolumetric Cloudの品質を管理する6つの設定について勉強するそうです。

当然ですが、品質を上げるとその分Costが掛かります。

そのバランスの中から最適解を見つけるの事が出来る様になるのがこのTutorialの目的だそうです。

はー。何か凄い話です。

やっぱりBen Cloward先生のTutorialは抜きんでて素晴らしいですが、最初から掲げている目的が違うんですね。

<計算Costの確認方法>

それは兎も角として、Costと品質を比較するためにはCostを定量的に測定する方法が必要になります。

まずは以下の箇所からGPUをCheckしています。

これはUE5でも同じ様に出来るのか実際に試してみます。

全く同じかどうかは不明ですが出来ました。

この中にVolumetric Cloudがあるからそれを見ろと言っています。

が私がひらいたLevelにはそもそも空が無かった。

ので空があるLevelを開いて確認したら

ありました。

この数字ですがmsが単位だそうです。

Volumetric CloudをRenderingするのに約2msかかっています。

更にVolumetric Cloudの値にプラスしてTotalの時間も見る必要があるそうです。

Totalの値は22.8msですが、

Volumetric CloudをOffにすると

以下に示したように19.73msまで落ちます。

つまり約3msも落ちている事になります。

うーん。凄い。

自分のProjectでも確認してみます。

Volumetric Cloudが2.34msでTotalが10.87です。

Volumetric CloudをOffにしました。

Totalは6.29msになりました。

正し、この平均値、結構乱高下しています。

この値だけ抜き出して、Volumetric CloudをOffにする事でVolumetric CloudにかかったCost 以上のCostがTotalでは削減されているとは言えない気がします。

<設定1>

最初の設定はVolumetric CloudのLayerにあるLayer Bottom AltitudeとLayer Heightです。

あ、この2つなら先週勉強しました。

Layer Bottom Altitudeが雲の発生する高さを決定して、Layer Heightが雲そのものの厚さを決定するはずです。

この後、Tutorialではこの2つのParameterを弄って、Layer Bottom Altitudeの値が小さい程、またLayer Height の値が小さい程Costが少なくなっている事を発見しています。

これから言えるのは、雲はなるだけ下に作成してしかも薄い方がCostがかからないと言う事です。

これ自分でも確認してみますか。

雲を確認するために画面一杯に雲を写しているせいか、Volumetric Cloudの値が3.10とかなり高いです。

以下の値に下げてみました。

結果です。

下がっていますね。画面は移動していなので、この値以外の変化はないはずです。

Layer Bottom Altitudeの値が小さい程、またLayer Height の値が小さい程Costが少なくなっている事が確認出来ました。

<Light multiple Scattering

次の設定です。

何とこの設定、Volumetric Cloudに使用されているMaterial内のVolumetric Advanced Outputノードの設定にあります。

Multi-Scatteringの欄にあるMulti Scattering Approximation Octave Countです。

Light Scatteringですが、これはTutorialによるとLightが水滴を通過した時、水滴内で散乱(Scattering)します。

Unreal Engineでこの散乱を計算する方法ですが、multiple Octaves (多数のオクターブ?)もしくはMultiple Steps(多数のステップ)で計算します。

このmultiple Octaves (多数のオクターブ?)の意味は分かりませんが、この計算を何回繰り返すのかを決定しているのがここだそうです。

試しにこの値を2にしてみました。

結果です。

一応比較のために、Multi Scattering Approximation Octave Countの値が1の時も貼っておきます。

確かに凄いですが、これを計算するのに1分位かかっています。

この値を1以外にする事は私の現在のPCでは無理ですね。

ここはTutorialの説明をまとめるだけにします。

TutorialではMulti Scattering Approximation Octave Countの値を2にした場合、Costが2.26に挙がっています。

Unreal EngineではGameではこの値は1、それ以外のReal timeでRenderingする必要なあまりないけど、高品質が要求されるモノに関しては2にセットする事を進めているそうです。

<雲が雲自身に影を投影する方法について>

これ、一体何をいっているのかと思ったら、雲の中の話だそうです。雲の中にその雲自身によって出来る影の計算についてだそうです。

この影を計算する方法は2種類あって

  • Ray Marching
  • Beer Shadow Map

だそうです。

Volume Renderingは大学の研究でやってたんで、この辺は勉強したらすぐ理解出来るでしょう。Beer Shadow Mapは聞いた事が無い気がしますが。今はサラッと過ごしておきます。

Tutorialで簡単にこの2つのMethodについて解説していました。

Ray Marchingは実際にRayを飛ばして散乱させ、その雲に影が掛かるのかどうかを計算しますが、Beer Shadow MapはShadow Mapを使用してその雲に影がかかるかどうかを決定するそうです。

そしてここからが重要な所ですが、UEでその設定を管理するのは、前の設定と同じ、Volumetric Advanced Outputノード内にあります。

Option欄にあるRay March Volume Shadowです。

試してみます。

外しました。

結果です。

元は2.2…位だったので凄い下がっています。

結果です。

以下に比較のためにRay Marchingの結果を示しておきます。

あんまり質が悪くなった気はしませんね。

Tutorialでは日が沈みかけた時で試しています。

これは確かに違いがありました。ただしBeer Shadow Mapの結果も凄く悪いという感じは無いです。

<Cast Shadow by Cloud

これはDirectional Lightの以下の設定が担当しています。

このDefault値の設定がTutorialと違っていてTutorialでは以下の様な設定になっています。

Tutorialの説明だとCast Shadows on CloudsとCast Shadows on Atmosphereが関係してくるのは、非常に大きな物体が雲の上に存在してその雲に影を投げかける時だけだそうです。

それだったら今のUE5の設定でもDefaultではOffにしておいて良い気がします。

Cast Shadows on CloudsとCast Shadows on AtmosphereをOffにしたら

から

に変化しました。かなりの変化です。

これもTutorialの結果とは違ってTutorialではこの2つをOnにした場合、2.0msから2.1ms位しか上昇していませんでした。

UE5になってから何か実装が変わったのかもしれません。

最後のCast Cloud Shadowsです。

Onの状態です。

Offの状態です。

雲の見た目が劇的に変化しました。

ただしTutorialによるとCostはほとんど変化しないのであまり問題じゃないと言っています。

自分のProjectで確認してみます。

Offの時です。

Onの時です。

確かにほとんど差がないです。

あ。

今、私のProjectのAtmosphere and Cloudの本当のDefault値を見たら以下の様になっていました。

何で?

どっかで変えたんでしょうか?覚えてないです。

<Cloud Ambient Occlusion

これはSkylightにあるそうです。

これですね。

あると僅かに雲の暗い部分が増える感じです。

まあはっきり言って肉眼で確認するのは難しいです。

Tutorialの結果ではCostはほとんど変わってないみたいです。

私の結果は有りの時が

無しの時が

で有りの方がCostが低く成りました。

???な結果なので慎重に判断する必要があります。

この値が問題になった時は、Sample数を増やして確認しますが、今はそのままで先に行きます。

<Use per Sample Atmospheric Light Transmittance

最後の設定はUse per Sample Atmospheric Light Transmittanceだそうです。これはVolumetric CloudのCloud Tracingにあります。

Tutorialの解説によるとUEは、全てのモノがどのようにLitするかを決定するGlobalな値を決定しますが、その値をそれぞれのSample毎に計算するようにする設定だそうです。

何かスゴイのが最後に出て来ました。

Use per Sample Atmospheric Light TransmittanceをOnした状態です。

Offにした時です。

これはかなり違いますね。

でもCostも凄そうです。

見てみます。

Offの時です。

Onの時です。

うーん。

そんなに変わってない感じです。

Tutorialの方では、2.0ms から2.1msぐらいに上がったみたいです。

あんまりCostは掛からないみたいですね。

<Costの比較>

最後にTutorialでは全部の設定をMaxにした場合とMinにした場合のCostの比較をしています。

Maxの時です。

Minの時です。

うーん。

なんとも言えませんね。

この結果からVolumetric Cloudは使用しないとはならないだろうし、Costがかかるから雲をなるだけ薄くしろともならん気がします。

それは兎も角として

なんとBen Cloward先生のGPUはRTX 2070だそうです。

Superが付くかどうかは言ってませんがどっちなんでしょうか?

私、次に買うGPUはRTX 3060のVRAMが12GBのやつかRTX3070のVRAMが8GBのどっちかで悩んでします。

RTX 2070SだとRTX3060よりは性能良さそうですね。

うーん。

RTX3070の方が良いのかな?

でも8GBなんだよな。どうしようかな。

7.2 Volumetric Cloud Materials - Building Worlds In Unreal - Episode 33 [10]を軽く見る

これは来週に回します。

8.UI Designの勉強

今週は先週作成し始めたStart 画面の後ろの3Dの作成の続きをやります。

まずBookmarkを以下の場所でセットしました。

この角度から見た時にもっとも映える3Dを作成します。

こんな感じです。

9.Anime Renderingの勉強

今週もアニメレンダリングの勉強をしていきます。

9.1 Anime Renderingについて

これ先週のBlogにも書いたんですが、勘違いする人もでてくると思われるのでしばらくは書き続けておきます。

Anime Renderingという言い方ですが、私が勝手に作った言葉です。

英語でアニメ風のRenderingを指す言葉にはStylized Rendering、Toon Rendering、そしてCel look Renderingと言う言い方が一般的です。しかしこれらの言い方はある問題を含んでいてあんまり適切じゃない気がしています。

Stylized Rendering、Toon Renderingは日本のアニメそのものを指すだけではなくそれ以外のRenderingも含んでいます。

例えば、Stylized Renderingは写実的でないという意味です。写実的でなければ別にアニメ風じゃなくても何でもいいんです。

Toon RenderingはCartoonを指しています。ならこれは同じ意味だろう。と思うかもしれませんが、実は、英語ではアメリカ風のアニメをCartoon、日本風のアニメをAnimeといいます。のでToon Renderingと聞くとアメリカ風のアニメを指していると受け取られる可能性もあります。

Cel look Renderingは日本のアニメ風を指す言葉ですが、セル画を知らない世代には全く通じないです。

だから日本のアニメ風のRenderingと言う意味を特に強調する意味でAnime Renderingという言葉を勝手に作成しました。

後、RenderingとShadingは本来は全く違う意味です。しかし現実にはToon Rendering とToon Shadingは全く同じ事を指しています。のでここではAnime Renderingと言ったりAnime Shadingと言ったりしますが、全く同じ意味で使用します。

9.2 今回の予定

今回、Anime Renderingとして、ここで勉強する予定の内容を書いておきます。

それではそれぞれの勉強をして行きます。

9.3 PPLineDrawingの検証

PPLineDrawingはUnreal Engineでイケてるイラストを描くためのノウハウ大放出! | UE4 Manga Anime Illustration Dive Online [11] で紹介されいます。

PPLineDrawingはUEのPlugin の中でOutlineを抽出する事に関して(少なくとも今私が知っている限りでは)もっとも優れています。

Anime Renderingを作成するのに綺麗な輪郭線の作成は絶対に必要です。

輪郭線を作成する手段としてOutlineの抽出はもっとも一般的かつ簡単な方法なのでしばらくはこのPluginの勉強をし続けます。

今週はCrease LineのParameterについて勉強します。

<Default値>

Default値です。

まず言いたいのが足のズレです。

これは輪郭線として問題有り過ぎです。

しかしCrease Lineは問題あるだけじゃないです。

以下の部分は非常に細かい部分でもLineとして抽出しています。

後、全体的に透明感のある仕上がりになっています。

芸術性が高いOutlineです。

<Crease Line Power Exp

Power Expから調べていきます。

値を大きくしました。

真っ黒です。

次にPower Expの値を小さくしました。

線が全体的に薄くなりました。

成りましたが濃い部分も残っています。これはSaturationした後でPower Expしてないからだと思われます。

足です。

足のズレは直っていません。単に色が薄くなっただけです。

後、足の線は本当に薄いです。Outlineで足の線を出すのはかなり難しいのかもしれません。

いやCustom Depth Stencilを使えば簡単に出来るでしょう。

2022-05-23のBlogより

この辺は輪郭線を作成するためのIdeaとして後で実際に試す事にします。

<Crease Line Ratio

値を大きくしました。

そしたら1以上の値には出来ませんでした。

ので0.5にしてみます。

線が薄くなりました。

Crease Line Ratioは一部分だけ線が濃く出る事はないですね。

色々な角度から見ましたが、線は均一に薄くなっています。

足のズレは直っていません。

線を薄くしても細かいLineが消える事はない様です。

<Crease Line Scale Horizon

この値を大きくすると縦線が太くなります。

しかも全部の線が太くなるのではなく一部の線が非常に太くなります。

これは線に強弱をつけるためにはかなり良い方法に思えます。

線を太くしても細かい部分の線が太くならないため細かい部分はくっきりしています。

当然ですが足はブレブレです。

今度は線を細くしてみます。

0にしてみました。

本当に地面から垂直な線は消えているみたいです。

顔のアップです。

うーん。線画消えているのは本当に極一部ですね。

当然ですが足のブレは直ってません。

<Crease Line Scale Vertical

もうこれは値を小さくしたら足のブレが消えるかどうかです。

Crease Line Scale Vertical=1にしていました。

消えています。

ああ。Crease Line Scale VerticalのDefault値は1の方が良い気がします。

全体像です。

顔の輪郭です。

細かい点でもしっかり線になっています。

<Crease Line Thickness

Crease Line Thickness = 1にしました。

全体的には線はしっかり出ているように見えますが、

近づくと線の太い部分だけが線として残っている事が分かります。

なんと足のブレが無くなっています。

何でなんでしょう?

9.4 公式のDocumentStylized Rendering [12] の勉強

今週はStylized Rendering Landscape [13]を軽く見ます。

又、警告が書かれています。

怒っていますね。

こういう知的産業に属するアメリカ人って怒りの感情を表に出すのはキリスト教の教えに反すると信じていて(7つの大罪のWrathに当たる。)、普通は絶対に怒りの表情が顔に出ないようにするんですが、もう文章から怒りが滲み出て来てます。

私の想像ですが、このTutorialを作成した人は学習者と喧嘩になったんでしょうね。それで怒りまくってしまったんでしょうね。

そしてこの喧嘩の原因は、学習者とこのTutorialを作成した人との間に、大きな認識の違いがあったせいだと思います。

それはStylized Renderingだからと言って、これを習う人が写実的なRenderingについては全く勉強しなくても理解出来る訳ではないって事です。

このStylized Renderingには3つの要素が関わって来ます。

それは

  • Material
  • Landscape
  • Post Process

です。

これらの基礎を理解しないでStylized Renderingを理解する事は絶対に出来ません。

更に詳しく言うとLandscapeとPost Processの勉強にはその前提としてMaterialを理解しておく事が必要です。

そのMaterialですが、理解するためにはLinear Algebra つまり線形代数の知識が絶対に必要です。線形代数は通常は大学で習います。つまり大学数学が理解出来ない人にはMaterialを理解する事は出来ません。

所が、何故かこの事実をはっきり言う指導者を私は見た事ありません。

Gameを製作するんですよ。Gameで遊ぶんじゃないんですよ。

それをはっきり言わなければ、学習者は全くMaterialなどを理解出来なくてもStylized Renderingの作成方法を理解出来ると思って勉強しにきます。

だから学習者が怒るんです。話が違うって。

これUnityだと多分、最初からC#が使えない人ははじかれるので、こういう勘違いは起きないんだと思います。

多分ですがそれが原因で、このTutorialを作成した人は学習者と喧嘩になって、このTutorialを更新するのを止めてしまったんでしょうね。

はい。

勝手な想像でした。

Landscape用のMaterialは以下のBlockで構成されています。って解説されています。

うん。これって実際のProject開いて確認しないといけないの?

開きました。

これってLandscape Layer Blend使用しないで作成してます。

そんな面倒な事して大変でしょう。

と思ったらありました。

Rock and Grass Diffuseだけ読んでみる事にします。

ここ。このLerpで草と土を混ぜています。

Preview を見るとこんな感じです。

このLerpのAlphaにはWorld Aligned Blendノードが繋がっています。

World Aligned BlendノードはLandscapeの崖を判定するために、今まで何回か使用しましたが、その時はAlpha値を使用しています。

このTutorialではw/Explicit Normal値を使用しています。

解説には以下の様に書かれています。

うーん。Alpha値とは違いが有る事は分かりましたが、具体的な違いは分かりません。

まるで筆で直接Paintした感のある草ですが、

以下の方法で作成されています。

LerpのAlphaに使用されているTextureを見てみましょう。

おお。

こうやってブラシ感を出していたんですね。

<Rock and Grass Blending

ここでさっきの崖のBlend方法について簡単に解説していますね。

ただこの例だとWorld Aligned BlendノードはAlphaを使用しています。

<Landscape Splines

これですね。

Landscape Splinesは使った事ないです。

正直これの使い方は分かりません。後で勉強します。

以上です。

9.5夏森轄(なつもり かつ)先生のBlender】セルルック講座 ~ノード、輪郭線、法線転写、RGB分離~ [14] を勉強する

先週、線を追加しましたが、このやり方が特殊で意味が今一理解出来ていません。

ので今週はそれについて研究します。

<Solidify

Modifierの内の一つです。この機能がまず分かりません。

公式のDocumentによるSolidify [15] の解説Pageがありました。

これ読むとSolidify ModifierはMeshに厚みを追加する機能見たいですね。

成程、その厚みの部分に別のMaterialを追加した訳ですね。

となると、やっぱり先週の解釈である

が正しいと言う事でしょうか?

多分、Modelを2個作って輪郭線用のModelには内側にだけMaterialを貼ります。勿論、Backface CullingはOnのままです。そしてもう一つのModelのサイズをこのSolidify ModifierのThicknessの値だけ小さくするんです。

そうするとその分だけ輪郭線用のModelの内側が見える様になり、それが輪郭線になります。

これをやっているんだと思います。

これでもう一回検討してみる事にします。

<Offset やThicknessの値を変更してみる>

先週、以下のように書き残しています。

のでOffsetの値を-1から1に変更したり、Thicknessにマイナスの値を入れたりしても上記の理論が通じるのか検討します。

Thicknessの値を-0.05にしてみました。

球の大きさは変化しないで輪郭線の分だけ大きくなりました。

これは、Thicknessの値がマイナスの時は、Model用のMeshのサイズはそのままで輪郭線用のMeshが大きくなったと考えると、辻褄が合います。

Offsetの値を1に変更した場合、

Thicknessの値がマイナスの時は

輪郭線は球の内側に追加され結果として球は輪郭線の分だけ小さくなりました。Thickness=プラス、Offset=マイナスの時と同じです。

これは、最初の考え方で説明出来ます。

Offsetの値が1で、

Thicknessの値がプラスの時は、

輪郭線の分だけ大きくなりました。

これはOffsetの値が-1でThicknessの値がマイナスだった時といっしょです。

そしてこの結果は、

その時の説明である以下の解釈で

説明出来ます。

先週は、解釈が上手く出来ないとまとめていましたが、こうやって考えると先週の解釈で全部の条件の結果の説明が出来ます。

<Solidify Modifierの実際の機能に関する推測>

上記の考察がしっかり当てはまる事からSolidify Modifierの厚みを加えるという機能は、実際はそのMeshを2枚作成して、一個はそのまま、もう一個は輪郭線に使用する為に裏返して配置しているのだと思われます。

これは全くの推測で、何らかの文献にそう述べている部分はないです。しかしそう考えると全部の結果が上手く説明出来ます。

今週は、Solidify Modifierについてじっくり検証すると決めていたんですが、最初の推測で全部説明ついてしまったのでこれで終わりにします。

10.まとめと感想

今週はNiagaraとMaterialの勉強両方でSub UVが出て来ました。Sub UVは兎も角として、UEによるReal Time Simulationは個人的には凄い興味のある分野で、新しいPCを買ったらかなり深く勉強したい所です。

Fluid Ninja VFX Toolsは結構面白いPluginです。これはすこしだけ勉強してみる事にしました。

RPGのStory製作は一端終わりにして来週から実際のGame内でEventとしてStoryを追加していきます。

Open Worldの作成では、Landscapeにおける木の配置について勉強しました。単に木を配置するだけなのにこんなに色々な事をする必要があったのかと驚きでした。

後、Open World では城の作成方法も勉強したかったんですが、それは時間が足りず来週やる事にしました。

Gaeaの勉強は一応基礎の部分は完成しました。先週、出来なかったUEのLandscape作成におけるMaskを使用したLayerの設定が正しく出来るようになりました。

まだ課題は沢山ありますがコツコツ勉強していきます。

雪山の作成ではここ最近、Volumetric Cloudの勉強をしていますが、今週の勉強でかなり理解が進みました。

UI DesignではStart画面のBackground Imageを3dで作成しました。がこれはOpen World で城の作成方法を勉強した後でやりたかったです。ので今週は少しだけしかやっていません。

Anime Renderingの勉強ですが、まず線画に対してですが、色々なやり方がありますが、最終的にはCustom Depth Stencil一択になりそうです。

次にStylized Renderingについてですが、かなり勉強し甲斐があります。Landscape Splinesに関してはこの技術そのものを知らなかったので、これを勉強してからもう一度Stylized Renderingへの応用方法について考えてみる事にします。

最後に、Blenderにおける輪郭線の抽出方法で、Solidify Modifierを使用する方法に関してSolidify Modifierの機能を考察しました。

以上です。

11.参照(Reference

[1] CGHOW. (2022, June 12). Unreal Engine 5 Niagara Beginner Tutorial - UE5 Niagara Starter Course! [Video]. YouTube. https://www.youtube.com/watch?v=NcJ1ZP7tFUk

[2] Cloward, B. [Ben Cloward]. (2022b, June 9). Basic Post-Processing Effects - Shader Graph Basics - Episode 49 [Video]. YouTube. https://www.youtube.com/watch?v=ipKQt0BxQSA

[3] Deferred shading. (2022, June 22). In Wikipedia. https://en.wikipedia.org/wiki/Deferred_shading#:%7E:text=In%20the%20field%20of%203D,by%20Michael%20Deering%20in%201988.

[4] LearnOpenGL. (n.d.). LearnOpenGL - Deferred Shading. Retrieved July 17, 2022, from https://learnopengl.com/Advanced-Lighting/Deferred-Shading

[5] Ketzer, A. [Andras Ketzer]. (2019, November 12). FluidNinja VFX Tools for Unreal - 01 - Overview [UE4] [Video]. YouTube. https://www.youtube.com/watch?v=HBjP3YeOH2k&list=PLVCUepYV6TvPnVELcyGoSDhpoLO7PyT6_&index=2

[6] Cryptomeria. (2022, June 22). In Wikipedia. https://en.wikipedia.org/wiki/Cryptomeria

[7] Klaus. (2022, January 26). Gaea Beginner Tutorial Series : Part 6 - Importing to Unreal Engine/ Blender [Video]. YouTube. https://www.youtube.com/watch?v=EFXIm4TmMKI&list=PLyNtvXvNIFMMHnW1_-hXO3RNPp_Z5CExF&index=6

[8] WorldofLevelDesign. (2021b, February 16). UE4: Step-by-Step to Creating Your First Volumetric Cloud Material [Video]. YouTube. https://www.youtube.com/watch?v=aYxvN5cs-EU

[9] Cloward, B. [Ben Cloward]. (2021a, May 27). Volumetric Clouds - Building Worlds In Unreal - Episode 32 [Video]. YouTube. https://www.youtube.com/watch?v=dolfk2z4LDo

[10] Cloward, B. [Ben Cloward]. (2021b, June 3). Volumetric Cloud Materials - Building Worlds In Unreal - Episode 33 [Video]. YouTube. https://www.youtube.com/watch?v=rEYojMx26T0

[11] Epic Game Japan [Unreal Engine JP]. (2022, February 21). Unreal Engineでイケてるイラストを描くためのノウハウ大放出! | UE4 Manga Anime Illustration Dive Online [Video]. YouTube. https://www.youtube.com/watch?v=QuYIkSozV6w

[12] Epic Games. (n.d.-a). Stylized Rendering. Unreal Engine Documentation. Retrieved June 19, 2022, from https://docs.unrealengine.com/4.27/en-US/Resources/Showcases/Stylized/

[13] Epic Games. (n.d.-b). Stylized Rendering Landscape. Unreal Engine Documentation. Retrieved July 17, 2022, from https://docs.unrealengine.com/4.27/en-US/Resources/Showcases/Stylized/Landscape/

[14] 夏森轄(なつもり かつ). (2022, May 21). 【Blender】セルルック講座 ~ノード、輪郭線、法線転写、RGB分離~ [Video]. YouTube. https://www.youtube.com/watch?v=e1tFq5OoSY0

[15] Blender. (n.d.). Solidify Modifier — Blender Manual. Retrieved July 17, 2022, from https://docs.blender.org/manual/en/latest/modeling/modifiers/generate/solidify.html