UE4の勉強記録

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

UE5の勉強 -LandscapeのみのGameを作成する-

1. 今週の予定

今年から以下の内容を勉強します。

  • LandscapeのみのGameを作成する
  • Niagaraの勉強
  • Materialの勉強
  • 戦闘システムの続きを作成する
  • Gaeaの勉強
  • Houdiniの勉強
  • Volumetric Cloudの勉強内容をまとめる
  • DirectXの勉強

2. LandscapeのみのGameを作成する

2.1 LandscapeのみのGameを作成する理由

RPGを一から作成していたら永遠に終わらない事に気が付きました。

なので、LandscapeだけのGameをまず作成します。これを完成させます。

これが完成したら、これに

  • 戦闘システム
  • Monsterの配置
  • NPC
  • UI
  • Save機能
  • Story

などを追加していきます。

それぞれを追加する度に、Gameを完成させます。このやり方だったらいつでも完成できます。このやり方でRPGを制作する事にします。

2.2 LandscapeのHeight MapとMaskをGaeaで作成する

Klaus氏のGaeaのTutorialならどれでも良いんですが、今回はHow To BUILD AN ISLAND In 20 mins | Unreal Engine 5 Tutorial [1]を参考にしてLandscapeを作成します。

軽く全部見ました。

TextureをApplyするところで別なGraphを作成していませんね。これKlaus氏のTutorialで最も納得した部分だったんですが、止めてしまったんでしょうか?

LandscapeのMaterialは先に作成しておいた方が良いみたいですね。これ後からLandscapeのMaterialを作成してそれぞれのLayerとMaskを対応させる事も出来るのですが、そのやり方を調べるのが面倒です。4つのLayerのあるMaterialを先に作成しておく事にします。

Water systemも使用していました。

これは一寸復習しないとどうやって使用するのか分からないかもしれません。

それでは作成します。

Islandノードをセットします。

Edit Islandを選択して

Paintします。

以下のボタンを押すとPaintした部分を消す消しゴムになります。

Terrainで表示します。

これにDistance ノードを追加します。

DistanceノードもTerrain表示に変更します。

TutorialではFalloffの値が19%になっているので同じにしました。

結果です。

表面にRoughnessを追加するためにWarpノードを追加します。

結果です。

うーん。

ざらつきが見られるくらいの変化しかないですね。

Sizeを6%にしました。

結果です。

うーん。

かなりざらつきが出てきました。

更にRoughnessの値をMaxにしました。

結果です。

この時点で本物のはげ山のようです。

ここでRidgeノードに繋げます。

この部分のやり方が全然、分からない。

これCombineノードでRidgeノードとWarpノードの結果を繋げた場合と同じなんでしょうか?

後、結果を以下に示しますが、

これです。

こんなTerrainを作成するなら途中でWarpノードを挟んでRoughnessを追加する必要ってあるんでしょうか?

これらの疑問は後で確認する事にします。

HeightをMaxにします。

その他のPropertyもTutorialの値と同じにしました。(もちろんSeedはそのままです。)

結果です。

Erosionを追加するためにWizardノードを追加しました。

水面の部分が凸凹になっています。

直します。

Minを選択します。

結果です。

平らになりました。

MinはRidgeノードとWizardノードとのMinimumの値を取るそうです。

その結果平らになりました。

もう少しひび割れを追加したいです。Crumbleノードを追加します。

結果です。

になりました。

Thermal Shaperノードを追加します。

このNodeはUEにExportした時にArtifactを減らす働きがあるそうです。

新たなErosionを追加するためにWizardノードをもう一回追加します。

ここでもMinを使用しました。

Seaノードを繋ぎます。

結果です。

これじゃ全部海になってしまいます。

後で調整します。

いくら調整しても望みのTerrainにならないので最初から作り直しました。

以下の実装で

以下の結果になりました。

単純すぎるきらいはありますが、海の部分の割合はこれぐらいが望ましいです。

海の部分をMaskします。

以下の様になりました。

Beachの部分をMaskします。

以下の様に単にSeaノードのBeachをMaskとして指定すると

海の部分も大量にMaskします。

これはBeachが海にも存在しているからだそうです。

これはBeachのMaskからSeaのMaskを引く事で修正できます。

結果です。

TutorialではここでFxを消してTextureを追加しています。

が、これはPortにして別なGraphで作成します。

結果です。

以下の実装を追加して

こんな感じにしました。

更にBeachと海を追加しました。

結果です。

ここはTutorial通りのやり方でやりました。

これでTerrainは完成しました。

OutputするHeight MapとMaskを指定します。

当然、SeaノードのOutputがHeight Mapになります。

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

次はSlopeとShatterノードがMaskになります。

最後はBeachとSeaノードのSeaがMaskになります。

以下の箇所からOutputします。

Buildの設定に移動します。

以下の設定でBuildします。

設定はTutorialの設定と全く同じにしました。

Buildします。

出来ました。

うーん。

これはUEで確認しないとあれですが、あんまり良くないLandscapeになりそうです。

まあ、何回かLandscapeを作成するのもありかもしれません。

今回は、これで試してみます。

3. Niagaraの勉強

3.1 2022-12-12のBlogの復習

Niagara Fluid Simulationの勉強の一環としてUnreal Engine 5 Tutorial - Niagara Fluids - Flamethrower [1/2] [2]を勉強しています。

ここで勉強した内容で大切な事は、以下の4点です。

  • Flame Thrower自体は誰でも作成出来るがNiagara Fluid Simulationを使用して作成するのがPoint
  • 作成したFlame Throwerは原点に位置した場合のみ正しく動く。
  • すべてのNiagara Fluid Simulationが原点でしか正しく動作しないのか確認するためにTemplateにあるGrid 3D Gas Fireを作成し、いろいろな位置に配置したら、どの場所でも正しく動いた。
  • 取りあえず次のTutorialであるUnreal Engine 5 Tutorial - Niagara Fluids - Flamethrower [2/2] [3]を勉強してからこれらの問題について考察する事に決定した。

です。

今週は、Unreal Engine 5 Tutorial - Niagara Fluids - Flamethrower [2/2] [3]を取りあえずやります。やってから何をするか決定します。

3.2 Unreal Engine 5 Tutorial - Niagara Fluids - Flamethrower [2/2] [3]を勉強する

軽く全部見ました。以下の3つの事について解説しています。

  • Grid 3D Gas Controls EmitterのEmitter SummaryにあるAttributeの機能について

  • このEffectを原点以外に配置した場合、Effectそのものが消えてしまう事とその対策

  • Static MeshをFlameに挟んだ時に、Collisionするための設定について

はあ。

やっぱり原点しかEffectが表示しない事に対しての解説をここでしていましたね。

良かった。こっちのTutorialを見る前にこの問題について検証してたら多大な時間を無駄にするところでした。

3.3 Unreal Engine 5 Tutorial - Niagara Fluids - Flamethrower [2/2] [3]を実際にやる

Niagara Fluid Simulationは科学的に流体の流れを計算していますので、計算の負担が通常のNiagaraに比べて非常に大きいです。

<Grid 3D Gas Controls EmitterのEmitter Summary>

このままの状態で値の変更を行うとUE5 EditorやPCがCrashしたりします。のでPCの負担が少なくなるように設定を変更します。

Grid 3D Controls EmitterのEmitter Summaryの

AttributeのGridにあるResolution Max Axisの値を

256から80に変更します。

PreviewのFrameが

から

になりました。

明らかにRenderingの質が落ちています。

Resolution Max Axisの解説には以下の様に解説されていました。

Cellの数が減っている訳ですが、解析の精度が落ちるのは当然です。

次にVolume ContainerのSizeを小さくします。

これもGridにある以下のAttributeの値を調整する事で行います。

Local PivotのZの値を0にします。

PreviewのFlameの位置がVolume Containerの中央に移動しました。

勿論、2022-12-12のBlogでやったTest Fuel EmitterのParticle Spawn SectionにあるShape Location Moduleの

Offsetのzの値は元に戻しています。

最終的に以下の値になりました。

こんな感じです。

今度はGrid 3D Controls EmitterのEmitter SummaryのAttributeの値を調整して炎や煙の形状を調整します。

Density MultiplierとMultiplierの値を調整します。

以下の様に変更しました。

TutorialによるとDensity Multiplierの方は煙の量を調整して、Temperature Multiplierの方は炎の大きさを調整するそうです。

以下の様になりました。

Temperature Multiplierの値をTutorialと同じ250にセットするとVolume Container全体が炎に包まれる事態になったので100に下げました。

よく見たらTutorialのTemperature Multiplierの値は250ではなく25でした。

25にセットし直しました。

こんな感じになりました。

あんまり前と変わりません。

次にSplat Size Temperatureの値を変更します。

これはVoxelがどのようにProjectされるのかを指定するAttributeだそうです。

以下にSplat Size Temperatureの解説を示します。

取りあえずTutorialと同じ2に変更してみます。

炎のサイズが2倍になりました。

Splat SizeにはVelocityもあります。

Tutorialでは1に変更していましたが、私のEffectはこの値を1にすると以下の様な炎の形状になるので、

2のままにします。

次にこのEffectの見た目をArt的な立場から調整します。

Delta Time Scaleの値を調整します。

試しに0.1にセットすると

炎がスローモーション撮影でもしたみたいな形状に変化しました。

0.5にしました。

次はDissipationです。

TutorialによるとこれらのAttributeは拡散して消えるまでの時間を指定しているそうです。

Temperature Dissipationは温度が周りの環境と同じ温度になる時間を指定しているそうです。

両方の値を1にしました。

今度は炎の色や明るさを調整します。

RenderにあるRender Density GainとRender Density Albedoの値を調整します。

Render Bucket氏もこの辺のAttributeの値が何をしているのかあんまり理解していないみたいです。

説明が要領を得ません。

値を色々弄って終わりにします。

Render Temperatureです。

Curveに指定して以下の様にCurveの色を青くすると

青い炎になりました。

黒い炎も作成できるかと頑張ってみましたが出来ませんでした。

Render Temperature Rangeです。

Yに0.1を入れると

Previewの炎が強大になりました。

これは0がTemperatureの初期値で、1が環境と同じになる温度を表しているからです。0.1までしか温度が下がらなかったら炎はますます強大になるわけです。

Render Temp Color Gainです。

値を大きくすると炎の色の部分が濃くなります。

1の時です。

2の時です。

Render Temp Opacity Gainです。

この値を大きくすると煙が濃くなります。

0.5の時です。

1の時です。

最後に炎のQualityを上げるためにResolution Max Axisの値を少しだけ上げるそうです。

これを上げるとPCがCrashする可能性があるので、試す前に必ずSaveをしておきます。

200にしました。

結果です。

うーん。

全然違う。

これでGrid 3D Controls EmitterのEmitter SummaryのAttributeの調整についてが終わりました。

<Grid 3D Controls EmitterのEmitter SummaryのAttributeの調整を勉強した感想>

本来、Grid 3D Controls EmitterのEmitter SummaryのAttributeたちは流体と燃焼の複雑な計算式のParameterの値を表しているはずです。つまり「この値を上げたら炎が赤くなる。」というLinearな対比をしているParameterは存在しないって事です。

しかしGameに使用するEffectを作成するDesignerの人達にそれを説明したら「じゃFluid Simulation使えないじゃん。無駄な技術じゃん。」と言われてしまうので、無理やりGrid 3D Controls EmitterのEmitter SummaryのAttributeから炎の形状を指定しようとしたら、このTutorialの様になったって感じです。

この説明をどこまで鵜呑みにしていいのかも分かりませんし、この説明通りにやっても炎や煙の形状や色、発生する量が完全に調整出来るとは思えません。

まあ、こんな説明方法もありますよ。位に聞いておくことにします。

個人的に流体のSimulationなどをReal timeでUEで行う事が出来るようになったらGame以上にお金を稼げる分野になると思っています。

例えば、東京のLandscapeを精密に作成して、荒川が氾濫した場合はどうなるのかをSimulationします。UEでVisualizeした結果は誰でも理解できます。

UEのリアルな映像で、自分の家が水浸しになったり、崩壊して流されていったりするのを見たら、凄い衝撃受けるでしょう。

そのための最初の一歩だと思って、Niagara Simulationの勉強は継続します。

<このEffectを原点以外に配置した場合、Effectそのものが消えてしまう事とその対策>

この対策は滅茶苦茶簡単で、Test Fuel EmitterのPropertiesの

Local SpaceにCheckを入れるだけです。

結果です。

原点以外でもFlame Throwerが見えるようになりました。

うーん。

2022-06-26のBlogにまとめてありますが、私が理解しているLocal SpaceのCheckって

だけです。

これを見るとParticleが発生する位置自体もLocal Spaceで指定しているみたいですね。

これは後で確認します。

<Static MeshをFlameに挟んだ時に、Collisionするための設定>

これはColliderをStatic Meshの

に追加するだけです。

と思ったら、出来ません。

Grid3D_Gas_Controls_EmitterのEmitter Summaryに

Tutorialで説明しているCollision Data InterfaceもStatic Mesh Collisionもありません。

うーん。これは自分で調べるしかないですね。

3.4 Local Spaceの検証

まず簡単なLocal SpaceのCheckを行います。Fountain Emitterを保持したNiagara Systemを作成してLocal SpaceのCheckを外します。

これを原点以外に配置します。

うーん。普通にParticleを生成しています。

別に原点以外だとParticleを生成しないとか無いです。

うーん。

先程のFlame ThrowerのGrid 3D Gas Controls Emitterを消して、

Test Fuel Emitterの

Render SectionのSprite RendererにCheckを入れます。

更にTest Fuel EmitterのLocal SpaceのCheckを外します。

結果です。

原点以外でも普通にSpriteを放出しています。

この状態で、Grid3D Gas Controls Emitterを表示します。

やっぱり炎は表示しません。

しかしTest Fuel EmitterのSpriteは見えています。

Test Fuel EmitterのLocal SpaceにCheckをします。

炎が現れました。

うーん。

この現象は初めて知る事案ですね。

こういうものだと覚えておきます。

3.5 Static Mesh Collisionについて

こっちはUE5.1 のContents Exampleをまず確認します。

これ見ると普通にStatic MeshとCollideしています。

このStatic MeshのTagを見ると

普通にcolliderとなっていますね。

今度はSmokeを作成しているNSの実装を見ます。

中を開くと

Emitterが一つだけの簡単な仕組みです。

このEmitterのSummaryを見ると

Static Mesh Collisionは無いですね。

試しにColliderを消してみました。

結果です。

衝突しなくなりました。

という事はNSのどこかでColliderを指定しているはずです。

見つかりませんでした。

今度は5.0のContent Exampleを見てみます。

同じNiagara Fluid Simulationを見てみます。

こっちにはTutorial通りのAttributeがありました。

あ。

Niagaraの勉強に使う時間を大幅にOverしていました。

残りは来週考えることにします。

4. Materialの勉強

今週から、Ben Cloward先生のAdvanced Material Seriesを勉強します。今週はSparkling Snow Shader - Advanced Materials - Episode 2 [4]を勉強します。

4.1 Sparkling Snow Shader - Advanced Materials - Episode 2 [4]を勉強する

まず軽く全部見て何をしているのかを把握します。

以下に示したようなSparklingのある雪のMaterialを作成しています。

流石にAdvanced なだけあって前のTutorial Seriesよりだいぶ複雑です。

以下の構成で作成していました。

  • DownloadしたTextureを改良する
  • Materialの実際の実装

Textureの作成は、最初にDownloadしたTextureのサイズを変更したり、細部を切り抜いて別なTextureとして保存したり色々やっています。

その後の雪のMaterialの作成でも、Sparklingを雪の白の上から輝かせたり、太陽光に対して光らせたり、いろいろなTechniqueが使用されています。

以下に具体的な実装内容をまとめます。

いきなり以下の画面から始まっています。

これらはQuixel Mega ScanからDownloadしたTextureだそうです。

Quixel Mega ScanからこのTextureを手に入れる必要があります。

このDownloadしたTextureにある工夫をする事で、Textureの質をほとんど落とさないで、Textureのサイズを劇的に小さくする事が可能になるそうです。

そのやり方をここに示します。

まずこれらのTextureは4KでDownloadされています。

よく分からない以下の2つのTextureはAO とRoughness用のTextureでした。

まずColor Textureですが、Constantの値である215で代用します。

つまりTextureは使用しません。

次にNormal Mapですが、以下に示したGlobalな凹凸と

以下に示したMacro sizeの小さな凹凸の組み合わせで出来ています。

ので、GlobalなNormal Mapのための1KのNormal Mapを作成し、

それとは別に細部の凹凸を表すためのNormal Mapを作成します。

こっちのTextureのサイズが分かりません。512 x 512と言っていたかもしれません。

さらにAO TextureをGlobalのNormal Mapを表すTextureのBlue Channelに入れ、

Roughness TextureをGlobalのNormal Mapを表すTextureのAlpha Channelに入れています。

このような編集はMediBangで出来るんでしょうか?

出来なかった場合は、諦めて別のTextureでImportします。

ここでUE用に、Normal MapのGreen Channelの値をInvertした。と語っています。これQuixel Mega ScanからDownloadしたTextureなら元々UE用にNormal MapのGの値がInvertされていると思うんですがどうなんでしょう?

どうやって確認したらいいんでしょうか?

実装する時に実際にNormal Map用のTextureを見てどうするか決める事にします。

更に以下に示したSparklingなTextureの作成方法を解説しています。

まず256x256のTextureを作成します。

Textureを127で塗りつぶします。

Noiseを追加して以下の様にします。

Levelを以下の様に調整します。

すると以下のようなImageになります。

次にPixelのサイズを512に変更して

Scaled TypeをNearest Neighborに変更します。するとSparklingが四角になります。

うーん。

これそっくりに作成するのは無理かもしれませんね。出来るだけ真似る事にします。

ここからUEの作業に移ります。

まずImportしたTextureの確認です。

Detailを示したNormal Mapです。

Textureのサイズは512x512です。

Compression SettingはNormal Mapになっています。

Tutorialでは述べていませんが、sRGBは外していました。

次はMainのNormal Mapです。

Ambient OcclusionはBlue Channelに入っています。

RoughnessがAlpha Channelに入っています。

Compression SettingはDefaultにSetしています。

これはNormal MapにするとGやAlphaにDataをSaveする事が出来ないからだそうです。

当然、sRGBはOffになっています。

次はSparklingのTextureです。

Compression SettingはGrayscaleにセットされています。

これはこのSparklingのTextureはRed Channelしか使用していないからだそうです。

Materialの作成に入ります。

まずSparklingの部分から作成します。

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

普通の実装ですね。

結果です。

この結果の問題はSparklingがStaticで実際にはSparklingしてない事です。

Sparklingさせます。

ここでBen Cloward先生、この方法は今思いついた独自のやり方で、別な方法でSparklingしたければそっちを採用しても全然問題ないです。と述べています。

Ben Cloward先生のUniqueなSparklingのやり方を勉強します。

まず以下の実装を作成しました。

これはTextureのSparklingを画面の1Pixelと同じサイズにして表すための実装だそうです。

結果です。

SparklingがScreen Spaceに投影されています。

うーん。なんで?

これは後で考える事にします。

これを先程の実装と掛けます。

こうする事で両方でSparklingがある場合のみSparklingが表示される事になります。

うーん。

成程!

結果です。

確かにキラキラしています。

この後Lightingの話になるのですが、Sparklingは本来はEmissive Colorに繋ぐそうです。

そこを直しました。

今の実装だと、以下に示した様に影になっている部分でもSparklingが見られます。

Emissive Colorに繋いでいるんだから光の影響は関係ないので当然の結果です。

でも実際の雪のSparklingは光が当たる方向のみに発生します。

これを直します。

うーん。

どうやってMaterial内でDirectional Lightの方向を得るの?

去年のAnime Renderingの勉強で、Custom Nodeを使用してDirectional Lightの情報を得るやり方を学びました。

かなりHacking的なやり方です。

同じ方法でDirectional Lightの方向を得るのでしょうか?

何と以下に示したAtmosphere Sun Light Vectorノードで太陽光の向きを示すVectorを得る事が出来るそうです。

ふえええっ!

正月からとびきりのお年玉です。

これは後でしっかり検討しますが、凄い事いきなり教わりました。

以下の様にStatic MeshのNormalとDot Productで掛ける事で、

光の当たっている部分のみを白くします。

更に以下の実装を追加して白みを調整します。

この辺はいつもの調整方法なのでSkipします。

この実装と先程の実装を掛けます。

その結果、太陽光の当たっているところだけSparklingが発生するようになりました。

おお。

凄い!

今度はNormal Mapの作成です。

Normal MapのNORを追加します。

これはMainのNormal、Ambient OcclusionそしてRoughnessのDataが入っています。

まずNormal Mapは-1~1の範囲で示されますが、通常のTextureは0~1の範囲で示されています。

それを以下の実装で直します。

これ結構忘れてしまいます。気を付けます。

Derive Normal Zノードを繋ぎます。

これは初めて使用するNodeです。

このNodeを繋ぐことでRed、Green Channelの値からBlueの値を計算してくれるみたいです。

Tutorialを見るとこの結果をそのままNormalに繋いでいます。

Alphaに入っているRoughnessの値はどうなるの?と思ったら最初からRGBの値だけ使用していました。

今度はNormalの細かい部分を表しているTextureを使用します。

こっちはSampler TypeがNormalにセットされているので

先程の調整は必要ありません。

Normalの大きさを以下の実装で調整します。

どうやってこのNormalと先程のNormalを混合するのかと思ったら、以下のNodeを使用していました。

Blend Angle Corrected Normalsノードです。

以下のようにBlendしていました。

結果です。

確かにMainのNormalと細かい部分のNormalが両方再現されています。

ふーん。

凄いですね。

こうやってMaterialで使用するTextureの数を減らすんですね。

最後にColorを指定します。

Tutorialの解説によると自然界に本当の白は存在しないそうです。のでここでの値も0.88が使用されています。

結果です。

何と、Sparklingが消えてしまいました。

のでSparklingの結果を5000倍にします。

結果です。

光っています。

今度はColorにFresnel効果を追加します。

これでCameraから見たMaterialの端の部分が白くなります。

これは、単に見た目を良くするためなのかそれとも自然界の何らかの法則を体現しているのか分かりません。

Tutorialでは以下の説明がありました。

ここのAccentuateって強引に意訳すると、アクセントを加えるって感じでしょうか?

以下に結果を示しますが、どうでしょう?

Fresnelを追加した事でNormalの細かい点が目立つようになっているでしょうか?

あんまり良く分かりませんね。

これでやっとTutorialの勉強が終わりました。

この後、実装をやります。

本当は、今年からこの勉強は止めて実装だけやるつもりでした。そうする事で時短に繋がると思ったし、去年のBlogを読み直しても、このTutorialの勉強の部分と実装の部分は重複している箇所が多く、無駄に見えました。

しかし実際に省略すると、その実装が何を目的でやっているのかと言う根本の部分が学べないです。

やっぱりこの部分の勉強は省略する事は出来ません。

今年もやる事にします。

4.2 Sparkling Snow Shader - Advanced Materials - Episode 2 [4]を実装する

<Textureの作成>

以下のTextureをMegascanからDownloadしました。

中身をチェックします。

T_Fresh_Windswept_Snow_uhpjdeyn_4K_Dです。

Base Colorを表すTextureです。

当然4kです。

これは使用しないのでそのままです。

T_Fresh_Windswept_Snow_uhpjdeyn_4K_Nです。

Normal Mapを担当しています。

中を見ると普通のNormal Mapですね。

拡大すると以下のようなDetailのNormal Mapが確認出来ました。

Flip Green ChannelにCheckが付いています。

という事はこのGreen Channelの値は反対になっているという事です。

Compression SettingはNormal Mapになっています。

T_FreshWindsweptSnow_uhpjdeyn_4K_ORDpです。

Ambient Occlusionです。Rの値に入っています。

Roughnessです。Gの値に入っています。

Bの値は何が入っているのか調べたらWorld Displacementでした。

それではNormal MapをExportしてMediBangで改良します。

聞いたことのないFormatでしかExport出来ません。

取りあえずEXRでExportしてPNGに変換します。

以下のサイトで変換しました。

これをMediBangで開いて細部を切り取り256x256 のTextureを作成しました。

名前をSnow Detail_Nとしました。

UE5にImportします。

Normal MapとしてImportしました。

更にGreen Channelの値をFlipしました。

次にNormal Mapの4Kを1kに変換して、BにAmbient Occlusion、AlphaにRoughnessの値を追加します。

まずNormal Mapのサイズを4kから1kに変換します。

これもNetで行いました。

で、この後で詰まりました。

このTextureにRoughnessやAmbient OcclusionのImageを追加する方法が分かりません。

更にこの1KのNormal MapはGreen Channelの値が逆になっています。

うーん。

考えました。

以下の方法でやります。

まず、MediBangで以下のImageを作成します。

これは赤と緑と青で構成されています。

ここから赤だけ以下の方法で抽出します。

赤のLayerを作成しClippingします。

更にBlendingを乗算に指定します。

結果です。

うーん。成程。

緑と青の部分のRGBの値は0になってもAlphaの値は255のままでした。

ここは黒のLayerを追加して全部黒くする事にします。

AlphaのLayerにImageを追加するのはMediBangの機能からだと一寸難しいそうです。

後で考えるか、諦めるかします。

結果です。

赤色だけ抽出する事に成功しました。

どうような方法で緑色だけ抽出します。

この2つの結果を加算します。

このやり方で、Normal MapのRとGの値だけ抜き出せます。

次に以下のようなGray ScaleのImageがあったとします。

これをRGBのBの値に変換します。

やり方は以下の様に青のLayerでClippingして

Blendで乗算します。

結果です。

白さに応じて青くなります。

このやり方でBにRoughnessかAmbient Occlusionを代入できます。

しました。

まずNormal Mapを1Kに縮小したImageに赤のLayerを掛けます。

これでNormal MapのRの値だけ抽出出来ました。

次にNormal Mapを色反転したImageに緑のLayerを掛けます。

これでNormal MapのGの反転した値だけ抽出しました。

ただしこれはMediBangの色反転が、UEのTextureのGreen Flippingと同じ機能である必要があります。

多分同じでしょう。

この辺は計算結果が合わなかったら検証する事にします。

今度は、以下のT_FreshWindsweptSnow_uhpjdeyn_4K_ORDpをExportして

1KのPngに変換しました。

そしてMediBangで開いて緑のLayerを掛けてRoughnessだけ抽出しました。

そしたら緑一色になってしまいました。

何で?と元のImageを確認したらRoughnessのTextureは以下の様になっていました。

これはBに追加しても良く分からないのでAmbient Occlusionに変更します。

緑の代わりに赤を掛けると

となりました。

これをGray Scaleに変換して

先程のTextureに追加しました。

これでBの値にはAmbient Occlusionの値が入っているはずです。

結果です。

なんかすごい赤いですね。

まあいいです。これだけ複雑な計算が最初から全部あっている確率はかなり低いでしょう。

でも大筋の流れはあっているはずです。

これでやる事にします。

UE5にImportしました。

開くとこんな感じです。

Texture GroupがWorldになっていてNormal Mapとしては認識されていません。

Compression SettingsもDefaultになっています。

これはDefaultではCheckされていたんですが外しました。

Flip Green Channelは別にNormal Mapじゃなくても使用出来るみたいですね。

既にFlipされているはずなのでCheckしません。

Rに入っているImageです。

これであっているのかどうか。

Gに入っているImageです。

何とも言えませんね。

BのImageです。

実際のAmbient OcclusionのImageです。

ん。

白さが全然違う。

どこかで計算をミスっていますね。

今回はその計算を徹底的に調べる余裕はないのでこのままやります。

最後にSparkling用のTextureを作成します。

MediBangにもNoiseの機能があるのかもしれませんがどこにあるのか分かりませんでした。

のでTutorialのNoiseをCopyしてここに張りつけてNoiseを作成しました。

一応、白の粒粒は1Pixelのサイズになっています。

その後Levelを調整して以下の様にしました。

Tutorialではこの後、Textureのサイズを256から512に変更しています。いますがこのNearest Neighborの意味がよく分かりません。のでこれをそのまま使用します。

<Materialの作成>

<<Sparklingの作成>>

まずは以下の部分だけ作成しました。

結果です。

なんかTutorialの結果と比較して白い部分が少ない気がするので、Powerは0.5を掛ける事にしました。

この辺は臨機応変です。

Screen Space用の実装も作成しました。

Divideノードの値は256にしました。

この部分の計算について一寸考えてみます。

Screen PositionノードのViewport UVですが、Screenが1920×1080だとすると、それぞれのPixel毎の位置を返すはずです。Viewport UVだと1920と1080がそれぞれ1に対応していると考えられます。

Screen ResolutionノードのVisible Resolutionは、Screenのサイズ、つまりこの場合だと1920×1080を返すと考えられます。

1920を256で割ると、7.5です。つまり7.5 PixelがTextureの1Pixelに対応するとこのTexture一枚でScreenを覆えるサイズになるわけです。

だから7.5をViewport UVにかけると…。

あれ、オカシイぞ。

Screen PositionノードのViewport UVは0~1に対応しているんじゃなくてScreen ResolutionノードのVisible Resolutionが0~1に対応しているのかもしれません。

それの方が辻褄があいそうです。

ここは色々検証しないと分からないですね。後でする事にします。

2つの実装を掛けます。

この結果、全くSparklingが無くなってしまったので値を少し変更しました。

結果です。

かなりキラキラしています。

今度は太陽光の当たる箇所だけキラキラするような実装を追加します。

はい。

Atmosphere Sun Light Vectorノードです。

うーん。

Anime Renderingで勉強したDirectional LightのVectorを得るためのCustom ノードの実装は何だったけ?

調べます。

これでした。

この2つの結果が同じって事でしょうか?

確認します。

Atmosphere Sun Light VectorノードにDebug Float 3 Valueノードを繋ぎました。

結果です。

次にCustomノードを繋ぎます。

結果です。

全く同じ結果ですね。

おお。

もうこれでこのMaterialの勉強、元取れましたって感じです。

こんなNodeが存在していたんですね。

以下の実装を追加しました。

ここはTutorialと全く同じです。

結果です。

光が当たっている方向だけキラキラするようになりました。

<<Normalの作成>>

正直あんまりやりたくないです。

自分の独自のやり方、しかも今即興で考えたやり方でNormal Mapを作成したので、どこかで計算が間違っていると思われるからです。

まあ、そこは諦めて実装方法の勉強という意味でやる事にします。

Normal Mapを抽出してNormal に繋ぎました。

結果です。

へんな斜線が形成されています。

うーん。

ImportしたNormal Mapを1K に縮小したTextureをImportして比較する事にします。

Importしました。

Normal Mapとして認識してもらえなくて通常のTextureとしてImportされました。

Flip Green ChannelにCheckが付いていません。

付けます。

あれ、変な色になってしまいました。

取りあえずこれでNormalに繋いでみます。

結果です。

あれ、ギザギザが出ている。

というかこんな色のNormal Map明らかにオカシイです。

これはGreen ChannelをFlipしないのが正しいのかもしれません。

FlipをOffにしました。

結果です。

ギザギザが消えました。

という事は、私の独自のNormal MapもGreen Channelの値を反転したのが問題だったのかもしれません。

という事は逆にFlip Green ChannelにCheckを入れたらギザギザが消えるかもしれません。

試してみます。

ギザギザが消えました。

うーん。

この結果から推測するとNormal MapやAmbient Occlusionを一つのTextureに統合するのは、私が考えていたほど単純じゃないみたいですね。

まあいいです。

その辺もそのうちしっかり勉強する事になるでしょうから。

今度はDetailのNormalの実装を作成します。

Blend Angle Corrected Normalsノードで混合しました。

結果です。

一応は出来ていますね。

<<Colorの指定>>

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

この辺はTutorial通りに実装しました。

Fresnelノード以外は特に勉強する内容でもないのでここはサラッとやって終わりにします。

結果です。

非常にキラキラしています。

Fresnelの影響もはっきり見えますね。影の部分の端が白く浮き出ています。

4.3 Sparkling Snow Shader - Advanced Materials - Episode 2 [4]を勉強した感想など

NormalとAmbient Occlusionを持つTextureの作成が大変でした。

これ出来てないですね。

自分の頭の中ではこのやり方で出来ると思ったんですが、どこか勘違いしていますね。

まあ仕方ないです。

Atmosphere Sun Light Vectorノードの存在を知ったのは大きいです。これでMaterial内でDirectional LightのVectorを得る事が更に容易になりました。

後、こんなに時間がかかるとは思いませんでした。Niagaraの勉強時間よりも更に大幅に予定の時間をOverしてしまいました。

予定の立て直しが必要です。

5. 戦闘システムの続きを作成する

2023-01-01のBlogを見ると以下の予定になっています。

5.1 UE4からUE5へのUpdate方法を調べる

これ単にUE5から開けばいいだけみたいです。

PC1号からPC2号にProjectだけCopyして来ました。

これをUE5.1 で開いてみます。

開けました。

更にD3D12が使えるように設定を変更しろとあったので以下の様に変更し、

Projectをまた再起動しました。

戦闘システムがあるLevelを開きましたが普通に開けました。

試しに戦闘をしてみます。

普通に戦闘出来ています。

Stage 2で負けてしまいました。

でもUE5.1でも普通に動いているのは確認出来ました。

5.2 Packagingを試す

予想に反してUE5への移植が簡単に終わりました。

予定では1月いっぱい移植にかかると見ていたのでかなり時間に余裕が出来ました。

しかし逆に予定にはないけれど今、やっておくべき事がある事も気が付きました。

それはPackagingです。

ので今月はPackagingを試します。

<一月の予定>

2022-12-12のBlogに去年、どうやってPackagingしたのかがまとめられています。この方法を今週は試してみます。

以下の予定でPackagingをする予定です。

  • 一週目:とにかくPackagingしてみる
  • 二週目:サイズを小さくするために別のProjectにMigrateしてPackagingする
  • 三週目:Levelの直しを始める(Assetの調査)
  • 四週目:Levelの直しを始める( 採用したAssetによるLevelの作成)

<Packagingをする>

2022-12-12のBlogを見るとMatt Aspland氏のHow To Build Package And Export Your Game - Unreal Engine Tutorial [5] のやり方でPackagingしています。

今回もこのTutorialのやり方に沿ってPackagingする事にします。

最初にHow To Build Package And Export Your Game - Unreal Engine Tutorial [5]のやり方を簡単に復習します。

見直しました。

大体理解しました。

使用するすべてのLevelを把握しておく必要があります。

それを確認します。

以下の2つのLevelが使用されていました。

使用しているGame ModeはMy Game Mode Baseでした。

使用しているGame InstanceはMy Game Instanceでした。

これだけ分かったらPackagingに必要な情報は全部そろったはずです。

How To Build Package And Export Your Game - Unreal Engine Tutorial [5]のやり方でPackagingをしてみます。

<<Building The Game>>

Build Light OnlyをしてBuild All Levelもしました。

Build All LevelsをしたらLevel上に配置してある魔術師が消えてしまい焦りました。

Playをしたら普通に居たし、一回Levelを閉じて開いたら消えていた魔術師が現れました。

<<Setting Up The Settings>>

Project Settingの設定を直していきます。

まずMap and Modesです。

Packagingの設定です。

Advanced Settingの設定をやります。

Cook only mapsにCheckを入れます。

そしてList of maps to include in a packaged buildに使用するLevelを指定します。

Supported Platformの設定です。

Windows だけ残しておきます。

これでProject Settingの設定は完了しました。

<<Packaging And Exporting>>

まずSaveをします。

そしてPackaging Projectを選択します。

うーん。UE5.1 にはFileにPackaging Projectがないですね。

調べます。

JSFILMZ 氏のUnreal Engine 5 Tutorial How to Package Your Game [6]にUE5のPackagingのやり方が説明されていました。

以下の箇所にあるそうです。

JSFILMZ 氏によると最初のPackagingではVisual StudioをInstallしろとか、色々要求するそうです。

取りあえずやってみます。

Packagingが始まりました。

20分ぐらいかかりました。

普通に出来ているみたいですね。

<< Playing The Game>>

実際にPackagingされたGameをPlayしてみます。

Stage 10までいってそこで負けました。

結構、楽しくPlay出来ました。

BugらしいBugはなかったです。

<<Final Overview>>

Packagingした後のサイズは以下の大きさでした。

この規模のGameだとかなり大きいのかもしれません。

来週は別のProjectにMigrateして本当に必要なData以外は全部、省いた状態でPackagingして、どれだけGameのサイズが小さくなるか試してみます。

6. Gaeaの勉強

去年、Andrea Cantelli氏のGaea for Beginners Seriesの♯6である Gaea Tutorial for Beginners #6 | Texturing our first terrain [7]まで勉強しました。

所が、このGaeaのDataをどこに保存したのか分からなくなってしまいました。

のでもう一回このTutorialをやり直す事にします。

とは言っての同じことを繰り返すのは無駄ですので、前に勉強したBlogの内容をきっちり復習してもう一回勉強する事にします。

ので、今週はGaea Tutorial for Beginners #1 | Intro to the series & Analyzing the Interface [8]を勉強します。

6.1 2022-11-06のBlogを復習する

読みました。

このTutorial、作成された時が古いので今のVersionのGaeaとはUIがだいぶ違います。その辺を、考慮して勉強しないと全く理解出来なくなると警告しています。

以下のUIの機能について解説していました。

<Mouseによる3D Viewport内のTerrainの操作方法について>

3D Viewport内のTerrainとは以下の事です。

ここで説明されているのは以下の3つでした。

  • Alt + Mouseの左ボタンを押しながらMouseを動かすとTerrainがそれに合わせて回転する。
  • MouseのWheelでZoom が出来る
  • Mouse のMiddle Buttonを押す事でPanningが出来る

ここにSpace Keyを押すとTerrainがDefaultの位置に戻る事も付け加えたいです。

<Menu Barの解説>

Menu Barとは以下の部分の事でした。

ここは0.5KとPlus buttonだけが特殊で後の機能はどのSoftでも共通です。

  • 5 K―>3D ViewportのResolutionを設定する
  • Auto ―>説明なし
  • Plus Button―>同じProjectに番号を追加して別なProjectとして保存する。

Autoに関しては説明がなかったです。

<Toolbox>

以下の部分の事です。

これらが以下の箇所で使用するNodeである事だけ教えたそうです。

この箇所はNode Graphと言います。

<Graph Toolbar>

ここからNode GraphのUIについての解説になります。

それは分かるんですが、何故かGraph Toolbarから説明を始めています。

Graph ToolbarはDefaultでは表示されていません。Node GraphのMenu Barにある三本線をClickして以下のBoxを開きます。

そしてShow Graph ToolbarをCheckします。

すると以下に示したようなToolbarが表示されます。

そしたら

となっていました。

あれ?

今度はMouseのMiddle ButtonでNode Graph内をPanning出来る事について解説しています。

更に左Clickをしたまま、Dragをする事でBoxを表示し、そのBoxで複数のNodeを一遍に選択する事が出来る事を解説しています。

あ、これはTutorialのGaeaのVersionが違うからこういう説明になっているんです。

後で、Node Graph内のUIについては自分でまとめ直します。

今度は、Node Graphの右下にある以下に示した3つのButtonについて解説しています。

Propertiesについてです。

単に選択したNodeによってそのNode特有のPropertiesが表示される事だけ説明していたみたいです。

<Setting>

3D Viewportの右端にある以下のToolについて説明しています。

この辺の機能は押したら分かります。

<Buildについて>

機能については何の解説も無かったです。

大体こんな感じでした。

はい。

これを復習して、今、私が何をすべきかの方向性が見えてきました。

GaeaのUIについて簡単な解説を作成する事です。

6.2 GaeaのUIについての簡単な解説

GaeaのUIについて簡単な解説をします。

ここでの解説はVersion 1.3.2 Communityを元にします。

Gaeaはまだまだ進化途中のSoftで、Versionが変わる事でUIも劇的に変化する可能性があります。

ここの解説はあくまでもこのVersionの説明である事を理解して下さい。

まずGaeaを開くと以下のような画面が表示されます。

以下の画面はTemplateを使用する時に使用します。

今回は使用しませんので、右上の×ボタンを押して、閉じてください。

<4つのSub画面について>

すると、大体以下のような画面が表示されると思います。

今週はこの画面のUIについて簡単な説明をします。

まずこの画面ですが、4つのSub画面で構成されています。

まず①で示したSub画面は、3D Viewportと言います。

ここは、Terrainの形状を表示します。

次に②で示したSub画面ですが、ここはTool Boxと言います。

ここは、Gaeaで使用出来るすべてのNodeが表示されています。

その隣にある③で示したSub画面ですが、ここはNode Graphと呼ばれています。

ここでTool Box内に表示されているNodeを組み立ててTerrainを作成します。

最後に右端のSub画面ですが、PropertiesとBuildと表示されています。

PropertiesはNodeを選択した時にそのNodeの持つ特徴を表示します。

BuildはTerrainが完成した後で、UEにそのTerrainのDataをExportするためにHeight MapやMaskを作成するのに使用します。

<Menu Barについて>

まず画面の上部にあるMenu Barの機能について簡単に解説します。

左端から説明します。

Gaeaを左Clickすると以下のBoxが表示されます。

このBoxの中の機能はあらゆるSoftが大体において同じで、Gaeaも同様です。

次の以下の表示ですが、このProjectの名前です。

まだ名前を指定していないのでUntitledになっています。

試しにProject名をUI_Testとしたら、以下の様にUI_Testに変わりました。

次の0.5kですが、3D Viewportに表示されるTerrainのResolutionを指定しています。

以下に示した様に4kまで選択出来ますが、

2k以上を選択すると通常のPCでは処理できなくて止まるそうです。

次のAutoですが、3D ViewportのTerrainのMeshの質を指定します。

これも色々選択肢がありますが、

Autoのままで良いです。

その後にある以下のMenuは、他のSoftと全く同じです。

Newで新しいProjectを作成し、SaveでそのProjectをSaveします。SaveしたProjectはOpenから開く事が出来ます。

他のSoftと全く同じです。

この中で唯一、Gaeaに独特なのが以下の+ボタンで、

これを押すとProject名+番号でSaveします。

以下に示した様にProject名がUI_TestだったのでUI_Test001とSaveされました。

ここでもう一回+ボタンを押すと、今度はUI_Test002とSaveされます。

これは途中まで作成したProjectをSaveしておきたい時に使用するそうです。

最後の2つはRedoとUndoです。

この記号が意味するところは、どのSoftでも同じです。

<3D ViewportのUIについて>

今度は先程、説明した4つのsub画面の内の一つである3D Viewportについて解説します。

まず真ん中の灰色ですが、これが3DのTerrainを表すMeshです。

Nodeを組むと以下の様にTerrainを示します。

この画面の操作方法を説明します。

  • Alt + Mouseの左ボタンを押しながらMouseを動かすとTerrainがそれに合わせて回転する。
  • MouseのWheelでZoom が出来る
  • Mouse のMiddle Buttonを押す事でPanningが出来る
  • Space keyでDefaultの位置に戻る

以上です。

次にこの3D Viewportの右端にあるUIについて解説します。

最初の2つですが、Orbit ViewとFirst Personという名前です。

これはCameraの動き方を示しています。

Orbit Viewを選択した場合は、Cameraは先程のTerrainの周りを移動します。

First Personを選択した場合は、GameのFirst Personと同じで、WSAD Keyでカメラを前後左右に動かす事が出来ます。

DefaultではOrbit Viewが選択されています。

次の2Dですが、押すと

以下に示した様に、Terrainの2D画面が表示されます。

この2Dボタンを選択している時だけ以下に示したAのようなButtonが表示されますが、

これを押すと、このTerrainの生のDataを示します。

次は以下の太陽みたいなButtonです。

この太陽みたいなButtonはViewport Optionという名前で、Directional Light、つまり太陽光の向きを管理しています。

押すと以下のようなBoxが開きます。

以下のImageの白い部分をMouseでグリグリ動かすと

Terrainの太陽光の向きが変わります。

他のButtonはもう一回ClickするとBoxは閉じます。

しかしこの太陽みたいなButtonはそのやり方では閉じてくれません。

このBoxを閉じるには3D ViewportのどこかをClickする必要があります。

次は以下に示した雲のButtonです。

これを押すと3D viewportに空が現れます。

そんだけです。

次は以下に示した3つのButtonについてです。

最初のButtonについてです。

これを押すと以下に示したようなGridが表示されます。

残りの2つはDefaultで選択された状態です。

以下のButtonは

3D Viewport右上にある以下のMarkを出したり消したりします。

以下のButtonは

以下に示した薄っすらしたGridを表示させたり、消したりします。

これで3D ViewportにあるUIの説明はお終いです。

<Tool BoxのUIについて>

4つに分けたSub画面の内の②の部分です。

ここは、Terrainを作成するために使用するすべてのNodeが表示されています。

それだけ知っていれば十分です。

以下のUIについて知る必要は当分ないです。

<Node GraphのUIについて>

4つに分けたSub画面の内の③の部分です。

ここで先程のTool Boxから持ってきたNodeを組んでTerrainを作成します。

ここでProgrammingを書くわけです。

まず以下に示した右上のUIから説明します。

まず+のButtonですが、これを押すと

以下のBoxが現れて

新しいNode Graphを作成します。

こんな風にです。

何で、複数のNode Graphが必要なのかというと、

  1. Terrainを作成するNode Graph
  2. Textureを作成するNode Graph
  3. 作成したTextureにColorを追加するNode Graph

のようにそれぞれのNode Graphで機能を分割して表す事が出来るからです。

このおかげで、後からNodeを見た時に、どこに何が書かれているのか非常に分かりやすくなります。

残りのButtonに関しては、今はまだ知らなくて大丈夫です。

というか私もこれらのButtonがどんな機能なのか知らないか、知っていても一回も使用した事ないかのどっちかです。

初心者が今、絶対知る必要がある機能はここにはないです。

次は右下にある以下の3つButtonについてです。

まず以下のButtonですが、これを押すと

NodeをNode Graphの中心に移動します。

残り2つのButtonはこの後、説明するPropertyを理解しないと、その機能を説明する事が著しく難しくなるので、今回は説明しません。

Node GraphのUIの説明は以上です。

<PropertiesとBuild>

あ、ここに来て去年からずっとPropertiesとParameterを混合して使用していた事に気が付きました。

ClassにあるVariableがPropertyやAttributeで、ParameterはFunctionの()内で表される関数内にInputされるVariableの事でした。

うーん。ずっと間違って使用していました。

4つのSub画面の内、最後の④であらわされる箇所についての解説です。

まずPropertiesから説明します。

Node Graphに配置したNodeを一つ選択します。

例えば以下に示したMountainノードを選択します。

すると以下に示したような色々なParameterが表示されます。

これがMountain ノードのPropertiesです。

ここに表示されているそれぞれのPropertyの機能については、実際にNodeでTerrainを作成する時に勉強する事になるので、ここでは説明しません。

次にBuildです。

ここは作成したTerrainをUEにExportするためにHeight MapとMaskを作成する時に使用します。

その時にこの部分のUIの使用方法を勉強します。

以上です。

6.3 GaeaのUIの簡単な説明を作成してみて

Gaeaの勉強を始めたのが去年の4月からなので、私自身、まだ勉強中です。ので、説明が間違っていたり、不足している箇所もあるかもしれません。

しかしそれでもこの説明を聞いたら、Gaeaを初めて触る人でも、GaeaのUIの使用方法が一通り理解出来るはずです。

現状、GaeaのTutorialでUIの機能を説明しているものは、すべてVersionが古いものです。Gaeaを初めて触る人が、古いVersionの説明を見ると、UIの機能は全く理解出来ないです。

それに対して、私のこの説明は、そんな本当の初心者でも簡単に、GaeaのUIを理解する事が出来るはずです。

そういう訳でかなり良いTutorialが作成出来たと思っています。

7. Houdiniの勉強

今年からHoudiniの勉強をする事にしました。

去年、Landscape上に建物を作成しましたが、たった一個の建物を作成するだけでかなり大変でした。Houdiniを使用したらこの建物の作成が簡単になる気がします。それで勉強する事にしました。

7.1 HoudiniのInstallについて

年末にHoudiniをInstallしたのですが、かなり大変でした。

その時は忙しくて、その記録をしておかなかったんですが、今、思い出してその時のやり方をここに残しておきます。

これからHoudiniをInstallする人の参考になるように、なるだけ正確に思い出すように努めます。

まず、SideFX社のHomepageに行って以下のSiteに行きます。

ここでHoudiniをDownloadしようとしたら、DownloadするためにはLoginしろと言っています。

LoginするためにはRegisterする必要があります。

Registerしました。

そしてLoginしようとしたら出来ません。

うーん。

何で?

色々試したんですが分かりません。

30分ぐらい格闘していたら、ひょっとしてRegisterが出来ていないからじゃないの?と気が付きました。

Usernameが既に誰かが登録していたらしく、Registerが出来てなかったです。

これ、言ってくれないと分からないです。

別なUsernameでRegisterしたら出来ました。

正しくRegister出来た場合のみ、指定したE-mail AddressにMailが届きます。

今度はLogin出来ました。

これで一件落着になると思ったら、ここからも大変でした。

まず、DownloadしたいHoudiniの画面が出てこないで、以下に示したHoudini Launcherを代わりにDownloadしろと出てきます。

これいつからそうなったのか知りませんが、私が調べた限りですが、HoudiniのInstall方法を説明したサイトや動画で、このLauncherをInstallしろと言っている所はなかったです。

まあ、新しくそうなったんだろう。とLauncherをInstallしました。

当然ですが、容量に限界のあるC DriveではなくD DriveにInstallしました。

ここでも何かの問題に遭遇しました。

ただそれが何だったのか今はもう忘れてしまいました。

LauncherのInstallに成功して、そのLauncherを開くと以下のような画面が表示されました。

ここにHoudiniがありません。(上のImageにはHoudiniがありますが、それは今Screenshotを取ったからです。)

Launcherの右上にInstallとあるのでそこからHoudiniをInstallしました。

Installは何の問題もなく出来ました。Installすると上のImageにあるようにHoudiniが表示されるようになりました。

Houdiniを使用するためにHoudiniのLaunchをClickしました。

これでやっとHoudiniを使用出来ると思ったら、お前はこのHoudiniを使用するLicenseがないと表示され、それからまたひと悶着です。

具体的に何をしたのか覚えてないですが、出てきたBoxの質問に対してYesとかNoとか選択してたら、Apprentice(FreeのLicense)が発行され、それに対応したHoudiniがInstallされました。

それのLaunchをClickしたら今度はHoudiniが起動しました。

やっとHoudiniのInstallに成功しました。

こんな感じでした。

7.2 勉強するTutorialを決める

Houdiniを見てまず驚いたのが、そのTutorialの多さです。

以下に公式のSiteのTutorialのPageを示しますが、凄い量です。

この中で最も私に合ったTutorialを選ぶ必要があります。

まず、有料は外します。

金払ってまで勉強する気は毛頭ないですので。

次に、初心者向けを選択します。

選択しますが、このBeginnerの意味には、出来の悪いTutorialという意味も多分に含まれています。

これだけTutorialがある中で、敢えて出来の悪いTutorialで勉強する必要は全く無いので、この中から質が良いものだけを選別します。

基準は以下の様にしました。

  • 何を理解したらHoudiniを使いこなせるようになるのかを、Tutorialの製作者が理解し、それを理解するための基礎を教えている。
  • Houdiniにおける制作を、Designの一環として捉えているのではなく、Programmingの一環として捉えている。
  • 説明が簡潔で、声が聞き取りやすく、言いたい事がはっきりしている。

この基準で選んだTutorialが以下にしめしたHoudini Kitchenです。

https://www.youtube.com/@houdinikitchen/videos

ただしこのTutorial、作成されたのが3年前なので、今のVersionでそのままやるのは無理かもしれません。

まあやってみてから考えます。

7.3 Tutorial 1. Networks and Nodes [9]を勉強する

まず全部を軽く見て内容を把握します。

Download FileがDownload出来ませんね。

これはこのTutorialで勉強するのは難しいかもしれません。

仕方ないです。

以下の公式のTutorialで勉強しますか。

7.4 公式のTutorialであるFOUNDATIONS | OVERVIEW [10]を勉強する

PDFは入らないので次のIntroductionから勉強します。

<Introduction>

ここで何を勉強するのかについて簡単な説明があっただけです。

正直、聞いてないうちに終わってしまいました。

まあ、大丈夫でしょう。次に行きます。

<The Houdini Workspace>

いきなりHoudiniのUIの使い方を解説しています。

Cを押すと以下のUIが表示されるそうです。

試してみます。

されました。

まずHoudiniの画面を見るのがほとんど初めてなので、一寸観察を先にします。

以下のような画面です。

Sub画面は4つありますね。

上記に書かれた①はViewportです。ここに作成した3DのObjectを表示するんでしょうね。

次の②が何をする箇所か不明ですね。

その次の③はここでNodeを組むんでしょうね。

最後の④はTimelineのようです。Animationの設定をここで行うと思われます。

Menu BarとTool Barです。

一見すると複雑そうですが、Tool Barに全部の機能を表示しているからこんなに複雑に見えるだけにも思えます。一個一個見ると複雑さはUEと変わらない感じです。

Menu Barから見ていきます。

ぱっと見てよく分からないのは、RenderとAssetsですね。

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

Create Render Nodeの項にMantraとかRenderManとかあります。

これらはRenderする時の方法なのでしょうね。

Assetsの方は以下の様になっていました。

まあ、普通に考えたらAssetってStatic MeshなどのObjectを指しているはずです。

それをここの機能でどう扱うのか?

まあ、勉強していく内にだんだん分かっていくでしょう。

次はTool Barです。

CreateはもうStatic MeshをCreateするためのTool Barでしょう。

Contractは何をするのか全く想像つかないですね。

Cloud FXとかVolumeとかありますが、これはVolume Renderingの事でしょうか?興味を惹かれます。

次のTool Barですが、

作成したAssetに追加する機能を示しているみたいです。

Vellumとか意味不明ですね。

Viscous FluidsってHoudiniでは流体の解析をする時に粘性も計算しているんでしょうか?

UE5のNiagaraのFluid Simulationでは粘性を調整するParameterが無かったのでこれは興味ありますね。

次に4つのSub画面を見ます。

最初のSub画面です。

まずTabが凄いです。

6種類もあります。

Defaultで開いているのはScene Viewです。

Composite ViewとGeometry Spreadsheetは何をするためのものか全く想像出来ないですね。

Scene ViewのTool Barですが以下の様になっています。

更に左端には以下のUIがあり、

右端には以下のUIがあります。

Cursorを重ねるとそのButtonの機能の簡単な説明が表示されます。

うーん。数が膨大すぎます。

ここは時間があるとき見る事にします。

2番目のSub画面です。

Parameterって書いてある。先程、Gaeaの勉強でParameterとPropertyをごっちゃにしていたと書きましたが、してないみたいです。

この辺の名称はそれぞれのSoftによってPropertyになったりParameterになったり、Attributeになったりするんでしょうね。

ここでもchというのが出てきますが、これは何を表しているんでしょうか?

全く推測出来ません。

三番目のSub画面です。

ここでもchがありますね。

ここにNodeでCodeを実装するはずです。

こんな小さなSub画面でProgrammingが書けるんでしょうか?

Menu BarとTool Barが同じ段に配置されています。

なんかもう少し機能的な整理の方法はなかったのかと思いました。

最後のSub画面です。

これはAnimation作成のためのToolですね。

それだけ分かっていれば今は十分でしょう。

当分というかずっとかもしれませんが、HoudiniのAnimationを勉強する気はあんまりないのでここは無視し先に進みます。

Tutorialに戻ります。

なんといきなり以下に示したTorusを追加しました。

速すぎて何をしているのか全く分かりません。

コマ送りで確認して以下の事をしているのが判明しました。

まずSub画面①にCursorを置いている状態でCを押し、以下のUIを表示させます。

Createを選択します。

すると以下のUIが表示されます。

今度はGeometryを選択します。

すると以下のUIが表示されます。

ここでTorusを選択します。

するとOrangeのBoxが表示され、適当にClickしたらTorusが配置されました。

ふーん。

成程ね。

二番目のSub画面は以下の様に変化しました。

Parametersと表示された居た箇所はTorus_object1に変化しています。

更にTransformとかRenderとかのTabが表示されTransformには、配置したTorusの位置に関するParameterが表示されています。

ここは選択したNodeのParameterを表示していますね。

後、これってTorus ClassのVariableですよね。うーん。とてもObject Orientedな感じでProcedural なProgrammingではないですね。

三番目のSub画面です。

ああ。やっとNodeが見れました。

/chが/objに変わっていますね。

一寸Nodeを見てみますか。

Cursorを合わせるとなんか表示されます。

白いiを選択したら以下のBoxが表示されました。

これはこのNodeについての解説ですね。

緑の矢印を選択しました。

何も起きません。

青の点を選択しました。

Viewportに写っていたTorusの表示が消えました。

Torusそのものは消えましたが、Transformのための矢印は残っていますね。Modelが見えなくなっているだけみたいです。

それぞれのSub画面の正式な名称が分かりました。

Scene View、Parameter Pane、そしてNetwork Paneです。

Paneか、これは忘れそうな名前ですね。

Paneって、元々窓にはまっているガラスの事を指していたのになんでSub画面の事を指すようになったんでしょうね。

後、PaneとPainって発音全く同じですね。

うーん。

これだけじゃあんまり印象に残らないですね。

今度は、Vを押して以下の様にWireを表示しています。

Vを押しました。

Shadingを選択します。

以下のUIが表示されます。

Smooth Wire Shadedを選択します。

Wire Frameが表示されました。

TutorialとはWire Frameの色が違いますね。何故でしょう?

今度は以下に示したようにScene Viewを4つに分割しました。

出来ました。

V押してLayoutを選択して4つに分割しているImageを選択したら出来ました。

楽勝です。

これ出来ました。単に画面を区切っているBarを移動させただけです。

うーん。

Houdiniって簡単じゃねえ。

何でHoudiniを覚えるのは難しいってなっているの?

後、Zoomの仕方が知りたいですね。

と思ったらTutorialですぐにそのやり方を説明してました。

Space Bar+右Clickを押したままMouseを移動させてZoom inとOutが出来るそうです。

試します。

こんなにZoom out出来ました。

Defaultの位置に戻す方法も知りたいです。

今度はNetwork Paneで以下のUIを表示しています。

これの出し方、説明していません。

何このTutorial?

クッソこっちが素人だと思ってなめ切っているな。とキレそうになって、もう一回だけ確認のために見直したら「Nを押してこのUIを表示します。」って言っていました。

Go in Nと言っていたんですが、聞き逃していました。

Nを押したら以下の様に同じUIが表示されました。

Downを選択します。

Nodeの表示が以下の様に変化しました。

TutorialによるとこれでGeometry Levelに移動したらしいですが、どこで確認出来るんでしょうか?

左端の三角を押してTree Viewを開きました。

Torus Object1の下にTorus1 がありました。

確かにObjectの下の階層ですね。

Property Paneの表示も変わっていました。

Torus1になってParameterも全然違うのが表示されています。

ああ。分かりました。

先程、表示されていたTorusはObjectですので、その位置や大きさなどがParameterに保存されているんです。今度のはGeometryなので、Torusを形成するための半径とかの値が保存されています。

という事はすべてのObjectはGeometryを内在しているって事になりますね。

はい。

理解しました。

Scene ViewのTool Barの一部を以下に示します。

これ先程示したParameter PaneのParameterと同じです。

はい。

これはObjのLevelに居る時でもここに表示されているそうです。

今度はTab Keyを押して以下に示したTAB Menuを開きます。

そしてLineとTypeしてLineを選びます。

Line_Objectノードが追加されました。

TutorialがやっているようにLengthを5,Pointsを6に変更します。

Scene Viewの右端に並んでいるUIの中からDisplay Pointsを押すと

以下に示した様にPointが表示され、LineのPointが6になっているのが確認できます。

思ったより内容が濃いですね。

まだ8分の内2.46分しか終わっていませんが、一寸疲れました。今週のHoudiniの勉強はここまでにします。残りは来週やります。

8. Volumetric Cloudの勉強内容をまとめる

去年、Volumetric Cloudについてかなり勉強しました。

Volumetric CloudはUE5の空の形成になくてはならないものですが、その使用方法や作成方法についてきちんと解説しているものは少ないです。

特に日本語で解説しているものはほとんどないです。

ので私がまとめる事にしました。

8.1 Volumetric Cloudについてまとめる内容について

以下の構成でまとめようと思います。

  1. Parameterの機能と使用方法
  2. Volumetric Cloud用のMaterial InstanceのParameterの使用方法
  3. Volumetric Cloud用のMaterialについて
  4. Volumetric Cloud用のMaterialの作成方法について
  5. Plugin Volumetric について
  6. Volumetric の使用方法について1(雲の移動)
  7. Volumetric の使用方法について 2(Paintを用いた雲の作成)

それぞれについて以下に簡単に解説します。

<Parameterの機能と使用方法>

これはVolumetric Cloudを選択した時に

Detailに表示される以下のParameterの中から雲の形成に関して重要なものを解説します。

何せDefaultのVolumetric Cloudは以下に示したような形状をしています。

右側の雲だけ存在しているなら、まあそれなりに雲っぽく見えますが、左側にある雲なんて、どう考えてもおかしな形をしています。

しかもこれがPlayerのいる箇所を中心に、天が割れたってLevelで2つに分かれています。

これをDetailにあるParameterのみを使用して、それなりに自然に存在する雲の形状に変更します。

<Volumetric Cloud用のMaterial InstanceのParameterの使用方法>

Volumetric Cloudで変更可能なParameterはDetail内のParameterだけではないです。

Volumetric CloudのMaterialにSetされているMaterial InstanceのParameterも変更出来ます。

Defaultでセットされているm_SimpleVolumetricCloud_instを開くと以下のParameterが表示されます。

このParameterの操作方法を説明します。

<Volumetric Cloud用のMaterialについて>

m_SimpleVolumetricCloud_instの元になっているMaterialであるm_SimpleVolumetricCloudの実装について解説します。

ここはProgrammer向けというかProgrammerでもShader言語が分かる人向けになります。

<Volumetric Cloud用のMaterialの作成方法について>

簡単なVolumetric Cloud用のMaterialの作成方法について解説します。

<Plugin Volumetrics について>

以下に示したVolumetricsの使用方法について解説します。

<Volumetric の使用方法について1(雲の移動)>

Volumetricsを使用した雲の移動方法について解説します。

<Volumetric の使用方法について 2(Paintを用いた雲の作成)>

Volumetricsを使用した雲をPaintして生成する方法について解説します。

8.2 去年のBlogに書かれたVolumetric Cloudに関する勉強内容をまとめる

<2022-06-26のblog>

このBlogで本格的なVolumetric Cloudの勉強を始めています。

Unreal Engine 5 Beginner Tutorial | Sky And Clouds [11]で勉強しています。

このTutorialでは以下の方法でVolumetric Cloudの形状を直しています。

1. Volumetric Cloudに使用しているMaterialをPluginのVolumetricsにあるM Volumetric Cloud 02 Profiles Paint..,に変更する。

2. Volumetric CloudのParameterであるLayer Bottom Attitude とLayer Heightの値を調整

3. Directional LightのParameterであるLight Shaftの値を調整

を行っています。

まずUE5.1ではM_VolumetricCloud_02_Profiles_PaintCloudsがたくさんあります。

しかしこれらをそのままVolumetric CloudのMaterialに使用すると、以下に示した M_VolumetricCloud_02_Profiles_PaintCloudsと

MI_VolumetricCloud_02_Profiles_PaintClouds_Morning

以外のMaterialは雲の欠片も表示しません。(以下に他のMaterialを使用して雲が表示されない場合の空を示した。)

のでUE5.1ではVolumetric CloudにあるParameterの使用方法を理解するために、PluginのVolumetricsにあるMaterialを敢えて使用すると学習者を無駄に混乱させる要因になると思われます。

ここはDefaultで備わっているMaterialを使用してVolumetric CloudのParameterの使用方法を勉強すべきです。

このTutorialで使用しているParameterはUE5.1のVolumetric Cloudでも同じものがありました。

この二つは雲の高さを調整するのに大切なParameterで学習者は絶対知っておく必要があります。

更にDirectional LightのParameterであるLight Shaft OcclusionとLight Shaft Bloomを使用しています。これらのParameterのUE5.1に同じものがあります。

正直、Light Shaftについてはどんな機能なのか覚えていません。

Blogを読み直したらGod Rayの一種を表示するための機能みたいです。

2022-07-12のblog

この週はもうVolumetric CloudのMaterialの勉強を始めています。

なんか私はParameterの勉強はProgrammerの勉強ではない気がして、Parameterの勉強あんまり好きじゃないんです。

UE4: Analysis of Volumetric Clouds and How to Use Them [12]を勉強しています。

以下に勉強した内容をまとめます。

まずVolumetric CloudとSky Doom Meshを使用した雲の違いについて

  • Volumetric Cloudで作成した雲はPlayerが雲の中に入り込む事が出来る
  • Directional Lightの影響を受け雲の色が変化する

が説明されていました。

次にLevel上にVolumetric Cloudを追加する方法として3つある事が述べられていました。

  • Place ActorからVisual Effectsを選んでVolumetric Cloudを追加
  • Blueprint内に一つだけ雲を生成してそのBlueprintを配置(位置が自由に指定出来る)
  • 手動で雲をPaintする方法

3つのやり方が紹介されていますが、ここで実際に実装しているのは最初のやり方だけです。

残りの2つのやり方が分かるまでにはその他の沢山のTutorialを当たる必要がありました。

ここからparameterの解説が始まります。

Directional LightのParameterでVolumetric Cloudに関係している箇所です。

ここではAtmosphere and Cloudの欄が全部雲に関係していると紹介されていました。

以下のParameterはDetailから指定する事が出来なくなっていますが、

Cast Cloud ShadowsにCheckを入れる事で指定出来るようになると書かれていました。

まあ、確かにこれも大切な情報ですが、まずは雲の形状を直す必要があります。

その後に必要になるかもしれない情報ですね。

Skylightにも以下に示したような雲に関連したParameterがあります。

ここでもPluginにあるVolumetricsにたくさんのVolumetric Cloud用のMaterialが用意してあると書かれていました。

ここに紹介されているMaterialは前に書いた通りUE5.1の場合は2つの例外を除いて使用出来ません。

これでこのTutorialの勉強は終わりでした。

次にUE4: Step-by-Step to Creating Your First Volumetric Cloud Material [13]を勉強しています。

ここでは最低限の基礎だけで構成されたVolumetric Cloud用のMaterialを作成しています。

このTutorialはかなりの神回なので、Volumetric Cloud用のMaterialを作成する時のTutorialでは、ほとんどそのまま紹介したい内容です。

2022-07-18のblog

Ben Cloward先生のVolumetric Clouds - Building Worlds In Unreal - Episode 32 [14]を勉強しています。

このTutorial自体は重要なんですが、話がCostと精度の関係についてなんです。

今回私が作成したいと思っているVolumetric Cloudの話とはあんまり被らないんです。

一応。このTutorialで紹介されているParameterだけはここに記録しておきます。

<<Volumetric Cloud>>

  • Layer Bottom Altitude
  • Layer Height
  • Use per Sample Atmospheric Light Transmittance

<<Volumetric Cloudに使用されているMaterial内で使用されているVolumetric Advanced Outputノード>>

  • Multi Scattering Approximation Octave Count
  • Ray March Volume Shadow

<<Directional Light>>

  • Cast Shadows on Clouds
  • Cast Shadows on Atmosphere
  • Cast Cloud Shadows

<<Skylight>>

  • Cloud Ambient Occlusion

以上でした。

この中で雲の形状を変化させる機能の解説はあんまり無かったですね。

2022-07-25のblog

Ben Cloward 先生のVolumetric Cloud Materials - Building Worlds In Unreal - Episode 33 [15]を勉強しています。

ここでは、Volumetric CloudのMaterialにDefaultで使用されているm Simple Volumetric Cloudの実装について解説されています。

2022-08-01のblog

Ben Cloward 先生のVolumetric Cloud Materials - Building Worlds In Unreal - Episode 33 [15]の続きを勉強しています。

2022-08-08のblog

Volumetric Cloud用のMaterialにおける最低限の実装について検証しています。

以下のVolumetric Cloudを最低限の実装で作成しました。

2022-08-14のblog

Volumetric Cloud用のMaterialにおける最低限の実装について検証の続きで、UE4: Step-by-Step to Creating Your First Volumetric Cloud Material [13]をもう一回勉強しています。

それなりの検証結果が記録されていますが、述べている内容が細かすぎるのでここにまとめる事は止めておきます。

2022-08-22のblog

この週もUE4: Step-by-Step to Creating Your First Volumetric Cloud Material [13]の勉強の続きをしています。

Volumetric Advanced Outputノードの機能を理解するのにSuccessive Octaveを理解する必要があると書いてありました。ところがこのSuccessive Octaveの意味が分からない。と書かれていてかなり苦しんでいるのが文体から感じられます。

このNoiseにおけるOctaveの意味はBen Cloward先生のTutorialで氷解したんですが、そのTutorialを勉強するまでは本当にわけわからない状態が続いていました。

2022-08-29のblog

UE4: Step-by-Step to Creating Your First Volumetric Cloud Material [13]の勉強の続きをしています。

ここでやっとUE4: Step-by-Step to Creating Your First Volumetric Cloud Material [13]の勉強が終わりました。

2022-09-05のblog

Ben Cloward 先生のVolumetric Cloud Materials - Building Worlds In Unreal - Episode 33 [15]の勉強をやり直しています。

2022-09-12のblog

無料でもらったAssetであるDynamic Volumetric Skyについて簡単な解説をしています。

その後で、Ben Cloward 先生のVolumetric Cloud Materials - Building Worlds In Unreal - Episode 33 [15]の勉強の続きをしています。

この週で上空から見た雲の形が

以下のTextureの

形状だった事、そして以下のTextureが

雲の上下の形状を指定していて、例えば以下のTextureを代わりに使用したら

こういう雲の形が作成出来る事を理解します。

ここでやっとm Simple Volumetric Cloudの実装が理解出来ました。

2022-09-19のblog

前に勉強した内容を復習しています。

2022-10-10のblog

PluginのVolumetricsで使用されているVolumetric Cloud用のMaterialを調査しています。

これはUE4のVolumetricsにあるMaterialですね。

ここにあるMaterialを使用してもそれなりに雲が生成されています。

2022-10-16のblog

UE5.1のPluginのVolumetricsで使用されているVolumetric Cloud用のMaterialの内の一つであるM_VolumetricCloud_02_Profiles_PaintClouds_Morningの実装を詳しく読んでいます。

その結果、計算結果が全部0になってしまう。と驚いています。

雲一つない空が形成されているので返し値が0になるのは正しいんですが、この時はそれが何故なのか全くわかっていなかったです。

2022-10-23のblog

M_VolumetricCloud_02_Profiles_PaintClouds_Morningの実装の続きを読んでいます。

計算結果が0になるのは以下のTextureが0だからだという事に気が付いたみたいです。

2022-10-31のblog

M_VolumetricCloud_02_Profiles_PaintClouds_Morningの実装の続きを読んでいます。

2022-11-06のblog

M_VolumetricCloud_02_Profiles_PaintClouds_Morningの実装の続きを読んでいます。

先程の黒いTextureの代わりに以下のTextureを代用すると

雲が表示される事に気が付きました。

2022-11-14のblog

ここで初めて、最初にUE4: Analysis of Volumetric Clouds and How to Use Them [12]で一寸だけ聞いた、望んだ位置にVolumetric Cloudを配置する方法について調べています。

Volumetric Cloud Secrets [Unreal Engine 4 & 5] Works in UE5! [16] にそのやり方が解説されていると聞いてそれを勉強しています。

以下のような雲を作成していました。

正直言ってこれのやり方、全く覚えていません。Tutorialを書く段階になったらもう一回勉強し直します。

この週では更にPaintによるVolumetric Cloudの作成方法についても勉強していました。

Unreal Engine Volumetric Paint Clouds Tutorial [17] でPaintによるVolumetric Cloudの作成方法を勉強しています。

ここで初めてZero Conditional氏のTutorialを知ったんでした。

このTutorialで勉強して一応Paintは出来るようになったんですが、

UIが文字化けしています。

今、SampleにあるPaint用のMapを開いて確認したらUIは普通に表示されています。

はあ。何故これをこの時確認しなかったんでしょう。

つまり、Unreal Engine Volumetric Paint Clouds Tutorial [17] のやり方は古すぎて今のVersionである5.1には対応してないって事です。

ちなみにこのSample MapはPaint_Cloudsという名前で以下の場所にあります。

<2022-11-20のblog>

ここはPaintした雲がSave出来ているのかどうかを調べています。

まあ、正解にたどり着くためには一歩ずつ進むしかないです。

<2022-11-28のblog>

ここでPaintで描いた雲はSaveされていない事に気が付きます。

まあそういう訳で、まだPaintの使用方法に関してはこれから勉強する事がかなりあります。

<2022-12-04のblog>

ここでZero Conditional氏のTutorialが全てのVolumetric CloudのTutorialの元になっているらしい。という噂を聞いて、Beginners Intro to Volumetric Clouds in Unreal Engine 4.26 [18]を勉強しています。

Volumetric CloudのParameterについての説明がまとめられていました。

<2022-12-12のblog>

今までの勉強から得た知識からのVolumetric Cloudに関する私の見解がまとめられていました。

後、Beginners Intro to Volumetric Clouds in Unreal Engine 4.26 [18]の勉強の続きを行っています。

8.3 去年勉強したTutorialと今年まとめる内容を一致させる

全部、見直した結果、あんまり被っている部分がない事に気が付きました。

後、BPを使って好きな場所にVolumetric Cloudを配置する方法と、Paintを使用して好きな形状の雲を作成する方法はもう少し勉強が必要です。

Volumetric CloudのParameterもこうやって見直すと雲の形状を変える機能についてはほとんど勉強してない事が分かりました。

一寸どうまとめるか考え直す必要がある気がしてきました。

例えばUE5.1 のSample Mapを使用するとPaintのUIが使用出来ます。

すると、

  1. Paintで望みの雲を作成。
  2. それをSaveする。
  3. SaveしたTextureをMaterial内の黒のTextureと交換する。
  4. そのMaterialを使用してVolumetric Cloudを作成。
  5. Paintで作成した雲をVolumetric Cloudとして自由に使用出来る

みたいな事が可能になります。

これがUE5が目指しているVolumetric Cloudの真の使用方法なのではないのか。という気がしてきました。

これを検討してみる必要があります。

来週からこれをやります。

9. DirectX 12の勉強

2022-12-12のBlogを見るとOlympusMonsTutorials氏のC++ DirectX 12 Game Engine - [S01E02] - Refining Our Window [19]を一寸だけ勉強した所で終わっています。続きをやります。

ただし3週間もDirectX 12の勉強を休んでいて、今まで何をやったのかをわすれてしまっています。

ので、最初に今までの勉強内容の復習から始めます。

9.1 今までの勉強内容の復習

2022-10-16

まずBlogを読み直して思ったのが分かりにくい。

前文を書く時間を潰してDirectX 12の勉強を始めたので、前文に勉強した内容がまとめられています。その後でUEの予定していた勉強が終わった後にもDirectX 12の勉強をしているのでBlogの最後にもまとめられています。前文の内容とBlogの最後の内容の両方をここにまとめます。

<<前文>>

ここでは、どのTutorialで勉強するかを検討しています。著作権的にグレーになる可能性のある日本の教科書は採用したくない事が書いてあります。

<<本文>>

Visual Studioを新しいPCにInstallするところから始まっています。

無駄なSoftはなるだけInstallしたくないので.netをInstallする必要があるのかどうかを特に検討しています。

UEでVisual Studioを使用する時に言語設定が日本語になっているとUE側でCompileした時にErrorになるみたいな話があり、言語は英語に統一する事にしています。

Visual StudioをInstallして終わっています。

2022-10-23

<<前文>>
今度はVisual Studio内でDirectX 12を使用するための設定について調査しています。

この設定がTutorialによって全く違うので、???となっています。

結論として、Visual StudioDirectX 12を使用するための設定って実はないんじゃないのか。となっています。

それぞれのTutorialがやっている事はそれぞれのTutorialに最適化した設定であって、別にDirectX 12を使用するための設定じゃない気がすると書いてあります。

この辺、本当はどうだったのか覚えていません。

確かにOpenGLの時にGLFWが使用出来るようにする設定はすべてのTutorialでほぼ同じで、そういうのがDirectX 12のTutorialにないのは事実ですが、Visual Studioの設定を全くいじる必要がなかったかどうかは覚えていません。

<<本文>>
 C++ DirectX 12 Game Engine - [S01E01] - Creating Our First Window [20]の勉強を始めています。

後、補助として以下の3つの日本語の教科書を読む事にしました。

C++ DirectX 12 Game Engine - [S01E01] - Creating Our First Window [20]の説明通りにVisual Studioの設定を変更しています。

この途中で、先週D:DriveにDownloadしたと思ったWindows SDKがC:Driveに入っている事が判明しました。

絶対C:Driveには必要最低限のSoftしかDownloadしないと決めていたのでかなりショックを受けています。

最後に何でWindows SDKがD:DriveにInstallされてしまったのかについて調べています。

なんと、Windows SDK がInstallされる場所はRegistryで決定されていて、Visual StudioをInstallする時に指定したFolderにはInstallされない事が最初から決まっている事が分かりました。

のでWindows SDKをD:DriveにInstallする事は諦めています。

ただ、ここでRegistryについて勉強した事は、後でPC1号のOSをWindows 8.1 からWindows 10にUpgradeする時に大いに役に立ちました。

2022-10-31

<<前文>>

以下の日本語の3つの本で勉強した内容についてまとめています。

3つの本の第一章を読んで感想をまとめています。

その結果、Command QueueとかCommand Listを理解する事がDirectX 12を理解する上で重要なのではないか。との結論に至っています。
<<本文>>
 C++ DirectX 12 Game Engine - [S01E01] - Creating Our First Window [20]の内のProjectの作成を実行しています。

Configurationの設定とかを行っています。

今読み直すと、何をしているのかよく分からない所がありますね。

まあ今、勉強し直す必要がある箇所でないはずですので、後で必要になった時に読み直す事にします。

2022-11-06

<<前文>>

Descriptor、Descriptor Heap、Descriptor Table、Root Signature、Pipeline State、Command List、Command Queue、FenceとBarrierについて調べています。

今読み直すと一個もその意味を覚えていません

自分で書いた内容じゃないみたいです。
<<本文>>

 C++ DirectX 12 Game Engine - [S01E01] - Creating Our First Window [20]の内のCreating our Empty Project、Creating Windowsを勉強しています。

Window Classにある沢山のPropertiesの値を指定しています。

それぞれのPropertiesの機能についてはよく理解してないので、ここではまとめないと書いています。

確かWindows ClassのPropertiesはWindows APIの公式サイトを見たら全部説明されていたはずです。

今、それぞれのPropertiesを見直しましたが、それらの機能に関しては全く覚えていません。

うーん。

調べます。

WNDCLASSEXA structure (winuser.h) [21]に全部解説されていました。

まあこれも覚えておかないといけない事の一つでしょうね。

2022-11-14

<<前文>>

DirectX 12の魔導書」の2章、「グラフィックスパイプラインとさまざまなシェーダー」を読んでいます。

Pipelineについては、

Input Assembler -> Vertex Shader -> Pixel Shader -> Output-Merger

という流れを簡単に解説しているだけでした。

このPipelineに関して2つの質問をここに述べていますが、この解答はまだわかっていません。

HLSLについての勉強では、重要だと思った内容や疑問を抜き出したまとめていました。

これについては今でも分かりません。

他の2冊についても同様の内容が書かれている場所を抜き出した読んだそうです。

次の週からはSample CodeをDownloadして実際に動くのか確認する事を始めると書かれていました。

<<本文>>
 C++ DirectX 12 Game Engine - [S01E01] - Creating Our First Window [20]の続きを勉強しています。

前の週に勉強した内容を実装しています。

Tutorial通りに実装したんですが、AnnotationがInconsistentだ。とErrorになってしまいました。

そこからAnnotationについて調べて、直したりしています。

2022-11-20

<<前文>>

DirectX 12の魔導書」、「HLSLシェーダーの魔導書」と「Direct3D 12 ゲームグラフィック実践ガイド」のSample CodeをDownloadして動くかどうかの確認をしています。

Direct3D 12 ゲームグラフィック実践ガイド」のSample Codeを実行するにはAssimpとDirectX Tool Kitを自分で追加する必要があるみたいで、NuGetを使用して自動でVisual Studioに追加するか、全部自分でやっておくべきか悩んでいます。

一応、DownloadしたSample Codeの一番最初にあるのは全部正常に動いたみたいです。
<<本文>>
 C++ DirectX 12 Game Engine - [S01E01] - Creating Our First Window [20]の続きを勉強しています。

この週は、Display our windowを勉強しています。

CreateWindow()関数を使用していて、そのParameterに使用されている変数をここで作成すると書いていました。

まだ実装していないので、忠実にTutorialの内容をまとめているって感じです。

2022-11-28

<<前文>>

前の週で C++ DirectX 12 Game Engine - [S01E01] - Creating Our First Window [20] で勉強したところと、大体同じ箇所を、いつもの3つの本で勉強する事にします。

DirectX 12の魔導書では3.1の最初のProjectをやっています。

やっているんですが、3.1で何をやったのかについては全く書いていません。

これ著作権に配慮してその部分を丸っと削ったんだと思いますが、後から読むと何をしたのか全く分かりません。

しかたないのでDirectX 12の魔導書の3.1を今読み直します。

大した事、やってなかった。

単にTextを表示するCodeを実装しただけでした。

HLSLシェーダーの魔導書です。

これは、一番最初のSample CodeでもC++ DirectX 12 Game Engine - [S01E01] - Creating Our First Window [20] で勉強したところより大分先を言っているので、まだ勉強しない事にした。と書いてありました。

Direct3D 12 ゲームグラフィック実践ガイドです。

まずAssimpもDirectX Tool Ketの追加ですが、これが必要にあるのはずっと後の事だと判明しました。のでその時になったら考える事にした。と書いてありました。

この本ではProjectの設定方法について非常に詳しい解説が書かれていました。

のでC++ DirectX 12 Game Engine - [S01E01] - Creating Our First Window [20]のやり方と比較して違う箇所を抜き出して、何故違うのかについて検証しています。
<<本文>>
 C++ DirectX 12 Game Engine - [S01E01] - Creating Our First Window [20]の続きを勉強しています。

前の週に勉強したDisplay our windowを実装しています。

この週はほんとに一寸しか勉強していません。

2022-12-04

<<前文>>

CreateWindow()関数あたりの実装をいつもの3つの本ではどうやっているのかについて調べています。

これ C++ DirectX 12 Game Engine - [S01E01] - Creating Our First Window [20]の事ですね。全部間違っていますね。

まあ、直すのが面倒なんでそのままにしておきます。
<<本文>>
C++ DirectX 12 Game Engine - [S01E01] - Creating Our First Window [18]のMessage Loopを勉強しています。

結論から言うとTutorialでこの部分は難しいので実装はそのままCopyして説明だけします。とあってその通りにCopyしてしまったので、動きました。以上の感想はないです。

2022-12-12

<<前文>>

Message Loopがいつもの3つの本でどうやって実装されているのかについて調べています。

DirectX 12の魔導書です。

Message Loopの部分を勉強する前にCreate Window()関数の実装をまだしていなかったです。のでそれをまず実装しています。

というかCreateWindow()関数を作ったところで力尽きてしまいました。

HLSLシェーダーの魔導書です。

こっちもCreateWindow()関数について勉強しています。Sample CodeにこのCreatewindow()関数について詳しく解説してあったので、それを見て勉強しています。

この解説が結構分かりやすくて、前の勉強でもう力尽きてしまったと思った私ですが、生きを吹き返して、かなり熱心に勉強しています。

Direct3D 12 ゲームグラフィック実践ガイドです。

この教材だけ別な事をやっています。「2.2 アプリケーションクラスの作成」を勉強しています。

あー。

段々思い出して来ました。

WindowProcedure()関数について熱心に調べたり、機能を述べたりしています。

去年は、この辺を勉強していたんです。

<<本文>>

ここでOlympusMonsTutorials氏のC++ DirectX 12 Game Engine - [S01E02] - Refining Our Window [19]の勉強を始めています。

取りあえず全部見て、何をやっているのかを簡単にまとめています。

9.2 復習した感想とまとめ

兎に角疲れました。

でも今まで何をやっていたのかと言うか、全体の流れを思い出す事が出来ました。

そうか、WindowProcedure()関数について勉強している所で終わっていたんでした。

まだもう少しWin32の勉強する必要がありそうですね。DirectX 12の勉強はその後からです。ここは慌てずゆっくりとしかししっかりと勉強していきます。

9.3 C++ DirectX 12 Game Engine - [S01E02] - Refining Our Window[19]を勉強する

今週は復習していたら時間がなくなってしまったのでこれは来週に回します。

10. まとめと感想

今週は去年の終わりに考えた予定に沿って勉強をしてみました。

簡単すぎる所ときつ過ぎる所がありました。

それぞれの勉強について感想をまとめます。

10.1 制作系の勉強について

ここでは以下の3つの感想を述べます。

  • LandscapeのみのGameを作成する
  • 戦闘システムの続きを作成する
  • Volumetric Cloudの勉強内容をまとめ、Volumetric CloudのTutorialを作成する

これらは兎に角、完成させる必要があります。

所が、何をどこまでやったらいいのかがはっきりしません。Tutorialの勉強と比較すると曖昧な部分が多くてどうしても手を抜いてしまいます。

それを避けるために、作業予定表を作成しましたが、うーん。まだ暗中模索です。

Volumetric CloudはPaintに関して、今週新たな事実が判明したので予定していた内容を一から考え直す必要があるかもしれません。

しかしもし今週考えた方法でVolumetric Cloudの作成が可能になると、今まで誰も作った事のないオリジナル(Unique)なTutorialが作成出来るかもしれません。これは挑戦し甲斐があります。

10.2 UE5の勉強

ここでは以下の2つについての感想を述べます。

  • Niagaraの勉強
  • Materialの勉強

まずMaterialの勉強ですが、Ben Cloward先生のAdvanced Material Seriesですが、前のTutorialと比較して内容がかなり濃いです。

これ一個のTutorialを一回の勉強で終わらせるのは無理があるかもしれません。

うーん。どうしよう。

これはまだ考え途中です。

Niagaraの勉強ですが、UE5.1 のFluid SimulationのModuleはUE5.0とかなり違います。その違いを理解するためだけに相当な時間が取られそうです。

これNiagaraのFluid SimulationにおけるEmitter StackのSectionを理解する方が何倍も大切なきがします。

あえてUE5.1 で勉強する必要あるのかな?と思っています。

10.3 それ以外の勉強

  • Gaeaの勉強
  • Houdiniの勉強
  • DirectX 12の勉強

まずGaeaの勉強ですが、これは最終的にはTutorialとして自分で書くつもりです。まだどうやってまとめるのか構想がついていないのと、まだ勉強不足な所があるのでここに分類しました。

YouTubeにあるGaeaのTutorialは公式サイトと英語の2つだけです。

しかしすべてのTutorialで使用されているGaeaのVersionは古いもので、今のGaeaの使用方法は、それらのTutorialを見るだけでは理解出来ないです。

なので、そんなに深く理解しなくても、かなりの需要はありそうです。どのくらい勉強してからTutorialを作成するのか、その見極めが重要になって来ます。

Houdiniは今週、初めて勉強しました。

みんなHoudiniは難しいと言っていますが、今週勉強した限りでは、理解するのは全く問題なさそうです。

ただ勉強する量はかなり多いです。

今週は8分のTutorialを試しに勉強しましたが、最初の2分しか終わらなかったです。その2分だけでも正直多すぎで脳がパンクしてしまいました。

こっちはDirectX 12の勉強と違ってなるだけ早く使い方を覚えて、教える方に回りたいです。

正直、日本語のHoudiniの教材で英語と同じLevelのものはまだ無いみたいで、今のうちにHoudiniの使い方を覚えて、教える側に参入出来れば、かなり美味しいPositionが取れる気がしています。

英語圏でバズっている(Viralな)Houdiniの動画って、Houdiniで単に超美麗な映像を作るだけじゃダメで、ジブリとかナルトとかの有名な一シーンをHoudiniの超美麗な映像で再現しています。

しかし逆に言えば、そういうのさえ作成出来たら、SNSでバズるのはほとんど約束されているようなものです。

そして一回SNSでバズった映像を作成出来さえすれば、しれっとHoudiniの先生として教える側に参入出来るでしょう。

のでなるだけ早く機能を覚えたいです。

いや、そもそもHoudiniの勉強はUEで使用する建物をもっと簡単に作成するために始めたんでした。既に目的がズレています。

DirectX 12の勉強は、今、復習してやっと今まで何を勉強していたのかを思い出しました。

こっちは参入障壁が高すぎて慌てて勉強する必要は全くないので、今までと同じようにゆっくり勉強していきます。

後、前文をどうするかです。これは継続して書いていきたいです。

これについてももう少し考えます。

11. 参照(Reference)

[1] Klaus. (2022, May 21). How To BUILD AN ISLAND In 20 mins | Unreal Engine 5 Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=Obfq-Zh3iXs

[2] renderBucket. (2022, April 28). Unreal Engine 5 Tutorial - Niagara Fluids - Flamethrower [1/2] [Video]. YouTube. https://www.youtube.com/watch?v=k3EBxQGVSj8

[3] renderBucket. (2022, April 28). Unreal Engine 5 Tutorial - Niagara Fluids - Flamethrower [2/2] [Video]. YouTube. https://www.youtube.com/watch?v=28YFVQjgwbA

[4] Ben Cloward. (2022, October 6). Sparkling Snow Shader - Advanced Materials - Episode 2 [Video]. YouTube. https://www.youtube.com/watch?v=TCz-fKJS3wI

[5] Matt Aspland. (2022, February 6). How To Build Package And Export Your Game - Unreal Engine Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=O2PKihXmejw

[6] JSFILMZ. (2021, May 30). Unreal Engine 5 Tutorial How to Package Your Game [Video]. YouTube. https://www.youtube.com/watch?v=L6PSdDX4oYI

[7] Andrea Cantelli. (2020, June 8). Gaea Tutorial for Beginners #7 | Color correction [Video]. YouTube. https://www.youtube.com/watch?v=jUunmkdsT04

[8] Andrea Cantelli. (2020a, May 21). Gaea Tutorial for Beginners #1 | Intro to the series & Analyzing the Interface [Video]. YouTube. https://www.youtube.com/watch?v=fX1PJNvl8c0

[9] houdinikitchen. (2019, April 23). Tutorial 1. Networks and Nodes [Video]. YouTube. https://www.youtube.com/watch?v=aNsUTQessXg

[10] Magee, R. (n.d.). Foundations | Overview | SideFX. https://www.sidefx.com/tutorials/foundations-overview/

[11] pinkpocketTV. (2022, January 14). Unreal Engine 5 Beginner Tutorial | Sky And Clouds [Video]. YouTube. https://www.youtube.com/watch?v=lYZoR3ZLD-o

[12] WorldofLevelDesign. (2021, February 9). UE4: Analysis of Volumetric Clouds and How to Use Them [Video]. YouTube. https://www.youtube.com/watch?v=8XjEk-CP-kQ

[13] 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

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

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

[16] William Faucher. (2021, May 25). Volumetric Cloud Secrets  [Unreal Engine 4 & 5] Works in UE5! [Video]. YouTube. https://www.youtube.com/watch?v=yolGEIrhu0s

[17] Zero Conditional. (2021, March 2). Unreal Engine Volumetric Paint Clouds Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=SlR3eDr4jQc

[18] Zero Conditional. (2020, December 22). Beginners Intro to Volumetric Clouds in Unreal Engine 4.26. YouTube. https://www.youtube.com/watch?v=M2rOitk_I9g

[19] OlympusMonsTutorials. (2021, March 3). C++ DirectX 12 Game Engine - [S01E02] - Refining Our Window [Video]. YouTube. https://www.youtube.com/watch?v=rWylZKi8QbM

[20] OlympusMonsTutorials. (2021, February 17). C++ DirectX 12 Game Engine - [S01E01] - Creating Our First Window [Video]. https://www.youtube.com/watch?v=2vrEIhAajhM

[21] WNDCLASSEXA (winuser.h) - Win32 apps. (2022, July 28). Microsoft Learn. Retrieved January 8, 2023, from https://learn.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-wndclassexa