UE4の勉強記録

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

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

<前文>

<今週のDirectXの勉強>

当分の間、前文は以下に示した3つの日本語のDirectX 12の本の勉強の進行具合や勉強して分からない事や逆に理解した内容、後、シンプルに感想などを書きます。

<<DirectX 12の魔導書>>

「Chapter 1 前提となる知識とDirectX 12の概略」を読みました。

1.1から1.4までの内容は元々知っている内容でした。ただしSIMD演算は知らなかったです。

1.5の内容ですが、私はDirectX 12ってMulti-Threadが使えるようになった。と勝手に思っていたんですが、そういう話は書いてなかったですね。

DirectX 12の特徴を簡単に解説するために、まとめる。という抽象的な概念で説明していました。

これが結構、理解出来なかったです。

でもこういう概念って何年も勉強して始めて理解出来るものかもしれませんので、気にしないで先を読んでいこうと思います。

後、久しぶりにがっつりと日本語の本を読んだんですが、カタカナで専門用語が書いてあるのが、結構きつかったです。

ディスクリプタはDescriptor の事を指しているのかとか推測は出来ますが、瞬間的には分かりません。しかも分かった後も、DescriptorかDescripterかどっちだったけ。みたいなへんな所が気になって本の内容に集中出来なくなってしまいました。

Chapter 1はこの本を勉強するための予備知識の確認のような気がします。

一応、確認するけど、これ位は知っているよね。みたいな感じです。

多分、後ろのChapterに行く程、指数的に難しさが増していくと思います。

<<HLSLシェーダーの魔導書>>

この本はDirectX 12には珍しい3D Graphicsの基礎を教えている本です。

と思ったらやっぱり前書きで、基礎を教える本が無いので初学者が挫折しやすい。それを避けるために書いた。みたいな事が書かれていました。

でも、それだったらもっと環境設定をしっかり説明して欲しいとも思いました。

初心者って勉強そのものよりも勉強するための環境設定で躓いてしまうものだからです。

取りあえず今週は「Chapter 1 レンダリングパイプライン」を読みました。

簡単に読んだ限りですが、内容的には大体知っている事でした。

<<Direct3D 12 ゲームグラフィック実践ガイド>>

Chapter 1の「プログラミングを始める前に」を途中まで読みました。

キャッシュ フラッシュの意味がわかりません。

多分MemoryにあるDataをCacheに移す事だと思いますが、そんな言葉があるんでしょうか?Cache Flashで検索したんですが、全く引っかからないです。

1.2のDirect3D概論によると、Multi-Threadに対応したのはDirectX 11からとありました。

私はMulti-Threadが採用されたのはDirectX 12からだと勝手に思っていました。だからDirectX 12の魔導書でもDirectX 12の特徴を表すのにMulti-Threadが無かったんですね。

納得です。

ここでViewport Transformした後でRasterizationした図が紹介されていますが、そうでしたっけ。

Pocol. Direct3D12 ゲームグラフィックス実践ガイド (p. 53). 株式会社技術評論社. Kindle Edition.

昔、OpenGLを習った時に、FragmentはPixelの事って、教授に説明したらFragmentはPixelじゃない。と訂正された事があります。

それで話を聞いたら、Objectが重なっている場合も全てのObjectにRasterizationは行われる。そしてその中でPixelとして採用されるのは一部のFragmentだけ。と説明されたんです。

つまりFragmentの一部がPixelとして採用される。だからFragmentをPixelと呼ぶのは完全な間違いと指摘されました。

Viewport TransformationをRasterizationの前にしたらObjectの前後とか無くなってしまいますよね。

うーん。

調べます。

分かりました。

Geoffrey Datema氏のViewport Transformation | 3D Graphics Overview [1]とRasterization | 3D Graphics Overview [2]を見たらこの疑問が解決しました。

たしかにViewport TransformationはRasterizationの前に行うんです。しかし全てのObjectに対してRasterizationを行うのも正しいんです。

Rasterizationした後で、その前の正規化デバイス座標(Geoffrey Datema氏はCanonical View Volumeと言っています。)の奥行の値をZ bufferに保存しておいてそれでどのObjectのRasterizationした値をPixelとして採用するかを決定するんだそうです。

うーん。

これはPipelineももう一回きちんと勉強しないとダメですね。

まあでも、こういう風に教科書に書かれている内容に挑戦をした方が理解が深まります。

結果的には間違っていても、その時の自分の知識で本が間違っていると思った事はどんどん書いて、どっちが正しいか調べる事にします。

この後、この本でもDirectX 12の特徴としてCommand Queueとかの解説がありました。

<<3つの本の第一章を読んで>>

大体、DirectX 12の特徴が分かって来ました。Command QueueとかCommand Listとかが全部の本で解説されています。

この辺を理解する事がDirectX 12を理解する鍵みたいです。

これは来週、勉強する事にします。

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

<本文>

1.今週の勉強について

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

UE5を使用するものは新しいPCを使用します。UE4で作成しているものは今のPCでやります。

  • Niagara: CGHOW氏のTutorialをやる
  • Materialの勉強
  • RPGPackagingについて
  • Open Worldの検証
  • Gaeaの勉強
  • 雪山のMapの作成
  • 報酬システムの研究
  • Anime Renderingの勉強
  • DirectX 12の勉強

2.Niagara: CGHOW氏のTutorialをやる

2.1 Custom Facing | UE5 Niagara #ScratchPad Module #11 [3] を勉強する

やっとScratch Padの最後のTutorialまで来ました。今週でNiagaraの基礎の復習を終わりにしたいです。

Custom Facingは全く知らない機能ですね。

取りあえず、Tutorialを全部見ます。

15分の比較的長いTutorialですが、途中でNiagaraがCGHOW氏の期待通りに動かなくてその原因を調べるのに5分位使っていました。ので本当は10分位のそこそこの長さのTutorialでした。

このTutorialで一番、勉強になったのが同じEmitter内で作成したParticleの内の一つだけSize、ColorそしてVelocityの条件を変える方法です。

以下に示した様に、一個だけParticleのSizeが違っています。

それではいつものように以下にTutorialの手順をまとめます。

まずこのTutorialの目的であるCustom Facingの意味ですが、以下に示したGreenの棒が小さい赤い球から生えていて、大きい赤い球の方を向いています。

これの事です。

これを実装します。

まずいつものようにFountainを追加したNSを作成し、

今回の実装を行うために以下の様にEmitterのModuleやModuleの設定を変更しました。

以下の様な赤い球が空間内を漂うEffectになっています。

この辺の設定は、いつもCGHOW氏で勉強している私にとっては自明の事で、今回の設定も普段の設定にCurl Noize ModuleとSpring Moduleを追加しただけだな。と直ぐに分かります。

しかし、初めてCGHOW氏のTutorialを見た人達にとっては、電光石火の如く、次々にModuleを消したり、追加したり、更にはModuleの設定を変更している訳で、何やっているのか全く分からないでしょう。

この辺がCGHOW氏のTutorialが大多数の視聴者から支持が得られない原因なんだと思います。

というかCGHOW氏に限らず、India(CGHOW氏の本名を見るとイスラム系なので、ひょっとするとパキスタン人なのかもしれませんが、韓国の教育システムが日本と全く同じ様に、パキスタンの教育システムはインドと全く同じでしょう。)で教育受けた人は自分が理解出来る事は他人も理解していると仮定し過ぎな気がします。

これ掛け算とかの単純な話でも、インド人ってほとんどの人が19x19まで暗算出来るんです。ので計算を途中で凄い飛ばすんです。いや彼等にとっては飛ばしている気はないんですが、周りの人から見ると凄い途中の計算を端折ってるように見えるわけです。

今度は棒の部分のEmitterを作成します。

まず先程作成したEmitterをDuplicateします。

Render SectionのSprite Renderer ModuleをMesh Renderer Moduleに変更します。

そしてMesh Renderer ModuleのMeshにCylinderをセットします。

CylinderのStatic MeshのPivotが以下の位置にある事を確認します。

現状以下の様になっています。

更に以下の実装のMaterialを追加します。

緑の棒は赤の球の場所に生成されるので以下のModuleは要りません。

消します。

Particle Update SectionにScratch Pad Moduleを追加します。

Map Get ノードに[INPUT] New Particle Attribute Readerを追加します。

今週もParticle Attribute Readerを使用するみたいですね。

Get Vector by Index ノードを繋ぎます。

AttributeはPositionです。

Particle IndexにはExecution Indexの値をPassします。

その結果をMap Setノードの[PARTICLE] Positionに繋げます。

結果です。

微調整して棒を長くしました。

ここで最初のEmitterに戻って大きな赤い球を一個だけ作成します。

Particle Update Sectionに[PARTICLE] Positionを追加します。

Module、Set [PARTICLE] Positionが生成されます。

そしてSet[PARTICLE] Position ModuleのParameterの[PARTICLE] PositionにLerp Positionをセットします。

そしてBに[PARTICLE] Positionをセットします。

つまり[PARTICLE] Position の値は、Alphaの値が1の時は今までと同じ値になります。しかしもしAlphaの値が0の時は、 (0,0,0)になります。

Alphaの値の設定ですが、ちょっとだけ複雑です。

まず以下に示した様にAlphaにMake Custom Float from Boolをセットします。

次にBoolにSet Bool by Float Comparisonをセットします。

そしてBoolのAにReturn Normalized Exec Indexをセットします。

BoolのBは0のままにします。

そしてComparison Ty…にA Equal To Bをセットします。

つまりExecution Indexが0の時は1を返して、それ以外の時は0を返すようになります。

当然、Execution Indexが0の時は0を返して、それ以外の時は1を返すようにしてほしいので、True FloatとFalse Floatの値を逆にします。

これはどう見てもProgrammingです。

NiagaraはScratch Padに直接書き込む以外に、このModuleのParameterにDynamic InputをSetする事で、ある程度ですがProgrammingを書く事が出来ます。

結果です。

赤線で囲った球が中央に位置するようになりました。

しかし微妙に動いています。

これはSpring Force Moduleの影響だと思われます。

ので

Particle Update SectionのSpring Force Moduleの

Force Strengthに

Lerp Floatをセットし、

Alphaに、先程、Set[PARTICLE] Position ModuleのAlphaの設定をコピぺします。

結果です。

赤線で囲った赤玉は全く動かなくなりました。

今度は、色を変えます。

まずParticle Update SectionにScale Color Moduleを追加します。

Scale Color Moduleの設定です。

ここでも前と全く同じ実装をします。

赤い球のサイズも同じ実装で買える事が出来ます。

Scale Sprite Size Moduleを追加し、同様の実装を行います。

結果です。

緑の棒も表示します。

まず中央の赤い球には緑の棒が表示しないようにします。

Scratch Padを開いてExecution Indexに1を追加します。

これでExecution Indexが0の赤い球には緑の棒が付かなくなります。

結果です。

確かに真ん中の赤い球に付いていた緑の棒が無くなりました。

今度は全ての小さい赤い球についている緑の棒が大きな赤い球を向くようにします。

Scratch Padを開いて

赤い球の位置から緑の棒の位置を引く実装を追加します。

その結果を、Map Set ノードに新しく作成したVector、[PARTICLE] New facingに追加します。

Particle Update SectionにUpdate Mesh Orientation Moduleを追加します。

これTutorialだと既に追加されているんですがいつ追加したんでしょうか?謎です。

Update Mesh Orientation ModuleのFacing Directionに[PARTICLE] New Facingをセットします。

結果です。

全然、中心を向いていません。

この原因はScratch Pad ModuleのGet Vector by Index ModuleのParticle Indexの値にExecution Indexの値をPassしていたからです。

以下の様に0をパスします。

結果です。

緑の棒が一定の方向を指してはいますが、大きな赤い球の方は指していません。

これは緑の棒の最初の方向がどこかの回転軸に対してずれているのかもしれません。

直してみます。

Particle Spawn SectionにInitial Mesh Orientation Moduleを追加します。

軸を調節します。

RotationのYの値を0.25にしました。

結果です。

うーん。

とうとう完成しました。

2.2 Custom Facing | UE5 Niagara #ScratchPad Module #11 [3] を実装する

それでは実装していきます。

まずNSを作成します。Fountainを追加しました。

いつもと同じやり方で要らないModuleを整理しました。

更にここにCurl Noise Force ModuleとSpring Force Moduleを追加します。

Particle Update SectionにCurl Noise Force ModuleとSpring Force Moduleを追加しました。

Curl Noise Force Moduleの設定です。

Noise StrenghとNoise Frequencyの値が何を担当しているのか今もって理解していません。

Spring Force Moduleの設定です。

Particleが生成された位置に戻るように設定しています。

最初、Input Positionに[PARTICLE] PositionをセットしてParticleが初期位置に戻らなくて、???となりました。

Input Positionにセットするのは[PARTICL][INITIAL]Positionでした。

結果です。

今度は緑の棒を作成します。

まずEmitterをDuplicateし、名前をGreenとします。

Render SectionのSprite Rendererを消して、Mesh Rendererを追加します。

Mesh Renderer ModuleのMeshに以下のStatic Meshをセットします。

このCylinder はPivotが円柱の底にありTutorialで使用されているCylinderのPivotと大体同じ位置でしたので選びました。

TutorialのCylinderと比較すると大きすぎるので小さくします。

Particle Spawn SectionのInitialize Particle Moduleの

Mesh Uniform Scaleに0.1をセットします。

色が緑になっていません。

直します。

Tutorialと同様に以下のMaterialを作成して

Mesh Renderer ModuleのOverride Materialsにセットします。

結果です。

Cylinderが緑色になりました。

緑のCylinderを赤玉にくっ付けます。

Particle Update SectionにScratch Padを追加します。

多分、実装方法は覚えているのでTutorialを見ないで作成してみます。

出来ました。

結果です。

出来てない。

Get Vector by IndexノードのAttributeの値がNoneのままでした。

Positionに直しました。

結果です。

出来ました。

Initialzie Particle ModuleのMesh Scale ModeをNon-Uniformに変更して

緑の棒を以下の様にしました。

この形状に最初から使用としたんですが、XYZの値を別々に指定する方法が分からなくて出来ませんでした。

Pointは、Mesh Scale ModeをNon-Uniformにする事でした。

ここでTutorialではVelocityを色々なParameterにセットして緑の棒の向きを変えているんですが、その過程で、

Update Mesh Orientation Moduleを追加していました。

このModuleだけ追加しておきます。

緑の棒の調整は一端中止して大きな赤玉の作成をします。

[PARTICLE]Positionを追加します。

Set [PARTICLE]Position Moduleになりました。

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

これをLerp Positionに変更して

Bに[PARTICLE]Positionを追加します。

そして以下の様に実装しました。

これの実装内容は前の節で散々やったのでここではやりません。

この実装もTutorialを見ないでやってみたんですが、最初のBoolのセットが分からなかくてGive Upしました。

結果です。

今度は、Spring Force Moduleにやっていきます。

真ん中の赤い球が完全に動かなくなりました。

今度はScale Color Moduleを追加します。

Scale Color Moduleの設定です。

Tutorialの設定とはちょっと違いますがこれでも同じ結果になりました。

Sizeも同様に変更します。

Scale Sprite Moduleを追加します。

設定です。

結果です。

緑の棒を復活させます。

真ん中の大きな赤い球には緑は入りません。

Green EmitterのScratch Padの実装に以下に示した部分を追加しました。

結果です。

消えました。

ここでGreenの棒を真ん中の大きな赤玉に向ける実装をします。

まずScratch Padに以下の実装を追加しました。

この実装は覚えていたのですぐ出来ました。

ここからが全然、分からなくてTutorialをもう一回見直しました。

まずParticle Update SectionにあるUpdate Mesh Orientation Moduleに

以下の設定をしました。

次にParticle Spawn SectionにInitialize Mesh Orientation Moduleを追加して

以下の設定をしました。

ここでMesh Orientation ModeがRandomになっているのに気が付かないでずっとへんな結果になっていました。

最後に微調整しました。

結果です。

綺麗に出来ましたね。

2.3 Custom Facing | UE5 Niagara #ScratchPad Module #11 [3]のまとめと感想

Scratch Padで使用している主な技術は、以下の3つでした。

  • Scratch Pad内でParticle Attribute Readerを使用
  • Moduleの設定でLerpを使用する事で一つのEmitter内で別々の特徴を持ったParticleの生成をする方法
  • Update Mesh Orientation ModuleInitial Mesh Orientation Moduleの使用方法について

Particle Attribute Readerに関しては先週勉強したばかりなので特に新しく学んだ事はなかったです。

Lerp を使用して一つのEmitter内でParticleの特徴を変化させる技術は、見てて面白いものではありますが、2つEmitterを使用すればすぐに作成出来るので、敢えて採用すべき技術なのかは疑問が残ります。

このTutorialで最も勉強になったのはUpdate Mesh Orientation ModuleやInitial Mesh Orientation Moduleの使用方法でした。

この2つのModuleを使用したのはほとんど初めてでした。

Scratch Pad内で、赤い球の場所から緑の棒の位置を引いた値を求めました。

この値をUpdate Mesh Orientation Moduleで使用する事で、緑の棒が、常に大きな赤い球に向いているようにするための設定を作成出来る様になりました。

この辺の実装はTutorialで勉強したので作成出来るようになりましたが、自分で思い付くかと言われると無理ですね。

これでScratch PadのTutorialが全部終わりました。その総括もやります。

2.4 Scratch PadのTutorialの総括

調べると2022-08-14のBlogからScratch Padの勉強を始めています。

今週で10月も終わりですので、間に2週間の休息が有った事を考慮に入れると約2カ月間、Scratch Padについて勉強していた事になります。

まず、その内容を簡単に整理します。

2022-08-14Blog

UE5 Niagara #ScratchPad Module #1 | velocity Condition [4]を勉強しています。

ここではParticleのz方向の速度がPositiveの時はそのParticleの色が赤、Negativeな時はそのParticleの色が緑に変更する実装を学習しました。

正直、初めてScratch Padの勉強をする初心者にとって分かり易いTutorialとは思えませんでした。

私が、考える初心者にとって最適なScratch PadのTutorialとは、Scratch Pad内でやっている事はGetterとSetterを使用しているだけである。という事を最初に教える事です。

そしてそれを理解する前提としてNiagara Systemを開くと表示されるParametersが

実は実際のHLSL内で使用されているVariableである。という事を理解しておく必要があります。

これ、Niagara SystemのScratch Padを勉強するという濃いUserにとっては自明の事かもしれませんが、だからと言ってScratch PadのTutorialでこの事実を説明しないで良いと言う訳じゃないと思います。

それを説明した後で、このそれぞれのParameterが実際のCode内でどんな機能の値を保持しているのかを全部理解するのは不可能なので、この中で重要なParameterのうちの幾つかの機能を紹介します。

として、Map GetノードとMap Setノードが通常のProgrammingにおけるGetterとSetterである事を説明すると、初心者でもすんなり理解出来ると思います。

何でこっちをVariablesって名付けないで、Parametersにしたんでしょうね。Variablesだったらすぐに意味を理解出来たと思います。

大体Parametersって言ったら、今までは、以下に示したModuleのSelectionで表示されるそれぞれの設定(以下の例だったらLifetime ModeとかLifetimeとかの事)を指していたじゃないですか?

これ、NSでParameterと言うたびにどっちを指しているのか非常に混乱します。

こっちはAttributeって呼んでいるのか。

まあAttributeもParameterも同じ事ですし、これからはこっちはAttributeって呼ぶ事にします。

この回のTutorialではParameterとして[PARTICLE] Positionと[PARTICLE] Colorを使用しています。この二つのParameterは最初に勉強するのに丁度良いParameterであるとは思います。

後、Select Ifノードを使用したり、Less Thanノードを使用したりしてさりげなく重要なNodeの使用方法も教えています。この辺は流石です。

2022-08-22Blog

UE5 Niagara #ScratchPad Module #2 | Custom Drag [5]を勉強しています。

ここでは、Scratch Pad内にサイズや色の違うParticleのみをDragする実装を作成しています。

このBlogでも、先程私が述べた内容が書かれていました。

2022-08-29Blog

UE5 Niagara #ScratchPad Module #3 | Spawn Count on Owner Scale [6] と UE5 Niagara #ScratchPad Module #4 | LODs [7] を勉強しました。

この辺になるともう流れ作業的に勉強して、特に何を学んだとかは書いてないです。

でもこういう勉強も必要なんです。

UE5 Niagara #ScratchPad Module #3 | Spawn Count on Owner Scale [6]では球の表面上にParticleを生成した場合、球のサイズに関わらず、Particle同士の隙間を同じにする方法を勉強しています。

ここではEmitter Update SectionにScratch Padを追加して使用しています。

後は、球のサイズを得るために[ENGINE] [OWNER] Scaleを使用しています。

これ「球のサイズを洗わず」になっていますが、球のサイズを表すが正しいですね。

直しておきます。

UE5 Niagara #ScratchPad Module #4 | LODs [7]では、

Scratch PadにおけるLODの設定方法について勉強する事で、Cameraからの距離を保持するParameterがどれなのかを学習しています。

どんな方法でCameraからの距離を測るんだったけ?

もう忘れています。

Blogを読み直したらCamera QueryをMap Getノードにセットしていました。そしてCamera QueryからGet Camera Propertiesノードを繋げています。

このCamera QueryはCollision Query、Particle Attribute Readerと全く同じ使い方をしています。

これはScratch Padの基礎の勉強で言えば、最も難しい部類に入ると思います。

これをここで教える必要があるんでしょうか?

これってScratch PadのTutorialの最後で教えるべきだと思います。

私の考えるScratch Padの基礎のTutorialは、

  • 基礎:ParameterMap Getノード、Map Setノードの意味を理解し使用出来るようになる。
  • 初級Parameterの中で最も基本的なもの、[PARTICLE] Color[PARTILCE] Positionなどを使用出来る。
  • 初級:Map Getノード、Map Setノードに、自分で新しく自作したParameterをセットし使用出来る。
  • 中級:未定
  • 上級:Particle Attribute ReaderCollision Queryを使用出来る。

となっています。

2022-09-05Blog

UE5 Niagara #ScratchPad Module #5 | Static Mesh Location with Offset , Rotation and Scale [8] を勉強しています。

このBlogを見直していて思ったんですが、私の勉強もかなり投げっぱなしで、CGHOW氏のTutorialを勉強しました。実装しました。出来ました。で終わっています。

実装出来た後で、このTutorialで新しく学んだ事とか、このTutorialを学ぶ目的は達成できたのかとか、CGHOW氏がどんな思惑でこのTutorialを作成したのかを推測するとか、すべきでした。

勉強しました。出来ました。だけでは単なる初心者と同じです。

もう少し、俯瞰的な目というか、これからNiagaraを勉強する人達のためになる教訓を引き出せるような考察をすべきでした。

このTutorialで勉強した内容ですが、

[INPUT] New Static Meshを使用して

Static Meshの回転、Offset、Scalingを実装しています。

かなり複雑な実装で、中級Levelの勉強に打ってつけの内容な気がします。

2022-09-12Blog

UE5 Niagara #ScratchPad Module #6 | Skeletal Mesh Location with Offset and Scale [9]とUE5 Niagara #ScratchPad Module #7 | Grid and Brick Pattern [10] を勉強しています。

まずUE5 Niagara #ScratchPad Module #6 | Skeletal Mesh Location with Offset and Scale [9]ですが、基本的にはStatic Meshを回転させた時と同じです。

ただしこっちは[INPUT] New Skeletal Meshを使用しています。

UE5 Niagara #ScratchPad Module #7 | Grid and Brick Pattern [10]ですが、以下に示した様なTile状のEffectを作成しています。

これ自体は凄いEffectですが、Scratch Padの実装としては目新しい技術は使用していません。

これをScratch Padの基礎の勉強に含むべきなのか疑問が残ります。

2022-09-19Blog

UE5 Niagara #ScratchPad Module #8 | Voxel FX [11]を勉強しています。

UE5 Niagara #ScratchPad Module #8 | Voxel FX [11]では以下のScratch Padを作成しています。

これもScratch Pad内で特別な技術は使用していません。

練習問題として作成させるのが良いと思います。

ここでは Collision Query | UE5 Niagara #ScratchPad Module #9 [12]も少しだけ勉強しています。

これはCollision Queryの使用方法を教えるTutorialで基礎の中ではかなり上級の内容になります。

2022-09-26Blog

この週は椅子が壊れてしまい途中で中止しています。

Collision Query | UE5 Niagara #ScratchPad Module #9 [12]を一寸だけ勉強しました。

2022-10-10Blog

Collision Query | UE5 Niagara #ScratchPad Module #9 [12]を勉強しています。

このTutorial、NiagaraのTutorialとしてはかなり凄いんですが、Scratch PadのTutorialとして見るとかなり余計な内容があります。

2022-10-16Blog

Collision Query | UE5 Niagara #ScratchPad Module #9 [12]の勉強をまだしています。

2022-10-23Blog

 Particle Attribute Reader | UE5 Niagara #ScratchPad Module #10 [13]を勉強しています。

2.5 Scratch PadTutorialはどうなるべきか

今までBlogを振り返り、約2カ月間に渡って勉強したScratch Padの内容について勉強しました。

ここでScratch PadのTutorialは何を教えるべきかについてまとめたいと思います。

私の考えるScratch Padの基礎のTutorialは、

  • 基礎:ParameterMap Getノード、Map Setノードの意味を理解し使用出来るようになる。
  • 初級Parameterの中で最も基本的なもの、[PARTICLE] Color[PARTILCE] Positionなどを使用出来る。
  • 初級:Map Getノード、Map Setノードに、自分で新しく自作したParameterをセットし使用出来る。
  • 中級[INPUT] New Static Mesh[INPUT] New Skeletal Meshを用いて回転、OffsetScalingを実装出来る。
  • (中級:Grid PatternEffectVoxel状のEffectなどを自分で実装出来る。)
  • 上級:Particle Attribute ReaderCamera QueryCollision Queryを使用出来る。

となります。

3.Materialの勉強

今週はToon Shader Ink Outlines - Shader Graph Basics - Episode 39 [14]の復習をやります。

実は、前のNiagaraの勉強のまとめに時間が掛かってしまい、あんまりMaterialの勉強に時間をさけません。ので丁度良いのでMaterialでどうやってOutlineを作成したのかを復習します。

先週のBlogで言っていましたが、

すっかりMaterialからOutlineを作成する方法を勉強した事を忘れていました。

3.1 2022-04-11Blogを復習する

調べたら2022-04-11のBlogToon Shader Ink Outlines - Shader Graph Basics - Episode 39 [14]を勉強していました。

読み直したら、Outlineを作成する方法が3つ紹介されていたんですが、

  • 3D Modelを改造する方法
  • Postprocessを使用する方法
  • そしてMaterialで実装する方法

で実質、MaterialからOutlineを作成する方法は1種類だけでした。

しかもその方法では、

になってしまうそうです。

うーん。でも一応、復習しておきます。

これだと本当の球面の端、と言うかNormal Vectorの向きがCamera Vectorに対して90度付近の場合しか線になりませんね。

でもアニメ風の3D Modelが曲線以外で作成される部分ってあんまりないと思われるので、以下の様になる可能性もあんまりない気がします。

でも分かりました。MaterialからOutlineを生成するためには、Camera Vectorと何かを比較すればいいんですね。

VRM4Uの公式のサイト[15] からDownloadさせてもらったUE用のVroidのMaterialであるMF_VrmMToonBaseのOutlineの実装をもう一回見直すと、

Pixel Depth Offsetで以下の様なここで説明された方法にかなり近いやり方が採用されていたり、

OutlineのBlock内でも

が使用されています。

2022-10-16のBlogで以下の様に述べていますが、

一寸はヒントが見つかったかもしれません。

3.2 Post Process Action Lines - Shader Graph Basics - Episode 58 [16]を勉強する

流石にこれしか勉強しないのは短すぎるのでやっぱりPostprocessの勉強もやる事にします。

このTutorialは以下に示した様な集中線を作成します。

Ben Cloward先生はこれをSpeed Lineと言っています。

アニメに良く見る表現ですね。って言ってます。

おお。

テンション爆上がりです。

Animeの「ア」はæの「ア」だったんですね。

ほとんど「エア」って聞こえます。調べたらCambridge DictionaryのAnimeの項[17]では

と書かれていました。

でも発音聞くとアメリカ人はほとんど「ア」って言っています。

因みに私が良くYouTubeで見るアニメの話しかしないアメリカ人達のAnimeの発音は日本人と全く同じ発音でアニメと言っています。

話が逸れました。

このSpeed Line、Animation化されていて動きます。Screenshotで見るよりかなり綺麗です。

まず軽く全部見ます。

思ってたよりは複雑でした。

以下に内容を簡単にまとめます。

まずNoiseノードを追加します。

Functionの設定をValue-Computationに変更します。

Levelsを1にします。

Output Minを0.2、Output Maxを0.8にします。

Vector To Radial Valueノードを追加します。

このNodeは何をするためのものかは不明です。

実装する時調べます。

以下の様に繋ぎます。

Vector To Radial ValueノードのSwizzle Coordinate Output(B)を使用しないようにします。

Multiply ノードで(1, 400)を掛けます。

するとNoiseの結果が以下の様になります。

結果です。

今度は真ん中の部分に穴を空けます。

まずTexCoord[0]と(0.5,0.5)のDistanceを計算します。

この黒い部分を増やすための実装を追加するそうです。

うーん。

この実装は初めて見たかもしれません。InvLerpノードですか。

これも実装する時調べます。

以下のような結果になっています。

InvLerpノードの後は以下の計算をしています。

Saturateノードで0~1の間の値にします。

Lineの濃度を決定するためのMultiplyノードを追加します。

Lineの色を逆にするためにOne Minusノードを追加します。

Lineの濃度が何を指しているのかが不明です。これも実装した時に確認します。

次にSmooth Stepノードを繋げます。

Smooth StepノードはMinとMaxの間の値をSmoothにならします。

結果です。

背景と混合します。

結果です。

うーん。

凄い。

今度はRotationを追加する事でAnimationを追加します。

Rotatorノードを以下の位置に追加しました。

Rotatorを管理する為の実装を作成します。

この実装をRotatorノードのTimeに繋ぎます。

この実装だとFame Rateを指定出来き、実際のAnimeのようなFrame RateをFramesの値で指定する事で12とか24に固定出来るそうです。

うーん。

何で出来るのか分からない。

結果です。

Screenshotでは分かりませんがFrame Rateの値通りに集中線が切り替わっています。

3.3 Post Process Action Lines - Shader Graph Basics - Episode 58 [16]を実装する

まずPostprocess用のMaterialを作成します。

Noise ノードを追加します。

Noiseの値を以下の様にセットしました。

Vector to Radial Valueノードを追加します。

このNodeが何をしているのか不明なんです。

調べます。

Vectorの角度を計算してRadial CoordinateとしてOutputするNodeのようです。

はい。

いろいろ検討して、このNodeが何を計算しているのかを判明させました。ただし判明したのはSwizzle Coordinate Output(B)をFalseにした場合です。

Radial Coordinateの値ですが、これはVectorの大きさです。

Vector or UVs(V2)でVectorのxとyの値を入れます。

例えばxの値を1、yの値も1としたとします。するとそのVectorの大きさは1.4142135623731になります。

Radial Coordinateの値です。

Vector Conveted to Angleの結果です。

Vector Conveted to AngleはそのVectorの角度を返します。ただしUEなので360度が1になります。

先程の値に360を掛けると

になります。

それではVector to Radial Valueノードの使用方法が理解できたので実装の続きをやっていきます。

以下の実装を組みました。

結果です。

うーん。Noise ノードがどんな計算をしてるのか分からないのでこの結果が正しいのかどうかも不明です。

Multiplyノードを追加しました。

結果です。

なぜこうなるのか分かりません。

PostprocessにMaterialを追加しました。

結果です。

Tutorialと同じ結果にはなっていますね。

今度は真ん中の色抜きです。

これの意味は分かります。

次の実装が問題です。

このInvLerpノードの計算が不明です。

調べます。

分かりました。Lerpの反対をします。

Lerpの返し値をValueに繋ぐとAlpha値を返します。

上記の実装だと、0.0625が0、0.5625が1になります。

Saturateノードを繋げます。

Saturateノードが必要な理由はInvLerpは0以下の値や1以上の値を返すからです。

例えば上記の例では0.5625以上の値は1以上になります。

この後の実装です。

何でこの後の掛け算がLine の濃さになるのかは不明です。

これは実装した後、値を変更して確認します。

更に以下の実装を追加します。

Line Fallofです。

こっちは何となく理解できます。

Maxの値以上は全部、1になるからです。

結果です。

ここでLine Densityの実験をします。

Line Density=0.1です。

Speed Lineが消えました。

Line Density=0.9です。

線が増えてほとんど線で埋まってしまいました。

これがLine Densityの意味だったんですね。

理解出来ました。

背景を追加します。

結果です。

今度はAnimationを追加します。

Rotatorノードを追加します。

RotatorノードのTimeの実装を作成します。

Fracノードの結果ですが、0~1の間を1秒間で行うんでしょうか?

そうすると0~12の値を1秒で行うことになります。

それを12で割ると0~1の値を12段階で変化する事になり12fpsが実装されたのと同じになります。

多分、この考え方であっていると思います。

結果です。

うーん。12fpsには見えませんね。2fps位に見えます。

まあいいです。

これで完成です。

4.RPGPackagingについて

今週もPackagingについて調べます。

4.1 ProjectのDuplicationのやり方を調べる

何をやるにしても、今あるProjectが無くなってしまったら大変です。ProjectをDuplicateしてそのDuplicateした方で色々やる事にします。

DuplicateするのはそのままCopy&Pasteすれば良いんですが、その後、Projectの名称も変えたいんです。

これのやり方、数年前までは知っていたんですがすっかり忘れてしまいました。

今週はそのやり方を調べます。

調べたら直ぐ出て来ました。UE4 - Unreal Engine - Copy , Delete , and Rename projects [18]です。

このTutorial、Configurationに新しく変更したProject名を追加してないんですが、それで大丈夫なんでしょうか?

昔、私が教わった方法はConfigurationに変更したProject名を追加していました。

Comment欄にも同様の事を書いている人がいました。

昔、私が勉強したProjectをDuplicateするTutorialがないか探します。

見つけました。

UE4: How to Rename Your Project in Unreal Engine 4 [Tutorial] [19]です。

うーん。

7年も前のTutorialです。正直、今これと同じやり方をして大丈夫なのか心配です。

もっと新しいTutorialを探します。

ありました。

Renaming Projects | Tips & Tricks | Unreal Engine [20]です。

このTutorial、2022年の7月に作られていて、しかもEpic Game社が作成したTutorialです。

もうこれ以上のモノはないでしょう。

でもこのTutorialみたらC++を使用した場合は、更にもう何個かの余計なStepが必要です。

って言っていました。

しかもそれについてはこの動画では解説しないとも言っています。

ああ。それも知る必要がありました。

UE4C++のPackagingのやり方を調べたら一個だけTutorialがありました。

[Tutorial] Properly Renaming a C++ Project in Unreal Engine 4 (CodeSpartan's MMO Starter Kit) [21]です。

うーん。軽く見たんですが、こんなに複雑な事しないといけなかったんでしょうか?

覚えていません。

と言うか昔のやり方が正しかったのかどうかも不安になりました。

Tutorialが古いんで、今だともっと別なやり方があるのかもしれません。

コメント欄に以下のCommentがありました。

うーん。

更にこれが必要なのか。

確かにUEC++から作成したBPの親クラスが前のProjectの親だったら後で何かしらの問題が発生するでしょうね。

うーん。これについては前にProjectをCopyしてProject名を変更した時も考えていなかったと思います。

しかしUEC++のProjectの名前の変更方法については情報が少なすぎますね。

多分、UEC++でProjectを作成する人達は、普通はGitHubでVersion管理しているんで、失敗した時のためにDuplicateしてProject名を変える必要はないんでしょう。

うーん。

どうしよう。

今からGitHubに上げて管理するものありかも。

一応、Visual Studioで作成したC++のFileのProject名を変更する方法も調べて見ます。

これはそれなりに沢山のTutorialがありました。

取りあえず一個だけ記録しておきます。

How to rename a visual studio c++ project [22]です。

うーん。

どうしようかな。

正直、C++もう2年位触ってないです。今いきなり触ったら何か重大なMissをやりそうで怖いです。

まさか失敗しても大丈夫なように予備のCopyを作成する時点で、こんなに悩むようになるとは。

一つ以下の方法を考えてみました。

外付けのHDDでも買ってきてそこにこのProjectをDuplicateします。

外付けHDDに入っているProjectだったら、Project名を変更しなくても間違えて元のProjectを消す事もないでしょう。

そこでテストするのもアリかも知れません。これだったら上記の色々な面倒な事一切しないで済みます。

何でProjectの名称を変更する必要があるのかを考えてみたんです。

要するに今あるProjectと間違える可能性があるからです。

これ、外付けHDDにDuplicateするなら、それを外してしまえば、今あるProjectと間違える可能性は無くなります。

更に、別のPCでこのProjectが動くかの確認も出来ます。

もし別のPCで動かない場合は、Referenceとかで元のProjectのClassを使用しているとか、そう言う事も分かるはずです。

まあ、発想の転換ですが、こっちのやり方も一寸だけ考えてみます。

5.Open Worldの検証

今週も建物を作っていきます。

先週までの勉強で一応建物を作成できるようになりました。

今回は、建物をBPで作成してそれをLevel上に配置したり、建物の一部を合成した状態で保存しておいて建物の作成を容易にしたりできないかを検討します。

5.1 先週作成した建物をBP化する

MyTestProject1を開きます。

色々検討したんですが、上手いやり方は分かりませんでした。

ので土臭いやり方ですが全部Copy、Pasteして作成します。

うーん。

一から作成した方が簡単かもしれません。

一から作成し直します。

床のTileを4x15枚並べたところで力尽きました。

こんなの無理。

BP内だとLevel上でできたAlt+矢印でDuplicateが使用できません。

ひたすらCopy Pasteしていましたが体力の限界に達しました。

動的に生成することにします。

以下のCodeをConstruction Scriptに実装しました。

結果です。

楽勝でした。

ただし、何も考えないで動的に床を増やしたのでPivotは以下の位置になっています。

後で、これが問題になったらその時に考えます。

ここにBPの家を建てることにします。

Bookmark2でこの位置を保存しました。

Doorや窓のある壁を追加しました。

大問題、発見です。

床のBlockの汚れが全く同じです。

以下の実装を追加して床のタイルの向きをRandomに変更しました。

結果です。

少しはましになりました。

上から見た状態です。

こっちの見た目も良くなりました。

比較のためにCodeなしの場合を示します。

木の床を追加しました。

無理なく登れるように階段を作成しました。

暖炉も追加しました。

Tableにものを置きました。

樽も追加しました。

ここで力尽きました。

今週の建物の作成はここまでにします。

6.Gaeaの勉強

6.1 これからのGaeaの勉強予定

先週、まとめた通り、以下の順序で勉強する予定でした。

しかし、Landscapeの作成で2枚目のHeight MapをImportして何か色々やっていました。

これが何をやっているのか全く理解出来なかったんです。

これも勉強する必要があります。

6.2 Tutorial: Creating a Hero Mountain with Gaea [23]を勉強する

決めました。この1カ月位、Gaeaに触っていません。GaeaのTutorialをまず勉強する事にします。

そうしないGaeaの使い方そのものを忘れてしまうからです。

今回は、Quadspinner社のTutorialで勉強します。

と思ったんですがUIの操作の仕方すら忘れています。

Terrainを中心にカメラを回転させて、上から見たり横から見たり出来たんですが、そのやり方が分かりません。

何やってもそれが出来ません。

うーん。

予定変更します。

6.3 Gaea Beginner Tutorial Series : Part 1 – Interface [24]をもう一回、勉強する

もう一回Klaus氏のGaeaのTutorialを勉強し直します。

Klaus氏のTutorialを理解出来れば、基本的なTerrainの作成手順やTerrainを作成するのに必要なNode、そしてそのNodeの使用方法が理解出来ます。

これを何回かやって覚えてしまうか、Gaeaを使う必要があるたびにこのTutorialに戻って復習するようにします。

調べたら2022-04-11のBlogでこのTutorialを勉強しています。

これを先に読む事にします。

2022-04-11Blog

Tutorialの画面と私のGaeaの画面が全く違うと怒っています。

2D 画面が開いていないだけですが、全くGaeaを触った事がない状態では全く違う様に見えてもオカシクは無いです。

今、読むと結構、新鮮です。

あった。

これのやり方が知りたかった。

試したら出来ました。

ただしPointがあってOrbitを選択している時だけ出来ます。

Preferenceについて少しだけ語っています。

この部分は、全然覚えていないです。今回しっかり勉強します。

以下のToolの使い方の勉強していました。

UIの勉強はあんまりやる気が起きないといって、それでこの週のGaeaの勉強は終わりになっていました。

いや短すぎるだろうと思いましたが、最初の頃の勉強ってこんなもんでも結構疲れるもんかもしれません。

2022-05-02のBlog

何と、この後、Klaus氏のTutorialは面白く無いので公式のGaeaのTutorialを勉強すると言ってそっちを暫く勉強しています。

それでやっぱりあんまり理解出来なくてKlaus氏のTutorialに戻って来ました。

この週はNode Graphにある以下のToolの使い方を勉強しています。

+を押すと新しいNode Graphを追加出来る事を学びますが、

その意味が分かっていません。以下のように述べて怒っています。

一つ目のNode GraphでHight MapとMaskを作成して、2つ目のNode GraphはTextureを作成、そして3つ目のNode Graphは。

うーん。3つ目のNode Graphは何に使用したのかは忘れてしまいました。

でもNode Graphを複数作成出来る事は意味があります。

NodeのPropertiesについてまとめていて

読み直すと結構、勉強になります。

ここにまとめられている機能で、今の私が覚えていたのはPin関連のやつだけです。

もう一回勉強し直します。

2022-05-09Blog

この週ではNodeのPropertiesについて勉強するそうです。

いや前の週で勉強していたじゃん。と思ったら前の週で勉強したのは、Node Settingって言うらしいです。

Node のPropertiesは以下の部分だそうです。

でこの週は一寸だけしか勉強していません。

しかし結構大事な内容がありました。

以下の三本線をClickすると表示されるBoxの機能について解説していました。

これ、今読み直すと凄い重要です。

ここで説明されているもので凄い重要だと思った2つの機能です。

  • Toggle Auto Apply
  • Revert node

2022-05-16Blog

Tool Boxについて勉強しています。

Tool Boxって結局Nodeをまとめているだけじゃないですか。

何を勉強する必要があるんでしょうか?

続きを読んだら分かりました。

このNodeをNode Graph内でどうやって使用するかについての説明でした。

Portalの作成方法とか、

と思ったらこの週もこれしか勉強していませんでした。

2022-05-23Blog

色々な個所の機能を解説していますが、特に以下の部分の機能について解説しています。

Baked Memoryの機能についてTutorialの説明とGaeaで表示されている説明が違っていると書いています。

これは、確認します。と言いたいとこですが、このBaked Memoryに関して、当時の知識と今の知識に差がある訳ではないんで、結局分からないと思います。

以上です。

6.4 Gaea Beginner Tutorial Series : Part 1 – Interface [24]をもう一回、見る

せっかく全部、復習したのでTutorialももう一回見る事にします。

Downloadの仕方から説明してありました。

今、見るとこんなのまでいるのかと思ってしまいますが、こういう初心者が分からない所を説明出来る能力って結構大切です。

ところで今の私のGaeaのVersionは、1.3.0.13なんですが

Gaea QuadspinnerのHomepageを見たら最新のVersionは1.3.1.9でした。

MediBangと違って最新版の通知は来ないんですね。

MediBangは無料ですが、商用と比べても全く引けを感じませんが、Gaeaは少人数で作成している感がありますし、ぎりぎり商用Levelって感じがしなくもないです。

Gaeaの有料版を購入した場合、Version Upには対応しているんでしょうか?

Version上げた途端、有料版にしかない機能が動かなくなったりしたら怖いんですが。

Preferenceで何をやっているのかが分かりました。

Viewport の操作の設定をここで変更出来るんです。

例えば、先程言ってたAlt + 左ClickでTerrainの回りを回転出来るのを別なボタンに変更したりできます。

Nodeを右Clickして表示される以下のBlockの要素はNode Settingという名称です。

これをBlogでは、Propertiesと書いています。

Propertiesはこっちが正しいです。

何でNode SettingをPropertiesって呼んでいるのか不思議に思ったんですが、理由が分かりました。

Klaus氏がNode SettingをPropertiesって呼んでいました。

多分、焦ってそう呼んじゃったんでしょうね。

Bakeについての説明がありましたが、結構詳しく解説していました。

しかしその説明を聞いて理解出来たかと言うと、やっぱりあんまり分かってないです。

一応、最後まで見ました。

軽く見ただけですがそれでも結構、勉強になりましたね。

6.5 Gaeaの勉強をする理由

勿論、16 km^2のLandscapeを以下の条件で

作成するためのHeight MapとMaskを作成する事です。

が、裏の理由もあります。

今、UEやUnity用のLandscapeをPhoto-Realisticに作成したい場合、Third-PartyのSoftを使用する必要があります。

このThird-PartyのSoftには以下のモノがあります。

  • World Machine
  • World Creator
  • Gaia
  • Gaea
  • Houdini

この中で最も高機能なのはHoudiniなのは間違いないです。

UEを作成しているEpic Game社も暗にHoudiniの使用を推薦しています。

しかしHoudiniはLandscape用のHeight Mapの作成だけが目的の場合は要らない機能が多すぎます。

更に値段が他のSoftに比較して高いため、個人が使用するためには敷居が高いです。

無料版は商業利用不可です。

これ「Houdiniで映像作品を作成して自分の能力を宣伝したい。」と言う人や、予算が湯水のごとくある大手のGame会社に就職するのが目的の人の場合なら、商業利用が不可能な無料版を勉強するのも有りかもしれません。

しかし個人で「UEを使用してGameを開発して売りたい。」と考えている人向けではありません。

次にWorld Machineです。

有料版を買う場合、まず無料版で使用して、使い心地を確認し、納得してから買うと思います。

この無料版の使用方法の解説が全くないです。

しかもネットに書かれているCommentを読むと、質問しても全く返事を返してくれないそうです。

更に無料版は、機能が制限されていてUEやUnityで使用出来る質のLandscapeが作成出来るのかどうかすら分かりません。

World MachineはSmart Poly氏が使用しているし、このLandscape生成用のSoftとして最古参の様ですが、無料版を使用するには色々問題があり、あんまりお勧めできません。

更に言うと無料版は商業利用不可です。

World Creatorです。

このSoftに関しては無料版の存在すらないです。

ただし、ネットでの評判から判断するとUserからのWorld Creatorの評判は凄い良いです。

質問すると必ずUserが理解出来るまで親切に回答してくれるそうです。

もう最初から有料版を買っても良い。無料版で使い心地を試す必要なんかない。という豪胆な人はこのSoftは有りかもしれません。

Gaiaです。

GaiaはこのLandscapeを作成するためのSoftの中で、外に出ている情報が非常に少ないです。

良い評判も悪い評判もあんまり聞かないです。

無料版は無いみたいです。

そしてGaeaです。

まず制限付きですが、無料版があります。

その制限と言うのが「Height MapやMaskとして出力する時、1024x1024 Pixelまで。」という条件だけで、それ以外はほぼ有料版と同じ事が出来ます。

無料版で生成したHeight Mapを使用してUEでLandscapeを作成していますが、その質は圧巻の一言です。

しかも他のSoftと違い、無料版でも商業利用可です。

更に、TutorialもKlaus氏が頑張っているし、公式のTutorialもそれなりに充実しています。

私もこれらのTutorialを勉強する事で、Gaeaで生成したHeight MapとMaskを使用してUEのLandscapeを作成する事が出来ました。

ハッキリ言ってGaeaは他のLandscape作成Softと比較して圧倒的に優れています。

まとめます。

UEやUnityで使用するためのLandscapeを作成するためのThird-PartyのSoftを比較して優劣をつけると、Houdiniが一番です。

しかしHoudiniは他の機能も満載で、それ故に圧倒的に高額です。

無料版はありますが、商業利用は出来ません。

これはHoudiniがAAAのGame会社や映像製作会社で働く人を対象に作成されたSoftだからです。Houdiniは個人や小規模のIndie向けに作られたSoftではないんです。

となると、AAAのGame会社や映像製作会社で働く人、もしくはそれを目指す人以外は、残りのSoftからLandscape作成のためのSoftを選択する必要があります。

そうなった時に、Gaeaは他のLandscapeを生成するためのSoftに比べて、かなりコスパが良いです。

以下に他のLandscapeを生成するためのSoftと比較してGaeaだけが持つ長所を記します。

  • 無料版でUEUnityに使用出来る質の高いLandscapeの作成が可能。
  • Tutorialがしっかりしているので、独学で使用出来る所まで学習可能。
  • そんなに一生懸命勉強する必要もない。
  • 無料版の商業利用可能。
  • 有料版もそんなに高くはない。

他のLandscape生成Softと比較しするとGaeaは圧倒的に勝っているんです。

これらの事実から推測すると、これから数年の間にGaeaがUEやUnityのLandscape生成用のSoftとして主役に成る可能性はかなり高いです。

特に「Landscape作成は無料で済ませたい。」と考える個人や小規模のGame製作者たちにとって、現状Gaea以外の選択肢は無いです。

はい。

無料版のGaeaを何年も使っていた人達が、いざ予算が入って高いSoftが使えるようになったからと言って、Houdiniに乗り換えるでしょうか?

一からHoudiniの勉強をするのはかなり骨が折れると思われます。

更に、Houdiniの勉強をしたからと言って使えるようになるかは別問題ですし。

それだったらGaeaの有料版を買うと思います。

ここからが本番です。

Gaeaの日本語版ってないんです。というかLandscape作成用のSoftで日本語版があるのはHoudiniだけです。

もしこれがBusinessとして成功しそうなら、そう言う日本向けの対応を私がやってもいいかな。と思っています。

日本語におけるGaeaの無料版のTutorialを作成したり、Gaeaを学習する人達の学習環境を充実させたりして、個人や小規模でGameを作成する人達はGaeaでLandscapeを作成するのが主流になるようにします。

その代り日本でGaeaの有料版が売れた場合は、私にMarginが入る仕組みです。

QuadSpinner社が私に対してこの条件を受け入れるかどうかが問題ですが、受け入れるならやってみてもいいかな。とは思っています。

これが私がGaeaを勉強する裏の目的です。

ただ、Gaeaにも問題がないわけじゃないです。

まずHoudiniが個人やIndieの開発者に対して無料版の商業利用を小規模でも認めた場合です。

この商業利用の定義が良く分からないんですが、例えば「無料版のHoudiniで作成したLandscapeを使用してGameを作成した場合、そのGameをコミケで売る事は許可します。」とHoudiniが宣言したら、Houdiniを利用した方が断然特になります。

そうなったら私だってGaeaの勉強を止めてHoudiniの勉強をする事にします。

こんなのHoudiniからしたら、一円の損にもなりません。ただし将来的な利益はデカくなります。

私の勝手な目安ですが、英語が読めてデザインの勉強をした人限定でも、Houdiniを一から勉強して商業Levelの製作が出来る様になるまで、一日中勉強させて1年半ぐらいかかるでしょう。これはその人が休みの日も休日返上で勉強した場合で、普通に休みの日を休んだ場合は、2年は掛かるでしょう。

Houdiniが顧客として見込んでいるAAAのGame会社や映像制作会社は、2年くらい社員に勉強させても痛くも痒くもないですが、その下のやや大企業や中小企業でAAクラスのGameを製作しているGame会社や、中堅クラスの映像会社は2年も社員に勉強だけさせる余裕なないでしょう。しかも一端Houdiniの技術を身に付けた社員は、AAAのGame会社や一流の映像制作会社に引き抜かれれたり、転職したりされる場合もあり、教育費だけ損する可能性も出て来ます。

となると、非常に大規模な会社以外はHoudiniの採用は見送る事になります。

ところが、趣味でHoudiniを勉強した即戦力の人達が居る場合は別です。

Houdiniの有料版を買ったその日からHoudiniの能力を100%使いこなせる訳で、これなら非常に大規模な会社以外でもHoudiniを使用した方が断然、得に成る訳です。

Houdiniを制作している会社が、この事に気が付いた場合、Houdiniの無料版の商業利用を個人や小規模のGame開発者に対しては解禁する可能性はあります。

これがGaeaが抱える問題点の一つ目です。

次はGaeaのSoft自体が、他のSoftと比較して一寸品質が心配な点です。いやGaeaが作成するLandscape自体の質は最高Levelなんですが、それ以外の質に多少疑問がある場合があります。

例えば、Gaeaの画面をSnipping Toolで撮影すると、撮影した後で必ずSnipping Toolが閉じてしまいます。これは他のSoftを使用している時には起こらない問題です。

これはGaeaのSoftwareとしての質が一寸他のSoftと比較した場合、落ちる可能性があると思っています。

もしGaeaのSoftに安全面に関しての脆弱性があったりした場合、これを直ぐに克服できる技術か、そう言う技術者を雇えるコネがQuadSpinner社にあるんでしょうか?

もし安全面に関しての脆弱性が発見されて、直ぐに直せない場合は、一気に信用を失う事態になるかもしれません。そうなった場合、損害賠償責任を問われる場合もあるかもしれません。

これが第二の問題点です。

と言う訳で、Gaeaは他のLandscapeを作成するSoftと比較して圧倒的に有利と言う訳ではないですが、大化けする可能性は結構あります。

もし、QuadSpinner社が、日本でGaeaの有料版が売れた場合は、私にMarginをくれる様な契約を結んでくれるのなら、日本語版のGaeaのTutorialの作成やGaeaを勉強する人達のためのCommunityの作成なんかを頑張ってみたいと思っています。

7.雪山のMapの作成

7.1 先週から始めたM_VolumetricCloud_02_Profiles_PaintClouds_Morningを読むの続きをやる

先週の最後の結論は以下の様になりました。

これを今週は追跡します。

この M_VolumetricCloud_02_Profiles_PaintClouds_MorningをCopyしてすべてのNodeに番号を振ったVolumetric Cloud用のMaterialが見つかりません。

先週のBlogには

と書かれていたのですが、MyTextProject1の中にはないんです。

MyTestProject2の方ありました。

何でって先週のBlogを読見直したら、ずっと5.1であるMyTestProject2でやっていて一寸、5.0で確認したい事があったので

その時だけMyTestProjcect1を開けたんでした。

うーん。

時間無駄にした。

これです。

先々週の結論では、以下のFlowmaps_2DはSpeedの値はどうなっても0を返すはずです。

しかし先週の結果では、Speedの値が変わると雲の動きが変化する事が確認されました。

という事は、 Flowmaps_2Dの結果は0ではないという事になります。

しかしそれは計算結果に反します。

この矛盾を解明します。

Flowmaps_2DのResultRGBの結果をDebugFloat3Valuesノードで表示します。

結果です。

やっぱ0じゃん。

と思ったらSpeedノードの結果は2つに分岐していました。

これのFlowmaps_2Dにつながっていない方のLineを追うとさらに2つに分岐していました。

一つ目はNoise Flowmap A BlockのFlowmap_3D#1ノードにつながっていました。

もう一つはNoise Flowmap B BlockのFlowmap_3D#2につながっていました。

このどちらかの結果が0にならなければSpeedの値がVolumetric Cloudに反映されるのは当たり前になります。

まずFlowmaps_3D#1のVolume Texture(TVol)を見てみましょう。

これでした。

これ、なんとFlowmap_3D#2のUVW(V3)にもつながっています。

以下のVolume Textureがセットされていました。

Volume Textureを開くと以下の様に0ではなかったです。

この表示の仕方ですが、

Volume Textureを開くと以下の様に表示されます。

一瞬、何もない!つまり0か。と焦りましたが、

Aを切ると

以下のように白黒の模様が表示されました。

これではなんだか分からないので、3Dに変換します。

5.0でやったようにView Settingsを開くと、

5.0にはあったView Modeがありません。(以下に5.0のView Settingを示します。)

うーん。

どうしたら3D表示に出来るのと悩んでいたら、Tool Barに3Dってありました。

試しにCheckを入れたら

3Dになりました。

後はView SettingでDraw Borderに変更して、Opacityを0.05ぐらいにまで落としました。

Flowmaps_3Dの計算結果が最終的にどこに行くのかを調べると、以下の箇所になりました。

まずEmissive Colorです。

これは、まあ分かりますが、それほどはピンときませんね。

次はVolumetric Advanced OutputノードのConservative Densityにたどり着きました。

はい。

これ、2022-09-12のBlogでしっかりと検証しましたが、

Conservative Densityは雲の形状を3DでInputするためのものです。

これなら別にSpeedの値が雲の形状を変化させてもおかしくありません。

もう先週の疑問は解決です。

やっぱり黒のTextureを使用している箇所の計算結果は0で雲の作成になんの影響も与えていませんでした。

しかしSpeed ノードは Volumetric Advanced OutputノードのConservative Densityの計算結果にも影響を与えていました。

しかもその計算をしているFlowmaps_3Dに使用されているVolume Textureは真っ黒ではなくある値を持っていました。

これで先週の謎は解決してしまったんですが、これだけだと勉強した気がしないのでFlowmaps_3D#1ノードを含んでいるNoise Flowmap Aの実装を読むことにします。

以下にNoise Flowmap Aの実装を示します。

まず最初の部分です。

これはVolumetric CloudのMaterialの一番最初に勉強した単位をCm からKmに変更するための実装です。

調べたら2022-07-12のBlogで書いていました。

これと全く同じ事をしています。

そしてその計算結果ですが、Flowmaps_3DノードのUVW(V3)につながっています。

Flowmaps_3DノードのVolume Texture(TVol)は、先程調べたVolume Textureが繋がっています。

Override Time(s)はSpeedノードが繋がっています。

Mip Level(s)は

が繋がっているだけでした。

ここでどんな計算値がPassされているのか分からないのは、Velocityだけです。

これを調べることにします。

Noise Scaled by XY Length Blockの計算結果でした。

Velocityの計算はかなり複雑そうです。

しかもこの Noise Scaled by XY Length Blockの計算をする前にも何かの計算をしています。

Vector Lengthノードの先を追います。

あれ、いつものよく見るTexture Sampleノードがあります。

という事はVelocityの値は0?

実装を追ってみます。

0です。

それじゃ Flowmaps_3Dノードの計算結果も0になるんじゃ?

Flowmaps_3Dノードの実装を確認します。

以下の実装でVelocityの値を使用していました。

これを見ると、 UVW(V3)の結果から0を引いています。

のでVelocityの値が0でもFlowmaps_3Dノードの計算結果は0にはなりません。

一方でSpeedの値をPassされたOverride Timeの方は、以下に示した様に色々な計算を掛けられますが、

最終的には、以下に示した様にLerpのAlpha値としてしっかり使用されていました。

Flowmaps_3D#1ノードの後の実装をみます。

Dot Productを行っています。

という事は計算結果はScalerになってしまったの?

DebugScalerValuesノードをDotノードの後につけて確認しました。

結果を見ると確かにScaler値になっていました。

0.3~0.6ぐらいの値を行ったり来たりしていました。

その後の計算です。

最初の2つは単なるParameterを足したり掛けたりしているだけです。

Add#3ノードですが、 Noise Flowmap B Blockの結果を足していました。

最後のMultiplyノードのBの値ですが、

Alphaにつながっている実装をみてみます。

以下の箇所につながっていました。

Cloud Sample AttributesノードのNormal Attribute Layerの値に2を掛けた値をPassしていました。

Normal Attribute Layerは雲の底が0でTopが1です。

それを2倍した値がPassされます。

Saturateされているので、0から1の間の値に変換されます。

雲の底は0、真ん中で1になり、その後はずっと1です。

その後LerpのAlphaの値として採用されています。

このLerp#2ノードのAは0.3、Bは1なので、

雲の底で0.3、そこからLinearに上昇して、雲の真ん中で1、それ以降はずっと1になります。

この値を先程に計算結果に掛けます。

雲の底は0.3掛けをされ薄くなります。雲の真ん中から上は1を掛けられるだけなので全く変化しません。

以上です。

今週は、先週の矛盾の謎を解き、さらに Noise Flowmap Aの実装を読みました。

8.報酬システムの研究

古いPCで使用していたKeyboardが壊れてしまいました。

別な用事もあったので近所のヨドバシカメラまでKeyboardを買いに行きました。

それで時間を大幅に使ってしまったので何かを削る必要が出て来ました。

ので今週は、報酬システムの研究の勉強を中止します。

そう言えば、Windows 8.1のSupportが来年の始めに終了します。

来年はPC2台でUEのNetworkの勉強をする予定なのでOSをUpdateするしかなさそうです。

来週はそれについても調べる事にします。

9.Anime Renderingの勉強

9.1 Vroidで作成したModelUEImportするの続き

今週もVRM4U [25]のMaterialを読んで勉強します。

またどのProjectでやっていたのかが分からなくなりました。

うーん。2つのPCを行ったり来たりして、やっと見つけました。古いPCのProjectでImportVroidと言う名前でした。

古いPCと新しいPCと言うと訳わからないので、これからは古いPCをPC1号、新しいPCをPC2号と呼ぶ事にします。

PC1号のImportVroidにありました。

で、番号を振ったMaterialの名前が分かりません。どのMaterialをDuplicateしてどんな名前で保存したのかしっかり記録しておくべきでした。

MF_VrmMToonBaseをDuplicateしたMF_MyVrmMToonBaseと言う名前のMaterial Functionで勉強していたはずなんですが、このMaterial Function番号が全く振られていません。

どうも番号を振った後、Saveするのを忘れてしまったみたいです。

先週はM_RewriteVrmToonBaseというMaterialを作成して

そこにMF_VrmMToonBaseの一部の実装をPasteしてその部分の実装を読んで勉強しました。

もう先週、何を勉強したのかを判明させるだけでくたくたになりました。

で、先週の最後に

と書いていました。

うーん。

まずMF_VrmMToonBaseをDuplicateしたMF_MyVrmMToonBase内で2回以上使用されているNodeに番号を振ります。

これをしないと何が何だか分からなくなってしまいます。

全てのAddノードに番号を振りました。

最後の番号は55でした。

今度はLerpノードに番号を振ります。

Lerpノードは39個ありました。全部番号を振りました。

Multiplyノードです。

95個ありました。

ほとんどのNodeに番号を振りました。

細かいNodeで見つかっていないのはあるかもしれませんが、98%位のNodeには番号が振られたはずです。

こういう頭を使わない作業は、YouTubeを聞きながらやると凄い効率良いです。ストレスフリーで作業出来ました。

それで番号振るに当たって全く見たことないNodeやこのNodeの機能は知っているけど名前が分からないみたいなNodeが結構ありました。

それらを以下にまとめます。

Transform Position ノード>

Transform Vectorノードは知っていますが、Transform Positionノードは初めて見ました。機能は同じなんでしょうか?

Texture Sample Parameter 2Dノード>

いつもTexture Sampleノードと呼んでいましたが、正式名称はTexture Sample Parameter 2Dでした。

Vector Parameter

2022-10-16のBlogでConstant 3VectorからParameterに変換すると以下の4つの要素を持つParameterに変換されると書いていますが、そのParameterの正式名称はVector Parameterでした。

そして一個の要素しか持たないParameterの名称はScalar Parameterでした。

Feature Level SwitchノードとQuality Switchノード>

この二つは全く弄った事がないNodeです。

Ruyo氏?(VRM4U [25]をDownloadしたGithubのURLにRuyoが入っていたので一応、Ruyoを名前として扱います。)のような不特定多数のUserが使用出来るPlug-inを公開する様な人は、Userの持っているPCの質やそのUserが作成してるProjectが対象としている機種(Smart PhoneとかConsoleとか)まで気を使ってMaterialの実装をしているのか。と非常に驚きました。

Switch Parameter

このParameter、名前が全部違うので最初は番号振らずに無視していたんですが、全部同じ種類のNodeだと後で気が付いて番号振る事にしました。

BooleanのためのParameterです。

Make Material Attributes ノード>

MF_VrmMToonBaseはMaterial FunctionなんでOutput Resultノードを使用しているのは当然ですが、Make Material Attributesノードって沢山使用する事が出来るんです。

何か一つのMaterialに一個しか使用してはいけない。みたいに勝手に思っていました。

Collection Parameterノード>

このNodeも使用した事ないNodeです。

一応、どんな機能なのかは、大体は知っていましたが、こんなに大規模に使用されているとは思っていませんでした。

CollectionにSetされているMaterial Parameter CollectionのParameterの値を取って来て使用します。

上記の場合だと、MPC_MToonがMaterial Parameter Collectionです。

MPC_MToonを開くとScalar ParametersにBasePowがありました。

このノードはどういう機能なのかは大体は分かっていますが、どういう時に使用すべきなのかが分かりません。

以下の例だと2つのParameterの値を足していますが、SaturateノードはMaterial Parameter Collectionから値を得て、Texture SaturateノードはScaler ParameterでMaterial Instance内で値をセットします。

この辺の使い分けも明確なRuleがあるような気がします。

Function Inputノード>

これ、Parameterとあんまり区別付いていなかったです。

Inputは、以下に示した様にMaterial Functionノード内のInputに表示されます。

大体こんなもんです。

この勉強だけしている訳にもいかないので、今週のVRM4U [25]のMaterialの勉強はここで終了します。

9.2 公式のDocumentStylized Rendering [26]の勉強

今週もLandscapeに使用されているMaterialの実装を読んで勉強します。

今週は以下のBlockを勉強します。Splotchesです

まずSplotchesと言う単語の意味が分かりません。調べます。

Google 検索でImageを調べたら一発で意味が分かりました。

ようするにインクの染みか、インクの染みのような形状をした何かです。

発音も調べておきます。

Cambridge DictionaryのSplotch [27]によると

英語だとスプロッチ、米語だとスプラッチって聞こえますね。発音記号もɒとɑːになっています。

USで限定してYouGlishで確認しましたが、ラとロの間位の発音している人が一番多かったですね。でもラって言っている人もいましたし、ロって言っている人もいました。多分、アメリカ国内でも訛りがあるんでしょうね。

それは兎も角として以下に示したLandscapeのどれがSplotch何でしょうか?

以下の白い点々か、

以下の白い点々か、

あるいは茶色の点々か、

もしくは両方か、

うーん。

実装をみて判断しましょう。

まずLerp#2ノードがありました。

このAlphaがSplotchを指定しているとすると、AかBにSplotchの色が指定されているはずです。

はい、

Lerp#2ノードのBに以下の色が指定されていました。

先程のLevel上の茶色いシミをUnlitで撮りました。

まったく同じ色ですね。

となるとAの方は通常のLandscapeがパスされて、AlphaがSplotchの模様を指定しているはずです。

Alphaの実装から見て行きます。

ここは簡単なMultipl#1ノードのBの実装をみます。

Texture Sample#1のTextureのGを見ます。

これは完全に茶色の染みの形状を表していますね。

白である1がAlphaにPassされる訳ですから、白い部分はBの値になる訳です。つまり茶色です。

LandscapeCoordsノードの設定です。

Mapping Scaleが12と言う事は、12倍するとLandscape全体を覆うサイズになると言う意味でしょうか。

Mapping TypeとかCustom UV Typeとかの意味は分かりませんね。

調べたら公式のDocumentであるLandscape Materials [27]に解説が載っていました。

でもあんまり意味分からないですね。

この辺は後で勉強する事にします。

今度はMultipl#1ノードのAの実装をみます。

Mutiply#3ノードに繋がっています。

Multiply#3ノードのBの値から見て行きます。

Texture Sample#2のTextureのRのImageです。

ここは先程のMultipl#1ノードのBの実装とほぼ同じです。

つまり上記のImageの白い部分が茶色いSplotchになります。

この結果に何かを掛けています。

Multiply#3ノードのAを追います。

これはカメラから遠くになるとSplotchが消えると言う事です。

Level上のLandscapeで確認します。

色々やったんですが、Splotchが消える前にLandscapeの色が変わってしまいます。

条件を以下の様に変更します。

結果です。

カメラがLandscapeから遠ざかると、Splotchが消えます。

はい。

証明出来ました。

Lerp#2ノードのAの実装ですが、Lerp#3ノードに繋がっています。

そのLerp#3ノードは、以下に示した様にLerp#2ノードと全く同じ事を

以下の色で行っています。

いや、Level上のSplotchは白と茶色だったはず、コレ薄緑じゃないかと思うかもしれませんが、UnlitでLandscapeを見ると

薄緑色です。

ここで、最初の疑問だった白と茶色の染みのどっちがSplotchなのかが判明しました。

両方ともSplotchでした。

最後に残ったLerp#3のAの実装ですが、

当然、Landscape全体のMaterialが実装されているはずです。

はい。Landscape Layer Blendノードが繋がっていました。

以上です。

9.3  法線転写をUEで実装する方法を検証

Historiaさんの[UE4]動的法線転写について[28]を勉強します。

今週はBlueprintの勉強の部分を勉強します。

これがんばったら今週で全部終わりそうなんですが、VroidのImportの部分で時間を使い過ぎてしまい、もうアニメレンダリングを勉強する時間が残ってないです。

後、予定ではHistoriaさんの[UE4]動的法線転写について[28]を、これから2~3週間は勉強するつもりなので、今週はSphere Collisionを配置する所だけやります。

完成するのは来週のお愉しみにします。

2022-09-19のBlogで作成した顔の影がはっきり見えるVroidを

Componentとして追加したBlueprintを作成します。

これにSphere Collisionを追加します。

しました。

こんな感じです。

側面図です。

正面図です。

法線転写とは、全然関係ないですが、Unlitにしているのに服に影が出来ています。

うーん。

凄い。

名前をNormal Modifier Maxに変更します。

で、Normal Modifier Minの方は要らないです。

これNormal Modifier Minの値は0にした方が、先週作成した以下の実装が分かり易いからです。

後、私が法線転写の実装を勉強する目的は、以下に示した髭が生えた様な影を消すのが目的だから、Vroidの顎がNormal Modifier Min Radius内に入ってしまうと意味が無くなってしまうんです。

ので、今回は、法線転写の結果を複雑にするNormal Modifier Min Radiusは作成しません。

今回は短いですが、今週全部やってしまうと予定が狂ってしまうのでここでお終いにします。

10.DirectX 12の勉強

今週は先週見た C++ DirectX 12 Game Engine - [S01E01] - Creating Our First Window [29]のProjectの作成をやります。

そしてWindows Software Development Kitの保存場所についてのあらたな情報が入ったのでその辺もここにまとめておきます。

時間が余ったら C++ DirectX 12 Game Engine - [S01E01] - Creating Our First Window [29]の続きをみます。

10.1 Projectの作成

先週のBlogを見直したら、まずFolderから作成していました。

以下の場所にMy Studyという名前のFloderを作成しました。

ここにVisual StudioのProjectなどを保管しておきます。

以下の3つのFileを作成します。

まず、IConですが、特に自分のICONは作っていないので、先週DonwloadしたTutorialのFileにはいっているOlynpusMons.icoをそのまま使用します。

LICENSEとREADME.mddですがこれはEditorから作成します。

何でLICENSEにはExtensionが付いていないんでしょうか?

設定でExtensionが表示になっているのか確認します。

なっていました。

LICENSE FileとREADME Fileを作成しました。

Tutorialを見直しましたが、中に何かを書けとは言っていないのでこれで行きます。

READMEとLICENSEのExtensionですが、後でこれらの作成方法に関してのRuleが見つかったらそれに従って 直します。

今はこれで良いです。

それではVS2022でProjectを作成します。

Tutorialと全く同じ設定を選択しました。

Configure your new projectですが、Locationは先程作成したFolderの位置を指定し、それ以外はTutorialと同じにしました。

以下のProjectが開きました。

今度はこのProjectのFolderの整理をします。

まず、HeaderをPublic、SourceをPrivateに変更します。

次に新しいFileを追加して名前をSourceにします。

そこに先程、名前を変更したFolderを移動させます。

最後にResource FileをResourcesに変更します。

今度はFoler Viewに変更します。

そしてFoler Viewを開きます。

なんとTutorialの方はこのFolderにLICENSEなどが入っています。

直しました。

あれ?

Desktop.iniというFileがあります。

DownloadしたProjcetを見たらありました。

開いてみます。

うーん。こんな事を指定しているのか。

これはまあ、後で考えます。

Blank Projectに新しいFolderを追加し、名前をSourceにします。

このFolder内にCodeを書いたFileを保存していくそうです。

このFolderに新しいFileを追加し、名前をWinMain.cppとします。

おお、2年ぶり位でCPP Fileを作成しました。

Visual Studioがびりびりと動き、以下に示した様に、WinMain.cppを開きました。

次に以下のボタンを押して前のViewに戻ります。

あれ、戻ってないじゃん。

と思ってTutorialで確認したらこの後、OlympusEngine.slnをClickしていました。

以下の画面が表示されました。

Tutorialの画面です。

うん。全く同じです。

先週のBlogを読み直したら、こっちの画面はProject Viewと呼ぶと書いていました。

ここからConfigurationの設定を行います。

BlankProjectを右ClickしてPropertiesを開きます。

ここでX86 を外します。

DirectX 12はX86では動かないからです。

右上のConfiguration ManagerをClickします。

Configuration Managerが開きました。

Active Solution PlatformからEditを選択します。

以下の画面が表示されるのでX86を選択してRemoveを押します。

以下の警告が表示されました。

はい。を押します。

結果です。

確かにX86 が無くなりました。

今度は以下のPlatformにあるWin32をRemoveします。

やり方は前と全く同じです。

Editを選択して

Win32を選択し、Removeします。

結果です。

Win32が無くなりました。

これで Configuration Managerの設定は終わりです。

Properties画面に戻ります。

Platformの選択肢がX64 だけになりました。

これからが本番です。

ここまでは何をやっているのかは完璧に理解してたので、まあ間違えたとしても何とかなる自信はありました。

これからの箇所はなんでそうやるのか一寸分からない箇所もあります。

ゆっくりしっかりやっていきます。

まずConfiguration PropertiesのGeneralを選択して

Output DirectoryのPlatformをProjectNameに変更します。

しました。

これって、SolutionDirの下にProjectNameというFolderを作成するって事なんでしょうか?

それともProjectNameの部分にBlankProjectが入ったりするんでしょうか?

この部分Typoしたら後で問題になるかもしれません。

Tutorialを見て再確認します。

なんと、TutorialではTarget Nameの値をCopyしてPasteしていました。

一応同じことをしておきます。

$(Configuration)の前には¥がありますが、$(ProjectName)の前にはありません。

これあっているんでしょうか?

Tutorialのを見ると

¥は\になっています。これはTutorialは英語版だからです。意味は同じです。

$(ProjectName)の前には¥はないですね。

あっているみたいです。

今度は

をします。

まずIntermediate Directoryの設定を変更します。

Output Directoryの値をIntermediate Directoryの設定にPasteします。

しました。

あれ、Tutorialは$(SolutionDir)\Build\$(Project Name)\$(Configuration)になっていました。

うーん。

Tutorialを見直したら、Bin とObjectを追加するのではなくてBuild Folderを作成してその中にIntermediate Directoryを保管すると言っていました。

その説明をしている時に、Buildを追加していました。

ので私もBuildを追加します。

しました。

この¥もしくは\はDirectory内にあるDirectoryを指していると思われます。$()はどういう意味でしたっけ。

うん。

後で調べます。

Intermediate DirectoryのBuildをIntermediateに変更します。

あ。

これをTutorialは説明していたのか、やっと理解出来ました。

Solution Directoryを開くとBuild FileとIntermeditate Fileが出来ていて、その中にそれぞれProject Name というFolderが存在しているんです。

納得。

先週、この部分の解説があんまり理解出来なかった理由が分かりました。

先週は、このOutput Directoryの値にBuildを追加するところを見逃していたんです。

それで意味が分からなくなったんです。

なんとこの後で、Intermediate Directoryの$(ProjectName)の位置をIntermediateの前に移動させました。

まあ、理屈が分かってしまえば何をしても理解はできます。

$(SolutionDir)という名前のFolderの下にBuild Folderと$(ProjectName) Folderがあって、$(ProjectName) Folderの中にIntermediate Folderがあります。

こういう事でしょう。

これでFolderの設定は終わりのようです。

多分、Tutorialと同じ設定になっているでしょう。

もしProjectをBuildした後で出来たFolderがTutorialと違っていたらその時は、ここに戻って直します。

今度はWindows SDKのVersionが最新のがセットされているか確認します。

となっていました。

これLatest Installed VersionだとWindows 11用のSDKが選択されそうですが、どうなんでしょう。

Exe Fileが動かなかった場合はここを疑う事にします。

TutorialではLatest Installed Versionから使用するSDKを指定する設定に変更しています。

うーん。

どうしよう。

ここでWindows 10用のSDKを指定すれば確実かもしれません。

しかもWindows 10用のSDKの番号はTutorialで使用しているVersionと一緒です。

うん。

変えました。

次はC++ Language Standardの設定です。

最新のVersionを選択して下さいって言っていますが、Tutorialと同じISO C++17 Standardを選択します。

Cの設定も最新のVersionを選択して下さいと言っています。

いや、Tutorialと同じのを選んでおきます。

と思ったんですがCはTutorialが選んだやつが最新のVersionでした。

最後に一個だけ変更します。

Linker のSystemを選択して

SubSystemの設定をWindows(/SUBSYSTEM:WINDOWS)にします。

これでConfigurationの設定は終わりだそうです。

OKを押してPropertiesを閉じました。

うーん。

あんまり進まなかったですが、今週はここまでにします。

10.2 Windows Software Development KitのInstall場所について

まず何でVisual StudioをInstallした時にD:Driveを指定したのに

C:DriveにInstallされたのかが分かりました。

公式のDocumentである Select the installation locations in Visual Studio [30] にその理由が書かれていました。

つまり、SDKに関してはよっぽど特殊な事をしないとC:Drive以外にInstallする事は出来ないように初めからなっていたんです。

次に Regeditですが、少しだけ勉強しました。

使用する事自体はそんなに難しくはなさそうです。ここで問題なのは間違った編集をすると取り返しがつかなくなる事です。

Regeditを開くだけなら問題ないでしょう。

Tool BarのSearch Boxに regeditとタイプしてRegeditを起動させました。

以下の場所でSDKのInstall場所を指定しているそうです。

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows Kits\Installed Roots

一応、そのFolderは開けました。

中に入っているFileはよくわからないです。

こんだけ試したので、もう満足しました。

SDKのInstall問題はこれで解決した事にします。

以上です。

11.まとめと感想

先々週からDirectX 12の勉強も始めたんですが、暇な時間をコツコツ使用して勉強する予定でした。

そしたら、何と今週からHunter x Hunterが連載を再開してしまいました。

その結果、気持ちがそっちに凄い引っ張られてしまいました。

大体、勉強してない時でも、頭の中では、結構、勉強内容について考えているもんなんです。

例えば風呂に入った時とかに以下の様な事を考えるわけです。

DescriptorってDescribe(描く)とかDescription(描写)とかってニュアンスがあるけど、実際にはDataを保持しているだけだよな。

例えば青いって概念を描いているよりRGB(0,0,1)というDataを保持している感じだよな。

でもそれってDirectX 12的には青いって概念を描いているのかもな。

とか考えるわけです。

これが結構、見えない勉強になっています。

ところが、Hunter x Hunterの連載が再開してから、そういう暇な時間、Hunter X Hunterの事ばかり考える様になってしまいました。

このマフィアの殺し屋、勝っても負けてもどうでも良いよな。何か期待した程、面白く無いよな。これだったらチェンソーマンの第2部の方が面白いよな。

でもなんでだろう。

あ、俺はこのマフィアの殺し屋がどんな人生を歩んできたのかも、どんな哲学を持って生きているのかも知らないからだ。だからこの殺し屋が勝っても負けても興味がないんだ。

それに比べてチェンソーマンの第2部のアサちゃんは、どんな人生を歩んできたのかも、どんな哲学を持って生きているのかも知っているから、戦闘になったらドキドキするんだ。

とか考えてしまっています。

まあ、でもこのままHunter x Hunterがつまらないままだったら、すぐに興味を無くしてDirectX 12の方に集中出来るでしょう。そんなに心配しないでDirectX 12の勉強はのんびりやる事にします。

12.参照Reference

[1] Geoffrey Datema. (2021, February 8). Viewport Transformation | 3D Graphics Overview. YouTube. https://www.youtube.com/watch?v=M_G6nbO_SZA

[2] Geoffrey Datema. (2021, February 8). Rasterization | 3D Graphics Overview. YouTube. https://www.youtube.com/watch?v=htSGrJJOtAk

[3] CGHOW. (2022, June 18). Custom Facing | UE5 Niagara #ScratchPad Module #11 [Video]. YouTube. https://www.youtube.com/watch?v=meLcYt36Dh4

[4] CGHOW. (2022, June 8). UE5 Niagara #ScratchPad Module #1 | velocity Condition [Video]. YouTube. https://www.youtube.com/watch?v=LQg_kz9yUYg&

[5] CGHOW. (2022, June 8). UE5 Niagara #ScratchPad Module #2 | Custom Drag [Video]. YouTube. https://www.youtube.com/watch?v=8ogtukZWwkI

[6] CGHOW. (2022, June 9). UE5 Niagara #ScratchPad Module #3 | Spawn Count on Owner Scale [Video]. YouTube. https://www.youtube.com/watch?v=gWz4S0prECM

[7] CGHOW. (2022, June 9). UE5 Niagara #ScratchPad Module #4 | LODs [Video]. YouTube. https://www.youtube.com/watch?v=mLxGuPUCh6g

[8] CGHOW. (2022, June 10). UE5 Niagara #ScratchPad Module #5 | Static Mesh Location with Offset , Rotation and Scale [Video]. YouTube. https://www.youtube.com/watch?v=ucPQXa-O4yU

[9] CGHOW. (2022, June 10). UE5 Niagara #ScratchPad Module #6 | Skeletal Mesh Location with Offset and Scale [Video]. YouTube. https://www.youtube.com/watch?v=t6ZX5X-jxtg

[10] CGHOW. (2022b, June 11). UE5 Niagara #ScratchPad Module #7 | Grid and Brick Pattern [Video]. YouTube. https://www.youtube.com/watch?v=lO-phNUx_aw&list=PLwMiBtF6WzsqfBv2rYkHe93Whx5AY1u6o&index=7

[11] CGHOW. (2022, June 11). UE5 Niagara #ScratchPad Module #8 | Voxel FX. YouTube. https://www.youtube.com/watch?v=kftOZ1Cz-ec&list=PLwMiBtF6WzsqfBv2rYkHe93Whx5AY1u6o&index=8

[12] CGHOW. (2022, June 13). Collision Query | UE5 Niagara #ScratchPad Module #9 [Video]. YouTube. https://www.youtube.com/watch?v=kxFgm8B7Tm4&list=PLwMiBtF6WzsqfBv2rYkHe93Whx5AY1u6o&index=9

[13] CGHOW. (2022, June 13). Collision Query | UE5 Niagara #ScratchPad Module #9 [Video]. YouTube. https://www.youtube.com/watch?v=kxFgm8B7Tm4

[14] Ben Cloward. (2022, March 24). Toon Shader Ink Outlines - Shader Graph Basics - Episode 39 [Video]. YouTube. https://www.youtube.com/watch?v=IaHl5hKnjq4

[15] Harube, R. (n.d.-b). VRM4U. VRM4U. https://ruyo.github.io/VRM4U/

[16] Ben Cloward. (2022b, August 25). Post Process Action Lines - Shader Graph Basics - Episode 58. YouTube. https://www.youtube.com/watch?v=joAUbu2_HYg

[17] Cambridge Dictionary. (2022). anime pronunciation. How to say anime. Listen to the audio pronunciation in English. Learn more. https://dictionary.cambridge.org/pronunciation/english/anime

[18] Compscript. (2020, January 13). 🎯 UE4 - Unreal Engine - Copy , Delete , and Rename projects [Video]. YouTube. https://www.youtube.com/watch?v=YvMbq4XMZ1o

[19] WorldofLevelDesign. (2015, June 4). UE4: How to Rename Your Project in Unreal Engine 4 [Tutorial] [Video]. YouTube. https://www.youtube.com/watch?v=OQ_nOPraW58

[20] Unreal Engine. (2022, July 13). Renaming Projects | Tips & Tricks | Unreal Engine [Video]. YouTube. https://www.youtube.com/watch?v=HzQhO8nxeI8

[21] Aero. (2017, July 3). [Tutorial] Properly Renaming a C++ Project in Unreal Engine 4 (CodeSpartan’s MMO Starter Kit) [Video]. YouTube. https://www.youtube.com/watch?v=cmK-A8Dh_Ms

[22] Matt Stone. (2018, September 22). How to rename a visual studio c++ project [Video]. YouTube. https://www.youtube.com/watch?v=RufJBUPk5Jo

[23] quadspinner. (2020, February 16). Tutorial: Creating a Hero Mountain with Gaea [Video]. YouTube. https://www.youtube.com/watch?v=JAFIuTBYtnM

[24] Klaus. (2022, January 12). Gaea Beginner Tutorial Series : Part 1 - Interface. YouTube. https://www.youtube.com/watch?v=H-vTeYYHJPM

[25] Harube, R. (n.d.). VRM4U. VRM4U. https://ruyo.github.io/VRM4U/

[26] Stylized Rendering. (n.d.). Unreal Engine 4.27 Documentation. https://docs.unrealengine.com/4.27/en-US/Resources/Showcases/Stylized/

[27] Landscape Materials. (n.d.). Unreal Engine 4.27 Documentation. https://docs.unrealengine.com/4.27/en-US/BuildingWorlds/Landscape/Materials/

[28] 株式会社ヒストリア. (2022, June 30). [UE4] 動的法線転写について. Historia Inc - 株式会社ヒストリア. https://historia.co.jp/archives/11921/

[29] OlympusMonsTutorials. (2021, February 17). C++ DirectX 12 Game Engine - [S01E01] - Creating Our First Window [Video]. C++ DirectX 12 Game Engine - [S01E01] - Creating Our First Window

[30] Select installation locations - Visual Studio (Windows). (2022, September 1). Microsoft Learn. https://learn.microsoft.com/en-us/visualstudio/install/change-installation-locations?view=vs-2022