投稿

UE5, Naniteノート

イメージ
参考動画: https://www.youtube.com/watch?v=xUUSsXswyZM   UE5 Naniteは各メッシュのNaniteをチェック。 それだけ。 で、一人で作っていたら3年以上かかりそうな機能(出来るかどうかも不明)を使える。 ※以下は覚えるため私が翻訳しているので正しい保証はない。 Nanite Setup Overview スタティックメッシュのみ(DeformされないMesh) No skeletal meshes No World Position Offset NaniteとNon-NaniteのGeometryを両方持てる Massive poly countsが持てる、なぜなら... より高速でより効率化されてたレンダリングをする 可視出来る部分だけ細かくロードし見せる NaniteをサポートできるMeshを有効にする Nanite meshesはミリオンpolyは必要でないが、サポートされている。 Art Production Pipeline Nanite以前 With Nanite

UE5とWorld Partition

イメージ
https://www.youtube.com/watch?v=ZxJ5DG8Ytog&t=406s 上の動画内、World Partitionのメモである。 Grids内Cell Size等は変更して、自動に反映することが可能 以下が自動化するかの設定場所である。 これらはCmdletからも実行可能である。 説明は省略。 円の中心はPlayerで円は範囲を示す。 白いラインは観ている方向。グリーンがロード、赤がアンロードを示し、Playerが移動するとリアルタイムでそれが行われている。このHLOD機能があるだけでもUE5を使う価値があるというものだ。 HLOD用データはCmdletから可能で別PCでコンバート作業させることができ処理を分散可能である。

UE5のOne File Per Actorのファイル構造とチェックアウト

イメージ
https://www.youtube.com/watch?v=ZxJ5DG8Ytog&t=406s 上の動画内のOne File Per Actorのファイル構造とチェックアウトの説明部を文書化。 One File Per Actorのドキュメントを読むよりも現実的なので比較的頭に入ってくる。 数千バイトから300MBのサイズのファイルからなっている。 フォルダを観ると2021/8/12になっているので最近である。 Moorは8KBだが__ExternalActors__のサブフォルダMoorには以下のように大量なフォルダが存在する。 さらにその中にはいくつかのサブフォルダとデータがある。 これらにはこのワールドのAssetの参照が入っている。 あるActorを変更すると下のように上のフォルダの一部がCheck Outすることができる。 BigRock12, Game/__ExternalActors__/Moor/3D/Y9/AMQ******をチェックアウトするかと表示されている。これによって複数人が並行で作業できるということだ。 自動チェックアウトも設定で選ぶことが可能である。Edit>Editor Preferences>Loading & Saving>SOURCE CONTROL内 有効にするのにはUse External Acotersをチェックすれば良い。

Levelデザインする前に決めるサイズ

 Unreal engineだけに限ったことではないが、Level designする前に決めておくサイズ。この基準を作っておかないとあとで面倒なことになる。 以下のTutorialが考え方の参考になる。 Architectural Scale vs. Game Metrics Architecture -Building Story     4m -Floor depth 1m -Wall depth 0.25m Game Metrics -Character width 0.9m -Character height 1.96m -Character crouch height 1.1m -Character jump Z distance 1.4m -Character jump X distance 4m https://learn.unrealengine.com/course/3754334/module/7274126?moduletoken=UHxxnDLPW8QpVAW8lQxqoJlZD44CzJcqSD72WQNcpD9UNTyUKmWwYhRt7NC5j0tY&LPId=0

約10年ぶりにC++を使って面白く感じた点

 Unreal Engineを使うため、再びC++(約X0年使用)を使うことになったが改良点としていくつか便利と思った。 static_assert(), constexprと関わるとおもうがコンパイル時にAssertを評価してくれる。前にこんなのがほしいと思っていたがしっかり追加されている。 nullptr,昔は#define NULLを使っていたがコンパイル側に組み込まれた。 &&,無駄にコピー処理をおこなわないのが良い。考えた人エライ! string_view,安全に文字を定義できる。 遅まきながらu8がC++20で追加になったのはちょと可笑しかった。はじめはcharを使えばいいのでいらないと考えたようだがc#やpython3, javaを使っている身にとって、まだそんな考えがあったのかとつい思ったw C#で好きな文字書式指定に似たstd::format、変数の個数チェックしてくれる。でもまだC#の$""のほうが直感的で使いやすい。formatではまだ古さを感じる。 atomicでないvolatile変数へのアクセスにワーニングが表示される(C++20, VS2019では/Wall,  /W3で表示しても良い気がするけど) 微妙なのはauto、lambda関数やtemplateに使うためと思われるがあまり使いたくないと思った。乱使用によってコードが汚くなりそう。 もう少し、シンプルなコードになる工夫されていればとちょと感じた。なんか増々ツギハギだらけな言語という印象を受けた。 いまのところ、こんな感じ。

Unreal engine key board binding

イメージ
 Godotなどと同じだがProject Setting内でキーを指定し、codeでBindingする。 void ACollidingPawn :: SetupPlayerInputComponent ( class UInputComponent * InInputComponent ) {     Super :: SetupPlayerInputComponent ( InInputComponent );     InInputComponent -> BindAction ( "ParticleToggle" , IE_Pressed, this , & ACollidingPawn ::ParticleToggle);     InInputComponent -> BindAxis ( "MoveForward" , this , & ACollidingPawn ::MoveForward);     InInputComponent -> BindAxis ( "MoveRight" , this , & ACollidingPawn ::MoveRight);     InInputComponent -> BindAxis ( "Turn" , this , & ACollidingPawn ::Turn); }

熟成されたUnreal EngineのVector class

 UEではIsNearlyZero()のような便利な関数がある。これはfloat型が誤差のため完全に0にならないための誤差を考慮したMethodである。熟成されていないEngineなどはなかったりするのでいちいち作っていた。しかも状況によって範囲をかえたりする調整が必要で思った以上に時間がかかる。 こんなことからUEの熟成度を感じてしまう。 FVector DesiredMOvementThisFrame = ConsumeInputVector().GetClampedToMaxSize(1.0f) * DeltaTime * 150.0f; if (!DesiredMOvementThisFrame. IsNearlyZero ()) { }