2024-11-19 / @syui

ue / ue

ue5.5で作り直す

city sampleにearth system(solar system)を組み込みます。具体的には惑星(planet)の形式でmapを作成し、空から宇宙に出ても問題ないようにすることを目指します。

  • 海 : ocean waves
  • 空 : ultra dynamic sky

city sample

5.5からcrashする回数が大幅に減りました。

/Map/Small_City_LVLを使います。ground*を探して削除します。これは海面にplane(平面)を設置しています。

止まっている車をcで運転できるようですが、これはBP_Playerの機能です。使用するには後述するgame animation sampleに統合する必要があるでしょう。

playerstart(tag)をいくつか設置し、uiで選択してteleportできるようにします。instance data(config)に名前を保存して呼び出してもいいし、mapから値を取ってきてもいいです。

https://blueprintue.com/blueprint/3h8qi0ep/

いくつかの建物を追加します。

  • /Levels/DefaultLevel
  • /AutomotiveBridgeScene/Bridge_P

街頭はBP_CurvedBrideLamp_0xを変更します。SMでstreetLampCを選択して位置を調整します。また、すり抜けるのでマトリックスでcollisionを設定してください。よくわからない場合は後述するtwinmotionを参考にしてください。

AutomatedPerfTesting

AutomatedPerfTestingは5.5で追加されたpluginです。

Experimental release of Automated Perf Testing Plugin v0.1, providing Gauntlet Test Controllers, UAT Test Nodes, and BuildGraph macros for adding common automated performance tests to a project’s automated build and test.

そのうち解消されると思いますが、現在(2024-11-18)、city sampleはbuildできません。Engine/Plugins/Performance/AutomatedPerfTestingAutomatedPerfTestConfig.cs, AutomatedPerfTestNode.csが含まれていないため${project}/Build/Script/CitySample.Automation.csprojに記述されているcompileが通らないのです。

<Project Sdk="Microsoft.NET.Sdk">
  <Import Project="CitySample.Automation.csproj.props" Condition="Exists('CitySample.Automation.csproj.props')"/>
  
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Compile Include="$(EngineDir)\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\AutomatedPerfTestConfig.cs" />
    <Compile Include="$(EngineDir)\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\AutomatedPerfTestNode.cs" />
  </ItemGroup>

</Project>

これはgithubにあるsrcから持ってくるしかありません。アクセスするにはorgに参加します。

ocean waves

惑星の海を作るにはocean wavesを利用します。必要なものは以下の2つです。

  • BP_EarthSizedOcean : 海中
  • BP_EarthSizedSphericalMesh : 海上
  • WaterVolume

BP_EarthSizedSphericalMeshtransform-location-z:-636000000にします。次に海上の影問題を修正するためMaterial Overrides-1から4までのmaterialを変更します。私は/Vefects/Water/VFX/WaterMaterialsを使用しました。

次にBP_EarthSizedOceanVolume MaaterialsWaterVolumeをセットします。Above, Underwaterを/Vefects/Water/VFX/UnderWaterに変更します。heightは0にします。これは海に入って出たときに海中を適用する高さを設定します。

これで正常に海を作ることができました。

ultra dynamic sky

ultra dynamic skyは空と天候を作ります。

まずblueprintを開いてHeightFogvisible:falseにします。これは霧を地平線に表示するものです。

rain

rain, snowなどのweatherではpostprocess volumeを使って画面に水滴を付けるなどの表現を行います。

[PostProcess Material]
/Vefects/Waters/Water/VFX/WaterOnSurfaces/Materials/MI_VFX_WaterOnLens_ClearCenter
/Vefects/Waters/Water/VFX/Rain/Materials/MI_VFX_CheapRain

twinmotion

建物はtwinmotionから持ってくるとよいでしょう。datasmithでexportしてueでimportします。指示通りにproject rootを指定すると/${name}_Assetsが作成されます。ただ、datasmithの置き場所は変更しても構いません。

すり抜け問題を解消するにはmeshを全選択して、右クリックでアセットアクション -> プロパティマトリクスで選択内容を... -> collision complexity(use complex collision as simple...)を選択します。

chair

椅子に座る動作を設定します。大変ですが以下のcomponentを使うと簡単にできます。調整は難しいですね。私の場合はgame animation sampleを使っていますが、最新版では勝手に動きが制御されるためanim montageをそのまま再生できません。したがって、別にabpを作成し、それを呼び出します。

browser

まず下記のmaterialをBP_browserに追加したwidget componentで呼び出します。collisionでcontrolします。

earth

基本的にはearth(mesh)をcollision(begin/end)でvisible(表示切替)すると良いと思いますが、安定はしません。また、横から惑星に入るとキャラクターの動作が停止する問題があります。これは平面ベースにmapが作成されているからだと思いますが、回避は難しいでしょう。一応、planetary oceansというassetは売られています。ですが、そこに既存の置物(陸地、建物)を置くのは難しく、置けたとしてもキャラクターの移動に問題が生じるかもしれません。

https://www.fab.com/listings/ea195c94-00af-43fb-bb1d-85a478320a27

vrm4u

vrm-0とvrm-1.0を使ってみましたが、まだvrm-0がオススメです。vrm-1.0は前髪が少し浮かんでしまう問題があります。また、影の問題が出たのでvrm-0で再構築しました。

構築方法はベースにSSSProfileを使用します。次にunlitで生成したskをもとに/Plugins/VRM4UContent/Util/Actor/PostShadow/BP_PoseCopyTooncustomを生成します。詳しくは/Plugins/VRM4UContent/ImportDataSet/DS_VRM_Customを見てください。

/Blueprints/CBP_SandboxCharacterでskにVrmPoseableMeshを追加してcustomで作ったskを当てます。次にBP_VrmOutlineComponentを追加して同じくcustomunlitなどを当て、設定にてCommon Width:0.05, Use Common Material:trueにします。

  • /Plugins/VRM4UContent/Util/Actor/PostShadow/BP_PoseCopyToon
  • VrmPoseableMesh
  • BP_VrmOutlineComponent

game animation sample

[issue]
1. anim montageなどを呼び出してそのまま再生が難しい
2. CPB_SandboxCharacterで別のABPを読み込んでも制御できない
 - 浮かんでいるときの手
 - BP_Superhero_FlightComponentのSprint Fly Speedを変更できない

/Blueprints/RetargetedCharacters/ABP_GenericReatagetで変数のIKRetargeter_MapにてRTG_UEFN_${name}を追加します。CBP_Sandbox_Character_${name}を作ります。開いてsk(Manny)などにあるComponent TagsにRTG_UEFN_${name}を追加します。最後にGameMode : GM_Sandbox > Bone : CBP_SandboxCharacter_${name}を指定して起動すればokです。

  • /Blueprints/RetargetedCharacters/ABP_GenericReataget : IKRetargeter_Map
  • /Blueprints/RetargetedCharacters/CBP_Sandbox_Character_${name} -> sk -> Component Tags:RTG_UEFN_${name}