<前文>
<Matt Gaetz氏とアジア人への迫害について>
米国下院議員であるMatt Gaetz氏の児童買春疑惑は大変なスキャンダルですが、Foxニュースを代表とする宗教右派の人達から、彼に対する批判は全く聞かれません。宗教右派の人達は、アニメの絵にすらケチつける位、児童買春に対して厳罰を求めていたのですから、今回のスキャンダルには責任もって対処して貰いたいです。
しかし、残念な事ですが、宗教右派の人達は、自分たちの仲間が行ったと思われる児童買春疑惑を追及する代わりに、アジア人を迫害する事に熱心な様です。今、アメリカ国内におけるアジア人への暴行件数はウナギ登りです。
勿論、このアジア人への迫害には、韓国系と黒人が仲が悪い傾向があるとか、中華街からコロナが流行ったなどの根拠の無い噂などの理由もありますが、根本は宗教右派がFOX NEWSを使って流行らせた手法「事実じゃない事を、さも事実であるかのようにうそぶいて、だから差別や暴行しても良いとの論調に持っていく。」が主な原因です。
私は昔から主張していましたが、Foxニュースを代表とする宗教右派の連中が嘘を言っているのは全てのアメリカ人が知っていたのです。知っていたのですが、それによる被害者が自分達でないから娯楽として受け入れていたのです。それが今回、コロナや連邦議会での暴動によって初めて自分達に害が及ぶ可能性が出て来たので、宗教右派を切り捨てる事に決定したのです。
大体、キリスト教自体が、罪を犯してしまった自分を悔いてその罪を背負って生きる。と言う人間の内面の問題を扱った宗教なので、人間の外面を扱う政治問題に介入する時点で、その組織がカルト化している証拠でしょう。潰されても仕方ないと思います。
罪を犯してしまったと言えば、嘘をついている事は結構、罪深く感じます。しかし彼等にはそれが無かったのは何故なんでしょうか?
多分ですが彼らが通う教会で「嘘をつく事をキリストが望んでいる。」と洗脳していたんでしょうね。それで嘘をつく事に対して無感性になってしまったんでしょうね。
そう言えば、今、日本でもネトウヨとかjアノンとか呼ばれている一団がいます。彼らは、PCR検査は無駄と主張したり、特定の政治団体の人(例えば、先週出て来たSidney Powell氏)を嘘をつきまくって擁護したりし、又その逆に非難していますが、彼らもまたカルト化した宗教団体の信者なんでしょうか?
そんな気がします。
Matt Gaetz氏の児童買春疑惑について興味を持ったせいで、最近、Redditばっかし読んでいたんですが、何で全てのアメリカ人が、Foxニュースを代表とする宗教右派の連中が嘘を言っているの知っていたのか分かりました。彼らが嘘をついているのは何となく、彼らの顔や彼らの話を聞いている人の表情から推測出来たのですが、一つ一つの具体的な問題に対してどこまでが本当で、どこから嘘なのかまでは私には分かりませんでした。アメリカ人が一つ一つの嘘を見抜けたのはRedditで全部のニュースのトピックについて徹底的に議論しつくしていたからだったんです。
Matt Gaetz氏の児童買春疑惑についてもあらゆる角度から議論されていて大変勉強になりました。こんだけ一つのニュースに対して、みんなで議論したら嘘ならたちまちばれる訳です。
それでは今週も勉強を始めます。
<本文>
1.今週の予定
今週もLandscapeの勉強と作成を行います。以下の事を行います。
- Displacement mappingの実装
- 針葉樹用の緑と沼用の地面のMaterialの追加
- 沼の整理
- ゲーム内のlandscapeの作成。
今週でLandscapeの作成は終わらせられるように頑張ります。
2.Displacement mappingの実装
Displacement mapping を実装します。
2.1 Displacement mappingの勉強
取りあえず、Plane上でDisplacement mapping をやってやり方を完全に理解します。
Tutorialを探したのですが、これと言うヤツは見つかりませんでした。その中でこのTutorial(Easily Set Up Displacement Maps in Unreal Engine using Quixel Bridge)[1]が一番簡潔に、MegascansのDisplacement mappingの使用方法を説明していました。しかし途中でPolygonを増やしたplaneを作成するためにCinema 4Dを使用しています。この部分はBlenderで置き換える必要があります。
その後でlandscapeのDisplacementを作成します。取りあえず見つけたTutorialがこれ(How to Use Megascan Displacement for Landscapes in Unreal Engine 4)[2]です。
Blender からUE4にMeshをexportするのはどうしましょう?私はBlender2.8以降の新しいバージョンのやり方は知りません。このTutorial([New] Blender To Unreal Plugin!)[3]がBlenderからUE4へMeshをExportするやり方を説明していました。ざっと見た感じでは詳しく解説していそうです。
今のBlenderのバージョンを調べたら2.92が最新みたいです。昔2.80をdownloadした後、全く勉強していません。
Meshをsubdivideする方法さえ分かればそんな勉強する必要はないと思いますが、どうしましょう?この機会にBlenderの使用方法も勉強しましょうか?勉強するなら、2.92を入れた方が良いんでしょうか?
Tutorial([New] Blender To Unreal Plugin!)[3] ではBlender 2.83 を使用していました。ここで使用しているAdd-onであるBlenderToolが2.80に対応していれば、特に何もしなくても良いかもしれません。まあ最新のBlenderをここでDownloadしても別に良いですけど。
2.2 Easily Set Up Displacement Maps in Unreal Engine using Quixel Bridge[1]の勉強
先にこのTutorialを途中までやってから考えます。
使用しているTextureですが、MegascansからではなくGameTexture.comからBridgeにImportしてそれを更にUE4にexportしていました。
そのやり方は前のTutorialを見てね。って。
あー。
凄い分かり易いと思ったのに。
しょうがないですので、前のTutorialである、Converting Your Favorite Render Engine Materials for Unreal Engine[4]を見たら、最初の5分で滅茶苦茶分かり易く説明されていました。例に使用されていたのはRd-Textures社からのdownload方法ですが、多分同じでしょう。
これなら出来そうです。
あれ、無料じゃないの。
フェエエー。
この人がTutorialを作成した時はFreeになっている。
今はPremiumです。
ちょっと考えます。
他の会社のTextureをQuixel BridgeにImportしてそれをUE4にExportする方法は試してみたいです。
これがFreeなのでこっちで試してみます。
Downloadしました。
Quixel Bridgeを開きます。
Converting Your Favorite Render Engine Materials for Unreal Engine[4]ではZipの状態でImportするよりは、開いてImportした方が良いと言っていますが、
面倒なのでImport Zip Filesでやってしまいます。
となっています。
四角で囲ったMrao.pngだけImportしませんね。これは何なんでしょうか?
Metalness-Roughness-Ambient Occlusionの略だそうです。となるとこれもImportする必要がありますね。
以下の様に変更しました。
Importします。
2kでUE4にexportします。
普通に出来ました。
と思ったら、Tutorial([New] Blender To Unreal Plugin!) [3] でEnable Displacementにチェックを入れてからImportしろと言っています。
更に、Quixel BridgeでもDisplacementにチェックが入っているかを確認しろとあります。
もう一回Importし直しました。
Material instanceを開くと以下の様になっています。
サンプルの様な銀ピカではないですね。
それはともかく、
以下のDisplacement Amountの値を変化させればDisplacementが起きるそうです。
だいたい8くらいから以下の様に飛び出してきました。
以上でした。
これはこれで知らなければならない事なのですが、Displacement mappingの実装 (implementation) についての解説、つまりBPの書き方についての解説が全くなかったです。
このTutorialでも述べられていましたが、MegascansからTexture をUE4にExportする時にMegascansがDisplacement mappingを実装したMaterial とそのInstanceを作成してくれるので、BPを敢えて触る必要はないからです。
これは、そのMaterial Instanceのパラメーターを調節して最適値を見つける事が仕事であるdesignerにとっては適切な勉強範囲ですが、ゲーム制作でEngineerになるためにUE4を勉強しているProgrammerにとっては正しくないです。UE4を使用したゲーム制作でEngineer を名乗るためには、UE4におけるDisplacement mappingの実装方法を知る必要があります。
ちょっと考えます。
後、おまけですがMaterialの実装を変更してもっと銀色にしてみました。
元のMaterialの実装を見てみたらMetalnessのoutputにRPGを使用していました。
新しいMaterialを作成してMetalnessにR、RoughnessにGを接続しました。
銀色に光りました。
2.2 Displacement mappingのBP内における実装について
考えた結果、判明したんですが、確かにUE4におけるDisplacement mappingのBPの実装 (implementation) そのものについては勉強出来ませんでしたが、それ以外でUE4でDisplacement mappingを使用するために必要な事は全て勉強出来ました。
もう一つ大事な事を忘れていたのですが、先週、Displacement Mappingについて自分でまとめていました。
この内容を読み直してみたら、displacement mappingの実装 (implementation) 方法について書いていました。
これを復習します。その後で、Megascansが提供しているMaterial内でどのようにDisplacement mappingが実装されているのかを確認してみます。これで多分、UE4におけるdisplacement mappingの実装方法について勉強出来ると思います。
2.2.1 先週のBlogにおけるDisplacement mappingのまとめ
先週のblogにおけるDisplacement mappingは簡単でした。
MaterialのOutputは以下の様になっています。
この中でDisplacement Mappingに必要なのは、World Displacement とTessellation Multiplierです。
この二つを使用するためには、以下の事をする必要があります。
World Displacementはverticesの位置を移動させます。Tessellation MultiplierはLandscapeの表面のポリゴンの量をどれくらいにするかを指定します。
のでWorld Displacementの値を変化させます。
Displacement Mappingが出来ました。
2.2.2 World Displacement とTessellation Multiplierについて
ちょっと古いですが公式のDocumentでWorld Displacement [5]とTessellation Multiplier [6]が解説されていました。
World Displacementについてですが、
と書かれています。
Tessellationってポリゴン化する事でしょう?Tessellation Verticesってどういう意味なんでしょうか?ポリゴン化した後のVerticesを動かすと言う事なんでしょうか?
このサイト (What is Tessellation in computer graphics )[7] によると
Tessellationとはポリゴン化するだけではなく、ポリゴンを更に細かく分割する行為も含まれるようです。
この意味から推測するとTessellation Verticesは、ポリゴンを更に細かく分割した際に生成された頂点を指すと思われます。
最初はポリゴン化した後のVerticesをTessellation Verticesというのではないかと予測しましたが、どっちが正しいのでしょうか?
What is Tessellation in computer graphics [7] のDragonseel氏の解答にほとんど答えが書かれていました。
彼の解答によるとTessellationはTessellation Control Shader, Tessellation Primitive Generation, そして Tessellation Evaluation Shaderの3つのShaderで行われるそうです。
そんなShaderは知りません。初めて聞きました。
それぞれのStageでは、
- Tessellation Control Shaderでは、頂点を更に細かくするために、細分化のタイプと新しく作成する頂点の数を指定します。
- Tessellation Primitive Generationでは、Tessellation Control Shaderで指定した条件で実際に細分化します。この過程はHardwareが勝手にやる為Programmerは関与出来ません。
- Tessellation Evaluation Shaderでは、細分化した際に発生した新しい頂点を呼び出して色々な事をしますが、どのようにポリゴン化するのか、とその呼び出した頂点の位置を指定したりもします。
が行われるみたいです。
はい。
分かりました。
順番が逆になってしまいますが、Tessellation MultiplierがTessellation Control Shaderにおけるポリゴンの細分化の条件を指定して、World DisplacementがTessellation Evaluation Shaderにおける細分化した際に発生した新しい頂点の位置の指定を担当していると考えると辻褄があいます。
となるとTessellation VerticesはTessellation Evaluation Shader内で呼び出されるTessellation Primitive Generationで新しく作成された頂点を指しているはずです。
もう一度、公式のDocumentのWorld Displacement [5]を読み直してみると
Meshのベースの頂点ではなくて…とわざわざ述べています。
やっぱりこの文章からもTessellation VerticesはTessellation Evaluation Shader内で呼び出されるTessellation Primitive Generationで新しく作成された頂点を指していると考えられます。
はい。
ところでTessellation MultiplierがTessellation Control Shaderにおけるポリゴンの細分化の条件を指定できるならBlenderで予め細かくしたplaneを作成してUE4にimportする必要もないんじゃないでしょうか?
ムム…。
検討してみましょう。
ですがその前にMegascansが提供しているMaterial内でどのようにDisplacement mappingが行われているのかを確認します。
2.2.3 Megascansが提供しているMaterialのDisplacement mappingについて
以下の様な実装になっていました。
MF_DisplacementノードのHeight(s)がどうなっているのか次第ですね。
以下の様になっていました。
私が先週適当に作成したのか以下のヤツです。
最初の掛け算の部分は、50のConstantを賭けているのがDisplacement Amountに変更されただけでほぼ同じです。Megascansの方はその後で、Displacement Amountを2で割った値を引いています。更にVertexNormalWSをかけています。
そう言えば、公式のDocumentのWorld Displacement [5]でもVertexNormalWSを掛けていました。
VertexNormalWSって何の値なんでしょうか?
VertexNormalWSの公式のDocument [8] を見てみました。
World座標における頂点の法線のデータみたいです。
しかし超大事な事をその後で言っています。この値はvertex shader内で実行される場合のみ使用出来ますと。
となると、以下の部分の計算はVertex Shader内で行っているはずです。
ここで頂点の法線で掛けている訳ですからこの時点で頂点以外のDisplacement mappingの値は消えてします訳です。
つまり、先程考えていたTessellation VerticesにDisplacement mappingの値を直接パスする事は出来ないと言う事になります。
勿論、UE4のMaterialの使用方法を極めれば出来るのかもしれませんが上記のような組み方では無理でしょう。
ただしTessellation Verticesの分割具合とDisplacement mappingの変化を見ると、
以下の様にTessellation VerticesがBaseのVerticesと同じ時は、
全くDisplacementが起きていませんが、
以下の様にTessellation VerticesがBaseのVerticesより沢山生成された場合は、
Displacementが起きています。
BaseのVerticesの法線のみがDisplacementのデータを持っていてこんな結果になるんでしょうか?
実際はTessellation Verticesの法線とDisplacementのデータを掛けているんじゃないんでしょうか?と思いました。
直接、Shader code見れば何か分かるかもと試してみましたが以下の量のShaderが表示されました。
流石に、今の私ではこれを読んで理解するのは無理です。
これはあきらめます。
最後にですが、私が先週作成したDisplacement mappingの実装にVertexNormalWSを掛けた所、
以下の結果が、
こんな風になりました。
Displacementの高さ以外の軸に対する値が0になったみたいです。
2.3 Tessellation Multiplierの使用方法について
厳密に言えばTessellation Multiplierを使用する目的は、Meshの分割をカメラからの距離に応じて指定するもので、Displacement Mappingとは違います。しかしLandscapeにDisplacement Mappingを使用する時は、必ずTessellation Multiplierも指定する必要があるので一緒にここで勉強します。
公式のDocumentのTessellation Multiplier [6]で解説されていますが、今まで勉強した以上の情報は書かれていません。
以下にMegascansから提供されたMaterialの実装部分を示します。
3つのparameterがあります。Distance Offset, Distance Fade, そしてTessellation Multiplierです。
まずこれらのParameterの意味を調べます。
以下の様なセットを作成しました。
これでParameterをいじって配置してある銀色の球のmeshの変化を見ようと思います。
まずは何もしていない状態です。
Distance Offsetを1000まで上げました。
最初の球のmeshが細かくなりました。
数字を挙げると奥の球のMeshも更に細かくなりました。
Offsetと言う名前から考えても、この数字が高くなるとMeshが細かくなり始める位置がカメラにもっと近づくのではないでしょうか?多分ですが。
次はDistance Fadeの値を変化します。
500から5000に変えました。
これも最初の球のMeshが更に細かくなりました。Distance Offsetの時と違い、次の球のmeshも少しだけ細かくなっています。
距離によってMeshの細かさが減少しますが、その減少の割合を操作するParameterみたいです。数値が大きい程減少する割合が小さくなるみたいです。
最後はTessellation Multiplierです。これは見なくてもMeshの細かさを調節するParameterと予想出来ます。
初期値からTessellation Multiplierの値を変えたら、何も変化しませんでした。
良く考えたら、Tessellation Vertices がbase のmeshと同じなら分割の数をいくら増やしても0*(分割の数)なので変化ないのは当たり前でした。
以下の条件でやってみます。
Tessellation Multiplierの値を2にしました。
明らかに頂点の分割が細かくなっています。
此処まで理解したのでもう一回以下の式を参考にして考えてみます。
Distance Offsetの値を凄く高くすると、Subtractで値がマイナスになりDivideでDistance Fadeがどんな値でもマイナス。よってSaturateで0に補正され1-xでは1となるはず。
ので、Distance Offsetの値がある程度以上の大きくなると全ての球のメッシュの分割が同じ様に起きると考えられます。
実際は、
Distance Offsetの値を幾ら大きくしても近いmeshの方が細かく分割されています。
うーん。分からない。
How to Use Megascan Displacement for Landscapes in Unreal Engine 4 [2]を見たら、完璧に説明されてました。
2.4 How to Use Megascan Displacement for Landscapes in Unreal Engine 4 [2]で学ぶTessellation Multiplierの使用方法について
このTutorialで説明されていた通りに説明します。
まずDistance fadeですが、カメラのある位置からどれくらいの距離まで、Meshを細分化するかを決定します。
以下の例ではDistance fadeの値が5000です。
Distance fadeの値を10000に増やしました。カメラから更に遠くのMeshまで細分化されています。
Distance Offsetはこの細分化の距離を更に遠くに伸ばします。
正直、Distance fadeとの違いが分かりません。
最後にTessellation Multiplierですが細分化の割合を細かくします。
これは前から分かっていました。
Distance OffsetとDistance fadeの違いが分かりました。
Distance Offsetを3000、Distance fadeを0にした場合です。
Meshの細分化のされ具合が距離に全く影響されていません。
一方で、Distance Offsetを0、Distance fadeを5000とした場合、
Meshの細分化のされ具合が距離よって変わっています。
Distance Offsetを1000、Distance fadeを5000とした場合、最初の1000の部分は全て均等に細分化され、その後、距離に応じて細分化が減少しています。
はい。完璧に理解しました。
Distance Offsetについてですが、何で球のmeshで試した時は距離に応じてmeshの細分化が変化したのでしょうか?
多分ですが、meshの細分化はLODなどの別の要素の影響もあると思います。
その結果、球のmeshのこの条件では上手く出なかったのでしょう。
2.5 How to Use Megascan Displacement for Landscapes in Unreal Engine 4 [2]で解説された重要な点について
<Displacement Amountの正しい値の見つけ方>
Bridgeからmaterialを選択して3Dを表示させます。
そのイメージと同じ位のデコボコになるようにDisplacement Amountの値を調節します。
<Landscapeに今回の方法でTessellationをする場合の注意>
LandscapeにかかるTessellationはMaterial Instanceからだけではなく、LandscapeのLODからも影響されます。
LODからの影響を無くしたい場合は、LODのMax LODLevelの値を0にセットします。
更にTessellationのTessellation Component Screen Sizeを0.01、Use Default Falloffのチェックを外します。
こんな感じです。
Materialの設定を変えないとDisplacement mappingはLandscapeを一枚の大きなタイルとしてみなすそうです。
その設定は、MaterialのTessellationにあるCrack Free Displacementです。これのチェックを外します。
結構重要な情報が説明されていました。
2.6 LandscapeにDisplacement mappingを実装します。
それでは実装します。
まずLandscapeに使用しているMaterial instanceの元のMaterialである、Landscape4のTessellationのD3D11Tessellation ModeをFlat Tessellationに変更します。
Landscape4では3つのMaterial functionが使用されています。
まず、一番使用面積の大きいMF_GroundにDisplacement mappingを追加します。
MF_Displacementを使用する事にしました。
Displacement TextureをMF_DisplacementのHeight(s)につなげます。
UVsにつなげるTexCoordのサイズが分かりません。取りあえず、
と繋げました。
Tessellationが効いているのは確認出来ますが、
値を弄っても全く変化しません。
別なMapにMF_Groundのみを使用したMaterialを作成してLandscapeに適用して確認します。
普通に効いています。
Landscape4に直接、MF_Displacementを追加してみます。
今度はLandscape4_Instの値から操作出来ました。
良く分かりませんが、Landscape4の場合はMF_GroundだけにMF_Displacementが在る場合は効かないようです。
Play画面から確認しようとしたら、8000枚位のShaderをCompileし直す必要があると出て来て、5分位ずっと計算しています。
足が浮いています。
うーん。
Displacementを切っても浮いていました。
Displacementは関係なかったです。
以下の条件でマイルドにしました。
一応出来ました。
後は負担がどれくらいなのかをAssessmentしたいです。
2.7 Displacement mappingの実装についてのまとめ
一応、Displacement mappingの実装が出来ました。出来ましたが結構な問題や分からない事は山積みですので、後で見直す時に忘れない様に、ここにまとめて置く事にします。
- MF_Ground用のDisplacement mappingをLandscape全体に使用している。
- Displacement mappingのコストが分からない。
- Characterの足が浮いている。
Displacement mappingの理論でも以下の部分は良く分かりません。
- World Displacement に繋ぐノードでVertexNormalWSを使用しているが、これらはVertex shaderで実行されるのかそれともTessellation Evaluation Shaderで行わるのか不明。
- Materialから生成したShaderのコードが複雑すぎて読めない。
頂点を沢山持つPlaneをImportしてDisplacement mappingを試す必要なくなったので、[New] Blender To Unreal Plugin! [3]は勉強する必要は無くなりました。しかしBlenderの新しいVersionも勉強する必要があります。それも考えておきます。
3.針葉樹用の緑と沼用の地面のMaterialの追加
3.1 沼の作成
以下の部分が沼です。
今は、地面がむき出しですが、沼用の新しいMaterial functionを追加してここにPaintしようと思っています。
沼用のMaterialをMegascanからimportしました。
上記のTextureを使用したMaterial Functionを作成します。
MF_Groundを複製してTextureだけ交換しました。
Texture SamplerのSampler sourceの設定がShard:Wrapになっているかの確認も行いました。
Landscapeに使用しているMaterial、Landscape4に先程作成したMF_Swampを追加しました。
一回、何かをBPに追加するたびにShaderがcompileを始めて、4000~7000位のShaderがCompileするまで待たなくてはいけないのですが、これって普通なんでしょうか?
後、Landscapeが完成したらCompileにこんな時間はかからなくなるのでしょうか?
以下のようにPaintしました。
Parameterを調整します。
良いんじゃないでしょうか?
実際にPlayしてみました。
良い感じです。
このLayerに枯れ木をFoliageとして追加します。
Foliage4のLandscapeGrassOutputにSample’Swamp’を接続します。
更にLandscape Grass Type、Swamp_Foliageを作成して
LandscapeGrassOutputにセットします。
以下の様になりました。
枯れ木の数を減らして、サイズを大きくします。
最終的に更に2種類枯れ木を追加して以下の様になりました。
Play中の画面です。
大変重いです。
3.2 Componentの削除
一々Compileするたびに3000枚のShaderをCompileしていて大変、イライラします。
以下のlandscapeから要らないComponentを削除します。少しはCompileにかかる時間が短縮するでしょう。
あんまり削れませんでしたが、一寸はマシになるでしょうか?
テストして気が付いたんですが、Foliageで生成した木とは衝突しません。
どう直せばいいんでしょうか?
このサイト[9]の解答を見ると無理みたいですね。
なるほど。
もう十分勉強したのでCh4に戻って本番用のLandscapeを作成します。
4.ゲーム内のlandscapeの作成。
4.1 Height mapからLandscapeをImportする
久しぶりにCh4_3を開きました。
Map1を以下に示します。
ここに前節で作成したLandscapeとほぼ同じ物を作成したいと思います。
まず、前に作成したLandscapeを消します。
これは予想外でした。こんなにLandscape小っちゃかったんですね。
やっぱり別なMapにします。
となると先程作成したMapを丸ごとExportすればいいんじゃないでしょうか?
出来ました。
こっちはこっちで別なLandscapeを作成しましょう。
5.Map1のLandscapeの作成
以下の様な地形を作成します。
上の地形を元に以下の様なLandscapeを作成しました。
Landscape4で使用したMaterialでPaintしました。
Play中の画像です。
6.Environmentの勉強
今週は思っていたよりも早く予定した内容が終わってしまったのでUE4 の勉強をする事にします。
2021-03-22のブログで以下のTutorialは光に関するものだから勉強しませんでした。
- Becoming an Environment Artist in Unreal
- Constructing Believable Environment
久しぶりにCH4_3を開いてPlayしたらcharacterの陰影の付き方が別のProjectと違うような気がします。ちょっと気になるのでUE4におけるLightingを先に勉強する事にします。
2021-03-22のブログを見ると、Landscapeの作成が終わったら以下の事をやると述べていました。
- Widget内のBPの整理
- Effectの勉強と作成
これは来週やります。
BlenderからUE4にExportするTutorialについては新しいBlenderの使用方法を別に勉強しないといけないので後に回します。
6.1 Becoming an Environment Artist in Unreal
< Introduction to Environment Art >
このコースで何が勉強出来るのかを説明しています。この説明を聞く限りあんまりLightingはやらないみたいです。後かなり初心者向けみたいです。まあ、軽い気持ちで映画でも見る気分で見て行きましょう。
<Department Interactions in Development>
Environmental artistがゲーム制作に関して何を担当するのかを説明しています。
- PropとAssetの作成。
- Textureの作成。
- Materialの作成。
- Level Artistとの密接な連携
- AssetのCollision、LODs、そしてLightmappingの作成。
- Level制作に必要なパーツの作成
と説明されています。
これを見ると「Unreal Engine 4 で極めるゲーム開発」で述べられている職種は、少なくともUE4を使用したゲーム開発では一般的な概念のようです。
後、Lightingに関してはLight Mapの作成ぐらいしかここでは述べられていませんね。
<Names and Terminology>
ここではゲーム制作で使用される専門用語の内、Environmental artistが知っておかなければならない用語とその意味が紹介されていました。
ここで、面白いのがこの用語の説明がArtist向けな所です。
例えば、C++のProgrammerがBuildについて説明するならば、Compile+linkingと言うでしょうが、ここではBuildとはVersion、特に最新のVersionを指していると説明されています。私も最初は、それはBuildで作成されたCode(のVersion)でBuildじゃないでしょう。と思ったんですが、ArtistにCompiler と Interpreterの違いかを説明したって彼らには必要ない事ですし、こっちの説明のほうが分かり易く、かつ実用的です。
これで思い出したのが、化学における有機、無機の違いと意識高い系の人のおける有機、無機の違いです。化学を勉強する人にとって有機、無機の違いは炭素原子を中心に構成されている分子かどうかですが、意識高い系の人にとっての有機、無機の違いは農薬を使用して栽培されているかどうかです。
<Setting Up Your Folders>
作成したFileやFolderの整理の仕方についてです。
以下にFileの名前の付け方の例を紹介しています。
今度はTextureの種類についての名前の付け方です。
これは直ぐに実行しましょう。大変分かり易いです。
<Quiz 1>
Mipについて間違えてしまいました。
うーん。
Mipmapって色んなサイズのtextureを準備してそれぞれを距離に応じて使い分ける事でしょう。何で間違いだったんでしょうか?
<Scale Prep for Unreal Usage>
1 unreal unitが1 cmであると明言されていました。
更に単位の設定方法について説明されていました。
Project Setting -> Editor -> Appearance -> Distance/Length でCentimetersにセットされています。
XYZ軸についてです。UE4ではz軸が上を向いています。(これについては昔、このブログで相当調べました。)
Pivotについてです。Pivotはmeshの中心点の事ですがmeshによって底の中心だったり底の右端だったりします。
<Using the Grid and Snapping Tools>
Gridとは何かについての解説です。
その中で以下のToolの使用方法について説明しています。
いますが、
この升目上のチェックを外すと設定が100になっていても自由に動かせる事についての説明がありませんでした。
これって結構重要だと思うんですがどうでしょう。
Mouseの真ん中のボタンを押しながらDragすると距離が測れるそうです。
やってみます。
おお。出来ました。
これは中々良い事を学びました。
この距離を示す白線の始点と終点の位置も
によって強制されていますね。自由に位置を選択したい場合は升目上のチェックを外すと出来ます。
<Texture Settings, Density and Exporting>
Textureについての解説です。
Base、Normal、 Metalness、 Roughness、Ambient occlusionそしてChannel Packedについての説明です。
いつも思うんですが、PBRを説明するのにこのBase、Normal、 Metalness、 Roughnessの4つのTextureが必要であるRendering方法とすると非常に分かり易くなります。
ここでの説明も非常にスッキリしていて短時間で本質が理解出来る仕組みになっています。
Textureのサイズについてですが、UE4は最大で8192x8192ですが、4096x4096以上を使用するのはかなりレアな場合だそうです。
と述べていますが、この辺の確証が得られましたね。
Texture density についてですが、そのTextureのsizeではなくそのtextureのsizeとそのtextureが張られるmeshのサイズで決まるそうです。
以下の様にです。
これってTextureをMeshに貼りつける時にかなり大切ですよね。あんまり細かいTextureを小さな面に貼っても誰も気が付かないですし。
Texture densityを可視化する機能とかあるんでしょか?
<Importing Meshes and Textures Into Unreal>
FBXをUE4にImportする時に、表示される以下のヤツの中で大切な項目の説明を行っています。
BlenderからStatic meshをImportする時にいつも無視していました。
ここで勉強してしまいましょう。
MeshをImportする時に一個だけとは限りません。この項目はどのMeshに対しての設定をするのかを示します。
Skeletal Meshかどうかです。
ここにCheckを入れておくと最低のCollision(多分以下に示したようなタイプ)は生成してくれるそうです。
Importする時に幾つかのAssetを同時にImportしていますが、それを一つのMeshとしてImportするそうです。
幾つかのAssetを同時にImportって例えばイスをImportする時に背もたれとか足を別々のAssetで作成しているんでしょうか?
それともイスとテーブルを同時にImportしてそれを一つのMeshにする事を指してるんでしょうか?
現状の私の3Dの知識では今一意味が分かりませんでした。
ここの二つの項目、かなり力を入れて解説しているんですが、今一良く分かりません。
カーソルを上に乗せたら詳しい説明が表示されました。
Normal Import Methodは
と書かれています。
つまりFBXは元々、頂点に対してか、その頂点が作成したポリゴンに対してかは分かりませんが、法線の値を保持しています。それをそのまま使用するか、もしくはImportした頂点のデータからUE4側で法線の値を計算し直すのかを聞いてるようです。
Normal mapに対して聞いている可能性もない訳ではありませんが、今の所それは不明です。
Normal Generation Methodは
Meshの法線を計算するのにMikkTSpace tangent space generatorを使って計算せよ。と指定しています。
となるとFBXは元々保持している法線の値は頂点に対してと言う事になりそうですね。
MikkTSpaceなんてどっかで聞いた事がある言葉です。しらべればすぐに分かるでしょう。
このサイト(Tangent Space Normal Maps)[10]に詳しい解説がありました。
このサイトを読むとつまり、tangent space normal mapの作り方と戻し方を同じ方法でやらないと値が変わってしまう事やorder dependencyなどの問題があり、それらの問題をMikkTSpaceでやると避ける事が出来る。と言う事のようです。
そういう解釈でもう一回説明を聞いたら、そんなような事を説明していました。
これってXYZ軸の変換の事でしょうか?
こっちは単位の変換みたいですね。
ImportしたMeshにMaterialが無い時にどうするかを聞いています。
Tutorialの解説では、ほとんどのゲーム制作でUE4内で新しいMaterialを作成するそうです。
これは解説そのままですね。
これでFBX import optionの解説はお終いです。
正直、カーソルを分からない項目の上に合わせるのが一番分かり易いと分かりました。
次はImportしたTextureの設定についてです。
圧縮の方法についての選択ですが、Base Colorとそれ以外ではそれぞれ最適なやり方が違います。
これは流石に知っています。Base colorの時はチェックしてそれ以外は外すはずです。
ここはImportしたFileがどこからImportしたのかの記録です。
OpenGL用に作成されたNormal mapを使用する時にチェックします。これは2021-03-28のブログでも勉強しました。
結構勉強になりました。
<Quiz 2>
満点でした。でしたけどgrid snapping option valuesが何をいっているのか分からなくてこのブログを読み直して回答しました。
<Blockouts and Stand-in Meshes>
Blockoutとは仮のアセットでLevel上に取りあえず配置してLevel artistが全体のイメージが掴めるようにするためのものです。
Blockoutの例として紹介されていた地下鉄のドアですが、私には完成品に見える位の質でした。
ここは正直何を勉強すべきなのか良く分からないです。
<Collison Setup>
Collison用のmeshの作成方法についての解説でした。
<Polycount, Optimization and Draw Calls>
最適化についてです。
Polycountとは使用しているポリゴンの数です。少ないほど良いです。
Draw CallはRenderingのためにGPUやCPUからTextureを呼び出す回数を指しているようです。説明を聞きましたがこれ以上の理解は出来ませんでした。GPUに一端Textureやmeshのデータを渡してGPU内だけで呼び出すならそんなに負担にならないんじゃないの?と思ったんですがその辺をDraw Callが数えてるのか分かりません。
Draw Callの数を減らすためにはUE4のRenderingを理解したProgrammerが必要で、ArtistはDraw callを減らす事が最適化につながる事を理解する事と
- Meshの数を減らす事
- Materialの数を減らす事
- 同じmaterialを使用しているMeshは結合できないか検討する事
だそうです。
LODについてです。
LODはアセットがカメラから遠くの時にmeshの数が少なる事だそうです。LODについてしっかり勉強した事ないので、どうやって実現しているのか全く分かりません。
MeshのLOD Settingから作成していました。
更にReduction Settingでポリゴンに使用されてる三角形の数を減らす事も出来ます。
カメラからの距離でどのLODを使用するかはUE4が自動で設定してくれるそうです。
以下のチェックを外すとその自動化が止まるそうです。
自分で設定する時は以下のScreen Sizeで指定するそうです。
Meshに使用されるMaterialの数が増えるほどDraw callも増えるそうです。LOD2などの遠くでのみ使用さるMeshのMaterialの数はLOD0より少なくする事も考えるべきだそうです。
かなりLODについて勉強になりました。
<Quiz 3>
満点でした。
Footprintって何ですかと一瞬なりましたが、解答読んだら理解出来ました。
<Basic Material Creation and Application>
Materialの作成方法についての実演でした。
大体知っている事でしたが、TextureSampleのSampler TypeにそのTextureがどのタイプが表示されているのかを示しているそうです。
GameTexture.comからBridgeにImportしたMrao.pngですがLinear Colorにセットされていました。
これってMASKをセットすべきですよね。
<Material Masters and Instances>
Material Instanceの作り方を実演しています。
Master Materialは一つのProjectで2,3個しか作らないと言っていますが本当なんでしょうか?
時間が無くなってしまいました。
今週はここまでとします。
7.まとめと感想
今週は、
- Tessellation Multiplier を使用したDisplacement mappingの勉強と実装
- Landscapeの沼の作成
- 作成したLandscapeをGame用のProjectにMigrate
- Game用のProject内で新しくLandscapeを作成
- 時間が余ったのでEnvironment artist用のTutorialを勉強
を行いました。
来週は、
- Environmental artist用のTutorialの続き
- Widget内のBPの整理
- Map1からLandscape4にWarp出来るようにする。
- Landscape4で戦闘出来るようにする。
を行います。
8.参考文献(Reference)
- (2021b, January 2). Easily Set Up Displacement Maps in Unreal Engine using Quixel Bridge [Video]. YouTube. https://www.youtube.com/watch?v=f7q7btWDYOc
- MR3D-Dev. (2020, November 23). How to Use Megascan Displacement for Landscapes in Unreal Engine 4 [Video]. YouTube. https://www.youtube.com/watch?v=uTKap2aJbI8
- Smart Poly. (2020, July 28). [New] Blender To Unreal Plugin! [Video]. YouTube. https://www.youtube.com/watch?v=PNGAoKhrBls
- (2021a, January 1). Converting Your Favorite Render Engine Materials for Unreal Engine [Video]. YouTube. https://www.youtube.com/watch?v=5vpDFGJEsNw
- Epic Games. (n.d.-a). 1.11 - World Displacement. Unreal Engine Documentation. Retrieved April 11, 2021, from https://docs.unrealengine.com/en-US/Resources/ContentExamples/MaterialNodes/1_11/index.html
- Epic Games. (n.d.-b). 1.12 - Tessellation Multiplier. Unreal Engine Documentation. Retrieved April 11, 2021, from https://docs.unrealengine.com/en-US/Resources/ContentExamples/MaterialNodes/1_12/index.html
- E., A., & D. (2016, February 9). What is Tessellation in computer graphics. Computer Graphics Stack Exchange. https://computergraphics.stackexchange.com/questions/2018/what-is-tessellation-in-computer-graphics
- Epic Games. (n.d.-c). Coordinates Expressions. Unreal Engine Documentation. Retrieved April 11, 2021, from https://docs.unrealengine.com/en-US/RenderingAndGraphics/Materials/ExpressionReference/Coordinates/index.html?utm_source=editor&utm_medium=docs&utm_campaign=rich_tooltips#vertexnormalws
- Epic Games. (2015, August 6). Landscape grass & collision. Unreal Engine Forums. https://forums.unrealengine.com/development-discussion/content-creation/50736-landscape-grass-collision
- MikkTSpace.com. (n.d.). Tangent Space Normal Maps. Retrieved April 11, 2021, from http://www.mikktspace.com/