UE4の勉強記録

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

「Unreal Engine 4.xを使用してRPGを作成する」の足りない部分を作成する 村人用のAIの開発 Part3

f:id:kazuhironagai77:20211121225859p:plain

<前文>

<Kyle Rittenhouse Trialって何?>

最近まで全く知らなかったんですが、今アメリカではこの裁判のニュースでもちきりです。それで慌ててどんな事件なのか調べました。

所があまりにも断片的なソースが多すぎて全体像の把握が出来ません。

NY TimeのこのVideo、A Fatal Night in Kenosha: How the Rittenhouse Shootings Unfolded | Visual Investigations [1]を見てやっとどんな事件だったのか全体像が分かりました。

今更、この話題を追っても遅きに失するで、既にあらゆる議論が尽くされてしまっています。

しかも日本にいるとアメリカの生の空気を感じる事が出来ないので、どっちの意見が事実に近いのかとかそういう事も良く分からないので軽はずみに自分の意見を言う訳にもいきません。

ただ、この映像を見るともうアメリカは実質、内戦状態なんじゃないの?と思ってしまいます。

そしてそれは私がずっと前から抱いていた不安、アメリカの衰退の始まりのような気がします。

日本もかなり終わっていますが、アメリカもこれじゃボロボロじゃないですか。

右派と言うかこの武装市民に共通する思想、「力尽くで、秩序を回復する。」は問題の解決からほど遠いです。成功しても相手に憎しみを生み出し、将来的には更なる巨大な敵を生み出します。しかし彼等はその事に気が付いておらず、Footballの試合でもしているかのようにひたすら力押ししています。

対する左派は、上下の連結が完全に終わっていて上は自分の利益ばっかり追って下に負担ばかり押し付けていています。下が上に文句を言うと右派が邪魔してるからそれは出来ないと言いますが、右派が邪魔出来ない分野、例えば大学ローンの免除なんかでも全くやろうとしてない所を見ると右派の邪魔なんで元から存在していない事が丸わかりです。

ハッキリ言って詰んでいます。

しかしだからと言って日本に未来がある訳では全然なく日本の状況はアメリカより更に悪いかもしれません。

日本は技術立国であるにも拘わらず、企業は30年の間、技術の積み重ねを止めてしまいました。

アメリカにいた時に韓国人の友達から良く聞いたのが、韓国だと夜の10時まで実験してるがアメリカは8時過ぎるとアメリカ人から文句が出るので8時までしか実験出来ない。これじゃ韓国との競争に勝てない。と言う話です。

その時、私は日本の企業は5:30で仕事を終にしてるだけでなく、沢山の上司の許可を取らないとそもそも実験すら出来ない事を知っていたのでこれって日本やばいんじゃないの?と思いました。

大体、PHP文庫を読むと1980年代のバブルの頃の日本では、技術系の会社は徹夜で実験してた事、近所の人達からあそこの会社は電気が消えない。って言われている話が散々書かれています。30年実験しなかったらもう外国の技術に追い付く事は無理ですよね。

が、日本のやばさは企業だけじゃないんです。

日本はそもそも東大クラスの工学系の大学院生の数が少なすぎるんです。例えばComputer Scienceの分野だとアメリカや中国は5万人位います。日本は精々1000人ぎりいるかいないか位でしょう。

基本的に工学系の大学院生ってのは給料もらって勉強するんです。考えたらすぐ分かる事ですが、東大クラスの工学系の大学院に入学できる学力を持っている学生なんでどの国でもそんなにいません。だから給料払う事で世界中からリクルートしてくる訳です。そうやって国が科学技術の基礎力を保持しつつ、企業がお金になりそうな分野の技術をリスク取って開拓する訳です。

戦闘力に50倍の開きがあったらポケモンみたいなタイプ別に優劣があったとしても勝負にならんでしょう。

更に日本は法律を変えてまで、中村修二氏のような一人で革命的な開発をした人を追い出してしまっています。だから奇跡的にある分野だけ成功する可能性まで潰してしまっています。私が噂で聞いたのは次世代のCPUは彼がアメリカに渡った後に開発した素材を使用して作成するらしいです。他の候補もあるらしいですが彼が開発した素材を使用したものが最も有力な候補だそうです。

日本も完全に詰んでいます。

前文には、日本人が誤解しているアメリカ、特に日本文化とキリスト教文化の違いから生じる誤解とその対策について在米歴10年の私が気が付く範囲ですが書いておく予定でしたが、今回は単なる私の感想になってしまいました。

たまにはこんなのも良いでしょう。

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

<本文>

1.今週の予定

今週は以下の内容をやっていきます。

  • Niagara: Position変数の調査
  • Material : Content Exampleをみる
  • NPCAIを作成するためのAIの復習の続き(Debugについて)
  • World CompositionによるMap1の作成(Itemの配置など)
  • UE5におけるWorld Partitionの勉強の続き

2.Niagara: Position変数の調査など

2.1  先週のまとめ

先週、Twisted Ribbon in UE4.27 Niagara Tutorial | Download Files [2] を勉強して以下に示したRibbonを作成しましたがこれが原点にしかおけません。

f:id:kazuhironagai77:20211121230009p:plain

Niagara SystemのParticle:Position変数の値に元のPositionの値を追加すれば指定した位置におけるはずと試してみました。

f:id:kazuhironagai77:20211121230023p:plain

そしたら

f:id:kazuhironagai77:20211121230036p:plain

こんな変な形になってしまいました。

今回はParticle:Position変数について勉強してParticleの発生位置を自由に設定できるようにします。

2.2 Niagara: Position変数について

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

これをLevel上に配置すると配置した場所にParticleをまき散らします。

f:id:kazuhironagai77:20211121230116p:plain

別に原点に拘る事もありません。

このEffectのParticle Position変数を見てみます。

Particle Spawn SectionのSphere Location ModuleのSphere LocationにParticle:Position変数が使用されています。

f:id:kazuhironagai77:20211121230211p:plain

以下の様に変形してZ軸方向に500を足してみます。

f:id:kazuhironagai77:20211121230228p:plain

地面から5m位の位置からParticleが発生するようになりました。

f:id:kazuhironagai77:20211121230252p:plain

やっぱりParticle : PositionがNSの発生する位置を指定しています。

2.3 Twisted Ribbon in UE4.27 Niagara Tutorial | Download Files [2]の最初だけ作成してPositionをみる

最初の部分だけ作成しました。

f:id:kazuhironagai77:20211121230330p:plain

Set:Particle Positionの設定です。

f:id:kazuhironagai77:20211121230353p:plain

これでRibbonはいつでも原点に現れます。

f:id:kazuhironagai77:20211121230418p:plain

これを以下の様に変えます。

f:id:kazuhironagai77:20211121230510p:plain

これで元々のPositionの値がParticle:Positionに追加されるのでNSを置いた位置にNSが現れるはずです。

f:id:kazuhironagai77:20211121230540p:plain

おお、出来ました。

でもNSの位置を移動させると付いて来ません。

f:id:kazuhironagai77:20211121230602p:plain

あ。これの意味は分かりました。

Emitter Update SectionのEmitter State ModuleのLoop BehaviorにOnce、Particle Update SectionのParticle State ModuleのKill Particles When Lifetime Has Elapsedのチェックを外しているからです。

f:id:kazuhironagai77:20211121230632p:plain

f:id:kazuhironagai77:20211121230639p:plain

試しにLoop Behaviorにinfinity、Kill Particles When Lifetime Has Elapsedのチェックを入れてみます。

f:id:kazuhironagai77:20211121230712p:plain

移動しても今度はついてきます。

f:id:kazuhironagai77:20211121230737p:plain

うーん。これで生成場所はNSの場所になりますね。

でも前のやり方でもPlayを押してテストすると指定した場所にRibbonを表示しますね。

Play前です。

f:id:kazuhironagai77:20211121230757p:plain

Play中です。

f:id:kazuhironagai77:20211121230818p:plain

これだったら前のやり方でも悪くはないですね。

2.4 Convertible Floor in UE5 Niagara Tutorial [3] を勉強する

本当は自分でNiagaraRibbon Renderingを使用して何かOriginalなVFXを作成しようと思い実際に試したんですが、滅茶苦茶になってしまいました。まだ自分だけで何かを作成するのは無理でした。守破離で言えばまだ守の段階でした。ので今回はCGHOW氏のConvertible Floor in UE5 Niagara Tutorial [3]を勉強する事にします。

f:id:kazuhironagai77:20211121230851p:plain

これをやっていきます。

びっくりしたんですがCGHOW氏の本名ってAshif Aliだそうです。この名前から推測するとほぼ100%イスラム教徒ですね。勝手にインド出身と思っていましたがもしかするとパキスタンの方かもしれませんね。

うーん。インド辺りは良く分からないです。

今週は兎に角、しっかり学ぶを目標にします。

いつも通りFountain Effectから開始しています。

f:id:kazuhironagai77:20211121230945p:plain

要らないModuleを全部消します。

f:id:kazuhironagai77:20211121231005p:plain

今回はSpawn Rateまで消しています。

Spawn Burst Instantaneous Moduleを使用するんでしょうか?

Spawn Particles in Grid Moduleを使用しています。

f:id:kazuhironagai77:20211121231035p:plain

後、このModuleを使用するためにParticles Spawn SectionにGrid Location Moduleを追加しています。

f:id:kazuhironagai77:20211121231059p:plain

Spawn Particles in Grid Moduleが存在しているのすら初めて知りました。これってUE5 のNiagaraだけに存在しているんでしょうか?

確認してみます。

普通にありました。

先に進みます。

以下のようなParticleが作成されています。

f:id:kazuhironagai77:20211121231131p:plain

Emitter Update SectionのSpawn Particles in Grid ModuleのZ Countを0にセットします。

f:id:kazuhironagai77:20211121231158p:plain

こんな風にSpriteの配置が変化しました。

f:id:kazuhironagai77:20211121231219p:plain

今度はRender SectionにMesh Renderer Moduleを追加します。勿論、Sprite Renderer Moduleは消します。

f:id:kazuhironagai77:20211121231244p:plain

Mesh Renderer ModuleのMeshに1M_Cubeを追加します。

f:id:kazuhironagai77:20211121231304p:plain

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

f:id:kazuhironagai77:20211121231330p:plain

今度はParticle Spawn SectionのGrid Location ModuleのXYZ DimensionsのXとYの値を110にセットしました。

f:id:kazuhironagai77:20211121231357p:plain

f:id:kazuhironagai77:20211121231407p:plain

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

f:id:kazuhironagai77:20211121231434p:plain

今度はこのCubicに色を付けるためのMaterialを作成します。

f:id:kazuhironagai77:20211121231454p:plain

今回のMaterialはこんだけです。

Renderer SectionのMesh RendererのOverride Materialsにチェックを入れて先程作成したMaterialを追加します。

f:id:kazuhironagai77:20211121231626p:plain

f:id:kazuhironagai77:20211121231640p:plain

こんな色に変わりました。

f:id:kazuhironagai77:20211121232318p:plain

今度はScratch Moduleを使用して何かするそうです。

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

f:id:kazuhironagai77:20211121232343p:plain

うーん。Particle:Position変数のXの値を取り出してるだけですね。

Particle Update SectionにColor Moduleを追加しまう。

f:id:kazuhironagai77:20211121232410p:plain

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

f:id:kazuhironagai77:20211121232431p:plain

二つの色を表示するためのLerpを使用してるんですね。

成程です。

更にそのLerpに先程Scratch Moduleで作成した変数であるOutput Xをセットしてます。

結果です。

f:id:kazuhironagai77:20211121232458p:plain

ああ。Xの位置は真ん中だからこういう色の配置になっているんですね。

でもこれXの位置を動かす必要がありますよね。

どうやって動かすんでしょうか。

まず先程のXの値にSubノードを追加します。

f:id:kazuhironagai77:20211121232626p:plain

引く値はInputでModuleの外で指定します。

f:id:kazuhironagai77:20211121232652p:plain

あ。

何となくですが想像つきました。

これで移動するための変数をWipe変数にセットするのかと思ったら、その前に色の変化がShape過ぎるからそちらを直すそうです。

その為にDivideをSubtractの後に追加しました。

f:id:kazuhironagai77:20211121232712p:plain

何でこれで色がFadeするのか不明です。

試してみます。

f:id:kazuhironagai77:20211121232737p:plain

色がFadeしました。

f:id:kazuhironagai77:20211121232758p:plain

理由は後で考える事にします。

更に以下の実装を追加する事で、

f:id:kazuhironagai77:20211121232816p:plain

こんな色に変化します。

f:id:kazuhironagai77:20211121232837p:plain

この理由については後で考えます。

WipeにCurveを追加します。

f:id:kazuhironagai77:20211121232858p:plain

DefaultではCurve IndexにはNormalized Ageがセットされているので、

f:id:kazuhironagai77:20211121232920g:plain

色が動きます。

今度は色だけでなくMeshのサイズも変更します。

MeshのサイズもColorでやった時と同じようにoutput X変数を使用すれば出来ます。

f:id:kazuhironagai77:20211121233001p:plain

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

f:id:kazuhironagai77:20211121233027p:plain

そしたらMeshが消えてしまいました。

f:id:kazuhironagai77:20211121233048p:plain

その理由は、Particle Spawn SectionのInitialize Particle ModuleのMesh Scale ModeがUnsetになっているからです。

f:id:kazuhironagai77:20211121233112p:plain

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

f:id:kazuhironagai77:20211121233133p:plain

またBlockが表示されるようになりました。

f:id:kazuhironagai77:20211121233159p:plain

Particle Update SectionのScale Mesh Size Moduleに

f:id:kazuhironagai77:20211121233223p:plain

以下のセットをします。

f:id:kazuhironagai77:20211121233244p:plain

結果です。

f:id:kazuhironagai77:20211121233318g:plain

動いていますね。

よく見ると下側にもBlockが伸びています。

f:id:kazuhironagai77:20211121233352p:plain

下にBlockが伸びても仕方ないので直します。

Renderer sectionのPivot OffsetにZにだけ50を追加しました。

f:id:kazuhironagai77:20211121233418p:plain

結果です。

f:id:kazuhironagai77:20211121233445g:plain

0より下はないですから。

回転を加える場合です。

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

f:id:kazuhironagai77:20211121233521p:plain

設定は以下の様にします。

f:id:kazuhironagai77:20211121233544p:plain

こんな結果です。

f:id:kazuhironagai77:20211121233614g:plain

回転が途中で止まってしまうのでRotation VectorのYの値を2.5に変更しています。

よく見ると波が最後まで行かない場合もありますね。

どっかでやり方を間違えている可能性がありますね。

この後でCubeのサイズを変更する方法も紹介していますが、今週はここまでとして残りは来週やる事にします。

3.Material : Content Exampleをみる

今週はContent ExampleのMaterialの項目をみてどこが理解出来てどこの勉強が足りないのかを把握する事にします。

Content ExampleにはMaterialに関係したMapが以下に示した数だけあります。

f:id:kazuhironagai77:20211121233655p:plain

一個ずつ見て行きましょう。

3.1 Material Nodesを見る

多分これが一番基本的なやつでしょう。これから見て行きます。

<Base Color

f:id:kazuhironagai77:20211121233722p:plain

Base Colorです。

やっぱりこれがMaterialの一番基本的な機能を紹介していますね。

<Metallic

Metallic の機能についての解説です。

f:id:kazuhironagai77:20211121233747p:plain

Metallicは0か1以外の値は取れないはずなのに0.5が例として使用されています。

f:id:kazuhironagai77:20211121233805p:plain

一応解説には0.5の値を取る場合はほとんどないと書かれています。

Metallic が1の時はMaterialが金属の時です。

f:id:kazuhironagai77:20211121233825p:plain

このScreenshotを見て突然思いだしたのですが、Specular lightを鏡面反射光と訳している3d Graphicsの教科書があります。

この訳って結構誤解を生む表現だと思います。

鏡面反射光と聞くと普通は上のScreenshotだと鏡のように回りの風景を写している部分を指している事になりかねないからです。3D GraphicsにおいてSpecular lightは白く輝いている点状の反射光を指します。

f:id:kazuhironagai77:20211121233856p:plain

f:id:kazuhironagai77:20211121233902p:plain

の事です。

これはDot Productと内積以上のクソ訳ですので、いつか徹底的に追及します。

<Specular

Specular Reflectionの話をしていたらSpecularについての解説が次にありました。

f:id:kazuhironagai77:20211121233930p:plain

Specularが0のやつを見れば分かりますが白く光ってる反射光がありません。

f:id:kazuhironagai77:20211121233958p:plain

これがSpecular lightが無い状態です。

Specularが1の時です。

f:id:kazuhironagai77:20211121234019p:plain

白く光っている箇所がありますね。この部分がSpecular lightに当たります。

いやいや、Specularが0でも白く光ってる部分があるじゃないか?と指摘する人がいるかもしれません。

確かに下のScreenshotをみるとSpecularが0にもかかわらず白く光っています。

f:id:kazuhironagai77:20211121234044p:plain

これはうろ覚えなんですが、PBRの計算方法では、Roughnessの値が最終的にSpecularの値に幾分かの影響を与えていたからだと思います。

昔、Epic社の出した論文(たしかReal Shading in Unreal Engine 4だったと思います。)を元にOpenGLでPBRの実装を自分で作成したのですが、その時Roughnessの値がSpecularの値に還元されているのに、自分でSpecularの値を指定する事も出来るので混乱した事を覚えています。

実際、この灰色のプラスチックの部分のMaterialを見ると

f:id:kazuhironagai77:20211121234108p:plain

Roughnessに0.2の値が加えられています。

ただMetallicの値が0.3と自然界ではありえない値がセットされているので、それもこの白い反射光の生成に影響を与えている可能性もあります。

<Roughnessについて>

Metallicの項でSpecularについての話題を出したら次の項がSpecularで、Specularの項でRoughnessについての解説をしたらこの項がRoughnessでした。

f:id:kazuhironagai77:20211121234140p:plain

Roughness = 0の場合です。

f:id:kazuhironagai77:20211121234204p:plain

黒い部分に使用されているMaterialの実装です。

f:id:kazuhironagai77:20211121234232p:plain

Roughness=0.8の場合です。

f:id:kazuhironagai77:20211121234255p:plain

うーん。全くSpecular lightがなくなりました。

<Emissive について>

f:id:kazuhironagai77:20211121234804p:plain

Emissiveに1以上の値を入れると光始める事は知っています。

それ以上の事は知らないです。

<Opacityについて>

f:id:kazuhironagai77:20211121234846p:plain

OpacityはMaterialの設定がDefaultではなかったはずです。

それから確認します。

f:id:kazuhironagai77:20211121234911p:plain

Blend ModeがAdditiveに変更されていますね。

これについてちょっと調べて見ます。

公式のDocumentであるMaterial Blend Modes [4] をみるとAdditiveの項に以下に示した様な詳しい解説がありました。

f:id:kazuhironagai77:20211121234939p:plain

黒が透明として扱われると書かれていますね。貴重な情報です。

そう言えばMaterialに関する公式のDocumentを今まで見ていませんでした。

ちょっと見てみます。

公式のDocumentのMaterials [5] です。

f:id:kazuhironagai77:20211121234959p:plain

色々な分野の解説がここにまとめられていました。

f:id:kazuhironagai77:20211121235019p:plain

この辺の話題は直ぐに読みたい分野です。

f:id:kazuhironagai77:20211121235040p:plain

f:id:kazuhironagai77:20211121235047p:plain

この分野なんか今、勉強している所と丸被りしてます。

f:id:kazuhironagai77:20211121235121p:plain

まだ見なければならないMaterialがこんなにあるので、今回は公式のDocumentは読みませんが後でまとめて勉強します。

f:id:kazuhironagai77:20211121235146p:plain

<Opacityをみる>

f:id:kazuhironagai77:20211121235215p:plain

Sub Surfaceって人間の皮膚を再現するための機能でしたっけ。

Sub Surface無しが左、有りが右です。

f:id:kazuhironagai77:20211121235242p:plain

何か粘土っぽさが増している気がします。

Materialの設定をみるとBlend ModeがOpaqueで更にShading ModelがSubsurfaceにセットされています。

f:id:kazuhironagai77:20211121235302p:plain

公式のDocumentのShading Models [6] にはSubsurfaceの解説が載っています。

f:id:kazuhironagai77:20211121235340p:plain

更にその先のLinkにSubsurface Shading Model [7]もあります。

ぱっと読みましたが、あんまり詳しい解説ではなかったです。

左がOpacityが0で、右がOpacityが0.5です。

f:id:kazuhironagai77:20211121235413p:plain

右の方が人間の皮膚などの光の反射をより正確に表しているはずですが、こうやって単に2つ並べると右の方が汚いです。

<Opacity Maskについて>

f:id:kazuhironagai77:20211121235443p:plain

この機能はNiagaraの勉強で散々使用したので知っています。

設定はBlend ModeがMaskedですね。

f:id:kazuhironagai77:20211121235514p:plain

公式のDocumentであるMaterial Inputs [8] にOpacity MaskとOpacityの違いが説明されていました。

f:id:kazuhironagai77:20211121235539p:plain

透明が不透明かをはっきりさせたい時はOpacity Maskを使用する訳ですね。

<Normalについて>

f:id:kazuhironagai77:20211121235601p:plain

うーん。

このまま見てるだけだとあんまり勉強にはならないかもしれませんね。

Normal Mapと言うと今制作中のGameのガラス瓶の一部に陰が全くつかない理由はそれらのガラス瓶に使用されているMaterialにNormal Mapが使用されていないからじゃないのか?という仮説を随分前に建てました。

f:id:kazuhironagai77:20211121235627p:plain

これですね。

f:id:kazuhironagai77:20211121235646p:plain

今考えるとNormal Mapの影響はあんまりないでしょうね。

むしろBlend Modeの設定が違うのが理由でしょうね。

こっちが陰のないガラス瓶に使用されていたMaterialの設定で

f:id:kazuhironagai77:20211121235706p:plain

こっちが陰のあるガラス瓶に使用されているMaterialの設定です。

f:id:kazuhironagai77:20211121235727p:plain

実際にこのNormal Mapの例のNormal Mapを使用していない方も陰がしっかりついています。

f:id:kazuhironagai77:20211121235745p:plain

試しにこっちのMaterialの設定をみたら

f:id:kazuhironagai77:20211121235810p:plain

陰なしのガラス瓶と一緒でした。

うーん。

分からん。

<World Position Offsetについて>

f:id:kazuhironagai77:20211121235909p:plain

使用されているMaterialの内の一つを開いてみました。

f:id:kazuhironagai77:20211121235932p:plain

設定は一番基本のやつでした。

f:id:kazuhironagai77:20211122000015p:plain

これも何でMaterial内でStatic Meshの位置が動かせるんだ。とか、動かせるようになっているんだ。とかいぶかしげに思うかもしれませんが、OpenGLなどのvertex shaderを思い出すと、ああ、GPUの中でVertexの位置を動かしているからか。と理解出来ます。

<World Displacement について>

f:id:kazuhironagai77:20211122000046p:plain

初めて知らない奴に出会いました。

なんだこれは。と思って見たらTessellationについてでした。

f:id:kazuhironagai77:20211122000108p:plain

何だ。Tessellationならこの前(2021-10-31のBlog)使用したわ。と安心してMaterialを開いたら

f:id:kazuhironagai77:20211122000129p:plain

World Displacement とTessellation Multiplierは違いますね。

これは個別の勉強が必要ですね。後でする事にします。

<Tessellation Multiplierについて>

Tessellation Multiplierだけでもサンプルが配置されていました。

f:id:kazuhironagai77:20211122000152p:plain

そのサンプルで使用されているTessellationの設定です。

f:id:kazuhironagai77:20211122000214p:plain

因みに2021-10-31のBlogで使用したTessellationの設定はこれです。

f:id:kazuhironagai77:20211122000236p:plain

Tessellationについての公式のDocumentがないか探したら1.12 - Tessellation Multiplier [8] が出て来ました。

f:id:kazuhironagai77:20211122000255p:plain

いやちょっと待ってよ。

Material Nodeって項目があるじゃないですか?

f:id:kazuhironagai77:20211122000316p:plain

最初から教えて下さいよ。こういうのは本当に。

公式のDocumentのMaterial Nodes [9] のPageです。

f:id:kazuhironagai77:20211122000338p:plain

今まで見てきた内容の全てに関しての詳しい解説がここに載っていました。

f:id:kazuhironagai77:20211122000357p:plain

これをもう一回見ないといけないのかよ。

やるしかないです。

1.1 Base Color [10]

公式Documentの1.1 Base Color [10]を読んでいきます。

f:id:kazuhironagai77:20211122000420p:plain

しっかりContent Exampleで提供されているサンプルの解説です。って書かれていますね。

読みます。

あんまり大した解説じゃなかったですね。

要点をまとめると

  • RPGの3つの値をパスする
  • 値は0~1の間
  • Textureをパスする事も出来る。

位でした。

1.2 – Metallic [11] >

これも短い解説だけです。

腐食したり錆びたりした金属は0と1の間の値を取ると書いてある部分は間違っていると思います。これは錆びた部分は0、錆びてない部分は1になるが正解だと思います。

こんなにグダグダになるとは思わなかったので一端仕切り直しをします。

ここでこれは中止にして来週やる事にします。

3.2 Derivatives DDX DDY - Shader Graph Basics - Episode 18 [12]を勉強する

予定を変更してBen Cloward氏のDerivatives DDX DDY - Shader Graph Basics - Episode 18 [12]を勉強する事にします。

軽く全部見ました。

今回はDDXノードとDDYノードについての理論と3つの応用について勉強します。

f:id:kazuhironagai77:20211122000602p:plain

<理論>

DDXが提供された点のx軸方向の傾きを返し、DDYが提供された点のy軸方向の傾きを返すそうです。

このTutorialでははっきりとは述べていませんでしたが、Pixel上の点とその左右、もしくは上下の点をWorld Coordinateまで変換して傾きを求めているみたいです。

<応用1>

DDXとDDYを使用してNormal Vectorを計算します。

計算したNormal VectorはTransform ノードを使用してTangent Coordinateに変換した後にNormal Inputにパスします。

以下に実装を示します。

f:id:kazuhironagai77:20211122000642p:plain

結果です。

f:id:kazuhironagai77:20211122000656p:plain

なんでこんなにカクカクになるんでしょうね。

後、Transform VectorノードはCoordinate間の変換をするためのノードです。

f:id:kazuhironagai77:20211122000714p:plain

<応用2

Long Lat Textureを球体に貼る。

以下の実装でLong Lat Textureを球体に貼る事が出来ます。

f:id:kazuhironagai77:20211122000736p:plain

使用したLong Lat Textureはこれです。

f:id:kazuhironagai77:20211122000752p:plain

偶然ですがTutorialに使用しているImageと全く同じモノを見つけました。

結果です。

f:id:kazuhironagai77:20211122000811p:plain

Tutorialによるとこの球体に一か所だけ切れた場所があるそうですが、

f:id:kazuhironagai77:20211122000836p:plain

これですかね。

この線をDDX、DDYを使用して消すそうです。

以下の実装をしました。

f:id:kazuhironagai77:20211122000857p:plain

結果です。

f:id:kazuhironagai77:20211122000911p:plain

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

理屈は全然分からないですね。

<応用3>

Hight Map TextureをBump Mapのように使用して球をデコボコにする。

これは実装が複雑過ぎるの見るだけにします。

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

f:id:kazuhironagai77:20211122000937p:plain

このノードが上の計算と同じ事をしてくれているそうです。

f:id:kazuhironagai77:20211122000951p:plain

Perturb Normal LQノードを使用してTutorialと同じ実装を作成しました。

f:id:kazuhironagai77:20211122001009p:plain

こんな結果になりました。

f:id:kazuhironagai77:20211122001025p:plain

はっきり言ってTutorialのような

f:id:kazuhironagai77:20211122001055p:plain

デコボコにはなりませんでした。

使用したTextureの違いのせいでしょうか?

4.NPCAIを作成するためのAIの復習の続き(Debugについて)

公式のDocumentのAI Debugging [13]を勉強していきます。

4.1 AIのDebugを勉強する前にしなければならない事をやる

<キーボードが日本語設定のUE4に必要な設定の変更>

ここで大変だったのが日本語設定のUE4だと’を押してもDebug機能が働かない事です。

2021-02-07のBlogを見ると

f:id:kazuhironagai77:20211122001143p:plain

と書かれていました。

あれ。こんな簡単だったけ。兎に角、試してみます。

f:id:kazuhironagai77:20211122001201p:plain

Playを押してゲームを開始します。そして1を押します。

普通に出て来ました。

f:id:kazuhironagai77:20211122001221p:plain

<Play中にTab keyを押す事で自在に動きまる>

2021-02-01のBlogでOnline Learningにある

f:id:kazuhironagai77:20211122001247p:plain

を勉強していますがそこでDebug中の移動に関して

f:id:kazuhironagai77:20211122001301p:plain

と述べています。

確かこれのやり方は後で判明したんですが、覚えていません。

調べます。

ありました。同じ週のBlogに書かれていました。

f:id:kazuhironagai77:20211122001315p:plain

試してみました。

f:id:kazuhironagai77:20211122001515p:plain

<AI Debugが表示されない>

f:id:kazuhironagai77:20211122001543p:plain

対象となりNPCを見ながらDebug key(私の設定の場合は1)を押します。

4.2 AI Debugging [13] を勉強する

もうどうでもいいですけど、今度はAI Entityですか。Agentって読んだりして統一してほしいです。

f:id:kazuhironagai77:20211122001604p:plain

AIによって操作されるNPCと一々言うのは面倒ですが、

<Enabling AI Debugging

f:id:kazuhironagai77:20211122001630p:plain

Apostropheを押す事でAIのDebugが出来ます。と書かれています。

ふと思ったんですが、公式のDocumentなので日本語訳ってついているはずです。

その日本語訳ではどうしてるんでしょうか?

f:id:kazuhironagai77:20211122001656p:plain

普通にApostropheを押したら出来ますって書かれていますね。

ひょっとすると今は出来る様になっているでしょうか?

わざわざこのためにAIを組むのは面倒なので昔、AIを組んだProjectを開いてApostropheを試してみました。

Shift+7を押してみましたが、AI Debugは表示されませんね。

うん。

分かりません。

でも実用面では、Shift+7で出来たらそれでOKですし、出来なかったら上記の方法で直せば良いだけです。

Numpadのkeyで表示される内容が変えられるとあります。

f:id:kazuhironagai77:20211122001717p:plain

表示されているDebug AIを読むと最初から1のAIと2のBehavior Treeの情報は表示されていますね。

f:id:kazuhironagai77:20211122001738p:plain

ちょっと見にくいですがAIの情報です。

f:id:kazuhironagai77:20211122001757p:plain

Behavior Treeの情報です。

f:id:kazuhironagai77:20211122001824p:plain

思い出して来ました。

この辺は前結構しっかり勉強したはずです。

Numpadの4を押してPerceptionを起動します。

f:id:kazuhironagai77:20211122001857p:plain

これですわ。前回はこれを見てMonsterのAIを調節していたんです。

<Nav Mesh

Nav MeshですがNumpadの0を押すとNav Meshが表示されます。としか説明していません。

f:id:kazuhironagai77:20211122001925p:plain

確かにNumpadの0を押したら現在使用中のNav Meshが表示されています。

f:id:kazuhironagai77:20211122001948p:plain

これらの表示の解説はないですね。

これだけでは何をDebugしているのかは分かりません。

先週のバグでMonsterが動かない時がありましたが、

f:id:kazuhironagai77:20211122002012p:plain

こういう時にこのDebugをすると使用中のNav Meshが視覚化されてNav Meshが働いていないとかが分かるのでしょうか?

それぐらいしかこのDebugの使い道が分かりません。

<AI

今度はNumpadの1を押した場合です。

f:id:kazuhironagai77:20211122002039p:plain

今度は表示されているそれぞれのParameterについての解説がありました。

Controller Nameは使用しているAI Controllerの名前ですね。

Pawn Name は対象のNPCの名前みたいです。名前を確認したらNPCとなっていました。

f:id:kazuhironagai77:20211122002059p:plain

Movement Modeですが、これ具体的に何を指しているのか分かりません。

Baseは現在、NPCがいるMeshを表しているそうです。

Nav DataはNavigation classを表してるとありますが、それが何なのかが分かりません。Defaultだとどうなるんでしょうか?

Path FollowingはNPCが向かっている方向を示しているんでしょうか?MovingがNPCが現在動いている事を示しているのかもしれませんね。

Behavior。これは分かります。Behavior Treeのどれが実行されているかを示してるはずです。

違いました。

Behavior Treeが実行されていたらRunningと表示されるそうです。

f:id:kazuhironagai77:20211122002124p:plain

じゃさっきのMovement ModeはNPCが走ったらRunningとかに変わるんでしょうか?

変わらなかったです。

調べたらCharacter クラスのCharacter Movement内に

f:id:kazuhironagai77:20211122002138p:plain

Default Land Movement ModeとDefault Water Movement Modeがありました。

f:id:kazuhironagai77:20211122002156p:plain

これを表しているでしょうか?

でもこれを知る必要ってどんな時なんでしょうか?

Movementについては全然知らないので実は重要なのかもしれませんが分かりませんね。

Treeは使用しているBehavior Treeを表示します。これは沢山のBehavior Treeを使用するようになると重要になりそうです。

Active Taskは現在Behavior Treeで実行されているTaskを表示します。

この辺はBehavior TreeのDebugを使用した方が分かり易いですね。実際、ここではMove toが実行されていると表示されていますが、使用しているBehavior TreeであるNPC_BTを開いてみたらTaskのMove toは3つもあってどのMove to を使用しているのかはこれからは分かりません。

Game Taskは

f:id:kazuhironagai77:20211122002217p:plain

と説明されていました。このQueueが所謂Computer scienceでいう所のQueueならば処理待ち中のTaskの数と言うことでしょうね。

そう言えばQueueとかStackってどのComputer scienceの教科で習ったんでしたっけ。当たり前過ぎて覚えていません。

今、日本で流行っている3カ月でProgrammerになれるみたいな学校って本当にこういう基礎教えているんでしょうか。こういう基礎って地味に後で効いてきますよね。知らないと。

Montageは全く何の事か分からん。

説明を見たら

f:id:kazuhironagai77:20211122002241p:plain

と書かれていました。

Animationに関係がある事は分かりました。

Third Person Anim BPを開くと

f:id:kazuhironagai77:20211122002304p:plain

Montageと言う言葉はそこかしこで使用されています。

調べて見ます。

公式のDocumentでAnimation Montage[14] がありました。

f:id:kazuhironagai77:20211122002322p:plain

このRemarkはMontageが何なのかを簡潔に説明していますね。

しかもこんな沢山の節がその中にあります。

f:id:kazuhironagai77:20211122002340p:plain

この辺を勉強した後じゃないとここのMontageが何を指しているのかは分からないです。

この辺は後でじっくり勉強しましょう。

<Behavior Tree

Behavior Treeに関してです。

f:id:kazuhironagai77:20211122002409p:plain

左側ですが、今使用しているNodeを表示してるそうです。

となると以下のNodeが使用されている事が分かります。

f:id:kazuhironagai77:20211122002442p:plain

f:id:kazuhironagai77:20211122002447p:plain

f:id:kazuhironagai77:20211122002454p:plain

f:id:kazuhironagai77:20211122002500p:plain

Behavior TreeのDebugから確認しても同じ結果を示していました。

f:id:kazuhironagai77:20211122002545p:plain

右側のBlackboard は今Behavior Treeで使用されているBlackboard内の変数とその値を示してます。

この情報は結構有り難いです。

<EQS

これは来週EQSを勉強した後にやります。

<Perception

はいやっとPerceptionに来ました。

f:id:kazuhironagai77:20211122002611p:plain

これについては解説がありませんでした。

多分ですが赤で囲ったGreenがSight、その両脇のGreenがRange Inでしょう。

f:id:kazuhironagai77:20211122002630p:plain

でもそうするとRange OutのNeon Pinkがないですね。

となると以下のNeon Pinkの部分がRange Outでその中のGreenが Range Inと言う事になりますね。

黄色のHearingもこれなら緑の内側の枠になります。

Range LoSについては分かりませんね。

f:id:kazuhironagai77:20211122002719p:plain

後はこのボールですがLast Known Locationと言うそうです。

f:id:kazuhironagai77:20211122002739p:plain

NPCから見えたPlayerの操作しているキャラの位置を示すものだそうです。

これでDebugの復習も大体終わりました。

5.Game Designについて

AIのDebugの復習のために2021-02-01のBlogを読んでいたら、HxHの念能力をGameに応用したらこうなる。的な話が書かれていました。

f:id:kazuhironagai77:20211122002801p:plain

こんな事を書いた事すっかり忘れていたんですが、改めて読み直したら大変面白かったです。

それで何でこんなに面白かったのか後で考えてみました。

その時のBlogにも書かれていますが、戦闘が開始した時点で勝敗が決定してしまっているのを戦術次第で逆転出来る可能性が出て来るからだと思います。

私を含めて多くの人がHxHの念能力をポケモンなどの火とか水などのタイプによる分類の亜流と捉えています。

これが間違っていました。

ポケモンなどのタイプによる分類を突き詰めると戦闘の勝敗は戦う前に全部決まってしまいます。言い換えれば戦略が全てです。

それに対してHxHの念能力は戦闘中の使い方を工夫する事でいくらでも逆転出来る可能性があります。つまり戦術で戦略を凌駕する事が可能になるんです。

つまりポケモンなどのタイプによる分類とHxHの念能力の分類は全く違うものなんです。ここを理解しないと何でHxHの念能力が面白いのかが分からなくなってしまうんです。

Turn制のゲームで今最も人気があるのは、タイプ別で勝敗が決まるポケモンだと思います。しかしあまりゲームをしない私でもポケモンの戦闘の勝敗は戦う前に結構な確率で決まってしまう様に感じます。ここにHxHの念能力を組み合わせる事が出来ると、ポケモンの戦闘における戦略的な面白さにHxHの念能力による戦術的な面白さが加わった今までにない仕組みのTurn制のゲームが出来る気がします。

これってひょっとすると次世代のTurn制ゲームのためのとっかかりを見つけたのかもしれません。

RPGにおける魔法をHxHの念能力のような戦闘中に使用すると逆転勝利につながるものと、ポケモンの様な火とか水などの属性に関するモノ(つまり戦闘前に準備すべきもの)に分類して、今まで漠然と存在していたRPGの魔法を2種類に分類しました。

その中でHxHの念能力のような戦闘中に使用すると逆転勝利につながるもの(仮に戦術的魔法と呼ぶ事にします。)を念能力に合わせて分類し直すと、結構無理が出て来ました。

そこで新しく分類表を作成し直して以下の様にしました。

<祝福系>

味方のStatusを一時的にUpする魔法

回復、治癒を行う魔法。

味方の不利な属性を有利な属性に変更する魔法

HxHの強化系と変化系に回復能力や徐念の能力を加えた。

<呪い系>

敵のStatusを一時的にDownしたり、眠らせたりするタイプの魔法。

毒のような持続的なダメージを与える魔法。

敵の有利な属性を不利な属性に変更する魔法。

HxHの操作系と変化系にドラゴンクエストの補助魔法の一部を追加した。

<召喚系>

Monsterを召喚するだけ。

HxHの具現化系の能力はここに追加

<霊感>

敵の戦闘力や使用出来る魔法の種類を見たり、自分の存在を敵から感知されないようにするタイプの魔法。

Narutoの感知タイプのようなもの

流石に今回のRPGに組むのは無理ですが次回のゲームにはこのアイデアはぜひ追加したいです。

6.World CompositionによるMap1の作成(Itemの配置など)

一応、先週でItemの配置以外のMap1の改良は終わったので色々なテストをしてバグ出しをしたいと思います。

6.1 銀河鉄道に乘ってLandscape4に移動した後、Map1に戻って来る

普通に戻ってこれました。

f:id:kazuhironagai77:20211122002856p:plain

6.2 Start 画面からMap1に移動

Start 画面からMap1に移動しました。

f:id:kazuhironagai77:20211122002923p:plain

問題なく始められます。

勿論、Warpした後、Landscapeが表示されない問題は解決していません。

f:id:kazuhironagai77:20211122002941p:plain

6.3 死亡した後、特に落下死の後

死亡した後に表示されるLoad画面が戦闘時に移動する時と同じです。死亡専用のLoad画面を作成しこの画面で使用する必要があります。

f:id:kazuhironagai77:20211122003001p:plain

死亡後に表示される画面です。

ゲームオーバーではなく墜落死ですね。

f:id:kazuhironagai77:20211122003014p:plain

6.4 墜落死画面の直し

墜落死画面を直していきます。

f:id:kazuhironagai77:20211122003033p:plain

墜落死用のテストのために崖を登っていたんですが、結構楽しいです。

f:id:kazuhironagai77:20211122003049p:plain

これだけで1本のゲームになりそうです。

6.5 山の隙間に短剣(小)を配置する

取りあえず静的に短剣(小)を配置してみました。

f:id:kazuhironagai77:20211122003119p:plain

これを取りに行きます。

f:id:kazuhironagai77:20211122003139p:plain

こんな感じで配置されていました。

装備してみます。

f:id:kazuhironagai77:20211122003252p:plain

普通に使えますね。

6.6 山の隙間に短剣(小)を配置する

探検(小)が配置されているSub Level3_3のBPに以下の実装をしました。

f:id:kazuhironagai77:20211122003314p:plain

当然、Game Instance BP内には

f:id:kazuhironagai77:20211122003326p:plain

新しい配列、Item Spawn Data 3_3を作成し

f:id:kazuhironagai77:20211122003348p:plain

先程、静的に配置した短剣(小)のDataを写しました。

Sub Level3_3のBPに作成した関数、Spawn ItemはMap1のBP内に設定されているものをそのままCopyしました。

f:id:kazuhironagai77:20211122003409p:plain

これ見るとMonsterをSpawnした時と少しだけ実装が違います。なぜか最初にLevel名を確認しています。

何故これをやったのか覚えていないのでこのままにしておきます。

テストします。

f:id:kazuhironagai77:20211122003425p:plain

はい。短剣(小)が動的に生成されていました。

6.7 取ったアイテムが二度と再生されないようにする

先週、Monsterでやったのと同じ様に一回取ったアイテムが再生されないようにします。

何と、一回取ったアイテムをGame Instance のItem Spawn Dataから消去する実装はWidget BPであるPick Up Item内で実装されていました。

f:id:kazuhironagai77:20211122003451p:plain

その部分を以下の様に改良しました。

f:id:kazuhironagai77:20211122003506p:plain

Remove Picked Item関数の実装。

f:id:kazuhironagai77:20211122003526p:plain

まだ一か所にしかItemを配置していないのでこれだけです。後でSwitch内のNameが増えます。

Remove Picked Item Helper関数の実装です。

f:id:kazuhironagai77:20211122003540p:plain

今度は参照するData Tableは間違っていません。

テストします。

一回Itemを取ってから、Monsterと戦闘して戻って来ました。

f:id:kazuhironagai77:20211122003606p:plain

Itemは再生されていません。

出来ました。

7.UE5におけるWorld Partitionの勉強の続き

先週、World Partitionの勉強をしていて

f:id:kazuhironagai77:20211122003631p:plain

One File Per ActorとLevel Instancingの勉強はしていない事に気が付きました。

今週はこれらを勉強します。

7.1 One File Per Actor [15] の勉強

公式のDocumentであるOne File Per Actor [15]を勉強します。

UE4までは一人がLevel Designをしている時は他の人はその人が作業を終えてからLevel Designをする必要がありました。UE5は同時に複数の人がLevel Designをする事が出来ます。

それを可能にしたのがこのOne File Per Actor(OFPA)だそうです。

One File Per Actor(OFPA)はLevel上に配置されたActorのDataを別なFileにSaveするそうです。

<Enabling One File Per Actor

えっ。

One File Per Actorって勝手に自動でやってくれてるんじゃないの?

こっちでEnableに設定しないといけないの?

と思いながら読んだら、手動で色々な粒度(granular)に設定出来て、その設定方法についての解説のようです。

それぞれのActorのDetail画面から設定する方法です。

例えばMap上に配置したCubeの場合ですと、

Cube(Instance)を選択して

f:id:kazuhironagai77:20211122003704p:plain

Actorの中の

f:id:kazuhironagai77:20211122003754p:plain

Package Modeを

f:id:kazuhironagai77:20211122003816p:plain

ここで突然説明が終わってしまっています。

これをExternalにしないといけないのか、InternalでもOne File Per Actor(OFPA)が作動しているのか分かりません。

というかInternalだとOne File Per Actor(OFPA)が作動していないのなら、最初の解釈が間違えていてOne File Per Actor(OFPA)を起動するには手動でセットする必要があるとなります。

解説を見てみます。

f:id:kazuhironagai77:20211122003848p:plain

うーん。

これ読むとInternalでもExternalでもOne File Per Actor(OFPA)は作動しているけどSaveするDataの細かさが違うとは読めませんね。

Actor is packaged alongsideはOne File Per Actor(OFPA)ではない従来のActorのDataの保持方法を指しているように思えます。

良く分からない。

この辺を詳しく解説した他のTutorialが出るのを待つか、Package ModeをInternal にしたまま、2人で同時のLevelを編集してもActorがきちんとSaveされているかを確認するかしないと結論は出せませんね。

と思ったら図の下に詳しい解説がありました。

f:id:kazuhironagai77:20211122003902p:plain

読んでなかった。

分かりました。

最初の解釈が間違っていました。

2行目の文に以下の様に書かれていますが、

f:id:kazuhironagai77:20211122003921p:plain

このEnableは「OFPAを使用出来るようにするためには」と言う意味が主で「手動で出来る」と言う意味が主ではなかったです。

このPackaging ModeをExternalにして初めてそのActorはOne File Per Actor(OFPA)でSaveされるようになるみたいですね。

後、Granularの意味は粒度というより「細かく」と解釈するのが正しいみたいですね。

調べたら粒度はgranularityでした。

次はLevel毎にOne File Per Actor(OFPA)を設定出来る方法が書かれていました。

--ここでEnable World Composition と述べている箇所は、Use External Actorsの間違いです。次の週に訂正を載せます。--

World SettingのEnable World Compositionにチェックを入れれば良いそうです。

f:id:kazuhironagai77:20211122003943p:plain

いやその後がまだありました。

チェックを入れた後でSaveする必要があり、Saveすると

f:id:kazuhironagai77:20211122004000p:plain

出て来るのでこれをYesと選択する必要があるそうです。

試してみます。

Enable World CompositionにCheckを入れた瞬間に聞いて来ました。

f:id:kazuhironagai77:20211122004019p:plain

これだけ確認出来れば十分なのでNoを押してCancelします。

あれ、それでもチェックが付いていますね。

f:id:kazuhironagai77:20211122004036p:plain

Yesを選択した場合はこのLevelに存在している全てのActorをexternal packagingに移すのは理解しましたが、Noを選択した場合はどうなるのでしょうか?

Cancelした場合とは違い一部のActorはExternal packagingに移すのかもしれませんね。

<<Enabling One File Per Actorのまとめと感想>>

軽く読んだだけですが、幾つか重要な知見を得る事が出来ました。

まずOne File Per Actorは勝手に自動でやってくれている訳ではなかったです。手動でセットする必要があります。

次にOne File Per Actorの設定方法は2種類あり、一つ目はActorのInstance毎にセットする方法で、そのActorのInstanceのみがOn File Per Actorになります。2つ目の方法はLevel毎にセットする方法で、そのLevelに配置されているActorのInstanceすべてがOne File Per Actorとなります。

正しこの2つ目のやり方で

f:id:kazuhironagai77:20211122004059p:plain

にNoと答えた時に一部のActorはOne File Per Actorにセットされるのかどうかは不明です。

後、おまけでGranularは細かいが正しい訳で、粒度は間違っていました。粒度の正しい訳はGranularityでした。

この単語についてはいつか前文で詳しく検討したいです。

<Converting Sub Levels

Use External Actorsを使用した場合、つまり先程の2番目のやり方で、OFPAにした場合ですね。この時は今のLevelに存在しているActorのInstanceのみがOFPAになるそうです。

うーん。ちょっと意味が分からない。

どういう事?

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

このLevelに属している全てのSub Levelに存在しているActorのInstanceもOFPAにするためにはそれぞれのSub LevelをLoadしてActiveな状態にしてUse External Actorsを使用する必要があると書かれていました。

つまり今LoadしてなかったりActiveな状態になってないSub Level上に存在しているActorのInstance達はOFPAにはなってない。と言う事です。

でもそれだと一々新しいSub Levelを読むたびにUse External Actorsを使用する必要があって大変面倒くさいです。

それを解消するためのCommandがあるそうです。

UE4Editor.exe  -run="ConvertLevelsToExternalActorsCommandlet" -nosourcecontrol -convertsublevels " OFPAにしたいLevelの場所"

だそうです。

勿論、試しませんが一応頭に入れておくだけします。

<OFPA With Source Control

source control applicationが何を指しているのか分かりませんね。

まずView Changelist windowを開いて見ますか。

うーん。これも分からん。

あ。分かりました。Source Control ってGithubみたいな所でVersion ControlしてProgrammingを一括で管理している時の話でした。私は今一人でPRGを作っているのでVersion Controlは使用してませんから私のUE5からでは出来ないはずです。

今度、二人以上でGameを作成する事になったらVersion Controlを使用するのでそん時に試します。

8.まとめと感想

今週と言うか最近の傾向として、量は沢山やったんですが質が落ちている気がします。やれる量には限りがあります。精々頑張っても2倍が限界でしょう。その代わり質は3倍でも10倍でも下手したら100倍にも出来ます。もっと頑張る方向を質を向上する方に向けるべきでした。

質を向上するための努力は量を増やす努力とは方向性が違います。

昔どうすれば質を向上出来るのかまとめたんですが無くしてしまいました。のでもう一回ここに書いて置きます。

  • 練習は完璧を作らない。練習が作るのは習慣だけである。完璧な練習のみが完璧を作る
  • 三時間、三週間、三カ月で成果の確認を。期待した成果が出ない時はその練習や勉強の中止を。
  • よい教科書やTutorialは常に探しておく。人が30時間かけて理解した事でも、説明するのは30分で済む。
  • ストレスを貯めない。ストレスがあると頭が働かなくなる。
  • 良く休む。
  • 成功した人の意見を聞く。失敗した人ややらない人、出来ない人でも威厳があってもっともらしい事を言う人は多い。しかしそういう人の意見を聞くのは無駄。
  • 慌てない。正しくやる人には、常に十分な時間がある。
  • データは正確に読むように心がける。Correlation(相関関係)とCausation(因果関係)を間違えない様にする。

後、最近気が付いたのは一端、こいつは駄目だ。と一端烙印を押した人が、たまたま凄い発見をしたり良いアイデアを思いついた時に、その発見やアイデアそのものをきちんと検討しないで、こいつが言ってんだから駄目に決まっている。とはなから無視して折角の良い発見やアイデアを無駄にしてしまう事がある事です。

<参照(Reference)>

[1] The New York Times. (2021, October 28). A Fatal Night in Kenosha: How the Rittenhouse Shootings Unfolded | Visual Investigations [Video]. YouTube. https://www.youtube.com/watch?v=VpTW2AJE9MQ

[2] CGHOW. (2021b, October 11). Twisted Ribbon in UE4.27 Niagara Tutorial | Download Files [Video]. YouTube. https://www.youtube.com/watch?v=RvTQup0Jxf4

[3] CGHOW. (2021a, August 23). Convertible Floor in UE5 Niagara Tutorial | Download Files [Video]. YouTube. https://www.youtube.com/watch?v=pxSdLRMv8hY

[4] Epic Games. (n.d.-f). Material Blend Modes. Unreal Engine Documentation. Retrieved November 21, 2021, from https://docs.unrealengine.com/4.27/en-US/RenderingAndGraphics/Materials/MaterialProperties/BlendModes/

[5] Epic Games. (n.d.-h). Materials. Unreal Engine Documentation. Retrieved November 21, 2021, from https://docs.unrealengine.com/4.27/en-US/RenderingAndGraphics/Materials/

[6] Epic Games. (n.d.-j). Shading Models. Unreal Engine Documentation. Retrieved November 21, 2021, from https://docs.unrealengine.com/4.27/en-US/RenderingAndGraphics/Materials/MaterialProperties/LightingModels/

[7] Epic Games. (n.d.-k). Subsurface Shading Model. Unreal Engine Documentation. Retrieved November 21, 2021, from https://docs.unrealengine.com/4.27/en-US/RenderingAndGraphics/Materials/LightingModels/SubSurface/

[8] Epic Games. (n.d.-c). 1.12 - Tessellation Multiplier. Unreal Engine Documentation. Retrieved November 21, 2021, from https://docs.unrealengine.com/4.27/en-US/Resources/ContentExamples/MaterialNodes/1_12/

[9] Epic Games. (n.d.-g). Material Nodes. Unreal Engine Documentation. Retrieved November 21, 2021, from https://docs.unrealengine.com/4.27/en-US/Resources/ContentExamples/MaterialNodes/

[10] Epic Games. (n.d.-a). 1.1 - Base Color. Unreal Engine Documentation. Retrieved November 21, 2021, from https://docs.unrealengine.com/4.27/en-US/Resources/ContentExamples/MaterialNodes/1_1/

[11] Epic Games. (n.d.-b). 1.2 - Metallic. Unreal Engine Documentation. Retrieved November 21, 2021, from https://docs.unrealengine.com/4.27/en-US/Resources/ContentExamples/MaterialNodes/1_2/

[12] Cloward, B. (2021, October 14). Derivatives DDX DDY - Shader Graph Basics - Episode 18. YouTube. Retrieved November 21, 2021, from https://www.youtube.com/watch?v=1HTMoCaY0xw&list=PL78XDi0TS4lEBWa2Hpzg2SRC5njCcKydl&index=18

[13] Epic Games. (n.d.-d). AI Debugging. Unreal Engine Documentation. Retrieved November 21, 2021, from https://docs.unrealengine.com/4.27/en-US/InteractiveExperiences/ArtificialIntelligence/AIDebugging/

[14] Epic Games. (n.d.-e). Animation Montage. Unreal Engine Documentation. Retrieved November 21, 2021, from https://docs.unrealengine.com/4.27/en-US/AnimatingObjects/SkeletalMeshAnimation/AnimMontage/

[15] Epic Games. (n.d.-i). One File Per Actor. Unreal Engine Documentation. Retrieved November 21, 2021, from https://docs.unrealengine.com/5.0/en-US/WorldFeatures/OneFilePerActor/