UE4の勉強記録

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

「Unreal Engine 4.xを使用してRPGを作成する」の足りない部分を作成する RPGのStoryの作成と推敲8

<前文>

<2重国籍化するアメリカ人と大人気の日本>

中絶問題から最近のテキサス州の小学校銃撃事件における警察の行動まで、遂に神から見放されちゃった感のあるアメリカですが、知産階級のアメリカ人はしっかり対策取っています。

それは2重国籍です。

日本人からすると2重国籍って裏切り感が凄いですが、元々キリスト教国家であるヨーロッパ諸国の人からしたら2重国籍ってキリスト教の解釈の違い程度の差しかありません。ので日本人が感じるほどの裏切り感はありません。

2重国籍にしておいて中絶しなければならない様な問題が起きた場合は、アメリカ人である事を隠して他の国民として行動するわけです。

中絶に限りませんが、アメリカの薬はとても高価です。同じ薬でもカナダで買うと10分の1の値段で買えたりするそうです。

しかもアメリカの保険会社は、反社なんじゃないのと思うくらい、患者に対して非協力的です。

実際に保険でCover出来るのかどうかはその薬を買ってみるまで分からなかったり、明白にその薬は保険でCoverさせると書いてあっても裁判で負けるまでお金を払わなかったりします。

私は大学で化学とCS専攻だったので、化学を専攻していた同級生には薬学大学院大学に進む人が結構いたんですが、インターンで保険会社の対応をやらされて精神やられて薬学部、辞めて化学の大学院に進路変更した友達もいました。

日本人はよくGameの値段が日本製のGameであっても日本で買った方が高い事をおま国感がある。と言って怒りますが、アメリカの薬のおま国感に比べたら可愛い物です。

まあ、こういう内情なのでアメリカ人の2重国籍化は避けられない流れなのでしょう。

それで2重国籍にしたアメリカ人って、アメリカに対する忠誠心がもう無くなってしまったのか知らないですが、アメリカ国内でも、もう一個の母国のためにしか働かなくなるんです。

一番分かり易い例がイスラエルとの2重国籍のアメリカ人です。パレスチナ自治区でもイスラエル軍空爆とか、アメリカの国益と全然関係のない問題なのにアメリカはイスラエルの味方ばかりしています。

後、これは個人的な意見ですが、今のトランプ元大統領を代表とする右派はロシアのために働いています。

それで、日本も2重国籍とまではいかないまでもアメリカ人にとって永住権を取り易くしたらどうでしょうか?と思っています。

実はアメリカ人にとって日本はとても人気の国なんです。

日本の何が魅力なのか不思議だったんですが、日本人の礼儀正しさってアメリカ人から見たらとても素敵に見えるみたいなんです。

もし日本がアメリカ人にとって永住権が取り易い国になったら、アメリカにおける日本の存在感は今の1000倍位重くなります。

そうなったら万が一、中国が台湾に侵攻してその結果、日本と中国が戦争になったとしても、アメリカは日米安保を適応して日本を守ってくれます。もしくはアメリカ本土を攻撃された時にしか使用しないような強力な武器を売ってくれるとか兎に角特別な対応してくれますよ。

今のままだと、日本はアメリカにとっては重要な国ですが、個々のアメリカ人にとってはあんまり特別な存在ではないです。

これが、アメリカ人の場合は、日本で5年働いたら永住権もらえて、しかもずっと保持出来る!とかになったら個々のアメリカ人にとっても凄く重要な存在に変化すると思います。

まあ、私の個人的見解です。

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

<本文>

1.今週の勉強

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

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

Map1のBugの直しは先週で一応終ったので今週からは無しにします。

量が多いせいか、最後の方が十分に勉強出来ないです。のでこれ以上増やさないようにします。

2.Niagara: CGHOW氏のTutorialをやる

今週は、CGHOW氏のMesh Flipbook in UE5 Niagara Tutorial | Download Files [1]を実装します。

Chaos Destructionを使用してないこのTutorial、勉強する価値あるんかな?と思ったんですが、このTutorial、NiagaraからSequencerを使用しているんです。そのやり方は覚えておくべきです。ので今週はこれを実装します。

ただし、RobotのModelは手に入らないのでCoinの部分だけ実装します。NiagaraからSequencerを使用する方法を学ぶにはそれで十分でしょう。

先週のBlogを読み直すとNSに沢山のStatic Meshを一辺にセットする方法についての解説もしてありました。

これも勉強するPointですね。

2.1 Mesh Flipbook in UE5 Niagara Tutorial | Download Files [1]を実装する

TutorialではMayaでCoinを作成しています。

以下の様に沢山のSphereを配置しています。

これをBlenderで作成する場合、Objectを別々にすべきなのか一個のObject内に沢山のGeometryを追加すべきなのかが分かりません。

これから調べます。

分かっているのはUEにImportした時に、それぞれ別のStatic Meshになっています。

まずそれぞれのCoinをObjectで作成してみます。

これをUEにExportします。

Exportの仕方を忘れました。

確か軸を変更する必要があったはずです。

所が、Blender export UEで検索したらその辺を解説しているTutorialがありません。

そのままExportしています。

仕方ないので自分のBlogを検索したらありました。

それぞれのStatic meshでImport出来ました。

これでやってみます。

Niagara Systemを作成します。作成方法はいつもと同じです。

Render SectionにMesh Rendererをセットします。

ここでMesh Flipbookを使用してCoinをセットします。

こうやって名前を指定するんですか。

Flipbook Suffix FormatにセットしやすいようにImportした方の名前を変更します。

以下の様にセットします。

するとMeshの所に5枚のCoinが自動でセットされました。

この部分のやり方分かりました。

まずStatic Meshの名前ですが「名前_番号」である必要があります。名前は全部一緒でなければなりません。この場合はCoinです。そして番号ですが、最初のヤツが1である必要があります。

例えばCoin_1です。これに5枚のCoinがあるとするとCoin_1、Coin_2、Coin_3、Coin_4、Coin_5となります。

First Flip Frameに最初の番号のStatic Meshをセットします。この場合、Coin_1です。

次にFlipbook Suffix Formatを指定します。Defaultでは_{frame_number}となっています。

これは名前の後ろの番号の形式を指定しています。この例だと_の後ろに番号が並びます。

Flipbook Suffix Num Digitsは最初の番号を指定します。

最初のCoinはCoin_1なので1を指定します。

Num Flipbook Framesに読み込むStatic Meshの数を指定します。

今回の例では5枚のCoinがあるので5です。

以上です。

うん。

これを踏まえて最初の例を考えるとCoin1、Coin2、Coin3、Coin4、Coin5となっています。これの

Flipbook Suffix Formatは{frame_number}となります。

Flipbook Suffix Num Digitsは1です。

Num Flipbook Frameは5です。

これで5枚のCoinが表示されるのかと思っていつものように要らないModuleを消すと

Coinが一枚しか表示されていません。

今度はこれを直します。

Particle Spawn SectionのInitialize Particle Moduleの

Mesh Attributesを以下の様にセットします。

すると以下の様に全てのセットされたStatic Meshが表示されるようになります。

このPointはMesh Renderer Mesh Indexです。

ここに0をセットするとCoin1が表示されます。ここに4をセットするとCoin5が表示されます。

Return Exec Indexをセットする事でそれぞれのParticleがそれぞれの番号に応じたCoinのStatic Meshとして生成させるようになります。

Mesh RendererにMesh Rendererをセットしていますが、こっちは良く分かりません。セットしないとErrorになります。

ただ選択肢がこれしかないので間違える事はなさそうです。

これに先週勉強したAdd Velocity Moduleを追加します。

結果です。

一応、それなりに別々な方向に飛散していますね。

ここからロボットを使用して解説しているのでSequencerを使用する所まで見るだけにします。

と思ったら、寿命の最初の半分の時間はVelocityに従って飛散しますが、残りの半分は元の位置に戻るための実装を追加していました。

同じモノを作成します。

まずParticle Update SectionにParticle Positionをセットします。

そして以下の様にセットします。

まず、Particle PositionにLerp Positionをセットします。

そしてAには今までと同じParticle Positionをセットします。しかしBにはParticle Initial Positionをセットします。

Alphaを0にすると今までと同じCoinの動きをします。

Alphaを1にするとCoin達が最初の位置に戻ります。

はい。

ここまでくれば、どうやってCoinを、寿命の最初の半分の時間はVelocityに従って飛散し、残りの半分は元の位置に戻るように実装するのか分かります。

Alphaの値を以下の様なGraphで指定しました。

これで最初の0.75はVelocity from a pointの指示に従って飛散します。残りの0.25で最初の位置に戻ります。

今度はRotationも追加します。

そのためにParticle Update SectionにUpdate Mesh Orientation Moduleを追加します。

Update Mesh Orientation Moduleは初めて使用するModuleです。

取りあえずTutorial通りにセットします。

こんな風に回転しています。

何か想像してたのとは違う回転の仕方です。

後、Niagaraで生成されたMeshってCollusionしないんでしょうか?お互いにすり抜けていますね。

この回転もParticleのPositionと同じ様に前半は激しく回転して後半は最初の位置に戻ってきてほしいです。

そのためにはParticle のPositionでやったのと全く同じ事をします。

まずParticle MeshOrientationをセットします。

Set Particle Mesh Orientation Moduleの設定から、まずParticle Mesh OrientationにはLerp Quaternionをセットします。

当然Quaternion AにはParticle Mesh Orientation、Quaternion BにはParticle Initial Mesh Orientationをセットします。

所が、Quaternion BにセットしたいParticle Initial Mesh Orientationは存在しません。

この場合は、Particle Spawn SectionにInitial Mesh Orientation Moduleを追加して

Mesh Orientation Mode にNoneをセットします。

するとParticle Update SectionのSet Particle Mesh OrientationのQuaternion BにParticle Initial Mesh Orientationがセット出来るようになります。

うーん。

このやり方って一般化出来そうですね。初期値が欲しい時はこうすればどのParameterの初期値も得る事が出来そうです。

Lerp FactorにPositionの時と同じ設定をセットしました。

結果です。

Velocityも追加しました。

うーん。良い感じです。

それでは最後のSequencerの部分を勉強します。

まずUser Parameterを作成します。

Alpha Valueとしました。

これをLerpのAlphaにセットします。

Particle Update SectionのSet: Particles Position Moduleの

Alphaにセットします。

更に、Particle Update SectionのSet Particles Mesh Orientation Moduleの

Alphaにもセットしました。

ここからが良く分かりません。

Tutorialでは以下のBPを開いています。

Level Sequenceを探すと、Level Sequence ActorというBPがあります。

これを作成すると以下の様になります。

うーん。ちょっと違う様です。

AnimationにLevel Sequenceがありました。

これを作成しました。

名前がTutorialの例と全く同じです。

開くと以下の様なSequencerが表示されました。これもTutorialと同じでした。

以下の様にセットしてみました。

これでAlphaの値をSequencerの場所で指定出来るはずです。

0の箇所に0を指定しました。

0.75がSequencerの何処に当たるのか不明なので取りあえず0075の所で0に指定しました。

0100の処で1 を指定しようとしたんですが、ズレてしまし0105の処で1を指定しまし

た。

これでSequencerを再生すると

となりました。

一応は出来ました。

2.2 Mesh Flipbook in UE5 Niagara Tutorial | Download Files [1]を勉強して

流石にSequencerの部分は良く分からなかったです。まずSequencerの部分の操作方法が分かりません。画面を小さくしたかったんですがそれすらどうやったらいいのか不明でした。

それ以外は大体は理解出来ました。

もう少し深堀したかった部分を以下にまとめます。

Blender におけるFBXの名前の指定方法>

Objectとして作成すればそれぞれ別のStatic MeshとしてUEからImport出来る事は分かったんですが、それぞれのObjectの名前を一辺に指定出来る方法が知りたかったです。

今回は5つのObjectしか作成しませんでしたが、そもそもこのTutorialはStatic Meshが100個とかある場合を想定しています。

Objectの名前を一括で指定する方法が必要です。

<Collusionの指定>

読み込んだCoin達が飛散する時に衝突し合うんですが、突き抜けています。

これ激しく直したいです。

多分、設定を弄ったらCollusionするように出来るはずです。

<Return Exec Index

このParameter、未だに理解が曖昧です。

一応、今の理解ではそれぞれのParticleには、生成された順番に番号が付加されていて、その番号を返している。と理解しています。

これが正しいのかどうかを確認する必要があります。

EmitterのPropertiesを見ると

Requires Persistent IDsにCheckが入っていないんですよ。

となるとそれぞれのParticleには個別のIDは付いていないんじゃないのとなります。

この辺でいつも理解出来なくなります。

<Update Mesh Orientation Moduleについて>

このModuleは初めて使用したんですが、適当に弄ったら想像していた通りの結果になったので調べませんでした。

<User Parameterの設定方法>

これもしばらく使っていなかったらやり方を忘れてしまっていました。

適当に弄ったら出来たので今回は勉強し直す事はしませんでした。

<Level Sequencerについて>

これは存在すら知らなかったので、まあ仕方ないですが、全く使用方法が分かりません。

Animationの勉強する時にがっつり勉強します。

<まとめと感想>

こうやって書くとまるで分からない事だらけのように見えますが、実際はかなり勉強になりました。

Mesh Flipbookの使用方法や、LerpのAlpha値を使用する事でParticleを初期位置に戻す方法など、それなりに高度な技術も学べました。

これ以上は、このVFXを磨いて実用に耐えれるLevelにまで上げるか、それともここで終わりにしておくのかの問題です。多分、これで終わりにします。

100個のStatic MeshをバラバラにセットするParticle Systemを作成する必要性を今はあんまり感じないからです。その辺に何かの実用性が出てきたらこの技術を深堀する事にします。

今回はこの位の勉強で十分と思います。

3.Materialの勉強

今週はBen Cloward先生のTexture Tile Break-up - Shader Graph Basics - Episode 45 [2]とPPLineDrawingの実装でOutlineを作成している部分の検証の続きを行います。

3.1 Texture Tile Break-up - Shader Graph Basics - Episode 45 [2]を軽く見る

今週は、先週作成したMF_UV Random Transform ノードを使用して

以下の様なTilingを減らします。

最初に結論から書くと以下の様になりました。

勿論、このやり方が完璧と言う訳ではなく、以下に示したようなTextureの境がはっきり見える箇所が沢山生じます。

しかし、今まで知られているTilingを隠す4つのやり方以外のTilingを隠す方法としてはかなり優秀で、5番目のTechniqueとして考慮すべき内容です。

特にTextureのサイズを大きくしてTilingを隠すやり方は、2021-04-04のBlogのように

なってしまったりします。

実装方法としては以下の様にNoise 用のTextureとRoundノードの間にMultiply ノードを追加しただけです。

3.2 Texture Tile Break-up - Shader Graph Basics - Episode 45 [2]を実装する

これは簡単なので直ぐに実装してしまいます。

出来ました。

この効果を検証します。

こんな感じのTilingがあります。

こんなになりました。

確かにTilingが消えいてます。

Layerだけ見ると以下の様になっていました。

拡大して見ると確かにつなぎ目はむごいです。

遠距離のTilingの対応に良いかもしれません。

これに、今のTechniqueを使用すると

こうなります。

明らかにTilingが改善されています。

しかも遠方なのでTextureの継ぎ目は見えません。

今週はこれだけ。と思いましたが、まああんまり頭を使わなくて良かったので逆に良かったと考えます。

3.3 PPLineDrawingの実装でOutlineを作成している部分の検証の続き

今週やる事はこれだけです。

このScene Depthと

このScene Texture: Scene Depthの違いを調べる事です。

PPLineDrawingのDepth Based Outlineだけ抜き出しました。

結果です。

PPLineDrawingのDepth Based Outlineだけ抜き出した実装のScene Texture: Scene Depth ノードをScene Depthノードに変更しました。

結果です。

うーん。

同じですね。

更に足元のOutlineもしっかり出ています。

Scene Depthの足元を見るとあんまり綺麗に表示されていません。

あ。分かりました。

PPLineDrawingのDepth Based Outlineの場合、Outline SizeとMultの値を大きくしたら

足のOutlineがしっかり出て来ました。

ParameterのDefault値の違いが足元のOutlineが表示されるかどうかの違いになっていたようです。

3.4 Outlineの研究が何故重要なのかについて

Outlineと言うか線画はアニメ調のRenderingには欠かせない要素です。

しかし100%アニメと同じ線画をOutlineから再現出来ているかと言うと、極めて少数の例外を除き出来てません。

これは簡単に言えば3D のRenderingにおいてOutlineの抽出はそんなに重要ではないからです。

西欧、特にドイツは元々森に住んでいた人達なので、木漏れ日こそが重要なんです。だからPhoto Renderingはあんなに光の具合に敏感なんです。

それに対して日本では筆で絵を画くので線の抽出が重要なんです。しかも江戸時代から浮世絵が発達したので特に美しく線を抽出する事が重要になったんです。

それだけだったら単なる文化の違いで終わりです。

ここからが重要な話になります。

人間は世界を視覚で認識しています。所が3次元のまま認識しているのではなく、2次元の絵のように空間を平面に変換して認識しています。

ここに矛盾が生じるです。

空間を平面に変換すると、遠くにあるものと近くにあるものが同じ位置にあるように錯覚してしまいます。脳がこの錯覚を防ぐために人間が視覚から得た情報に見えない線を追加したんです。

だから線の抽出は、凄い大切な研究分野のはずなんです。

何ですが誰もその事に気が付いていません。

勿論、3d Renderingや画像処理に関係している個々の日本人は、その伝統から線の抽出がRenderingにおいてどんだけ重要なのか理解しています。しかしどうやって線の抽出を商業化に繋げる事が出来るのかが分からないので本格的な研究に二の足を踏んでいます。

3.5 Post Processの勉強

Materialの勉強を始めて1年位立ちます。

Materialは基本としてStatic Meshに貼りつけるものですが、それ以外にLandscape、Niagara(Particle System)、そしてPost Processの3つの分野でも使用します。更にそれらの分野においてMaterialは非常に大きな役割を果たしています。

LandscapeとNiagaraは今、勉強中なので問題ないですが、Post ProcessとMaterialの関係はほとんど勉強した事ありません。

今回のToon ShadingとOutlineの抽出がほとんど初めての勉強です。

実はUE4の勉強を始めてすぐの時に、かなりPost Processについて勉強したんです。

が、その時はDeferred Shadingについて何も知らなかったので、G Buffer に保持されているScene Texture達が何なのか全く理解出来ませんでした。

更にMaterialを勉強するための適切な教材もなく、結局訳わからない状態で勉強を断念しました。

今は、かなりMaterialの理解も進んでいますしDeferred Shadingについて理解もしています。のでPost Processを勉強するためのTutorialを少し探す事にします。

YouTubeで検索しましたがあんまりぱっとしたのはありません。

Post Processに特化したTutorialが欲しいんですがそういうのは出てこないです。

Materialの勉強ならBen Cloward先生、Niagaraの勉強ならCGHOW氏、Landscapeの勉強ならうーん。これは結構います。敢えて述べるならUnreal Sensei氏ですか。

こういう様な人でPost Processに特化したTutorialはないみたいです。

敢えてこの中で候補を上げるとすれば、これか

もしくはUnreal CG氏の一連のTutorialでしょうか?

Unreal CG氏のPost Processに対する理解が凄いのは疑う余地はないですが、彼のTutorialってあんまり基礎を教える感じじゃないんです。

応用編というか実践的というか。

勿論、彼のTutorialで勉強するのは必要ですが、それだけしか勉強しないと基礎が弱くなりそうです。

公式のDocumentにPost Process Effects [3](4.27)がありました。

ここに結構Post Process Effectの種類が載っています。

この辺について理解しておけば、良いような気がします。

ぱっと読んだんですが、Post Process Effects [3](5.0)の方が良くまとまっています。

こっちの方が分かり易いです。

これを読むとPost Processの中でMaterialを使用するヤツは別枠になっています。

こっちも読みました。

全体的には分かり易い解説でしたが、G-Bufferとの関係はあんまり上手く説明されていませんでした。

4.RPGStoryの改善

今週もStoryの続きを作成していきます。

4.1 Story作成の続き

<第三章:美しい青い世界>

以下の要素をStoryに追加します。

軍隊を送ったって戦闘は一対一なので意味ないです。

この部分は推敲が必要です。

12使徒の一人と毒蛇を戦わせましょう。

そして毒蛇が勝つんです。それから話がおかしくなるんです。

まず端っこの世界にあるヤマメ村で、美しい青い世界にあるアポロン王国についての噂を聞きます。

アポロン王国には神が人類を守るために選ばれた12使徒と呼ばれる人達の一人、バルトロマイ様を摂政に迎えたので大変栄えて大きな王国になったと。

ああ、良い事を思い付ました。吟遊詩人に語らせましょう。12使徒七つの大罪についての話を。

Playerが実際にアポロン王国について王様と話をすると、バルトロマイは毒蛇と戦い負けてしまった。と伝えます。

毒蛇はバルトロマイを倒すと王女を誘拐して王様を脅迫します。

この王国に伝わる秘密を教えろと。それは金の切符のありかです。

王様はPlayerに王女を助けるように頼みます。王女は南の塔に監禁されていました。

南の塔に侵入して王女にあったPlayerは王女からバルトロマイ様の最後の伝言を聞きます。毒蛇は戦闘になるとドラゴンに変身して空を飛び回って普通の攻撃は当たりません。魔法で攻撃するしかありませんが、火の魔法はあまり効果がないです。その結果バルトロマイはなすすべが無くなってしまい、毒蛇との戦闘に負けてしまいました。

バルトロマイ様は王女にこう言いました。ドラゴンを倒すためには雷神剣が必要だと。そして雷神剣は12使徒の一人であるアンドレが持っているそうです。アンドレを探して下さいと王女から頼まれます。

美しい青い世界を隅々まで探索したPlayerはとうとう12使徒の一人であるアンドレを見つけます。アンドレはある村で刀鍛冶をしていました。

アンドレはPlayerの話を聞くと驚き、ある事実を伝えます。

それは雷神剣はもうこの世には存在しないと言う事です。7つの大罪の一人が雷神剣をアンドレから奪い、破壊してしまったそうです。

アンドレはPlayerに雷神剣のない今、7つの大罪の一人である毒蛇を倒す事は不可能であると。

そしてアンドレは雷神剣を生成するための研究をしているそうです。

雷神剣を生成する後一歩まで来たのですが、この剣を作成するためには、古の魔法である雷魔法を使える術者が必要です。アンドレは全ての世界を隅々まで旅しましたが雷魔法を使用出来る人に会う事は叶いませんでした。

そしてアンドレはPlayerに黄色の切符を渡しこう言います。

この世界は君しか行くことが出来ない世界である。もしかしたらこの黄色の切符で行ける世界には古の魔法である雷の魔法を使える人がいるかもしれない。もし雷の魔法を使う人がいたら雷の魔法を習ってきてほしいと。

<第三章美しい青い世界の推敲など

うーん。

かなり良くなりましたね。

今の時点では2つ問題があります。一つ目はアポロン王国の王女のキャラが立っていません。

王女はこのQuestが終わったらPlayerと結婚してアポロン王国の秘密をPlayerに伝える重要な役があります。ここで王女のキャラが立たないとUserは王女と結婚したがらなくなってしまいます。

2つ目の問題は魔法の習得に関してです。

今の時点では魔法はLevelが上がると勝手に覚えるようになっています。魔法の習得方法の理論が必要になってしまいました。

これらの問題については来週までに考えます。

<第四章:黄色い砂漠の世界>

まず黄色い砂漠の世界のEventですが2022-05-09のBlogを見ると

となっていました。

大体、この話が今までの4章の集大成の様です。

この前後のBlogもかなり読んだのですが、これ以上の詳しい話を書いた文章は見つかりませんでした。

確かこの砂漠にある王国はゼウス王国で、12使徒の内三人がこの王国を支えているみたいな話を何処かで書いたんですが見つかりませんでした。

のでここでもう一回まとめます。

まずPlayerがこの世界に着くと、辺り一面砂漠の世界です。

少し砂漠を歩くと、Monsterに出くわします。Monsterは強いですが今のPlayerなら何とか倒せます。

倒れている人を見つけます。

その人を助けると、オアシスの場所を教えてくれます。

オアシスに着くと、村があります。村の名前はどうしましょうか?

砂漠の村に、日本の淡水魚の名前はあんまり相応しくない気がします。

あ、雷魚村が良いです。何か雷の魔法に関連してそうです。

村に着くと、村人は、

  • この世界は竜と黄色い砂漠の世界と呼ばれている事、
  • 美しい青い世界から来たとPlayerが言うと、そんな名前の世界は聞いた事がない。と答えます。

ここでドラゴンが村を襲います。

ドラゴンにはかなわない事を知っているPlayerはなすすべもなく逃げ回ります。

すると、屈強な戦士が現れて、そのドラゴンに戦いを挑みます。そして雷の魔法を使ってそのドラゴンを倒してしまいました。

驚いたPlayerはその戦士に話を聞くと、彼はこの砂漠にある巨大な王国、ゼウス王国の王子で、その王家には特別な魔法、雷の魔法が伝わっているそうです。

ゼウス王国に着くと、今ゼウス王国では、火の鳥に変身する化け物から攻撃を受けていて、火の鳥には雷の魔法が全く効かず、とても困っている事を知ります。

火の鳥に変身する化け物は七つの大罪の一人であるえっと。これはどれにしたんでしたっけ。

2022-05-09のBlogにありました。

Greedのサソリでした。

Playerが7つの大罪について知っている事、美しい青い世界から黄色の切符でこの世界に来た事、他の12使徒がPlayerが強い神の使命を負っている可能性が高い事などからPlayerを信じた王様は、無限に水が湧きでる瓶の伝説をPlayerに伝えます。

更に、もしその壺を探し出してくれたら雷の魔法を教える事を約束します。

今週はここまでとします。

残りのStoryは来週考えます。

5.Open Worldの検証

今週は先週の続きをやって行きます。

先週勉強したMR3D-Dev氏のUnreal Engine 4: Ultimate Beginner's Guide to Runtime Virtual Texture Blending (RVT) [4]の続きを勉強します。

Unreal Engine 4: Blend Megascan Assets with the Landscape Using Runtime Virtual Texturing (RVT) [5]です。

これが終わったら以下の事を検討します。

5.1 MR3D-Dev氏のUnreal Engine 4: Blend Megascan Assets with the Landscape Using Runtime Virtual Texturing (RVT) [5]を軽く見る

軽く全部見ました。

ここで注目すべき点は、

  • MagaScanからのImport方法
  • Virtual Textureのセット方法
  • Normal Vectorの設定がUnreal Sensei氏と違う
  • 結局歪みがある点

です。

<MagaScanからのImport方法>

MegaScanからのImport方法ですが、ほとんど解説していませんでした。

今Virtual Textureの勉強に使用しているUEはUE4.27なんですが、MegaScanの設定をしていません。

BridgeからImport出来るようにセットしたのは4.24です。

それは今作成しているRPGが4.24を使用しているからです。Bridgeから4.27にMaterialをImport出来る様にしたいんですが、その結果Bridgeから4.24にImport出来なくなるのは避けたいです。

Bridgeの方のExport Settingを見てもEngine Versionで選択出来るのは一つしかないように見えます。

これ弄ると4.24にはExport出来なくなりそうです。

更にUE5になるとMegaScanからImportするのはDefault出来る様になっています。

自分で設定する必要は全くありません。何回か利用しましたがLoginすればMegaScanにあるMateialやStatic Meshそのまま使用出来ます。

ので今更UE4のMegaScan関連の環境設定を一生懸命勉強する気にはなれません。

このTutorialでMagaScanからのImport方法を詳しく解説してくれていたら、4.27にもMegaScanをImport出来る設定を追加しようと思ったんですがそういうのは無かったです。

<Virtual Textureのセット方法>

これは後でまとめます。

<Normal Vectorの設定がUnreal Sensei氏と違う>

MR3D-Dev氏はNormal VectorをそのままPassしています。これはUnreal Sensei氏のやり方とは違っている気がします。後で検証します。

後、MR3D-Dev氏がこのTutorialで言っていたんですがQuixel社が作成したUE4専用のTutorialがあるみたいです。

これの事でしょうか?

そこにVirtual Textureの使用方法を解説したTutorialがあるみたいです。

それがMR3D-Dev氏とUnreal Sensei氏の作成したTutorialがそっくりな理由なのかもしれません。

<結局歪みがある点>

結論を言うとこのやり方でもLandscapeに接している点には歪みが生じています。

Static Meshに使用しているMaterialのPreviewを見るともっとはっきりしています。

<全体の流れ>

Virtual Textureのセット方法と言うか全体の流れをまとめます。

今回はLandscapeとMegaScanからdownloadしたStatic Meshが既にセットされた状態から始まります。

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

MegaScanからDownloadしたStatic Meshに使用されているMaterialの実装をそのままCopyしてきます。

Layerを作成します。

最後にこのMaterialのDataをRuntime Virtual Texture Outputにセットします。

World Heightの情報は前回と同じようにやりました。

このMaterialのInstanceをLandscapeにセットしようとしましたが、その前にやる事がありました。

LandscapeにRuntime Virtual Texture のColorをセットします。

更にColorとHeight用の2つRuntime Virtual Texture VolumeをLevelに追加します。

この二つのRuntime Virtual Texture とMaterialをLandscapeに追加します。

LandscapeのLayerの設定方法はSkipします。

今度はStatic Mesh用のMaterialを作成します。

まず、MegaScanからDownloadした時についてきたMaterialの実装をそのままCopyします。

更に先週、使用したLerp のAlpha値を指定する実装をまるコピーしてきます。

Runtime Virtual Texture SampleのBase Colorの値とMegaScanからDownloadした時についてきたMaterialのCopyのBase ColorをLerpします。

他のParameterであるRoughnessやNormal Vectorも同様に行います。

Normal Mapについてですが座標軸についての調整はしませんでした。

Runtime Virtual Texture SampleノードのErrorを直します。

残りは微調整して終わりです。

以下の様になりました。

5.2 MR3D-Dev氏のUnreal Engine 4: Blend Megascan Assets with the Landscape Using Runtime Virtual Texturing (RVT) [5]を実装してみる

それでは自分で実装してみます。

と言うかもう大体のやり方は分かったので自分でほとんど全部やって見ます。

まずTutorialと同じ環境を作成しました。

真ん中に配置した岩はMegaScanからDownloadしました。

4.24のProjectにDownloadさせてこのProjectにMigrateしました。

何も設定変えないで出来たのでこれで良いです。

Landscapeは作成しただけです。

Landscape用のMaterialを以下の様に作成しました。

こんな感じです。

Normalの値はそのままパスしています。

この部分については後で調べます。

Runtime Virtual TextureをColor用とHeight用の2つを作成します。

Runtime Virtual Texture Volumeを2つセットしました。

更にそれぞれにRuntime Virtual Textureをセットしました。

今度はStatic Mesh、つまりLevel上に配置している岩のMaterialを作成します。

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

以下の部分は元々あったMaterialの実装です。

Tutorialで使用されてるStatic MeshのMaterialの実装と比べると非常に簡単な実装でした。

以下の部分はLerpのAlphaの値を決定する実装です。

先週の実装からそのままCopyしました。

Runtime Virtual Texture SampleからPassされたDataと元々あるMaterialの値をLerpで混合する部分です。

これで試してみます。

出来ない。

LandscapeにRuntime Virtual Textureをセットするのを忘れていました。

更にRuntime Virtual Texture VolumeのBoundをもう一回セットし直しました。

結果です。

逆になっている!

Static MeshのMaterialのLerpのAとBを逆に直しました。

結果です。

うーん。まあ良い感じです。

もっと近づいてみました。

岩とLandscapeの繋ぎ目は超ハッキリしています。

歪みもかなりあります。

Blendをもっと激しくしてみました。

ちょっと非現実的ですね。

5.3 Virtual TextureにおけるNormal Vectorの扱いについて

MR3D-Dev氏とUnreal Sensei氏はRVTの実装方法はほとんど同じやり方をしていました。唯一大きく違ったのはNormal Vectorの扱い方でした。

MR3D-Dev氏がNormalをそのままPassしているのに対してUnreal Sensei氏はNormalの座標軸をTangent SpaceからWorld Spaceに変換してパスして

World Spaceの状態でBlendした後Tangent Spaceに戻しています。

この理由を確認します。

2022-05-09のBlogを読むと

歪みを直すためにやっているみたいです。

一応、確認のために How to Blend Objects with Your Landscape - UE4 Runtime Virtual Texturing (RVT) Tutorial [7] を見直します。

7分35秒付近で説明していますが、LandscapeのNormal MapとStatic Mesh のNormal MapをBlendするためと言っています。

うーん。

これは別にTangent Space同士でBlendしても良い気がします。

6.Gaeaの勉強

今週もKlaus氏のTutorialをやって行きます。Gaea Beginner Tutorial Series : Part 4 - Advanced Texturing [6] をやります。

6.1 Gaea Beginner Tutorial Series : Part 4 - Advanced Texturing [6] を軽く見る

軽く全部見ました。

今回のTutorialの内容は簡単に言えば、更に細かいTextureを貼る為に新たなMaskを追加します。そのMaskの作成方法についてのTutorialです。

具体的に直す箇所についてですが、

  • 色が付いていない川

  • 単色過ぎる湖や雪

  • 川や湖以外の地形の部分のTextureも単一過ぎなので直します

<Base Texture

まずは大地の部分のTextureに変化を追加します。

Erosion Flowを使用します。

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

以下の方法で前のTextureと混合します。

ここで使用されているCombineノードはUEのMaterialで使用されているLerpノードと同じ様な働きをします。

当然、2番目のSatMapsには一番目とは違う色のTextureをセットします。

やり方を理解してしまえば何の事はないです。

上記のMaskはライン上にしか色を追加しません。もう少し大きな範囲の色分けをしたい時は以下の方法を使用します。

Voronoi ノードを使用して更に色分けします。

以下のような感じになります。

次に岩の部分に少しだけテカりを追加します。

Final Terrainから始めます。

以下の実装をしていました。

この実装は、山の一部にだけMaskをかけています。

こんな風にです。

元のColorとCombineします。

結果です。

テカりを加えると言うより侵食されて発生した汚れを追加した感じです。

ジオラマとか作成する人とかはこういうのに凄いこだわりがありそうです。

山頂の部分は雪が積もっているので別なMaskを作成します。

ここは元ある実装を改造して作成していて見ているだけでは良く分からなかったです。実装する時に詳しく勉強します。

山頂の部分は雪が積もっているので別なMaskを作成しているのかと思ったんですが、実装方法を見ていると単に雪の部分の位置を変更しているだけなのかもしれません。

次に雪の部分のMaskを作成します。緑を追加する時に雪の部分に緑が生えているのはおかしいからです。

緑は雪がある部分だけでなく雪が溶けて水となって流れる部分にも生えないそうです。

ので雪のある部分の下の部分にもMaskをします。

Snowfall ノードを更に追加する事で雪の有る部分の下の箇所にもMaskを追加します。

<River

Absノードを追加して川をはっきりさせます。

更にBlurノードを追加します。

<Lake

LakeにはBlurノードとWarpノードを追加しました。

<Vegetation

草を追加します。

一体どうやって緑を追加するのかと思ったらVegetationと言うNodeがありました。

雪の部分のMaskを追加します。

結果です。

以上でした。

6.2 Gaea Beginner Tutorial Series : Part 4 - Advanced Texturing [6] を実装する

それでは実装してみます。

先週作成した以下のTerrainに追加の実装を行います。

<Base Texture

まずErosion FlowからFXノードを作成しました。

結果です。

これ何しているのか思い出しました。地形のFlowの部分にMaskを作成しています。

最終的には、以下の実装になって

こんな感じです。

2つ目のSatMaps ノードには

以下の様なTextureを選びました。

この2つのSatMapsノードをCombineします。

Combineノードの設定は

です。

結果です。

おお、侵食されてFlowが形成されている箇所の色が変わっています。

以下に侵食されている箇所を拡大してみます。

MaskしてCombineする前の画像です。

違いは一目瞭然です。

もう少し大きな範囲の色分けをVoronoi ノードを使用して行います。

Voronoiノードの設定を

Tutorialを真似て以下の様にしました。

が実際に何をどうしているのかは全く理解していません。

Tutorialではそれぞれの値を弄るときに、少し強すぎるとか色々コメントしているのでそれぞれの値の機能を理解して弄っているのは間違いないです。

がその意味までは分かりません。

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

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

Voronoiノードがない状態です。

違いは一目瞭然ですが、良くなっているかどうかはまた別問題です。使い方を熟練しないと良い効果がでないNodeなのかもしれません。

次にテカりと言うか侵食の跡を追加します。

SlopとHeightノードをCombineした結果が以下です。

この白い部分しかMaskしません。

色々なMaskの仕方を覚える勉強としては面白いですが、このMaskの仕方だと山の一部だけにしか侵食を表示しないので、何か期待してたのとは違います。

結果です。

まあ、こういうMaskと言うかLayerを沢山作成して色々なTextureを加味していくと本物っぽくなる事は理解出来ました。

Height ノードの設定を変えて平地にMaskが掛かるようにしました。

結果です。

これはかなり良い気がします。

TutorialではCombineした後で、SurTexを追加していました。

こんなに変化しました。

無い時です。

緑を追加する時に雪のある部分のMaskが必要になるのでそれを作成します。

両方ともOutputがSnowなんですが区別つくんでしょうか?

結果はこんな風になっています。

<River

Riverです。

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

<Lake

Lakeは以下の部分を変更しただけでした。

結果です。

なんだかんだ言っていい感じに仕上がった気がします。

最初にしたら上出来でしょう。

<Vegetation

最後、緑を追加します。

Tutorialの通りに実装したら川が緑であふれてしまいました。

ので川のMaskを追加しました。

終結果です。

うーん。

まだ変な感じはしますが最初のTerrainなのでこれでも良しとしましょう。

6.3 Gaea Beginner Tutorial Series : Part 4 - Advanced Texturing [6] を勉強してみて

新たなTextureを足す事でもっと繊細な色合いを出すためにはMaskingの技術が大切と言う事でした。

今回、Maskingの方法を何種類も習いました。が覚えてはいません。やりきるので精いっぱいでした。来週、このMaskingの技術を整理して覚える事にします。

7.雪山のMapの作成

今週はMarvel Master氏のUnreal Engine Basic Dynamic Snow Tutorial - with Runtime Virtual Textures - UE4.25 [8]を実装します。

7.1 Unreal Engine Basic Dynamic Snow Tutorial - with Runtime Virtual Textures - UE4.25 [8]を実装する

今までTutorialを実装するのに使用していたProjectは3つあり、それぞれ4.24と4.27そして5.0のVersionです。

4.27のProjectはThird Person CharacterのTemplateを使用していなかったので今回、Third Person Character のTemplateを使用した新しいProjectを一個、4.27で作成しました。

5.0で試しても良かったんですが5.0はRuntime Virtual TextureのBugがあると言う噂を聞いているので、4.27でやる事にします。

Project SettingからEnable Virtual Texture SupportにCheckを入れて再起動します。

これでRVTが使用出来るようになったはずです。

Marvel Master氏はあんまり説明しませんね。その後直ぐにRuntime Virtual Textureを作成しています。

TutorialではSnow RVTと名付けていましたが、RVT_Snowにしました。

Runtime Virtual Textureの設定はDefaultのままでした。

次にMaterial、M_SnowStampを作成します。

Stampの発音ですが、Marvel Master氏、完全にエイと言っています。スタンプじゃなくてスティンプって言っています。

気になってYouglishで調べたんですが、アメリカ人はæと発音している人がほとんどで少なくとも私にはエイとまでは聞こえませんでした。

所が、How To Pronounce で検索して出て来たアメリカ英語のStampの発音は全部、エイって言っていました。物凄くはっきりとエイと言っています。逆にイギリス式の発音は完全にスタンプに聞こえました。

Stampの発音記号は、どっちもstæmpとなっていますね。

ThankとかLanguageとかと同じでæの音がエイに変わっているんでしょうね。

これからはStampの発音はスティンプとする事にします。一つ勉強になりました。

M_SnowStampの実装をやって行きます。

まずRuntime Virtual Texture Outputノードを追加します。

今回はLandscape用のMaterialに足跡のMaterialの情報をPassするのでRuntime Virtual Texture Outputは足跡用のMaterialにセットされる訳です。

M_SnowStampの実装内容です。

Radial Gradient Exponential ノードを使用したのは分かります。

以下の様なGradientを作成したかったからです。

ここで驚きなのは、Resultノードに何もパスしていない事です。

こういうMaterialの作成方法もあるんですね。

因みに私がこのNodeをResultノードと呼ぶ理由は、このNodeにCursorを乗せると以下の表示がされるからです。

公式のDocumentなんかだとMain Material Nodeと呼ばれているみたいで、Resultノードと言う言い方はしていないみたいです。

こういうのは全部統一してほしいです。

今度はLandscape用のMaterialを作成します。

以下の実装を組みます。

この部分はVirtual Textureの基本通りです。

次にWorld Displacementを使用するための設定をします。

この設定で理解しているのはD3D11 Tessellation ModeのPN Triangleだけです。

D3D11 Tessellation Mode については2021-12-06のBlogで勉強しています。

World Displacementの実装です。

この実装だと白い部分は150cmほど地面から高くなる訳です。

Landscapeを作成します。

普通に作成しました。

あんまり大きくても意味ないので小さくしました。

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

World DisplacementってCollusionとは無関係だったのか。

知らなかった。

以下に示した様にThird Person CharacterはLandscapeの元々の位置とCollusionしています。

でも雪の高さは150cmではないですね。せいぜい50cm位です。

これは多分、RVTの他の設定が終わっていないせいでしょう。気にせず続きをやって行きます。

TutorialだとLandscapeが点滅して消えたり現れたりしています。

これを直すそうです。

LandscapeのZ Boundに1000を代入しました。

数字を代入した途端に、雪の位置が変化しました。

確かGray Manの身長は185cmだったと思います。雪の高さが指定した150cm位になっていますね。

Z Bounds ExtensionにCursorを合わせると以下の説明が表示されました。

要するにWorld DisplacementでZ軸上にDistortする時はその最大の大きさをここで指定しておけ。と言う事でしょう。

うーん。

こんな機能があるの知らなかった。

Runtime Virtual Texture Volumeを追加します。

以下に示した様にVirtual TextureにRVT Snowをセットした後で、スポイトでLandscapeを選択してSet Boundsを押します。

すると以下の様にLandscape全体をCoverしてくれます。

Tutorialは4.25でVirtual Textureを使用しているのすが、何か上手く出来ないみたいです。

BP化してLevel上に配置する事でやっと使用出来るようにしていました。何か歴史を感じました。

最後に足跡用のMaterialをThird Person Characterから生成するようにします。

以下の実装で足跡用のMaterialを保持したStatic Meshを生成出来る様にしました。

Add Static Mesh Componentノードの設定がかなり複雑です。

以下に説明します。

まずManual AttachmentにCheckを入れます。そしてRelative TransformはCapsule Componentの位置をPassします。

Static MeshにはPlaneをセットします。

そしてそのMaterialにはこのTutorialの最初に作成した足跡用のMaterialをセットします。

当然、このStatic MeshはCollusionしません。以下の設定でCollusionしないようにします。

TutorialではCan Character Step Up OnはYesのままだったんですが念のためにNoにしておきました。

Virtual Textureをセットします。

この部分は先週、散々議論しました。

最後に影を消します。

これで完成です。

テストします。

以下の様になりました。

底が見えません。

良く分からないですが、TutorialではM_SnowStampのDensityの値を変化させているので同じ様にします。

関係ないみたいです。

この黒い幕みたいなのさえ取れれば完璧なのに!これなんなんでしょうか?

色々直したら出来ました。

Tutorialから間違って実装した箇所を直した部分もあったんですが、本質は関係なかったです。

このBugは単に足跡用のMaterialを持つStatic Meshの生成位置がThird Person Characterの胸の位置だったからでした。

以下の様に生成する位置を下げたら直りました。

まあ、細かい点で直さないといけない部分は沢山ありますが今週はここまでとします。

8.UI Designの勉強

先週までの勉強でUX DesignとかのDesign全般に関わる思想というか技術とか言うモノは存在しない。と結論づきました。そして使いやすいDesignとは自分とUserの間で作成していくしかないと言う事も分かりました。

ので今週から実際にUIを作成して行こうと思います。

Game Design:ポケモン+HxHの念能力( 戦闘システムの作成)で作成した戦闘システムにUIを追加していきます。

まず作成するのはScoreboardです。

この発想が無かったです。Userが一番、楽しみにしているのは成績表だったんです。

戦闘に勝ったらどの程度の勝ちだったのか、とか勝利から得られる報酬とかを知りたいわけです。逆に負けた時はそんなのは見たくない訳です。

成程でした。

8.1 Scoreboardの検証

まずScoreboardに入れる要素から考えます。

当然、報酬です。対戦相手を倒したので報酬がほしいです。

所が、このGame、報酬について何も考えていませんでした。

以下の案を考えました。

  • 戦闘が終わっても召喚されたMonsterHPは回復しない。死んだMonsterはもう使用出来ない。様にして回復薬や復活の薬を報酬として出す。
  • MPを作成して魔術師が魔法を使用すると減るようにする。魔力を回復するためのエリクサーを報酬で出す。
  • 召喚出来るモンスターが報酬として貰える
  • 金貨が貰える
  • 経験値が貰える

この中で強いMonsterが貰えるのは凄い報酬です。それ以外はどうなんでしょうか?あんまり興味ないですよね。

ルーレットを5回回せて、どれかの賞が貰えるようにした方が面白いかもしれませんね。

そもそもこのGame自体、どんなGameだったのか忘れてしまいました。一寸だけ遊んで思い出します。

まずいきなりStage 1から始まりますね。

Start画面がないです。

Start画面の作成が必要ですね。

後、BGMや効果音が全くないです。これも追加する必要があります。

更に、Stage1のUIですが西洋中世風ファンタジー感が全然ないです。これも直す必要があります。

次の画面です。先攻と後攻を決定します。

これも西洋中世風ファンタジー感が全くないです。

次の画面です。

召喚するMonsterを選択します。

うん。これは良い感じがします。

少なくとも前の二つのUIのDesignよりはかなりマシです。

決定ボタンのImageは変更が必要ですね。

次の3つ位が同じようなUIだったので一個だけ抜き出しましが、西洋中世風ファンタジー感が足りないです。

次のUI画面です。

Monsterの配置されている箇所を示す右とか中とかのImageに西洋中世風ファンタジー感が全く無いです。更にCommentを表示しているBoxが質素過ぎます。

Userの攻撃方法を決定するUIです。

使われている全てのImageにImageに西洋中世風ファンタジー感が全く無いです。更に表示されているMonsterたちが右翼、中央、左翼のどこにいるのかも不明です。

戦闘に勝利した場合、Widgetで「戦闘に勝利した!」とだけ表示され直ぐに次のStageが始まります。

うーん。問題点がかなり分かってきました。

今週は取りあえず、Scoreboardの製作に集中しますが、今あるWidget達に西洋中世風ファンタジー感を注入するのも必要です。

Game自体は結構面白いです。

戦闘が始まってからやらないといけない事が結構あるので飽きないです。

8.2 Scoreboardの作成

Scoreboardの内容ですが、今のこのGameからでは作成出来ないので、以下の条件がある仮定でデザインします。

  • 戦闘が終わっても召喚されたMonsterHPは回復しない。
  • 死んだMonsterはもう使用出来ない。
  • MPを作成して魔術師が魔法を使用すると減る。
  • 金貨でItemMonsterが買える。
  • 経験値が上がると使用出来る魔法が増える。

となるとScoreboardには

  • Monster回復薬
  • Monster復活薬
  • MP回復薬
  • 金貨
  • 経験値

がどれくらい貰えたかの表示が必要になります。

更に召喚Monsterを貰えた場合は、どのMonsterが貰えたのかの表示が必要になります。

Monster以外の報酬を表示すると以下の様になるんでしょうか?

これだけだと質素過ぎます。

以下の様に改良しました。

こっちの方が全然マシです。

9.Blenderの勉強

今週と言うか、先週やりたかったのは、夏森轄(なつもり かつ)先生の【Blender】セルルック講座 ~ノード、輪郭線、法線転写、RGB分離~ [9]の勉強です。

UEにおけるToon Shadingの組み方はUnreal CG氏のやり方ですが大体理解したので

今まで勉強したBlenderの知識と組み合わせれば、大体は理解出来るでしょう。

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

まずは全体を軽く見て流れを掴みます。

私のBlender歴はまだ3カ月なので分からない部分は飛ばし、分かる部分だけ勉強します。

日本語のTutorialで勉強する事自体がほとんど初めてですが、もっと初めてなのがProgrammerやEngineerではなくDesignerの人が作成したTutorialを勉強する事です。

このCharacterの造形を見てもArtistとして第一線で活躍している人と思われます。

それでProgrammerやEngineerの常識では引用の範囲は超えないようにして記録しますが、DesignerやArtiestとはその常識の範囲が違う可能性もあります。

もし本人から苦情が来た場合は、この節は全部消します。

<はじめに>

ここはこのTutorialでどんな事を勉強するのかについての解説でした。

そんだけでした。

<セルルックとは何か>

ここではセルルックとは何かについて説明されています。

だそうです。

英語と日本語のバイリンガルとしての個人的な意見ですが、この名称について日頃から思っている事をここに書いておきます。

まず日本でアニメ調のRenderingについて勉強している人には常識な事かもしれませんが、セルルックと言う英語は和製英語アメリカでは全く通じないです。

そのアメリカ人が物凄く日本のアニメに詳しい場合はもしかしたら理解してくれるかもしれませんが、ほとんどのGraphicに関わるアメリカ人にとっては???な英語です。

英語では、こういう本物そっくりではないRenderingについてStylized RenderingもしくはToon Renderingと言います。

ただし、アメリカでは日本のアニメーションを西洋で作られたAnimationと区別するためにAnimeと言います。英語でAnime と言ったら日本で作られたアニメーションを指します。

のでToon Renderingと言う場合は所謂ディズニー風のアニメのRenderingを指している場合もあり、厳密に日本のアニメ風のRenderingを指す英語はないです。

となると日本人が、アニメ風のRenderingをするための技術をセルルックと呼んでいる以上、例え通じなくても、英語でもセルルックと呼ぶのが正しい気もします。

ただし、英語でCel Lookと言った場合、Celがセル画の事を指している事なんて、Graphic関係の仕事をしているアメリカ人ですら分かりませんので、細胞のCellの事と思われ「細胞が見る。」と言いたいと思われます。しかもその場合はCell looksが文法的に正しくなるので「細胞が見ね。」みたく本当に訳わからん英語になります。

Lookには「見た目」と言う意味もあり、その場合は「細胞みたいな見た目」と言う意味に取られます。

この場合だと、Celがセル画を指していると理解出来たら「セル画のような見た目」と日本人が取ってほしい意味に近づきます。しかしその場合でも「セル画のような見た目のRendering」まで言わないと意味不明です。Cel Look Renderingとまで言う必要があります。

そう言う訳で、日本のアニメ風のRenderingを指す絶対的に正しい英語はないんです。

が、誰も使ってないんですが、日本のアニメ風のRenderingを指す最適な言い方があります。

それは、そのものずばりのアニメ レンダリングです。

これはそのまま英語でAnime Renderingと言っても日本人の考えている定義とほぼ同じ意味でアメリカ人に通じます。英語でも日本製のアニメ風のRenderingと言う意味になります。

今は誰もAnime Renderingという言い方をしている人はいませんが、もし言ったら日英共に凄く通じる言葉になります。

無駄話が過ぎました。

続きを勉強します。

このTutorialではセルルックの定義として

  • 光と影をはっきりさせる。
  • 輪郭線を入れる
  • 平面的に見せる

の3つを上げています。

おお。です。

輪郭線の入れ方と平面的に見せる方法は特に知りたいです。Blenderでのやり方をそのままUEでやればアニメ調のRenderingが出来る訳ですから。

<ノードとは何か ?シェーダーエディターの使い方>

BlenderにおけるMaterial、Shader、そしてNodeについての解説をしています。

BlenderのMaterialはほとんど触った事はないですが、この部分はUEのMaterialと同じと解釈しています。

また、余計な事を書いて置きますが、Nodeの意味ですが、勿論結び目と言う意味はありますが、この場合のNodeは数学の一分野であるGraph theoryから来ています。

以下に示した様にGraph theoryでは、モノとモノの関係性を線で繋いで表します。

この時のモノに当たる部分をNode、線に当たる部分をEdgeと呼びます。ここからNodeの名称は来ています。

Principled BSDFについて解説されています。

ついでなんでこのNodeについて勉強する事にします。

まずBSDFはWhat is a BSDF? [10]によるとBidirectional Scattering Distribution Functionの略だそうです。

Bidirectional Scattering Distributionは遥か昔勉強した記憶があります。そんなに重要じゃないです。

Principled BSDFのRendering方法が重要です。

Blenderの公式のDocumentのPrincipled BSDF [11] によるとUnreal EngineのRendering、所謂、PBRと同じ事を行っているそうです。

と言う事はPrincipled BSDFのParameterはUEのMaterialのResultノードと同じになるはずです。

試してみます。

Base Colorに色を追加してみました。

赤くなりました。

UEのMaterialと同じです。

TextureをこのBase Colorにパス出来るか試してみます。

この木の盾の絵をTextureとしてBase Colorにパスしてみます。

結果です。

一応はTextureを貼る事が出来ました。

UEにおけるTexCoord[0]みたいな役割をするNodeが分かればTextureのサイズも調節出来ると思います。

次のSubsurfaceはUEのMaterialには無い項目です。

でもこれらはPBRの原則から推測すると表面の下の反射や屈曲に関するParameterのはずです。皮膚や氷などの特殊な場合を除いて無視していいはずです。

ので次に行きます。

Metallicです。

これもUEのMaterialと全く同じですね。試しに1にします。

結果です。

Roughnessの値も変化させないと金属なのかそれ以外なのか良く分からないですね。

Specularです。

これもUE同じでしょう。Default値のままにしておきます。

次はSpecular Tintです。

これは何なのか分かりません。

やっとRoughnessが出て来ました。

この値を0にしてみましょう。鏡みたく周りの風景を写すはずです。

この状態でMetallicの値を0にしてみました。

ピカピカに磨いたプラスチックのような質感になるはずです。

うーん。あんまりプラスチック感はないですね。

まあいいです。次のParameterを見ます。

ずっとあんまり必要じゃないParameterが並んでいるので無視してEmissionに行きます。

これ見るとBlenderのPrincipled BSDFのEmissionはFloatで明るさのみを管理しているみたいです。

後、最大値が1になっていてUEと違ってこの値を使用してMeshを光らせる事は出来ないみたいです。

Alphaです。

試しに0を入れてみましたが真っ黒くなるだけで透明にはなりませんでした。

Normalもありました。

ここにNormal Mapを繋げるんでしょうね。

ただBlenderのNormal Mapの座標がどうなっているのか分からないので実際に試すのは止めておきます。

まあ、大体は理解出来ました。

以下のBoxですが、Shift + Aで表示されるそうです。

これずっと分からなかったです。

色々試して結局分からず、最終的には以下のAddからNodeを追加しました。

Tutorialでは、地味ですが結構重要なNodeの操作方法の説明が続いています。

これ。

Node同士を繋げるのはどのSoftwareも大体同じ操作ですが、間違えて繋げたNodeを外す時はそれぞれのSoftwareで全然違います。そしてNodeを繋いでいる線を外す時に凄い困ります。

Blenderの場合は繋げた時と同じやり方で外せるそうです。

試してみました。

外せました。

夏森轄(なつもり かつ)先生はその3Dモデルが凄くて更にRenderingも凄いのでDesignerだと勝手に思っていたんですが、この論理的な説明を聞いてるとEngineerかProgrammer畑の人なのかもしれませんね。説明が簡易で分かり易い上に、初心者にとって本当に必要な情報を教えてくれます。

ここまで勉強したらもう時間が無くなってしまいました。今週のBlenderの勉強はここまでとし残りは来週勉強する事にします。

10.まとめと感想

今週は、別にやらないといけない事があってあんまりUEの勉強時間が取れなかったです。来週はもう少し勉強出来ると思います。

11.参照(Reference

[1] CGHOW. (2022b, May 18). Mesh Flipbook in UE5 Niagara Tutorial | Download Files [Video]. YouTube. https://www.youtube.com/watch?v=zJf1extn3kE

[2] Cloward, B. [Ben Cloward]. (2022, May 5). Texture Tile Break-up - Shader Graph Basics - Episode 45 [Video]. YouTube. https://www.youtube.com/watch?v=EB61JuxGTbE

[3] Epic Games. (n.d.). Post Process Effects. Unreal Engine Documentation. Retrieved June 12, 2022, from https://docs.unrealengine.com/4.27/en-US/RenderingAndGraphics/PostProcessEffects/

[4] MR3D-Dev. (2020, September 9). Unreal Engine 4: Ultimate Beginner’s Guide to Runtime Virtual Texture Blending (RVT) [Video]. YouTube. https://www.youtube.com/watch?v=_u-HdkJ3woE

[5] MR3D-Dev. (2020, September 10). Unreal Engine 4: Blend Megascan Assets with the Landscape Using Runtime Virtual Texturing (RVT) [Video]. YouTube. https://www.youtube.com/watch?v=OP3m-LY6BZA

[6] Klaus. (2022, January 20). Gaea Beginner Tutorial Series : Part 4 - Advanced Texturing [Video]. YouTube. https://www.youtube.com/watch?v=vHqTqrkjQVA&list=PLyNtvXvNIFMMHnW1_-hXO3RNPp_Z5CExF&index=4

[7] Unreal Sensei. (2021, April 23). How to Blend Objects with Your Landscape - UE4 Runtime Virtual Texturing (RVT) Tutorial [Video]. YouTube. https://www.youtube.com/watch?v=xYuIDFzKaF4

[8] Marvel Master. (2020, June 19). Unreal Engine Basic Dynamic Snow Tutorial - with Runtime Virtual Textures - UE4.25 [Video]. YouTube. https://www.youtube.com/watch?v=YwNJUTz2L-U

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

[10] Stack Exchange. (2013, June 9). What is a BSDF? Blender Stack Exchange. Retrieved June 12, 2022, from https://blender.stackexchange.com/questions/785/what-is-a-bsdf

[11] Blender. (n.d.). Principled BSDF — Blender Manual. Retrieved June 12, 2022, from https://docs.blender.org/manual/en/latest/render/shader_nodes/shader/principled.html