diff --git a/.gitignore b/.gitignore index 88a8b8a0..b2a60439 100644 --- a/.gitignore +++ b/.gitignore @@ -1,16 +1,78 @@ -Binaries -DerivedDataCache -Intermediate -Saved -.vscode -.vs -*.VC.db -*.opensdf -*.opendb -*.sdf -*.sln -*.suo +# Visual Studio 2015 user specific files +.vs/ + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app +*.ipa + +# These project files can be generated by the engine *.xcodeproj *.xcworkspace -!plugins/** -*.BuiltData.uasset \ No newline at end of file +*.sln +*.suo +*.opensdf +*.sdf +*.VC.db +*.VC.opendb + +# Precompiled Assets +SourceArt/**/*.png +SourceArt/**/*.tga + +# Binary Files +Binaries/* +Plugins/*/Binaries/* +IvazMob/Binaries/* + +# Builds +Build/* + +# Whitelist PakBlacklist-.txt files +!Build/*/ +Build/*/** +!Build/*/PakBlacklist*.txt + +# Don't ignore icon files in Build +!Build/**/*.ico + +# Built data for maps +*_BuiltData.uasset + +# Configuration files generated by the Editor +Saved/* +IvazMob/Saved/* + +# Compiled source files for the engine to use +Intermediate/* +Plugins/*/Intermediate/* +IvazMob/Intermediate/* + +# Cache files for the editor to use +DerivedDataCache/* +Releases diff --git a/Config/DefaultDeviceProfiles.ini b/Config/DefaultDeviceProfiles.ini new file mode 100644 index 00000000..609c588b --- /dev/null +++ b/Config/DefaultDeviceProfiles.ini @@ -0,0 +1,53 @@ +[WindowsNoEditor DeviceProfile] +DeviceType=Windows +BaseProfileName=Windows ++TextureLODGroups=(Group=TEXTUREGROUP_World,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="aniso",MipFilter="point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_WorldNormalMap,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="aniso",MipFilter="point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_WorldSpecular,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="aniso",MipFilter="point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Character,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="aniso",MipFilter="point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_CharacterNormalMap,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="aniso",MipFilter="point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_CharacterSpecular,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="aniso",MipFilter="point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Weapon,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="aniso",MipFilter="point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_WeaponNormalMap,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="aniso",MipFilter="point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_WeaponSpecular,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="aniso",MipFilter="point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Vehicle,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="aniso",MipFilter="point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_VehicleNormalMap,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="aniso",MipFilter="point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_VehicleSpecular,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="aniso",MipFilter="point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Cinematic,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="aniso",MipFilter="point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Effects,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="linear",MipFilter="point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_EffectsNotFiltered,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="aniso",MipFilter="point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Skybox,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="aniso",MipFilter="point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_UI,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_NoMipmaps,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="aniso",MipFilter="point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Lightmap,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="aniso",MipFilter="point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_RenderTarget,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="aniso",MipFilter="point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_MobileFlattened,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="aniso",MipFilter="point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_ProcBuilding_Face,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="Aniso",MipFilter="Point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_ProcBuilding_LightMap,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="Aniso",MipFilter="Point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Shadowmap,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=3,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="aniso",MipFilter="point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_ColorLookupTable,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="Aniso",MipFilter="Point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Terrain_Heightmap,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="aniso",MipFilter="point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Terrain_Weightmap,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="aniso",MipFilter="point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Bokeh,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=256,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="linear",MipFilter="linear",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_IESLightProfile,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="Aniso",MipFilter="Point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Pixels2D,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="point",MipFilter="point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_HierarchicalLOD,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="Aniso",MipFilter="Point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Impostor,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="Aniso",MipFilter="Point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_ImpostorNormalDepth,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="Aniso",MipFilter="Point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_8BitData,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_NoMipmaps,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="point",MipFilter="point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_16BitData,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_NoMipmaps,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="point",MipFilter="point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Project01,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="Aniso",MipFilter="Point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Project02,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="Aniso",MipFilter="Point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Project03,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="Aniso",MipFilter="Point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Project04,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="Aniso",MipFilter="Point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Project05,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="Aniso",MipFilter="Point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Project06,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="Aniso",MipFilter="Point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Project07,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="Aniso",MipFilter="Point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Project08,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="Aniso",MipFilter="Point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Project09,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="Aniso",MipFilter="Point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Project10,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="Aniso",MipFilter="Point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Project11,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="Aniso",MipFilter="Point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Project12,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="Aniso",MipFilter="Point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Project13,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="Aniso",MipFilter="Point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Project14,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="Aniso",MipFilter="Point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) ++TextureLODGroups=(Group=TEXTUREGROUP_Project15,LODBias=0,LODBias_Smaller=-1,LODBias_Smallest=-1,NumStreamedMips=-1,MipGenSettings=TMGS_SimpleAverage,MinLODSize=1,MaxLODSize=1024,MaxLODSize_Smaller=-1,MaxLODSize_Smallest=-1,OptionalLODBias=0,OptionalMaxLODSize=1024,MinMagFilter="Aniso",MipFilter="Point",MipLoadOptions=AllMips,HighPriorityLoad=False,DuplicateNonOptionalMips=False,Downscale=1.000000,DownscaleOptions=SimpleAverage,VirtualTextureTileCountBias=0,VirtualTextureTileSizeBias=0,LossyCompressionAmount=TLCA_Default) + diff --git a/Config/DefaultEditor.ini b/Config/DefaultEditor.ini index fee97f70..05bb01e5 100644 --- a/Config/DefaultEditor.ini +++ b/Config/DefaultEditor.ini @@ -22,3 +22,21 @@ DefaultWidgetParentClass=/Script/UMG.UserWidget +DebugResolutions=(Width=3840,Height=2160,Description="",Color=(R=0.164987,G=0.137876,B=1.000000,A=0.462000)) Version=1 +[/Script/Localization.LocalizationSettings] +-EngineTargetsSettings=(Name="Engine",Guid=33482D004789784C9DA695A682ACCA1B,TargetDependencies=,AdditionalManifestDependencies=,RequiredModuleNames=,GatherFromTextFiles=(IsEnabled=True,SearchDirectories=((Path="Source/Runtime/"),(Path="Source/Developer/"),(Path="Config/")),ExcludePathWildcards=((Pattern="Source/Developer/NoRedist/CommunityPortalServices/*"),(Pattern="Source/Developer/NoRedist/UnrealEngineLauncherServices/*"),(Pattern="Source/Developer/NoRedist/BuildPatchServices/*")),FileExtensions=((Pattern="cpp"),(Pattern="h"),(Pattern="c"),(Pattern="inl"),(Pattern="mm"),(Pattern="ini"))),GatherFromPackages=(IsEnabled=True,IncludePathWildcards=((Pattern="Content/*")),ExcludePathWildcards=((Pattern="Content/Editor/*"),(Pattern="Content/Tutorial/*"),(Pattern="Content/Developers/*"),(Pattern="Content/TestPackages/*"),(Pattern="Content/QA_Assets/*"),(Pattern="Content/Maps/Automation/*"),(Pattern="Content/EngineSounds/*")),FileExtensions=((Pattern="umap"),(Pattern="uasset")),ShouldGatherFromEditorOnlyData=True),GatherFromMetaData=(IsEnabled=False,IncludePathWildcards=,ExcludePathWildcards=,KeySpecifications=,ShouldGatherFromEditorOnlyData=True),NativeCultureIndex=0,SupportedCulturesStatistics=((CultureName="en"),(CultureName="es"),(CultureName="ja"),(CultureName="ko"),(CultureName="pt-BR"),(CultureName="zh-CN"))) +-EngineTargetsSettings=(Name="Editor",Guid=AC8BFD2A41A2FB2893BB8EA0AF903E6D,TargetDependencies=(33482D004789784C9DA695A682ACCA1B),AdditionalManifestDependencies=,RequiredModuleNames=,GatherFromTextFiles=(IsEnabled=True,SearchDirectories=((Path="Source/Editor/")),ExcludePathWildcards=,FileExtensions=((Pattern="cpp"),(Pattern="h"),(Pattern="c"),(Pattern="inl"),(Pattern="mm"))),GatherFromPackages=(IsEnabled=True,IncludePathWildcards=((Pattern="Content/Editor/*"),(Pattern="Content/Editor*")),ExcludePathWildcards=,FileExtensions=((Pattern="umap"),(Pattern="uasset")),ShouldGatherFromEditorOnlyData=True),GatherFromMetaData=(IsEnabled=False,IncludePathWildcards=,ExcludePathWildcards=,KeySpecifications=,ShouldGatherFromEditorOnlyData=True),NativeCultureIndex=0,SupportedCulturesStatistics=((CultureName="en"),(CultureName="es"),(CultureName="ja"),(CultureName="ko"),(CultureName="pt-BR"),(CultureName="zh-CN"))) +-EngineTargetsSettings=(Name="EditorTutorials",Guid=00F8E3AD47F0A73D50D46881C14DF28F,TargetDependencies=(33482D004789784C9DA695A682ACCA1B,AC8BFD2A41A2FB2893BB8EA0AF903E6D),AdditionalManifestDependencies=,RequiredModuleNames=("IntroTutorials"),GatherFromTextFiles=(IsEnabled=False,SearchDirectories=,ExcludePathWildcards=,FileExtensions=((Pattern="h"),(Pattern="cpp"),(Pattern="ini"))),GatherFromPackages=(IsEnabled=True,IncludePathWildcards=((Pattern="Content/Tutorial/*")),ExcludePathWildcards=,FileExtensions=((Pattern="umap"),(Pattern="uasset")),ShouldGatherFromEditorOnlyData=True),GatherFromMetaData=(IsEnabled=False,IncludePathWildcards=,ExcludePathWildcards=,KeySpecifications=,ShouldGatherFromEditorOnlyData=True),NativeCultureIndex=0,SupportedCulturesStatistics=((CultureName="en"),(CultureName="es"),(CultureName="ja"),(CultureName="ko"),(CultureName="pt-BR"),(CultureName="zh-CN"))) +-EngineTargetsSettings=(Name="PropertyNames",Guid=E391A8B149980E8154E056AF2DA49479,TargetDependencies=(33482D004789784C9DA695A682ACCA1B,AC8BFD2A41A2FB2893BB8EA0AF903E6D),AdditionalManifestDependencies=,RequiredModuleNames=,GatherFromTextFiles=(IsEnabled=False,SearchDirectories=,ExcludePathWildcards=,FileExtensions=((Pattern="h"),(Pattern="cpp"),(Pattern="ini"))),GatherFromPackages=(IsEnabled=False,IncludePathWildcards=,ExcludePathWildcards=,FileExtensions=((Pattern="umap"),(Pattern="uasset")),ShouldGatherFromEditorOnlyData=True),GatherFromMetaData=(IsEnabled=True,IncludePathWildcards=((Pattern="Source/Editor/*"),(Pattern="Source/Runtime/*"),(Pattern="Source/Developer/*")),ExcludePathWildcards=((Pattern="Source/Developer/NoRedist/CommunityPortalServices/*")),KeySpecifications=((MetaDataKey=(Name="DisplayName"),TextNamespace="UObjectDisplayNames",TextKeyPattern=(Pattern="{FieldPath}"))),ShouldGatherFromEditorOnlyData=True),NativeCultureIndex=0,SupportedCulturesStatistics=((CultureName="en"),(CultureName="es"),(CultureName="ja"),(CultureName="ko"),(CultureName="pt-BR"),(CultureName="zh-CN"))) +-EngineTargetsSettings=(Name="ToolTips",Guid=0F116534468918AEA432DD8C77703BA8,TargetDependencies=(33482D004789784C9DA695A682ACCA1B,AC8BFD2A41A2FB2893BB8EA0AF903E6D),AdditionalManifestDependencies=,RequiredModuleNames=,GatherFromTextFiles=(IsEnabled=False,SearchDirectories=,ExcludePathWildcards=,FileExtensions=((Pattern="h"),(Pattern="cpp"),(Pattern="ini"))),GatherFromPackages=(IsEnabled=False,IncludePathWildcards=,ExcludePathWildcards=,FileExtensions=((Pattern="umap"),(Pattern="uasset")),ShouldGatherFromEditorOnlyData=True),GatherFromMetaData=(IsEnabled=True,IncludePathWildcards=((Pattern="Source/Editor/*"),(Pattern="Source/Runtime/*"),(Pattern="Source/Developer/*")),ExcludePathWildcards=((Pattern="Source/Developer/NoRedist/CommunityPortalServices/*")),KeySpecifications=((MetaDataKey=(Name="ToolTip"),TextNamespace="UObjectToolTips",TextKeyPattern=(Pattern="{FieldPath}")),(MetaDataKey=(Name="ShortToolTip"),TextNamespace="UObjectShortToolTips",TextKeyPattern=(Pattern="{FieldPath}"))),ShouldGatherFromEditorOnlyData=True),NativeCultureIndex=0,SupportedCulturesStatistics=((CultureName="en"),(CultureName="es"),(CultureName="ja"),(CultureName="ko"),(CultureName="pt-BR"),(CultureName="zh-CN"))) +-EngineTargetsSettings=(Name="Keywords",Guid=AE89AECB47475F420D0D69A5547515DC,TargetDependencies=(33482D004789784C9DA695A682ACCA1B,AC8BFD2A41A2FB2893BB8EA0AF903E6D),AdditionalManifestDependencies=,RequiredModuleNames=,GatherFromTextFiles=(IsEnabled=False,SearchDirectories=,ExcludePathWildcards=,FileExtensions=((Pattern="h"),(Pattern="cpp"),(Pattern="ini"))),GatherFromPackages=(IsEnabled=False,IncludePathWildcards=,ExcludePathWildcards=,FileExtensions=((Pattern="umap"),(Pattern="uasset")),ShouldGatherFromEditorOnlyData=True),GatherFromMetaData=(IsEnabled=True,IncludePathWildcards=((Pattern="Source/Editor/*"),(Pattern="Source/Runtime/*"),(Pattern="Source/Developer/*")),ExcludePathWildcards=((Pattern="Source/Developer/NoRedist/CommunityPortalServices/*")),KeySpecifications=((MetaDataKey=(Name="Keywords"),TextNamespace="UObjectKeywords",TextKeyPattern=(Pattern="{FieldPath}"))),ShouldGatherFromEditorOnlyData=True),NativeCultureIndex=0,SupportedCulturesStatistics=((CultureName="en"),(CultureName="es"),(CultureName="ja"),(CultureName="ko"),(CultureName="pt-BR"),(CultureName="zh-CN"))) +-EngineTargetsSettings=(Name="Category",Guid=14B8DEE642A6A7AFEB5A28B959EC373A,TargetDependencies=,AdditionalManifestDependencies=,RequiredModuleNames=,GatherFromTextFiles=(IsEnabled=False,SearchDirectories=,ExcludePathWildcards=,FileExtensions=((Pattern="h"),(Pattern="cpp"),(Pattern="ini"))),GatherFromPackages=(IsEnabled=False,IncludePathWildcards=,ExcludePathWildcards=,FileExtensions=((Pattern="umap"),(Pattern="uasset")),ShouldGatherFromEditorOnlyData=False),GatherFromMetaData=(IsEnabled=True,IncludePathWildcards=((Pattern="Source/Editor/*"),(Pattern="Source/Runtime/*"),(Pattern="Source/Developer/*")),ExcludePathWildcards=((Pattern="Source/Developer/NoRedist/CommunityPortalServices/*")),KeySpecifications=((MetaDataKey=(Name="Category"),TextNamespace="UObjectCategory",TextKeyPattern=(Pattern="{FieldPath}"))),ShouldGatherFromEditorOnlyData=True),NativeCultureIndex=0,SupportedCulturesStatistics=((CultureName="en"),(CultureName="es"),(CultureName="ja"),(CultureName="ko"),(CultureName="pt-BR"),(CultureName="zh-CN"))) ++EngineTargetsSettings=(Name="Engine",Guid=33482D004789784C9DA695A682ACCA1B,TargetDependencies=,AdditionalManifestDependencies=,RequiredModuleNames=,GatherFromTextFiles=(IsEnabled=True,SearchDirectories=((Path="Source/Runtime/"),(Path="Source/Developer/"),(Path="Config/")),ExcludePathWildcards=((Pattern="Source/Developer/NoRedist/CommunityPortalServices/*"),(Pattern="Source/Developer/NoRedist/UnrealEngineLauncherServices/*"),(Pattern="Source/Developer/NoRedist/BuildPatchServices/*")),FileExtensions=((Pattern="cpp"),(Pattern="h"),(Pattern="c"),(Pattern="inl"),(Pattern="mm"),(Pattern="ini")),ShouldGatherFromEditorOnlyData=False),GatherFromPackages=(IsEnabled=True,IncludePathWildcards=((Pattern="Content/*")),ExcludePathWildcards=((Pattern="Content/Editor/*"),(Pattern="Content/Tutorial/*"),(Pattern="Content/Developers/*"),(Pattern="Content/TestPackages/*"),(Pattern="Content/QA_Assets/*"),(Pattern="Content/Maps/Automation/*"),(Pattern="Content/EngineSounds/*")),FileExtensions=((Pattern="umap"),(Pattern="uasset")),Collections=,ExcludeClasses=,ShouldExcludeDerivedClasses=False,ShouldGatherFromEditorOnlyData=True,SkipGatherCache=False),GatherFromMetaData=(IsEnabled=False,IncludePathWildcards=,ExcludePathWildcards=,KeySpecifications=,ShouldGatherFromEditorOnlyData=True),ExportSettings=(CollapseMode=IdenticalTextIdAndSource,POFormat=Unreal,ShouldPersistCommentsOnExport=False,ShouldAddSourceLocationsAsComments=True),CompileSettings=(SkipSourceCheck=False,ValidateFormatPatterns=True,ValidateSafeWhitespace=False),ImportDialogueSettings=(RawAudioPath=(Path=""),ImportedDialogueFolder="ImportedDialogue",bImportNativeAsSource=False),NativeCultureIndex=0,SupportedCulturesStatistics=((CultureName="en"),(CultureName="es"),(CultureName="ja"),(CultureName="ko"),(CultureName="pt-BR"),(CultureName="zh-CN"))) ++EngineTargetsSettings=(Name="Editor",Guid=AC8BFD2A41A2FB2893BB8EA0AF903E6D,TargetDependencies=(33482D004789784C9DA695A682ACCA1B),AdditionalManifestDependencies=,RequiredModuleNames=,GatherFromTextFiles=(IsEnabled=True,SearchDirectories=((Path="Source/Editor/")),ExcludePathWildcards=,FileExtensions=((Pattern="cpp"),(Pattern="h"),(Pattern="c"),(Pattern="inl"),(Pattern="mm")),ShouldGatherFromEditorOnlyData=False),GatherFromPackages=(IsEnabled=True,IncludePathWildcards=((Pattern="Content/Editor/*"),(Pattern="Content/Editor*")),ExcludePathWildcards=,FileExtensions=((Pattern="umap"),(Pattern="uasset")),Collections=,ExcludeClasses=,ShouldExcludeDerivedClasses=False,ShouldGatherFromEditorOnlyData=True,SkipGatherCache=False),GatherFromMetaData=(IsEnabled=False,IncludePathWildcards=,ExcludePathWildcards=,KeySpecifications=,ShouldGatherFromEditorOnlyData=True),ExportSettings=(CollapseMode=IdenticalTextIdAndSource,POFormat=Unreal,ShouldPersistCommentsOnExport=False,ShouldAddSourceLocationsAsComments=True),CompileSettings=(SkipSourceCheck=False,ValidateFormatPatterns=True,ValidateSafeWhitespace=False),ImportDialogueSettings=(RawAudioPath=(Path=""),ImportedDialogueFolder="ImportedDialogue",bImportNativeAsSource=False),NativeCultureIndex=0,SupportedCulturesStatistics=((CultureName="en"),(CultureName="es"),(CultureName="ja"),(CultureName="ko"),(CultureName="pt-BR"),(CultureName="zh-CN"))) ++EngineTargetsSettings=(Name="EditorTutorials",Guid=00F8E3AD47F0A73D50D46881C14DF28F,TargetDependencies=(33482D004789784C9DA695A682ACCA1B,AC8BFD2A41A2FB2893BB8EA0AF903E6D),AdditionalManifestDependencies=,RequiredModuleNames=("IntroTutorials"),GatherFromTextFiles=(IsEnabled=False,SearchDirectories=,ExcludePathWildcards=,FileExtensions=((Pattern="h"),(Pattern="cpp"),(Pattern="ini")),ShouldGatherFromEditorOnlyData=False),GatherFromPackages=(IsEnabled=True,IncludePathWildcards=((Pattern="Content/Tutorial/*")),ExcludePathWildcards=,FileExtensions=((Pattern="umap"),(Pattern="uasset")),Collections=,ExcludeClasses=,ShouldExcludeDerivedClasses=False,ShouldGatherFromEditorOnlyData=True,SkipGatherCache=False),GatherFromMetaData=(IsEnabled=False,IncludePathWildcards=,ExcludePathWildcards=,KeySpecifications=,ShouldGatherFromEditorOnlyData=True),ExportSettings=(CollapseMode=IdenticalTextIdAndSource,POFormat=Unreal,ShouldPersistCommentsOnExport=False,ShouldAddSourceLocationsAsComments=True),CompileSettings=(SkipSourceCheck=False,ValidateFormatPatterns=True,ValidateSafeWhitespace=False),ImportDialogueSettings=(RawAudioPath=(Path=""),ImportedDialogueFolder="ImportedDialogue",bImportNativeAsSource=False),NativeCultureIndex=0,SupportedCulturesStatistics=((CultureName="en"),(CultureName="es"),(CultureName="ja"),(CultureName="ko"),(CultureName="pt-BR"),(CultureName="zh-CN"))) ++EngineTargetsSettings=(Name="PropertyNames",Guid=E391A8B149980E8154E056AF2DA49479,TargetDependencies=(33482D004789784C9DA695A682ACCA1B,AC8BFD2A41A2FB2893BB8EA0AF903E6D),AdditionalManifestDependencies=,RequiredModuleNames=,GatherFromTextFiles=(IsEnabled=False,SearchDirectories=,ExcludePathWildcards=,FileExtensions=((Pattern="h"),(Pattern="cpp"),(Pattern="ini")),ShouldGatherFromEditorOnlyData=False),GatherFromPackages=(IsEnabled=False,IncludePathWildcards=,ExcludePathWildcards=,FileExtensions=((Pattern="umap"),(Pattern="uasset")),Collections=,ExcludeClasses=,ShouldExcludeDerivedClasses=False,ShouldGatherFromEditorOnlyData=True,SkipGatherCache=False),GatherFromMetaData=(IsEnabled=True,IncludePathWildcards=((Pattern="Source/Editor/*"),(Pattern="Source/Runtime/*"),(Pattern="Source/Developer/*")),ExcludePathWildcards=((Pattern="Source/Developer/NoRedist/CommunityPortalServices/*")),KeySpecifications=((MetaDataKey=(Name="DisplayName"),TextNamespace="UObjectDisplayNames",TextKeyPattern=(Pattern="{FieldPath}"))),ShouldGatherFromEditorOnlyData=True),ExportSettings=(CollapseMode=IdenticalTextIdAndSource,POFormat=Unreal,ShouldPersistCommentsOnExport=False,ShouldAddSourceLocationsAsComments=True),CompileSettings=(SkipSourceCheck=False,ValidateFormatPatterns=True,ValidateSafeWhitespace=False),ImportDialogueSettings=(RawAudioPath=(Path=""),ImportedDialogueFolder="ImportedDialogue",bImportNativeAsSource=False),NativeCultureIndex=0,SupportedCulturesStatistics=((CultureName="en"),(CultureName="es"),(CultureName="ja"),(CultureName="ko"),(CultureName="pt-BR"),(CultureName="zh-CN"))) ++EngineTargetsSettings=(Name="ToolTips",Guid=0F116534468918AEA432DD8C77703BA8,TargetDependencies=(33482D004789784C9DA695A682ACCA1B,AC8BFD2A41A2FB2893BB8EA0AF903E6D),AdditionalManifestDependencies=,RequiredModuleNames=,GatherFromTextFiles=(IsEnabled=False,SearchDirectories=,ExcludePathWildcards=,FileExtensions=((Pattern="h"),(Pattern="cpp"),(Pattern="ini")),ShouldGatherFromEditorOnlyData=False),GatherFromPackages=(IsEnabled=False,IncludePathWildcards=,ExcludePathWildcards=,FileExtensions=((Pattern="umap"),(Pattern="uasset")),Collections=,ExcludeClasses=,ShouldExcludeDerivedClasses=False,ShouldGatherFromEditorOnlyData=True,SkipGatherCache=False),GatherFromMetaData=(IsEnabled=True,IncludePathWildcards=((Pattern="Source/Editor/*"),(Pattern="Source/Runtime/*"),(Pattern="Source/Developer/*")),ExcludePathWildcards=((Pattern="Source/Developer/NoRedist/CommunityPortalServices/*")),KeySpecifications=((MetaDataKey=(Name="ToolTip"),TextNamespace="UObjectToolTips",TextKeyPattern=(Pattern="{FieldPath}")),(MetaDataKey=(Name="ShortToolTip"),TextNamespace="UObjectShortToolTips",TextKeyPattern=(Pattern="{FieldPath}"))),ShouldGatherFromEditorOnlyData=True),ExportSettings=(CollapseMode=IdenticalTextIdAndSource,POFormat=Unreal,ShouldPersistCommentsOnExport=False,ShouldAddSourceLocationsAsComments=True),CompileSettings=(SkipSourceCheck=False,ValidateFormatPatterns=True,ValidateSafeWhitespace=False),ImportDialogueSettings=(RawAudioPath=(Path=""),ImportedDialogueFolder="ImportedDialogue",bImportNativeAsSource=False),NativeCultureIndex=0,SupportedCulturesStatistics=((CultureName="en"),(CultureName="es"),(CultureName="ja"),(CultureName="ko"),(CultureName="pt-BR"),(CultureName="zh-CN"))) ++EngineTargetsSettings=(Name="Keywords",Guid=AE89AECB47475F420D0D69A5547515DC,TargetDependencies=(33482D004789784C9DA695A682ACCA1B,AC8BFD2A41A2FB2893BB8EA0AF903E6D),AdditionalManifestDependencies=,RequiredModuleNames=,GatherFromTextFiles=(IsEnabled=False,SearchDirectories=,ExcludePathWildcards=,FileExtensions=((Pattern="h"),(Pattern="cpp"),(Pattern="ini")),ShouldGatherFromEditorOnlyData=False),GatherFromPackages=(IsEnabled=False,IncludePathWildcards=,ExcludePathWildcards=,FileExtensions=((Pattern="umap"),(Pattern="uasset")),Collections=,ExcludeClasses=,ShouldExcludeDerivedClasses=False,ShouldGatherFromEditorOnlyData=True,SkipGatherCache=False),GatherFromMetaData=(IsEnabled=True,IncludePathWildcards=((Pattern="Source/Editor/*"),(Pattern="Source/Runtime/*"),(Pattern="Source/Developer/*")),ExcludePathWildcards=((Pattern="Source/Developer/NoRedist/CommunityPortalServices/*")),KeySpecifications=((MetaDataKey=(Name="Keywords"),TextNamespace="UObjectKeywords",TextKeyPattern=(Pattern="{FieldPath}"))),ShouldGatherFromEditorOnlyData=True),ExportSettings=(CollapseMode=IdenticalTextIdAndSource,POFormat=Unreal,ShouldPersistCommentsOnExport=False,ShouldAddSourceLocationsAsComments=True),CompileSettings=(SkipSourceCheck=False,ValidateFormatPatterns=True,ValidateSafeWhitespace=False),ImportDialogueSettings=(RawAudioPath=(Path=""),ImportedDialogueFolder="ImportedDialogue",bImportNativeAsSource=False),NativeCultureIndex=0,SupportedCulturesStatistics=((CultureName="en"),(CultureName="es"),(CultureName="ja"),(CultureName="ko"),(CultureName="pt-BR"),(CultureName="zh-CN"))) ++EngineTargetsSettings=(Name="Category",Guid=14B8DEE642A6A7AFEB5A28B959EC373A,TargetDependencies=,AdditionalManifestDependencies=,RequiredModuleNames=,GatherFromTextFiles=(IsEnabled=False,SearchDirectories=,ExcludePathWildcards=,FileExtensions=((Pattern="h"),(Pattern="cpp"),(Pattern="ini")),ShouldGatherFromEditorOnlyData=False),GatherFromPackages=(IsEnabled=False,IncludePathWildcards=,ExcludePathWildcards=,FileExtensions=((Pattern="umap"),(Pattern="uasset")),Collections=,ExcludeClasses=,ShouldExcludeDerivedClasses=False,ShouldGatherFromEditorOnlyData=False,SkipGatherCache=False),GatherFromMetaData=(IsEnabled=True,IncludePathWildcards=((Pattern="Source/Editor/*"),(Pattern="Source/Runtime/*"),(Pattern="Source/Developer/*")),ExcludePathWildcards=((Pattern="Source/Developer/NoRedist/CommunityPortalServices/*")),KeySpecifications=((MetaDataKey=(Name="Category"),TextNamespace="UObjectCategory",TextKeyPattern=(Pattern="{FieldPath}"))),ShouldGatherFromEditorOnlyData=True),ExportSettings=(CollapseMode=IdenticalTextIdAndSource,POFormat=Unreal,ShouldPersistCommentsOnExport=False,ShouldAddSourceLocationsAsComments=True),CompileSettings=(SkipSourceCheck=False,ValidateFormatPatterns=True,ValidateSafeWhitespace=False),ImportDialogueSettings=(RawAudioPath=(Path=""),ImportedDialogueFolder="ImportedDialogue",bImportNativeAsSource=False),NativeCultureIndex=0,SupportedCulturesStatistics=((CultureName="en"),(CultureName="es"),(CultureName="ja"),(CultureName="ko"),(CultureName="pt-BR"),(CultureName="zh-CN"))) +-GameTargetsSettings=(Name="Game",Guid=AE0EA34A45461A25BA65A391026F19F8,TargetDependencies=(33482D004789784C9DA695A682ACCA1B,AC8BFD2A41A2FB2893BB8EA0AF903E6D),AdditionalManifestDependencies=,RequiredModuleNames=,GatherFromTextFiles=(IsEnabled=False,SearchDirectories=,ExcludePathWildcards=,FileExtensions=((Pattern="h"),(Pattern="cpp"),(Pattern="ini"))),GatherFromPackages=(IsEnabled=False,IncludePathWildcards=,ExcludePathWildcards=,FileExtensions=((Pattern="umap"),(Pattern="uasset")),ShouldGatherFromEditorOnlyData=False),GatherFromMetaData=(IsEnabled=False,IncludePathWildcards=,ExcludePathWildcards=,KeySpecifications=,ShouldGatherFromEditorOnlyData=False),NativeCultureIndex=-1,SupportedCulturesStatistics=((CultureName="en"))) ++GameTargetsSettings=(Name="Game",Guid=AE0EA34A45461A25BA65A391026F19F8,TargetDependencies=(33482D004789784C9DA695A682ACCA1B,AC8BFD2A41A2FB2893BB8EA0AF903E6D),AdditionalManifestDependencies=,RequiredModuleNames=,GatherFromTextFiles=(IsEnabled=False,SearchDirectories=,ExcludePathWildcards=,FileExtensions=((Pattern="h"),(Pattern="cpp"),(Pattern="ini")),ShouldGatherFromEditorOnlyData=False),GatherFromPackages=(IsEnabled=True,IncludePathWildcards=((Pattern="Content/Blueprints/UI/*")),ExcludePathWildcards=,FileExtensions=((Pattern="umap"),(Pattern="uasset")),Collections=,ExcludeClasses=,ShouldExcludeDerivedClasses=False,ShouldGatherFromEditorOnlyData=False,SkipGatherCache=False),GatherFromMetaData=(IsEnabled=False,IncludePathWildcards=,ExcludePathWildcards=,KeySpecifications=,ShouldGatherFromEditorOnlyData=False),ExportSettings=(CollapseMode=IdenticalTextIdAndSource,POFormat=Unreal,ShouldPersistCommentsOnExport=False,ShouldAddSourceLocationsAsComments=True),CompileSettings=(SkipSourceCheck=False,ValidateFormatPatterns=True,ValidateSafeWhitespace=False),ImportDialogueSettings=(RawAudioPath=(Path=""),ImportedDialogueFolder="ImportedDialogue",bImportNativeAsSource=False),NativeCultureIndex=1,SupportedCulturesStatistics=((CultureName="en"),(CultureName="ru-RU"))) + diff --git a/Config/DefaultEngine.ini b/Config/DefaultEngine.ini index 161534e8..03fd23a4 100644 --- a/Config/DefaultEngine.ini +++ b/Config/DefaultEngine.ini @@ -3,6 +3,8 @@ [/Script/EngineSettings.GameMapsSettings] GameDefaultMap=/Game/Maps/MainScene.MainScene EditorStartupMap=/Game/Maps/MainScene.MainScene +GlobalDefaultGameMode=/Game/Blueprints/Player/myGM.myGM_C +GameInstanceClass=/Game/Blueprints/Player/GI.GI_C [/Script/HardwareTargeting.HardwareTargetingSettings] TargetedHardwareClass=Desktop @@ -13,6 +15,7 @@ AppliedDefaultGraphicsPerformance=Maximum [/Script/Engine.Engine] +ActiveGameNameRedirects=(OldGameName="TP_BlankBP",NewGameName="/Script/Ivazowsky") +ActiveGameNameRedirects=(OldGameName="/Script/TP_BlankBP",NewGameName="/Script/Ivazowsky") +NearClipPlane=2.000000 [/Script/Engine.RendererSettings] r.DefaultFeature.Bloom=False @@ -24,11 +27,16 @@ r.SupportLowQualityLightmaps=False r.SkinCache.CompileShaders=True r.RayTracing=True r.RayTracing.UseTextureLod=True -r.DefaultFeature.AntiAliasing=2 -r.MinScreenRadiusForLights=0.000100 +r.DefaultFeature.MotionBlur=False +r.AllowOcclusionQueries=True +r.MinScreenRadiusForLights=0.000000 +r.DefaultFeature.AntiAliasing=1 [/Script/Engine.UserInterfaceSettings] UIScaleCurve=(EditorCurveData=(Keys=((Time=540.000000,Value=0.250000),(Time=2160.000000,Value=1.000000)),DefaultValue=340282346638528859811704183484516925440.000000,PreInfinityExtrap=RCCE_Constant,PostInfinityExtrap=RCCE_Constant),ExternalCurve=None) +UIScaleRule=ScaleToFit +DesignScreenSize=(X=3840,Y=2160) +ApplicationScale=1.000000 [/Script/Engine.CollisionProfile] -Profiles=(Name="NoCollision",CollisionEnabled=NoCollision,ObjectTypeName="WorldStatic",CustomResponses=((Channel="Visibility",Response=ECR_Ignore),(Channel="Camera",Response=ECR_Ignore)),HelpMessage="No collision",bCanModify=False) @@ -68,6 +76,10 @@ UIScaleCurve=(EditorCurveData=(Keys=((Time=540.000000,Value=0.250000),(Time=2160 +Profiles=(Name="Vehicle",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="Vehicle",CustomResponses=,HelpMessage="Vehicle object that blocks Vehicle, WorldStatic, and WorldDynamic. All other channels will be set to default.") +Profiles=(Name="UI",CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility"),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldStatic object that overlaps all actors by default. All new custom channels will use its own default response. ") +Profiles=(Name="WaterBodyCollision",CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName="",CustomResponses=((Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility",Response=ECR_Ignore),(Channel="Camera",Response=ECR_Ignore),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="Default Water Collision Profile (Created by Water Plugin)") ++Profiles=(Name="VRInteract",CollisionEnabled=QueryOnly,bCanModify=True,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="WorldStatic",Response=ECR_Ignore),(Channel="WorldDynamic",Response=ECR_Ignore),(Channel="Pawn",Response=ECR_Ignore),(Channel="Visibility",Response=ECR_Ignore),(Channel="Camera",Response=ECR_Ignore),(Channel="PhysicsBody",Response=ECR_Ignore),(Channel="Vehicle",Response=ECR_Ignore),(Channel="Destructible",Response=ECR_Ignore),(Channel="VR")),HelpMessage="Needs description") ++DefaultChannelResponses=(Channel=ECC_GameTraceChannel1,DefaultResponse=ECR_Ignore,bTraceType=True,bStaticObject=False,Name="VR") ++EditProfiles=(Name="Pawn",CustomResponses=((Channel="Camera",Response=ECR_Ignore))) ++EditProfiles=(Name="Trigger",CustomResponses=((Channel="VR",Response=ECR_Ignore))) -ProfileRedirects=(OldName="BlockingVolume",NewName="InvisibleWall") -ProfileRedirects=(OldName="InterpActor",NewName="IgnoreOnlyPawn") -ProfileRedirects=(OldName="StaticMeshComponent",NewName="BlockAllDynamic") @@ -90,3 +102,44 @@ UIScaleCurve=(EditorCurveData=(Keys=((Time=540.000000,Value=0.250000),(Time=2160 [/Script/WindowsTargetPlatform.WindowsTargetSettings] DefaultGraphicsRHI=DefaultGraphicsRHI_DX12 +[/Script/Engine.StreamingSettings] +s.UseBackgroundLevelStreaming=False + +[/Script/NavigationSystem.NavigationSystemV1] +DefaultAgentName=None +CrowdManagerClass=/Script/AIModule.CrowdManager +bAutoCreateNavigationData=True +bSpawnNavDataInNavBoundsLevel=False +bAllowClientSideNavigation=False +bShouldDiscardSubLevelNavData=True +bTickWhilePaused=False +bInitialBuildingLocked=False +bSkipAgentHeightCheckWhenPickingNavData=False +bGenerateNavigationOnlyAroundNavigationInvokers=True +ActiveTilesUpdateInterval=1.000000 +DataGatheringMode=Instant +DirtyAreaWarningSizeThreshold=-1.000000 ++SupportedAgents=(Name="VR",Color=(B=0,G=255,R=140,A=36),DefaultQueryExtent=(X=50.000000,Y=50.000000,Z=250.000000),NavDataClass=/Script/NavigationSystem.RecastNavMesh,AgentRadius=15.000000,AgentHeight=144.000000,AgentStepHeight=20.000000,NavWalkingSearchHeightScale=0.500000,PreferredNavData=/Script/NavigationSystem.RecastNavMesh,bCanCrouch=False,bCanJump=False,bCanWalk=False,bCanSwim=False,bCanFly=False) ++SupportedAgents=(Name="bear",Color=(B=28,G=28,R=183,A=142),DefaultQueryExtent=(X=50.000000,Y=50.000000,Z=250.000000),NavDataClass=/Script/NavigationSystem.RecastNavMesh,AgentRadius=100.000000,AgentHeight=50.000000,AgentStepHeight=-1.000000,NavWalkingSearchHeightScale=0.500000,PreferredNavData=/Script/NavigationSystem.RecastNavMesh,bCanCrouch=False,bCanJump=False,bCanWalk=False,bCanSwim=False,bCanFly=False) ++SupportedAgents=(Name="people",Color=(B=204,G=151,R=0,A=148),DefaultQueryExtent=(X=50.000000,Y=50.000000,Z=250.000000),NavDataClass=/Script/NavigationSystem.RecastNavMesh,AgentRadius=35.000000,AgentHeight=180.000000,AgentStepHeight=-1.000000,NavWalkingSearchHeightScale=0.500000,PreferredNavData=/Script/NavigationSystem.RecastNavMesh,bCanCrouch=False,bCanJump=False,bCanWalk=False,bCanSwim=False,bCanFly=False) +SupportedAgentsMask=(bSupportsAgent0=True,bSupportsAgent1=True,bSupportsAgent2=True,bSupportsAgent3=True,bSupportsAgent4=True,bSupportsAgent5=True,bSupportsAgent6=True,bSupportsAgent7=True,bSupportsAgent8=True,bSupportsAgent9=True,bSupportsAgent10=True,bSupportsAgent11=True,bSupportsAgent12=True,bSupportsAgent13=True,bSupportsAgent14=True,bSupportsAgent15=True) +DirtyAreasUpdateFreq=60.000000 + +[/Script/NavigationSystem.RecastNavMesh] +RuntimeGeneration=Dynamic +TileSizeUU=1000.000000 +AgentMaxStepHeight=20.000000 +AgentRadius=15.000000 +CellSize=15.000000 + +[HTTPServer.Listeners] +DefaultBindAddress=0.0.0.0 +DefaultBindPort=1488 + +[/Script/DLSS.DLSSSettings] +bEnableDLSSVulkan=False +bEnableDLSSD3D11=False +bEnableDLSSInEditorViewports=False +bEnableDLSSInPlayInEditorViewports=False +bShowDLSSSDebugOnScreenMessages=False + diff --git a/Config/DefaultGame.ini b/Config/DefaultGame.ini index 811e79cb..1e5de5c3 100644 --- a/Config/DefaultGame.ini +++ b/Config/DefaultGame.ini @@ -2,3 +2,79 @@ [/Script/EngineSettings.GeneralProjectSettings] ProjectID=B89CCC284A7D213231762AB505314AAD + +[/Script/UnrealEd.ProjectPackagingSettings] +Build=IfProjectHasCode +BuildConfiguration=PPBC_Development +BuildTarget= +StagingDirectory=(Path="") +FullRebuild=False +ForDistribution=False +IncludeDebugFiles=False +BlueprintNativizationMethod=Disabled +bIncludeNativizedAssetsInProjectGeneration=False +bExcludeMonolithicEngineHeadersInNativizedCode=False +UsePakFile=True +bUseIoStore=False +bMakeBinaryConfig=False +bGenerateChunks=False +bGenerateNoChunks=False +bChunkHardReferencesOnly=False +bForceOneChunkPerFile=False +MaxChunkSize=0 +bBuildHttpChunkInstallData=False +HttpChunkInstallDataDirectory=(Path="") +bCompressed=True +PakFileCompressionFormats=Oodle +bForceUseProjectCompressionFormatIgnoreHardwareOverride=False +PakFileAdditionalCompressionOptions=-compressionblocksize=256KB +PakFileCompressionMethod=Kraken +PakFileCompressionLevel_DebugDevelopment=3 +PakFileCompressionLevel_TestShipping=5 +PakFileCompressionLevel_Distribution=7 +HttpChunkInstallDataVersion= +IncludePrerequisites=True +IncludeAppLocalPrerequisites=False +bShareMaterialShaderCode=True +bDeterministicShaderCodeOrder=False +bSharedMaterialNativeLibraries=True +ApplocalPrerequisitesDirectory=(Path="") +IncludeCrashReporter=False +InternationalizationPreset=English +-CulturesToStage=en ++CulturesToStage=en +LocalizationTargetCatchAllChunkId=0 +bCookAll=False +bCookMapsOnly=False +bSkipEditorContent=False +bSkipMovies=False +-IniKeyBlacklist=KeyStorePassword +-IniKeyBlacklist=KeyPassword +-IniKeyBlacklist=rsa.privateexp +-IniKeyBlacklist=rsa.modulus +-IniKeyBlacklist=rsa.publicexp +-IniKeyBlacklist=aes.key +-IniKeyBlacklist=SigningPublicExponent +-IniKeyBlacklist=SigningModulus +-IniKeyBlacklist=SigningPrivateExponent +-IniKeyBlacklist=EncryptionKey +-IniKeyBlacklist=IniKeyBlacklist +-IniKeyBlacklist=IniSectionBlacklist ++IniKeyBlacklist=KeyStorePassword ++IniKeyBlacklist=KeyPassword ++IniKeyBlacklist=rsa.privateexp ++IniKeyBlacklist=rsa.modulus ++IniKeyBlacklist=rsa.publicexp ++IniKeyBlacklist=aes.key ++IniKeyBlacklist=SigningPublicExponent ++IniKeyBlacklist=SigningModulus ++IniKeyBlacklist=SigningPrivateExponent ++IniKeyBlacklist=EncryptionKey ++IniKeyBlacklist=IniKeyBlacklist ++IniKeyBlacklist=IniSectionBlacklist ++DirectoriesToAlwaysCook=(Path="/Game/Blueprints/Utils") ++DirectoriesToAlwaysCook=(Path="/Game/Maps/Interiors") ++DirectoriesToAlwaysCook=(Path="/Game/Blueprints/UI/Others") ++DirectoriesToAlwaysCook=(Path="/Game/Blueprints/UI/WBPS/Imgs/flatPlans") ++DirectoriesToAlwaysCook=(Path="/Game/Blueprints/UI/WBPS/Imgs/floorPlans") + diff --git a/Config/DefaultInput.ini b/Config/DefaultInput.ini new file mode 100644 index 00000000..bffdf783 --- /dev/null +++ b/Config/DefaultInput.ini @@ -0,0 +1,134 @@ +<<<<<<< Updated upstream + + +[/Script/Engine.InputSettings] +-AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) +-AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) +-AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) ++AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseWheelAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_LeftTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_Special_Left_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_Special_Left_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Daydream_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Daydream_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Daydream_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Daydream_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusGo_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusGo_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusGo_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusGo_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Touch",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) +bAltEnterTogglesFullscreen=True +bF11TogglesFullscreen=True +bUseMouseForTouch=True +bEnableMouseSmoothing=False +bEnableFOVScaling=False +bCaptureMouseOnLaunch=False +bAlwaysShowTouchInterface=False +bShowConsoleOnFourFingerTap=True +bEnableGestureRecognizer=False +bUseAutocorrect=False +DefaultViewportMouseCaptureMode=CapturePermanently +DefaultViewportMouseLockMode=DoNotLock +FOVScale=0.011110 +DoubleClickTime=0.200000 ++ActionMappings=(ActionName="triggerR",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=OculusTouch_Right_Trigger_Click) ++ActionMappings=(ActionName="grabberR",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=OculusTouch_Right_Grip_Click) ++ActionMappings=(ActionName="grabberR",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Cosmos_Right_Grip_Click) ++ActionMappings=(ActionName="triggerR",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Cosmos_Right_Trigger_Click) ++ActionMappings=(ActionName="triggerL",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=OculusTouch_Left_Trigger_Click) ++ActionMappings=(ActionName="menuL",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=OculusTouch_Left_A_Click) ++ActionMappings=(ActionName="grabberL",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=OculusTouch_Left_Grip_Click) ++ActionMappings=(ActionName="menuL",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Cosmos_Left_X_Click) ++ActionMappings=(ActionName="grabberL",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Cosmos_Left_Grip_Click) ++ActionMappings=(ActionName="triggerL",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Cosmos_Left_Trigger_Click) ++ActionMappings=(ActionName="menuR",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Cosmos_Right_A_Click) ++AxisMappings=(AxisName="right",Scale=1.000000,Key=right) ++AxisMappings=(AxisName="forward",Scale=1.000000,Key=Up) ++AxisMappings=(AxisName="right",Scale=-1.000000,Key=Left) ++AxisMappings=(AxisName="right",Scale=1.000000,Key=D) ++AxisMappings=(AxisName="right",Scale=-1.000000,Key=A) ++AxisMappings=(AxisName="forward",Scale=-1.000000,Key=Down) ++AxisMappings=(AxisName="forward",Scale=1.000000,Key=W) ++AxisMappings=(AxisName="forward",Scale=-1.000000,Key=S) ++AxisMappings=(AxisName="R_VRtrigger",Scale=1.000000,Key=OculusTouch_Right_Trigger_Axis) ++AxisMappings=(AxisName="R_VRtrigger",Scale=1.000000,Key=Vive_Right_Trigger_Axis) ++AxisMappings=(AxisName="R_VRstickX",Scale=1.000000,Key=OculusTouch_Right_Thumbstick_X) ++AxisMappings=(AxisName="R_VRstickY",Scale=1.000000,Key=OculusTouch_Right_Thumbstick_Y) ++AxisMappings=(AxisName="R_VRgrabber",Scale=1.000000,Key=OculusTouch_Right_Grip_Axis) ++AxisMappings=(AxisName="R_VRtrigger",Scale=1.000000,Key=Cosmos_Right_Trigger_Axis) ++AxisMappings=(AxisName="R_VRstickX",Scale=1.000000,Key=Cosmos_Right_Thumbstick_Y) ++AxisMappings=(AxisName="R_VRstickY",Scale=1.000000,Key=Cosmos_Right_Thumbstick_X) ++AxisMappings=(AxisName="R_VRgrabber",Scale=1.000000,Key=Cosmos_Right_Grip_Axis) ++AxisMappings=(AxisName="L_VRtrigger",Scale=1.000000,Key=OculusTouch_Left_Trigger_Axis) ++AxisMappings=(AxisName="L_VRtrigger",Scale=1.000000,Key=Vive_Left_Trigger_Axis) ++AxisMappings=(AxisName="L_VRstickX",Scale=1.000000,Key=OculusTouch_Left_Thumbstick_X) ++AxisMappings=(AxisName="L_VRstickY",Scale=1.000000,Key=OculusTouch_Left_Thumbstick_Y) ++AxisMappings=(AxisName="L_VRgrabber",Scale=1.000000,Key=OculusTouch_Left_Grip_Axis) ++AxisMappings=(AxisName="L_VRtrigger",Scale=1.000000,Key=Cosmos_Left_Trigger_Axis) ++AxisMappings=(AxisName="L_VRstickX",Scale=1.000000,Key=Cosmos_Left_Thumbstick_Y) ++AxisMappings=(AxisName="L_VRstickY",Scale=1.000000,Key=Cosmos_Left_Thumbstick_X) ++AxisMappings=(AxisName="L_VRgrabber",Scale=1.000000,Key=Cosmos_Left_Grip_Axis) ++AxisMappings=(AxisName="R_btn1",Scale=1.000000,Key=OculusTouch_Right_A_Click) ++AxisMappings=(AxisName="R_btn2",Scale=1.000000,Key=OculusTouch_Right_B_Click) ++AxisMappings=(AxisName="L_btn1",Scale=1.000000,Key=OculusTouch_Left_X_Click) ++AxisMappings=(AxisName="L_btn2",Scale=1.000000,Key=OculusTouch_Left_Y_Click) +DefaultPlayerInputClass=/Script/Engine.PlayerInput +DefaultInputComponentClass=/Script/Engine.InputComponent +DefaultTouchInterface=None +-ConsoleKeys=Tilde ++ConsoleKeys=Tilde ++ConsoleKeys=None + diff --git a/Config/DefaultLightmass.ini b/Config/DefaultLightmass.ini new file mode 100644 index 00000000..1b6c9b30 --- /dev/null +++ b/Config/DefaultLightmass.ini @@ -0,0 +1,4 @@ +[DevOptions.GPULightmass] +NumPrimaryGISamples=16 +NumSecondaryGISamples=8 +FireflyClampingThreshold=1000.0 diff --git a/Config/DefaultRemoteControl.ini b/Config/DefaultRemoteControl.ini new file mode 100644 index 00000000..c0eadc43 --- /dev/null +++ b/Config/DefaultRemoteControl.ini @@ -0,0 +1,11 @@ +[/Script/RemoteControlCommon.RemoteControlSettings] +bProtocolsGenerateTransactions=False +RemoteControlWebInterfacePort=7000 +bForceWebAppBuildAtStartup=False +bAutoStartWebServer=True +bAutoStartWebSocketServer=False +RemoteControlHttpServerPort=1489 +RemoteControlWebSocketServerPort=30300 +bDisplayInEditorOnlyWarnings=False +TreeBindingSplitRatio=0.700000 + diff --git a/Config/Localization/Game_Compile.ini b/Config/Localization/Game_Compile.ini new file mode 100644 index 00000000..aeb7c94a --- /dev/null +++ b/Config/Localization/Game_Compile.ini @@ -0,0 +1,16 @@ +[CommonSettings] +SourcePath=Content/Localization/Game +DestinationPath=Content/Localization/Game +ManifestName=Game.manifest +ArchiveName=Game.archive +ResourceName=Game.locres +bSkipSourceCheck=false +bValidateFormatPatterns=true +bValidateSafeWhitespace=false +NativeCulture=ru-RU +CulturesToGenerate=en +CulturesToGenerate=ru-RU + +[GatherTextStep0] +CommandletClass=GenerateTextLocalizationResource + diff --git a/Config/Localization/Game_Export.ini b/Config/Localization/Game_Export.ini new file mode 100644 index 00000000..435dbaa8 --- /dev/null +++ b/Config/Localization/Game_Export.ini @@ -0,0 +1,18 @@ +[CommonSettings] +SourcePath=Content/Localization/Game +DestinationPath=Content/Localization/Game +NativeCulture=ru-RU +CulturesToGenerate=en +CulturesToGenerate=ru-RU +ManifestName=Game.manifest +ArchiveName=Game.archive +PortableObjectName=Game.po + +[GatherTextStep0] +CommandletClass=InternationalizationExport +bExportLoc=true +LocalizedTextCollapseMode=ELocalizedTextCollapseMode::IdenticalTextIdAndSource +POFormat=EPortableObjectFormat::Unreal +ShouldPersistCommentsOnExport=false +ShouldAddSourceLocationsAsComments=true + diff --git a/Config/Localization/Game_ExportDialogueScript.ini b/Config/Localization/Game_ExportDialogueScript.ini new file mode 100644 index 00000000..cb1b294e --- /dev/null +++ b/Config/Localization/Game_ExportDialogueScript.ini @@ -0,0 +1,13 @@ +[CommonSettings] +SourcePath=Content/Localization/Game +DestinationPath=Content/Localization/Game +NativeCulture=ru-RU +CulturesToGenerate=en +CulturesToGenerate=ru-RU +ManifestName=Game.manifest +ArchiveName=Game.archive +DialogueScriptName=GameDialogue.csv + +[GatherTextStep0] +CommandletClass=ExportDialogueScript + diff --git a/Config/Localization/Game_Gather.ini b/Config/Localization/Game_Gather.ini new file mode 100644 index 00000000..c35f01a8 --- /dev/null +++ b/Config/Localization/Game_Gather.ini @@ -0,0 +1,34 @@ +[CommonSettings] +ManifestDependencies=D:/UnrealEngine4/Engines/UE_4.27/Engine/Content/Localization/Engine/Engine.manifest +ManifestDependencies=D:/UnrealEngine4/Engines/UE_4.27/Engine/Content/Localization/Editor/Editor.manifest +SourcePath=Content/Localization/Game +DestinationPath=Content/Localization/Game +ManifestName=Game.manifest +ArchiveName=Game.archive +NativeCulture=ru-RU +CulturesToGenerate=en +CulturesToGenerate=ru-RU + +[GatherTextStep0] +CommandletClass=GatherTextFromAssets +IncludePathFilters=Content/Blueprints/UI/* +ExcludePathFilters=Content/Localization/* +PackageFileNameFilters=*.umap +PackageFileNameFilters=*.uasset +ShouldExcludeDerivedClasses=false +ShouldGatherFromEditorOnlyData=false +SkipGatherCache=false + +[GatherTextStep1] +CommandletClass=GenerateGatherManifest + +[GatherTextStep2] +CommandletClass=GenerateGatherArchive + +[GatherTextStep3] +CommandletClass=GenerateTextLocalizationReport +bWordCountReport=true +WordCountReportName=Game.csv +bConflictReport=true +ConflictReportName=Game_Conflicts.txt + diff --git a/Config/Localization/Game_GenerateReports.ini b/Config/Localization/Game_GenerateReports.ini new file mode 100644 index 00000000..cee123de --- /dev/null +++ b/Config/Localization/Game_GenerateReports.ini @@ -0,0 +1,13 @@ +[CommonSettings] +SourcePath=Content/Localization/Game +DestinationPath=Content/Localization/Game +ManifestName=Game.manifest +ArchiveName=Game.archive +CulturesToGenerate=en +CulturesToGenerate=ru-RU + +[GatherTextStep0] +CommandletClass=GenerateTextLocalizationReport +bWordCountReport=true +WordCountReportName=Game.csv + diff --git a/Config/Localization/Game_Import.ini b/Config/Localization/Game_Import.ini new file mode 100644 index 00000000..64c62b9c --- /dev/null +++ b/Config/Localization/Game_Import.ini @@ -0,0 +1,16 @@ +[CommonSettings] +SourcePath=Content/Localization/Game +DestinationPath=Content/Localization/Game +NativeCulture=ru-RU +CulturesToGenerate=en +CulturesToGenerate=ru-RU +ManifestName=Game.manifest +ArchiveName=Game.archive +PortableObjectName=Game.po + +[GatherTextStep0] +CommandletClass=InternationalizationExport +bImportLoc=true +LocalizedTextCollapseMode=ELocalizedTextCollapseMode::IdenticalTextIdAndSource +POFormat=EPortableObjectFormat::Unreal + diff --git a/Config/Localization/Game_ImportDialogue.ini b/Config/Localization/Game_ImportDialogue.ini new file mode 100644 index 00000000..54809f1c --- /dev/null +++ b/Config/Localization/Game_ImportDialogue.ini @@ -0,0 +1,14 @@ +[CommonSettings] +SourcePath=Content/Localization/Game +ManifestName=Game.manifest +ArchiveName=Game.archive +NativeCulture=ru-RU +CulturesToGenerate=en +CulturesToGenerate=ru-RU + +[GatherTextStep0] +CommandletClass=ImportLocalizedDialogue +RawAudioPath= +ImportedDialogueFolder=ImportedDialogue +bImportNativeAsSource=false + diff --git a/Config/Localization/Game_ImportDialogueScript.ini b/Config/Localization/Game_ImportDialogueScript.ini new file mode 100644 index 00000000..6ec6affe --- /dev/null +++ b/Config/Localization/Game_ImportDialogueScript.ini @@ -0,0 +1,13 @@ +[CommonSettings] +SourcePath=Content/Localization/Game +DestinationPath=Content/Localization/Game +NativeCulture=ru-RU +CulturesToGenerate=en +CulturesToGenerate=ru-RU +ManifestName=Game.manifest +ArchiveName=Game.archive +DialogueScriptName=GameDialogue.csv + +[GatherTextStep0] +CommandletClass=ImportDialogueScript + diff --git a/Config/SteamVRBindings/gamepad.json b/Config/SteamVRBindings/gamepad.json new file mode 100644 index 00000000..868a351f --- /dev/null +++ b/Config/SteamVRBindings/gamepad.json @@ -0,0 +1,13 @@ +{ + "name": "Default bindings for Gamepads", + "controller_type": "gamepad", + "last_edited_by": "UnrealEngine", + "bindings": + { + "/actions/main": + { + "sources": [] + } + }, + "description": "Ivazowsky-18319896" +} \ No newline at end of file diff --git a/Config/SteamVRBindings/holographic_controller.json b/Config/SteamVRBindings/holographic_controller.json new file mode 100644 index 00000000..8c08427a --- /dev/null +++ b/Config/SteamVRBindings/holographic_controller.json @@ -0,0 +1,44 @@ +{ + "name": "Default bindings for MixedReality", + "controller_type": "holographic_controller", + "last_edited_by": "UnrealEngine", + "bindings": + { + "/actions/main": + { + "sources": [], + "poses": [ + { + "output": "/actions/main/in/controllerleft", + "path": "/user/hand/left/pose/raw", + "requirement": "optional" + }, + { + "output": "/actions/main/in/controllerright", + "path": "/user/hand/right/pose/raw" + } + ], + "skeleton": [ + { + "output": "/actions/main/in/skeletonleft", + "path": "/user/hand/left/input/skeleton/left" + }, + { + "output": "/actions/main/in/skeletonright", + "path": "/user/hand/right/input/skeleton/right" + } + ], + "haptics": [ + { + "output": "/actions/main/out/vibrateleft", + "path": "/user/hand/left/output/haptic" + }, + { + "output": "/actions/main/out/vibrateright", + "path": "/user/hand/right/output/haptic" + } + ] + } + }, + "description": "Ivazowsky-18319896" +} \ No newline at end of file diff --git a/Config/SteamVRBindings/hpmotioncontroller.json b/Config/SteamVRBindings/hpmotioncontroller.json new file mode 100644 index 00000000..7c451f2d --- /dev/null +++ b/Config/SteamVRBindings/hpmotioncontroller.json @@ -0,0 +1,44 @@ +{ + "name": "Default bindings for HPMixedRealityController", + "controller_type": "hpmotioncontroller", + "last_edited_by": "UnrealEngine", + "bindings": + { + "/actions/main": + { + "sources": [], + "poses": [ + { + "output": "/actions/main/in/controllerleft", + "path": "/user/hand/left/pose/raw", + "requirement": "optional" + }, + { + "output": "/actions/main/in/controllerright", + "path": "/user/hand/right/pose/raw" + } + ], + "skeleton": [ + { + "output": "/actions/main/in/skeletonleft", + "path": "/user/hand/left/input/skeleton/left" + }, + { + "output": "/actions/main/in/skeletonright", + "path": "/user/hand/right/input/skeleton/right" + } + ], + "haptics": [ + { + "output": "/actions/main/out/vibrateleft", + "path": "/user/hand/left/output/haptic" + }, + { + "output": "/actions/main/out/vibrateright", + "path": "/user/hand/right/output/haptic" + } + ] + } + }, + "description": "Ivazowsky-18319896" +} \ No newline at end of file diff --git a/Config/SteamVRBindings/indexhmd.json b/Config/SteamVRBindings/indexhmd.json new file mode 100644 index 00000000..56249d0e --- /dev/null +++ b/Config/SteamVRBindings/indexhmd.json @@ -0,0 +1,13 @@ +{ + "name": "Default bindings for Valve Index Headset", + "controller_type": "indexhmd", + "last_edited_by": "UnrealEngine", + "bindings": + { + "/actions/main": + { + "sources": [] + } + }, + "description": "Ivazowsky-18319896" +} \ No newline at end of file diff --git a/Config/SteamVRBindings/knuckles.json b/Config/SteamVRBindings/knuckles.json new file mode 100644 index 00000000..7d5b9704 --- /dev/null +++ b/Config/SteamVRBindings/knuckles.json @@ -0,0 +1,44 @@ +{ + "name": "Default bindings for ValveIndex", + "controller_type": "knuckles", + "last_edited_by": "UnrealEngine", + "bindings": + { + "/actions/main": + { + "sources": [], + "poses": [ + { + "output": "/actions/main/in/controllerleft", + "path": "/user/hand/left/pose/raw", + "requirement": "optional" + }, + { + "output": "/actions/main/in/controllerright", + "path": "/user/hand/right/pose/raw" + } + ], + "skeleton": [ + { + "output": "/actions/main/in/skeletonleft", + "path": "/user/hand/left/input/skeleton/left" + }, + { + "output": "/actions/main/in/skeletonright", + "path": "/user/hand/right/input/skeleton/right" + } + ], + "haptics": [ + { + "output": "/actions/main/out/vibrateleft", + "path": "/user/hand/left/output/haptic" + }, + { + "output": "/actions/main/out/vibrateright", + "path": "/user/hand/right/output/haptic" + } + ] + } + }, + "description": "Ivazowsky-18319896" +} \ No newline at end of file diff --git a/Config/SteamVRBindings/oculus_touch.json b/Config/SteamVRBindings/oculus_touch.json new file mode 100644 index 00000000..2ef8e859 --- /dev/null +++ b/Config/SteamVRBindings/oculus_touch.json @@ -0,0 +1,210 @@ +{ + "name": "Default bindings for OculusTouch", + "controller_type": "oculus_touch", + "last_edited_by": "UnrealEngine", + "bindings": + { + "/actions/main": + { + "sources": [ + { + "mode": "trigger", + "path": "/user/hand/right/input/trigger", + "inputs": + { + "click": + { + "output": "/actions/main/in/triggerR" + } + } + }, + { + "mode": "trigger", + "path": "/user/hand/right/input/grip", + "inputs": + { + "click": + { + "output": "/actions/main/in/grabberR" + } + } + }, + { + "mode": "trigger", + "path": "/user/hand/left/input/trigger", + "inputs": + { + "click": + { + "output": "/actions/main/in/triggerL" + } + } + }, + { + "mode": "button", + "path": "/user/hand/left/input/a", + "inputs": + { + "click": + { + "output": "/actions/main/in/menuL" + } + } + }, + { + "mode": "trigger", + "path": "/user/hand/left/input/grip", + "inputs": + { + "click": + { + "output": "/actions/main/in/grabberL" + } + } + }, + { + "mode": "trigger", + "path": "/user/hand/right/input/trigger", + "inputs": + { + "pull": + { + "output": "/actions/main/in/R_VRtrigger axis" + } + } + }, + { + "mode": "joystick", + "path": "/user/hand/right/input/joystick", + "inputs": + { + "position": + { + "output": "/actions/main/in/R_VRstickX,R_VRstickY X Y_axis2d" + } + } + }, + { + "mode": "trigger", + "path": "/user/hand/right/input/grip", + "inputs": + { + "pull": + { + "output": "/actions/main/in/R_VRgrabber axis" + } + } + }, + { + "mode": "trigger", + "path": "/user/hand/left/input/trigger", + "inputs": + { + "pull": + { + "output": "/actions/main/in/L_VRtrigger axis" + } + } + }, + { + "mode": "joystick", + "path": "/user/hand/left/input/joystick", + "inputs": + { + "position": + { + "output": "/actions/main/in/L_VRstickX,L_VRstickY X Y_axis2d" + } + } + }, + { + "mode": "trigger", + "path": "/user/hand/left/input/grip", + "inputs": + { + "pull": + { + "output": "/actions/main/in/L_VRgrabber axis" + } + } + }, + { + "mode": "button", + "path": "/user/hand/right/input/a", + "inputs": + { + "pull": + { + "output": "/actions/main/in/R_btn1 axis" + } + } + }, + { + "mode": "button", + "path": "/user/hand/right/input/b", + "inputs": + { + "pull": + { + "output": "/actions/main/in/R_btn2 axis" + } + } + }, + { + "mode": "button", + "path": "/user/hand/left/input/x", + "inputs": + { + "pull": + { + "output": "/actions/main/in/L_btn1 axis" + } + } + }, + { + "mode": "button", + "path": "/user/hand/left/input/y", + "inputs": + { + "pull": + { + "output": "/actions/main/in/L_btn2 axis" + } + } + } + ], + "poses": [ + { + "output": "/actions/main/in/controllerleft", + "path": "/user/hand/left/pose/raw", + "requirement": "optional" + }, + { + "output": "/actions/main/in/controllerright", + "path": "/user/hand/right/pose/raw" + } + ], + "skeleton": [ + { + "output": "/actions/main/in/skeletonleft", + "path": "/user/hand/left/input/skeleton/left" + }, + { + "output": "/actions/main/in/skeletonright", + "path": "/user/hand/right/input/skeleton/right" + } + ], + "haptics": [ + { + "output": "/actions/main/out/vibrateleft", + "path": "/user/hand/left/output/haptic" + }, + { + "output": "/actions/main/out/vibrateright", + "path": "/user/hand/right/output/haptic" + } + ] + } + }, + "description": "Ivazowsky-18319896" +} \ No newline at end of file diff --git a/Config/SteamVRBindings/rift.json b/Config/SteamVRBindings/rift.json new file mode 100644 index 00000000..62a7a55c --- /dev/null +++ b/Config/SteamVRBindings/rift.json @@ -0,0 +1,13 @@ +{ + "name": "Default bindings for Rift Headset", + "controller_type": "rift", + "last_edited_by": "UnrealEngine", + "bindings": + { + "/actions/main": + { + "sources": [] + } + }, + "description": "Ivazowsky-18319896" +} \ No newline at end of file diff --git a/Config/SteamVRBindings/steamvr_manifest.json b/Config/SteamVRBindings/steamvr_manifest.json new file mode 100644 index 00000000..cf15649c --- /dev/null +++ b/Config/SteamVRBindings/steamvr_manifest.json @@ -0,0 +1,494 @@ +{ + "actions": [ + { + "name": "/actions/main/in/controllerleft", + "type": "pose", + "requirement": "optional" + }, + { + "name": "/actions/main/in/controllerright", + "type": "pose", + "requirement": "optional" + }, + { + "name": "/actions/main/in/tracker_camera", + "type": "pose", + "requirement": "optional" + }, + { + "name": "/actions/main/in/tracker_chest", + "type": "pose", + "requirement": "optional" + }, + { + "name": "/actions/main/in/tracker_shoulder_left", + "type": "pose", + "requirement": "optional" + }, + { + "name": "/actions/main/in/tracker_shoulder_right", + "type": "pose", + "requirement": "optional" + }, + { + "name": "/actions/main/in/tracker_elbow_left", + "type": "pose", + "requirement": "optional" + }, + { + "name": "/actions/main/in/tracker_elbow_right", + "type": "pose", + "requirement": "optional" + }, + { + "name": "/actions/main/in/tracker_knee_left", + "type": "pose", + "requirement": "optional" + }, + { + "name": "/actions/main/in/tracker_knee_right", + "type": "pose", + "requirement": "optional" + }, + { + "name": "/actions/main/in/tracker_waist", + "type": "pose", + "requirement": "optional" + }, + { + "name": "/actions/main/in/tracker_foot_left", + "type": "pose", + "requirement": "optional" + }, + { + "name": "/actions/main/in/tracker_foot_right", + "type": "pose", + "requirement": "optional" + }, + { + "name": "/actions/main/in/tracker_keyboard", + "type": "pose", + "requirement": "optional" + }, + { + "name": "/actions/main/in/tracker_handed_pose_left", + "type": "pose", + "requirement": "optional" + }, + { + "name": "/actions/main/in/tracker_handed_pose_right", + "type": "pose", + "requirement": "optional" + }, + { + "name": "/actions/main/in/tracker_handed_back_left", + "type": "pose", + "requirement": "optional" + }, + { + "name": "/actions/main/in/tracker_handed_back_right", + "type": "pose", + "requirement": "optional" + }, + { + "name": "/actions/main/in/tracker_handed_front_left", + "type": "pose", + "requirement": "optional" + }, + { + "name": "/actions/main/in/tracker_handed_front_right", + "type": "pose", + "requirement": "optional" + }, + { + "name": "/actions/main/in/tracker_handed_frontr_left", + "type": "pose", + "requirement": "optional" + }, + { + "name": "/actions/main/in/tracker_handed_frontr_right", + "type": "pose", + "requirement": "optional" + }, + { + "name": "/actions/main/in/tracker_handed_grip_left", + "type": "pose", + "requirement": "optional" + }, + { + "name": "/actions/main/in/tracker_handed_grip_right", + "type": "pose", + "requirement": "optional" + }, + { + "name": "/actions/main/in/skeletonleft", + "type": "skeleton", + "skeleton": "/skeleton/hand/left", + "requirement": "optional" + }, + { + "name": "/actions/main/in/skeletonright", + "type": "skeleton", + "skeleton": "/skeleton/hand/right", + "requirement": "optional" + }, + { + "name": "/actions/main/out/vibrateleft", + "type": "vibration", + "requirement": "optional" + }, + { + "name": "/actions/main/out/vibrateright", + "type": "vibration", + "requirement": "optional" + }, + { + "name": "/actions/main/in/open_console", + "type": "boolean", + "requirement": "optional" + }, + { + "name": "/actions/main/in/triggerR", + "type": "boolean" + }, + { + "name": "/actions/main/in/grabberR", + "type": "boolean" + }, + { + "name": "/actions/main/in/triggerL", + "type": "boolean" + }, + { + "name": "/actions/main/in/menuL", + "type": "boolean" + }, + { + "name": "/actions/main/in/grabberL", + "type": "boolean" + }, + { + "name": "/actions/main/in/menuR", + "type": "boolean" + }, + { + "name": "/actions/main/in/right axis", + "type": "vector1" + }, + { + "name": "/actions/main/in/forward axis", + "type": "vector1" + }, + { + "name": "/actions/main/in/R_VRtrigger axis", + "type": "vector1" + }, + { + "name": "/actions/main/in/R_VRstickY,R_VRstickX X Y_axis2d", + "type": "vector2" + }, + { + "name": "/actions/main/in/R_VRstickX,R_VRstickY X Y_axis2d", + "type": "vector2" + }, + { + "name": "/actions/main/in/R_VRgrabber axis", + "type": "vector1" + }, + { + "name": "/actions/main/in/L_VRtrigger axis", + "type": "vector1" + }, + { + "name": "/actions/main/in/L_VRstickY,L_VRstickX X Y_axis2d", + "type": "vector2" + }, + { + "name": "/actions/main/in/L_VRstickX,L_VRstickY X Y_axis2d", + "type": "vector2" + }, + { + "name": "/actions/main/in/L_VRgrabber axis", + "type": "vector1" + }, + { + "name": "/actions/main/in/R_btn1 axis", + "type": "vector1" + }, + { + "name": "/actions/main/in/R_btn2 axis", + "type": "vector1" + }, + { + "name": "/actions/main/in/L_btn1 axis", + "type": "vector1" + }, + { + "name": "/actions/main/in/L_btn2 axis", + "type": "vector1" + } + ], + "action_sets": [ + { + "name": "/actions/main", + "usage": "leftright" + } + ], + "default_bindings": [ + { + "controller_type": "gamepad", + "binding_url": "gamepad.json" + }, + { + "controller_type": "holographic_controller", + "binding_url": "holographic_controller.json" + }, + { + "controller_type": "hpmotioncontroller", + "binding_url": "hpmotioncontroller.json" + }, + { + "controller_type": "indexhmd", + "binding_url": "indexhmd.json" + }, + { + "controller_type": "knuckles", + "binding_url": "knuckles.json" + }, + { + "controller_type": "oculus_touch", + "binding_url": "oculus_touch.json" + }, + { + "controller_type": "rift", + "binding_url": "rift.json" + }, + { + "controller_type": "vive", + "binding_url": "vive.json" + }, + { + "controller_type": "vive_controller", + "binding_url": "vive_controller.json" + }, + { + "controller_type": "vive_cosmos_controller", + "binding_url": "vive_cosmos_controller.json" + }, + { + "controller_type": "vive_pro", + "binding_url": "vive_pro.json" + }, + { + "controller_type": "vive_tracker", + "binding_url": "vive_tracker.json" + }, + { + "controller_type": "vive_tracker_camera", + "binding_url": "vive_tracker_camera.json" + }, + { + "controller_type": "vive_tracker_chest", + "binding_url": "vive_tracker_chest.json" + }, + { + "controller_type": "vive_tracker_handed", + "binding_url": "vive_tracker_handed.json" + }, + { + "controller_type": "vive_tracker_keyboard", + "binding_url": "vive_tracker_keyboard.json" + }, + { + "controller_type": "vive_tracker_left_elbow", + "binding_url": "vive_tracker_left_elbow.json" + }, + { + "controller_type": "vive_tracker_left_foot", + "binding_url": "vive_tracker_left_foot.json" + }, + { + "controller_type": "vive_tracker_left_knee", + "binding_url": "vive_tracker_left_knee.json" + }, + { + "controller_type": "vive_tracker_left_shoulder", + "binding_url": "vive_tracker_left_shoulder.json" + }, + { + "controller_type": "vive_tracker_right_elbow", + "binding_url": "vive_tracker_right_elbow.json" + }, + { + "controller_type": "vive_tracker_right_foot", + "binding_url": "vive_tracker_right_foot.json" + }, + { + "controller_type": "vive_tracker_right_knee", + "binding_url": "vive_tracker_right_knee.json" + }, + { + "controller_type": "vive_tracker_right_shoulder", + "binding_url": "vive_tracker_right_shoulder.json" + }, + { + "controller_type": "vive_tracker_waist", + "binding_url": "vive_tracker_waist.json" + }, + { + "controller_type": "knuckles", + "binding_url": "knuckles.json" + }, + { + "controller_type": "vive_controller", + "binding_url": "vive_controller.json" + }, + { + "controller_type": "vive_cosmos_controller", + "binding_url": "vive_cosmos_controller.json" + }, + { + "controller_type": "oculus_touch", + "binding_url": "oculus_touch.json" + }, + { + "controller_type": "holographic_controller", + "binding_url": "holographic_controller.json" + }, + { + "controller_type": "hpmotioncontroller", + "binding_url": "hpmotioncontroller.json" + }, + { + "controller_type": "indexhmd", + "binding_url": "indexhmd.json" + }, + { + "controller_type": "vive", + "binding_url": "vive.json" + }, + { + "controller_type": "vive_pro", + "binding_url": "vive_pro.json" + }, + { + "controller_type": "rift", + "binding_url": "rift.json" + }, + { + "controller_type": "vive_tracker", + "binding_url": "vive_tracker.json" + }, + { + "controller_type": "vive_tracker_camera", + "binding_url": "vive_tracker_camera.json" + }, + { + "controller_type": "vive_tracker_waist", + "binding_url": "vive_tracker_waist.json" + }, + { + "controller_type": "vive_tracker_left_foot", + "binding_url": "vive_tracker_left_foot.json" + }, + { + "controller_type": "vive_tracker_right_foot", + "binding_url": "vive_tracker_right_foot.json" + }, + { + "controller_type": "vive_tracker_left_shoulder", + "binding_url": "vive_tracker_left_shoulder.json" + }, + { + "controller_type": "vive_tracker_right_shoulder", + "binding_url": "vive_tracker_right_shoulder.json" + }, + { + "controller_type": "vive_tracker_left_elbow", + "binding_url": "vive_tracker_left_elbow.json" + }, + { + "controller_type": "vive_tracker_right_elbow", + "binding_url": "vive_tracker_right_elbow.json" + }, + { + "controller_type": "vive_tracker_left_knee", + "binding_url": "vive_tracker_left_knee.json" + }, + { + "controller_type": "vive_tracker_right_knee", + "binding_url": "vive_tracker_right_knee.json" + }, + { + "controller_type": "vive_tracker_chest", + "binding_url": "vive_tracker_chest.json" + }, + { + "controller_type": "vive_tracker_keyboard", + "binding_url": "vive_tracker_keyboard.json" + }, + { + "controller_type": "vive_tracker_handed", + "binding_url": "vive_tracker_handed.json" + }, + { + "controller_type": "gamepad", + "binding_url": "gamepad.json" + } + ], + "localization": [ + { + "language_tag": "en_us", + "/actions/main/in/controllerleft": "Left Controller [Pose]", + "/actions/main/in/controllerright": "Right Controller [Pose]", + "/actions/main/in/tracker_camera": "Camera [Tracker]", + "/actions/main/in/tracker_chest": "Chest [Tracker]", + "/actions/main/in/tracker_shoulder_left": "Shoulder Left [Tracker]", + "/actions/main/in/tracker_shoulder_right": "Shoulder Right [Tracker]", + "/actions/main/in/tracker_elbow_left": "Elbow Left [Tracker]", + "/actions/main/in/tracker_elbow_right": "Elbow Right [Tracker]", + "/actions/main/in/tracker_knee_left": "Knee Left [Tracker]", + "/actions/main/in/tracker_knee_right": "Knee Right [Tracker]", + "/actions/main/in/tracker_waist": "Waist [Tracker]", + "/actions/main/in/tracker_foot_left": "Foot Left [Tracker]", + "/actions/main/in/tracker_foot_right": "Foot Right [Tracker]", + "/actions/main/in/tracker_keyboard": "Keyboard [Tracker]", + "/actions/main/in/tracker_handed_pose_left": "Raw Pose Left [Tracker]", + "/actions/main/in/tracker_handed_pose_right": "Raw Pose Right [Tracker]", + "/actions/main/in/tracker_handed_back_left": "Handed Back Left [Tracker]", + "/actions/main/in/tracker_handed_back_right": "Handed Back Right [Tracker]", + "/actions/main/in/tracker_handed_front_left": "Handed Front Left [Tracker]", + "/actions/main/in/tracker_handed_front_right": "Handed Front Right [Tracker]", + "/actions/main/in/tracker_handed_frontr_left": "Handed Front Rolled Left [Tracker]", + "/actions/main/in/tracker_handed_frontr_right": "Handed Front Rolled Right [Tracker]", + "/actions/main/in/tracker_handed_grip_left": "Handed Pistol Grip Left [Tracker]", + "/actions/main/in/tracker_handed_grip_right": "Handed Pistol Grip Right [Tracker]", + "/actions/main/in/skeletonleft": "Skeleton (Left)", + "/actions/main/in/skeletonright": "Skeleton (Right)", + "/actions/main/out/vibrateleft": "Haptic (Left)", + "/actions/main/out/vibrateright": "Haptic (Right)", + "/actions/main/in/open_console": "Open Console", + "/actions/main/in/triggerR": "triggerR", + "/actions/main/in/grabberR": "grabberR", + "/actions/main/in/triggerL": "triggerL", + "/actions/main/in/menuL": "menuL", + "/actions/main/in/grabberL": "grabberL", + "/actions/main/in/menuR": "menuR", + "/actions/main/in/right axis": "right", + "/actions/main/in/forward axis": "forward", + "/actions/main/in/R_VRtrigger axis": "R_VRtrigger", + "/actions/main/in/R_VRstickY,R_VRstickX X Y_axis2d": "R_VRstickY,R_VRstickX X Y_axis2d", + "/actions/main/in/R_VRstickX,R_VRstickY X Y_axis2d": "R_VRstick", + "/actions/main/in/R_VRgrabber axis": "R_VRgrabber", + "/actions/main/in/L_VRtrigger axis": "L_VRtrigger", + "/actions/main/in/L_VRstickY,L_VRstickX X Y_axis2d": "L_VRstickY,L_VRstickX X Y_axis2d", + "/actions/main/in/L_VRstickX,L_VRstickY X Y_axis2d": "L_VRstick", + "/actions/main/in/L_VRgrabber axis": "L_VRgrabber", + "/actions/main/in/R_btn1 axis": "R_btn1", + "/actions/main/in/R_btn2 axis": "R_btn2", + "/actions/main/in/L_btn1 axis": "L_btn1", + "/actions/main/in/L_btn2 axis": "L_btn2", + "/actions/main": "Main Game Actions" + } + ] +} \ No newline at end of file diff --git a/Config/SteamVRBindings/vive.json b/Config/SteamVRBindings/vive.json new file mode 100644 index 00000000..1b849405 --- /dev/null +++ b/Config/SteamVRBindings/vive.json @@ -0,0 +1,13 @@ +{ + "name": "Default bindings for Vive Headset", + "controller_type": "vive", + "last_edited_by": "UnrealEngine", + "bindings": + { + "/actions/main": + { + "sources": [] + } + }, + "description": "Ivazowsky-18319896" +} \ No newline at end of file diff --git a/Config/SteamVRBindings/vive_controller.json b/Config/SteamVRBindings/vive_controller.json new file mode 100644 index 00000000..ea6ef0ec --- /dev/null +++ b/Config/SteamVRBindings/vive_controller.json @@ -0,0 +1,67 @@ +{ + "name": "Default bindings for Vive", + "controller_type": "vive_controller", + "last_edited_by": "UnrealEngine", + "bindings": + { + "/actions/main": + { + "sources": [ + { + "mode": "trigger", + "path": "/user/hand/right/input/trigger", + "inputs": + { + "pull": + { + "output": "/actions/main/in/R_VRtrigger axis" + } + } + }, + { + "mode": "trigger", + "path": "/user/hand/left/input/trigger", + "inputs": + { + "pull": + { + "output": "/actions/main/in/L_VRtrigger axis" + } + } + } + ], + "poses": [ + { + "output": "/actions/main/in/controllerleft", + "path": "/user/hand/left/pose/raw", + "requirement": "optional" + }, + { + "output": "/actions/main/in/controllerright", + "path": "/user/hand/right/pose/raw" + } + ], + "skeleton": [ + { + "output": "/actions/main/in/skeletonleft", + "path": "/user/hand/left/input/skeleton/left" + }, + { + "output": "/actions/main/in/skeletonright", + "path": "/user/hand/right/input/skeleton/right" + } + ], + "haptics": [ + { + "output": "/actions/main/out/vibrateleft", + "path": "/user/hand/left/output/haptic" + }, + { + "output": "/actions/main/out/vibrateright", + "path": "/user/hand/right/output/haptic" + } + ] + } + }, + "description": "Ivazowsky-18319896" +} \ No newline at end of file diff --git a/Config/SteamVRBindings/vive_cosmos_controller.json b/Config/SteamVRBindings/vive_cosmos_controller.json new file mode 100644 index 00000000..e8169f08 --- /dev/null +++ b/Config/SteamVRBindings/vive_cosmos_controller.json @@ -0,0 +1,177 @@ +{ + "name": "Default bindings for Cosmos", + "controller_type": "vive_cosmos_controller", + "last_edited_by": "UnrealEngine", + "bindings": + { + "/actions/main": + { + "sources": [ + { + "mode": "trigger", + "path": "/user/hand/right/input/trigger", + "inputs": + { + "click": + { + "output": "/actions/main/in/triggerR" + } + } + }, + { + "mode": "button", + "path": "/user/hand/right/input/grip", + "inputs": + { + "click": + { + "output": "/actions/main/in/grabberR" + } + } + }, + { + "mode": "trigger", + "path": "/user/hand/left/input/trigger", + "inputs": + { + "click": + { + "output": "/actions/main/in/triggerL" + } + } + }, + { + "mode": "button", + "path": "/user/hand/left/input/x", + "inputs": + { + "click": + { + "output": "/actions/main/in/menuL" + } + } + }, + { + "mode": "button", + "path": "/user/hand/left/input/grip", + "inputs": + { + "click": + { + "output": "/actions/main/in/grabberL" + } + } + }, + { + "mode": "button", + "path": "/user/hand/right/input/a", + "inputs": + { + "click": + { + "output": "/actions/main/in/menuR" + } + } + }, + { + "mode": "trigger", + "path": "/user/hand/right/input/trigger", + "inputs": + { + "pull": + { + "output": "/actions/main/in/R_VRtrigger axis" + } + } + }, + { + "mode": "joystick", + "path": "/user/hand/right/input/joystick", + "inputs": + { + "position": + { + "output": "/actions/main/in/R_VRstickY,R_VRstickX X Y_axis2d" + } + } + }, + { + "mode": "trigger", + "path": "/user/hand/right/input/grip", + "inputs": + { + "pull": + { + "output": "/actions/main/in/R_VRgrabber axis" + } + } + }, + { + "mode": "trigger", + "path": "/user/hand/left/input/trigger", + "inputs": + { + "pull": + { + "output": "/actions/main/in/L_VRtrigger axis" + } + } + }, + { + "mode": "joystick", + "path": "/user/hand/left/input/joystick", + "inputs": + { + "position": + { + "output": "/actions/main/in/L_VRstickY,L_VRstickX X Y_axis2d" + } + } + }, + { + "mode": "trigger", + "path": "/user/hand/left/input/grip", + "inputs": + { + "pull": + { + "output": "/actions/main/in/L_VRgrabber axis" + } + } + } + ], + "poses": [ + { + "output": "/actions/main/in/controllerleft", + "path": "/user/hand/left/pose/raw", + "requirement": "optional" + }, + { + "output": "/actions/main/in/controllerright", + "path": "/user/hand/right/pose/raw" + } + ], + "skeleton": [ + { + "output": "/actions/main/in/skeletonleft", + "path": "/user/hand/left/input/skeleton/left" + }, + { + "output": "/actions/main/in/skeletonright", + "path": "/user/hand/right/input/skeleton/right" + } + ], + "haptics": [ + { + "output": "/actions/main/out/vibrateleft", + "path": "/user/hand/left/output/haptic" + }, + { + "output": "/actions/main/out/vibrateright", + "path": "/user/hand/right/output/haptic" + } + ] + } + }, + "description": "Ivazowsky-18319896" +} \ No newline at end of file diff --git a/Config/SteamVRBindings/vive_pro.json b/Config/SteamVRBindings/vive_pro.json new file mode 100644 index 00000000..7f565e22 --- /dev/null +++ b/Config/SteamVRBindings/vive_pro.json @@ -0,0 +1,13 @@ +{ + "name": "Default bindings for Vive Pro Headset", + "controller_type": "vive_pro", + "last_edited_by": "UnrealEngine", + "bindings": + { + "/actions/main": + { + "sources": [] + } + }, + "description": "Ivazowsky-18319896" +} \ No newline at end of file diff --git a/Config/SteamVRBindings/vive_tracker.json b/Config/SteamVRBindings/vive_tracker.json new file mode 100644 index 00000000..e670ba58 --- /dev/null +++ b/Config/SteamVRBindings/vive_tracker.json @@ -0,0 +1,64 @@ +{ + "name": "Default bindings for Vive Tracker", + "controller_type": "vive_tracker", + "last_edited_by": "UnrealEngine", + "bindings": + { + "/actions/main": + { + "poses": [ + { + "output": "/actions/main/in/tracker_handed_pose_left", + "path": "/user/hand/left/pose/raw", + "requirement": "optional" + }, + { + "output": "/actions/main/in/tracker_handed_pose_right", + "path": "/user/hand/right/pose/raw", + "requirement": "optional" + }, + { + "output": "/actions/main/in/tracker_handed_back_left", + "path": "/user/hand/left/pose/back", + "requirement": "optional" + }, + { + "output": "/actions/main/in/tracker_handed_back_right", + "path": "/user/hand/right/pose/back", + "requirement": "optional" + }, + { + "output": "/actions/main/in/tracker_handed_front_left", + "path": "/user/hand/left/pose/front", + "requirement": "optional" + }, + { + "output": "/actions/main/in/tracker_handed_front_right", + "path": "/actions/main/in/tracker_handed_front_right", + "requirement": "optional" + }, + { + "output": "/actions/main/in/tracker_handed_frontr_left", + "path": "/user/hand/left/pose/front_rolled", + "requirement": "optional" + }, + { + "output": "/actions/main/in/tracker_handed_frontr_right", + "path": "/user/hand/right/pose/front_rolled", + "requirement": "optional" + }, + { + "output": "/actions/main/in/tracker_handed_grip_left", + "path": "/user/hand/left/pose/pistol", + "requirement": "optional" + }, + { + "output": "/actions/main/in/tracker_handed_grip_right", + "path": "/user/hand/right/pose/pistol", + "requirement": "optional" + } + ] + } + }, + "description": "Ivazowsky-18319896" +} \ No newline at end of file diff --git a/Config/SteamVRBindings/vive_tracker_camera.json b/Config/SteamVRBindings/vive_tracker_camera.json new file mode 100644 index 00000000..3fdb31f6 --- /dev/null +++ b/Config/SteamVRBindings/vive_tracker_camera.json @@ -0,0 +1,19 @@ +{ + "name": "Default bindings for Vive Tracker (Camera)", + "controller_type": "vive_tracker_camera", + "last_edited_by": "UnrealEngine", + "bindings": + { + "/actions/main": + { + "poses": [ + { + "output": "/actions/main/in/tracker_camera", + "path": "/user/camera/pose/raw", + "requirement": "optional" + } + ] + } + }, + "description": "Ivazowsky-18319896" +} \ No newline at end of file diff --git a/Config/SteamVRBindings/vive_tracker_chest.json b/Config/SteamVRBindings/vive_tracker_chest.json new file mode 100644 index 00000000..1003294d --- /dev/null +++ b/Config/SteamVRBindings/vive_tracker_chest.json @@ -0,0 +1,19 @@ +{ + "name": "Default bindings for Vive Tracker (Chest)", + "controller_type": "vive_tracker_chest", + "last_edited_by": "UnrealEngine", + "bindings": + { + "/actions/main": + { + "poses": [ + { + "output": "/actions/main/in/tracker_chest", + "path": "/user/chest/pose/raw", + "requirement": "optional" + } + ] + } + }, + "description": "Ivazowsky-18319896" +} \ No newline at end of file diff --git a/Config/SteamVRBindings/vive_tracker_handed.json b/Config/SteamVRBindings/vive_tracker_handed.json new file mode 100644 index 00000000..b838291d --- /dev/null +++ b/Config/SteamVRBindings/vive_tracker_handed.json @@ -0,0 +1,64 @@ +{ + "name": "Default bindings for Vive Tracker (Handed)", + "controller_type": "vive_tracker_handed", + "last_edited_by": "UnrealEngine", + "bindings": + { + "/actions/main": + { + "poses": [ + { + "output": "/actions/main/in/tracker_handed_pose_left", + "path": "/user/hand/left/pose/raw", + "requirement": "optional" + }, + { + "output": "/actions/main/in/tracker_handed_pose_right", + "path": "/user/hand/right/pose/raw", + "requirement": "optional" + }, + { + "output": "/actions/main/in/tracker_handed_back_left", + "path": "/user/hand/left/pose/back", + "requirement": "optional" + }, + { + "output": "/actions/main/in/tracker_handed_back_right", + "path": "/user/hand/right/pose/back", + "requirement": "optional" + }, + { + "output": "/actions/main/in/tracker_handed_front_left", + "path": "/user/hand/left/pose/front", + "requirement": "optional" + }, + { + "output": "/actions/main/in/tracker_handed_front_right", + "path": "/actions/main/in/tracker_handed_front_right", + "requirement": "optional" + }, + { + "output": "/actions/main/in/tracker_handed_frontr_left", + "path": "/user/hand/left/pose/front_rolled", + "requirement": "optional" + }, + { + "output": "/actions/main/in/tracker_handed_frontr_right", + "path": "/user/hand/right/pose/front_rolled", + "requirement": "optional" + }, + { + "output": "/actions/main/in/tracker_handed_grip_left", + "path": "/user/hand/left/pose/pistol", + "requirement": "optional" + }, + { + "output": "/actions/main/in/tracker_handed_grip_right", + "path": "/user/hand/right/pose/pistol", + "requirement": "optional" + } + ] + } + }, + "description": "Ivazowsky-18319896" +} \ No newline at end of file diff --git a/Config/SteamVRBindings/vive_tracker_keyboard.json b/Config/SteamVRBindings/vive_tracker_keyboard.json new file mode 100644 index 00000000..23380746 --- /dev/null +++ b/Config/SteamVRBindings/vive_tracker_keyboard.json @@ -0,0 +1,19 @@ +{ + "name": "Default bindings for Vive Tracker (Keyboard)", + "controller_type": "vive_tracker_keyboard", + "last_edited_by": "UnrealEngine", + "bindings": + { + "/actions/main": + { + "poses": [ + { + "output": "/actions/main/in/tracker_keyboard", + "path": "/user/keyboard/pose/raw", + "requirement": "optional" + } + ] + } + }, + "description": "Ivazowsky-18319896" +} \ No newline at end of file diff --git a/Config/SteamVRBindings/vive_tracker_left_elbow.json b/Config/SteamVRBindings/vive_tracker_left_elbow.json new file mode 100644 index 00000000..5a86f33b --- /dev/null +++ b/Config/SteamVRBindings/vive_tracker_left_elbow.json @@ -0,0 +1,19 @@ +{ + "name": "Default bindings for Vive Tracker (Left Elbow)", + "controller_type": "vive_tracker_left_elbow", + "last_edited_by": "UnrealEngine", + "bindings": + { + "/actions/main": + { + "poses": [ + { + "output": "/actions/main/in/tracker_elbow_left", + "path": "/user/elbow/left/pose/raw", + "requirement": "optional" + } + ] + } + }, + "description": "Ivazowsky-18319896" +} \ No newline at end of file diff --git a/Config/SteamVRBindings/vive_tracker_left_foot.json b/Config/SteamVRBindings/vive_tracker_left_foot.json new file mode 100644 index 00000000..9d16da53 --- /dev/null +++ b/Config/SteamVRBindings/vive_tracker_left_foot.json @@ -0,0 +1,19 @@ +{ + "name": "Default bindings for Vive Tracker (Left Foot)", + "controller_type": "vive_tracker_left_foot", + "last_edited_by": "UnrealEngine", + "bindings": + { + "/actions/main": + { + "poses": [ + { + "output": "/actions/main/in/tracker_foot_left", + "path": "/user/foot/left/pose/raw", + "requirement": "optional" + } + ] + } + }, + "description": "Ivazowsky-18319896" +} \ No newline at end of file diff --git a/Config/SteamVRBindings/vive_tracker_left_knee.json b/Config/SteamVRBindings/vive_tracker_left_knee.json new file mode 100644 index 00000000..6bbd8af1 --- /dev/null +++ b/Config/SteamVRBindings/vive_tracker_left_knee.json @@ -0,0 +1,19 @@ +{ + "name": "Default bindings for Vive Tracker (Left knee)", + "controller_type": "vive_tracker_left_knee", + "last_edited_by": "UnrealEngine", + "bindings": + { + "/actions/main": + { + "poses": [ + { + "output": "/actions/main/in/tracker_knee_left", + "path": "/user/knee/left/pose/raw", + "requirement": "optional" + } + ] + } + }, + "description": "Ivazowsky-18319896" +} \ No newline at end of file diff --git a/Config/SteamVRBindings/vive_tracker_left_shoulder.json b/Config/SteamVRBindings/vive_tracker_left_shoulder.json new file mode 100644 index 00000000..9e6efcb9 --- /dev/null +++ b/Config/SteamVRBindings/vive_tracker_left_shoulder.json @@ -0,0 +1,19 @@ +{ + "name": "Default bindings for Vive Tracker (Left Shoulder)", + "controller_type": "vive_tracker_left_shoulder", + "last_edited_by": "UnrealEngine", + "bindings": + { + "/actions/main": + { + "poses": [ + { + "output": "/actions/main/in/tracker_shoulder_left", + "path": "/user/shoulder/left/pose/raw", + "requirement": "optional" + } + ] + } + }, + "description": "Ivazowsky-18319896" +} \ No newline at end of file diff --git a/Config/SteamVRBindings/vive_tracker_right_elbow.json b/Config/SteamVRBindings/vive_tracker_right_elbow.json new file mode 100644 index 00000000..caa43d62 --- /dev/null +++ b/Config/SteamVRBindings/vive_tracker_right_elbow.json @@ -0,0 +1,19 @@ +{ + "name": "Default bindings for Vive Tracker (Right Elbow)", + "controller_type": "vive_tracker_right_elbow", + "last_edited_by": "UnrealEngine", + "bindings": + { + "/actions/main": + { + "poses": [ + { + "output": "/actions/main/in/tracker_elbow_right", + "path": "/user/elbow/right/pose/raw", + "requirement": "optional" + } + ] + } + }, + "description": "Ivazowsky-18319896" +} \ No newline at end of file diff --git a/Config/SteamVRBindings/vive_tracker_right_foot.json b/Config/SteamVRBindings/vive_tracker_right_foot.json new file mode 100644 index 00000000..38ad8a32 --- /dev/null +++ b/Config/SteamVRBindings/vive_tracker_right_foot.json @@ -0,0 +1,19 @@ +{ + "name": "Default bindings for Vive Tracker (Right Foot)", + "controller_type": "vive_tracker_right_foot", + "last_edited_by": "UnrealEngine", + "bindings": + { + "/actions/main": + { + "poses": [ + { + "output": "/actions/main/in/tracker_foot_right", + "path": "/user/foot/right/pose/raw", + "requirement": "optional" + } + ] + } + }, + "description": "Ivazowsky-18319896" +} \ No newline at end of file diff --git a/Config/SteamVRBindings/vive_tracker_right_knee.json b/Config/SteamVRBindings/vive_tracker_right_knee.json new file mode 100644 index 00000000..fc9d6922 --- /dev/null +++ b/Config/SteamVRBindings/vive_tracker_right_knee.json @@ -0,0 +1,19 @@ +{ + "name": "Default bindings for Vive Tracker (Right Knee)", + "controller_type": "vive_tracker_right_knee", + "last_edited_by": "UnrealEngine", + "bindings": + { + "/actions/main": + { + "poses": [ + { + "output": "/actions/main/in/tracker_knee_right", + "path": "/user/knee/right/pose/raw", + "requirement": "optional" + } + ] + } + }, + "description": "Ivazowsky-18319896" +} \ No newline at end of file diff --git a/Config/SteamVRBindings/vive_tracker_right_shoulder.json b/Config/SteamVRBindings/vive_tracker_right_shoulder.json new file mode 100644 index 00000000..499882cf --- /dev/null +++ b/Config/SteamVRBindings/vive_tracker_right_shoulder.json @@ -0,0 +1,19 @@ +{ + "name": "Default bindings for Vive Tracker (Right Shoulder)", + "controller_type": "vive_tracker_right_shoulder", + "last_edited_by": "UnrealEngine", + "bindings": + { + "/actions/main": + { + "poses": [ + { + "output": "/actions/main/in/tracker_shoulder_right", + "path": "/user/shoulder/right/pose/raw", + "requirement": "optional" + } + ] + } + }, + "description": "Ivazowsky-18319896" +} \ No newline at end of file diff --git a/Config/SteamVRBindings/vive_tracker_waist.json b/Config/SteamVRBindings/vive_tracker_waist.json new file mode 100644 index 00000000..ce59c83b --- /dev/null +++ b/Config/SteamVRBindings/vive_tracker_waist.json @@ -0,0 +1,19 @@ +{ + "name": "Default bindings for Vive Tracker (Waist)", + "controller_type": "vive_tracker_waist", + "last_edited_by": "UnrealEngine", + "bindings": + { + "/actions/main": + { + "poses": [ + { + "output": "/actions/main/in/tracker_waist", + "path": "/user/waist/pose/raw", + "requirement": "optional" + } + ] + } + }, + "description": "Ivazowsky-18319896" +} \ No newline at end of file diff --git a/Config/UserEngine.ini b/Config/UserEngine.ini new file mode 100644 index 00000000..f75e549f --- /dev/null +++ b/Config/UserEngine.ini @@ -0,0 +1,7 @@ +[/Script/DLSS.DLSSOverrideSettings] +EnableDLSSInEditorViewportsOverride=UseProjectSettings +EnableScreenpercentageManipulationInDLSSEditorViewportsOverride=UseProjectSettings +EnableDLSSInPlayInEditorViewportsOverride=UseProjectSettings +bShowDLSSIncompatiblePluginsToolsWarnings=True +ShowDLSSSDebugOnScreenMessages=Enabled + diff --git a/Config/steamvr_ue_editor_app.json b/Config/steamvr_ue_editor_app.json new file mode 100644 index 00000000..349639e6 --- /dev/null +++ b/Config/steamvr_ue_editor_app.json @@ -0,0 +1,18 @@ +{ + "source": "UE", + "applications": [ + { + "app_key": "application.generated.ue.ivazowsky-18319896.ue4editor.exe", + "launch_type": "url", + "url": "steam://launch/", + "action_manifest_path": "E:/Projects/Ivazowsky/Config/SteamVRBindings/steamvr_manifest.json", + "strings": + { + "en_us": + { + "name": "Ivazowsky-18319896 [UE Editor]" + } + } + } + ] +} \ No newline at end of file diff --git a/Content/AssetPacks/CarMoveSpline/BP/BP_CarStatic.uasset b/Content/AssetPacks/CarMoveSpline/BP/BP_CarStatic.uasset index 71763861..b254e436 100644 Binary files a/Content/AssetPacks/CarMoveSpline/BP/BP_CarStatic.uasset and b/Content/AssetPacks/CarMoveSpline/BP/BP_CarStatic.uasset differ diff --git a/Content/AssetPacks/CarMoveSpline/Level/Sounds/car.uasset b/Content/AssetPacks/CarMoveSpline/Level/Sounds/car.uasset new file mode 100644 index 00000000..27c75c8a Binary files /dev/null and b/Content/AssetPacks/CarMoveSpline/Level/Sounds/car.uasset differ diff --git a/Content/AssetPacks/CarMoveSpline/Level/Sounds/car_Cue.uasset b/Content/AssetPacks/CarMoveSpline/Level/Sounds/car_Cue.uasset new file mode 100644 index 00000000..56c43aa5 Binary files /dev/null and b/Content/AssetPacks/CarMoveSpline/Level/Sounds/car_Cue.uasset differ diff --git a/Content/AssetPacks/CarMoveSpline/Materials/frontlight_Mat.uasset b/Content/AssetPacks/CarMoveSpline/Materials/frontlight_Mat.uasset new file mode 100644 index 00000000..9c2f4512 Binary files /dev/null and b/Content/AssetPacks/CarMoveSpline/Materials/frontlight_Mat.uasset differ diff --git a/Content/AssetPacks/CarMoveSpline/Textures/frontlight.uasset b/Content/AssetPacks/CarMoveSpline/Textures/frontlight.uasset new file mode 100644 index 00000000..55613388 Binary files /dev/null and b/Content/AssetPacks/CarMoveSpline/Textures/frontlight.uasset differ diff --git a/Content/Blueprints/Lamp/BP_lampStreet_Bars_lamp_big.uasset b/Content/Blueprints/Lamp/BP_lampStreet_Bars_lamp_big.uasset new file mode 100644 index 00000000..1c17c33e Binary files /dev/null and b/Content/Blueprints/Lamp/BP_lampStreet_Bars_lamp_big.uasset differ diff --git a/Content/Blueprints/Lamp/BP_lampStreet_Bars_lamp_out.uasset b/Content/Blueprints/Lamp/BP_lampStreet_Bars_lamp_out.uasset new file mode 100644 index 00000000..6097262c Binary files /dev/null and b/Content/Blueprints/Lamp/BP_lampStreet_Bars_lamp_out.uasset differ diff --git a/Content/Blueprints/Lamp/BP_lampStreet_Bars_lamp_small.uasset b/Content/Blueprints/Lamp/BP_lampStreet_Bars_lamp_small.uasset new file mode 100644 index 00000000..779cfb66 Binary files /dev/null and b/Content/Blueprints/Lamp/BP_lampStreet_Bars_lamp_small.uasset differ diff --git a/Content/Blueprints/Lamp/BP_lampStreet_ceilingLamp.uasset b/Content/Blueprints/Lamp/BP_lampStreet_ceilingLamp.uasset new file mode 100644 index 00000000..83d37694 Binary files /dev/null and b/Content/Blueprints/Lamp/BP_lampStreet_ceilingLamp.uasset differ diff --git a/Content/Blueprints/Lamp/BP_spotlight.uasset b/Content/Blueprints/Lamp/BP_spotlight.uasset index 129b4a63..67c66596 100644 Binary files a/Content/Blueprints/Lamp/BP_spotlight.uasset and b/Content/Blueprints/Lamp/BP_spotlight.uasset differ diff --git a/Content/Blueprints/Lamp/BP_spotlight_1.uasset b/Content/Blueprints/Lamp/BP_spotlight_1.uasset index 2bfa9a32..ffe4b324 100644 Binary files a/Content/Blueprints/Lamp/BP_spotlight_1.uasset and b/Content/Blueprints/Lamp/BP_spotlight_1.uasset differ diff --git a/Content/Blueprints/Lamp/BP_spotlight_5eyes.uasset b/Content/Blueprints/Lamp/BP_spotlight_5eyes.uasset index cae61fa4..03b40260 100644 Binary files a/Content/Blueprints/Lamp/BP_spotlight_5eyes.uasset and b/Content/Blueprints/Lamp/BP_spotlight_5eyes.uasset differ diff --git a/Content/Blueprints/Lamp/BP_spotlight_5eyes1.uasset b/Content/Blueprints/Lamp/BP_spotlight_5eyes1.uasset new file mode 100644 index 00000000..9c4a7821 Binary files /dev/null and b/Content/Blueprints/Lamp/BP_spotlight_5eyes1.uasset differ diff --git a/Content/Blueprints/Lamp/BP_spotlight_ceilingLamp1.uasset b/Content/Blueprints/Lamp/BP_spotlight_ceilingLamp1.uasset index 984fce09..0f0b7630 100644 Binary files a/Content/Blueprints/Lamp/BP_spotlight_ceilingLamp1.uasset and b/Content/Blueprints/Lamp/BP_spotlight_ceilingLamp1.uasset differ diff --git a/Content/Blueprints/Lamp/BP_spotlight_ceilingLamp2.uasset b/Content/Blueprints/Lamp/BP_spotlight_ceilingLamp2.uasset index 0fc41fd1..afba1bf4 100644 Binary files a/Content/Blueprints/Lamp/BP_spotlight_ceilingLamp2.uasset and b/Content/Blueprints/Lamp/BP_spotlight_ceilingLamp2.uasset differ diff --git a/Content/Blueprints/Lamp/BP_spotlight_ceilingLamp3.uasset b/Content/Blueprints/Lamp/BP_spotlight_ceilingLamp3.uasset index 73cd99a0..b5fd794d 100644 Binary files a/Content/Blueprints/Lamp/BP_spotlight_ceilingLamp3.uasset and b/Content/Blueprints/Lamp/BP_spotlight_ceilingLamp3.uasset differ diff --git a/Content/Blueprints/Lamp/BP_spotlight_egg.uasset b/Content/Blueprints/Lamp/BP_spotlight_egg.uasset index 26aa83ce..b7830495 100644 Binary files a/Content/Blueprints/Lamp/BP_spotlight_egg.uasset and b/Content/Blueprints/Lamp/BP_spotlight_egg.uasset differ diff --git a/Content/Blueprints/Lamp/BP_spotlight_sphere.uasset b/Content/Blueprints/Lamp/BP_spotlight_sphere.uasset index 83907513..5bb1cfa1 100644 Binary files a/Content/Blueprints/Lamp/BP_spotlight_sphere.uasset and b/Content/Blueprints/Lamp/BP_spotlight_sphere.uasset differ diff --git a/Content/Blueprints/Lamp/BP_spotlight_wall.uasset b/Content/Blueprints/Lamp/BP_spotlight_wall.uasset index 28c6745c..5fa661c7 100644 Binary files a/Content/Blueprints/Lamp/BP_spotlight_wall.uasset and b/Content/Blueprints/Lamp/BP_spotlight_wall.uasset differ diff --git a/Content/Blueprints/Lamp/BP_spotlight_wall1.uasset b/Content/Blueprints/Lamp/BP_spotlight_wall1.uasset index 873e816d..a1177503 100644 Binary files a/Content/Blueprints/Lamp/BP_spotlight_wall1.uasset and b/Content/Blueprints/Lamp/BP_spotlight_wall1.uasset differ diff --git a/Content/Blueprints/Lamp/BP_spotlight_xiaomi.uasset b/Content/Blueprints/Lamp/BP_spotlight_xiaomi.uasset index e1ee7977..758af5ab 100644 Binary files a/Content/Blueprints/Lamp/BP_spotlight_xiaomi.uasset and b/Content/Blueprints/Lamp/BP_spotlight_xiaomi.uasset differ diff --git a/Content/Blueprints/Player/CM.uasset b/Content/Blueprints/Player/CM.uasset index dba64ebb..29f1c1d0 100644 Binary files a/Content/Blueprints/Player/CM.uasset and b/Content/Blueprints/Player/CM.uasset differ diff --git a/Content/Blueprints/Player/GI.uasset b/Content/Blueprints/Player/GI.uasset index 63d0a7de..19439da2 100644 Binary files a/Content/Blueprints/Player/GI.uasset and b/Content/Blueprints/Player/GI.uasset differ diff --git a/Content/Blueprints/Player/GameplayFunctions.uasset b/Content/Blueprints/Player/GameplayFunctions.uasset index 7afdc64d..fc3dfadd 100644 Binary files a/Content/Blueprints/Player/GameplayFunctions.uasset and b/Content/Blueprints/Player/GameplayFunctions.uasset differ diff --git a/Content/Blueprints/Player/MathAndConvertFns.uasset b/Content/Blueprints/Player/MathAndConvertFns.uasset index 4b205943..7f477e3f 100644 Binary files a/Content/Blueprints/Player/MathAndConvertFns.uasset and b/Content/Blueprints/Player/MathAndConvertFns.uasset differ diff --git a/Content/Blueprints/Player/MyPC.uasset b/Content/Blueprints/Player/MyPC.uasset index 53d0d951..d2b35f47 100644 Binary files a/Content/Blueprints/Player/MyPC.uasset and b/Content/Blueprints/Player/MyPC.uasset differ diff --git a/Content/Blueprints/Player/MyPawn.uasset b/Content/Blueprints/Player/MyPawn.uasset index d381e633..a94642cd 100644 Binary files a/Content/Blueprints/Player/MyPawn.uasset and b/Content/Blueprints/Player/MyPawn.uasset differ diff --git a/Content/Blueprints/Player/PresL.uasset b/Content/Blueprints/Player/PresL.uasset index e258a82d..19df3e54 100644 Binary files a/Content/Blueprints/Player/PresL.uasset and b/Content/Blueprints/Player/PresL.uasset differ diff --git a/Content/Blueprints/Player/VR/Ipad.uasset b/Content/Blueprints/Player/VR/Ipad.uasset index f07b7cb0..87d2863d 100644 Binary files a/Content/Blueprints/Player/VR/Ipad.uasset and b/Content/Blueprints/Player/VR/Ipad.uasset differ diff --git a/Content/Blueprints/Player/VR/Materials/Colors.uasset b/Content/Blueprints/Player/VR/Materials/Colors.uasset index c931abd4..42caad5b 100644 Binary files a/Content/Blueprints/Player/VR/Materials/Colors.uasset and b/Content/Blueprints/Player/VR/Materials/Colors.uasset differ diff --git a/Content/Blueprints/Player/VR/Materials/M_ArcEndpoint.uasset b/Content/Blueprints/Player/VR/Materials/M_ArcEndpoint.uasset index f356e378..228b070d 100644 Binary files a/Content/Blueprints/Player/VR/Materials/M_ArcEndpoint.uasset and b/Content/Blueprints/Player/VR/Materials/M_ArcEndpoint.uasset differ diff --git a/Content/Blueprints/Player/VR/Materials/M_SplineArcMat.uasset b/Content/Blueprints/Player/VR/Materials/M_SplineArcMat.uasset index de9608ec..3a3c81e6 100644 Binary files a/Content/Blueprints/Player/VR/Materials/M_SplineArcMat.uasset and b/Content/Blueprints/Player/VR/Materials/M_SplineArcMat.uasset differ diff --git a/Content/Blueprints/Player/VR/Materials/M_TeleportPreviews.uasset b/Content/Blueprints/Player/VR/Materials/M_TeleportPreviews.uasset index 96bbedfd..f29d7733 100644 Binary files a/Content/Blueprints/Player/VR/Materials/M_TeleportPreviews.uasset and b/Content/Blueprints/Player/VR/Materials/M_TeleportPreviews.uasset differ diff --git a/Content/Blueprints/Player/VR/Materials/M_VRpointer.uasset b/Content/Blueprints/Player/VR/Materials/M_VRpointer.uasset index d129723e..a705a535 100644 Binary files a/Content/Blueprints/Player/VR/Materials/M_VRpointer.uasset and b/Content/Blueprints/Player/VR/Materials/M_VRpointer.uasset differ diff --git a/Content/Blueprints/Player/VR/Materials/M_VRtraceSphere.uasset b/Content/Blueprints/Player/VR/Materials/M_VRtraceSphere.uasset index 02a672be..9c1382b8 100644 Binary files a/Content/Blueprints/Player/VR/Materials/M_VRtraceSphere.uasset and b/Content/Blueprints/Player/VR/Materials/M_VRtraceSphere.uasset differ diff --git a/Content/Blueprints/Player/VR/Materials/Quest2/quest2RightAB.uasset b/Content/Blueprints/Player/VR/Materials/Quest2/quest2RightAB.uasset index 43de6989..8cfd1cf8 100644 Binary files a/Content/Blueprints/Player/VR/Materials/Quest2/quest2RightAB.uasset and b/Content/Blueprints/Player/VR/Materials/Quest2/quest2RightAB.uasset differ diff --git a/Content/Blueprints/Player/VR/Materials/fantomMap/GenericHMD.uasset b/Content/Blueprints/Player/VR/Materials/fantomMap/GenericHMD.uasset new file mode 100644 index 00000000..6bcf556f Binary files /dev/null and b/Content/Blueprints/Player/VR/Materials/fantomMap/GenericHMD.uasset differ diff --git a/Content/Blueprints/Player/VR/Materials/fantomMap/M_Empty.uasset b/Content/Blueprints/Player/VR/Materials/fantomMap/M_Empty.uasset new file mode 100644 index 00000000..bb70c57b Binary files /dev/null and b/Content/Blueprints/Player/VR/Materials/fantomMap/M_Empty.uasset differ diff --git a/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings.uasset b/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings.uasset new file mode 100644 index 00000000..b8666d10 Binary files /dev/null and b/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings.uasset differ diff --git a/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_Brick.uasset b/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_Brick.uasset new file mode 100644 index 00000000..60c45e64 Binary files /dev/null and b/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_Brick.uasset differ diff --git a/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_RAL_1011.uasset b/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_RAL_1011.uasset new file mode 100644 index 00000000..5f31f75a Binary files /dev/null and b/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_RAL_1011.uasset differ diff --git a/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_RAL_5009.uasset b/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_RAL_5009.uasset new file mode 100644 index 00000000..6d0d3569 Binary files /dev/null and b/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_RAL_5009.uasset differ diff --git a/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_RAL_6005.uasset b/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_RAL_6005.uasset new file mode 100644 index 00000000..a426b40b Binary files /dev/null and b/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_RAL_6005.uasset differ diff --git a/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_RAL_7016.uasset b/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_RAL_7016.uasset new file mode 100644 index 00000000..e63f537b Binary files /dev/null and b/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_RAL_7016.uasset differ diff --git a/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_RAL_716.uasset b/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_RAL_716.uasset new file mode 100644 index 00000000..d34ac1e2 Binary files /dev/null and b/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_RAL_716.uasset differ diff --git a/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_RAL_8023.uasset b/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_RAL_8023.uasset new file mode 100644 index 00000000..ad5bd914 Binary files /dev/null and b/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_RAL_8023.uasset differ diff --git a/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_mram.uasset b/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_mram.uasset new file mode 100644 index 00000000..3394f492 Binary files /dev/null and b/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_mram.uasset differ diff --git a/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_rub.uasset b/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_rub.uasset new file mode 100644 index 00000000..a0e7bc81 Binary files /dev/null and b/Content/Blueprints/Player/VR/Materials/fantomMap/M_FantomBuildings_rub.uasset differ diff --git a/Content/Blueprints/Player/VR/Materials/fantomMap/M_HMD.uasset b/Content/Blueprints/Player/VR/Materials/fantomMap/M_HMD.uasset new file mode 100644 index 00000000..bd0a0e7d Binary files /dev/null and b/Content/Blueprints/Player/VR/Materials/fantomMap/M_HMD.uasset differ diff --git a/Content/Blueprints/Player/VR/Materials/focus3/M_focus3.uasset b/Content/Blueprints/Player/VR/Materials/focus3/M_focus3.uasset new file mode 100644 index 00000000..0692845a Binary files /dev/null and b/Content/Blueprints/Player/VR/Materials/focus3/M_focus3.uasset differ diff --git a/Content/Blueprints/Player/VR/Materials/focus3/focus3R.uasset b/Content/Blueprints/Player/VR/Materials/focus3/focus3R.uasset new file mode 100644 index 00000000..1f1104f4 Binary files /dev/null and b/Content/Blueprints/Player/VR/Materials/focus3/focus3R.uasset differ diff --git a/Content/Blueprints/Player/VR/Materials/focus3/focus3R_PhysicsAsset.uasset b/Content/Blueprints/Player/VR/Materials/focus3/focus3R_PhysicsAsset.uasset new file mode 100644 index 00000000..2807817e Binary files /dev/null and b/Content/Blueprints/Player/VR/Materials/focus3/focus3R_PhysicsAsset.uasset differ diff --git a/Content/Blueprints/Player/VR/Materials/focus3/focus3R_Skeleton.uasset b/Content/Blueprints/Player/VR/Materials/focus3/focus3R_Skeleton.uasset new file mode 100644 index 00000000..913d8771 Binary files /dev/null and b/Content/Blueprints/Player/VR/Materials/focus3/focus3R_Skeleton.uasset differ diff --git a/Content/Blueprints/Player/VR/Materials/focus3/focus3R_Skeleton_AnimBlueprint.uasset b/Content/Blueprints/Player/VR/Materials/focus3/focus3R_Skeleton_AnimBlueprint.uasset new file mode 100644 index 00000000..120faa2a Binary files /dev/null and b/Content/Blueprints/Player/VR/Materials/focus3/focus3R_Skeleton_AnimBlueprint.uasset differ diff --git a/Content/Blueprints/Player/VR/VRHand.uasset b/Content/Blueprints/Player/VR/VRHand.uasset index de729396..ebabca33 100644 Binary files a/Content/Blueprints/Player/VR/VRHand.uasset and b/Content/Blueprints/Player/VR/VRHand.uasset differ diff --git a/Content/Blueprints/Player/VR/VRPawn.uasset b/Content/Blueprints/Player/VR/VRPawn.uasset index 608663c5..69969986 100644 Binary files a/Content/Blueprints/Player/VR/VRPawn.uasset and b/Content/Blueprints/Player/VR/VRPawn.uasset differ diff --git a/Content/Blueprints/Player/VR/VRinterface.uasset b/Content/Blueprints/Player/VR/VRinterface.uasset index 782d80df..9ecf9e9e 100644 Binary files a/Content/Blueprints/Player/VR/VRinterface.uasset and b/Content/Blueprints/Player/VR/VRinterface.uasset differ diff --git a/Content/Blueprints/Player/VR/VRscreen.uasset b/Content/Blueprints/Player/VR/VRscreen.uasset index 553464ff..b0d7dcc3 100644 Binary files a/Content/Blueprints/Player/VR/VRscreen.uasset and b/Content/Blueprints/Player/VR/VRscreen.uasset differ diff --git a/Content/Blueprints/Player/VR/fantomMap1.uasset b/Content/Blueprints/Player/VR/fantomMap1.uasset new file mode 100644 index 00000000..524ab8ab Binary files /dev/null and b/Content/Blueprints/Player/VR/fantomMap1.uasset differ diff --git a/Content/Blueprints/Player/VR/grabber.uasset b/Content/Blueprints/Player/VR/grabber.uasset new file mode 100644 index 00000000..4d69d8ed Binary files /dev/null and b/Content/Blueprints/Player/VR/grabber.uasset differ diff --git a/Content/Blueprints/Player/WalkingPawn.uasset b/Content/Blueprints/Player/WalkingPawn.uasset index b6f925b8..7bafe23c 100644 Binary files a/Content/Blueprints/Player/WalkingPawn.uasset and b/Content/Blueprints/Player/WalkingPawn.uasset differ diff --git a/Content/Blueprints/Player/getFunctions.uasset b/Content/Blueprints/Player/getFunctions.uasset index 9d9fce20..61aef336 100644 Binary files a/Content/Blueprints/Player/getFunctions.uasset and b/Content/Blueprints/Player/getFunctions.uasset differ diff --git a/Content/Blueprints/Player/infoHud.uasset b/Content/Blueprints/Player/infoHud.uasset index 6230f733..565b0bb2 100644 Binary files a/Content/Blueprints/Player/infoHud.uasset and b/Content/Blueprints/Player/infoHud.uasset differ diff --git a/Content/Blueprints/Player/myGM.uasset b/Content/Blueprints/Player/myGM.uasset index a3690731..209be714 100644 Binary files a/Content/Blueprints/Player/myGM.uasset and b/Content/Blueprints/Player/myGM.uasset differ diff --git a/Content/Blueprints/UI/Actors/FlatPoint.uasset b/Content/Blueprints/UI/Actors/FlatPoint.uasset index 23032a2e..e3f86728 100644 Binary files a/Content/Blueprints/UI/Actors/FlatPoint.uasset and b/Content/Blueprints/UI/Actors/FlatPoint.uasset differ diff --git a/Content/Blueprints/UI/Actors/FloorPoint.uasset b/Content/Blueprints/UI/Actors/FloorPoint.uasset index f31690f5..378c7cf2 100644 Binary files a/Content/Blueprints/UI/Actors/FloorPoint.uasset and b/Content/Blueprints/UI/Actors/FloorPoint.uasset differ diff --git a/Content/Blueprints/UI/Actors/HousePoint.uasset b/Content/Blueprints/UI/Actors/HousePoint.uasset index b2979d2f..5b3f03d7 100644 Binary files a/Content/Blueprints/UI/Actors/HousePoint.uasset and b/Content/Blueprints/UI/Actors/HousePoint.uasset differ diff --git a/Content/Blueprints/UI/Actors/InfraPoint.uasset b/Content/Blueprints/UI/Actors/InfraPoint.uasset index fdd68557..1f0ba537 100644 Binary files a/Content/Blueprints/UI/Actors/InfraPoint.uasset and b/Content/Blueprints/UI/Actors/InfraPoint.uasset differ diff --git a/Content/Blueprints/UI/Actors/KPmaker.uasset b/Content/Blueprints/UI/Actors/KPmaker.uasset index ec52ad1e..7dbb41ff 100644 Binary files a/Content/Blueprints/UI/Actors/KPmaker.uasset and b/Content/Blueprints/UI/Actors/KPmaker.uasset differ diff --git a/Content/Blueprints/UI/Actors/TouchPoint.uasset b/Content/Blueprints/UI/Actors/TouchPoint.uasset index 7b2d416e..bdb5e406 100644 Binary files a/Content/Blueprints/UI/Actors/TouchPoint.uasset and b/Content/Blueprints/UI/Actors/TouchPoint.uasset differ diff --git a/Content/Blueprints/UI/Actors/farPoitner.uasset b/Content/Blueprints/UI/Actors/farPoitner.uasset new file mode 100644 index 00000000..0f322c2b Binary files /dev/null and b/Content/Blueprints/UI/Actors/farPoitner.uasset differ diff --git a/Content/Blueprints/UI/Actors/flatCAP.uasset b/Content/Blueprints/UI/Actors/flatCAP.uasset new file mode 100644 index 00000000..5f4de035 Binary files /dev/null and b/Content/Blueprints/UI/Actors/flatCAP.uasset differ diff --git a/Content/Blueprints/UI/Actors/walkPointer.uasset b/Content/Blueprints/UI/Actors/walkPointer.uasset new file mode 100644 index 00000000..0dd66b31 Binary files /dev/null and b/Content/Blueprints/UI/Actors/walkPointer.uasset differ diff --git a/Content/Blueprints/UI/Fonts/Jost-Medium.uasset b/Content/Blueprints/UI/Fonts/Jost-Medium.uasset new file mode 100644 index 00000000..b6e293f3 Binary files /dev/null and b/Content/Blueprints/UI/Fonts/Jost-Medium.uasset differ diff --git a/Content/Blueprints/UI/Fonts/Jost-Medium_Font.uasset b/Content/Blueprints/UI/Fonts/Jost-Medium_Font.uasset new file mode 100644 index 00000000..f8121c0e Binary files /dev/null and b/Content/Blueprints/UI/Fonts/Jost-Medium_Font.uasset differ diff --git a/Content/Blueprints/UI/Fonts/Jost-Regular.uasset b/Content/Blueprints/UI/Fonts/Jost-Regular.uasset new file mode 100644 index 00000000..3779e90c Binary files /dev/null and b/Content/Blueprints/UI/Fonts/Jost-Regular.uasset differ diff --git a/Content/Blueprints/UI/Fonts/euclidDF.uasset b/Content/Blueprints/UI/Fonts/euclidDF.uasset new file mode 100644 index 00000000..ddd17de8 Binary files /dev/null and b/Content/Blueprints/UI/Fonts/euclidDF.uasset differ diff --git a/Content/Blueprints/UI/Materials/Compass.uasset b/Content/Blueprints/UI/Materials/Compass.uasset index 3b03195c..7eab1ad4 100644 Binary files a/Content/Blueprints/UI/Materials/Compass.uasset and b/Content/Blueprints/UI/Materials/Compass.uasset differ diff --git a/Content/Blueprints/UI/Materials/FasadHide.uasset b/Content/Blueprints/UI/Materials/FasadHide.uasset index f499a2e7..8c3078dd 100644 Binary files a/Content/Blueprints/UI/Materials/FasadHide.uasset and b/Content/Blueprints/UI/Materials/FasadHide.uasset differ diff --git a/Content/Blueprints/UI/Materials/InfrastructureAIVAMask.uasset b/Content/Blueprints/UI/Materials/InfrastructureAIVAMask.uasset new file mode 100644 index 00000000..2e14ed83 Binary files /dev/null and b/Content/Blueprints/UI/Materials/InfrastructureAIVAMask.uasset differ diff --git a/Content/Blueprints/UI/Materials/MF_FakeHide.uasset b/Content/Blueprints/UI/Materials/MF_FakeHide.uasset index 10374ce5..e489096f 100644 Binary files a/Content/Blueprints/UI/Materials/MF_FakeHide.uasset and b/Content/Blueprints/UI/Materials/MF_FakeHide.uasset differ diff --git a/Content/Blueprints/UI/Materials/MF_FasadHide.uasset b/Content/Blueprints/UI/Materials/MF_FasadHide.uasset index 8dfd2f2c..6857d9a1 100644 Binary files a/Content/Blueprints/UI/Materials/MF_FasadHide.uasset and b/Content/Blueprints/UI/Materials/MF_FasadHide.uasset differ diff --git a/Content/Blueprints/UI/Materials/MF_doorFade.uasset b/Content/Blueprints/UI/Materials/MF_doorFade.uasset index 932a26cd..c6666342 100644 Binary files a/Content/Blueprints/UI/Materials/MF_doorFade.uasset and b/Content/Blueprints/UI/Materials/MF_doorFade.uasset differ diff --git a/Content/Blueprints/UI/Materials/M_BgRound.uasset b/Content/Blueprints/UI/Materials/M_BgRound.uasset new file mode 100644 index 00000000..37d9124d Binary files /dev/null and b/Content/Blueprints/UI/Materials/M_BgRound.uasset differ diff --git a/Content/Blueprints/UI/Materials/M_InfraGPs.uasset b/Content/Blueprints/UI/Materials/M_InfraGPs.uasset new file mode 100644 index 00000000..a7ef98af Binary files /dev/null and b/Content/Blueprints/UI/Materials/M_InfraGPs.uasset differ diff --git a/Content/Blueprints/UI/Materials/M_InfraRing.uasset b/Content/Blueprints/UI/Materials/M_InfraRing.uasset new file mode 100644 index 00000000..1b1054ac Binary files /dev/null and b/Content/Blueprints/UI/Materials/M_InfraRing.uasset differ diff --git a/Content/Blueprints/UI/Materials/M_KPrender.uasset b/Content/Blueprints/UI/Materials/M_KPrender.uasset index cbf3ef4f..b4156985 100644 Binary files a/Content/Blueprints/UI/Materials/M_KPrender.uasset and b/Content/Blueprints/UI/Materials/M_KPrender.uasset differ diff --git a/Content/Blueprints/UI/Materials/M_cap.uasset b/Content/Blueprints/UI/Materials/M_cap.uasset new file mode 100644 index 00000000..7a400d5d Binary files /dev/null and b/Content/Blueprints/UI/Materials/M_cap.uasset differ diff --git a/Content/Blueprints/UI/Materials/M_cap_blue.uasset b/Content/Blueprints/UI/Materials/M_cap_blue.uasset new file mode 100644 index 00000000..c2ef412f Binary files /dev/null and b/Content/Blueprints/UI/Materials/M_cap_blue.uasset differ diff --git a/Content/Blueprints/UI/Materials/M_cap_gold.uasset b/Content/Blueprints/UI/Materials/M_cap_gold.uasset new file mode 100644 index 00000000..021e4bc1 Binary files /dev/null and b/Content/Blueprints/UI/Materials/M_cap_gold.uasset differ diff --git a/Content/Blueprints/UI/Materials/M_cap_hall.uasset b/Content/Blueprints/UI/Materials/M_cap_hall.uasset new file mode 100644 index 00000000..9813ab65 Binary files /dev/null and b/Content/Blueprints/UI/Materials/M_cap_hall.uasset differ diff --git a/Content/Blueprints/UI/Materials/PointFade.uasset b/Content/Blueprints/UI/Materials/PointFade.uasset index 6321770a..a49c6c25 100644 Binary files a/Content/Blueprints/UI/Materials/PointFade.uasset and b/Content/Blueprints/UI/Materials/PointFade.uasset differ diff --git a/Content/Blueprints/UI/Materials/VRPointAtlas.uasset b/Content/Blueprints/UI/Materials/VRPointAtlas.uasset new file mode 100644 index 00000000..dc4175dc Binary files /dev/null and b/Content/Blueprints/UI/Materials/VRPointAtlas.uasset differ diff --git a/Content/Blueprints/UI/Materials/WidgetMatVR.uasset b/Content/Blueprints/UI/Materials/WidgetMatVR.uasset index 796c4963..f436a680 100644 Binary files a/Content/Blueprints/UI/Materials/WidgetMatVR.uasset and b/Content/Blueprints/UI/Materials/WidgetMatVR.uasset differ diff --git a/Content/Blueprints/UI/Materials/WidgetMatVR_Mask.uasset b/Content/Blueprints/UI/Materials/WidgetMatVR_Mask.uasset new file mode 100644 index 00000000..6b9e886a Binary files /dev/null and b/Content/Blueprints/UI/Materials/WidgetMatVR_Mask.uasset differ diff --git a/Content/Blueprints/UI/Materials/infraCircle.uasset b/Content/Blueprints/UI/Materials/infraCircle.uasset new file mode 100644 index 00000000..b15ef0ed Binary files /dev/null and b/Content/Blueprints/UI/Materials/infraCircle.uasset differ diff --git a/Content/Blueprints/UI/Materials/textMasked.uasset b/Content/Blueprints/UI/Materials/textMasked.uasset index 2dea6049..a1e50aa1 100644 Binary files a/Content/Blueprints/UI/Materials/textMasked.uasset and b/Content/Blueprints/UI/Materials/textMasked.uasset differ diff --git a/Content/Blueprints/UI/Materials/textStreet.uasset b/Content/Blueprints/UI/Materials/textStreet.uasset new file mode 100644 index 00000000..ee24bd34 Binary files /dev/null and b/Content/Blueprints/UI/Materials/textStreet.uasset differ diff --git a/Content/Blueprints/UI/Others/FavoriteStruct1.uasset b/Content/Blueprints/UI/Others/FavoriteStruct1.uasset new file mode 100644 index 00000000..328db38f Binary files /dev/null and b/Content/Blueprints/UI/Others/FavoriteStruct1.uasset differ diff --git a/Content/Blueprints/UI/Others/FlatData.uasset b/Content/Blueprints/UI/Others/FlatData.uasset index cf4b5c9a..4025cf2c 100644 Binary files a/Content/Blueprints/UI/Others/FlatData.uasset and b/Content/Blueprints/UI/Others/FlatData.uasset differ diff --git a/Content/Blueprints/UI/Others/Flatinfo1.uasset b/Content/Blueprints/UI/Others/Flatinfo1.uasset new file mode 100644 index 00000000..778f15a9 Binary files /dev/null and b/Content/Blueprints/UI/Others/Flatinfo1.uasset differ diff --git a/Content/Blueprints/UI/Others/InfraData.uasset b/Content/Blueprints/UI/Others/InfraData.uasset index 847169a2..306270e0 100644 Binary files a/Content/Blueprints/UI/Others/InfraData.uasset and b/Content/Blueprints/UI/Others/InfraData.uasset differ diff --git a/Content/Blueprints/UI/Others/infraFilter.uasset b/Content/Blueprints/UI/Others/infraFilter.uasset new file mode 100644 index 00000000..8fdb405d Binary files /dev/null and b/Content/Blueprints/UI/Others/infraFilter.uasset differ diff --git a/Content/Blueprints/UI/Others/roomNames.uasset b/Content/Blueprints/UI/Others/roomNames.uasset index ba2336fe..365441c0 100644 Binary files a/Content/Blueprints/UI/Others/roomNames.uasset and b/Content/Blueprints/UI/Others/roomNames.uasset differ diff --git a/Content/Blueprints/UI/Others/settingsSave.uasset b/Content/Blueprints/UI/Others/settingsSave.uasset new file mode 100644 index 00000000..2d1543b4 Binary files /dev/null and b/Content/Blueprints/UI/Others/settingsSave.uasset differ diff --git a/Content/Blueprints/UI/Others/stylesList.uasset b/Content/Blueprints/UI/Others/stylesList.uasset new file mode 100644 index 00000000..ead07824 Binary files /dev/null and b/Content/Blueprints/UI/Others/stylesList.uasset differ diff --git a/Content/Blueprints/UI/Others/tagsList1.uasset b/Content/Blueprints/UI/Others/tagsList1.uasset new file mode 100644 index 00000000..c302f762 Binary files /dev/null and b/Content/Blueprints/UI/Others/tagsList1.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/AboutENKO.uasset b/Content/Blueprints/UI/WBPS/Imgs/AboutENKO.uasset new file mode 100644 index 00000000..3a70ff32 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/AboutENKO.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/AboutGRAFF.uasset b/Content/Blueprints/UI/WBPS/Imgs/AboutGRAFF.uasset new file mode 100644 index 00000000..415c7cf1 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/AboutGRAFF.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/GP_Mask.uasset b/Content/Blueprints/UI/WBPS/Imgs/GP_Mask.uasset new file mode 100644 index 00000000..3c3cb244 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/GP_Mask.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/Header2.uasset b/Content/Blueprints/UI/WBPS/Imgs/Header2.uasset new file mode 100644 index 00000000..7af768b2 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/Header2.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/Header3.uasset b/Content/Blueprints/UI/WBPS/Imgs/Header3.uasset new file mode 100644 index 00000000..fd3520b3 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/Header3.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/Help3D.uasset b/Content/Blueprints/UI/WBPS/Imgs/Help3D.uasset new file mode 100644 index 00000000..d5f11130 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/Help3D.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/InfrastructureAIVA.uasset b/Content/Blueprints/UI/WBPS/Imgs/InfrastructureAIVA.uasset new file mode 100644 index 00000000..53499e75 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/InfrastructureAIVA.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/InfrastructureAIVA_Mat.uasset b/Content/Blueprints/UI/WBPS/Imgs/InfrastructureAIVA_Mat.uasset new file mode 100644 index 00000000..9da30c7a Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/InfrastructureAIVA_Mat.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/Logo3.uasset b/Content/Blueprints/UI/WBPS/Imgs/Logo3.uasset new file mode 100644 index 00000000..a84c9f49 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/Logo3.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/MapHints/ArrowInfrastructur.uasset b/Content/Blueprints/UI/WBPS/Imgs/MapHints/ArrowInfrastructur.uasset new file mode 100644 index 00000000..a957c88f Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/MapHints/ArrowInfrastructur.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/MapHints/ArrowInfrastructure.uasset b/Content/Blueprints/UI/WBPS/Imgs/MapHints/ArrowInfrastructure.uasset new file mode 100644 index 00000000..fadcade2 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/MapHints/ArrowInfrastructure.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/HintBase.uasset b/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/HintBase.uasset new file mode 100644 index 00000000..c914fcb3 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/HintBase.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/HintBase1.uasset b/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/HintBase1.uasset new file mode 100644 index 00000000..6f0ca8d3 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/HintBase1.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/HintBase_AIVA.uasset b/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/HintBase_AIVA.uasset new file mode 100644 index 00000000..4a530e6c Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/HintBase_AIVA.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/HintBase_Project.uasset b/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/HintBase_Project.uasset new file mode 100644 index 00000000..2b70ca97 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/HintBase_Project.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/IconBase.uasset b/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/IconBase.uasset new file mode 100644 index 00000000..c97ff7e5 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/IconBase.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/IconBase_AIVA.uasset b/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/IconBase_AIVA.uasset new file mode 100644 index 00000000..8651d426 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/IconBase_AIVA.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/IconBase_Project.uasset b/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/IconBase_Project.uasset new file mode 100644 index 00000000..af0b0439 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/IconBase_Project.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/LabelBase.uasset b/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/LabelBase.uasset new file mode 100644 index 00000000..07b4e042 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/LabelBase.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/LabelBase_AIVA.uasset b/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/LabelBase_AIVA.uasset new file mode 100644 index 00000000..5c0116e6 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/LabelBase_AIVA.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/LabelBase_Project.uasset b/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/LabelBase_Project.uasset new file mode 100644 index 00000000..448cb36c Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/MapHints/HintBase/LabelBase_Project.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/AIVA.uasset b/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/AIVA.uasset new file mode 100644 index 00000000..dde0b7ec Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/AIVA.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/apartment.uasset b/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/apartment.uasset new file mode 100644 index 00000000..722c2b3a Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/apartment.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/api.uasset b/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/api.uasset new file mode 100644 index 00000000..1c4ec167 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/api.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/auto.uasset b/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/auto.uasset new file mode 100644 index 00000000..159b181c Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/auto.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/fitness.uasset b/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/fitness.uasset new file mode 100644 index 00000000..f4d57ffb Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/fitness.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/local_mall.uasset b/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/local_mall.uasset new file mode 100644 index 00000000..a0df693c Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/local_mall.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/medicine.uasset b/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/medicine.uasset new file mode 100644 index 00000000..f15dd74b Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/medicine.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/nature.uasset b/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/nature.uasset new file mode 100644 index 00000000..dc87491f Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/nature.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/parking.uasset b/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/parking.uasset new file mode 100644 index 00000000..57c4f391 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/parking.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/shopping_cart.uasset b/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/shopping_cart.uasset new file mode 100644 index 00000000..4ab74d0d Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/shopping_cart.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/touch.uasset b/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/touch.uasset new file mode 100644 index 00000000..0b40788a Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/touch.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/tour.uasset b/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/tour.uasset new file mode 100644 index 00000000..b71cec28 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/tour.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/villa.uasset b/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/villa.uasset new file mode 100644 index 00000000..9c78daeb Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/MapHints/Icons/villa.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/NameBlock.uasset b/Content/Blueprints/UI/WBPS/Imgs/NameBlock.uasset new file mode 100644 index 00000000..7f8a426c Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/NameBlock.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/SmallCard.uasset b/Content/Blueprints/UI/WBPS/Imgs/SmallCard.uasset new file mode 100644 index 00000000..d77aee89 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/SmallCard.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/WelcomeScreen.uasset b/Content/Blueprints/UI/WBPS/Imgs/WelcomeScreen.uasset index 444a3243..d1456373 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/WelcomeScreen.uasset and b/Content/Blueprints/UI/WBPS/Imgs/WelcomeScreen.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/aboutAiv/AboutAIVA-1.uasset b/Content/Blueprints/UI/WBPS/Imgs/aboutAiv/AboutAIVA-1.uasset index cc4042f9..86f607d5 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/aboutAiv/AboutAIVA-1.uasset and b/Content/Blueprints/UI/WBPS/Imgs/aboutAiv/AboutAIVA-1.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/aboutAiv/AboutAIVA-2.uasset b/Content/Blueprints/UI/WBPS/Imgs/aboutAiv/AboutAIVA-2.uasset index 3b7d2bd6..b81032cf 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/aboutAiv/AboutAIVA-2.uasset and b/Content/Blueprints/UI/WBPS/Imgs/aboutAiv/AboutAIVA-2.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/aboutAiv/AboutAIVA-3.uasset b/Content/Blueprints/UI/WBPS/Imgs/aboutAiv/AboutAIVA-3.uasset index 55f6e32d..00d1e4e2 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/aboutAiv/AboutAIVA-3.uasset and b/Content/Blueprints/UI/WBPS/Imgs/aboutAiv/AboutAIVA-3.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/aboutAiv/AboutAIVA-4.uasset b/Content/Blueprints/UI/WBPS/Imgs/aboutAiv/AboutAIVA-4.uasset index 04083d80..f0ac2d01 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/aboutAiv/AboutAIVA-4.uasset and b/Content/Blueprints/UI/WBPS/Imgs/aboutAiv/AboutAIVA-4.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/aboutAiv/AboutAIVA-5.uasset b/Content/Blueprints/UI/WBPS/Imgs/aboutAiv/AboutAIVA-5.uasset index cffeb0ee..efd281a3 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/aboutAiv/AboutAIVA-5.uasset and b/Content/Blueprints/UI/WBPS/Imgs/aboutAiv/AboutAIVA-5.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/aboutAiv/AboutAIVA.uasset b/Content/Blueprints/UI/WBPS/Imgs/aboutAiv/AboutAIVA.uasset index 483a9e52..37d1ed5a 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/aboutAiv/AboutAIVA.uasset and b/Content/Blueprints/UI/WBPS/Imgs/aboutAiv/AboutAIVA.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/asdas.uasset b/Content/Blueprints/UI/WBPS/Imgs/asdas.uasset index fa3c91a7..25cc9782 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/asdas.uasset and b/Content/Blueprints/UI/WBPS/Imgs/asdas.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/BadgeBase.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/BadgeBase.uasset new file mode 100644 index 00000000..df7840b9 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/BadgeBase.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Base/default.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Base/default.uasset index 315784a3..dc0295d1 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Base/default.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Base/default.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Base/dis.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Base/dis.uasset new file mode 100644 index 00000000..db705db9 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Base/dis.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Base/hovered.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Base/hovered.uasset index 79ed7092..2c847235 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Base/hovered.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Base/hovered.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Base/pressed.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Base/pressed.uasset index 7afe4222..a0e936d5 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Base/pressed.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Base/pressed.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/3d_rotation.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/3d_rotation.uasset new file mode 100644 index 00000000..f2543e81 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/3d_rotation.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/AIVA.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/AIVA.uasset index 9d8f9317..cc9cf0fc 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/AIVA.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/AIVA.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/NOK.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/NOK.uasset new file mode 100644 index 00000000..08660a76 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/NOK.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/OK.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/OK.uasset index 105326dd..a48742dd 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/OK.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/OK.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/VR.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/VR.uasset index af6652fa..687f349e 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/VR.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/VR.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/VRpano.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/VRpano.uasset index 42ceea0b..12d55379 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/VRpano.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/VRpano.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/apartment.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/apartment.uasset new file mode 100644 index 00000000..2bd81da4 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/apartment.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/api.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/api.uasset new file mode 100644 index 00000000..485e8ef0 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/api.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/back.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/back.uasset index 4b73bd75..0511fe47 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/back.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/back.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/bus.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/bus.uasset new file mode 100644 index 00000000..1d34a6d4 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/bus.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/camera.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/camera.uasset index edb31464..a45f5c16 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/camera.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/camera.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/cancel.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/cancel.uasset index 132d871f..46cfd326 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/cancel.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/cancel.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/chevron_left.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/chevron_left.uasset new file mode 100644 index 00000000..56f3cf77 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/chevron_left.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/chevron_right.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/chevron_right.uasset new file mode 100644 index 00000000..20941e40 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/chevron_right.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/child_friendly.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/child_friendly.uasset new file mode 100644 index 00000000..b58f7040 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/child_friendly.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/close.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/close.uasset index 75750703..7b338029 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/close.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/close.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/close_fullscreen.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/close_fullscreen.uasset new file mode 100644 index 00000000..83bbc3f0 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/close_fullscreen.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/dark.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/dark.uasset new file mode 100644 index 00000000..1e232e22 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/dark.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/email.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/email.uasset index f9694021..e8b16d42 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/email.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/email.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/exit_to_app.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/exit_to_app.uasset index 5c881bd6..d6176c4f 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/exit_to_app.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/exit_to_app.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/expand_less.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/expand_less.uasset new file mode 100644 index 00000000..990fd513 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/expand_less.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/expand_more.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/expand_more.uasset new file mode 100644 index 00000000..1931b9b2 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/expand_more.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/fitness.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/fitness.uasset new file mode 100644 index 00000000..591830fb Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/fitness.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/forward.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/forward.uasset index bfe37502..b0e8a257 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/forward.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/forward.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/forward_1.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/forward_1.uasset new file mode 100644 index 00000000..10f7939d Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/forward_1.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/fuel.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/fuel.uasset new file mode 100644 index 00000000..487c0cca Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/fuel.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/fwd.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/fwd.uasset index 428104e5..12928579 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/fwd.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/fwd.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/help.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/help.uasset index d6fdb21b..7a1f918e 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/help.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/help.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/home.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/home.uasset index 3306ddec..17c90f52 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/home.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/home.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/info.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/info.uasset index 47b5a93f..0c746b9b 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/info.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/info.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/keyboard.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/keyboard.uasset new file mode 100644 index 00000000..fc88f6fa Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/keyboard.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/kid.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/kid.uasset new file mode 100644 index 00000000..f428cee6 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/kid.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/light.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/light.uasset index ffeb5bad..68b389a4 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/light.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/light.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/local_mall.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/local_mall.uasset new file mode 100644 index 00000000..bb942160 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/local_mall.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/location.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/location.uasset index f9f1cf07..5b2fe504 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/location.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/location.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/lock.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/lock.uasset new file mode 100644 index 00000000..89c1ad01 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/lock.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/login.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/login.uasset index 1772445e..d68a832a 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/login.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/login.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/logout.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/logout.uasset new file mode 100644 index 00000000..5e5926cb Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/logout.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/medicine.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/medicine.uasset new file mode 100644 index 00000000..dd510194 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/medicine.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/nature.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/nature.uasset new file mode 100644 index 00000000..e6e459ef Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/nature.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/open_in_full.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/open_in_full.uasset new file mode 100644 index 00000000..737901d2 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/open_in_full.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/options.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/options.uasset new file mode 100644 index 00000000..8667bac7 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/options.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/pause.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/pause.uasset index f8fe906c..e1ec9f9b 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/pause.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/pause.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/phone.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/phone.uasset new file mode 100644 index 00000000..a2df4103 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/phone.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/play.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/play.uasset index 398b3f2c..d71f231d 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/play.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/play.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/plot.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/plot.uasset index 24f89b57..a58f2a3f 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/plot.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/plot.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/print.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/print.uasset index 9843e0d0..00bb8e5e 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/print.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/print.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/reload.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/reload.uasset new file mode 100644 index 00000000..48703c99 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/reload.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/remote.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/remote.uasset new file mode 100644 index 00000000..1a493c3e Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/remote.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/replay.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/replay.uasset new file mode 100644 index 00000000..11c33cc5 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/replay.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/rewind.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/rewind.uasset index 02029361..1a3f4650 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/rewind.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/rewind.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/school.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/school.uasset new file mode 100644 index 00000000..522a6995 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/school.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/search.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/search.uasset index fe70ab8e..c172b950 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/search.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/search.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/settings.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/settings.uasset new file mode 100644 index 00000000..87f861b4 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/settings.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/shopping_cart.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/shopping_cart.uasset new file mode 100644 index 00000000..ff4713b0 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/shopping_cart.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/skate.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/skate.uasset new file mode 100644 index 00000000..0e779ef8 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/skate.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/star.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/star.uasset index 2a38e174..ba36bf46 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/star.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/star.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/star_border.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/star_border.uasset index 99219a28..7a1a5adb 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/star_border.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/star_border.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/stop.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/stop.uasset index 6fe91040..51d289c4 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/stop.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/stop.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/swipe.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/swipe.uasset new file mode 100644 index 00000000..0e67c1de Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/swipe.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/timereset.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/timereset.uasset new file mode 100644 index 00000000..3066e125 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/timereset.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/touch.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/touch.uasset new file mode 100644 index 00000000..ec62f2c2 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/touch.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/tour.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/tour.uasset new file mode 100644 index 00000000..0ce0803c Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/tour.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/up.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/up.uasset new file mode 100644 index 00000000..65bcc51c Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/up.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/user.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/user.uasset new file mode 100644 index 00000000..15553ce8 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/user.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/villa.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/villa.uasset new file mode 100644 index 00000000..7db41bdf Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/villa.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/warning.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/warning.uasset new file mode 100644 index 00000000..ddfac322 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/warning.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/waves.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/waves.uasset new file mode 100644 index 00000000..b2213598 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/waves.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/web.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/web.uasset new file mode 100644 index 00000000..df47e260 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/web.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/zoom_in.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/zoom_in.uasset new file mode 100644 index 00000000..746ae4c9 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/zoom_in.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/Icons/zoom_out.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/zoom_out.uasset new file mode 100644 index 00000000..03e56d3b Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/Icons/zoom_out.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/divider.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/divider.uasset index bf120e11..db4bf8ad 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/button/divider.uasset and b/Content/Blueprints/UI/WBPS/Imgs/button/divider.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/slideBG.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/slideBG.uasset new file mode 100644 index 00000000..00da5d05 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/slideBG.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/button/slidebgg.uasset b/Content/Blueprints/UI/WBPS/Imgs/button/slidebgg.uasset new file mode 100644 index 00000000..0784c7f3 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/button/slidebgg.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/card.uasset b/Content/Blueprints/UI/WBPS/Imgs/card.uasset new file mode 100644 index 00000000..5fede3ac Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/card.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/checkbox/Base.uasset b/Content/Blueprints/UI/WBPS/Imgs/checkbox/Base.uasset new file mode 100644 index 00000000..a50b5951 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/checkbox/Base.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/checkbox/Pin.uasset b/Content/Blueprints/UI/WBPS/Imgs/checkbox/Pin.uasset new file mode 100644 index 00000000..d581c998 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/checkbox/Pin.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/filterbig.uasset b/Content/Blueprints/UI/WBPS/Imgs/filterbig.uasset new file mode 100644 index 00000000..64f83d51 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/filterbig.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A0.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A0.uasset new file mode 100644 index 00000000..f7a60420 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A0.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A1.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A1.uasset new file mode 100644 index 00000000..4ae3f084 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A1.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A10.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A10.uasset new file mode 100644 index 00000000..222b1b94 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A10.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A11.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A11.uasset new file mode 100644 index 00000000..18a3bdc8 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A11.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A2.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A2.uasset new file mode 100644 index 00000000..f23b20c7 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A2.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A3.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A3.uasset new file mode 100644 index 00000000..1a3d259d Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A3.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A4.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A4.uasset new file mode 100644 index 00000000..7c01e673 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A4.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A5.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A5.uasset new file mode 100644 index 00000000..8a4a6c5f Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A5.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A6.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A6.uasset new file mode 100644 index 00000000..ede58d54 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A6.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A7.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A7.uasset new file mode 100644 index 00000000..d85f74a6 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A7.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A8.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A8.uasset new file mode 100644 index 00000000..45ad2b3d Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A8.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A9.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A9.uasset new file mode 100644 index 00000000..6dd5ee2e Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H1_A9.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A0.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A0.uasset new file mode 100644 index 00000000..988bbeff Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A0.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A1.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A1.uasset new file mode 100644 index 00000000..a3f5f2d0 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A1.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A10.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A10.uasset new file mode 100644 index 00000000..44a9742b Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A10.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A11.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A11.uasset new file mode 100644 index 00000000..c2158415 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A11.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A12.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A12.uasset new file mode 100644 index 00000000..03e93977 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A12.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A13.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A13.uasset new file mode 100644 index 00000000..b46bcc08 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A13.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A2.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A2.uasset new file mode 100644 index 00000000..1c568244 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A2.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A3.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A3.uasset new file mode 100644 index 00000000..14e4aa2b Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A3.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A4.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A4.uasset new file mode 100644 index 00000000..903414dc Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A4.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A5.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A5.uasset new file mode 100644 index 00000000..1e487280 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A5.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A6.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A6.uasset new file mode 100644 index 00000000..78c6050a Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A6.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A7.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A7.uasset new file mode 100644 index 00000000..ebb8d5de Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A7.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A8.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A8.uasset new file mode 100644 index 00000000..dfe2747a Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A8.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A9.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A9.uasset new file mode 100644 index 00000000..333273a9 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H2_A9.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H3_A0.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H3_A0.uasset new file mode 100644 index 00000000..5daa47d5 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H3_A0.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H3_A1.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H3_A1.uasset new file mode 100644 index 00000000..b169f2b5 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H3_A1.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H3_A2.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H3_A2.uasset new file mode 100644 index 00000000..65761a01 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H3_A2.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H3_A3.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H3_A3.uasset new file mode 100644 index 00000000..e248a71c Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H3_A3.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H3_A4.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H3_A4.uasset new file mode 100644 index 00000000..abc1b35d Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H3_A4.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H3_A5.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H3_A5.uasset new file mode 100644 index 00000000..bee44259 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H3_A5.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H3_A6.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H3_A6.uasset new file mode 100644 index 00000000..f2f3de3b Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H3_A6.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H3_A7.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H3_A7.uasset new file mode 100644 index 00000000..c29f0693 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H3_A7.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A0.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A0.uasset new file mode 100644 index 00000000..cfcd5d7c Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A0.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A1.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A1.uasset new file mode 100644 index 00000000..f11d4cf1 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A1.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A2.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A2.uasset new file mode 100644 index 00000000..0967e21f Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A2.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A3.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A3.uasset new file mode 100644 index 00000000..423cc7b6 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A3.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A4.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A4.uasset new file mode 100644 index 00000000..86bf7af3 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A4.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A5.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A5.uasset new file mode 100644 index 00000000..339c8a53 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A5.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A6.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A6.uasset new file mode 100644 index 00000000..a5d029ee Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A6.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A7.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A7.uasset new file mode 100644 index 00000000..60f3b371 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A7.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A8.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A8.uasset new file mode 100644 index 00000000..8644c3a5 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H4_A8.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A0.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A0.uasset new file mode 100644 index 00000000..29a2da8a Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A0.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A1.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A1.uasset new file mode 100644 index 00000000..833ad3a5 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A1.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A2.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A2.uasset new file mode 100644 index 00000000..77aeabc7 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A2.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A3.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A3.uasset new file mode 100644 index 00000000..478cf363 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A3.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A4.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A4.uasset new file mode 100644 index 00000000..534a0077 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A4.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A5.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A5.uasset new file mode 100644 index 00000000..65b47d2a Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A5.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A6.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A6.uasset new file mode 100644 index 00000000..ddf5785e Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A6.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A7.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A7.uasset new file mode 100644 index 00000000..9f6ff2eb Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A7.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A8.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A8.uasset new file mode 100644 index 00000000..ac403998 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A8.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A9.uasset b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A9.uasset new file mode 100644 index 00000000..a179b16b Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/flatPlans/GP4_H5_A9.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_1_f1.uasset b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_1_f1.uasset new file mode 100644 index 00000000..1bf7ba4b Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_1_f1.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_1_f12.uasset b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_1_f12.uasset new file mode 100644 index 00000000..ba21ef25 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_1_f12.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_1_f2.uasset b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_1_f2.uasset new file mode 100644 index 00000000..3776f1d3 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_1_f2.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_1_f3_10.uasset b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_1_f3_10.uasset new file mode 100644 index 00000000..66359ffa Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_1_f3_10.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_2_f1.uasset b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_2_f1.uasset new file mode 100644 index 00000000..6e0f6697 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_2_f1.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_2_f14.uasset b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_2_f14.uasset new file mode 100644 index 00000000..37186bf4 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_2_f14.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_2_f2.uasset b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_2_f2.uasset new file mode 100644 index 00000000..73080815 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_2_f2.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_2_f3_13.uasset b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_2_f3_13.uasset new file mode 100644 index 00000000..8ef8904e Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_2_f3_13.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_3_f1.uasset b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_3_f1.uasset new file mode 100644 index 00000000..06841926 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_3_f1.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_3_f16_24.uasset b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_3_f16_24.uasset new file mode 100644 index 00000000..6bc53c8c Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_3_f16_24.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_3_f2.uasset b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_3_f2.uasset new file mode 100644 index 00000000..fe21495c Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_3_f2.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_3_f3_15.uasset b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_3_f3_15.uasset new file mode 100644 index 00000000..31059616 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_3_f3_15.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_4_f1.uasset b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_4_f1.uasset new file mode 100644 index 00000000..03bd6876 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_4_f1.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_4_f2.uasset b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_4_f2.uasset new file mode 100644 index 00000000..8aced756 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_4_f2.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_4_f3_18.uasset b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_4_f3_18.uasset new file mode 100644 index 00000000..c63cfc41 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_4_f3_18.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_5_f1.uasset b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_5_f1.uasset new file mode 100644 index 00000000..7c358c4b Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_5_f1.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_5_f2.uasset b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_5_f2.uasset new file mode 100644 index 00000000..c011488e Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_5_f2.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_5_f3_8.uasset b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_5_f3_8.uasset new file mode 100644 index 00000000..16c87eb3 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_5_f3_8.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_5_f9.uasset b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_5_f9.uasset new file mode 100644 index 00000000..ca4b04b7 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/GP4_5_f9.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/floorPlans/Gp4_1_f11.uasset b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/Gp4_1_f11.uasset new file mode 100644 index 00000000..f1105c67 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/floorPlans/Gp4_1_f11.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/input/AutoLogout.uasset b/Content/Blueprints/UI/WBPS/Imgs/input/AutoLogout.uasset index b458992c..64f71ae9 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/input/AutoLogout.uasset and b/Content/Blueprints/UI/WBPS/Imgs/input/AutoLogout.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/input/AutoLogout1.uasset b/Content/Blueprints/UI/WBPS/Imgs/input/AutoLogout1.uasset new file mode 100644 index 00000000..3d1a0d91 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/input/AutoLogout1.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/input/EndSession.uasset b/Content/Blueprints/UI/WBPS/Imgs/input/EndSession.uasset index 49f1b73f..3c51041a 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/input/EndSession.uasset and b/Content/Blueprints/UI/WBPS/Imgs/input/EndSession.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/input/EndSessionbg.uasset b/Content/Blueprints/UI/WBPS/Imgs/input/EndSessionbg.uasset index 93ef90dc..676a7540 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/input/EndSessionbg.uasset and b/Content/Blueprints/UI/WBPS/Imgs/input/EndSessionbg.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/input/List.uasset b/Content/Blueprints/UI/WBPS/Imgs/input/List.uasset new file mode 100644 index 00000000..dddd99df Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/input/List.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/input/StartSession_01.uasset b/Content/Blueprints/UI/WBPS/Imgs/input/StartSession_01.uasset index 81ccf8fc..d0ad4f29 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/input/StartSession_01.uasset and b/Content/Blueprints/UI/WBPS/Imgs/input/StartSession_01.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/input/StartSession_02.uasset b/Content/Blueprints/UI/WBPS/Imgs/input/StartSession_02.uasset index bce17903..2f3feeab 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/input/StartSession_02.uasset and b/Content/Blueprints/UI/WBPS/Imgs/input/StartSession_02.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/input/StartSession_02bg.uasset b/Content/Blueprints/UI/WBPS/Imgs/input/StartSession_02bg.uasset index 6bef61d6..42129b39 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/input/StartSession_02bg.uasset and b/Content/Blueprints/UI/WBPS/Imgs/input/StartSession_02bg.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/input/StartSession_Success.uasset b/Content/Blueprints/UI/WBPS/Imgs/input/StartSession_Success.uasset index aeee0e98..7a5ffbaa 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/input/StartSession_Success.uasset and b/Content/Blueprints/UI/WBPS/Imgs/input/StartSession_Success.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/input/StartSession_Success_bg.uasset b/Content/Blueprints/UI/WBPS/Imgs/input/StartSession_Success_bg.uasset index 51994f97..5bf55f8e 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/input/StartSession_Success_bg.uasset and b/Content/Blueprints/UI/WBPS/Imgs/input/StartSession_Success_bg.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/input/noconnect.uasset b/Content/Blueprints/UI/WBPS/Imgs/input/noconnect.uasset new file mode 100644 index 00000000..0d1848ca Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/input/noconnect.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/input/saveData.uasset b/Content/Blueprints/UI/WBPS/Imgs/input/saveData.uasset index cad65df0..05a6cadf 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/input/saveData.uasset and b/Content/Blueprints/UI/WBPS/Imgs/input/saveData.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/input/saveDatabg.uasset b/Content/Blueprints/UI/WBPS/Imgs/input/saveDatabg.uasset index b8db7302..19638211 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/input/saveDatabg.uasset and b/Content/Blueprints/UI/WBPS/Imgs/input/saveDatabg.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/input/scroll.uasset b/Content/Blueprints/UI/WBPS/Imgs/input/scroll.uasset new file mode 100644 index 00000000..94e93e46 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/input/scroll.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/input/scroll1.uasset b/Content/Blueprints/UI/WBPS/Imgs/input/scroll1.uasset new file mode 100644 index 00000000..c25f832a Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/input/scroll1.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/input/startSession_03.uasset b/Content/Blueprints/UI/WBPS/Imgs/input/startSession_03.uasset index 8ac1450f..beb37209 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/input/startSession_03.uasset and b/Content/Blueprints/UI/WBPS/Imgs/input/startSession_03.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/input/startSession_03bg.uasset b/Content/Blueprints/UI/WBPS/Imgs/input/startSession_03bg.uasset index 8a2dbf4a..8c041fb1 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/input/startSession_03bg.uasset and b/Content/Blueprints/UI/WBPS/Imgs/input/startSession_03bg.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/input/wait.uasset b/Content/Blueprints/UI/WBPS/Imgs/input/wait.uasset new file mode 100644 index 00000000..a4407fd5 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/input/wait.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/keyboard/EN.uasset b/Content/Blueprints/UI/WBPS/Imgs/keyboard/EN.uasset new file mode 100644 index 00000000..a01e52bc Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/keyboard/EN.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/keyboard/Keyboard_enter_RU.uasset b/Content/Blueprints/UI/WBPS/Imgs/keyboard/Keyboard_enter_RU.uasset new file mode 100644 index 00000000..22a1e3ca Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/keyboard/Keyboard_enter_RU.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/keyboard/Numpad.uasset b/Content/Blueprints/UI/WBPS/Imgs/keyboard/Numpad.uasset new file mode 100644 index 00000000..4022c3f4 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/keyboard/Numpad.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/keyboard/RU.uasset b/Content/Blueprints/UI/WBPS/Imgs/keyboard/RU.uasset new file mode 100644 index 00000000..14e9d3df Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/keyboard/RU.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/keyboard/keybbb.uasset b/Content/Blueprints/UI/WBPS/Imgs/keyboard/keybbb.uasset new file mode 100644 index 00000000..6a5f3272 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/keyboard/keybbb.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/keyboard/keyboard_button_EN.uasset b/Content/Blueprints/UI/WBPS/Imgs/keyboard/keyboard_button_EN.uasset new file mode 100644 index 00000000..da3b718c Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/keyboard/keyboard_button_EN.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/list.uasset b/Content/Blueprints/UI/WBPS/Imgs/list.uasset new file mode 100644 index 00000000..96893bdb Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/list.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menu/AdvancedFilter.uasset b/Content/Blueprints/UI/WBPS/Imgs/menu/AdvancedFilter.uasset new file mode 100644 index 00000000..275abef8 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menu/AdvancedFilter.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menu/Compass.uasset b/Content/Blueprints/UI/WBPS/Imgs/menu/Compass.uasset index 849e83f4..082b8bb8 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/menu/Compass.uasset and b/Content/Blueprints/UI/WBPS/Imgs/menu/Compass.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menu/Divider.uasset b/Content/Blueprints/UI/WBPS/Imgs/menu/Divider.uasset index 91bd4c2a..32a2e12e 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/menu/Divider.uasset and b/Content/Blueprints/UI/WBPS/Imgs/menu/Divider.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menu/Divider1.uasset b/Content/Blueprints/UI/WBPS/Imgs/menu/Divider1.uasset new file mode 100644 index 00000000..be5d3d1e Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menu/Divider1.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menu/Left.uasset b/Content/Blueprints/UI/WBPS/Imgs/menu/Left.uasset new file mode 100644 index 00000000..4ef181a5 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menu/Left.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menu/Logo.uasset b/Content/Blueprints/UI/WBPS/Imgs/menu/Logo.uasset new file mode 100644 index 00000000..8fa6e6e5 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menu/Logo.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menu/Right.uasset b/Content/Blueprints/UI/WBPS/Imgs/menu/Right.uasset new file mode 100644 index 00000000..d2322df9 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menu/Right.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menu/SADASD.uasset b/Content/Blueprints/UI/WBPS/Imgs/menu/SADASD.uasset index ec4c7ddb..0d204321 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/menu/SADASD.uasset and b/Content/Blueprints/UI/WBPS/Imgs/menu/SADASD.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menu/SnackbarBase.uasset b/Content/Blueprints/UI/WBPS/Imgs/menu/SnackbarBase.uasset new file mode 100644 index 00000000..1bca5232 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menu/SnackbarBase.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menu/Submenu.uasset b/Content/Blueprints/UI/WBPS/Imgs/menu/Submenu.uasset index 289ba3ab..0dfbcbc8 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/menu/Submenu.uasset and b/Content/Blueprints/UI/WBPS/Imgs/menu/Submenu.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menu/Submenubg.uasset b/Content/Blueprints/UI/WBPS/Imgs/menu/Submenubg.uasset new file mode 100644 index 00000000..4ba85782 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menu/Submenubg.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menu/YourLocationBorderBase.uasset b/Content/Blueprints/UI/WBPS/Imgs/menu/YourLocationBorderBase.uasset new file mode 100644 index 00000000..c2b26ed0 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menu/YourLocationBorderBase.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menu/bgLined.uasset b/Content/Blueprints/UI/WBPS/Imgs/menu/bgLined.uasset index 16309654..d7d89335 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/menu/bgLined.uasset and b/Content/Blueprints/UI/WBPS/Imgs/menu/bgLined.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menu/border2px.uasset b/Content/Blueprints/UI/WBPS/Imgs/menu/border2px.uasset index f45a7c49..c0d9196a 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/menu/border2px.uasset and b/Content/Blueprints/UI/WBPS/Imgs/menu/border2px.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menu/filter.uasset b/Content/Blueprints/UI/WBPS/Imgs/menu/filter.uasset new file mode 100644 index 00000000..3a21bc46 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menu/filter.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menu/halfLine.uasset b/Content/Blueprints/UI/WBPS/Imgs/menu/halfLine.uasset index 6cb5935a..b473ae14 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/menu/halfLine.uasset and b/Content/Blueprints/UI/WBPS/Imgs/menu/halfLine.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menu/line1.uasset b/Content/Blueprints/UI/WBPS/Imgs/menu/line1.uasset new file mode 100644 index 00000000..246b15db Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menu/line1.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menu/line11.uasset b/Content/Blueprints/UI/WBPS/Imgs/menu/line11.uasset new file mode 100644 index 00000000..3c3afbf3 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menu/line11.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menu/line2.uasset b/Content/Blueprints/UI/WBPS/Imgs/menu/line2.uasset new file mode 100644 index 00000000..216199e1 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menu/line2.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menu/line22.uasset b/Content/Blueprints/UI/WBPS/Imgs/menu/line22.uasset new file mode 100644 index 00000000..9a7a4c86 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menu/line22.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menu/logo1.uasset b/Content/Blueprints/UI/WBPS/Imgs/menu/logo1.uasset new file mode 100644 index 00000000..21286a71 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menu/logo1.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menu/notFoundCard.uasset b/Content/Blueprints/UI/WBPS/Imgs/menu/notFoundCard.uasset new file mode 100644 index 00000000..708fe3fc Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menu/notFoundCard.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menu/podbor.uasset b/Content/Blueprints/UI/WBPS/Imgs/menu/podbor.uasset index c2af56ce..ad745be9 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/menu/podbor.uasset and b/Content/Blueprints/UI/WBPS/Imgs/menu/podbor.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menu/sliderThumb.uasset b/Content/Blueprints/UI/WBPS/Imgs/menu/sliderThumb.uasset new file mode 100644 index 00000000..1b489378 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menu/sliderThumb.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menuVR/Button1.uasset b/Content/Blueprints/UI/WBPS/Imgs/menuVR/Button1.uasset new file mode 100644 index 00000000..9079f4e4 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menuVR/Button1.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menuVR/Button2.uasset b/Content/Blueprints/UI/WBPS/Imgs/menuVR/Button2.uasset new file mode 100644 index 00000000..11d1df5f Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menuVR/Button2.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menuVR/GP4PlotVR.uasset b/Content/Blueprints/UI/WBPS/Imgs/menuVR/GP4PlotVR.uasset new file mode 100644 index 00000000..ee85e933 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menuVR/GP4PlotVR.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menuVR/HousePoint.uasset b/Content/Blueprints/UI/WBPS/Imgs/menuVR/HousePoint.uasset new file mode 100644 index 00000000..4a87bd75 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menuVR/HousePoint.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menuVR/MapPinVRMap.uasset b/Content/Blueprints/UI/WBPS/Imgs/menuVR/MapPinVRMap.uasset new file mode 100644 index 00000000..3b4c75ff Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menuVR/MapPinVRMap.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menuVR/PinVRMap_default.uasset b/Content/Blueprints/UI/WBPS/Imgs/menuVR/PinVRMap_default.uasset new file mode 100644 index 00000000..7fb60d30 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menuVR/PinVRMap_default.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menuVR/PinVRMap_hovered.uasset b/Content/Blueprints/UI/WBPS/Imgs/menuVR/PinVRMap_hovered.uasset new file mode 100644 index 00000000..3e6631ce Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menuVR/PinVRMap_hovered.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menuVR/StrokeMenuVR__2_.uasset b/Content/Blueprints/UI/WBPS/Imgs/menuVR/StrokeMenuVR__2_.uasset new file mode 100644 index 00000000..ea226f13 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menuVR/StrokeMenuVR__2_.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menuVR/VrApartmentInfoPin.uasset b/Content/Blueprints/UI/WBPS/Imgs/menuVR/VrApartmentInfoPin.uasset new file mode 100644 index 00000000..d8b73000 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menuVR/VrApartmentInfoPin.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menuVR/VrApartmentInfoPin1.uasset b/Content/Blueprints/UI/WBPS/Imgs/menuVR/VrApartmentInfoPin1.uasset new file mode 100644 index 00000000..0e631af2 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menuVR/VrApartmentInfoPin1.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menuVR/bg2.uasset b/Content/Blueprints/UI/WBPS/Imgs/menuVR/bg2.uasset new file mode 100644 index 00000000..8bcf090a Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menuVR/bg2.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menuVR/bgcard.uasset b/Content/Blueprints/UI/WBPS/Imgs/menuVR/bgcard.uasset new file mode 100644 index 00000000..02d741a6 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menuVR/bgcard.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menuVR/endVR.uasset b/Content/Blueprints/UI/WBPS/Imgs/menuVR/endVR.uasset new file mode 100644 index 00000000..499ae137 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menuVR/endVR.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menuVR/padArrow.uasset b/Content/Blueprints/UI/WBPS/Imgs/menuVR/padArrow.uasset new file mode 100644 index 00000000..e66fd841 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menuVR/padArrow.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menuVR/padInfo.uasset b/Content/Blueprints/UI/WBPS/Imgs/menuVR/padInfo.uasset new file mode 100644 index 00000000..bd964a61 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menuVR/padInfo.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/menuVR/stageSelect.uasset b/Content/Blueprints/UI/WBPS/Imgs/menuVR/stageSelect.uasset new file mode 100644 index 00000000..2cc5e95a Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/menuVR/stageSelect.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/settings.uasset b/Content/Blueprints/UI/WBPS/Imgs/settings.uasset new file mode 100644 index 00000000..1ffd4906 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/settings.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/settingsBg.uasset b/Content/Blueprints/UI/WBPS/Imgs/settingsBg.uasset new file mode 100644 index 00000000..d2d5e75d Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Imgs/settingsBg.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Imgs/white.uasset b/Content/Blueprints/UI/WBPS/Imgs/white.uasset index 3295a06f..101fa9c0 100644 Binary files a/Content/Blueprints/UI/WBPS/Imgs/white.uasset and b/Content/Blueprints/UI/WBPS/Imgs/white.uasset differ diff --git a/Content/Blueprints/UI/WBPS/KPWidget.uasset b/Content/Blueprints/UI/WBPS/KPWidget.uasset index e69c9447..f231dc1d 100644 Binary files a/Content/Blueprints/UI/WBPS/KPWidget.uasset and b/Content/Blueprints/UI/WBPS/KPWidget.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Loading.uasset b/Content/Blueprints/UI/WBPS/Loading.uasset index 5853cac1..2b046699 100644 Binary files a/Content/Blueprints/UI/WBPS/Loading.uasset and b/Content/Blueprints/UI/WBPS/Loading.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Menu/Compas.uasset b/Content/Blueprints/UI/WBPS/Menu/Compas.uasset index 9b768056..95768841 100644 Binary files a/Content/Blueprints/UI/WBPS/Menu/Compas.uasset and b/Content/Blueprints/UI/WBPS/Menu/Compas.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Menu/MainMenu.uasset b/Content/Blueprints/UI/WBPS/Menu/MainMenu.uasset index 03ae992f..7a884d63 100644 Binary files a/Content/Blueprints/UI/WBPS/Menu/MainMenu.uasset and b/Content/Blueprints/UI/WBPS/Menu/MainMenu.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Menu/MenuBtn.uasset b/Content/Blueprints/UI/WBPS/Menu/MenuBtn.uasset index aa1f9870..7a1c95f9 100644 Binary files a/Content/Blueprints/UI/WBPS/Menu/MenuBtn.uasset and b/Content/Blueprints/UI/WBPS/Menu/MenuBtn.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Menu/aboutIvaz.uasset b/Content/Blueprints/UI/WBPS/Menu/aboutIvaz.uasset new file mode 100644 index 00000000..404b50f0 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Menu/aboutIvaz.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Menu/aboutUs.uasset b/Content/Blueprints/UI/WBPS/Menu/aboutUs.uasset new file mode 100644 index 00000000..37f6b31d Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Menu/aboutUs.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Menu/aboutZastr.uasset b/Content/Blueprints/UI/WBPS/Menu/aboutZastr.uasset new file mode 100644 index 00000000..2df498b5 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Menu/aboutZastr.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Menu/blueLine.uasset b/Content/Blueprints/UI/WBPS/Menu/blueLine.uasset new file mode 100644 index 00000000..5f5e0c63 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Menu/blueLine.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Menu/byeWindow.uasset b/Content/Blueprints/UI/WBPS/Menu/byeWindow.uasset index cfe11ede..aaf2dd70 100644 Binary files a/Content/Blueprints/UI/WBPS/Menu/byeWindow.uasset and b/Content/Blueprints/UI/WBPS/Menu/byeWindow.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Menu/flatScheme.uasset b/Content/Blueprints/UI/WBPS/Menu/flatScheme.uasset new file mode 100644 index 00000000..1e59086f Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Menu/flatScheme.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Menu/helpWindow.uasset b/Content/Blueprints/UI/WBPS/Menu/helpWindow.uasset new file mode 100644 index 00000000..47161603 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Menu/helpWindow.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Menu/infraCylinder.uasset b/Content/Blueprints/UI/WBPS/Menu/infraCylinder.uasset new file mode 100644 index 00000000..7f162cb6 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Menu/infraCylinder.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Menu/inputBox.uasset b/Content/Blueprints/UI/WBPS/Menu/inputBox.uasset index 45037891..4a37ec91 100644 Binary files a/Content/Blueprints/UI/WBPS/Menu/inputBox.uasset and b/Content/Blueprints/UI/WBPS/Menu/inputBox.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Menu/keyboard.uasset b/Content/Blueprints/UI/WBPS/Menu/keyboard.uasset new file mode 100644 index 00000000..a7ac3763 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Menu/keyboard.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Menu/keyboardBtn.uasset b/Content/Blueprints/UI/WBPS/Menu/keyboardBtn.uasset new file mode 100644 index 00000000..27b76ac6 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Menu/keyboardBtn.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Menu/lift3dPanel.uasset b/Content/Blueprints/UI/WBPS/Menu/lift3dPanel.uasset new file mode 100644 index 00000000..3a3eab43 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Menu/lift3dPanel.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Menu/managerList.uasset b/Content/Blueprints/UI/WBPS/Menu/managerList.uasset new file mode 100644 index 00000000..db075b21 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Menu/managerList.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Menu/menuSecondLine.uasset b/Content/Blueprints/UI/WBPS/Menu/menuSecondLine.uasset index f073b64e..55bfb3f1 100644 Binary files a/Content/Blueprints/UI/WBPS/Menu/menuSecondLine.uasset and b/Content/Blueprints/UI/WBPS/Menu/menuSecondLine.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Menu/saveData.uasset b/Content/Blueprints/UI/WBPS/Menu/saveData.uasset index 594f1a29..71d8b43f 100644 Binary files a/Content/Blueprints/UI/WBPS/Menu/saveData.uasset and b/Content/Blueprints/UI/WBPS/Menu/saveData.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Menu/sessionEnd.uasset b/Content/Blueprints/UI/WBPS/Menu/sessionEnd.uasset index abd27355..d695988e 100644 Binary files a/Content/Blueprints/UI/WBPS/Menu/sessionEnd.uasset and b/Content/Blueprints/UI/WBPS/Menu/sessionEnd.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Menu/settings.uasset b/Content/Blueprints/UI/WBPS/Menu/settings.uasset new file mode 100644 index 00000000..b2c92eaf Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Menu/settings.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Menu/slider.uasset b/Content/Blueprints/UI/WBPS/Menu/slider.uasset new file mode 100644 index 00000000..9de29732 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Menu/slider.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Menu/welcomeData.uasset b/Content/Blueprints/UI/WBPS/Menu/welcomeData.uasset index 96a7ebdc..07310289 100644 Binary files a/Content/Blueprints/UI/WBPS/Menu/welcomeData.uasset and b/Content/Blueprints/UI/WBPS/Menu/welcomeData.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Menu/welcomeWinManager.uasset b/Content/Blueprints/UI/WBPS/Menu/welcomeWinManager.uasset index ebbdbd78..aa5fd4db 100644 Binary files a/Content/Blueprints/UI/WBPS/Menu/welcomeWinManager.uasset and b/Content/Blueprints/UI/WBPS/Menu/welcomeWinManager.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Pointers/FlatPointer.uasset b/Content/Blueprints/UI/WBPS/Pointers/FlatPointer.uasset index 2954891d..c5352ae4 100644 Binary files a/Content/Blueprints/UI/WBPS/Pointers/FlatPointer.uasset and b/Content/Blueprints/UI/WBPS/Pointers/FlatPointer.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Pointers/FloorPointer.uasset b/Content/Blueprints/UI/WBPS/Pointers/FloorPointer.uasset new file mode 100644 index 00000000..c29e0d09 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Pointers/FloorPointer.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Pointers/InfraPointer.uasset b/Content/Blueprints/UI/WBPS/Pointers/InfraPointer.uasset index 8cb5c46a..f74d2a66 100644 Binary files a/Content/Blueprints/UI/WBPS/Pointers/InfraPointer.uasset and b/Content/Blueprints/UI/WBPS/Pointers/InfraPointer.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Pointers/fantomMapPointer.uasset b/Content/Blueprints/UI/WBPS/Pointers/fantomMapPointer.uasset new file mode 100644 index 00000000..aecf667c Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Pointers/fantomMapPointer.uasset differ diff --git a/Content/Blueprints/UI/WBPS/Pointers/farPointer.uasset b/Content/Blueprints/UI/WBPS/Pointers/farPointer.uasset new file mode 100644 index 00000000..ec187597 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/Pointers/farPointer.uasset differ diff --git a/Content/Blueprints/UI/WBPS/StreetName.uasset b/Content/Blueprints/UI/WBPS/StreetName.uasset index 6e243c07..36704979 100644 Binary files a/Content/Blueprints/UI/WBPS/StreetName.uasset and b/Content/Blueprints/UI/WBPS/StreetName.uasset differ diff --git a/Content/Blueprints/UI/WBPS/VR/flatCardVR.uasset b/Content/Blueprints/UI/WBPS/VR/flatCardVR.uasset new file mode 100644 index 00000000..6da48549 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/VR/flatCardVR.uasset differ diff --git a/Content/Blueprints/UI/WBPS/VR/flatPointVR.uasset b/Content/Blueprints/UI/WBPS/VR/flatPointVR.uasset new file mode 100644 index 00000000..3e59e346 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/VR/flatPointVR.uasset differ diff --git a/Content/Blueprints/UI/WBPS/VR/floorSelectBtn.uasset b/Content/Blueprints/UI/WBPS/VR/floorSelectBtn.uasset new file mode 100644 index 00000000..1f0a9db5 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/VR/floorSelectBtn.uasset differ diff --git a/Content/Blueprints/UI/WBPS/VR/menuVR.uasset b/Content/Blueprints/UI/WBPS/VR/menuVR.uasset new file mode 100644 index 00000000..f982664b Binary files /dev/null and b/Content/Blueprints/UI/WBPS/VR/menuVR.uasset differ diff --git a/Content/Blueprints/UI/WBPS/blueChbox.uasset b/Content/Blueprints/UI/WBPS/blueChbox.uasset new file mode 100644 index 00000000..718557d3 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/blueChbox.uasset differ diff --git a/Content/Blueprints/UI/WBPS/filter/2sidedSlider.uasset b/Content/Blueprints/UI/WBPS/filter/2sidedSlider.uasset index 18559518..20ef2d17 100644 Binary files a/Content/Blueprints/UI/WBPS/filter/2sidedSlider.uasset and b/Content/Blueprints/UI/WBPS/filter/2sidedSlider.uasset differ diff --git a/Content/Blueprints/UI/WBPS/filter/Filter.uasset b/Content/Blueprints/UI/WBPS/filter/Filter.uasset index 4d1199a6..5886857a 100644 Binary files a/Content/Blueprints/UI/WBPS/filter/Filter.uasset and b/Content/Blueprints/UI/WBPS/filter/Filter.uasset differ diff --git a/Content/Blueprints/UI/WBPS/filter/FlatCard.uasset b/Content/Blueprints/UI/WBPS/filter/FlatCard.uasset index fd86377b..d1b2a0f2 100644 Binary files a/Content/Blueprints/UI/WBPS/filter/FlatCard.uasset and b/Content/Blueprints/UI/WBPS/filter/FlatCard.uasset differ diff --git a/Content/Blueprints/UI/WBPS/filter/Tag.uasset b/Content/Blueprints/UI/WBPS/filter/Tag.uasset index 5a092f5a..42b5567f 100644 Binary files a/Content/Blueprints/UI/WBPS/filter/Tag.uasset and b/Content/Blueprints/UI/WBPS/filter/Tag.uasset differ diff --git a/Content/Blueprints/UI/WBPS/filter/emptyCard.uasset b/Content/Blueprints/UI/WBPS/filter/emptyCard.uasset new file mode 100644 index 00000000..4ad07bc8 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/filter/emptyCard.uasset differ diff --git a/Content/Blueprints/UI/WBPS/filter/floorMap.uasset b/Content/Blueprints/UI/WBPS/filter/floorMap.uasset new file mode 100644 index 00000000..ad1ab4c6 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/filter/floorMap.uasset differ diff --git a/Content/Blueprints/UI/WBPS/filter/list.uasset b/Content/Blueprints/UI/WBPS/filter/list.uasset new file mode 100644 index 00000000..11a41138 Binary files /dev/null and b/Content/Blueprints/UI/WBPS/filter/list.uasset differ diff --git a/Content/Blueprints/Utils/BP_BuildingProcedural.uasset b/Content/Blueprints/Utils/BP_BuildingProcedural.uasset index 8caf65d6..2b266169 100644 Binary files a/Content/Blueprints/Utils/BP_BuildingProcedural.uasset and b/Content/Blueprints/Utils/BP_BuildingProcedural.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/BearBT.uasset b/Content/Blueprints/Utils/Generators/HumanAI/BearBT.uasset new file mode 100644 index 00000000..881f8aa6 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/BearBT.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/clearOtherGuy.uasset b/Content/Blueprints/Utils/Generators/HumanAI/clearOtherGuy.uasset new file mode 100644 index 00000000..ec3ea335 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/clearOtherGuy.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/clearSitPlace.uasset b/Content/Blueprints/Utils/Generators/HumanAI/clearSitPlace.uasset new file mode 100644 index 00000000..f19f630d Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/clearSitPlace.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/deceleration.uasset b/Content/Blueprints/Utils/Generators/HumanAI/deceleration.uasset new file mode 100644 index 00000000..30ed72fc Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/deceleration.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/dialogues/joke.uasset b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/joke.uasset new file mode 100644 index 00000000..59fa0230 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/joke.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/dialogues/joke_stalker_15.uasset b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/joke_stalker_15.uasset new file mode 100644 index 00000000..1954350c Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/joke_stalker_15.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/dialogues/joke_stalker_17.uasset b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/joke_stalker_17.uasset new file mode 100644 index 00000000..740411eb Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/joke_stalker_17.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/dialogues/joke_stalker_22.uasset b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/joke_stalker_22.uasset new file mode 100644 index 00000000..1c10088a Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/joke_stalker_22.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/dialogues/reaction.uasset b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/reaction.uasset new file mode 100644 index 00000000..fb36d416 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/reaction.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/dialogues/stalker_laughter_2.uasset b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/stalker_laughter_2.uasset new file mode 100644 index 00000000..4024789e Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/stalker_laughter_2.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/dialogues/stalker_laughter_3.uasset b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/stalker_laughter_3.uasset new file mode 100644 index 00000000..17d55dbb Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/stalker_laughter_3.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/dialogues/stalker_panic_monster_2.uasset b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/stalker_panic_monster_2.uasset new file mode 100644 index 00000000..d4785232 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/stalker_panic_monster_2.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/dialogues/stalker_panic_monster_3.uasset b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/stalker_panic_monster_3.uasset new file mode 100644 index 00000000..edc7f1bf Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/stalker_panic_monster_3.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/dialogues/stalker_reaction_joke_2.uasset b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/stalker_reaction_joke_2.uasset new file mode 100644 index 00000000..eadf708d Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/stalker_reaction_joke_2.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/dialogues/stalker_reaction_joke_3.uasset b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/stalker_reaction_joke_3.uasset new file mode 100644 index 00000000..96e98bd5 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/stalker_reaction_joke_3.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/dialogues/uottakuot.uasset b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/uottakuot.uasset new file mode 100644 index 00000000..b95b956f Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/uottakuot.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/dialogues/uottakuot_1.uasset b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/uottakuot_1.uasset new file mode 100644 index 00000000..11b9534a Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/uottakuot_1.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/dialogues/uottakuot_2.uasset b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/uottakuot_2.uasset new file mode 100644 index 00000000..5737ab05 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/uottakuot_2.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/dialogues/uottakuot_3.uasset b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/uottakuot_3.uasset new file mode 100644 index 00000000..4d63ab4f Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/uottakuot_3.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/dialogues/uottakuot_4.uasset b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/uottakuot_4.uasset new file mode 100644 index 00000000..a81da1c7 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/uottakuot_4.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/dialogues/uottakuot_5.uasset b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/uottakuot_5.uasset new file mode 100644 index 00000000..b9b352c1 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/uottakuot_5.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/dialogues/uottakuot_Cue.uasset b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/uottakuot_Cue.uasset new file mode 100644 index 00000000..3854aad1 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/uottakuot_Cue.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/dialogues/voiceAtt.uasset b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/voiceAtt.uasset new file mode 100644 index 00000000..dc1a33d6 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/dialogues/voiceAtt.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/fightPlayer.uasset b/Content/Blueprints/Utils/Generators/HumanAI/fightPlayer.uasset new file mode 100644 index 00000000..e59314d8 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/fightPlayer.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/findOtherNPC.uasset b/Content/Blueprints/Utils/Generators/HumanAI/findOtherNPC.uasset new file mode 100644 index 00000000..3873bcff Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/findOtherNPC.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/findPlace.uasset b/Content/Blueprints/Utils/Generators/HumanAI/findPlace.uasset new file mode 100644 index 00000000..8a404e72 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/findPlace.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/findRndLoc.uasset b/Content/Blueprints/Utils/Generators/HumanAI/findRndLoc.uasset new file mode 100644 index 00000000..4a1a92b2 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/findRndLoc.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/finishTalking.uasset b/Content/Blueprints/Utils/Generators/HumanAI/finishTalking.uasset new file mode 100644 index 00000000..3971bb47 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/finishTalking.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/manAI.uasset b/Content/Blueprints/Utils/Generators/HumanAI/manAI.uasset new file mode 100644 index 00000000..25b81de2 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/manAI.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/manBB.uasset b/Content/Blueprints/Utils/Generators/HumanAI/manBB.uasset new file mode 100644 index 00000000..c024cc43 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/manBB.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/manBT.uasset b/Content/Blueprints/Utils/Generators/HumanAI/manBT.uasset new file mode 100644 index 00000000..02a7776c Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/manBT.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/manChar.uasset b/Content/Blueprints/Utils/Generators/HumanAI/manChar.uasset new file mode 100644 index 00000000..b250886c Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/manChar.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/peopleNavAreaNull.uasset b/Content/Blueprints/Utils/Generators/HumanAI/peopleNavAreaNull.uasset new file mode 100644 index 00000000..fea5f798 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/peopleNavAreaNull.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/placeTypes.uasset b/Content/Blueprints/Utils/Generators/HumanAI/placeTypes.uasset new file mode 100644 index 00000000..db5c4673 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/placeTypes.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/playSpeech.uasset b/Content/Blueprints/Utils/Generators/HumanAI/playSpeech.uasset new file mode 100644 index 00000000..84bfaabb Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/playSpeech.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/pullUpPlace.uasset b/Content/Blueprints/Utils/Generators/HumanAI/pullUpPlace.uasset new file mode 100644 index 00000000..ab577b10 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/pullUpPlace.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/pushUpPlace.uasset b/Content/Blueprints/Utils/Generators/HumanAI/pushUpPlace.uasset new file mode 100644 index 00000000..8b7fe2b9 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/pushUpPlace.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/randomizer.uasset b/Content/Blueprints/Utils/Generators/HumanAI/randomizer.uasset new file mode 100644 index 00000000..bb723988 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/randomizer.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/runSpline.uasset b/Content/Blueprints/Utils/Generators/HumanAI/runSpline.uasset new file mode 100644 index 00000000..d825f7d5 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/runSpline.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/setBusy.uasset b/Content/Blueprints/Utils/Generators/HumanAI/setBusy.uasset new file mode 100644 index 00000000..a7e54f93 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/setBusy.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/setTalkAni.uasset b/Content/Blueprints/Utils/Generators/HumanAI/setTalkAni.uasset new file mode 100644 index 00000000..d28c19fd Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/setTalkAni.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/sitPlace.uasset b/Content/Blueprints/Utils/Generators/HumanAI/sitPlace.uasset new file mode 100644 index 00000000..ed083a38 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/sitPlace.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/sitToPlace.uasset b/Content/Blueprints/Utils/Generators/HumanAI/sitToPlace.uasset new file mode 100644 index 00000000..6edd6281 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/sitToPlace.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/sportsmanBB.uasset b/Content/Blueprints/Utils/Generators/HumanAI/sportsmanBB.uasset new file mode 100644 index 00000000..70ddc2bd Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/sportsmanBB.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/sportsmanBT.uasset b/Content/Blueprints/Utils/Generators/HumanAI/sportsmanBT.uasset new file mode 100644 index 00000000..184a64a8 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/sportsmanBT.uasset differ diff --git a/Content/Blueprints/Utils/Generators/HumanAI/tellOtherToSpeak.uasset b/Content/Blueprints/Utils/Generators/HumanAI/tellOtherToSpeak.uasset new file mode 100644 index 00000000..0af80e79 Binary files /dev/null and b/Content/Blueprints/Utils/Generators/HumanAI/tellOtherToSpeak.uasset differ diff --git a/Content/Blueprints/Utils/NewRemoteControlPreset.uasset b/Content/Blueprints/Utils/NewRemoteControlPreset.uasset new file mode 100644 index 00000000..5f6d6d4f Binary files /dev/null and b/Content/Blueprints/Utils/NewRemoteControlPreset.uasset differ diff --git a/Content/Blueprints/Utils/ParallaxCapturer/BC.uasset b/Content/Blueprints/Utils/ParallaxCapturer/BC.uasset new file mode 100644 index 00000000..6f15ec18 Binary files /dev/null and b/Content/Blueprints/Utils/ParallaxCapturer/BC.uasset differ diff --git a/Content/Blueprints/Utils/ParallaxCapturer/M_result_Mat.uasset b/Content/Blueprints/Utils/ParallaxCapturer/M_result_Mat.uasset new file mode 100644 index 00000000..af48945f Binary files /dev/null and b/Content/Blueprints/Utils/ParallaxCapturer/M_result_Mat.uasset differ diff --git a/Content/Blueprints/Utils/ParallaxCapturer/ParallaxCapturer.uasset b/Content/Blueprints/Utils/ParallaxCapturer/ParallaxCapturer.uasset new file mode 100644 index 00000000..ccd3e507 Binary files /dev/null and b/Content/Blueprints/Utils/ParallaxCapturer/ParallaxCapturer.uasset differ diff --git a/Content/Blueprints/Utils/ParallaxCapturer/depth.uasset b/Content/Blueprints/Utils/ParallaxCapturer/depth.uasset new file mode 100644 index 00000000..537a370b Binary files /dev/null and b/Content/Blueprints/Utils/ParallaxCapturer/depth.uasset differ diff --git a/Content/Blueprints/Utils/ParallaxCapturer/renderer.uasset b/Content/Blueprints/Utils/ParallaxCapturer/renderer.uasset new file mode 100644 index 00000000..a5c80c5f Binary files /dev/null and b/Content/Blueprints/Utils/ParallaxCapturer/renderer.uasset differ diff --git a/Content/Blueprints/Utils/ParallaxCapturer/renderer1.uasset b/Content/Blueprints/Utils/ParallaxCapturer/renderer1.uasset new file mode 100644 index 00000000..c70757da Binary files /dev/null and b/Content/Blueprints/Utils/ParallaxCapturer/renderer1.uasset differ diff --git a/Content/Blueprints/Utils/ParallaxCapturer/result.uasset b/Content/Blueprints/Utils/ParallaxCapturer/result.uasset new file mode 100644 index 00000000..f89d03ca Binary files /dev/null and b/Content/Blueprints/Utils/ParallaxCapturer/result.uasset differ diff --git a/Content/Blueprints/Utils/ParallaxCapturer/result_Mat.uasset b/Content/Blueprints/Utils/ParallaxCapturer/result_Mat.uasset new file mode 100644 index 00000000..418707c5 Binary files /dev/null and b/Content/Blueprints/Utils/ParallaxCapturer/result_Mat.uasset differ diff --git a/Content/Blueprints/Utils/RTManage.uasset b/Content/Blueprints/Utils/RTManage.uasset index 78a7faf0..28963187 100644 Binary files a/Content/Blueprints/Utils/RTManage.uasset and b/Content/Blueprints/Utils/RTManage.uasset differ diff --git a/Content/Blueprints/Utils/dayTime.uasset b/Content/Blueprints/Utils/dayTime.uasset new file mode 100644 index 00000000..7aa3c23f Binary files /dev/null and b/Content/Blueprints/Utils/dayTime.uasset differ diff --git a/Content/Blueprints/Utils/levelStruct.uasset b/Content/Blueprints/Utils/levelStruct.uasset index e2c33ac2..c71a8896 100644 Binary files a/Content/Blueprints/Utils/levelStruct.uasset and b/Content/Blueprints/Utils/levelStruct.uasset differ diff --git a/Content/Blueprints/Utils/remoteListener.uasset b/Content/Blueprints/Utils/remoteListener.uasset new file mode 100644 index 00000000..fc9f9a09 Binary files /dev/null and b/Content/Blueprints/Utils/remoteListener.uasset differ diff --git a/Content/Blueprints/Utils/replacerColor.uasset b/Content/Blueprints/Utils/replacerColor.uasset new file mode 100644 index 00000000..acfa8370 Binary files /dev/null and b/Content/Blueprints/Utils/replacerColor.uasset differ diff --git a/Content/Blueprints/Utils/skyLightReplacer.uasset b/Content/Blueprints/Utils/skyLightReplacer.uasset new file mode 100644 index 00000000..87d18c74 Binary files /dev/null and b/Content/Blueprints/Utils/skyLightReplacer.uasset differ diff --git a/Content/CC_Shaders/SkinShader/Textures/Share/Black.uasset b/Content/CC_Shaders/SkinShader/Textures/Share/Black.uasset new file mode 100644 index 00000000..5d0f3fb7 Binary files /dev/null and b/Content/CC_Shaders/SkinShader/Textures/Share/Black.uasset differ diff --git a/Content/CC_Shaders/SkinShader/Textures/Share/Black_sRGB.uasset b/Content/CC_Shaders/SkinShader/Textures/Share/Black_sRGB.uasset new file mode 100644 index 00000000..211d819a Binary files /dev/null and b/Content/CC_Shaders/SkinShader/Textures/Share/Black_sRGB.uasset differ diff --git a/Content/CC_Shaders/SkinShader/Textures/Share/Gray.uasset b/Content/CC_Shaders/SkinShader/Textures/Share/Gray.uasset new file mode 100644 index 00000000..cabb96a4 Binary files /dev/null and b/Content/CC_Shaders/SkinShader/Textures/Share/Gray.uasset differ diff --git a/Content/CC_Shaders/SkinShader/Textures/Share/Normal_Default.uasset b/Content/CC_Shaders/SkinShader/Textures/Share/Normal_Default.uasset new file mode 100644 index 00000000..0c8fa72c Binary files /dev/null and b/Content/CC_Shaders/SkinShader/Textures/Share/Normal_Default.uasset differ diff --git a/Content/CC_Shaders/SkinShader/Textures/Share/ORM_Default.uasset b/Content/CC_Shaders/SkinShader/Textures/Share/ORM_Default.uasset new file mode 100644 index 00000000..5ae3967b Binary files /dev/null and b/Content/CC_Shaders/SkinShader/Textures/Share/ORM_Default.uasset differ diff --git a/Content/CC_Shaders/SkinShader/Textures/Share/White.uasset b/Content/CC_Shaders/SkinShader/Textures/Share/White.uasset new file mode 100644 index 00000000..19acae96 Binary files /dev/null and b/Content/CC_Shaders/SkinShader/Textures/Share/White.uasset differ diff --git a/Content/CC_Shaders/SkinShader/Textures/Share/White_GaryScale.uasset b/Content/CC_Shaders/SkinShader/Textures/Share/White_GaryScale.uasset new file mode 100644 index 00000000..f5badf07 Binary files /dev/null and b/Content/CC_Shaders/SkinShader/Textures/Share/White_GaryScale.uasset differ diff --git a/Content/CC_Shaders/SkinShader/Textures/Share/White_sRGB.uasset b/Content/CC_Shaders/SkinShader/Textures/Share/White_sRGB.uasset new file mode 100644 index 00000000..41477f70 Binary files /dev/null and b/Content/CC_Shaders/SkinShader/Textures/Share/White_sRGB.uasset differ diff --git a/Content/CC_Shaders/StandardShader/MaterialFunctions/MapParameter/BaseColorGlowBlend.uasset b/Content/CC_Shaders/StandardShader/MaterialFunctions/MapParameter/BaseColorGlowBlend.uasset new file mode 100644 index 00000000..5c771abc Binary files /dev/null and b/Content/CC_Shaders/StandardShader/MaterialFunctions/MapParameter/BaseColorGlowBlend.uasset differ diff --git a/Content/CC_Shaders/StandardShader/MaterialFunctions/MapParameter/ColorFix.uasset b/Content/CC_Shaders/StandardShader/MaterialFunctions/MapParameter/ColorFix.uasset new file mode 100644 index 00000000..a22d30a9 Binary files /dev/null and b/Content/CC_Shaders/StandardShader/MaterialFunctions/MapParameter/ColorFix.uasset differ diff --git a/Content/CC_Shaders/StandardShader/MaterialFunctions/MapParameter/ColorFixFunction.uasset b/Content/CC_Shaders/StandardShader/MaterialFunctions/MapParameter/ColorFixFunction.uasset new file mode 100644 index 00000000..1e6f025e Binary files /dev/null and b/Content/CC_Shaders/StandardShader/MaterialFunctions/MapParameter/ColorFixFunction.uasset differ diff --git a/Content/CC_Shaders/StandardShader/MaterialFunctions/MapParameter/Gray_Scale_Displacement.uasset b/Content/CC_Shaders/StandardShader/MaterialFunctions/MapParameter/Gray_Scale_Displacement.uasset new file mode 100644 index 00000000..cf942caf Binary files /dev/null and b/Content/CC_Shaders/StandardShader/MaterialFunctions/MapParameter/Gray_Scale_Displacement.uasset differ diff --git a/Content/CC_Shaders/StandardShader/MaterialFunctions/MapParameter/Normal.uasset b/Content/CC_Shaders/StandardShader/MaterialFunctions/MapParameter/Normal.uasset new file mode 100644 index 00000000..8c6957ce Binary files /dev/null and b/Content/CC_Shaders/StandardShader/MaterialFunctions/MapParameter/Normal.uasset differ diff --git a/Content/CC_Shaders/StandardShader/MaterialFunctions/MapParameter/ORM.uasset b/Content/CC_Shaders/StandardShader/MaterialFunctions/MapParameter/ORM.uasset new file mode 100644 index 00000000..4a25d1ca Binary files /dev/null and b/Content/CC_Shaders/StandardShader/MaterialFunctions/MapParameter/ORM.uasset differ diff --git a/Content/CC_Shaders/StandardShader/MaterialFunctions/MapParameter/Opacity.uasset b/Content/CC_Shaders/StandardShader/MaterialFunctions/MapParameter/Opacity.uasset new file mode 100644 index 00000000..2deafbb1 Binary files /dev/null and b/Content/CC_Shaders/StandardShader/MaterialFunctions/MapParameter/Opacity.uasset differ diff --git a/Content/CC_Shaders/StandardShader/MaterialFunctions/MapParameter/Specular.uasset b/Content/CC_Shaders/StandardShader/MaterialFunctions/MapParameter/Specular.uasset new file mode 100644 index 00000000..0c1949c4 Binary files /dev/null and b/Content/CC_Shaders/StandardShader/MaterialFunctions/MapParameter/Specular.uasset differ diff --git a/Content/CC_Shaders/StandardShader/MaterialFunctions/Source/DitherTemporalAA.uasset b/Content/CC_Shaders/StandardShader/MaterialFunctions/Source/DitherTemporalAA.uasset new file mode 100644 index 00000000..9abe8c86 Binary files /dev/null and b/Content/CC_Shaders/StandardShader/MaterialFunctions/Source/DitherTemporalAA.uasset differ diff --git a/Content/CC_Shaders/StandardShader/MaterialFunctions/Source/Good64x64TilingNoiseHighFreq.uasset b/Content/CC_Shaders/StandardShader/MaterialFunctions/Source/Good64x64TilingNoiseHighFreq.uasset new file mode 100644 index 00000000..b7ca443a Binary files /dev/null and b/Content/CC_Shaders/StandardShader/MaterialFunctions/Source/Good64x64TilingNoiseHighFreq.uasset differ diff --git a/Content/CC_Shaders/StandardShader/MaterialFunctions/Source/ScreenAlignedPixelToPixelUVs.uasset b/Content/CC_Shaders/StandardShader/MaterialFunctions/Source/ScreenAlignedPixelToPixelUVs.uasset new file mode 100644 index 00000000..054464a5 Binary files /dev/null and b/Content/CC_Shaders/StandardShader/MaterialFunctions/Source/ScreenAlignedPixelToPixelUVs.uasset differ diff --git a/Content/CC_Shaders/StandardShader/MaterialFunctions/Source/SplitComponents.uasset b/Content/CC_Shaders/StandardShader/MaterialFunctions/Source/SplitComponents.uasset new file mode 100644 index 00000000..61b8205c Binary files /dev/null and b/Content/CC_Shaders/StandardShader/MaterialFunctions/Source/SplitComponents.uasset differ diff --git a/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/Displacement.uasset b/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/Displacement.uasset new file mode 100644 index 00000000..513d7f9e Binary files /dev/null and b/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/Displacement.uasset differ diff --git a/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVAO.uasset b/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVAO.uasset new file mode 100644 index 00000000..dff65c8d Binary files /dev/null and b/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVAO.uasset differ diff --git a/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVBaseColor.uasset b/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVBaseColor.uasset new file mode 100644 index 00000000..938cb3a6 Binary files /dev/null and b/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVBaseColor.uasset differ diff --git a/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVBlend.uasset b/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVBlend.uasset new file mode 100644 index 00000000..81896c59 Binary files /dev/null and b/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVBlend.uasset differ diff --git a/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVGlow.uasset b/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVGlow.uasset new file mode 100644 index 00000000..7e61d0ac Binary files /dev/null and b/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVGlow.uasset differ diff --git a/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVMetallic.uasset b/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVMetallic.uasset new file mode 100644 index 00000000..d9314e5f Binary files /dev/null and b/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVMetallic.uasset differ diff --git a/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVNormal.uasset b/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVNormal.uasset new file mode 100644 index 00000000..934f1038 Binary files /dev/null and b/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVNormal.uasset differ diff --git a/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVOpacity.uasset b/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVOpacity.uasset new file mode 100644 index 00000000..ba32fb52 Binary files /dev/null and b/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVOpacity.uasset differ diff --git a/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVRoughness.uasset b/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVRoughness.uasset new file mode 100644 index 00000000..a2d3621f Binary files /dev/null and b/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVRoughness.uasset differ diff --git a/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVSpecular.uasset b/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVSpecular.uasset new file mode 100644 index 00000000..81d4ce78 Binary files /dev/null and b/Content/CC_Shaders/StandardShader/MaterialFunctions/UVTilingOffest/UVSpecular.uasset differ diff --git a/Content/CC_Shaders/StandardShader/RL_Standard.uasset b/Content/CC_Shaders/StandardShader/RL_Standard.uasset new file mode 100644 index 00000000..874bc573 Binary files /dev/null and b/Content/CC_Shaders/StandardShader/RL_Standard.uasset differ diff --git a/Content/CC_Shaders/StandardShader/RL_Standard_Hair.uasset b/Content/CC_Shaders/StandardShader/RL_Standard_Hair.uasset new file mode 100644 index 00000000..a0f7489a Binary files /dev/null and b/Content/CC_Shaders/StandardShader/RL_Standard_Hair.uasset differ diff --git a/Content/Localization/Game/Game.csv b/Content/Localization/Game/Game.csv new file mode 100644 index 00000000..b9d4b5f0 --- /dev/null +++ b/Content/Localization/Game/Game.csv @@ -0,0 +1,3 @@ +Date/Time,Word Count,en,ru-RU +2022.03.15-13.54.40,0,0,0 +2022.03.15-13.55.58,777,0,777 diff --git a/Content/Localization/Game/Game.manifest b/Content/Localization/Game/Game.manifest new file mode 100644 index 00000000..4de4ddcd Binary files /dev/null and b/Content/Localization/Game/Game.manifest differ diff --git a/Content/Localization/Game/Game_Conflicts.txt b/Content/Localization/Game/Game_Conflicts.txt new file mode 100644 index 00000000..e69de29b diff --git a/Content/Localization/Game/en/Game.archive b/Content/Localization/Game/en/Game.archive new file mode 100644 index 00000000..e08cc4f7 Binary files /dev/null and b/Content/Localization/Game/en/Game.archive differ diff --git a/Content/Localization/Game/ru-RU/Game.archive b/Content/Localization/Game/ru-RU/Game.archive new file mode 100644 index 00000000..fa561c0d Binary files /dev/null and b/Content/Localization/Game/ru-RU/Game.archive differ diff --git a/Content/Maps/Interiors/GP4S1/Unique/S01A00.umap b/Content/Maps/Interiors/GP4S1/Unique/S01A00.umap index ab6bf7a5..19d003ab 100644 Binary files a/Content/Maps/Interiors/GP4S1/Unique/S01A00.umap and b/Content/Maps/Interiors/GP4S1/Unique/S01A00.umap differ diff --git a/Content/Maps/Interiors/GP4S1/Unique/S01A01.umap b/Content/Maps/Interiors/GP4S1/Unique/S01A01.umap index deacf1b9..4da9c69a 100644 Binary files a/Content/Maps/Interiors/GP4S1/Unique/S01A01.umap and b/Content/Maps/Interiors/GP4S1/Unique/S01A01.umap differ diff --git a/Content/Maps/Interiors/GP4S1/Unique/S01A01_BuiltData.uasset b/Content/Maps/Interiors/GP4S1/Unique/S01A01_BuiltData.uasset index 732d020e..b54f397f 100644 Binary files a/Content/Maps/Interiors/GP4S1/Unique/S01A01_BuiltData.uasset and b/Content/Maps/Interiors/GP4S1/Unique/S01A01_BuiltData.uasset differ diff --git a/Content/Maps/Interiors/GP4S1/Unique/S01A02.umap b/Content/Maps/Interiors/GP4S1/Unique/S01A02.umap index 82b44368..1b663f2f 100644 Binary files a/Content/Maps/Interiors/GP4S1/Unique/S01A02.umap and b/Content/Maps/Interiors/GP4S1/Unique/S01A02.umap differ diff --git a/Content/Maps/Interiors/GP4S1/Unique/S01A03.umap b/Content/Maps/Interiors/GP4S1/Unique/S01A03.umap index d19105a3..fd89b36f 100644 Binary files a/Content/Maps/Interiors/GP4S1/Unique/S01A03.umap and b/Content/Maps/Interiors/GP4S1/Unique/S01A03.umap differ diff --git a/Content/Maps/Interiors/GP4S1/Unique/S01A04.umap b/Content/Maps/Interiors/GP4S1/Unique/S01A04.umap index 50b48fdd..f074a83f 100644 Binary files a/Content/Maps/Interiors/GP4S1/Unique/S01A04.umap and b/Content/Maps/Interiors/GP4S1/Unique/S01A04.umap differ diff --git a/Content/Maps/Interiors/GP4S1/Unique/S01A04_BuiltData.uasset b/Content/Maps/Interiors/GP4S1/Unique/S01A04_BuiltData.uasset index 9be5a97f..7ffffef7 100644 Binary files a/Content/Maps/Interiors/GP4S1/Unique/S01A04_BuiltData.uasset and b/Content/Maps/Interiors/GP4S1/Unique/S01A04_BuiltData.uasset differ diff --git a/Content/Maps/Interiors/GP4S1/Unique/S01A05.umap b/Content/Maps/Interiors/GP4S1/Unique/S01A05.umap index 6fd0f8b1..8805fbee 100644 Binary files a/Content/Maps/Interiors/GP4S1/Unique/S01A05.umap and b/Content/Maps/Interiors/GP4S1/Unique/S01A05.umap differ diff --git a/Content/Maps/Interiors/GP4S1/Unique/S01A06.umap b/Content/Maps/Interiors/GP4S1/Unique/S01A06.umap index 98df6cc6..dc063fbc 100644 Binary files a/Content/Maps/Interiors/GP4S1/Unique/S01A06.umap and b/Content/Maps/Interiors/GP4S1/Unique/S01A06.umap differ diff --git a/Content/Maps/Interiors/GP4S1/Unique/S01A07.umap b/Content/Maps/Interiors/GP4S1/Unique/S01A07.umap index 4c97895d..2331ccae 100644 Binary files a/Content/Maps/Interiors/GP4S1/Unique/S01A07.umap and b/Content/Maps/Interiors/GP4S1/Unique/S01A07.umap differ diff --git a/Content/Maps/Interiors/GP4S1/Unique/S01A09.umap b/Content/Maps/Interiors/GP4S1/Unique/S01A09.umap index 5ed10083..27af0a36 100644 Binary files a/Content/Maps/Interiors/GP4S1/Unique/S01A09.umap and b/Content/Maps/Interiors/GP4S1/Unique/S01A09.umap differ diff --git a/Content/Maps/Interiors/GP4S1/Unique/S01A10.umap b/Content/Maps/Interiors/GP4S1/Unique/S01A10.umap index 4a991d81..799e4650 100644 Binary files a/Content/Maps/Interiors/GP4S1/Unique/S01A10.umap and b/Content/Maps/Interiors/GP4S1/Unique/S01A10.umap differ diff --git a/Content/Maps/Interiors/GP4S1/Unique/S01A11.umap b/Content/Maps/Interiors/GP4S1/Unique/S01A11.umap index 46223147..82d070d3 100644 Binary files a/Content/Maps/Interiors/GP4S1/Unique/S01A11.umap and b/Content/Maps/Interiors/GP4S1/Unique/S01A11.umap differ diff --git a/Content/Maps/Interiors/GP4S1/Unique/S01F01.umap b/Content/Maps/Interiors/GP4S1/Unique/S01F01.umap index 5ca28526..443ae081 100644 Binary files a/Content/Maps/Interiors/GP4S1/Unique/S01F01.umap and b/Content/Maps/Interiors/GP4S1/Unique/S01F01.umap differ diff --git a/Content/Maps/Interiors/GP4S1/Unique/S01F02.umap b/Content/Maps/Interiors/GP4S1/Unique/S01F02.umap index 40f014d6..35723951 100644 Binary files a/Content/Maps/Interiors/GP4S1/Unique/S01F02.umap and b/Content/Maps/Interiors/GP4S1/Unique/S01F02.umap differ diff --git a/Content/Maps/Interiors/GP4S1/Unique/S01F03-10.umap b/Content/Maps/Interiors/GP4S1/Unique/S01F03-10.umap index 96ccf4ab..8e52cacb 100644 Binary files a/Content/Maps/Interiors/GP4S1/Unique/S01F03-10.umap and b/Content/Maps/Interiors/GP4S1/Unique/S01F03-10.umap differ diff --git a/Content/Maps/Interiors/GP4S1/Unique/S01F11.umap b/Content/Maps/Interiors/GP4S1/Unique/S01F11.umap index a2a84ed0..a9ba5673 100644 Binary files a/Content/Maps/Interiors/GP4S1/Unique/S01F11.umap and b/Content/Maps/Interiors/GP4S1/Unique/S01F11.umap differ diff --git a/Content/Maps/Interiors/GP4S1/Unique/S01F12.umap b/Content/Maps/Interiors/GP4S1/Unique/S01F12.umap index f8e0f523..69359d64 100644 Binary files a/Content/Maps/Interiors/GP4S1/Unique/S01F12.umap and b/Content/Maps/Interiors/GP4S1/Unique/S01F12.umap differ diff --git a/Content/Maps/Interiors/GP4S1/Unique/captureTest.umap b/Content/Maps/Interiors/GP4S1/Unique/captureTest.umap new file mode 100644 index 00000000..499b6bca Binary files /dev/null and b/Content/Maps/Interiors/GP4S1/Unique/captureTest.umap differ diff --git a/Content/Maps/Interiors/GP4S1/pointers/S01F02P.umap b/Content/Maps/Interiors/GP4S1/pointers/S01F02P.umap new file mode 100644 index 00000000..709c3148 Binary files /dev/null and b/Content/Maps/Interiors/GP4S1/pointers/S01F02P.umap differ diff --git a/Content/Maps/Interiors/GP4S1/pointers/S01F03-10P.umap b/Content/Maps/Interiors/GP4S1/pointers/S01F03-10P.umap new file mode 100644 index 00000000..241f4289 Binary files /dev/null and b/Content/Maps/Interiors/GP4S1/pointers/S01F03-10P.umap differ diff --git a/Content/Maps/Interiors/GP4S1/pointers/S01F11P.umap b/Content/Maps/Interiors/GP4S1/pointers/S01F11P.umap new file mode 100644 index 00000000..35863964 Binary files /dev/null and b/Content/Maps/Interiors/GP4S1/pointers/S01F11P.umap differ diff --git a/Content/Maps/Interiors/GP4S1/pointers/S01F12P.umap b/Content/Maps/Interiors/GP4S1/pointers/S01F12P.umap new file mode 100644 index 00000000..af28c4e7 Binary files /dev/null and b/Content/Maps/Interiors/GP4S1/pointers/S01F12P.umap differ diff --git a/Content/Maps/Interiors/GP4S2/S02F02.umap b/Content/Maps/Interiors/GP4S2/S02F02.umap index b17cce26..1f907b68 100644 Binary files a/Content/Maps/Interiors/GP4S2/S02F02.umap and b/Content/Maps/Interiors/GP4S2/S02F02.umap differ diff --git a/Content/Maps/Interiors/GP4S2/S02F03-13.umap b/Content/Maps/Interiors/GP4S2/S02F03-13.umap new file mode 100644 index 00000000..df98ea06 Binary files /dev/null and b/Content/Maps/Interiors/GP4S2/S02F03-13.umap differ diff --git a/Content/Maps/Interiors/GP4S2/S02F14.umap b/Content/Maps/Interiors/GP4S2/S02F14.umap index a2f7e3f6..2079dc93 100644 Binary files a/Content/Maps/Interiors/GP4S2/S02F14.umap and b/Content/Maps/Interiors/GP4S2/S02F14.umap differ diff --git a/Content/Maps/Interiors/GP4S2/pointers/S02F02P.umap b/Content/Maps/Interiors/GP4S2/pointers/S02F02P.umap new file mode 100644 index 00000000..ddaa5641 Binary files /dev/null and b/Content/Maps/Interiors/GP4S2/pointers/S02F02P.umap differ diff --git a/Content/Maps/Interiors/GP4S2/pointers/S02F03-13P.umap b/Content/Maps/Interiors/GP4S2/pointers/S02F03-13P.umap new file mode 100644 index 00000000..4f945d2b Binary files /dev/null and b/Content/Maps/Interiors/GP4S2/pointers/S02F03-13P.umap differ diff --git a/Content/Maps/Interiors/GP4S2/pointers/S02F03P.umap b/Content/Maps/Interiors/GP4S2/pointers/S02F03P.umap new file mode 100644 index 00000000..75717837 Binary files /dev/null and b/Content/Maps/Interiors/GP4S2/pointers/S02F03P.umap differ diff --git a/Content/Maps/Interiors/GP4S2/pointers/S02F14P.umap b/Content/Maps/Interiors/GP4S2/pointers/S02F14P.umap new file mode 100644 index 00000000..31015c20 Binary files /dev/null and b/Content/Maps/Interiors/GP4S2/pointers/S02F14P.umap differ diff --git a/Content/Maps/Interiors/GP4S3/S03F02.umap b/Content/Maps/Interiors/GP4S3/S03F02.umap index c0ff8491..d49d33ee 100644 Binary files a/Content/Maps/Interiors/GP4S3/S03F02.umap and b/Content/Maps/Interiors/GP4S3/S03F02.umap differ diff --git a/Content/Maps/Interiors/GP4S3/pointers/S03F02P.umap b/Content/Maps/Interiors/GP4S3/pointers/S03F02P.umap new file mode 100644 index 00000000..ee7d249f Binary files /dev/null and b/Content/Maps/Interiors/GP4S3/pointers/S03F02P.umap differ diff --git a/Content/Maps/Interiors/GP4S3/pointers/S03F03-etcP.umap b/Content/Maps/Interiors/GP4S3/pointers/S03F03-etcP.umap new file mode 100644 index 00000000..72d68671 Binary files /dev/null and b/Content/Maps/Interiors/GP4S3/pointers/S03F03-etcP.umap differ diff --git a/Content/Maps/Interiors/GP4S4/S04F02.umap b/Content/Maps/Interiors/GP4S4/S04F02.umap index 5a7ff7de..feb3d495 100644 Binary files a/Content/Maps/Interiors/GP4S4/S04F02.umap and b/Content/Maps/Interiors/GP4S4/S04F02.umap differ diff --git a/Content/Maps/Interiors/GP4S4/S04F03-etc.umap b/Content/Maps/Interiors/GP4S4/S04F03-etc.umap new file mode 100644 index 00000000..8e1cae9c Binary files /dev/null and b/Content/Maps/Interiors/GP4S4/S04F03-etc.umap differ diff --git a/Content/Maps/Interiors/GP4S4/pointers/S04F02P.umap b/Content/Maps/Interiors/GP4S4/pointers/S04F02P.umap new file mode 100644 index 00000000..e15b9b7f Binary files /dev/null and b/Content/Maps/Interiors/GP4S4/pointers/S04F02P.umap differ diff --git a/Content/Maps/Interiors/GP4S4/pointers/S04F03-etcP.umap b/Content/Maps/Interiors/GP4S4/pointers/S04F03-etcP.umap new file mode 100644 index 00000000..335089e3 Binary files /dev/null and b/Content/Maps/Interiors/GP4S4/pointers/S04F03-etcP.umap differ diff --git a/Content/Maps/Interiors/GP4S5/S05F02.umap b/Content/Maps/Interiors/GP4S5/S05F02.umap index 5173d178..4bc0fcbf 100644 Binary files a/Content/Maps/Interiors/GP4S5/S05F02.umap and b/Content/Maps/Interiors/GP4S5/S05F02.umap differ diff --git a/Content/Maps/Interiors/GP4S5/S05F03-08.umap b/Content/Maps/Interiors/GP4S5/S05F03-08.umap index 2f0f4250..1ac86b5a 100644 Binary files a/Content/Maps/Interiors/GP4S5/S05F03-08.umap and b/Content/Maps/Interiors/GP4S5/S05F03-08.umap differ diff --git a/Content/Maps/Interiors/GP4S5/S05F09.umap b/Content/Maps/Interiors/GP4S5/S05F09.umap index 47c195ad..305da06f 100644 Binary files a/Content/Maps/Interiors/GP4S5/S05F09.umap and b/Content/Maps/Interiors/GP4S5/S05F09.umap differ diff --git a/Content/Maps/Interiors/GP4S5/pointers/S05F02P.umap b/Content/Maps/Interiors/GP4S5/pointers/S05F02P.umap new file mode 100644 index 00000000..501c01a9 Binary files /dev/null and b/Content/Maps/Interiors/GP4S5/pointers/S05F02P.umap differ diff --git a/Content/Maps/Interiors/GP4S5/pointers/S05F03-08P.umap b/Content/Maps/Interiors/GP4S5/pointers/S05F03-08P.umap new file mode 100644 index 00000000..f871a1d4 Binary files /dev/null and b/Content/Maps/Interiors/GP4S5/pointers/S05F03-08P.umap differ diff --git a/Content/Maps/Interiors/GP4S5/pointers/S05F09P.umap b/Content/Maps/Interiors/GP4S5/pointers/S05F09P.umap new file mode 100644 index 00000000..62d759d0 Binary files /dev/null and b/Content/Maps/Interiors/GP4S5/pointers/S05F09P.umap differ diff --git a/Content/Maps/InteriorsAim.umap b/Content/Maps/InteriorsAim.umap index 14f6d968..5e6d02b4 100644 Binary files a/Content/Maps/InteriorsAim.umap and b/Content/Maps/InteriorsAim.umap differ diff --git a/Content/Maps/MainScene.umap b/Content/Maps/MainScene.umap index ee0706e4..a9c2907b 100644 Binary files a/Content/Maps/MainScene.umap and b/Content/Maps/MainScene.umap differ diff --git a/Content/Maps/NewWorld.umap b/Content/Maps/NewWorld.umap new file mode 100644 index 00000000..c1aa800b Binary files /dev/null and b/Content/Maps/NewWorld.umap differ diff --git a/Content/Maps/Underground_parking_GP4.umap b/Content/Maps/Underground_parking_GP4.umap index 8568404f..1d5aeaf3 100644 Binary files a/Content/Maps/Underground_parking_GP4.umap and b/Content/Maps/Underground_parking_GP4.umap differ diff --git a/Content/Maps/bake/H1.umap b/Content/Maps/bake/H1.umap new file mode 100644 index 00000000..757b0dfd Binary files /dev/null and b/Content/Maps/bake/H1.umap differ diff --git a/Content/Maps/mainsceneStuff.umap b/Content/Maps/mainsceneStuff.umap new file mode 100644 index 00000000..c179e622 Binary files /dev/null and b/Content/Maps/mainsceneStuff.umap differ diff --git a/Content/Maps/mainsceneStuffBackup.umap b/Content/Maps/mainsceneStuffBackup.umap new file mode 100644 index 00000000..5d479df9 Binary files /dev/null and b/Content/Maps/mainsceneStuffBackup.umap differ diff --git a/Content/Maps/people.umap b/Content/Maps/people.umap new file mode 100644 index 00000000..03775eb4 Binary files /dev/null and b/Content/Maps/people.umap differ diff --git a/Content/Maps/test.umap b/Content/Maps/test.umap new file mode 100644 index 00000000..0643b215 Binary files /dev/null and b/Content/Maps/test.umap differ diff --git a/Content/Materials/FakeInteriors/MI_CubeRoom_1.uasset b/Content/Materials/FakeInteriors/MI_CubeRoom_1.uasset index b3552836..86a40843 100644 Binary files a/Content/Materials/FakeInteriors/MI_CubeRoom_1.uasset and b/Content/Materials/FakeInteriors/MI_CubeRoom_1.uasset differ diff --git a/Content/Materials/FakeInteriors/MI_CubeRoom_2.uasset b/Content/Materials/FakeInteriors/MI_CubeRoom_2.uasset index 67d9a2ab..78140829 100644 Binary files a/Content/Materials/FakeInteriors/MI_CubeRoom_2.uasset and b/Content/Materials/FakeInteriors/MI_CubeRoom_2.uasset differ diff --git a/Content/Materials/FakeInteriors/MI_CubeRoom_3.uasset b/Content/Materials/FakeInteriors/MI_CubeRoom_3.uasset index d8c35d8c..c146f426 100644 Binary files a/Content/Materials/FakeInteriors/MI_CubeRoom_3.uasset and b/Content/Materials/FakeInteriors/MI_CubeRoom_3.uasset differ diff --git a/Content/Materials/FakeInteriors/MI_CubeRoom_5.uasset b/Content/Materials/FakeInteriors/MI_CubeRoom_5.uasset index d26f9b57..1df8e01b 100644 Binary files a/Content/Materials/FakeInteriors/MI_CubeRoom_5.uasset and b/Content/Materials/FakeInteriors/MI_CubeRoom_5.uasset differ diff --git a/Content/Materials/FakeInteriors/MI_CubeRoom_6.uasset b/Content/Materials/FakeInteriors/MI_CubeRoom_6.uasset index c49657be..1ce35b58 100644 Binary files a/Content/Materials/FakeInteriors/MI_CubeRoom_6.uasset and b/Content/Materials/FakeInteriors/MI_CubeRoom_6.uasset differ diff --git a/Content/Materials/FakeInteriors/MI_CubeRoom_7.uasset b/Content/Materials/FakeInteriors/MI_CubeRoom_7.uasset index 72633fb2..69cbcdee 100644 Binary files a/Content/Materials/FakeInteriors/MI_CubeRoom_7.uasset and b/Content/Materials/FakeInteriors/MI_CubeRoom_7.uasset differ diff --git a/Content/Materials/FakeInteriors/MI_FakeEmpty.uasset b/Content/Materials/FakeInteriors/MI_FakeEmpty.uasset index b86042b8..362d1691 100644 Binary files a/Content/Materials/FakeInteriors/MI_FakeEmpty.uasset and b/Content/Materials/FakeInteriors/MI_FakeEmpty.uasset differ diff --git a/Content/Materials/FakeInteriors/MI_FakeEmpty_nofade.uasset b/Content/Materials/FakeInteriors/MI_FakeEmpty_nofade.uasset new file mode 100644 index 00000000..d0f438fc Binary files /dev/null and b/Content/Materials/FakeInteriors/MI_FakeEmpty_nofade.uasset differ diff --git a/Content/Materials/Instances/MI_Brick_01.uasset b/Content/Materials/Instances/MI_Brick_01.uasset index aafa7839..7d13ad27 100644 Binary files a/Content/Materials/Instances/MI_Brick_01.uasset and b/Content/Materials/Instances/MI_Brick_01.uasset differ diff --git a/Content/Materials/Instances/MI_Brick_01_nofade.uasset b/Content/Materials/Instances/MI_Brick_01_nofade.uasset new file mode 100644 index 00000000..3a3137e1 Binary files /dev/null and b/Content/Materials/Instances/MI_Brick_01_nofade.uasset differ diff --git a/Content/Materials/Instances/MI_Brick_02.uasset b/Content/Materials/Instances/MI_Brick_02.uasset index c8e6d45f..5322998c 100644 Binary files a/Content/Materials/Instances/MI_Brick_02.uasset and b/Content/Materials/Instances/MI_Brick_02.uasset differ diff --git a/Content/Materials/Instances/MI_Brick_03.uasset b/Content/Materials/Instances/MI_Brick_03.uasset index 9e8bc4ad..23deda2c 100644 Binary files a/Content/Materials/Instances/MI_Brick_03.uasset and b/Content/Materials/Instances/MI_Brick_03.uasset differ diff --git a/Content/Materials/Instances/MI_Brick_04.uasset b/Content/Materials/Instances/MI_Brick_04.uasset index ba7841ac..4a20e21d 100644 Binary files a/Content/Materials/Instances/MI_Brick_04.uasset and b/Content/Materials/Instances/MI_Brick_04.uasset differ diff --git a/Content/Materials/Instances/MI_Brick_05.uasset b/Content/Materials/Instances/MI_Brick_05.uasset index 82732b9a..a62c3371 100644 Binary files a/Content/Materials/Instances/MI_Brick_05.uasset and b/Content/Materials/Instances/MI_Brick_05.uasset differ diff --git a/Content/Materials/Instances/MI_Brick_06.uasset b/Content/Materials/Instances/MI_Brick_06.uasset index 6e167ba5..b33e4aaf 100644 Binary files a/Content/Materials/Instances/MI_Brick_06.uasset and b/Content/Materials/Instances/MI_Brick_06.uasset differ diff --git a/Content/Materials/Instances/MI_Brick_07.uasset b/Content/Materials/Instances/MI_Brick_07.uasset index bbb23385..5b73597c 100644 Binary files a/Content/Materials/Instances/MI_Brick_07.uasset and b/Content/Materials/Instances/MI_Brick_07.uasset differ diff --git a/Content/Materials/Instances/MI_Conditioner.uasset b/Content/Materials/Instances/MI_Conditioner.uasset index b592d8f3..742d254d 100644 Binary files a/Content/Materials/Instances/MI_Conditioner.uasset and b/Content/Materials/Instances/MI_Conditioner.uasset differ diff --git a/Content/Materials/Instances/MI_RMA_Fasad_RAL_1011.uasset b/Content/Materials/Instances/MI_RMA_Fasad_RAL_1011.uasset index 669f1b86..42034b29 100644 Binary files a/Content/Materials/Instances/MI_RMA_Fasad_RAL_1011.uasset and b/Content/Materials/Instances/MI_RMA_Fasad_RAL_1011.uasset differ diff --git a/Content/Materials/Instances/MI_RMA_Fasad_RAL_1015.uasset b/Content/Materials/Instances/MI_RMA_Fasad_RAL_1015.uasset index 71a96a1f..7809f989 100644 Binary files a/Content/Materials/Instances/MI_RMA_Fasad_RAL_1015.uasset and b/Content/Materials/Instances/MI_RMA_Fasad_RAL_1015.uasset differ diff --git a/Content/Materials/Instances/MI_RMA_Fasad_RAL_5009.uasset b/Content/Materials/Instances/MI_RMA_Fasad_RAL_5009.uasset index a2a65af5..028df374 100644 Binary files a/Content/Materials/Instances/MI_RMA_Fasad_RAL_5009.uasset and b/Content/Materials/Instances/MI_RMA_Fasad_RAL_5009.uasset differ diff --git a/Content/Materials/Instances/MI_RMA_Fasad_RAL_6015.uasset b/Content/Materials/Instances/MI_RMA_Fasad_RAL_6015.uasset index 1b8564dd..ef3cb735 100644 Binary files a/Content/Materials/Instances/MI_RMA_Fasad_RAL_6015.uasset and b/Content/Materials/Instances/MI_RMA_Fasad_RAL_6015.uasset differ diff --git a/Content/Materials/Instances/MI_RMA_Fasad_RAL_6028.uasset b/Content/Materials/Instances/MI_RMA_Fasad_RAL_6028.uasset index 7415f7d0..1ef29eae 100644 Binary files a/Content/Materials/Instances/MI_RMA_Fasad_RAL_6028.uasset and b/Content/Materials/Instances/MI_RMA_Fasad_RAL_6028.uasset differ diff --git a/Content/Materials/Instances/MI_RMA_Fasad_RAL_6033.uasset b/Content/Materials/Instances/MI_RMA_Fasad_RAL_6033.uasset index 7f452f24..cdae436e 100644 Binary files a/Content/Materials/Instances/MI_RMA_Fasad_RAL_6033.uasset and b/Content/Materials/Instances/MI_RMA_Fasad_RAL_6033.uasset differ diff --git a/Content/Materials/Instances/MI_RMA_Fasad_RAL_7004.uasset b/Content/Materials/Instances/MI_RMA_Fasad_RAL_7004.uasset index 6e72f01c..82212b9b 100644 Binary files a/Content/Materials/Instances/MI_RMA_Fasad_RAL_7004.uasset and b/Content/Materials/Instances/MI_RMA_Fasad_RAL_7004.uasset differ diff --git a/Content/Materials/Instances/MI_RMA_Fasad_RAL_7015.uasset b/Content/Materials/Instances/MI_RMA_Fasad_RAL_7015.uasset index 599abd0c..dcd35a3c 100644 Binary files a/Content/Materials/Instances/MI_RMA_Fasad_RAL_7015.uasset and b/Content/Materials/Instances/MI_RMA_Fasad_RAL_7015.uasset differ diff --git a/Content/Materials/Instances/MI_RMA_Fasad_RAL_7016.uasset b/Content/Materials/Instances/MI_RMA_Fasad_RAL_7016.uasset index f8f7cdc4..cde7931e 100644 Binary files a/Content/Materials/Instances/MI_RMA_Fasad_RAL_7016.uasset and b/Content/Materials/Instances/MI_RMA_Fasad_RAL_7016.uasset differ diff --git a/Content/Materials/Instances/MI_RMA_Fasad_RAL_7016_nofade.uasset b/Content/Materials/Instances/MI_RMA_Fasad_RAL_7016_nofade.uasset new file mode 100644 index 00000000..219e128f Binary files /dev/null and b/Content/Materials/Instances/MI_RMA_Fasad_RAL_7016_nofade.uasset differ diff --git a/Content/Materials/Instances/MI_RMA_Fasad_RAL_7017.uasset b/Content/Materials/Instances/MI_RMA_Fasad_RAL_7017.uasset index 8461d67d..dd85935d 100644 Binary files a/Content/Materials/Instances/MI_RMA_Fasad_RAL_7017.uasset and b/Content/Materials/Instances/MI_RMA_Fasad_RAL_7017.uasset differ diff --git a/Content/Materials/Instances/MI_RMA_Fasad_RAL_7018.uasset b/Content/Materials/Instances/MI_RMA_Fasad_RAL_7018.uasset index 4a982473..49a84073 100644 Binary files a/Content/Materials/Instances/MI_RMA_Fasad_RAL_7018.uasset and b/Content/Materials/Instances/MI_RMA_Fasad_RAL_7018.uasset differ diff --git a/Content/Materials/Instances/MI_RMA_Fasad_RAL_7037.uasset b/Content/Materials/Instances/MI_RMA_Fasad_RAL_7037.uasset index 0c2ab407..378fe9c1 100644 Binary files a/Content/Materials/Instances/MI_RMA_Fasad_RAL_7037.uasset and b/Content/Materials/Instances/MI_RMA_Fasad_RAL_7037.uasset differ diff --git a/Content/Materials/Instances/MI_RMA_Fasad_RAL_7047.uasset b/Content/Materials/Instances/MI_RMA_Fasad_RAL_7047.uasset index db81f593..6e25cf18 100644 Binary files a/Content/Materials/Instances/MI_RMA_Fasad_RAL_7047.uasset and b/Content/Materials/Instances/MI_RMA_Fasad_RAL_7047.uasset differ diff --git a/Content/Materials/Instances/MI_RMA_Fasad_RAL_8009.uasset b/Content/Materials/Instances/MI_RMA_Fasad_RAL_8009.uasset index a52dcaa5..d54b50fb 100644 Binary files a/Content/Materials/Instances/MI_RMA_Fasad_RAL_8009.uasset and b/Content/Materials/Instances/MI_RMA_Fasad_RAL_8009.uasset differ diff --git a/Content/Materials/Instances/MI_RMA_Fasad_RAL_8010.uasset b/Content/Materials/Instances/MI_RMA_Fasad_RAL_8010.uasset index c88c2ce2..26c8d03e 100644 Binary files a/Content/Materials/Instances/MI_RMA_Fasad_RAL_8010.uasset and b/Content/Materials/Instances/MI_RMA_Fasad_RAL_8010.uasset differ diff --git a/Content/Materials/Instances/MI_RMA_Fasad_RAL_8023.uasset b/Content/Materials/Instances/MI_RMA_Fasad_RAL_8023.uasset index c9a7eba5..9e81da10 100644 Binary files a/Content/Materials/Instances/MI_RMA_Fasad_RAL_8023.uasset and b/Content/Materials/Instances/MI_RMA_Fasad_RAL_8023.uasset differ diff --git a/Content/Materials/Instances/MI_RMA_Fasad_RAL_9003.uasset b/Content/Materials/Instances/MI_RMA_Fasad_RAL_9003.uasset index d5a5b017..58a109b2 100644 Binary files a/Content/Materials/Instances/MI_RMA_Fasad_RAL_9003.uasset and b/Content/Materials/Instances/MI_RMA_Fasad_RAL_9003.uasset differ diff --git a/Content/Materials/Instances/MI_RMA_Fasad_RAL_9003_nofade.uasset b/Content/Materials/Instances/MI_RMA_Fasad_RAL_9003_nofade.uasset new file mode 100644 index 00000000..6196b450 Binary files /dev/null and b/Content/Materials/Instances/MI_RMA_Fasad_RAL_9003_nofade.uasset differ diff --git a/Content/Materials/Instances/MI_RMA_Fasad_RAL_9004.uasset b/Content/Materials/Instances/MI_RMA_Fasad_RAL_9004.uasset index 7b4af59a..c5bcb30c 100644 Binary files a/Content/Materials/Instances/MI_RMA_Fasad_RAL_9004.uasset and b/Content/Materials/Instances/MI_RMA_Fasad_RAL_9004.uasset differ diff --git a/Content/Materials/Instances/MI_RMA_Fasad_RAL_Design_010_50_10.uasset b/Content/Materials/Instances/MI_RMA_Fasad_RAL_Design_010_50_10.uasset index 9b42b9b4..2686a252 100644 Binary files a/Content/Materials/Instances/MI_RMA_Fasad_RAL_Design_010_50_10.uasset and b/Content/Materials/Instances/MI_RMA_Fasad_RAL_Design_010_50_10.uasset differ diff --git a/Content/Materials/Instances/MI_RMA_naberejnaya.uasset b/Content/Materials/Instances/MI_RMA_naberejnaya.uasset index 24e7370d..4d67204d 100644 Binary files a/Content/Materials/Instances/MI_RMA_naberejnaya.uasset and b/Content/Materials/Instances/MI_RMA_naberejnaya.uasset differ diff --git a/Content/Materials/Instances/MI_RMA_naberejnaya1.uasset b/Content/Materials/Instances/MI_RMA_naberejnaya1.uasset index 43603d17..9e28b903 100644 Binary files a/Content/Materials/Instances/MI_RMA_naberejnaya1.uasset and b/Content/Materials/Instances/MI_RMA_naberejnaya1.uasset differ diff --git a/Content/Materials/Instances/MI_RMA_naberejnaya2.uasset b/Content/Materials/Instances/MI_RMA_naberejnaya2.uasset index 140fbe1c..35ad515f 100644 Binary files a/Content/Materials/Instances/MI_RMA_naberejnaya2.uasset and b/Content/Materials/Instances/MI_RMA_naberejnaya2.uasset differ diff --git a/Content/Materials/Instances/MI_RMA_naberejnaya3.uasset b/Content/Materials/Instances/MI_RMA_naberejnaya3.uasset index ba76e8ec..e3c759a2 100644 Binary files a/Content/Materials/Instances/MI_RMA_naberejnaya3.uasset and b/Content/Materials/Instances/MI_RMA_naberejnaya3.uasset differ diff --git a/Content/Materials/Instances/MI_Rubber2.uasset b/Content/Materials/Instances/MI_Rubber2.uasset index cd309a74..2e6acbdf 100644 Binary files a/Content/Materials/Instances/MI_Rubber2.uasset and b/Content/Materials/Instances/MI_Rubber2.uasset differ diff --git a/Content/Materials/Instances/MI_Rubber2_nofade.uasset b/Content/Materials/Instances/MI_Rubber2_nofade.uasset new file mode 100644 index 00000000..a0a3ea0a Binary files /dev/null and b/Content/Materials/Instances/MI_Rubber2_nofade.uasset differ diff --git a/Content/Materials/Instances/MI_Tiles_Blue.uasset b/Content/Materials/Instances/MI_Tiles_Blue.uasset index 1b65df8d..62067605 100644 Binary files a/Content/Materials/Instances/MI_Tiles_Blue.uasset and b/Content/Materials/Instances/MI_Tiles_Blue.uasset differ diff --git a/Content/Materials/Instances/MI_Tiles_Gray.uasset b/Content/Materials/Instances/MI_Tiles_Gray.uasset index 0077dbd8..21b07f90 100644 Binary files a/Content/Materials/Instances/MI_Tiles_Gray.uasset and b/Content/Materials/Instances/MI_Tiles_Gray.uasset differ diff --git a/Content/Materials/Instances/MI_Tiles_Gray1.uasset b/Content/Materials/Instances/MI_Tiles_Gray1.uasset index 0ac05167..2170ca0a 100644 Binary files a/Content/Materials/Instances/MI_Tiles_Gray1.uasset and b/Content/Materials/Instances/MI_Tiles_Gray1.uasset differ diff --git a/Content/Materials/Instances/MI_Tiles_White.uasset b/Content/Materials/Instances/MI_Tiles_White.uasset index c3b0d095..159c7be0 100644 Binary files a/Content/Materials/Instances/MI_Tiles_White.uasset and b/Content/Materials/Instances/MI_Tiles_White.uasset differ diff --git a/Content/Materials/Instances/MI_parkingHouses.uasset b/Content/Materials/Instances/MI_parkingHouses.uasset index 597b3c95..35a84c67 100644 Binary files a/Content/Materials/Instances/MI_parkingHouses.uasset and b/Content/Materials/Instances/MI_parkingHouses.uasset differ diff --git a/Content/Materials/Instances/MM_TileDirt_L_Inst.uasset b/Content/Materials/Instances/MM_TileDirt_L_Inst.uasset index 5d59139f..c18e2fa7 100644 Binary files a/Content/Materials/Instances/MM_TileDirt_L_Inst.uasset and b/Content/Materials/Instances/MM_TileDirt_L_Inst.uasset differ diff --git a/Content/Materials/Instances/M_Greeds.uasset b/Content/Materials/Instances/M_Greeds.uasset index 6a00f5f2..10d4fd51 100644 Binary files a/Content/Materials/Instances/M_Greeds.uasset and b/Content/Materials/Instances/M_Greeds.uasset differ diff --git a/Content/Materials/Instances/M_Greeds_Inst.uasset b/Content/Materials/Instances/M_Greeds_Inst.uasset index 18fcfdfc..8cdd9934 100644 Binary files a/Content/Materials/Instances/M_Greeds_Inst.uasset and b/Content/Materials/Instances/M_Greeds_Inst.uasset differ diff --git a/Content/Materials/Instances/M_Lights_little.uasset b/Content/Materials/Instances/M_Lights_little.uasset new file mode 100644 index 00000000..d966a8b7 Binary files /dev/null and b/Content/Materials/Instances/M_Lights_little.uasset differ diff --git a/Content/Materials/Instances/M_Metal_chrome.uasset b/Content/Materials/Instances/M_Metal_chrome.uasset index 73854474..5ffd254a 100644 Binary files a/Content/Materials/Instances/M_Metal_chrome.uasset and b/Content/Materials/Instances/M_Metal_chrome.uasset differ diff --git a/Content/Materials/Instances/M_Metall.uasset b/Content/Materials/Instances/M_Metall.uasset index f2511db3..b599f84d 100644 Binary files a/Content/Materials/Instances/M_Metall.uasset and b/Content/Materials/Instances/M_Metall.uasset differ diff --git a/Content/Materials/Instances/M_Metall1.uasset b/Content/Materials/Instances/M_Metall1.uasset index 6e8a96e5..6d66a973 100644 Binary files a/Content/Materials/Instances/M_Metall1.uasset and b/Content/Materials/Instances/M_Metall1.uasset differ diff --git a/Content/Materials/Instances/M_Metall2.uasset b/Content/Materials/Instances/M_Metall2.uasset index f5ae6694..edfc0727 100644 Binary files a/Content/Materials/Instances/M_Metall2.uasset and b/Content/Materials/Instances/M_Metall2.uasset differ diff --git a/Content/Materials/Instances/M_Metall3.uasset b/Content/Materials/Instances/M_Metall3.uasset index 2dac7d18..9bf90eb6 100644 Binary files a/Content/Materials/Instances/M_Metall3.uasset and b/Content/Materials/Instances/M_Metall3.uasset differ diff --git a/Content/Materials/Instances/M_Metall4.uasset b/Content/Materials/Instances/M_Metall4.uasset index e2db5e2f..be6087bb 100644 Binary files a/Content/Materials/Instances/M_Metall4.uasset and b/Content/Materials/Instances/M_Metall4.uasset differ diff --git a/Content/Materials/Instances/M_Metall_Gray.uasset b/Content/Materials/Instances/M_Metall_Gray.uasset index 77cff191..dcb359fb 100644 Binary files a/Content/Materials/Instances/M_Metall_Gray.uasset and b/Content/Materials/Instances/M_Metall_Gray.uasset differ diff --git a/Content/Materials/Instances/M_Metall_Gray1.uasset b/Content/Materials/Instances/M_Metall_Gray1.uasset index fb9502aa..0347e294 100644 Binary files a/Content/Materials/Instances/M_Metall_Gray1.uasset and b/Content/Materials/Instances/M_Metall_Gray1.uasset differ diff --git a/Content/Materials/Instances/M_Plastic.uasset b/Content/Materials/Instances/M_Plastic.uasset index 13539995..67d75758 100644 Binary files a/Content/Materials/Instances/M_Plastic.uasset and b/Content/Materials/Instances/M_Plastic.uasset differ diff --git a/Content/Materials/Instances/M_Plastic_RAL_6005.uasset b/Content/Materials/Instances/M_Plastic_RAL_6005.uasset index 6b702582..e566f17d 100644 Binary files a/Content/Materials/Instances/M_Plastic_RAL_6005.uasset and b/Content/Materials/Instances/M_Plastic_RAL_6005.uasset differ diff --git a/Content/Materials/Instances/M_Plastic_RAL_6006.uasset b/Content/Materials/Instances/M_Plastic_RAL_6006.uasset index 42413b65..39c0b75d 100644 Binary files a/Content/Materials/Instances/M_Plastic_RAL_6006.uasset and b/Content/Materials/Instances/M_Plastic_RAL_6006.uasset differ diff --git a/Content/Materials/Instances/M_Plastic_RAL_7026.uasset b/Content/Materials/Instances/M_Plastic_RAL_7026.uasset index 4fcd95c5..73bb7f32 100644 Binary files a/Content/Materials/Instances/M_Plastic_RAL_7026.uasset and b/Content/Materials/Instances/M_Plastic_RAL_7026.uasset differ diff --git a/Content/Materials/Instances/M_Plastic_RAL_716.uasset b/Content/Materials/Instances/M_Plastic_RAL_716.uasset index 0bcca779..38ba2b56 100644 Binary files a/Content/Materials/Instances/M_Plastic_RAL_716.uasset and b/Content/Materials/Instances/M_Plastic_RAL_716.uasset differ diff --git a/Content/Materials/Instances/M_Plastic_RAL_716_nofade.uasset b/Content/Materials/Instances/M_Plastic_RAL_716_nofade.uasset new file mode 100644 index 00000000..4991cb66 Binary files /dev/null and b/Content/Materials/Instances/M_Plastic_RAL_716_nofade.uasset differ diff --git a/Content/Materials/Instances/M_Plastic_blue.uasset b/Content/Materials/Instances/M_Plastic_blue.uasset index 55250e71..92e68ef6 100644 Binary files a/Content/Materials/Instances/M_Plastic_blue.uasset and b/Content/Materials/Instances/M_Plastic_blue.uasset differ diff --git a/Content/Materials/Instances/M_Plastic_white.uasset b/Content/Materials/Instances/M_Plastic_white.uasset index a8a5cda8..22579a98 100644 Binary files a/Content/Materials/Instances/M_Plastic_white.uasset and b/Content/Materials/Instances/M_Plastic_white.uasset differ diff --git a/Content/Materials/Instances/M_WinGlass.uasset b/Content/Materials/Instances/M_WinGlass.uasset index c103d2de..3d86e274 100644 Binary files a/Content/Materials/Instances/M_WinGlass.uasset and b/Content/Materials/Instances/M_WinGlass.uasset differ diff --git a/Content/Materials/Interior/Custom/MI_Chrome_Laminam_FILO_ARGENTO.uasset b/Content/Materials/Interior/Custom/MI_Chrome_Laminam_FILO_ARGENTO.uasset index 82057a8d..e526c1f0 100644 Binary files a/Content/Materials/Interior/Custom/MI_Chrome_Laminam_FILO_ARGENTO.uasset and b/Content/Materials/Interior/Custom/MI_Chrome_Laminam_FILO_ARGENTO.uasset differ diff --git a/Content/Materials/Interior/Custom/MI_Porcelain_tile_Pro_Stone_600500.uasset b/Content/Materials/Interior/Custom/MI_Porcelain_tile_Pro_Stone_600500.uasset index 10ec0413..dc3ee39d 100644 Binary files a/Content/Materials/Interior/Custom/MI_Porcelain_tile_Pro_Stone_600500.uasset and b/Content/Materials/Interior/Custom/MI_Porcelain_tile_Pro_Stone_600500.uasset differ diff --git a/Content/Materials/Interior/Other/MI_Ceiling.uasset b/Content/Materials/Interior/Other/MI_Ceiling.uasset index 141074be..2e5595c3 100644 Binary files a/Content/Materials/Interior/Other/MI_Ceiling.uasset and b/Content/Materials/Interior/Other/MI_Ceiling.uasset differ diff --git a/Content/Materials/Interior/Other/MI_Gold_2_RotateAI_door.uasset b/Content/Materials/Interior/Other/MI_Gold_2_RotateAI_door.uasset new file mode 100644 index 00000000..04bd0ec1 Binary files /dev/null and b/Content/Materials/Interior/Other/MI_Gold_2_RotateAI_door.uasset differ diff --git a/Content/Materials/Interior/Other/MI_PaintWood_White_door.uasset b/Content/Materials/Interior/Other/MI_PaintWood_White_door.uasset new file mode 100644 index 00000000..6f58c0bf Binary files /dev/null and b/Content/Materials/Interior/Other/MI_PaintWood_White_door.uasset differ diff --git a/Content/Materials/LandscapeMaterials/MI_sand.uasset b/Content/Materials/LandscapeMaterials/MI_sand.uasset index a3f8a23b..d85a7803 100644 Binary files a/Content/Materials/LandscapeMaterials/MI_sand.uasset and b/Content/Materials/LandscapeMaterials/MI_sand.uasset differ diff --git a/Content/Materials/M_Lights.uasset b/Content/Materials/M_Lights.uasset new file mode 100644 index 00000000..b5dc4f9f Binary files /dev/null and b/Content/Materials/M_Lights.uasset differ diff --git a/Content/Materials/M_Transp.uasset b/Content/Materials/M_Transp.uasset new file mode 100644 index 00000000..5a8c1e97 Binary files /dev/null and b/Content/Materials/M_Transp.uasset differ diff --git a/Content/Materials/Master/MM_TileDirt_L.uasset b/Content/Materials/Master/MM_TileDirt_L.uasset index 5cdf32dc..de32908b 100644 Binary files a/Content/Materials/Master/MM_TileDirt_L.uasset and b/Content/Materials/Master/MM_TileDirt_L.uasset differ diff --git a/Content/Materials/Master/M_Decal1.uasset b/Content/Materials/Master/M_Decal1.uasset index 96fcb12a..0f4174a1 100644 Binary files a/Content/Materials/Master/M_Decal1.uasset and b/Content/Materials/Master/M_Decal1.uasset differ diff --git a/Content/Materials/Master/M_FakeInterior_Freestyle.uasset b/Content/Materials/Master/M_FakeInterior_Freestyle.uasset index 6e0e586f..704dafcc 100644 Binary files a/Content/Materials/Master/M_FakeInterior_Freestyle.uasset and b/Content/Materials/Master/M_FakeInterior_Freestyle.uasset differ diff --git a/Content/Materials/Master/M_Holo_Workinprogress_Inst.uasset b/Content/Materials/Master/M_Holo_Workinprogress_Inst.uasset index 69c3fc4c..932ff23b 100644 Binary files a/Content/Materials/Master/M_Holo_Workinprogress_Inst.uasset and b/Content/Materials/Master/M_Holo_Workinprogress_Inst.uasset differ diff --git a/Content/Materials/Master/M_NoRMA_Tile_Master.uasset b/Content/Materials/Master/M_NoRMA_Tile_Master.uasset index e0a1266e..0322e4de 100644 Binary files a/Content/Materials/Master/M_NoRMA_Tile_Master.uasset and b/Content/Materials/Master/M_NoRMA_Tile_Master.uasset differ diff --git a/Content/Materials/Master/M_RMA_Tile_Master.uasset b/Content/Materials/Master/M_RMA_Tile_Master.uasset index 55cadc32..83ee1398 100644 Binary files a/Content/Materials/Master/M_RMA_Tile_Master.uasset and b/Content/Materials/Master/M_RMA_Tile_Master.uasset differ diff --git a/Content/Materials/Master/M_RMA_Tile_Triplanar.uasset b/Content/Materials/Master/M_RMA_Tile_Triplanar.uasset index 526d9b35..62c77283 100644 Binary files a/Content/Materials/Master/M_RMA_Tile_Triplanar.uasset and b/Content/Materials/Master/M_RMA_Tile_Triplanar.uasset differ diff --git a/Content/Materials/Master/NewMaterial.uasset b/Content/Materials/Master/NewMaterial.uasset index 6716ac1e..c440bc67 100644 Binary files a/Content/Materials/Master/NewMaterial.uasset and b/Content/Materials/Master/NewMaterial.uasset differ diff --git a/Content/Materials/Naberejnaya/M_playground_BasketballCircle.uasset b/Content/Materials/Naberejnaya/M_playground_BasketballCircle.uasset index 15386482..d0f3da49 100644 Binary files a/Content/Materials/Naberejnaya/M_playground_BasketballCircle.uasset and b/Content/Materials/Naberejnaya/M_playground_BasketballCircle.uasset differ diff --git a/Content/Meshes/Furniture/Box/Box_Brush10_StaticMesh.uasset b/Content/Meshes/Furniture/Box/Box_Brush10_StaticMesh.uasset index f5f82291..7038422a 100644 Binary files a/Content/Meshes/Furniture/Box/Box_Brush10_StaticMesh.uasset and b/Content/Meshes/Furniture/Box/Box_Brush10_StaticMesh.uasset differ diff --git a/Content/Meshes/Furniture/Box/Box_Brush11_StaticMesh.uasset b/Content/Meshes/Furniture/Box/Box_Brush11_StaticMesh.uasset index 7de60e21..8c293214 100644 Binary files a/Content/Meshes/Furniture/Box/Box_Brush11_StaticMesh.uasset and b/Content/Meshes/Furniture/Box/Box_Brush11_StaticMesh.uasset differ diff --git a/Content/Meshes/Furniture/Box/Box_Brush15_StaticMesh.uasset b/Content/Meshes/Furniture/Box/Box_Brush15_StaticMesh.uasset index 6ca57072..9792897b 100644 Binary files a/Content/Meshes/Furniture/Box/Box_Brush15_StaticMesh.uasset and b/Content/Meshes/Furniture/Box/Box_Brush15_StaticMesh.uasset differ diff --git a/Content/Meshes/Furniture/Box/Box_Brush15_StaticMesh12.uasset b/Content/Meshes/Furniture/Box/Box_Brush15_StaticMesh12.uasset index 8755efea..c23ad252 100644 Binary files a/Content/Meshes/Furniture/Box/Box_Brush15_StaticMesh12.uasset and b/Content/Meshes/Furniture/Box/Box_Brush15_StaticMesh12.uasset differ diff --git a/Content/Meshes/Furniture/Box/Box_Brush16_StaticMesh.uasset b/Content/Meshes/Furniture/Box/Box_Brush16_StaticMesh.uasset index f33a767c..48b15e1e 100644 Binary files a/Content/Meshes/Furniture/Box/Box_Brush16_StaticMesh.uasset and b/Content/Meshes/Furniture/Box/Box_Brush16_StaticMesh.uasset differ diff --git a/Content/Meshes/Furniture/Box/Box_Brush18_StaticMesh.uasset b/Content/Meshes/Furniture/Box/Box_Brush18_StaticMesh.uasset index 18a8e3bf..6e23e4b7 100644 Binary files a/Content/Meshes/Furniture/Box/Box_Brush18_StaticMesh.uasset and b/Content/Meshes/Furniture/Box/Box_Brush18_StaticMesh.uasset differ diff --git a/Content/Meshes/Furniture/Box/Box_Brush4_StaticMesh.uasset b/Content/Meshes/Furniture/Box/Box_Brush4_StaticMesh.uasset index 980ff3d5..19963a42 100644 Binary files a/Content/Meshes/Furniture/Box/Box_Brush4_StaticMesh.uasset and b/Content/Meshes/Furniture/Box/Box_Brush4_StaticMesh.uasset differ diff --git a/Content/Meshes/Furniture/Box/Box_Brush5_StaticMesh.uasset b/Content/Meshes/Furniture/Box/Box_Brush5_StaticMesh.uasset index 22297b9b..a349e502 100644 Binary files a/Content/Meshes/Furniture/Box/Box_Brush5_StaticMesh.uasset and b/Content/Meshes/Furniture/Box/Box_Brush5_StaticMesh.uasset differ diff --git a/Content/Meshes/Furniture/Box/Box_Brush6_StaticMesh.uasset b/Content/Meshes/Furniture/Box/Box_Brush6_StaticMesh.uasset index edcd3ecd..57e36df0 100644 Binary files a/Content/Meshes/Furniture/Box/Box_Brush6_StaticMesh.uasset and b/Content/Meshes/Furniture/Box/Box_Brush6_StaticMesh.uasset differ diff --git a/Content/Meshes/Furniture/Box/Box_Brush8_StaticMesh.uasset b/Content/Meshes/Furniture/Box/Box_Brush8_StaticMesh.uasset index 6bf33750..b502d9a9 100644 Binary files a/Content/Meshes/Furniture/Box/Box_Brush8_StaticMesh.uasset and b/Content/Meshes/Furniture/Box/Box_Brush8_StaticMesh.uasset differ diff --git a/Content/Meshes/Furniture/Box/Box_Brush9_StaticMesh.uasset b/Content/Meshes/Furniture/Box/Box_Brush9_StaticMesh.uasset index 9cd3d070..72027fab 100644 Binary files a/Content/Meshes/Furniture/Box/Box_Brush9_StaticMesh.uasset and b/Content/Meshes/Furniture/Box/Box_Brush9_StaticMesh.uasset differ diff --git a/Content/Meshes/Furniture/Box/Picture_1.uasset b/Content/Meshes/Furniture/Box/Picture_1.uasset index f104fe89..c4f78409 100644 Binary files a/Content/Meshes/Furniture/Box/Picture_1.uasset and b/Content/Meshes/Furniture/Box/Picture_1.uasset differ diff --git a/Content/Meshes/Furniture/Custom/SM_Celling_Lamp_1.uasset b/Content/Meshes/Furniture/Custom/SM_Celling_Lamp_1.uasset index 7d2a755a..da958e6d 100644 Binary files a/Content/Meshes/Furniture/Custom/SM_Celling_Lamp_1.uasset and b/Content/Meshes/Furniture/Custom/SM_Celling_Lamp_1.uasset differ diff --git a/Content/Meshes/Furniture/Custom/SM_Celling_Lamp_2.uasset b/Content/Meshes/Furniture/Custom/SM_Celling_Lamp_2.uasset index 1d283fa4..4b342957 100644 Binary files a/Content/Meshes/Furniture/Custom/SM_Celling_Lamp_2.uasset and b/Content/Meshes/Furniture/Custom/SM_Celling_Lamp_2.uasset differ diff --git a/Content/Meshes/Furniture/Custom/SM_Celling_Lamp_3.uasset b/Content/Meshes/Furniture/Custom/SM_Celling_Lamp_3.uasset index d7a8c004..3bff4444 100644 Binary files a/Content/Meshes/Furniture/Custom/SM_Celling_Lamp_3.uasset and b/Content/Meshes/Furniture/Custom/SM_Celling_Lamp_3.uasset differ diff --git a/Content/Meshes/Furniture/Custom/SM_Floor_Lamp_AI.uasset b/Content/Meshes/Furniture/Custom/SM_Floor_Lamp_AI.uasset index ff6a4c7f..04cee4a8 100644 Binary files a/Content/Meshes/Furniture/Custom/SM_Floor_Lamp_AI.uasset and b/Content/Meshes/Furniture/Custom/SM_Floor_Lamp_AI.uasset differ diff --git a/Content/Meshes/Furniture/Custom/SM_Pilaster_AI.uasset b/Content/Meshes/Furniture/Custom/SM_Pilaster_AI.uasset index 755e9087..69e2e880 100644 Binary files a/Content/Meshes/Furniture/Custom/SM_Pilaster_AI.uasset and b/Content/Meshes/Furniture/Custom/SM_Pilaster_AI.uasset differ diff --git a/Content/Meshes/Furniture/Custom/SM_Pufik_1.uasset b/Content/Meshes/Furniture/Custom/SM_Pufik_1.uasset index 8bb0810d..cb4a2ccd 100644 Binary files a/Content/Meshes/Furniture/Custom/SM_Pufik_1.uasset and b/Content/Meshes/Furniture/Custom/SM_Pufik_1.uasset differ diff --git a/Content/Meshes/Furniture/Custom/SM_SphereLamp_AI.uasset b/Content/Meshes/Furniture/Custom/SM_SphereLamp_AI.uasset index 0dcee2e7..2325413c 100644 Binary files a/Content/Meshes/Furniture/Custom/SM_SphereLamp_AI.uasset and b/Content/Meshes/Furniture/Custom/SM_SphereLamp_AI.uasset differ diff --git a/Content/Meshes/Furniture/Custom/SM_Swedish_wall_sport.uasset b/Content/Meshes/Furniture/Custom/SM_Swedish_wall_sport.uasset index 557acd7e..04bb2ea5 100644 Binary files a/Content/Meshes/Furniture/Custom/SM_Swedish_wall_sport.uasset and b/Content/Meshes/Furniture/Custom/SM_Swedish_wall_sport.uasset differ diff --git a/Content/Meshes/Furniture/MM_Furniture.uasset b/Content/Meshes/Furniture/MM_Furniture.uasset index d07eabfd..4fa24483 100644 Binary files a/Content/Meshes/Furniture/MM_Furniture.uasset and b/Content/Meshes/Furniture/MM_Furniture.uasset differ diff --git a/Content/Meshes/Furniture/Materials/MI_Intercom_call_Comax_DRC_4ML.uasset b/Content/Meshes/Furniture/Materials/MI_Intercom_call_Comax_DRC_4ML.uasset index 3949f5a4..71774872 100644 Binary files a/Content/Meshes/Furniture/Materials/MI_Intercom_call_Comax_DRC_4ML.uasset and b/Content/Meshes/Furniture/Materials/MI_Intercom_call_Comax_DRC_4ML.uasset differ diff --git a/Content/Meshes/Furniture/Materials/MI_Silver.uasset b/Content/Meshes/Furniture/Materials/MI_Silver.uasset index fccb3e77..ec7e9393 100644 Binary files a/Content/Meshes/Furniture/Materials/MI_Silver.uasset and b/Content/Meshes/Furniture/Materials/MI_Silver.uasset differ diff --git a/Content/Meshes/Furniture/Materials/MI_White_painted_acrylic.uasset b/Content/Meshes/Furniture/Materials/MI_White_painted_acrylic.uasset index 14df5567..09ea8d3e 100644 Binary files a/Content/Meshes/Furniture/Materials/MI_White_painted_acrylic.uasset and b/Content/Meshes/Furniture/Materials/MI_White_painted_acrylic.uasset differ diff --git a/Content/Meshes/Furniture/Materials/MI__Coffee_table_GLADOM.uasset b/Content/Meshes/Furniture/Materials/MI__Coffee_table_GLADOM.uasset index 767b44d9..810540cd 100644 Binary files a/Content/Meshes/Furniture/Materials/MI__Coffee_table_GLADOM.uasset and b/Content/Meshes/Furniture/Materials/MI__Coffee_table_GLADOM.uasset differ diff --git a/Content/Meshes/Furniture/Meshes/SM_Bathroom_cabinet_with_shelf.uasset b/Content/Meshes/Furniture/Meshes/SM_Bathroom_cabinet_with_shelf.uasset index 1ba44f38..2394ebe4 100644 Binary files a/Content/Meshes/Furniture/Meshes/SM_Bathroom_cabinet_with_shelf.uasset and b/Content/Meshes/Furniture/Meshes/SM_Bathroom_cabinet_with_shelf.uasset differ diff --git a/Content/Meshes/Furniture/Meshes/SM_Coffee_table_GLADOM.uasset b/Content/Meshes/Furniture/Meshes/SM_Coffee_table_GLADOM.uasset index 872925f3..74675d0e 100644 Binary files a/Content/Meshes/Furniture/Meshes/SM_Coffee_table_GLADOM.uasset and b/Content/Meshes/Furniture/Meshes/SM_Coffee_table_GLADOM.uasset differ diff --git a/Content/Meshes/Furniture/Meshes/SM_Hanging_cabinet_with_sink_and_drawers_.uasset b/Content/Meshes/Furniture/Meshes/SM_Hanging_cabinet_with_sink_and_drawers_.uasset index 7ff1cae2..2f02ac02 100644 Binary files a/Content/Meshes/Furniture/Meshes/SM_Hanging_cabinet_with_sink_and_drawers_.uasset and b/Content/Meshes/Furniture/Meshes/SM_Hanging_cabinet_with_sink_and_drawers_.uasset differ diff --git a/Content/Meshes/Furniture/Meshes/SM_built-in_wardrobe.uasset b/Content/Meshes/Furniture/Meshes/SM_built-in_wardrobe.uasset index d2a91ec0..434be095 100644 Binary files a/Content/Meshes/Furniture/Meshes/SM_built-in_wardrobe.uasset and b/Content/Meshes/Furniture/Meshes/SM_built-in_wardrobe.uasset differ diff --git a/Content/Meshes/Furniture/Meshes/SM_sofa_01.uasset b/Content/Meshes/Furniture/Meshes/SM_sofa_01.uasset index 2401ac1f..c9da265a 100644 Binary files a/Content/Meshes/Furniture/Meshes/SM_sofa_01.uasset and b/Content/Meshes/Furniture/Meshes/SM_sofa_01.uasset differ diff --git a/Content/Meshes/Furniture/SM_S01_windows_interior1.uasset b/Content/Meshes/Furniture/SM_S01_windows_interior1.uasset index 3be6ff6b..f22fe4fb 100644 Binary files a/Content/Meshes/Furniture/SM_S01_windows_interior1.uasset and b/Content/Meshes/Furniture/SM_S01_windows_interior1.uasset differ diff --git a/Content/Meshes/Furniture/SM_S01_windows_interior2.uasset b/Content/Meshes/Furniture/SM_S01_windows_interior2.uasset index d1cfbbfe..ff67dc89 100644 Binary files a/Content/Meshes/Furniture/SM_S01_windows_interior2.uasset and b/Content/Meshes/Furniture/SM_S01_windows_interior2.uasset differ diff --git a/Content/Meshes/Furniture/SM_S01_windows_interior3.uasset b/Content/Meshes/Furniture/SM_S01_windows_interior3.uasset index 7057b005..887c76b9 100644 Binary files a/Content/Meshes/Furniture/SM_S01_windows_interior3.uasset and b/Content/Meshes/Furniture/SM_S01_windows_interior3.uasset differ diff --git a/Content/Meshes/Furniture/SM_S01_windows_interior4.uasset b/Content/Meshes/Furniture/SM_S01_windows_interior4.uasset index abcf3316..8839ad03 100644 Binary files a/Content/Meshes/Furniture/SM_S01_windows_interior4.uasset and b/Content/Meshes/Furniture/SM_S01_windows_interior4.uasset differ diff --git a/Content/Meshes/Furniture/SM_S01_windows_interior5.uasset b/Content/Meshes/Furniture/SM_S01_windows_interior5.uasset index 8468d589..12cc73f9 100644 Binary files a/Content/Meshes/Furniture/SM_S01_windows_interior5.uasset and b/Content/Meshes/Furniture/SM_S01_windows_interior5.uasset differ diff --git a/Content/Meshes/Furniture/SM_S01_windows_interior6.uasset b/Content/Meshes/Furniture/SM_S01_windows_interior6.uasset index 8a78e7a1..7c435f08 100644 Binary files a/Content/Meshes/Furniture/SM_S01_windows_interior6.uasset and b/Content/Meshes/Furniture/SM_S01_windows_interior6.uasset differ diff --git a/Content/Meshes/Furniture/SM_S01_windows_interior7.uasset b/Content/Meshes/Furniture/SM_S01_windows_interior7.uasset index c0560938..1cf7d9f1 100644 Binary files a/Content/Meshes/Furniture/SM_S01_windows_interior7.uasset and b/Content/Meshes/Furniture/SM_S01_windows_interior7.uasset differ diff --git a/Content/Meshes/Furniture/SM_Stairs_S01A_7_8.uasset b/Content/Meshes/Furniture/SM_Stairs_S01A_7_8.uasset index 269d2a9e..6aa10fb6 100644 Binary files a/Content/Meshes/Furniture/SM_Stairs_S01A_7_8.uasset and b/Content/Meshes/Furniture/SM_Stairs_S01A_7_8.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A00_Cap.uasset b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A00_Cap.uasset index 8dcf5559..239fc653 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A00_Cap.uasset and b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A00_Cap.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A01_Cap.uasset b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A01_Cap.uasset index af6cb3bd..67761cf4 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A01_Cap.uasset and b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A01_Cap.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A02_Cap.uasset b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A02_Cap.uasset index 7494d16c..a9239951 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A02_Cap.uasset and b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A02_Cap.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A03_Cap.uasset b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A03_Cap.uasset index c7a51bc1..7f939a92 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A03_Cap.uasset and b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A03_Cap.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A04_Cap.uasset b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A04_Cap.uasset index 912279bf..23aa96f0 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A04_Cap.uasset and b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A04_Cap.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A05_Cap.uasset b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A05_Cap.uasset index 05d056ab..5f017faa 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A05_Cap.uasset and b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A05_Cap.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A06_Cap.uasset b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A06_Cap.uasset index cafccd16..b85059c8 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A06_Cap.uasset and b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A06_Cap.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A07_Cap.uasset b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A07_Cap.uasset index 4b25fd15..00051f9f 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A07_Cap.uasset and b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A07_Cap.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A08_Cap.uasset b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A08_Cap.uasset index cfe46dde..84e8ca48 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A08_Cap.uasset and b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A08_Cap.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A09_Cap.uasset b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A09_Cap.uasset index 78dbaa3d..bef8e4f4 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A09_Cap.uasset and b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A09_Cap.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A10_Cap.uasset b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A10_Cap.uasset index 4ba3df19..92e50d29 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A10_Cap.uasset and b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A10_Cap.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A11_Cap.uasset b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A11_Cap.uasset index fd9e2f58..234e49bf 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A11_Cap.uasset and b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_A11_Cap.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F02_Cap.uasset b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F02_Cap.uasset index 0b1dcdf4..656c187f 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F02_Cap.uasset and b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F02_Cap.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F02_Hall_Cap.uasset b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F02_Hall_Cap.uasset index ddace90a..14713a26 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F02_Hall_Cap.uasset and b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F02_Hall_Cap.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F03_F10_Cap.uasset b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F03_F10_Cap.uasset index f5f75a79..0a697000 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F03_F10_Cap.uasset and b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F03_F10_Cap.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F03_F10_Hall_Cap.uasset b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F03_F10_Hall_Cap.uasset index 4d60e7ce..641beb65 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F03_F10_Hall_Cap.uasset and b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F03_F10_Hall_Cap.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F11_Cap.uasset b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F11_Cap.uasset index 49f29b6f..22b46b28 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F11_Cap.uasset and b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F11_Cap.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F11_Hall_Cap.uasset b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F11_Hall_Cap.uasset index 373fe55e..e6253973 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F11_Hall_Cap.uasset and b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F11_Hall_Cap.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F12_Cap.uasset b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F12_Cap.uasset index 544cb19f..2b31c242 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F12_Cap.uasset and b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F12_Cap.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F12_Hall_Cap.uasset b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F12_Hall_Cap.uasset index ee19ad50..32415111 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F12_Hall_Cap.uasset and b/Content/Meshes/Interiors/GP4S1/Caps/SM_GP4_S01_F12_Hall_Cap.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_FL1.uasset b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_FL1.uasset index 0c711ad4..c312bc5e 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_FL1.uasset and b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_FL1.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_Hall.uasset b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_Hall.uasset index 1fdd3d6d..e21374e4 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_Hall.uasset and b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_Hall.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_Hall_F11.uasset b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_Hall_F11.uasset index 9048330a..79004901 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_Hall_F11.uasset and b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_Hall_F11.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_Hall_F12.uasset b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_Hall_F12.uasset index 188c54b1..ffcd9870 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_Hall_F12.uasset and b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_Hall_F12.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_0.uasset b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_0.uasset index 0af011fd..b6f3f5e1 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_0.uasset and b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_0.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_1.uasset b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_1.uasset index c2aa5b5b..458c8fe0 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_1.uasset and b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_1.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_10.uasset b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_10.uasset index b016e691..88406a5f 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_10.uasset and b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_10.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_11.uasset b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_11.uasset index 235f294f..f76fe466 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_11.uasset and b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_11.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_2.uasset b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_2.uasset index 1287366b..2c897097 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_2.uasset and b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_2.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_3.uasset b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_3.uasset index fe20f4ee..493a491e 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_3.uasset and b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_3.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_4.uasset b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_4.uasset index 45c01aa9..a75dd09c 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_4.uasset and b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_4.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_5.uasset b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_5.uasset index dba1a64c..0b0343b9 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_5.uasset and b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_5.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_6.uasset b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_6.uasset index a02b1df2..299ede8c 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_6.uasset and b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_6.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_7.uasset b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_7.uasset index 1e7097b1..ba36ae74 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_7.uasset and b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_7.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_8.uasset b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_8.uasset index 63878eaa..6db82645 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_8.uasset and b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_8.uasset differ diff --git a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_9.uasset b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_9.uasset index 8e461edf..7af22c53 100644 Binary files a/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_9.uasset and b/Content/Meshes/Interiors/GP4S1/Unique/SM_dom_1_flat_9.uasset differ diff --git a/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_FL1_plintus.uasset b/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_FL1_plintus.uasset index 761275d9..4f59be78 100644 Binary files a/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_FL1_plintus.uasset and b/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_FL1_plintus.uasset differ diff --git a/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_0_plintus_001.uasset b/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_0_plintus_001.uasset index 1c3aad59..d7511278 100644 Binary files a/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_0_plintus_001.uasset and b/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_0_plintus_001.uasset differ diff --git a/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_10_plintus_001.uasset b/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_10_plintus_001.uasset index 6916179f..dfaf84bf 100644 Binary files a/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_10_plintus_001.uasset and b/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_10_plintus_001.uasset differ diff --git a/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_11_plintus_001.uasset b/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_11_plintus_001.uasset index edf7592d..3e98ef5d 100644 Binary files a/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_11_plintus_001.uasset and b/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_11_plintus_001.uasset differ diff --git a/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_1_plintus_001.uasset b/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_1_plintus_001.uasset index 69975307..980715e0 100644 Binary files a/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_1_plintus_001.uasset and b/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_1_plintus_001.uasset differ diff --git a/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_2_plintus_001.uasset b/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_2_plintus_001.uasset index 12fb7218..6fc885e0 100644 Binary files a/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_2_plintus_001.uasset and b/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_2_plintus_001.uasset differ diff --git a/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_3_plintus_001.uasset b/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_3_plintus_001.uasset index 062d1d95..7ae7cadc 100644 Binary files a/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_3_plintus_001.uasset and b/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_3_plintus_001.uasset differ diff --git a/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_4_plintus_001.uasset b/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_4_plintus_001.uasset index 95dc0126..46e2f443 100644 Binary files a/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_4_plintus_001.uasset and b/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_4_plintus_001.uasset differ diff --git a/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_5_plintus_001.uasset b/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_5_plintus_001.uasset index 93888c68..f0097d03 100644 Binary files a/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_5_plintus_001.uasset and b/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_5_plintus_001.uasset differ diff --git a/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_6_plintus_001.uasset b/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_6_plintus_001.uasset index bb50de47..684cde50 100644 Binary files a/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_6_plintus_001.uasset and b/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_6_plintus_001.uasset differ diff --git a/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_7_plintus_001.uasset b/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_7_plintus_001.uasset index 05656499..cddb4e65 100644 Binary files a/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_7_plintus_001.uasset and b/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_7_plintus_001.uasset differ diff --git a/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_8_plintus_001.uasset b/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_8_plintus_001.uasset index a1baef2e..05e0db7e 100644 Binary files a/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_8_plintus_001.uasset and b/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_8_plintus_001.uasset differ diff --git a/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_9_plintus_001.uasset b/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_9_plintus_001.uasset index 8cb2d5c8..84d8debe 100644 Binary files a/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_9_plintus_001.uasset and b/Content/Meshes/Interiors/Plintus/Dom_1/Down/SM_dom_1_plintus_low_SM_dom_1_flat_9_plintus_001.uasset differ diff --git a/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_0_Test_plintus.uasset b/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_0_Test_plintus.uasset index 1e6e22ab..61d37b24 100644 Binary files a/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_0_Test_plintus.uasset and b/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_0_Test_plintus.uasset differ diff --git a/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_10_plintus.uasset b/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_10_plintus.uasset index ab2a186b..83115f78 100644 Binary files a/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_10_plintus.uasset and b/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_10_plintus.uasset differ diff --git a/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_11_plintus.uasset b/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_11_plintus.uasset index 381e39af..e3724095 100644 Binary files a/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_11_plintus.uasset and b/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_11_plintus.uasset differ diff --git a/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_1_plintus.uasset b/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_1_plintus.uasset index 7f687c2b..2da702d3 100644 Binary files a/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_1_plintus.uasset and b/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_1_plintus.uasset differ diff --git a/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_2_plintus.uasset b/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_2_plintus.uasset index 6ae95ab8..e15f4771 100644 Binary files a/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_2_plintus.uasset and b/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_2_plintus.uasset differ diff --git a/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_3_plintus.uasset b/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_3_plintus.uasset index 7a793ce0..e5e36d4a 100644 Binary files a/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_3_plintus.uasset and b/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_3_plintus.uasset differ diff --git a/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_4_plintus.uasset b/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_4_plintus.uasset index 9ee1377f..5659810d 100644 Binary files a/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_4_plintus.uasset and b/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_4_plintus.uasset differ diff --git a/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_5_plintus.uasset b/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_5_plintus.uasset index e45b2203..1c76c897 100644 Binary files a/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_5_plintus.uasset and b/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_5_plintus.uasset differ diff --git a/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_6_plintus.uasset b/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_6_plintus.uasset index 6208a9cf..fadae91c 100644 Binary files a/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_6_plintus.uasset and b/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_6_plintus.uasset differ diff --git a/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_7_plintus.uasset b/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_7_plintus.uasset index b82754f8..46690896 100644 Binary files a/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_7_plintus.uasset and b/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_7_plintus.uasset differ diff --git a/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_8_plintus.uasset b/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_8_plintus.uasset index 845ba379..5cf2169e 100644 Binary files a/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_8_plintus.uasset and b/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_8_plintus.uasset differ diff --git a/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_9_plintus.uasset b/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_9_plintus.uasset index 66ccdaf9..d0d15696 100644 Binary files a/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_9_plintus.uasset and b/Content/Meshes/Interiors/Plintus/Dom_1/Up/SM_dom_1_plintus_top_SM_dom_1_flat_9_plintus.uasset differ diff --git a/Content/Meshes/Interiors/SM_ElevatorLarge_Door001.uasset b/Content/Meshes/Interiors/SM_ElevatorLarge_Door001.uasset index bd69cc23..e5e1e9ca 100644 Binary files a/Content/Meshes/Interiors/SM_ElevatorLarge_Door001.uasset and b/Content/Meshes/Interiors/SM_ElevatorLarge_Door001.uasset differ diff --git a/Content/Meshes/Interiors/SM_Elevator_Outside.uasset b/Content/Meshes/Interiors/SM_Elevator_Outside.uasset index b5c424fd..6b7650ea 100644 Binary files a/Content/Meshes/Interiors/SM_Elevator_Outside.uasset and b/Content/Meshes/Interiors/SM_Elevator_Outside.uasset differ diff --git a/Content/Meshes/Interiors/SM_Parking_Underground_asphalt.uasset b/Content/Meshes/Interiors/SM_Parking_Underground_asphalt.uasset index d0ca4a21..091436a4 100644 Binary files a/Content/Meshes/Interiors/SM_Parking_Underground_asphalt.uasset and b/Content/Meshes/Interiors/SM_Parking_Underground_asphalt.uasset differ diff --git a/Content/Meshes/MAF/MI_RMA_naberejnaya5.uasset b/Content/Meshes/MAF/MI_RMA_naberejnaya5.uasset index 54c38a14..b3fbb148 100644 Binary files a/Content/Meshes/MAF/MI_RMA_naberejnaya5.uasset and b/Content/Meshes/MAF/MI_RMA_naberejnaya5.uasset differ diff --git a/Content/Meshes/MAF/MI_RMA_naberejnaya6.uasset b/Content/Meshes/MAF/MI_RMA_naberejnaya6.uasset index 79e08cd7..39f22728 100644 Binary files a/Content/Meshes/MAF/MI_RMA_naberejnaya6.uasset and b/Content/Meshes/MAF/MI_RMA_naberejnaya6.uasset differ diff --git a/Content/Meshes/MAF/M_Emissive.uasset b/Content/Meshes/MAF/M_Emissive.uasset index c7a6bd6c..0609fabc 100644 Binary files a/Content/Meshes/MAF/M_Emissive.uasset and b/Content/Meshes/MAF/M_Emissive.uasset differ diff --git a/Content/Meshes/MAF/M_MAF.uasset b/Content/Meshes/MAF/M_MAF.uasset index 5a986025..f7e7f02f 100644 Binary files a/Content/Meshes/MAF/M_MAF.uasset and b/Content/Meshes/MAF/M_MAF.uasset differ diff --git a/Content/Meshes/MAF/Skate_park/M_NoRMA_Tile_Master_Inst1.uasset b/Content/Meshes/MAF/Skate_park/M_NoRMA_Tile_Master_Inst1.uasset index ea3a165b..dda824df 100644 Binary files a/Content/Meshes/MAF/Skate_park/M_NoRMA_Tile_Master_Inst1.uasset and b/Content/Meshes/MAF/Skate_park/M_NoRMA_Tile_Master_Inst1.uasset differ diff --git a/Content/Meshes/MAF/Skate_park/M_NoRMA_Tile_Master_Inst2.uasset b/Content/Meshes/MAF/Skate_park/M_NoRMA_Tile_Master_Inst2.uasset index 1ebe790a..5685f8ef 100644 Binary files a/Content/Meshes/MAF/Skate_park/M_NoRMA_Tile_Master_Inst2.uasset and b/Content/Meshes/MAF/Skate_park/M_NoRMA_Tile_Master_Inst2.uasset differ diff --git a/Content/Meshes/MAF/Skate_park/M_NoRMA_Tile_Master_Inst3.uasset b/Content/Meshes/MAF/Skate_park/M_NoRMA_Tile_Master_Inst3.uasset index 4fdc08a9..e4761e18 100644 Binary files a/Content/Meshes/MAF/Skate_park/M_NoRMA_Tile_Master_Inst3.uasset and b/Content/Meshes/MAF/Skate_park/M_NoRMA_Tile_Master_Inst3.uasset differ diff --git a/Content/Meshes/MAF/Skate_park/M_NoRMA_Tile_Master_Inst4.uasset b/Content/Meshes/MAF/Skate_park/M_NoRMA_Tile_Master_Inst4.uasset index 17bd42d4..978c2bd3 100644 Binary files a/Content/Meshes/MAF/Skate_park/M_NoRMA_Tile_Master_Inst4.uasset and b/Content/Meshes/MAF/Skate_park/M_NoRMA_Tile_Master_Inst4.uasset differ diff --git a/Content/Meshes/MAF/Skate_park/M_NoRMA_Tile_Master_Inst5.uasset b/Content/Meshes/MAF/Skate_park/M_NoRMA_Tile_Master_Inst5.uasset index 5e553619..56a43db3 100644 Binary files a/Content/Meshes/MAF/Skate_park/M_NoRMA_Tile_Master_Inst5.uasset and b/Content/Meshes/MAF/Skate_park/M_NoRMA_Tile_Master_Inst5.uasset differ diff --git a/Content/Meshes/MAF/Skate_park/M_NoRMA_Tile_Master_Inst6.uasset b/Content/Meshes/MAF/Skate_park/M_NoRMA_Tile_Master_Inst6.uasset index 9986e3b6..b75e1a24 100644 Binary files a/Content/Meshes/MAF/Skate_park/M_NoRMA_Tile_Master_Inst6.uasset and b/Content/Meshes/MAF/Skate_park/M_NoRMA_Tile_Master_Inst6.uasset differ diff --git a/Content/Meshes/MainBuildings/Fixed/SM_GP4_S01_fixed.uasset b/Content/Meshes/MainBuildings/Fixed/SM_GP4_S01_fixed.uasset index 8e15cc15..8cbf9e00 100644 Binary files a/Content/Meshes/MainBuildings/Fixed/SM_GP4_S01_fixed.uasset and b/Content/Meshes/MainBuildings/Fixed/SM_GP4_S01_fixed.uasset differ diff --git a/Content/Meshes/MainBuildings/Fixed/SM_GP4_S02_fixed.uasset b/Content/Meshes/MainBuildings/Fixed/SM_GP4_S02_fixed.uasset index 15892958..e81f34ea 100644 Binary files a/Content/Meshes/MainBuildings/Fixed/SM_GP4_S02_fixed.uasset and b/Content/Meshes/MainBuildings/Fixed/SM_GP4_S02_fixed.uasset differ diff --git a/Content/Meshes/MainBuildings/Fixed/SM_GP4_S03_fixed.uasset b/Content/Meshes/MainBuildings/Fixed/SM_GP4_S03_fixed.uasset index 8b4d8599..626b145e 100644 Binary files a/Content/Meshes/MainBuildings/Fixed/SM_GP4_S03_fixed.uasset and b/Content/Meshes/MainBuildings/Fixed/SM_GP4_S03_fixed.uasset differ diff --git a/Content/Meshes/MainBuildings/Fixed/SM_GP4_S04_fixed.uasset b/Content/Meshes/MainBuildings/Fixed/SM_GP4_S04_fixed.uasset index d558a500..75120b71 100644 Binary files a/Content/Meshes/MainBuildings/Fixed/SM_GP4_S04_fixed.uasset and b/Content/Meshes/MainBuildings/Fixed/SM_GP4_S04_fixed.uasset differ diff --git a/Content/Meshes/MainBuildings/Fixed/SM_GP4_S05_fixed.uasset b/Content/Meshes/MainBuildings/Fixed/SM_GP4_S05_fixed.uasset index b6f5fb85..e66c2acd 100644 Binary files a/Content/Meshes/MainBuildings/Fixed/SM_GP4_S05_fixed.uasset and b/Content/Meshes/MainBuildings/Fixed/SM_GP4_S05_fixed.uasset differ diff --git a/Content/Meshes/MainBuildings/Fixed_v2/SM_GP4_S01_fixed_2.uasset b/Content/Meshes/MainBuildings/Fixed_v2/SM_GP4_S01_fixed_2.uasset index 69aa6e62..96d9931a 100644 Binary files a/Content/Meshes/MainBuildings/Fixed_v2/SM_GP4_S01_fixed_2.uasset and b/Content/Meshes/MainBuildings/Fixed_v2/SM_GP4_S01_fixed_2.uasset differ diff --git a/Content/Meshes/MainBuildings/Fixed_v2/SM_GP4_S02_fixed_2.uasset b/Content/Meshes/MainBuildings/Fixed_v2/SM_GP4_S02_fixed_2.uasset index d0644ce2..d98d9935 100644 Binary files a/Content/Meshes/MainBuildings/Fixed_v2/SM_GP4_S02_fixed_2.uasset and b/Content/Meshes/MainBuildings/Fixed_v2/SM_GP4_S02_fixed_2.uasset differ diff --git a/Content/Meshes/MainBuildings/Fixed_v2/SM_GP4_S03_fixed_2.uasset b/Content/Meshes/MainBuildings/Fixed_v2/SM_GP4_S03_fixed_2.uasset index 39aa43fe..91930184 100644 Binary files a/Content/Meshes/MainBuildings/Fixed_v2/SM_GP4_S03_fixed_2.uasset and b/Content/Meshes/MainBuildings/Fixed_v2/SM_GP4_S03_fixed_2.uasset differ diff --git a/Content/Meshes/MainBuildings/Fixed_v2/SM_GP4_S04_fixed_2.uasset b/Content/Meshes/MainBuildings/Fixed_v2/SM_GP4_S04_fixed_2.uasset index e3a15218..86be3ce7 100644 Binary files a/Content/Meshes/MainBuildings/Fixed_v2/SM_GP4_S04_fixed_2.uasset and b/Content/Meshes/MainBuildings/Fixed_v2/SM_GP4_S04_fixed_2.uasset differ diff --git a/Content/Meshes/MainBuildings/Fixed_v2/SM_GP4_S05_fixed_2.uasset b/Content/Meshes/MainBuildings/Fixed_v2/SM_GP4_S05_fixed_2.uasset index d8e53845..53338cb9 100644 Binary files a/Content/Meshes/MainBuildings/Fixed_v2/SM_GP4_S05_fixed_2.uasset and b/Content/Meshes/MainBuildings/Fixed_v2/SM_GP4_S05_fixed_2.uasset differ diff --git a/Content/Meshes/MainBuildings/M_Greeds_Inst2.uasset b/Content/Meshes/MainBuildings/M_Greeds_Inst2.uasset index 6fb38d45..c1aaa955 100644 Binary files a/Content/Meshes/MainBuildings/M_Greeds_Inst2.uasset and b/Content/Meshes/MainBuildings/M_Greeds_Inst2.uasset differ diff --git a/Content/Meshes/MainBuildings/M_Greeds_Inst3.uasset b/Content/Meshes/MainBuildings/M_Greeds_Inst3.uasset index 4e4e162c..d16717d4 100644 Binary files a/Content/Meshes/MainBuildings/M_Greeds_Inst3.uasset and b/Content/Meshes/MainBuildings/M_Greeds_Inst3.uasset differ diff --git a/Content/Meshes/Outside/MI_Roof8.uasset b/Content/Meshes/Outside/MI_Roof8.uasset index a8a544ce..3504fbbd 100644 Binary files a/Content/Meshes/Outside/MI_Roof8.uasset and b/Content/Meshes/Outside/MI_Roof8.uasset differ diff --git a/Content/Meshes/Outside/MI_Roof9.uasset b/Content/Meshes/Outside/MI_Roof9.uasset index 016c86d6..54a1f2cf 100644 Binary files a/Content/Meshes/Outside/MI_Roof9.uasset and b/Content/Meshes/Outside/MI_Roof9.uasset differ diff --git a/Content/Meshes/Tree_Crone_2.uasset b/Content/Meshes/Tree_Crone_2.uasset index c46b8070..a0ee0ca4 100644 Binary files a/Content/Meshes/Tree_Crone_2.uasset and b/Content/Meshes/Tree_Crone_2.uasset differ diff --git a/Content/Meshes/Tree_Crone_3.uasset b/Content/Meshes/Tree_Crone_3.uasset index 2d9761c5..c6b60772 100644 Binary files a/Content/Meshes/Tree_Crone_3.uasset and b/Content/Meshes/Tree_Crone_3.uasset differ diff --git a/Content/Meshes/basketball/MI_basketball.uasset b/Content/Meshes/basketball/MI_basketball.uasset index b8af3655..53056a64 100644 Binary files a/Content/Meshes/basketball/MI_basketball.uasset and b/Content/Meshes/basketball/MI_basketball.uasset differ diff --git a/Content/Meshes/generalPlan/M_NoRMA_Tile_Master_Inst1.uasset b/Content/Meshes/generalPlan/M_NoRMA_Tile_Master_Inst1.uasset index 306e928b..213e43bf 100644 Binary files a/Content/Meshes/generalPlan/M_NoRMA_Tile_Master_Inst1.uasset and b/Content/Meshes/generalPlan/M_NoRMA_Tile_Master_Inst1.uasset differ diff --git a/Content/Meshes/generalPlan/M_NoRMA_Tile_Master_Inst2.uasset b/Content/Meshes/generalPlan/M_NoRMA_Tile_Master_Inst2.uasset index a87cb98c..4abceb8e 100644 Binary files a/Content/Meshes/generalPlan/M_NoRMA_Tile_Master_Inst2.uasset and b/Content/Meshes/generalPlan/M_NoRMA_Tile_Master_Inst2.uasset differ diff --git a/Content/Meshes/generalPlan/M_NoRMA_Tile_Master_Inst3.uasset b/Content/Meshes/generalPlan/M_NoRMA_Tile_Master_Inst3.uasset index c3b6fb14..6a278ae0 100644 Binary files a/Content/Meshes/generalPlan/M_NoRMA_Tile_Master_Inst3.uasset and b/Content/Meshes/generalPlan/M_NoRMA_Tile_Master_Inst3.uasset differ diff --git a/Content/Meshes/generalPlan/M_NoRMA_Tile_Master_Inst4.uasset b/Content/Meshes/generalPlan/M_NoRMA_Tile_Master_Inst4.uasset index 7f2549a5..0e480cb5 100644 Binary files a/Content/Meshes/generalPlan/M_NoRMA_Tile_Master_Inst4.uasset and b/Content/Meshes/generalPlan/M_NoRMA_Tile_Master_Inst4.uasset differ diff --git a/Content/Meshes/generalPlan/M_NoRMA_Tile_Master_Inst5.uasset b/Content/Meshes/generalPlan/M_NoRMA_Tile_Master_Inst5.uasset index 4353e0a0..c0d648b8 100644 Binary files a/Content/Meshes/generalPlan/M_NoRMA_Tile_Master_Inst5.uasset and b/Content/Meshes/generalPlan/M_NoRMA_Tile_Master_Inst5.uasset differ diff --git a/Content/MigrateFortis/Blueprints/UI/Materials/FasadHide.uasset b/Content/MigrateFortis/Blueprints/UI/Materials/FasadHide.uasset index 788894a9..1420e49c 100644 Binary files a/Content/MigrateFortis/Blueprints/UI/Materials/FasadHide.uasset and b/Content/MigrateFortis/Blueprints/UI/Materials/FasadHide.uasset differ diff --git a/Content/MigrateFortis/Blueprints/UI/Materials/MF_doorFade.uasset b/Content/MigrateFortis/Blueprints/UI/Materials/MF_doorFade.uasset index 829745c3..f91cc5ab 100644 Binary files a/Content/MigrateFortis/Blueprints/UI/Materials/MF_doorFade.uasset and b/Content/MigrateFortis/Blueprints/UI/Materials/MF_doorFade.uasset differ diff --git a/Content/MigrateFortis/Blueprints/UI/Materials/PointFade.uasset b/Content/MigrateFortis/Blueprints/UI/Materials/PointFade.uasset index 693c5240..6d76f8ab 100644 Binary files a/Content/MigrateFortis/Blueprints/UI/Materials/PointFade.uasset and b/Content/MigrateFortis/Blueprints/UI/Materials/PointFade.uasset differ diff --git a/Content/MigrateFortis/Otrada/Meshes/MOP/MI_MAF_Metall_pruzhinka1.uasset b/Content/MigrateFortis/Otrada/Meshes/MOP/MI_MAF_Metall_pruzhinka1.uasset index f8a4576e..3606350b 100644 Binary files a/Content/MigrateFortis/Otrada/Meshes/MOP/MI_MAF_Metall_pruzhinka1.uasset and b/Content/MigrateFortis/Otrada/Meshes/MOP/MI_MAF_Metall_pruzhinka1.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/COFFEE_BREWER/COFFEE_BREWER_01/SM_coffee_brew_01_body.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/COFFEE_BREWER/COFFEE_BREWER_01/SM_coffee_brew_01_body.uasset index 06b6e8d5..43cf3f82 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/COFFEE_BREWER/COFFEE_BREWER_01/SM_coffee_brew_01_body.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/COFFEE_BREWER/COFFEE_BREWER_01/SM_coffee_brew_01_body.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/DISH_WASHER/DISH_WASHER_01/T_dish_washer_01_patern_D.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/DISH_WASHER/DISH_WASHER_01/T_dish_washer_01_patern_D.uasset index 31d55992..095b5fae 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/DISH_WASHER/DISH_WASHER_01/T_dish_washer_01_patern_D.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/DISH_WASHER/DISH_WASHER_01/T_dish_washer_01_patern_D.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/DISH_WASHER/DISH_WASHER_01/T_dish_washer_01_patern_M.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/DISH_WASHER/DISH_WASHER_01/T_dish_washer_01_patern_M.uasset index 79e9a567..58d71980 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/DISH_WASHER/DISH_WASHER_01/T_dish_washer_01_patern_M.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/DISH_WASHER/DISH_WASHER_01/T_dish_washer_01_patern_M.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/PC/PC_case_01/MI_PC_case_01_fan.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/PC/PC_case_01/MI_PC_case_01_fan.uasset index 9cb43f4a..84289a25 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/PC/PC_case_01/MI_PC_case_01_fan.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/PC/PC_case_01/MI_PC_case_01_fan.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/PC/PC_case_01/T_PC_case_01_mask_D.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/PC/PC_case_01/T_PC_case_01_mask_D.uasset index 4dba9637..eaf25e35 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/PC/PC_case_01/T_PC_case_01_mask_D.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/PC/PC_case_01/T_PC_case_01_mask_D.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/PC/PC_case_01/T_PC_case_01_mask_M.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/PC/PC_case_01/T_PC_case_01_mask_M.uasset index 36c6f5fd..047a04c8 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/PC/PC_case_01/T_PC_case_01_mask_M.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/PC/PC_case_01/T_PC_case_01_mask_M.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/TRASH_BIN/SMART_TRASH_BIN_01/T_smart_trash_bin_01_paper_N.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/TRASH_BIN/SMART_TRASH_BIN_01/T_smart_trash_bin_01_paper_N.uasset index e877e8af..31d873f1 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/TRASH_BIN/SMART_TRASH_BIN_01/T_smart_trash_bin_01_paper_N.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/TRASH_BIN/SMART_TRASH_BIN_01/T_smart_trash_bin_01_paper_N.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/TV/TV_01/SM_TV_01.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/TV/TV_01/SM_TV_01.uasset index 01fa4d62..b55afb7d 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/TV/TV_01/SM_TV_01.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/ELECTRONICS/2_ASSETS/TV/TV_01/SM_TV_01.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Bathroom/SM_BTowel_01.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Bathroom/SM_BTowel_01.uasset index 383bda03..1399fecc 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Bathroom/SM_BTowel_01.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Bathroom/SM_BTowel_01.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/SM_Cloth_02.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/SM_Cloth_02.uasset index 94340281..11439263 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/SM_Cloth_02.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/SM_Cloth_02.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/SM_Cloth_03.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/SM_Cloth_03.uasset index 1386accb..461abec3 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/SM_Cloth_03.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/SM_Cloth_03.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_Art_11.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_Art_11.uasset index f07ccb55..356253d1 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_Art_11.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_Art_11.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_Leather_N.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_Leather_N.uasset index db76392c..f8c130b9 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_Leather_N.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_Leather_N.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_Line.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_Line.uasset index 153e8a06..ffe1319b 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_Line.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_Line.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Book_07.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Book_07.uasset index 3453696b..a3153354 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Book_07.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Book_07.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Book_08.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Book_08.uasset index 2ec3b2b6..907f73f3 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Book_08.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Book_08.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Book_09.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Book_09.uasset index 5ea47924..cb3e28d4 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Book_09.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Book_09.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Book_10.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Book_10.uasset index 7e692bdc..cdbb6560 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Book_10.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Book_10.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Book_11.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Book_11.uasset index 9cf66800..ccf6d021 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Book_11.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Book_11.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Carpet.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Carpet.uasset index d5a6e1dd..299430e4 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Carpet.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Carpet.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Dirt_01.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Dirt_01.uasset index f10bd4e7..0839d4ff 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Dirt_01.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Dirt_01.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Dirt_03.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Dirt_03.uasset index febe0370..94042a1e 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Dirt_03.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Dirt_03.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Dirt_04.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Dirt_04.uasset index ff817c34..f8d62bee 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Dirt_04.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Dirt_04.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Dirt_N.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Dirt_N.uasset index c42b9436..227579f4 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Dirt_N.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Dirt_N.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Line.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Line.uasset index 0ed56596..b049a258 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Line.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Line.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Page_01.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Page_01.uasset index 1f0d9b96..10d59ff8 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Page_01.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Page_01.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Page_02.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Page_02.uasset index 96bd397b..a8770cca 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Page_02.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Page_02.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Page_03.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Page_03.uasset index 123b5958..05da09b0 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Page_03.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Page_03.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Page_04.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Page_04.uasset index 72576bab..b439699d 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Page_04.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Page_04.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Paper.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Paper.uasset index c42610f8..27802132 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Paper.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Paper.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Shelve.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Shelve.uasset index 656058be..6db03c85 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Shelve.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Shelve.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Shelve_R.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Shelve_R.uasset index 11f6a328..84618502 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Shelve_R.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Shelve_R.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Side_Book_01.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Side_Book_01.uasset index 291565a7..97b93e11 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Side_Book_01.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Side_Book_01.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Side_Book_02.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Side_Book_02.uasset index 0c3fc780..96c98d9e 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Side_Book_02.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Side_Book_02.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Side_Fabric_N.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Side_Fabric_N.uasset index cdb57d57..a6853819 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Side_Fabric_N.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Side_Fabric_N.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Wood_01.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Wood_01.uasset index 6356d2a5..48c9aef0 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Wood_01.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Wood_01.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Wood_02.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Wood_02.uasset index 7a994203..7e471a2c 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Wood_02.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Wood_02.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Wood_03.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Wood_03.uasset index 9718d485..b0eefa6a 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Wood_03.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Wood_03.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Wood_03_R.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Wood_03_R.uasset index a45c0e17..290c0781 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Wood_03_R.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Wood_03_R.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Wood_04.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Wood_04.uasset index 8c9731e0..16367c90 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Wood_04.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Wood_04.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Wood_06.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Wood_06.uasset index 43e13688..6a185439 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Wood_06.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_MBed_Wood_06.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_Zipper.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_Zipper.uasset index 9d76fd89..8a70fa6e 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_Zipper.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_01/Textures/T_Zipper.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_02/Textures/T_2Bed_Wood.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_02/Textures/T_2Bed_Wood.uasset index 0fc4f338..e887a434 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_02/Textures/T_2Bed_Wood.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_02/Textures/T_2Bed_Wood.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_02/Textures/T_Keyboard.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_02/Textures/T_Keyboard.uasset index de660f78..dcf635b4 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_02/Textures/T_Keyboard.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_02/Textures/T_Keyboard.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/SM_Chair.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/SM_Chair.uasset index a25c8d8c..3c6953e4 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/SM_Chair.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/SM_Chair.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/SM_Kid_Box.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/SM_Kid_Box.uasset index 991c97bd..0848787a 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/SM_Kid_Box.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/SM_Kid_Box.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_C_01.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_C_01.uasset index a131927b..08643f1d 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_C_01.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_C_01.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_C_02.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_C_02.uasset index 5bb6e177..6b00d698 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_C_02.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_C_02.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_C_03.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_C_03.uasset index 24d5f5a8..a5f4fd27 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_C_03.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_C_03.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_C_04.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_C_04.uasset index c5f35183..5d9d400f 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_C_04.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_C_04.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_C_F_02.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_C_F_02.uasset index 94a19547..ff80285b 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_C_F_02.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_C_F_02.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_C_Map.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_C_Map.uasset index 4001df81..b3fe9343 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_C_Map.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_C_Map.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_Fabric_Normal.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_Fabric_Normal.uasset index 34e642a0..2caafdb2 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_Fabric_Normal.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_Fabric_Normal.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_KidDrawing_01.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_KidDrawing_01.uasset index b2d7bda1..a36c5d11 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_KidDrawing_01.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_KidDrawing_01.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_Kid_Note.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_Kid_Note.uasset index ad366761..12bdf0ae 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_Kid_Note.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_Kid_Note.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_Kid_Note_Side.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_Kid_Note_Side.uasset index 3693bb94..010eb4b4 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_Kid_Note_Side.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_Kid_Note_Side.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_Kid_Owl.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_Kid_Owl.uasset index 341ef405..a2873682 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_Kid_Owl.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_Kid_Owl.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_Kid_Paper.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_Kid_Paper.uasset index c1367af1..1a947ce2 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_Kid_Paper.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_Kid_Paper.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_WrappingPaper_01.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_WrappingPaper_01.uasset index 5134047e..88a19117 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_WrappingPaper_01.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_WrappingPaper_01.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_WrappingPaper_02.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_WrappingPaper_02.uasset index c18c8843..73b70573 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_WrappingPaper_02.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_WrappingPaper_02.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_WrappingPaper_03.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_WrappingPaper_03.uasset index 2f1bfabb..a7186621 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_WrappingPaper_03.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/BedRoom_03/Textures/T_WrappingPaper_03.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/SM_BDecoDeer.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/SM_BDecoDeer.uasset index 1be293d0..0f54e1b3 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/SM_BDecoDeer.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/BedRoom/SM_BDecoDeer.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Beds/SM_Bed_02.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Beds/SM_Bed_02.uasset index a73b01b1..b8a2cfab 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Beds/SM_Bed_02.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Beds/SM_Bed_02.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Decoration/SM_Carpet_1.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Decoration/SM_Carpet_1.uasset index bd9aaa21..ab2d7cff 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Decoration/SM_Carpet_1.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Decoration/SM_Carpet_1.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Decoration/SM_Plant_05.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Decoration/SM_Plant_05.uasset index 1f00dbb2..471ed631 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Decoration/SM_Plant_05.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Decoration/SM_Plant_05.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Dinning/Textures/T_Art_Picture_01.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Dinning/Textures/T_Art_Picture_01.uasset index 45990a61..764771c8 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Dinning/Textures/T_Art_Picture_01.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Dinning/Textures/T_Art_Picture_01.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Dinning/Textures/T_Cactus.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Dinning/Textures/T_Cactus.uasset index c8a701d9..78ea72d0 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Dinning/Textures/T_Cactus.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Dinning/Textures/T_Cactus.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Dinning/Textures/T_Dirt_02.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Dinning/Textures/T_Dirt_02.uasset index 2c40450b..d5cd0c03 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Dinning/Textures/T_Dirt_02.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Dinning/Textures/T_Dirt_02.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Dinning/Textures/T_Grass.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Dinning/Textures/T_Grass.uasset index 11e7033e..b96979ba 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Dinning/Textures/T_Grass.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Dinning/Textures/T_Grass.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Dinning/Textures/T_Scratch.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Dinning/Textures/T_Scratch.uasset index 85ad2a65..a15ebed2 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Dinning/Textures/T_Scratch.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Dinning/Textures/T_Scratch.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/SM_KCoffe.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/SM_KCoffe.uasset index 5dcb2fef..94ead06a 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/SM_KCoffe.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/SM_KCoffe.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/SM_KitchenDecor_01.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/SM_KitchenDecor_01.uasset index 533cdd83..269e2c44 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/SM_KitchenDecor_01.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/SM_KitchenDecor_01.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/SM_Plants_02.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/SM_Plants_02.uasset index a5d533fc..853d77a1 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/SM_Plants_02.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/SM_Plants_02.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/SM_Table_1.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/SM_Table_1.uasset index 382b562e..cad89ca7 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/SM_Table_1.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/SM_Table_1.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Cook.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Cook.uasset index 2141551e..528f9925 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Cook.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Cook.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_chai2.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_chai2.uasset index 578c59a6..fce1cb8b 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_chai2.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_chai2.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_chai_3.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_chai_3.uasset index 4246005f..8db95f74 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_chai_3.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_chai_3.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_chai_4.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_chai_4.uasset index 5ece0684..672a91fb 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_chai_4.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_chai_4.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_kukur.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_kukur.uasset index d2d75b7e..e73657b0 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_kukur.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_kukur.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_mak.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_mak.uasset index 47235e9c..984b04a1 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_mak.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_mak.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_rice2.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_rice2.uasset index 79808e37..2cf5ed75 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_rice2.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_rice2.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_specii.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_specii.uasset index bc94685c..b075d603 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_specii.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_K_specii.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Oven.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Oven.uasset index ad4d4575..f112f756 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Oven.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Oven.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Oven_02.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Oven_02.uasset index ee187dbf..06c50e01 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Oven_02.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Oven_02.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Oven_Coffee.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Oven_Coffee.uasset index 3bf81408..7ed87a1e 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Oven_Coffee.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Oven_Coffee.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Plants_02_Bark.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Plants_02_Bark.uasset index c3509613..180eacf5 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Plants_02_Bark.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Plants_02_Bark.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Plants_02_Cone.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Plants_02_Cone.uasset index f76ca54d..1f7c295e 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Plants_02_Cone.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Plants_02_Cone.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Plants_02_leaf.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Plants_02_leaf.uasset index fa95e148..f1ddd9f3 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Plants_02_leaf.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Kitchen/Textures/T_Plants_02_leaf.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/SM_Deco_05.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/SM_Deco_05.uasset index d66bdded..23876ac6 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/SM_Deco_05.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/SM_Deco_05.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/SM_LBook_016.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/SM_LBook_016.uasset index 65869c40..6511336a 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/SM_LBook_016.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/SM_LBook_016.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/SM_LWall_Deco.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/SM_LWall_Deco.uasset index 82f50ebb..f939d734 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/SM_LWall_Deco.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/SM_LWall_Deco.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Book_Shell.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Book_Shell.uasset index f3382574..df408d7a 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Book_Shell.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Book_Shell.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Book_01.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Book_01.uasset index b9590fc4..78725abe 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Book_01.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Book_01.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Book_02.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Book_02.uasset index 1a4197eb..79986ebb 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Book_02.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Book_02.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Book_03.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Book_03.uasset index dce6ff58..4f6ab06a 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Book_03.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Book_03.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Book_04.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Book_04.uasset index abb46ed0..94944100 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Book_04.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Book_04.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Book_05.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Book_05.uasset index dd2b8fec..b9469a69 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Book_05.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Book_05.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Book_06.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Book_06.uasset index cbfac332..6fbe698a 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Book_06.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Book_06.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Leaf.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Leaf.uasset index 708ebad6..596c1b2e 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Leaf.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Deco_Leaf.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_01.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_01.uasset index 0e675fa0..09fa2eed 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_01.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_01.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_02.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_02.uasset index 111a4e14..993609b8 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_02.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_02.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_03.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_03.uasset index 8f245957..e08ab1cd 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_03.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_03.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_04.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_04.uasset index aa1fc06d..575312c9 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_04.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_04.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_05.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_05.uasset index fbff9b0a..65ffddb6 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_05.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_05.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_06.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_06.uasset index b20ae301..b9847bc3 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_06.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_06.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_07.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_07.uasset index 30fbfd8c..df487f83 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_07.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_07.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_08.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_08.uasset index 478ea45c..40f1ce1e 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_08.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_08.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_09.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_09.uasset index 809c4449..6c44335f 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_09.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_09.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_10.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_10.uasset index e012b4cf..0fe86b13 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_10.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_10.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_11.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_11.uasset index 57fd6961..6a4e0ff3 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_11.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_11.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_13.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_13.uasset index 56f65dae..b2a51021 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_13.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_13.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_17.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_17.uasset index f75cf659..761aff38 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_17.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_17.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_19.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_19.uasset index ef9e3549..91bcd238 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_19.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_19.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_21.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_21.uasset index e636c6af..cd4dc5f3 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_21.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_21.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_22.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_22.uasset index 186b84a7..5b12e430 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_22.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_22.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_23.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_23.uasset index c6ca1f8c..1408742d 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_23.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_23.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_24.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_24.uasset index 7164e293..b5dbe380 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_24.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_24.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_25.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_25.uasset index 3c8330e1..996c11a8 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_25.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_25.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_26.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_26.uasset index c51d439f..96a7683b 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_26.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_26.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_27.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_27.uasset index 459862a2..a0899da6 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_27.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_27.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_28.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_28.uasset index 6f54c3f1..ee2910d4 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_28.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_28.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_29.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_29.uasset index 3b1e917e..425644fd 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_29.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_29.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_30.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_30.uasset index 999e2813..2c8ae240 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_30.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_30.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_31.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_31.uasset index 2785c36e..8c1bbf72 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_31.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_31.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_32.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_32.uasset index 5e5ed183..8787826d 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_32.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_32.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_33.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_33.uasset index cc004635..548c7969 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_33.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_33.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_34.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_34.uasset index 20860939..d78a85c6 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_34.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_34.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_35.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_35.uasset index 3e3d16ae..e13398c2 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_35.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_35.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_36.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_36.uasset index c0da2ac1..585af0db 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_36.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_36.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_37.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_37.uasset index e8ff348b..bffb1e06 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_37.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_37.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_38.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_38.uasset index 7a3036e7..4564a233 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_38.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_38.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_40.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_40.uasset index 49876627..231dbe4d 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_40.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_40.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_41.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_41.uasset index 1ec538c0..75a3850d 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_41.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_41.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_42.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_42.uasset index dfd7b466..8f4e7c4c 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_42.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_42.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_43.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_43.uasset index 94dfbbac..2be57043 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_43.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_43.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_44.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_44.uasset index cb3bbe49..6bc42de3 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_44.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_44.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_45.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_45.uasset index d6de71a8..c647c958 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_45.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_45.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_46.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_46.uasset index 3908c86d..d1227fb1 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_46.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_46.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_47.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_47.uasset index e2f2700f..bddecc40 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_47.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_47.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_48.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_48.uasset index fb81d2b9..c32ad259 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_48.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_48.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_49.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_49.uasset index 9d41ce4f..67155ae5 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_49.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_49.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_50.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_50.uasset index 5ff5ad1a..5f3b0001 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_50.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_50.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_51.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_51.uasset index 311318a6..884892e2 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_51.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_51.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_T_LDC_Book_14.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_T_LDC_Book_14.uasset index dbb3a865..8a670333 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_T_LDC_Book_14.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LDC_Book_T_LDC_Book_14.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LWood_01.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LWood_01.uasset index 025f27a4..d30e2312 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LWood_01.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LWood_01.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LWood_03.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LWood_03.uasset index a39d925c..418cb5de 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LWood_03.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LWood_03.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LWood_R.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LWood_R.uasset index 8079d98d..1f095cc3 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LWood_R.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LWood_R.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LWood_S.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LWood_S.uasset index 950479c7..45676f56 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LWood_S.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_LWood_S.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Marble.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Marble.uasset index 5a079e48..1a5f441e 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Marble.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Marble.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Note_Line.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Note_Line.uasset index bbbba1db..0e90f666 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Note_Line.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Note_Line.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Sofa_N.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Sofa_N.uasset index 095a07dc..70a7d38f 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Sofa_N.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living/Textures/T_Sofa_N.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living_Room/SM_Chair_2.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living_Room/SM_Chair_2.uasset index 44144854..b65576fa 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living_Room/SM_Chair_2.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Living_Room/SM_Chair_2.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Picture/PictureMaterial/T_PictureImages_D.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Picture/PictureMaterial/T_PictureImages_D.uasset index eaa926d2..f5164008 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Picture/PictureMaterial/T_PictureImages_D.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Picture/PictureMaterial/T_PictureImages_D.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Shelvings/SM_Shelving_01.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Shelvings/SM_Shelving_01.uasset index 97cd2078..e7cac34f 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Shelvings/SM_Shelving_01.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Shelvings/SM_Shelving_01.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Shelvings/SM_Shelving_06.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Shelvings/SM_Shelving_06.uasset index 46e61af9..6a166103 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Shelvings/SM_Shelving_06.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Shelvings/SM_Shelving_06.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Shelvings/SM_Shelving_07.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Shelvings/SM_Shelving_07.uasset index 840b39f9..2d837ea4 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Shelvings/SM_Shelving_07.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Shelvings/SM_Shelving_07.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Shelvings/SM_Shelving_08.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Shelvings/SM_Shelving_08.uasset index dfc7748e..d4d30333 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Shelvings/SM_Shelving_08.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Shelvings/SM_Shelving_08.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Shelvings/SM_Shelving_11.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Shelvings/SM_Shelving_11.uasset index 4d3b02fe..9d462118 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Shelvings/SM_Shelving_11.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Shelvings/SM_Shelving_11.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Shelvings/SM_Shelving_13.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Shelvings/SM_Shelving_13.uasset index 9620232b..6668d007 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Shelvings/SM_Shelving_13.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Shelvings/SM_Shelving_13.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Sofas/SM_Sofa_01.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Sofas/SM_Sofa_01.uasset index bc092086..c5ce493c 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Sofas/SM_Sofa_01.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Sofas/SM_Sofa_01.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Tables/SM_GlassTable_01.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Tables/SM_GlassTable_01.uasset index 409e9e6f..e291ea87 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Tables/SM_GlassTable_01.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/FurniturePack/Assets/Furniture/Tables/SM_GlassTable_01.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Materials/M_BathRoom_Towel.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Materials/M_BathRoom_Towel.uasset index b9824ddc..1db9eb4d 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Materials/M_BathRoom_Towel.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Materials/M_BathRoom_Towel.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Meshes/BaseMeshes/SM_Door_Frame_02.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Meshes/BaseMeshes/SM_Door_Frame_02.uasset index 972ee193..9d6888bf 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Meshes/BaseMeshes/SM_Door_Frame_02.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Meshes/BaseMeshes/SM_Door_Frame_02.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Dirt.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Dirt.uasset index f73f6ddb..94db17aa 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Dirt.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Dirt.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Environment.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Environment.uasset index 1b3c23c2..e506b4ef 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Environment.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Environment.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_GoldMetal_R.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_GoldMetal_R.uasset index b885480b..68cb7e0c 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_GoldMetal_R.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_GoldMetal_R.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Wood_01.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Wood_01.uasset index 83d6944f..1b71468c 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Wood_01.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Wood_01.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Wood_04.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Wood_04.uasset index ee7a27c5..876443e9 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Wood_04.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Wood_04.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Wood_07.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Wood_07.uasset index d4b57f1a..0c34a468 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Wood_07.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Wood_07.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Wood_07_N.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Wood_07_N.uasset index 10804486..d39d5294 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Wood_07_N.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Wood_07_N.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Wood_07_R.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Wood_07_R.uasset index f6a12337..5fa6b19d 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Wood_07_R.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/SG_Condominium/Textures/T_Wood_07_R.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Apple_03_D.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Apple_03_D.uasset index 5b3d805b..e19d0d6e 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Apple_03_D.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Apple_03_D.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Carpet_D.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Carpet_D.uasset index f73ae473..12ebdcea 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Carpet_D.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Carpet_D.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Carpet_H.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Carpet_H.uasset index a2350a20..4dadcb70 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Carpet_H.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Carpet_H.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Ceiling_M.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Ceiling_M.uasset index 5e013f46..8bfb4c09 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Ceiling_M.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Ceiling_M.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Fabrics/T_Fabric_Wool_BC.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Fabrics/T_Fabric_Wool_BC.uasset index fe086708..f105de72 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Fabrics/T_Fabric_Wool_BC.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Fabrics/T_Fabric_Wool_BC.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Metal/T_Metal_Walkaway_Opacity.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Metal/T_Metal_Walkaway_Opacity.uasset index 81d034c6..d718e612 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Metal/T_Metal_Walkaway_Opacity.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Metal/T_Metal_Walkaway_Opacity.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Pano_02.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Pano_02.uasset index 159bc4a7..57ec694a 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Pano_02.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/Pano_02.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BCarpet.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BCarpet.uasset index aaea98d9..b0dab226 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BCarpet.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BCarpet.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BClothes.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BClothes.uasset index 7c636dbe..714ddf86 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BClothes.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BClothes.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BClothes_N.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BClothes_N.uasset index fee255d4..fe625bde 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BClothes_N.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BClothes_N.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BFabric.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BFabric.uasset index ac659e2c..fdc90bf5 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BFabric.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BFabric.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BMarble.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BMarble.uasset index 61b0036f..1233b428 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BMarble.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BMarble.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BMarble_N.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BMarble_N.uasset index 3b19cc0f..01e2a927 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BMarble_N.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BMarble_N.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BPattern.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BPattern.uasset index f74d90d0..85a7e044 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BPattern.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BPattern.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BSFabric.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BSFabric.uasset index bdfff7d3..7d8bdf2a 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BSFabric.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BSFabric.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BSFabric_N.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BSFabric_N.uasset index a990e032..2d8a35cd 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BSFabric_N.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BSFabric_N.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BSGlass_N.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BSGlass_N.uasset index 6c7bcfca..6a455703 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BSGlass_N.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BSGlass_N.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Background_BC.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Background_BC.uasset index 572666e7..46e1f744 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Background_BC.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Background_BC.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BathRoom_Towel_N.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BathRoom_Towel_N.uasset index 0ea8e43e..8774287a 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BathRoom_Towel_N.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_BathRoom_Towel_N.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Bath_mosair.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Bath_mosair.uasset index b14aec51..a9a381ce 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Bath_mosair.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Bath_mosair.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Board.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Board.uasset index 712b6410..80a4ad08 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Board.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Board.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Board_B.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Board_B.uasset index d99043c7..1be180af 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Board_B.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Board_B.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_001.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_001.uasset index 47ed8905..bbd888fc 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_001.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_001.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_002.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_002.uasset index 13908538..bc57f3b6 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_002.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_002.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_003.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_003.uasset index 50ce9107..9827d9ed 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_003.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_003.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_004.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_004.uasset index 7c5dae05..97917786 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_004.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_004.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_005.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_005.uasset index 65f523d2..f3e2c8e7 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_005.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_005.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_006.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_006.uasset index b7c15bb0..ce343d3a 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_006.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_006.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_007.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_007.uasset index 942fa12c..cc825aa5 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_007.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_007.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_008.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_008.uasset index 03ade1f8..a8fa80b0 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_008.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_008.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_009.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_009.uasset index 20bc180b..e9ed8809 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_009.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_009.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_010.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_010.uasset index b466b8ac..5592a547 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_010.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_010.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_011.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_011.uasset index 1d4fd77b..a419b9a5 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_011.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_011.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_012.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_012.uasset index fd73b6d0..2ab3ca58 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_012.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_012.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_014.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_014.uasset index 11404212..c4136274 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_014.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_014.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_015.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_015.uasset index e9d6ee0a..65f57655 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_015.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_015.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_016.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_016.uasset index bef7e1bd..88a87c5a 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_016.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_016.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_018.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_018.uasset index c00495ed..5e4773f5 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_018.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_018.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_019.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_019.uasset index 342170eb..824693f5 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_019.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_019.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_020.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_020.uasset index 00200f3f..9b083d4e 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_020.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_020.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_021.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_021.uasset index ab18b74c..bb5cd473 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_021.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_021.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_022.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_022.uasset index 34ba67b5..e07ab79c 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_022.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_022.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_023.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_023.uasset index e336c372..f565093b 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_023.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_023.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_024.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_024.uasset index aa771a3c..eb09d695 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_024.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_024.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_0242.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_0242.uasset index d3d6b704..f70e5d30 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_0242.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_0242.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_0243.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_0243.uasset index 1ddb75ea..8291eeb3 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_0243.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_0243.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_025.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_025.uasset index 8699a2b7..fd8fa806 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_025.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_025.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_026.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_026.uasset index c8be68ed..e93ed004 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_026.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_026.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_027.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_027.uasset index 0d1758e6..3d0a6a74 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_027.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_027.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_028.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_028.uasset index 6e4b93a6..e1ecaf57 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_028.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_028.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_029.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_029.uasset index 739bfdc2..580f0a40 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_029.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_029.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_030.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_030.uasset index 542a0a70..070a64b4 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_030.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_030.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_031.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_031.uasset index cbc55877..1db742a9 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_031.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_031.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_032.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_032.uasset index da7a6cfa..647a369c 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_032.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_032.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_033.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_033.uasset index 530cdf14..ed36a519 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_033.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_033.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_Paper.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_Paper.uasset index 07925552..5b296951 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_Paper.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Book_Paper.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Box_02.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Box_02.uasset index b2a3d12f..ea2bacf6 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Box_02.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Box_02.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Bread.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Bread.uasset index 0a639901..67b6b0f2 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Bread.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Bread.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Bread_B.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Bread_B.uasset index 05be251d..7b877049 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Bread_B.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Bread_B.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Bread_N.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Bread_N.uasset index eae83331..4217b8d6 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Bread_N.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Bread_N.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Carpet.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Carpet.uasset index bfeb8b6f..5361c52f 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Carpet.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Carpet.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Decor_Metal.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Decor_Metal.uasset index f8f87ea3..66019530 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Decor_Metal.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Decor_Metal.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Dirt.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Dirt.uasset index 482ed542..dc6c6bb1 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Dirt.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Dirt.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Dirt_03.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Dirt_03.uasset index 8ab5f048..ebfecaa0 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Dirt_03.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Dirt_03.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Environment.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Environment.uasset index 89100f84..176b7521 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Environment.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Environment.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Floor_Tile.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Floor_Tile.uasset index 40bf9e65..42f6f79c 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Floor_Tile.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Floor_Tile.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Floor_Tile_02.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Floor_Tile_02.uasset index 222bb317..66d5a80f 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Floor_Tile_02.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Floor_Tile_02.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Floor_Tile_02_R.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Floor_Tile_02_R.uasset index 7fae3500..1b21e320 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Floor_Tile_02_R.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Floor_Tile_02_R.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Glass_Dirt.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Glass_Dirt.uasset index 1a94ba72..417352fa 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Glass_Dirt.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Glass_Dirt.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_GoldMetal_R.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_GoldMetal_R.uasset index 0712055c..935a6e91 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_GoldMetal_R.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_GoldMetal_R.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_GreyMarble.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_GreyMarble.uasset index ba62b214..b329b2e3 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_GreyMarble.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_GreyMarble.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KBowl.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KBowl.uasset index b5fef6d1..8d45215a 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KBowl.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KBowl.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KBread_01.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KBread_01.uasset index 992d0f88..e9c4796b 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KBread_01.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KBread_01.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KBread_02.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KBread_02.uasset index 006c3bb7..742c42eb 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KBread_02.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KBread_02.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KCWood_01.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KCWood_01.uasset index 90bcfc5d..c9451a2e 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KCWood_01.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KCWood_01.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KCWood_02.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KCWood_02.uasset index 4dce2107..9140cf29 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KCWood_02.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KCWood_02.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KCWood_03.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KCWood_03.uasset index 6f682fbd..c1233df5 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KCWood_03.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KCWood_03.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KCWood_04.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KCWood_04.uasset index 110bc270..44e5916b 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KCWood_04.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KCWood_04.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KW_03.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KW_03.uasset index 1be56e86..b2b8c0a6 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KW_03.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KW_03.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KW_Coffe.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KW_Coffe.uasset index c622c928..c84fb52b 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KW_Coffe.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_KW_Coffe.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_LDeco_Plants_Grass.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_LDeco_Plants_Grass.uasset index 0c0365ab..f0e83e95 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_LDeco_Plants_Grass.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_LDeco_Plants_Grass.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_LPot_Plants_Cactus.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_LPot_Plants_Cactus.uasset index 0796e438..4e6305c3 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_LPot_Plants_Cactus.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_LPot_Plants_Cactus.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_LPot_Plants_Leaf.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_LPot_Plants_Leaf.uasset index d5bf61d7..89e8e8cc 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_LPot_Plants_Leaf.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_LPot_Plants_Leaf.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_LTD_Leaf.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_LTD_Leaf.uasset index aeec394b..bb0642a1 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_LTD_Leaf.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_LTD_Leaf.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_LTD_Leaf_R.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_LTD_Leaf_R.uasset index 1e68bd6b..a3ba0c99 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_LTD_Leaf_R.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_LTD_Leaf_R.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Leather_DarkBrown.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Leather_DarkBrown.uasset index ed27bf36..e489ddc2 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Leather_DarkBrown.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Leather_DarkBrown.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Leather_DarkBrown_02.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Leather_DarkBrown_02.uasset index 4b6f1677..b2ae9331 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Leather_DarkBrown_02.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Leather_DarkBrown_02.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Leather_DarkBrown_02_N.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Leather_DarkBrown_02_N.uasset index ffff07ca..5d6cc180 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Leather_DarkBrown_02_N.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Leather_DarkBrown_02_N.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Leather_DarkBrown_R.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Leather_DarkBrown_R.uasset index 0396a4a1..3eba6fbc 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Leather_DarkBrown_R.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Leather_DarkBrown_R.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Leather_LightBrown.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Leather_LightBrown.uasset index 80cbb1fc..0594030d 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Leather_LightBrown.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Leather_LightBrown.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Leather_LightBrown_R.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Leather_LightBrown_R.uasset index dead6553..d667d02a 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Leather_LightBrown_R.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Leather_LightBrown_R.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_MBed_Line.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_MBed_Line.uasset index 97d8ea50..7ba72c94 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_MBed_Line.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_MBed_Line.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_MBed_Side_Fabric_N.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_MBed_Side_Fabric_N.uasset index 0de61052..4d50bbb6 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_MBed_Side_Fabric_N.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_MBed_Side_Fabric_N.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Mosair_N.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Mosair_N.uasset index 68739c55..040faec3 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Mosair_N.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Mosair_N.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Rsofa_Fabric.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Rsofa_Fabric.uasset index 9798f050..40ff81d8 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Rsofa_Fabric.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Rsofa_Fabric.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Scratch.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Scratch.uasset index 0d4910ea..71556017 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Scratch.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Scratch.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Sofa_Dirt.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Sofa_Dirt.uasset index 2466a007..e5b241a7 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Sofa_Dirt.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Sofa_Dirt.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Sofa_Fabric.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Sofa_Fabric.uasset index 33121c33..d2768cac 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Sofa_Fabric.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Sofa_Fabric.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Sofa_N.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Sofa_N.uasset index 4aeaf067..38fa29a9 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Sofa_N.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Sofa_N.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_WallPaper.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_WallPaper.uasset index 36e8c2e7..9925b1f2 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_WallPaper.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_WallPaper.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_02.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_02.uasset index f152b4df..5edb1d82 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_02.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_02.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_03.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_03.uasset index 2b9114ab..15a9c216 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_03.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_03.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_03_R.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_03_R.uasset index 6dc817fc..14f79a46 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_03_R.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_03_R.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_04.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_04.uasset index e333f5f1..6597e99e 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_04.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_04.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_07.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_07.uasset index 024ce8f6..710e6e6d 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_07.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_07.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_07_N.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_07_N.uasset index 6ce2cd7f..4334ea0e 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_07_N.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_07_N.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_07_R.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_07_R.uasset index a1e1253b..1f8d6038 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_07_R.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Textures/T_Wood_07_R.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Materials/MI_Emissive_002.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Materials/MI_Emissive_002.uasset index d3e99a1b..3073a691 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Materials/MI_Emissive_002.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Materials/MI_Emissive_002.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Materials/MI_Metal_001_door.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Materials/MI_Metal_001_door.uasset new file mode 100644 index 00000000..dcc55797 Binary files /dev/null and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Materials/MI_Metal_001_door.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Materials/MI_TV_Screen.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Materials/MI_TV_Screen.uasset index 3947d0fa..8e61b756 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Materials/MI_TV_Screen.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Materials/MI_TV_Screen.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Materials/MastersMaterials/M_Emissive.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Materials/MastersMaterials/M_Emissive.uasset index ee3f6f76..c570b401 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Materials/MastersMaterials/M_Emissive.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Materials/MastersMaterials/M_Emissive.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Materials/MastersMaterials/M_Metallic.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Materials/MastersMaterials/M_Metallic.uasset index 8aaae1c1..5b76de2f 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Materials/MastersMaterials/M_Metallic.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Materials/MastersMaterials/M_Metallic.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Bathroom/SM_BathSet_001_A.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Bathroom/SM_BathSet_001_A.uasset index b0d6544b..13160e9b 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Bathroom/SM_BathSet_001_A.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Bathroom/SM_BathSet_001_A.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Bathroom/SM_BathroomSink.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Bathroom/SM_BathroomSink.uasset index 8491ae70..8edc0b4a 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Bathroom/SM_BathroomSink.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Bathroom/SM_BathroomSink.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Bathroom/SM_BathroomSink_001.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Bathroom/SM_BathroomSink_001.uasset index 12a2ddf0..308ecb59 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Bathroom/SM_BathroomSink_001.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Bathroom/SM_BathroomSink_001.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Bathroom/SM_FrameDoorBath_002.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Bathroom/SM_FrameDoorBath_002.uasset index 9cd6bbd2..9fe4e1e7 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Bathroom/SM_FrameDoorBath_002.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Bathroom/SM_FrameDoorBath_002.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Bathroom/SM_Towel_001.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Bathroom/SM_Towel_001.uasset index 6c124d2e..1bdec1f0 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Bathroom/SM_Towel_001.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Bathroom/SM_Towel_001.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Bedroom/SM_OfficeChair_001.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Bedroom/SM_OfficeChair_001.uasset index 4f784eb8..232a712d 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Bedroom/SM_OfficeChair_001.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Bedroom/SM_OfficeChair_001.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Desks/SM_FurnitureDesk_003.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Desks/SM_FurnitureDesk_003.uasset index 82ed8f9b..1932b087 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Desks/SM_FurnitureDesk_003.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Desks/SM_FurnitureDesk_003.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Furniture/SM_Chair_001.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Furniture/SM_Chair_001.uasset index 589f7f73..76772611 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Furniture/SM_Chair_001.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Furniture/SM_Chair_001.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Kitchen/SM_DryDishes.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Kitchen/SM_DryDishes.uasset index 7862e4ce..dfa6b823 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Kitchen/SM_DryDishes.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Kitchen/SM_DryDishes.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Kitchen/SM_Fork.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Kitchen/SM_Fork.uasset index 8e1730fe..e3464e0d 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Kitchen/SM_Fork.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Kitchen/SM_Fork.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Kitchen/SM_Knife.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Kitchen/SM_Knife.uasset index 5995c2a9..c09d3ed7 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Kitchen/SM_Knife.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Kitchen/SM_Knife.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Kitchen/SM_Table_001.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Kitchen/SM_Table_001.uasset index f01ece66..69b19247 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Kitchen/SM_Table_001.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Kitchen/SM_Table_001.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Kitchen/SM_Table_002_A.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Kitchen/SM_Table_002_A.uasset index 4dd57be3..22125bed 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Kitchen/SM_Table_002_A.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Kitchen/SM_Table_002_A.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Kitchen/SM_Table_002_B.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Kitchen/SM_Table_002_B.uasset index 38ca8455..b969b6d6 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Kitchen/SM_Table_002_B.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Kitchen/SM_Table_002_B.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Lamps/SM_Lamp_018.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Lamps/SM_Lamp_018.uasset index e49618d0..dbd33dfa 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Lamps/SM_Lamp_018.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Lamps/SM_Lamp_018.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Lamps/SM_Lamp_020.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Lamps/SM_Lamp_020.uasset index 23717bea..7fae58f7 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Lamps/SM_Lamp_020.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Lamps/SM_Lamp_020.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Lamps/SM_RoofLamp_002.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Lamps/SM_RoofLamp_002.uasset index d8ae1582..fcee63af 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Lamps/SM_RoofLamp_002.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Lamps/SM_RoofLamp_002.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Lamps/SM_RoofLamp_003.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Lamps/SM_RoofLamp_003.uasset index 3819a3e5..4e21e7d9 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Lamps/SM_RoofLamp_003.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Lamps/SM_RoofLamp_003.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Tables/SM_Table_001.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Tables/SM_Table_001.uasset index 35265a7e..64db36b9 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Tables/SM_Table_001.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Meshes/Tables/SM_Table_001.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Textures/Bathroom/T_Normal_TowelTexture_001.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Textures/Bathroom/T_Normal_TowelTexture_001.uasset index 9bdc4118..a70edf6b 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Textures/Bathroom/T_Normal_TowelTexture_001.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Textures/Bathroom/T_Normal_TowelTexture_001.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Textures/Livingroom/T_Albedo_Carpet_003.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Textures/Livingroom/T_Albedo_Carpet_003.uasset index 12cfe74f..303143e6 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Textures/Livingroom/T_Albedo_Carpet_003.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Textures/Livingroom/T_Albedo_Carpet_003.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Textures/T_Albedo_FireTrunk_002.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Textures/T_Albedo_FireTrunk_002.uasset index f900d91a..31b1481f 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Textures/T_Albedo_FireTrunk_002.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Textures/T_Albedo_FireTrunk_002.uasset differ diff --git a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Textures/T_Normal_FireTrunk_001.uasset b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Textures/T_Normal_FireTrunk_001.uasset index 68fbd1a9..d5638ceb 100644 Binary files a/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Textures/T_Normal_FireTrunk_001.uasset and b/Content/MigrateNewFurnitureNikita/Vol2_Unsorted/Unimodels_Department_Vol_1/Textures/T_Normal_FireTrunk_001.uasset differ diff --git a/Content/NikitaMigrate/Furniture/InstanceMaterial/MI_Track_led_light_B.uasset b/Content/NikitaMigrate/Furniture/InstanceMaterial/MI_Track_led_light_B.uasset index ade75038..3f99ad4b 100644 Binary files a/Content/NikitaMigrate/Furniture/InstanceMaterial/MI_Track_led_light_B.uasset and b/Content/NikitaMigrate/Furniture/InstanceMaterial/MI_Track_led_light_B.uasset differ diff --git a/Content/NikitaMigrate/Furniture/MasterMaterial/MM_TileDirt_L.uasset b/Content/NikitaMigrate/Furniture/MasterMaterial/MM_TileDirt_L.uasset index 5fe7ae9d..9d126db6 100644 Binary files a/Content/NikitaMigrate/Furniture/MasterMaterial/MM_TileDirt_L.uasset and b/Content/NikitaMigrate/Furniture/MasterMaterial/MM_TileDirt_L.uasset differ diff --git a/Content/NikitaMigrate/Furniture/MasterMaterial/M_Master_ORM.uasset b/Content/NikitaMigrate/Furniture/MasterMaterial/M_Master_ORM.uasset index 12fd24c3..33e06eb1 100644 Binary files a/Content/NikitaMigrate/Furniture/MasterMaterial/M_Master_ORM.uasset and b/Content/NikitaMigrate/Furniture/MasterMaterial/M_Master_ORM.uasset differ diff --git a/Content/NikitaMigrate/Furniture/Meshes/AIUE_V01_001_Pilow3.uasset b/Content/NikitaMigrate/Furniture/Meshes/AIUE_V01_001_Pilow3.uasset index 257b5c11..e5e39607 100644 Binary files a/Content/NikitaMigrate/Furniture/Meshes/AIUE_V01_001_Pilow3.uasset and b/Content/NikitaMigrate/Furniture/Meshes/AIUE_V01_001_Pilow3.uasset differ diff --git a/Content/NikitaMigrate/Furniture/Meshes/AIUE_V01_004_bedside_shelf_004.uasset b/Content/NikitaMigrate/Furniture/Meshes/AIUE_V01_004_bedside_shelf_004.uasset index 9391d5fa..868633d6 100644 Binary files a/Content/NikitaMigrate/Furniture/Meshes/AIUE_V01_004_bedside_shelf_004.uasset and b/Content/NikitaMigrate/Furniture/Meshes/AIUE_V01_004_bedside_shelf_004.uasset differ diff --git a/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol3_1_mirror_01_0.uasset b/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol3_1_mirror_01_0.uasset index a8b42f7e..963c5bbf 100644 Binary files a/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol3_1_mirror_01_0.uasset and b/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol3_1_mirror_01_0.uasset differ diff --git a/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol4_2_curtain_white_03.uasset b/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol4_2_curtain_white_03.uasset index fa9d0d6a..dad4fc78 100644 Binary files a/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol4_2_curtain_white_03.uasset and b/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol4_2_curtain_white_03.uasset differ diff --git a/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol4_5_Table_C.uasset b/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol4_5_Table_C.uasset index 659f9ba9..84792ece 100644 Binary files a/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol4_5_Table_C.uasset and b/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol4_5_Table_C.uasset differ diff --git a/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol5_3_cloth_068_jacket_v1_0.uasset b/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol5_3_cloth_068_jacket_v1_0.uasset index ec056d1b..93407500 100644 Binary files a/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol5_3_cloth_068_jacket_v1_0.uasset and b/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol5_3_cloth_068_jacket_v1_0.uasset differ diff --git a/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol5_3_cloth_070_shirt_v1_0.uasset b/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol5_3_cloth_070_shirt_v1_0.uasset index f31a0283..55907906 100644 Binary files a/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol5_3_cloth_070_shirt_v1_0.uasset and b/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol5_3_cloth_070_shirt_v1_0.uasset differ diff --git a/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol5_4_bookstand_01.uasset b/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol5_4_bookstand_01.uasset index 3c7a6eed..ca666c8d 100644 Binary files a/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol5_4_bookstand_01.uasset and b/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol5_4_bookstand_01.uasset differ diff --git a/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol5_5_carpet_3_01.uasset b/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol5_5_carpet_3_01.uasset index 84feaaa3..d36e0722 100644 Binary files a/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol5_5_carpet_3_01.uasset and b/Content/NikitaMigrate/Furniture/Meshes/SM_AI_vol5_5_carpet_3_01.uasset differ diff --git a/Content/NikitaMigrate/Furniture/Meshes/SM_Archie_Dining_Table.uasset b/Content/NikitaMigrate/Furniture/Meshes/SM_Archie_Dining_Table.uasset index 5a052b31..5dcae6f8 100644 Binary files a/Content/NikitaMigrate/Furniture/Meshes/SM_Archie_Dining_Table.uasset and b/Content/NikitaMigrate/Furniture/Meshes/SM_Archie_Dining_Table.uasset differ diff --git a/Content/NikitaMigrate/Furniture/Meshes/SM_Books_Softcover.uasset b/Content/NikitaMigrate/Furniture/Meshes/SM_Books_Softcover.uasset index 82542e5b..0ef229a6 100644 Binary files a/Content/NikitaMigrate/Furniture/Meshes/SM_Books_Softcover.uasset and b/Content/NikitaMigrate/Furniture/Meshes/SM_Books_Softcover.uasset differ diff --git a/Content/NikitaMigrate/Furniture/Meshes/SM_Borge_Morgensen_Sofa_UVRESCALE.uasset b/Content/NikitaMigrate/Furniture/Meshes/SM_Borge_Morgensen_Sofa_UVRESCALE.uasset index e0e7f028..4160c32a 100644 Binary files a/Content/NikitaMigrate/Furniture/Meshes/SM_Borge_Morgensen_Sofa_UVRESCALE.uasset and b/Content/NikitaMigrate/Furniture/Meshes/SM_Borge_Morgensen_Sofa_UVRESCALE.uasset differ diff --git a/Content/NikitaMigrate/Furniture/Meshes/SM_Magazine_open3.uasset b/Content/NikitaMigrate/Furniture/Meshes/SM_Magazine_open3.uasset index 4867f63d..45da7230 100644 Binary files a/Content/NikitaMigrate/Furniture/Meshes/SM_Magazine_open3.uasset and b/Content/NikitaMigrate/Furniture/Meshes/SM_Magazine_open3.uasset differ diff --git a/Content/NikitaMigrate/Furniture/Meshes/SM_Magazine_open4.uasset b/Content/NikitaMigrate/Furniture/Meshes/SM_Magazine_open4.uasset index 90d26335..958da0eb 100644 Binary files a/Content/NikitaMigrate/Furniture/Meshes/SM_Magazine_open4.uasset and b/Content/NikitaMigrate/Furniture/Meshes/SM_Magazine_open4.uasset differ diff --git a/Content/NikitaMigrate/Furniture/Meshes/SM_Nightstand_UVNEEDSREBUILD.uasset b/Content/NikitaMigrate/Furniture/Meshes/SM_Nightstand_UVNEEDSREBUILD.uasset index 4cfeda2b..0c71d341 100644 Binary files a/Content/NikitaMigrate/Furniture/Meshes/SM_Nightstand_UVNEEDSREBUILD.uasset and b/Content/NikitaMigrate/Furniture/Meshes/SM_Nightstand_UVNEEDSREBUILD.uasset differ diff --git a/Content/NikitaMigrate/Furniture/Meshes/SM_Poster2.uasset b/Content/NikitaMigrate/Furniture/Meshes/SM_Poster2.uasset index 235bd5cd..cf254368 100644 Binary files a/Content/NikitaMigrate/Furniture/Meshes/SM_Poster2.uasset and b/Content/NikitaMigrate/Furniture/Meshes/SM_Poster2.uasset differ diff --git a/Content/NikitaMigrate/Furniture/Meshes/SM_Shower_90x90_Shower01_low.uasset b/Content/NikitaMigrate/Furniture/Meshes/SM_Shower_90x90_Shower01_low.uasset index 02b37a17..583d5680 100644 Binary files a/Content/NikitaMigrate/Furniture/Meshes/SM_Shower_90x90_Shower01_low.uasset and b/Content/NikitaMigrate/Furniture/Meshes/SM_Shower_90x90_Shower01_low.uasset differ diff --git a/Content/NikitaMigrate/Furniture/Meshes/SM_square_lamp.uasset b/Content/NikitaMigrate/Furniture/Meshes/SM_square_lamp.uasset index 73574eda..5c104e92 100644 Binary files a/Content/NikitaMigrate/Furniture/Meshes/SM_square_lamp.uasset and b/Content/NikitaMigrate/Furniture/Meshes/SM_square_lamp.uasset differ diff --git a/Content/NikitaMigrate/Furniture/Meshes/furniture_Armchair_002_v1_0.uasset b/Content/NikitaMigrate/Furniture/Meshes/furniture_Armchair_002_v1_0.uasset index e3ee6d26..38bec557 100644 Binary files a/Content/NikitaMigrate/Furniture/Meshes/furniture_Armchair_002_v1_0.uasset and b/Content/NikitaMigrate/Furniture/Meshes/furniture_Armchair_002_v1_0.uasset differ diff --git a/Content/NikitaMigrate/Furniture/Meshes/furniture_chair_014_v1_0.uasset b/Content/NikitaMigrate/Furniture/Meshes/furniture_chair_014_v1_0.uasset index 27184f32..60972be1 100644 Binary files a/Content/NikitaMigrate/Furniture/Meshes/furniture_chair_014_v1_0.uasset and b/Content/NikitaMigrate/Furniture/Meshes/furniture_chair_014_v1_0.uasset differ diff --git a/Content/NikitaMigrate/Furniture/Otrada_Movie_Video.uasset b/Content/NikitaMigrate/Furniture/Otrada_Movie_Video.uasset index d620c3cd..fab8051f 100644 Binary files a/Content/NikitaMigrate/Furniture/Otrada_Movie_Video.uasset and b/Content/NikitaMigrate/Furniture/Otrada_Movie_Video.uasset differ diff --git a/Content/NikitaMigrate/Furniture/UI/Materials/FasadHide.uasset b/Content/NikitaMigrate/Furniture/UI/Materials/FasadHide.uasset index 3102fc16..14878212 100644 Binary files a/Content/NikitaMigrate/Furniture/UI/Materials/FasadHide.uasset and b/Content/NikitaMigrate/Furniture/UI/Materials/FasadHide.uasset differ diff --git a/Content/NikitaMigrate/Furniture/UI/Materials/MF_FasadHide.uasset b/Content/NikitaMigrate/Furniture/UI/Materials/MF_FasadHide.uasset index c7e7deac..edd0763f 100644 Binary files a/Content/NikitaMigrate/Furniture/UI/Materials/MF_FasadHide.uasset and b/Content/NikitaMigrate/Furniture/UI/Materials/MF_FasadHide.uasset differ diff --git a/Content/NikitaMigrate/Furniture/UI/Materials/MF_doorFade.uasset b/Content/NikitaMigrate/Furniture/UI/Materials/MF_doorFade.uasset index 04ca0d5f..c44e47b2 100644 Binary files a/Content/NikitaMigrate/Furniture/UI/Materials/MF_doorFade.uasset and b/Content/NikitaMigrate/Furniture/UI/Materials/MF_doorFade.uasset differ diff --git a/Content/NikitaMigrate/Furniture/UI/Materials/PointFade.uasset b/Content/NikitaMigrate/Furniture/UI/Materials/PointFade.uasset index d73ca084..686d4da8 100644 Binary files a/Content/NikitaMigrate/Furniture/UI/Materials/PointFade.uasset and b/Content/NikitaMigrate/Furniture/UI/Materials/PointFade.uasset differ diff --git a/Content/Peoples/Animation/AirSquat_Child_TempMotion.uasset b/Content/Peoples/Animation/AirSquat_Child_TempMotion.uasset new file mode 100644 index 00000000..b8dfb72f Binary files /dev/null and b/Content/Peoples/Animation/AirSquat_Child_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/AirSquat_TempMotion.uasset b/Content/Peoples/Animation/AirSquat_TempMotion.uasset new file mode 100644 index 00000000..6deb4060 Binary files /dev/null and b/Content/Peoples/Animation/AirSquat_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/BicycleCrunch_Child_TempMotion.uasset b/Content/Peoples/Animation/BicycleCrunch_Child_TempMotion.uasset new file mode 100644 index 00000000..cc2b2b0f Binary files /dev/null and b/Content/Peoples/Animation/BicycleCrunch_Child_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/BicycleCrunch_FN_Child_TempMotion.uasset b/Content/Peoples/Animation/BicycleCrunch_FN_Child_TempMotion.uasset new file mode 100644 index 00000000..561b43cb Binary files /dev/null and b/Content/Peoples/Animation/BicycleCrunch_FN_Child_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/BicycleCrunch_FN_TempMotion.uasset b/Content/Peoples/Animation/BicycleCrunch_FN_TempMotion.uasset new file mode 100644 index 00000000..406e8edf Binary files /dev/null and b/Content/Peoples/Animation/BicycleCrunch_FN_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/BicycleCrunch_ST_Child_TempMotion.uasset b/Content/Peoples/Animation/BicycleCrunch_ST_Child_TempMotion.uasset new file mode 100644 index 00000000..f3ada85f Binary files /dev/null and b/Content/Peoples/Animation/BicycleCrunch_ST_Child_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/BicycleCrunch_ST_TempMotion.uasset b/Content/Peoples/Animation/BicycleCrunch_ST_TempMotion.uasset new file mode 100644 index 00000000..4977f088 Binary files /dev/null and b/Content/Peoples/Animation/BicycleCrunch_ST_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/BicycleCrunch_TempMotion.uasset b/Content/Peoples/Animation/BicycleCrunch_TempMotion.uasset new file mode 100644 index 00000000..d012e1bc Binary files /dev/null and b/Content/Peoples/Animation/BicycleCrunch_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/CommunicationChild_01_TempMotion.uasset b/Content/Peoples/Animation/CommunicationChild_01_TempMotion.uasset new file mode 100644 index 00000000..1fd95b1f Binary files /dev/null and b/Content/Peoples/Animation/CommunicationChild_01_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/CommunicationChild_02_TempMotion.uasset b/Content/Peoples/Animation/CommunicationChild_02_TempMotion.uasset new file mode 100644 index 00000000..2c1ffb68 Binary files /dev/null and b/Content/Peoples/Animation/CommunicationChild_02_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/CommunicationShoes_01_TempMotion.uasset b/Content/Peoples/Animation/CommunicationShoes_01_TempMotion.uasset new file mode 100644 index 00000000..f83b6279 Binary files /dev/null and b/Content/Peoples/Animation/CommunicationShoes_01_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/CommunicationShoes_02_TempMotion.uasset b/Content/Peoples/Animation/CommunicationShoes_02_TempMotion.uasset new file mode 100644 index 00000000..edf4f523 Binary files /dev/null and b/Content/Peoples/Animation/CommunicationShoes_02_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/Communication_01_TempMotion.uasset b/Content/Peoples/Animation/Communication_01_TempMotion.uasset new file mode 100644 index 00000000..bced7586 Binary files /dev/null and b/Content/Peoples/Animation/Communication_01_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/Communication_02_TempMotion.uasset b/Content/Peoples/Animation/Communication_02_TempMotion.uasset new file mode 100644 index 00000000..20ad8955 Binary files /dev/null and b/Content/Peoples/Animation/Communication_02_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/Human.uasset b/Content/Peoples/Animation/Human.uasset new file mode 100644 index 00000000..791974f4 Binary files /dev/null and b/Content/Peoples/Animation/Human.uasset differ diff --git a/Content/Peoples/Animation/HumanChild.uasset b/Content/Peoples/Animation/HumanChild.uasset new file mode 100644 index 00000000..0e41afa5 Binary files /dev/null and b/Content/Peoples/Animation/HumanChild.uasset differ diff --git a/Content/Peoples/Animation/HumanChild_PhysicsAsset.uasset b/Content/Peoples/Animation/HumanChild_PhysicsAsset.uasset new file mode 100644 index 00000000..edb6484d Binary files /dev/null and b/Content/Peoples/Animation/HumanChild_PhysicsAsset.uasset differ diff --git a/Content/Peoples/Animation/HumanChild_Skeleton.uasset b/Content/Peoples/Animation/HumanChild_Skeleton.uasset new file mode 100644 index 00000000..7ddb7348 Binary files /dev/null and b/Content/Peoples/Animation/HumanChild_Skeleton.uasset differ diff --git a/Content/Peoples/Animation/HumanChild_Skeleton_AnimBlueprint.uasset b/Content/Peoples/Animation/HumanChild_Skeleton_AnimBlueprint.uasset new file mode 100644 index 00000000..e8a7d47a Binary files /dev/null and b/Content/Peoples/Animation/HumanChild_Skeleton_AnimBlueprint.uasset differ diff --git a/Content/Peoples/Animation/HumanShoes.uasset b/Content/Peoples/Animation/HumanShoes.uasset new file mode 100644 index 00000000..8b75c7d0 Binary files /dev/null and b/Content/Peoples/Animation/HumanShoes.uasset differ diff --git a/Content/Peoples/Animation/HumanShoes_PhysicsAsset.uasset b/Content/Peoples/Animation/HumanShoes_PhysicsAsset.uasset new file mode 100644 index 00000000..45a35fcf Binary files /dev/null and b/Content/Peoples/Animation/HumanShoes_PhysicsAsset.uasset differ diff --git a/Content/Peoples/Animation/HumanShoes_Skeleton.uasset b/Content/Peoples/Animation/HumanShoes_Skeleton.uasset new file mode 100644 index 00000000..0bf0aea2 Binary files /dev/null and b/Content/Peoples/Animation/HumanShoes_Skeleton.uasset differ diff --git a/Content/Peoples/Animation/HumanShoes_Skeleton_AnimBlueprint.uasset b/Content/Peoples/Animation/HumanShoes_Skeleton_AnimBlueprint.uasset new file mode 100644 index 00000000..5d40a750 Binary files /dev/null and b/Content/Peoples/Animation/HumanShoes_Skeleton_AnimBlueprint.uasset differ diff --git a/Content/Peoples/Animation/Human_PhysicsAsset.uasset b/Content/Peoples/Animation/Human_PhysicsAsset.uasset new file mode 100644 index 00000000..08f9fd33 Binary files /dev/null and b/Content/Peoples/Animation/Human_PhysicsAsset.uasset differ diff --git a/Content/Peoples/Animation/Human_Skeleton.uasset b/Content/Peoples/Animation/Human_Skeleton.uasset new file mode 100644 index 00000000..4e0d7108 Binary files /dev/null and b/Content/Peoples/Animation/Human_Skeleton.uasset differ diff --git a/Content/Peoples/Animation/Human_Skeleton_AnimBlueprint.uasset b/Content/Peoples/Animation/Human_Skeleton_AnimBlueprint.uasset new file mode 100644 index 00000000..8c7fbdcf Binary files /dev/null and b/Content/Peoples/Animation/Human_Skeleton_AnimBlueprint.uasset differ diff --git a/Content/Peoples/Animation/Human_Skeleton_Montage_bycicle.uasset b/Content/Peoples/Animation/Human_Skeleton_Montage_bycicle.uasset new file mode 100644 index 00000000..fe59f4a4 Binary files /dev/null and b/Content/Peoples/Animation/Human_Skeleton_Montage_bycicle.uasset differ diff --git a/Content/Peoples/Animation/Human_Skeleton_Montage_pushUp.uasset b/Content/Peoples/Animation/Human_Skeleton_Montage_pushUp.uasset new file mode 100644 index 00000000..2303c7a9 Binary files /dev/null and b/Content/Peoples/Animation/Human_Skeleton_Montage_pushUp.uasset differ diff --git a/Content/Peoples/Animation/PushUp_Child_TempMotion.uasset b/Content/Peoples/Animation/PushUp_Child_TempMotion.uasset new file mode 100644 index 00000000..8fa09702 Binary files /dev/null and b/Content/Peoples/Animation/PushUp_Child_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/PushUp_FN_Child_TempMotion.uasset b/Content/Peoples/Animation/PushUp_FN_Child_TempMotion.uasset new file mode 100644 index 00000000..f2b1e9cf Binary files /dev/null and b/Content/Peoples/Animation/PushUp_FN_Child_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/PushUp_FN_TempMotion.uasset b/Content/Peoples/Animation/PushUp_FN_TempMotion.uasset new file mode 100644 index 00000000..870f1e1f Binary files /dev/null and b/Content/Peoples/Animation/PushUp_FN_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/PushUp_ST_Child_TempMotion.uasset b/Content/Peoples/Animation/PushUp_ST_Child_TempMotion.uasset new file mode 100644 index 00000000..edd77631 Binary files /dev/null and b/Content/Peoples/Animation/PushUp_ST_Child_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/PushUp_ST_TempMotion.uasset b/Content/Peoples/Animation/PushUp_ST_TempMotion.uasset new file mode 100644 index 00000000..bea787cb Binary files /dev/null and b/Content/Peoples/Animation/PushUp_ST_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/PushUp_TempMotion.uasset b/Content/Peoples/Animation/PushUp_TempMotion.uasset new file mode 100644 index 00000000..e0a2d0da Binary files /dev/null and b/Content/Peoples/Animation/PushUp_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/RunChild_TempMotion.uasset b/Content/Peoples/Animation/RunChild_TempMotion.uasset new file mode 100644 index 00000000..edd2a211 Binary files /dev/null and b/Content/Peoples/Animation/RunChild_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/Run_TempMotion.uasset b/Content/Peoples/Animation/Run_TempMotion.uasset new file mode 100644 index 00000000..e33f450c Binary files /dev/null and b/Content/Peoples/Animation/Run_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/SitChild_TempMotion.uasset b/Content/Peoples/Animation/SitChild_TempMotion.uasset new file mode 100644 index 00000000..149ef875 Binary files /dev/null and b/Content/Peoples/Animation/SitChild_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/SitShoes_TempMotion.uasset b/Content/Peoples/Animation/SitShoes_TempMotion.uasset new file mode 100644 index 00000000..f2c6772f Binary files /dev/null and b/Content/Peoples/Animation/SitShoes_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/Sit_TempMotion.uasset b/Content/Peoples/Animation/Sit_TempMotion.uasset new file mode 100644 index 00000000..64a52dcf Binary files /dev/null and b/Content/Peoples/Animation/Sit_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/StandingChild_02_TempMotion.uasset b/Content/Peoples/Animation/StandingChild_02_TempMotion.uasset new file mode 100644 index 00000000..35d84ba9 Binary files /dev/null and b/Content/Peoples/Animation/StandingChild_02_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/StandingChild_TempMotion.uasset b/Content/Peoples/Animation/StandingChild_TempMotion.uasset new file mode 100644 index 00000000..347b2e2c Binary files /dev/null and b/Content/Peoples/Animation/StandingChild_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/StandingShoes_02_TempMotion.uasset b/Content/Peoples/Animation/StandingShoes_02_TempMotion.uasset new file mode 100644 index 00000000..a1bf2000 Binary files /dev/null and b/Content/Peoples/Animation/StandingShoes_02_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/StandingShoes_TempMotion.uasset b/Content/Peoples/Animation/StandingShoes_TempMotion.uasset new file mode 100644 index 00000000..c20aa0ff Binary files /dev/null and b/Content/Peoples/Animation/StandingShoes_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/Standing_02_TempMotion.uasset b/Content/Peoples/Animation/Standing_02_TempMotion.uasset new file mode 100644 index 00000000..0cf653b2 Binary files /dev/null and b/Content/Peoples/Animation/Standing_02_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/Standing_TempMotion.uasset b/Content/Peoples/Animation/Standing_TempMotion.uasset new file mode 100644 index 00000000..cb15f75d Binary files /dev/null and b/Content/Peoples/Animation/Standing_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/WalkChild_TempMotion.uasset b/Content/Peoples/Animation/WalkChild_TempMotion.uasset new file mode 100644 index 00000000..11605f6f Binary files /dev/null and b/Content/Peoples/Animation/WalkChild_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/WalkFemaleChild_TempMotion.uasset b/Content/Peoples/Animation/WalkFemaleChild_TempMotion.uasset new file mode 100644 index 00000000..18316b4e Binary files /dev/null and b/Content/Peoples/Animation/WalkFemaleChild_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/WalkFemale_TempMotion.uasset b/Content/Peoples/Animation/WalkFemale_TempMotion.uasset new file mode 100644 index 00000000..9278e149 Binary files /dev/null and b/Content/Peoples/Animation/WalkFemale_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/WalkShoes_TempMotion.uasset b/Content/Peoples/Animation/WalkShoes_TempMotion.uasset new file mode 100644 index 00000000..d289dd8e Binary files /dev/null and b/Content/Peoples/Animation/WalkShoes_TempMotion.uasset differ diff --git a/Content/Peoples/Animation/Walk_TempMotion.uasset b/Content/Peoples/Animation/Walk_TempMotion.uasset new file mode 100644 index 00000000..c661b4f1 Binary files /dev/null and b/Content/Peoples/Animation/Walk_TempMotion.uasset differ diff --git a/Content/Peoples/Boy_01/Materials/SM_Boy_01/3_meshes_Merge_Inst.uasset b/Content/Peoples/Boy_01/Materials/SM_Boy_01/3_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..bb034fcb Binary files /dev/null and b/Content/Peoples/Boy_01/Materials/SM_Boy_01/3_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Boy_01/Materials/SM_Boy_01/4_meshes_Merge_Inst.uasset b/Content/Peoples/Boy_01/Materials/SM_Boy_01/4_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..ca863daf Binary files /dev/null and b/Content/Peoples/Boy_01/Materials/SM_Boy_01/4_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Boy_01/Materials/SM_Boy_01/hair002_Merge_Inst.uasset b/Content/Peoples/Boy_01/Materials/SM_Boy_01/hair002_Merge_Inst.uasset new file mode 100644 index 00000000..42e7487b Binary files /dev/null and b/Content/Peoples/Boy_01/Materials/SM_Boy_01/hair002_Merge_Inst.uasset differ diff --git a/Content/Peoples/Boy_01/SM_Boy_01.uasset b/Content/Peoples/Boy_01/SM_Boy_01.uasset new file mode 100644 index 00000000..e252c8a6 Binary files /dev/null and b/Content/Peoples/Boy_01/SM_Boy_01.uasset differ diff --git a/Content/Peoples/Boy_01/SM_Boy_01_PhysicsAsset.uasset b/Content/Peoples/Boy_01/SM_Boy_01_PhysicsAsset.uasset new file mode 100644 index 00000000..9ded6191 Binary files /dev/null and b/Content/Peoples/Boy_01/SM_Boy_01_PhysicsAsset.uasset differ diff --git a/Content/Peoples/Boy_01/SM_Boy_01_fbm/3_meshes_Merge_Diffuse.uasset b/Content/Peoples/Boy_01/SM_Boy_01_fbm/3_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..6f25992e Binary files /dev/null and b/Content/Peoples/Boy_01/SM_Boy_01_fbm/3_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Boy_01/SM_Boy_01_fbm/3_meshes_Merge_Normal.uasset b/Content/Peoples/Boy_01/SM_Boy_01_fbm/3_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..9947506d Binary files /dev/null and b/Content/Peoples/Boy_01/SM_Boy_01_fbm/3_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Boy_01/SM_Boy_01_fbm/3_meshes_Merge_Opacity.uasset b/Content/Peoples/Boy_01/SM_Boy_01_fbm/3_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..28ecedee Binary files /dev/null and b/Content/Peoples/Boy_01/SM_Boy_01_fbm/3_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Boy_01/SM_Boy_01_fbm/4_meshes_Merge_Diffuse.uasset b/Content/Peoples/Boy_01/SM_Boy_01_fbm/4_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..8bb5415f Binary files /dev/null and b/Content/Peoples/Boy_01/SM_Boy_01_fbm/4_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Boy_01/SM_Boy_01_fbm/4_meshes_Merge_Normal.uasset b/Content/Peoples/Boy_01/SM_Boy_01_fbm/4_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..5fd9a2dd Binary files /dev/null and b/Content/Peoples/Boy_01/SM_Boy_01_fbm/4_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Boy_01/SM_Boy_01_fbm/4_meshes_Merge_Opacity.uasset b/Content/Peoples/Boy_01/SM_Boy_01_fbm/4_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..4912140f Binary files /dev/null and b/Content/Peoples/Boy_01/SM_Boy_01_fbm/4_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Boy_01/SM_Boy_01_fbm/hair002_Merge_Diffuse.uasset b/Content/Peoples/Boy_01/SM_Boy_01_fbm/hair002_Merge_Diffuse.uasset new file mode 100644 index 00000000..174d7127 Binary files /dev/null and b/Content/Peoples/Boy_01/SM_Boy_01_fbm/hair002_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Boy_01/SM_Boy_01_fbm/hair002_Merge_Opacity.uasset b/Content/Peoples/Boy_01/SM_Boy_01_fbm/hair002_Merge_Opacity.uasset new file mode 100644 index 00000000..5873fd94 Binary files /dev/null and b/Content/Peoples/Boy_01/SM_Boy_01_fbm/hair002_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Boy_01/textures/SM_Boy_01/3_meshes_Merge_Glow.uasset b/Content/Peoples/Boy_01/textures/SM_Boy_01/3_meshes_Merge_Glow.uasset new file mode 100644 index 00000000..27563094 Binary files /dev/null and b/Content/Peoples/Boy_01/textures/SM_Boy_01/3_meshes_Merge_Glow.uasset differ diff --git a/Content/Peoples/Boy_01/textures/SM_Boy_01/3_meshes_Merge_ORM.uasset b/Content/Peoples/Boy_01/textures/SM_Boy_01/3_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..663f262e Binary files /dev/null and b/Content/Peoples/Boy_01/textures/SM_Boy_01/3_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Boy_01/textures/SM_Boy_01/4_meshes_Merge_ORM.uasset b/Content/Peoples/Boy_01/textures/SM_Boy_01/4_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..eefa8cfb Binary files /dev/null and b/Content/Peoples/Boy_01/textures/SM_Boy_01/4_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Boy_01/textures/SM_Boy_01/4_meshes_Merge_ResourceMap_Position.uasset b/Content/Peoples/Boy_01/textures/SM_Boy_01/4_meshes_Merge_ResourceMap_Position.uasset new file mode 100644 index 00000000..dc256aef Binary files /dev/null and b/Content/Peoples/Boy_01/textures/SM_Boy_01/4_meshes_Merge_ResourceMap_Position.uasset differ diff --git a/Content/Peoples/Boy_01/textures/SM_Boy_01/4_meshes_Merge_ResourceMap_WSNormal.uasset b/Content/Peoples/Boy_01/textures/SM_Boy_01/4_meshes_Merge_ResourceMap_WSNormal.uasset new file mode 100644 index 00000000..67709028 Binary files /dev/null and b/Content/Peoples/Boy_01/textures/SM_Boy_01/4_meshes_Merge_ResourceMap_WSNormal.uasset differ diff --git a/Content/Peoples/Boy_01/textures/SM_Boy_01/hair002_Merge_ORM.uasset b/Content/Peoples/Boy_01/textures/SM_Boy_01/hair002_Merge_ORM.uasset new file mode 100644 index 00000000..f1a0721d Binary files /dev/null and b/Content/Peoples/Boy_01/textures/SM_Boy_01/hair002_Merge_ORM.uasset differ diff --git a/Content/Peoples/Boy_01/textures/SM_Boy_01/hair002_Merge_blend_multiply.uasset b/Content/Peoples/Boy_01/textures/SM_Boy_01/hair002_Merge_blend_multiply.uasset new file mode 100644 index 00000000..afc39988 Binary files /dev/null and b/Content/Peoples/Boy_01/textures/SM_Boy_01/hair002_Merge_blend_multiply.uasset differ diff --git a/Content/Peoples/Boy_02/Materials/SM_Boy_02/4_meshes_Merge_0_Inst.uasset b/Content/Peoples/Boy_02/Materials/SM_Boy_02/4_meshes_Merge_0_Inst.uasset new file mode 100644 index 00000000..386bbdca Binary files /dev/null and b/Content/Peoples/Boy_02/Materials/SM_Boy_02/4_meshes_Merge_0_Inst.uasset differ diff --git a/Content/Peoples/Boy_02/Materials/SM_Boy_02/4_meshes_Merge_Inst.uasset b/Content/Peoples/Boy_02/Materials/SM_Boy_02/4_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..4b2be1ba Binary files /dev/null and b/Content/Peoples/Boy_02/Materials/SM_Boy_02/4_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Boy_02/Materials/SM_Boy_02/hair002_Merge_Inst.uasset b/Content/Peoples/Boy_02/Materials/SM_Boy_02/hair002_Merge_Inst.uasset new file mode 100644 index 00000000..fe8bed30 Binary files /dev/null and b/Content/Peoples/Boy_02/Materials/SM_Boy_02/hair002_Merge_Inst.uasset differ diff --git a/Content/Peoples/Boy_02/SM_Boy_02.uasset b/Content/Peoples/Boy_02/SM_Boy_02.uasset new file mode 100644 index 00000000..3d4d1544 Binary files /dev/null and b/Content/Peoples/Boy_02/SM_Boy_02.uasset differ diff --git a/Content/Peoples/Boy_02/SM_Boy_02_PhysicsAsset.uasset b/Content/Peoples/Boy_02/SM_Boy_02_PhysicsAsset.uasset new file mode 100644 index 00000000..8ff88359 Binary files /dev/null and b/Content/Peoples/Boy_02/SM_Boy_02_PhysicsAsset.uasset differ diff --git a/Content/Peoples/Boy_02/SM_Boy_02_fbm/4_meshes_Merge_0_Diffuse.uasset b/Content/Peoples/Boy_02/SM_Boy_02_fbm/4_meshes_Merge_0_Diffuse.uasset new file mode 100644 index 00000000..3a3ba449 Binary files /dev/null and b/Content/Peoples/Boy_02/SM_Boy_02_fbm/4_meshes_Merge_0_Diffuse.uasset differ diff --git a/Content/Peoples/Boy_02/SM_Boy_02_fbm/4_meshes_Merge_0_Normal.uasset b/Content/Peoples/Boy_02/SM_Boy_02_fbm/4_meshes_Merge_0_Normal.uasset new file mode 100644 index 00000000..3275cdb2 Binary files /dev/null and b/Content/Peoples/Boy_02/SM_Boy_02_fbm/4_meshes_Merge_0_Normal.uasset differ diff --git a/Content/Peoples/Boy_02/SM_Boy_02_fbm/4_meshes_Merge_0_Opacity.uasset b/Content/Peoples/Boy_02/SM_Boy_02_fbm/4_meshes_Merge_0_Opacity.uasset new file mode 100644 index 00000000..a453b669 Binary files /dev/null and b/Content/Peoples/Boy_02/SM_Boy_02_fbm/4_meshes_Merge_0_Opacity.uasset differ diff --git a/Content/Peoples/Boy_02/SM_Boy_02_fbm/4_meshes_Merge_Diffuse.uasset b/Content/Peoples/Boy_02/SM_Boy_02_fbm/4_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..8596f8c8 Binary files /dev/null and b/Content/Peoples/Boy_02/SM_Boy_02_fbm/4_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Boy_02/SM_Boy_02_fbm/4_meshes_Merge_Normal.uasset b/Content/Peoples/Boy_02/SM_Boy_02_fbm/4_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..5bae8860 Binary files /dev/null and b/Content/Peoples/Boy_02/SM_Boy_02_fbm/4_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Boy_02/SM_Boy_02_fbm/4_meshes_Merge_Opacity.uasset b/Content/Peoples/Boy_02/SM_Boy_02_fbm/4_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..c74f91ed Binary files /dev/null and b/Content/Peoples/Boy_02/SM_Boy_02_fbm/4_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Boy_02/SM_Boy_02_fbm/5_meshes_Merge_Diffuse.uasset b/Content/Peoples/Boy_02/SM_Boy_02_fbm/5_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..93101dab Binary files /dev/null and b/Content/Peoples/Boy_02/SM_Boy_02_fbm/5_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Boy_02/SM_Boy_02_fbm/5_meshes_Merge_Normal.uasset b/Content/Peoples/Boy_02/SM_Boy_02_fbm/5_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..980d7f2c Binary files /dev/null and b/Content/Peoples/Boy_02/SM_Boy_02_fbm/5_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Boy_02/SM_Boy_02_fbm/5_meshes_Merge_Opacity.uasset b/Content/Peoples/Boy_02/SM_Boy_02_fbm/5_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..089aec5f Binary files /dev/null and b/Content/Peoples/Boy_02/SM_Boy_02_fbm/5_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Boy_02/SM_Boy_02_fbm/5_meshes_Merge_Specular.uasset b/Content/Peoples/Boy_02/SM_Boy_02_fbm/5_meshes_Merge_Specular.uasset new file mode 100644 index 00000000..5b4baf23 Binary files /dev/null and b/Content/Peoples/Boy_02/SM_Boy_02_fbm/5_meshes_Merge_Specular.uasset differ diff --git a/Content/Peoples/Boy_02/SM_Boy_02_fbm/Classic_side_part_0__Merge_Diffuse.uasset b/Content/Peoples/Boy_02/SM_Boy_02_fbm/Classic_side_part_0__Merge_Diffuse.uasset new file mode 100644 index 00000000..7665dd30 Binary files /dev/null and b/Content/Peoples/Boy_02/SM_Boy_02_fbm/Classic_side_part_0__Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Boy_02/SM_Boy_02_fbm/Classic_side_part_0__Merge_Opacity.uasset b/Content/Peoples/Boy_02/SM_Boy_02_fbm/Classic_side_part_0__Merge_Opacity.uasset new file mode 100644 index 00000000..c5fbd5c8 Binary files /dev/null and b/Content/Peoples/Boy_02/SM_Boy_02_fbm/Classic_side_part_0__Merge_Opacity.uasset differ diff --git a/Content/Peoples/Boy_02/SM_Boy_02_fbm/hair002_Merge_Diffuse.uasset b/Content/Peoples/Boy_02/SM_Boy_02_fbm/hair002_Merge_Diffuse.uasset new file mode 100644 index 00000000..6f40bfbd Binary files /dev/null and b/Content/Peoples/Boy_02/SM_Boy_02_fbm/hair002_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Boy_02/SM_Boy_02_fbm/hair002_Merge_Opacity.uasset b/Content/Peoples/Boy_02/SM_Boy_02_fbm/hair002_Merge_Opacity.uasset new file mode 100644 index 00000000..3dd67dab Binary files /dev/null and b/Content/Peoples/Boy_02/SM_Boy_02_fbm/hair002_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Boy_02/textures/SM_Boy_02/4_meshes_Merge_0_ORM.uasset b/Content/Peoples/Boy_02/textures/SM_Boy_02/4_meshes_Merge_0_ORM.uasset new file mode 100644 index 00000000..22118133 Binary files /dev/null and b/Content/Peoples/Boy_02/textures/SM_Boy_02/4_meshes_Merge_0_ORM.uasset differ diff --git a/Content/Peoples/Boy_02/textures/SM_Boy_02/4_meshes_Merge_ORM.uasset b/Content/Peoples/Boy_02/textures/SM_Boy_02/4_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..e56bd5c9 Binary files /dev/null and b/Content/Peoples/Boy_02/textures/SM_Boy_02/4_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Boy_02/textures/SM_Boy_02/4_meshes_Merge_ResourceMap_Position.uasset b/Content/Peoples/Boy_02/textures/SM_Boy_02/4_meshes_Merge_ResourceMap_Position.uasset new file mode 100644 index 00000000..c2760fa2 Binary files /dev/null and b/Content/Peoples/Boy_02/textures/SM_Boy_02/4_meshes_Merge_ResourceMap_Position.uasset differ diff --git a/Content/Peoples/Boy_02/textures/SM_Boy_02/4_meshes_Merge_ResourceMap_WSNormal.uasset b/Content/Peoples/Boy_02/textures/SM_Boy_02/4_meshes_Merge_ResourceMap_WSNormal.uasset new file mode 100644 index 00000000..6900af53 Binary files /dev/null and b/Content/Peoples/Boy_02/textures/SM_Boy_02/4_meshes_Merge_ResourceMap_WSNormal.uasset differ diff --git a/Content/Peoples/Boy_02/textures/SM_Boy_02/Classic_side_part_0__Merge_ORM.uasset b/Content/Peoples/Boy_02/textures/SM_Boy_02/Classic_side_part_0__Merge_ORM.uasset new file mode 100644 index 00000000..a1c184e8 Binary files /dev/null and b/Content/Peoples/Boy_02/textures/SM_Boy_02/Classic_side_part_0__Merge_ORM.uasset differ diff --git a/Content/Peoples/Boy_02/textures/SM_Boy_02/hair002_Merge_ORM.uasset b/Content/Peoples/Boy_02/textures/SM_Boy_02/hair002_Merge_ORM.uasset new file mode 100644 index 00000000..c80f3eb8 Binary files /dev/null and b/Content/Peoples/Boy_02/textures/SM_Boy_02/hair002_Merge_ORM.uasset differ diff --git a/Content/Peoples/Boy_02/textures/SM_Boy_02/hair002_Merge_blend_multiply.uasset b/Content/Peoples/Boy_02/textures/SM_Boy_02/hair002_Merge_blend_multiply.uasset new file mode 100644 index 00000000..823b030e Binary files /dev/null and b/Content/Peoples/Boy_02/textures/SM_Boy_02/hair002_Merge_blend_multiply.uasset differ diff --git a/Content/Peoples/Boy_03/Materials/SM_Boy_03/4_meshes_Merge_0_Inst.uasset b/Content/Peoples/Boy_03/Materials/SM_Boy_03/4_meshes_Merge_0_Inst.uasset new file mode 100644 index 00000000..7c147bab Binary files /dev/null and b/Content/Peoples/Boy_03/Materials/SM_Boy_03/4_meshes_Merge_0_Inst.uasset differ diff --git a/Content/Peoples/Boy_03/Materials/SM_Boy_03/4_meshes_Merge_Inst.uasset b/Content/Peoples/Boy_03/Materials/SM_Boy_03/4_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..200cab17 Binary files /dev/null and b/Content/Peoples/Boy_03/Materials/SM_Boy_03/4_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Boy_03/Materials/SM_Boy_03/Classic_side_part_0__Merge_Inst.uasset b/Content/Peoples/Boy_03/Materials/SM_Boy_03/Classic_side_part_0__Merge_Inst.uasset new file mode 100644 index 00000000..968dfa13 Binary files /dev/null and b/Content/Peoples/Boy_03/Materials/SM_Boy_03/Classic_side_part_0__Merge_Inst.uasset differ diff --git a/Content/Peoples/Boy_03/SM_Boy_03.uasset b/Content/Peoples/Boy_03/SM_Boy_03.uasset new file mode 100644 index 00000000..92d3dbac Binary files /dev/null and b/Content/Peoples/Boy_03/SM_Boy_03.uasset differ diff --git a/Content/Peoples/Boy_03/SM_Boy_03_PhysicsAsset.uasset b/Content/Peoples/Boy_03/SM_Boy_03_PhysicsAsset.uasset new file mode 100644 index 00000000..27f0df31 Binary files /dev/null and b/Content/Peoples/Boy_03/SM_Boy_03_PhysicsAsset.uasset differ diff --git a/Content/Peoples/Boy_03/SM_Boy_03_fbm/4_meshes_Merge_0_Diffuse.uasset b/Content/Peoples/Boy_03/SM_Boy_03_fbm/4_meshes_Merge_0_Diffuse.uasset new file mode 100644 index 00000000..5a14525d Binary files /dev/null and b/Content/Peoples/Boy_03/SM_Boy_03_fbm/4_meshes_Merge_0_Diffuse.uasset differ diff --git a/Content/Peoples/Boy_03/SM_Boy_03_fbm/4_meshes_Merge_0_Normal.uasset b/Content/Peoples/Boy_03/SM_Boy_03_fbm/4_meshes_Merge_0_Normal.uasset new file mode 100644 index 00000000..509794b0 Binary files /dev/null and b/Content/Peoples/Boy_03/SM_Boy_03_fbm/4_meshes_Merge_0_Normal.uasset differ diff --git a/Content/Peoples/Boy_03/SM_Boy_03_fbm/4_meshes_Merge_0_Opacity.uasset b/Content/Peoples/Boy_03/SM_Boy_03_fbm/4_meshes_Merge_0_Opacity.uasset new file mode 100644 index 00000000..5d566c87 Binary files /dev/null and b/Content/Peoples/Boy_03/SM_Boy_03_fbm/4_meshes_Merge_0_Opacity.uasset differ diff --git a/Content/Peoples/Boy_03/SM_Boy_03_fbm/4_meshes_Merge_0_Specular.uasset b/Content/Peoples/Boy_03/SM_Boy_03_fbm/4_meshes_Merge_0_Specular.uasset new file mode 100644 index 00000000..f1243f74 Binary files /dev/null and b/Content/Peoples/Boy_03/SM_Boy_03_fbm/4_meshes_Merge_0_Specular.uasset differ diff --git a/Content/Peoples/Boy_03/SM_Boy_03_fbm/4_meshes_Merge_Diffuse.uasset b/Content/Peoples/Boy_03/SM_Boy_03_fbm/4_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..0d097185 Binary files /dev/null and b/Content/Peoples/Boy_03/SM_Boy_03_fbm/4_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Boy_03/SM_Boy_03_fbm/4_meshes_Merge_Normal.uasset b/Content/Peoples/Boy_03/SM_Boy_03_fbm/4_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..ac063cac Binary files /dev/null and b/Content/Peoples/Boy_03/SM_Boy_03_fbm/4_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Boy_03/SM_Boy_03_fbm/4_meshes_Merge_Opacity.uasset b/Content/Peoples/Boy_03/SM_Boy_03_fbm/4_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..3cf65235 Binary files /dev/null and b/Content/Peoples/Boy_03/SM_Boy_03_fbm/4_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Boy_03/SM_Boy_03_fbm/5_meshes_Merge_Diffuse.uasset b/Content/Peoples/Boy_03/SM_Boy_03_fbm/5_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..72c36836 Binary files /dev/null and b/Content/Peoples/Boy_03/SM_Boy_03_fbm/5_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Boy_03/SM_Boy_03_fbm/5_meshes_Merge_Normal.uasset b/Content/Peoples/Boy_03/SM_Boy_03_fbm/5_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..3074664f Binary files /dev/null and b/Content/Peoples/Boy_03/SM_Boy_03_fbm/5_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Boy_03/SM_Boy_03_fbm/5_meshes_Merge_Opacity.uasset b/Content/Peoples/Boy_03/SM_Boy_03_fbm/5_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..33ba11a0 Binary files /dev/null and b/Content/Peoples/Boy_03/SM_Boy_03_fbm/5_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Boy_03/SM_Boy_03_fbm/5_meshes_Merge_Specular.uasset b/Content/Peoples/Boy_03/SM_Boy_03_fbm/5_meshes_Merge_Specular.uasset new file mode 100644 index 00000000..97a82b45 Binary files /dev/null and b/Content/Peoples/Boy_03/SM_Boy_03_fbm/5_meshes_Merge_Specular.uasset differ diff --git a/Content/Peoples/Boy_03/SM_Boy_03_fbm/Classic_side_part_0__Merge_Diffuse.uasset b/Content/Peoples/Boy_03/SM_Boy_03_fbm/Classic_side_part_0__Merge_Diffuse.uasset new file mode 100644 index 00000000..6d711934 Binary files /dev/null and b/Content/Peoples/Boy_03/SM_Boy_03_fbm/Classic_side_part_0__Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Boy_03/SM_Boy_03_fbm/Classic_side_part_0__Merge_Opacity.uasset b/Content/Peoples/Boy_03/SM_Boy_03_fbm/Classic_side_part_0__Merge_Opacity.uasset new file mode 100644 index 00000000..cfbea83d Binary files /dev/null and b/Content/Peoples/Boy_03/SM_Boy_03_fbm/Classic_side_part_0__Merge_Opacity.uasset differ diff --git a/Content/Peoples/Boy_03/SM_Boy_03_fbm/hair002_Merge_Diffuse.uasset b/Content/Peoples/Boy_03/SM_Boy_03_fbm/hair002_Merge_Diffuse.uasset new file mode 100644 index 00000000..f4a406f6 Binary files /dev/null and b/Content/Peoples/Boy_03/SM_Boy_03_fbm/hair002_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Boy_03/SM_Boy_03_fbm/hair002_Merge_Opacity.uasset b/Content/Peoples/Boy_03/SM_Boy_03_fbm/hair002_Merge_Opacity.uasset new file mode 100644 index 00000000..89fc58b0 Binary files /dev/null and b/Content/Peoples/Boy_03/SM_Boy_03_fbm/hair002_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Boy_03/textures/SM_Boy_03/4_meshes_Merge_0_ORM.uasset b/Content/Peoples/Boy_03/textures/SM_Boy_03/4_meshes_Merge_0_ORM.uasset new file mode 100644 index 00000000..889a624f Binary files /dev/null and b/Content/Peoples/Boy_03/textures/SM_Boy_03/4_meshes_Merge_0_ORM.uasset differ diff --git a/Content/Peoples/Boy_03/textures/SM_Boy_03/4_meshes_Merge_ORM.uasset b/Content/Peoples/Boy_03/textures/SM_Boy_03/4_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..8146f4af Binary files /dev/null and b/Content/Peoples/Boy_03/textures/SM_Boy_03/4_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Boy_03/textures/SM_Boy_03/4_meshes_Merge_ResourceMap_Position.uasset b/Content/Peoples/Boy_03/textures/SM_Boy_03/4_meshes_Merge_ResourceMap_Position.uasset new file mode 100644 index 00000000..13a9b4cf Binary files /dev/null and b/Content/Peoples/Boy_03/textures/SM_Boy_03/4_meshes_Merge_ResourceMap_Position.uasset differ diff --git a/Content/Peoples/Boy_03/textures/SM_Boy_03/4_meshes_Merge_ResourceMap_WSNormal.uasset b/Content/Peoples/Boy_03/textures/SM_Boy_03/4_meshes_Merge_ResourceMap_WSNormal.uasset new file mode 100644 index 00000000..d323e63b Binary files /dev/null and b/Content/Peoples/Boy_03/textures/SM_Boy_03/4_meshes_Merge_ResourceMap_WSNormal.uasset differ diff --git a/Content/Peoples/Boy_03/textures/SM_Boy_03/Classic_side_part_0__Merge_ORM.uasset b/Content/Peoples/Boy_03/textures/SM_Boy_03/Classic_side_part_0__Merge_ORM.uasset new file mode 100644 index 00000000..ed419288 Binary files /dev/null and b/Content/Peoples/Boy_03/textures/SM_Boy_03/Classic_side_part_0__Merge_ORM.uasset differ diff --git a/Content/Peoples/Boy_03/textures/SM_Boy_03/hair002_Merge_ORM.uasset b/Content/Peoples/Boy_03/textures/SM_Boy_03/hair002_Merge_ORM.uasset new file mode 100644 index 00000000..5568ca1a Binary files /dev/null and b/Content/Peoples/Boy_03/textures/SM_Boy_03/hair002_Merge_ORM.uasset differ diff --git a/Content/Peoples/Boy_03/textures/SM_Boy_03/hair002_Merge_blend_multiply.uasset b/Content/Peoples/Boy_03/textures/SM_Boy_03/hair002_Merge_blend_multiply.uasset new file mode 100644 index 00000000..0926916b Binary files /dev/null and b/Content/Peoples/Boy_03/textures/SM_Boy_03/hair002_Merge_blend_multiply.uasset differ diff --git a/Content/Peoples/Female_01/Materials/SM_Female_01/2_meshes_Merge_Inst.uasset b/Content/Peoples/Female_01/Materials/SM_Female_01/2_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..7b5d2397 Binary files /dev/null and b/Content/Peoples/Female_01/Materials/SM_Female_01/2_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Female_01/Materials/SM_Female_01/3_meshes_Merge_0_Inst.uasset b/Content/Peoples/Female_01/Materials/SM_Female_01/3_meshes_Merge_0_Inst.uasset new file mode 100644 index 00000000..4e411bc8 Binary files /dev/null and b/Content/Peoples/Female_01/Materials/SM_Female_01/3_meshes_Merge_0_Inst.uasset differ diff --git a/Content/Peoples/Female_01/Materials/SM_Female_01/3_meshes_Merge_Inst.uasset b/Content/Peoples/Female_01/Materials/SM_Female_01/3_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..e7b4b28e Binary files /dev/null and b/Content/Peoples/Female_01/Materials/SM_Female_01/3_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Female_01/Materials/SM_Female_01/4_meshes_Merge_Inst.uasset b/Content/Peoples/Female_01/Materials/SM_Female_01/4_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..4b6ca5e5 Binary files /dev/null and b/Content/Peoples/Female_01/Materials/SM_Female_01/4_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Female_01/SM_Female_01.uasset b/Content/Peoples/Female_01/SM_Female_01.uasset new file mode 100644 index 00000000..38627e58 Binary files /dev/null and b/Content/Peoples/Female_01/SM_Female_01.uasset differ diff --git a/Content/Peoples/Female_01/SM_Female_01_PhysicsAsset.uasset b/Content/Peoples/Female_01/SM_Female_01_PhysicsAsset.uasset new file mode 100644 index 00000000..e6840c6a Binary files /dev/null and b/Content/Peoples/Female_01/SM_Female_01_PhysicsAsset.uasset differ diff --git a/Content/Peoples/Female_01/SM_Female_01_fbm/2_meshes_Merge_Diffuse.uasset b/Content/Peoples/Female_01/SM_Female_01_fbm/2_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..3312158f Binary files /dev/null and b/Content/Peoples/Female_01/SM_Female_01_fbm/2_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Female_01/SM_Female_01_fbm/2_meshes_Merge_Opacity.uasset b/Content/Peoples/Female_01/SM_Female_01_fbm/2_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..7c33f6ae Binary files /dev/null and b/Content/Peoples/Female_01/SM_Female_01_fbm/2_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Female_01/SM_Female_01_fbm/3_meshes_Merge_0_Diffuse.uasset b/Content/Peoples/Female_01/SM_Female_01_fbm/3_meshes_Merge_0_Diffuse.uasset new file mode 100644 index 00000000..3f2f8554 Binary files /dev/null and b/Content/Peoples/Female_01/SM_Female_01_fbm/3_meshes_Merge_0_Diffuse.uasset differ diff --git a/Content/Peoples/Female_01/SM_Female_01_fbm/3_meshes_Merge_0_Normal.uasset b/Content/Peoples/Female_01/SM_Female_01_fbm/3_meshes_Merge_0_Normal.uasset new file mode 100644 index 00000000..41ab518f Binary files /dev/null and b/Content/Peoples/Female_01/SM_Female_01_fbm/3_meshes_Merge_0_Normal.uasset differ diff --git a/Content/Peoples/Female_01/SM_Female_01_fbm/3_meshes_Merge_0_Opacity.uasset b/Content/Peoples/Female_01/SM_Female_01_fbm/3_meshes_Merge_0_Opacity.uasset new file mode 100644 index 00000000..893a3466 Binary files /dev/null and b/Content/Peoples/Female_01/SM_Female_01_fbm/3_meshes_Merge_0_Opacity.uasset differ diff --git a/Content/Peoples/Female_01/SM_Female_01_fbm/3_meshes_Merge_Diffuse.uasset b/Content/Peoples/Female_01/SM_Female_01_fbm/3_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..fb623a16 Binary files /dev/null and b/Content/Peoples/Female_01/SM_Female_01_fbm/3_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Female_01/SM_Female_01_fbm/3_meshes_Merge_Normal.uasset b/Content/Peoples/Female_01/SM_Female_01_fbm/3_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..087baf08 Binary files /dev/null and b/Content/Peoples/Female_01/SM_Female_01_fbm/3_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Female_01/SM_Female_01_fbm/3_meshes_Merge_Opacity.uasset b/Content/Peoples/Female_01/SM_Female_01_fbm/3_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..cc26854b Binary files /dev/null and b/Content/Peoples/Female_01/SM_Female_01_fbm/3_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Female_01/SM_Female_01_fbm/4_meshes_Merge_Diffuse.uasset b/Content/Peoples/Female_01/SM_Female_01_fbm/4_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..8edfe376 Binary files /dev/null and b/Content/Peoples/Female_01/SM_Female_01_fbm/4_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Female_01/SM_Female_01_fbm/4_meshes_Merge_Normal.uasset b/Content/Peoples/Female_01/SM_Female_01_fbm/4_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..9f1c2118 Binary files /dev/null and b/Content/Peoples/Female_01/SM_Female_01_fbm/4_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Female_01/SM_Female_01_fbm/4_meshes_Merge_Opacity.uasset b/Content/Peoples/Female_01/SM_Female_01_fbm/4_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..d0207b04 Binary files /dev/null and b/Content/Peoples/Female_01/SM_Female_01_fbm/4_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Female_01/textures/SM_Female_01/2_meshes_Merge_ORM.uasset b/Content/Peoples/Female_01/textures/SM_Female_01/2_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..8b3e80e9 Binary files /dev/null and b/Content/Peoples/Female_01/textures/SM_Female_01/2_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Female_01/textures/SM_Female_01/3_meshes_Merge_0_Glow.uasset b/Content/Peoples/Female_01/textures/SM_Female_01/3_meshes_Merge_0_Glow.uasset new file mode 100644 index 00000000..ae5b3ecb Binary files /dev/null and b/Content/Peoples/Female_01/textures/SM_Female_01/3_meshes_Merge_0_Glow.uasset differ diff --git a/Content/Peoples/Female_01/textures/SM_Female_01/3_meshes_Merge_0_ORM.uasset b/Content/Peoples/Female_01/textures/SM_Female_01/3_meshes_Merge_0_ORM.uasset new file mode 100644 index 00000000..27f48438 Binary files /dev/null and b/Content/Peoples/Female_01/textures/SM_Female_01/3_meshes_Merge_0_ORM.uasset differ diff --git a/Content/Peoples/Female_01/textures/SM_Female_01/3_meshes_Merge_Displacement.uasset b/Content/Peoples/Female_01/textures/SM_Female_01/3_meshes_Merge_Displacement.uasset new file mode 100644 index 00000000..0b87a956 Binary files /dev/null and b/Content/Peoples/Female_01/textures/SM_Female_01/3_meshes_Merge_Displacement.uasset differ diff --git a/Content/Peoples/Female_01/textures/SM_Female_01/3_meshes_Merge_Glow.uasset b/Content/Peoples/Female_01/textures/SM_Female_01/3_meshes_Merge_Glow.uasset new file mode 100644 index 00000000..a39a9477 Binary files /dev/null and b/Content/Peoples/Female_01/textures/SM_Female_01/3_meshes_Merge_Glow.uasset differ diff --git a/Content/Peoples/Female_01/textures/SM_Female_01/3_meshes_Merge_ORM.uasset b/Content/Peoples/Female_01/textures/SM_Female_01/3_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..572dcf30 Binary files /dev/null and b/Content/Peoples/Female_01/textures/SM_Female_01/3_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Female_01/textures/SM_Female_01/4_meshes_Merge_ORM.uasset b/Content/Peoples/Female_01/textures/SM_Female_01/4_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..1a506d64 Binary files /dev/null and b/Content/Peoples/Female_01/textures/SM_Female_01/4_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Female_01/textures/SM_Female_01/4_meshes_Merge_ResourceMap_BlendMask.uasset b/Content/Peoples/Female_01/textures/SM_Female_01/4_meshes_Merge_ResourceMap_BlendMask.uasset new file mode 100644 index 00000000..32de765d Binary files /dev/null and b/Content/Peoples/Female_01/textures/SM_Female_01/4_meshes_Merge_ResourceMap_BlendMask.uasset differ diff --git a/Content/Peoples/Female_01/textures/SM_Female_01/4_meshes_Merge_ResourceMap_Position.uasset b/Content/Peoples/Female_01/textures/SM_Female_01/4_meshes_Merge_ResourceMap_Position.uasset new file mode 100644 index 00000000..3c9e5ac6 Binary files /dev/null and b/Content/Peoples/Female_01/textures/SM_Female_01/4_meshes_Merge_ResourceMap_Position.uasset differ diff --git a/Content/Peoples/Female_01/textures/SM_Female_01/4_meshes_Merge_ResourceMap_WSNormal.uasset b/Content/Peoples/Female_01/textures/SM_Female_01/4_meshes_Merge_ResourceMap_WSNormal.uasset new file mode 100644 index 00000000..02bffeab Binary files /dev/null and b/Content/Peoples/Female_01/textures/SM_Female_01/4_meshes_Merge_ResourceMap_WSNormal.uasset differ diff --git a/Content/Peoples/Female_02/Materials/SM_Female_02/3_meshes_Merge_Inst.uasset b/Content/Peoples/Female_02/Materials/SM_Female_02/3_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..fab795ce Binary files /dev/null and b/Content/Peoples/Female_02/Materials/SM_Female_02/3_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Female_02/Materials/SM_Female_02/4_meshes_Merge_Inst.uasset b/Content/Peoples/Female_02/Materials/SM_Female_02/4_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..84c39923 Binary files /dev/null and b/Content/Peoples/Female_02/Materials/SM_Female_02/4_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Female_02/Materials/SM_Female_02/Wavy_short_Bob_0__Merge_Inst.uasset b/Content/Peoples/Female_02/Materials/SM_Female_02/Wavy_short_Bob_0__Merge_Inst.uasset new file mode 100644 index 00000000..5f505781 Binary files /dev/null and b/Content/Peoples/Female_02/Materials/SM_Female_02/Wavy_short_Bob_0__Merge_Inst.uasset differ diff --git a/Content/Peoples/Female_02/SM_Female_02.uasset b/Content/Peoples/Female_02/SM_Female_02.uasset new file mode 100644 index 00000000..fb6c66c0 Binary files /dev/null and b/Content/Peoples/Female_02/SM_Female_02.uasset differ diff --git a/Content/Peoples/Female_02/SM_Female_02_PhysicsAsset.uasset b/Content/Peoples/Female_02/SM_Female_02_PhysicsAsset.uasset new file mode 100644 index 00000000..33ee3506 Binary files /dev/null and b/Content/Peoples/Female_02/SM_Female_02_PhysicsAsset.uasset differ diff --git a/Content/Peoples/Female_02/SM_Female_02_fbm/3_meshes_Merge_Diffuse.uasset b/Content/Peoples/Female_02/SM_Female_02_fbm/3_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..ae33d71f Binary files /dev/null and b/Content/Peoples/Female_02/SM_Female_02_fbm/3_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Female_02/SM_Female_02_fbm/3_meshes_Merge_Normal.uasset b/Content/Peoples/Female_02/SM_Female_02_fbm/3_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..11035273 Binary files /dev/null and b/Content/Peoples/Female_02/SM_Female_02_fbm/3_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Female_02/SM_Female_02_fbm/3_meshes_Merge_Opacity.uasset b/Content/Peoples/Female_02/SM_Female_02_fbm/3_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..682d0ec5 Binary files /dev/null and b/Content/Peoples/Female_02/SM_Female_02_fbm/3_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Female_02/SM_Female_02_fbm/3_meshes_Merge_Specular.uasset b/Content/Peoples/Female_02/SM_Female_02_fbm/3_meshes_Merge_Specular.uasset new file mode 100644 index 00000000..3854fc1f Binary files /dev/null and b/Content/Peoples/Female_02/SM_Female_02_fbm/3_meshes_Merge_Specular.uasset differ diff --git a/Content/Peoples/Female_02/SM_Female_02_fbm/4_meshes_Merge_Diffuse.uasset b/Content/Peoples/Female_02/SM_Female_02_fbm/4_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..8b1316bd Binary files /dev/null and b/Content/Peoples/Female_02/SM_Female_02_fbm/4_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Female_02/SM_Female_02_fbm/4_meshes_Merge_Normal.uasset b/Content/Peoples/Female_02/SM_Female_02_fbm/4_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..3421f44b Binary files /dev/null and b/Content/Peoples/Female_02/SM_Female_02_fbm/4_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Female_02/SM_Female_02_fbm/4_meshes_Merge_Opacity.uasset b/Content/Peoples/Female_02/SM_Female_02_fbm/4_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..bf0b97d9 Binary files /dev/null and b/Content/Peoples/Female_02/SM_Female_02_fbm/4_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Female_02/SM_Female_02_fbm/8_meshes_Merge_Diffuse.uasset b/Content/Peoples/Female_02/SM_Female_02_fbm/8_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..3696c3cd Binary files /dev/null and b/Content/Peoples/Female_02/SM_Female_02_fbm/8_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Female_02/SM_Female_02_fbm/8_meshes_Merge_Normal.uasset b/Content/Peoples/Female_02/SM_Female_02_fbm/8_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..7b17226b Binary files /dev/null and b/Content/Peoples/Female_02/SM_Female_02_fbm/8_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Female_02/SM_Female_02_fbm/8_meshes_Merge_Opacity.uasset b/Content/Peoples/Female_02/SM_Female_02_fbm/8_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..4fe40572 Binary files /dev/null and b/Content/Peoples/Female_02/SM_Female_02_fbm/8_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Female_02/SM_Female_02_fbm/Wavy_short_Bob_0__Merge_Diffuse.uasset b/Content/Peoples/Female_02/SM_Female_02_fbm/Wavy_short_Bob_0__Merge_Diffuse.uasset new file mode 100644 index 00000000..6887247d Binary files /dev/null and b/Content/Peoples/Female_02/SM_Female_02_fbm/Wavy_short_Bob_0__Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Female_02/SM_Female_02_fbm/Wavy_short_Bob_0__Merge_Opacity.uasset b/Content/Peoples/Female_02/SM_Female_02_fbm/Wavy_short_Bob_0__Merge_Opacity.uasset new file mode 100644 index 00000000..bbf02322 Binary files /dev/null and b/Content/Peoples/Female_02/SM_Female_02_fbm/Wavy_short_Bob_0__Merge_Opacity.uasset differ diff --git a/Content/Peoples/Female_02/SM_Female_02_fbm/Wavy_short_Bob_0__Merge_Specular.uasset b/Content/Peoples/Female_02/SM_Female_02_fbm/Wavy_short_Bob_0__Merge_Specular.uasset new file mode 100644 index 00000000..89457b37 Binary files /dev/null and b/Content/Peoples/Female_02/SM_Female_02_fbm/Wavy_short_Bob_0__Merge_Specular.uasset differ diff --git a/Content/Peoples/Female_02/textures/SM_Female_02/3_meshes_Merge_ORM.uasset b/Content/Peoples/Female_02/textures/SM_Female_02/3_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..c65f1636 Binary files /dev/null and b/Content/Peoples/Female_02/textures/SM_Female_02/3_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Female_02/textures/SM_Female_02/3_meshes_Merge_metallic.uasset b/Content/Peoples/Female_02/textures/SM_Female_02/3_meshes_Merge_metallic.uasset new file mode 100644 index 00000000..d908c0ff Binary files /dev/null and b/Content/Peoples/Female_02/textures/SM_Female_02/3_meshes_Merge_metallic.uasset differ diff --git a/Content/Peoples/Female_02/textures/SM_Female_02/3_meshes_Merge_roughness.uasset b/Content/Peoples/Female_02/textures/SM_Female_02/3_meshes_Merge_roughness.uasset new file mode 100644 index 00000000..0e80f62f Binary files /dev/null and b/Content/Peoples/Female_02/textures/SM_Female_02/3_meshes_Merge_roughness.uasset differ diff --git a/Content/Peoples/Female_02/textures/SM_Female_02/4_meshes_Merge_ORM.uasset b/Content/Peoples/Female_02/textures/SM_Female_02/4_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..01103b3e Binary files /dev/null and b/Content/Peoples/Female_02/textures/SM_Female_02/4_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Female_02/textures/SM_Female_02/4_meshes_Merge_ResourceMap_Position.uasset b/Content/Peoples/Female_02/textures/SM_Female_02/4_meshes_Merge_ResourceMap_Position.uasset new file mode 100644 index 00000000..427b5e30 Binary files /dev/null and b/Content/Peoples/Female_02/textures/SM_Female_02/4_meshes_Merge_ResourceMap_Position.uasset differ diff --git a/Content/Peoples/Female_02/textures/SM_Female_02/4_meshes_Merge_ResourceMap_WSNormal.uasset b/Content/Peoples/Female_02/textures/SM_Female_02/4_meshes_Merge_ResourceMap_WSNormal.uasset new file mode 100644 index 00000000..19f569b7 Binary files /dev/null and b/Content/Peoples/Female_02/textures/SM_Female_02/4_meshes_Merge_ResourceMap_WSNormal.uasset differ diff --git a/Content/Peoples/Female_02/textures/SM_Female_02/4_meshes_Merge_ao.uasset b/Content/Peoples/Female_02/textures/SM_Female_02/4_meshes_Merge_ao.uasset new file mode 100644 index 00000000..b2acf005 Binary files /dev/null and b/Content/Peoples/Female_02/textures/SM_Female_02/4_meshes_Merge_ao.uasset differ diff --git a/Content/Peoples/Female_02/textures/SM_Female_02/4_meshes_Merge_metallic.uasset b/Content/Peoples/Female_02/textures/SM_Female_02/4_meshes_Merge_metallic.uasset new file mode 100644 index 00000000..4f60b595 Binary files /dev/null and b/Content/Peoples/Female_02/textures/SM_Female_02/4_meshes_Merge_metallic.uasset differ diff --git a/Content/Peoples/Female_02/textures/SM_Female_02/4_meshes_Merge_roughness.uasset b/Content/Peoples/Female_02/textures/SM_Female_02/4_meshes_Merge_roughness.uasset new file mode 100644 index 00000000..67affc34 Binary files /dev/null and b/Content/Peoples/Female_02/textures/SM_Female_02/4_meshes_Merge_roughness.uasset differ diff --git a/Content/Peoples/Female_02/textures/SM_Female_02/8_meshes_Merge_ORM.uasset b/Content/Peoples/Female_02/textures/SM_Female_02/8_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..d869054d Binary files /dev/null and b/Content/Peoples/Female_02/textures/SM_Female_02/8_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Female_02/textures/SM_Female_02/Wavy_short_Bob_0__Merge_ORM.uasset b/Content/Peoples/Female_02/textures/SM_Female_02/Wavy_short_Bob_0__Merge_ORM.uasset new file mode 100644 index 00000000..36726281 Binary files /dev/null and b/Content/Peoples/Female_02/textures/SM_Female_02/Wavy_short_Bob_0__Merge_ORM.uasset differ diff --git a/Content/Peoples/Female_02/textures/SM_Female_02/Wavy_short_Bob_0__Merge_ao.uasset b/Content/Peoples/Female_02/textures/SM_Female_02/Wavy_short_Bob_0__Merge_ao.uasset new file mode 100644 index 00000000..f29f2e58 Binary files /dev/null and b/Content/Peoples/Female_02/textures/SM_Female_02/Wavy_short_Bob_0__Merge_ao.uasset differ diff --git a/Content/Peoples/Female_02/textures/SM_Female_02/Wavy_short_Bob_0__Merge_metallic.uasset b/Content/Peoples/Female_02/textures/SM_Female_02/Wavy_short_Bob_0__Merge_metallic.uasset new file mode 100644 index 00000000..7188e0b9 Binary files /dev/null and b/Content/Peoples/Female_02/textures/SM_Female_02/Wavy_short_Bob_0__Merge_metallic.uasset differ diff --git a/Content/Peoples/Female_02/textures/SM_Female_02/Wavy_short_Bob_0__Merge_roughness.uasset b/Content/Peoples/Female_02/textures/SM_Female_02/Wavy_short_Bob_0__Merge_roughness.uasset new file mode 100644 index 00000000..d1849653 Binary files /dev/null and b/Content/Peoples/Female_02/textures/SM_Female_02/Wavy_short_Bob_0__Merge_roughness.uasset differ diff --git a/Content/Peoples/Female_03/Materials/SM_Female_03/3_meshes_Merge_Inst.uasset b/Content/Peoples/Female_03/Materials/SM_Female_03/3_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..b35a71a3 Binary files /dev/null and b/Content/Peoples/Female_03/Materials/SM_Female_03/3_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Female_03/Materials/SM_Female_03/4_meshes_Merge_0_Inst.uasset b/Content/Peoples/Female_03/Materials/SM_Female_03/4_meshes_Merge_0_Inst.uasset new file mode 100644 index 00000000..fb6c09ae Binary files /dev/null and b/Content/Peoples/Female_03/Materials/SM_Female_03/4_meshes_Merge_0_Inst.uasset differ diff --git a/Content/Peoples/Female_03/Materials/SM_Female_03/4_meshes_Merge_Inst.uasset b/Content/Peoples/Female_03/Materials/SM_Female_03/4_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..954d8c93 Binary files /dev/null and b/Content/Peoples/Female_03/Materials/SM_Female_03/4_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Female_03/Materials/SM_Female_03/Female_Angled_Merge_Inst.uasset b/Content/Peoples/Female_03/Materials/SM_Female_03/Female_Angled_Merge_Inst.uasset new file mode 100644 index 00000000..068e4170 Binary files /dev/null and b/Content/Peoples/Female_03/Materials/SM_Female_03/Female_Angled_Merge_Inst.uasset differ diff --git a/Content/Peoples/Female_03/SM_Female_03.uasset b/Content/Peoples/Female_03/SM_Female_03.uasset new file mode 100644 index 00000000..b834a762 Binary files /dev/null and b/Content/Peoples/Female_03/SM_Female_03.uasset differ diff --git a/Content/Peoples/Female_03/SM_Female_03_PhysicsAsset.uasset b/Content/Peoples/Female_03/SM_Female_03_PhysicsAsset.uasset new file mode 100644 index 00000000..9fb12095 Binary files /dev/null and b/Content/Peoples/Female_03/SM_Female_03_PhysicsAsset.uasset differ diff --git a/Content/Peoples/Female_03/SM_Female_03_fbm/3_meshes_Merge_Diffuse.uasset b/Content/Peoples/Female_03/SM_Female_03_fbm/3_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..be12cd1b Binary files /dev/null and b/Content/Peoples/Female_03/SM_Female_03_fbm/3_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Female_03/SM_Female_03_fbm/3_meshes_Merge_Normal.uasset b/Content/Peoples/Female_03/SM_Female_03_fbm/3_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..105d184e Binary files /dev/null and b/Content/Peoples/Female_03/SM_Female_03_fbm/3_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Female_03/SM_Female_03_fbm/3_meshes_Merge_Opacity.uasset b/Content/Peoples/Female_03/SM_Female_03_fbm/3_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..1c0d6eec Binary files /dev/null and b/Content/Peoples/Female_03/SM_Female_03_fbm/3_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Female_03/SM_Female_03_fbm/4_meshes_Merge_0_Diffuse.uasset b/Content/Peoples/Female_03/SM_Female_03_fbm/4_meshes_Merge_0_Diffuse.uasset new file mode 100644 index 00000000..229ca036 Binary files /dev/null and b/Content/Peoples/Female_03/SM_Female_03_fbm/4_meshes_Merge_0_Diffuse.uasset differ diff --git a/Content/Peoples/Female_03/SM_Female_03_fbm/4_meshes_Merge_0_Opacity.uasset b/Content/Peoples/Female_03/SM_Female_03_fbm/4_meshes_Merge_0_Opacity.uasset new file mode 100644 index 00000000..db519405 Binary files /dev/null and b/Content/Peoples/Female_03/SM_Female_03_fbm/4_meshes_Merge_0_Opacity.uasset differ diff --git a/Content/Peoples/Female_03/SM_Female_03_fbm/4_meshes_Merge_Diffuse.uasset b/Content/Peoples/Female_03/SM_Female_03_fbm/4_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..813a2203 Binary files /dev/null and b/Content/Peoples/Female_03/SM_Female_03_fbm/4_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Female_03/SM_Female_03_fbm/4_meshes_Merge_Normal.uasset b/Content/Peoples/Female_03/SM_Female_03_fbm/4_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..1dd918f8 Binary files /dev/null and b/Content/Peoples/Female_03/SM_Female_03_fbm/4_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Female_03/SM_Female_03_fbm/4_meshes_Merge_Opacity.uasset b/Content/Peoples/Female_03/SM_Female_03_fbm/4_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..862436c6 Binary files /dev/null and b/Content/Peoples/Female_03/SM_Female_03_fbm/4_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Female_03/SM_Female_03_fbm/Female_Angled_Merge_Diffuse.uasset b/Content/Peoples/Female_03/SM_Female_03_fbm/Female_Angled_Merge_Diffuse.uasset new file mode 100644 index 00000000..8aac0ac7 Binary files /dev/null and b/Content/Peoples/Female_03/SM_Female_03_fbm/Female_Angled_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Female_03/SM_Female_03_fbm/Female_Angled_Merge_Opacity.uasset b/Content/Peoples/Female_03/SM_Female_03_fbm/Female_Angled_Merge_Opacity.uasset new file mode 100644 index 00000000..ff66a42a Binary files /dev/null and b/Content/Peoples/Female_03/SM_Female_03_fbm/Female_Angled_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Female_03/textures/SM_Female_03/3_meshes_Merge_Glow.uasset b/Content/Peoples/Female_03/textures/SM_Female_03/3_meshes_Merge_Glow.uasset new file mode 100644 index 00000000..4d97ae8a Binary files /dev/null and b/Content/Peoples/Female_03/textures/SM_Female_03/3_meshes_Merge_Glow.uasset differ diff --git a/Content/Peoples/Female_03/textures/SM_Female_03/3_meshes_Merge_ORM.uasset b/Content/Peoples/Female_03/textures/SM_Female_03/3_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..83bf57a9 Binary files /dev/null and b/Content/Peoples/Female_03/textures/SM_Female_03/3_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Female_03/textures/SM_Female_03/4_meshes_Merge_0_ORM.uasset b/Content/Peoples/Female_03/textures/SM_Female_03/4_meshes_Merge_0_ORM.uasset new file mode 100644 index 00000000..79cd0347 Binary files /dev/null and b/Content/Peoples/Female_03/textures/SM_Female_03/4_meshes_Merge_0_ORM.uasset differ diff --git a/Content/Peoples/Female_03/textures/SM_Female_03/4_meshes_Merge_0_blend_multiply.uasset b/Content/Peoples/Female_03/textures/SM_Female_03/4_meshes_Merge_0_blend_multiply.uasset new file mode 100644 index 00000000..675586e0 Binary files /dev/null and b/Content/Peoples/Female_03/textures/SM_Female_03/4_meshes_Merge_0_blend_multiply.uasset differ diff --git a/Content/Peoples/Female_03/textures/SM_Female_03/4_meshes_Merge_ORM.uasset b/Content/Peoples/Female_03/textures/SM_Female_03/4_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..61f8f291 Binary files /dev/null and b/Content/Peoples/Female_03/textures/SM_Female_03/4_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Female_03/textures/SM_Female_03/4_meshes_Merge_ResourceMap_Position.uasset b/Content/Peoples/Female_03/textures/SM_Female_03/4_meshes_Merge_ResourceMap_Position.uasset new file mode 100644 index 00000000..defadba3 Binary files /dev/null and b/Content/Peoples/Female_03/textures/SM_Female_03/4_meshes_Merge_ResourceMap_Position.uasset differ diff --git a/Content/Peoples/Female_03/textures/SM_Female_03/4_meshes_Merge_ResourceMap_WSNormal.uasset b/Content/Peoples/Female_03/textures/SM_Female_03/4_meshes_Merge_ResourceMap_WSNormal.uasset new file mode 100644 index 00000000..84180eeb Binary files /dev/null and b/Content/Peoples/Female_03/textures/SM_Female_03/4_meshes_Merge_ResourceMap_WSNormal.uasset differ diff --git a/Content/Peoples/Female_03/textures/SM_Female_03/Female_Angled_Merge_ORM.uasset b/Content/Peoples/Female_03/textures/SM_Female_03/Female_Angled_Merge_ORM.uasset new file mode 100644 index 00000000..837c3855 Binary files /dev/null and b/Content/Peoples/Female_03/textures/SM_Female_03/Female_Angled_Merge_ORM.uasset differ diff --git a/Content/Peoples/Female_04/Materials/SM_Female_04/2_meshes_Merge_Inst.uasset b/Content/Peoples/Female_04/Materials/SM_Female_04/2_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..6d968979 Binary files /dev/null and b/Content/Peoples/Female_04/Materials/SM_Female_04/2_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Female_04/Materials/SM_Female_04/3_meshes_Merge_Inst.uasset b/Content/Peoples/Female_04/Materials/SM_Female_04/3_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..1c78e64a Binary files /dev/null and b/Content/Peoples/Female_04/Materials/SM_Female_04/3_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Female_04/Materials/SM_Female_04/4_meshes_Merge_Inst.uasset b/Content/Peoples/Female_04/Materials/SM_Female_04/4_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..68682cf7 Binary files /dev/null and b/Content/Peoples/Female_04/Materials/SM_Female_04/4_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Female_04/Materials/SM_Female_04/RL_HairMesh_Merge_Inst.uasset b/Content/Peoples/Female_04/Materials/SM_Female_04/RL_HairMesh_Merge_Inst.uasset new file mode 100644 index 00000000..2199886d Binary files /dev/null and b/Content/Peoples/Female_04/Materials/SM_Female_04/RL_HairMesh_Merge_Inst.uasset differ diff --git a/Content/Peoples/Female_04/Materials/SM_Female_04/__4_sleeves_tops_Inst.uasset b/Content/Peoples/Female_04/Materials/SM_Female_04/__4_sleeves_tops_Inst.uasset new file mode 100644 index 00000000..3f3c3db5 Binary files /dev/null and b/Content/Peoples/Female_04/Materials/SM_Female_04/__4_sleeves_tops_Inst.uasset differ diff --git a/Content/Peoples/Female_04/SM_Female_04.uasset b/Content/Peoples/Female_04/SM_Female_04.uasset new file mode 100644 index 00000000..7d4bdecd Binary files /dev/null and b/Content/Peoples/Female_04/SM_Female_04.uasset differ diff --git a/Content/Peoples/Female_04/SM_Female_04_PhysicsAsset.uasset b/Content/Peoples/Female_04/SM_Female_04_PhysicsAsset.uasset new file mode 100644 index 00000000..09b3b24c Binary files /dev/null and b/Content/Peoples/Female_04/SM_Female_04_PhysicsAsset.uasset differ diff --git a/Content/Peoples/Female_04/SM_Female_04_fbm/2_meshes_Merge_Diffuse.uasset b/Content/Peoples/Female_04/SM_Female_04_fbm/2_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..9c589870 Binary files /dev/null and b/Content/Peoples/Female_04/SM_Female_04_fbm/2_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Female_04/SM_Female_04_fbm/2_meshes_Merge_Normal.uasset b/Content/Peoples/Female_04/SM_Female_04_fbm/2_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..4f53ab70 Binary files /dev/null and b/Content/Peoples/Female_04/SM_Female_04_fbm/2_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Female_04/SM_Female_04_fbm/2_meshes_Merge_Opacity.uasset b/Content/Peoples/Female_04/SM_Female_04_fbm/2_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..d4efeb6e Binary files /dev/null and b/Content/Peoples/Female_04/SM_Female_04_fbm/2_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Female_04/SM_Female_04_fbm/3_meshes_Merge_Diffuse.uasset b/Content/Peoples/Female_04/SM_Female_04_fbm/3_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..908d20fd Binary files /dev/null and b/Content/Peoples/Female_04/SM_Female_04_fbm/3_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Female_04/SM_Female_04_fbm/3_meshes_Merge_Normal.uasset b/Content/Peoples/Female_04/SM_Female_04_fbm/3_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..c4564708 Binary files /dev/null and b/Content/Peoples/Female_04/SM_Female_04_fbm/3_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Female_04/SM_Female_04_fbm/3_meshes_Merge_Opacity.uasset b/Content/Peoples/Female_04/SM_Female_04_fbm/3_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..86bf888c Binary files /dev/null and b/Content/Peoples/Female_04/SM_Female_04_fbm/3_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Female_04/SM_Female_04_fbm/4_meshes_Merge_Diffuse.uasset b/Content/Peoples/Female_04/SM_Female_04_fbm/4_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..f2a734e4 Binary files /dev/null and b/Content/Peoples/Female_04/SM_Female_04_fbm/4_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Female_04/SM_Female_04_fbm/4_meshes_Merge_Normal.uasset b/Content/Peoples/Female_04/SM_Female_04_fbm/4_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..9435be84 Binary files /dev/null and b/Content/Peoples/Female_04/SM_Female_04_fbm/4_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Female_04/SM_Female_04_fbm/4_meshes_Merge_Opacity.uasset b/Content/Peoples/Female_04/SM_Female_04_fbm/4_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..126053bd Binary files /dev/null and b/Content/Peoples/Female_04/SM_Female_04_fbm/4_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Female_04/SM_Female_04_fbm/RL_HairMesh_Merge_Bump.uasset b/Content/Peoples/Female_04/SM_Female_04_fbm/RL_HairMesh_Merge_Bump.uasset new file mode 100644 index 00000000..ce5aff10 Binary files /dev/null and b/Content/Peoples/Female_04/SM_Female_04_fbm/RL_HairMesh_Merge_Bump.uasset differ diff --git a/Content/Peoples/Female_04/SM_Female_04_fbm/RL_HairMesh_Merge_Diffuse.uasset b/Content/Peoples/Female_04/SM_Female_04_fbm/RL_HairMesh_Merge_Diffuse.uasset new file mode 100644 index 00000000..c89a7aad Binary files /dev/null and b/Content/Peoples/Female_04/SM_Female_04_fbm/RL_HairMesh_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Female_04/SM_Female_04_fbm/RL_HairMesh_Merge_Opacity.uasset b/Content/Peoples/Female_04/SM_Female_04_fbm/RL_HairMesh_Merge_Opacity.uasset new file mode 100644 index 00000000..2bfbaef6 Binary files /dev/null and b/Content/Peoples/Female_04/SM_Female_04_fbm/RL_HairMesh_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse.uasset b/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse.uasset new file mode 100644 index 00000000..c97319e7 Binary files /dev/null and b/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse.uasset differ diff --git a/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse_0001.uasset b/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse_0001.uasset new file mode 100644 index 00000000..8758a2e5 Binary files /dev/null and b/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse_0001.uasset differ diff --git a/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse_0002.uasset b/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse_0002.uasset new file mode 100644 index 00000000..6d782b69 Binary files /dev/null and b/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse_0002.uasset differ diff --git a/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse_0003.uasset b/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse_0003.uasset new file mode 100644 index 00000000..8baa91ed Binary files /dev/null and b/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse_0003.uasset differ diff --git a/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse_0004.uasset b/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse_0004.uasset new file mode 100644 index 00000000..b37269fe Binary files /dev/null and b/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse_0004.uasset differ diff --git a/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse_0005.uasset b/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse_0005.uasset new file mode 100644 index 00000000..19f69c77 Binary files /dev/null and b/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse_0005.uasset differ diff --git a/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse_0006.uasset b/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse_0006.uasset new file mode 100644 index 00000000..16c5ad66 Binary files /dev/null and b/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse_0006.uasset differ diff --git a/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse_0007.uasset b/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse_0007.uasset new file mode 100644 index 00000000..461b7651 Binary files /dev/null and b/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse_0007.uasset differ diff --git a/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse_0008.uasset b/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse_0008.uasset new file mode 100644 index 00000000..2c55c616 Binary files /dev/null and b/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Diffuse_0008.uasset differ diff --git a/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Normal.uasset b/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Normal.uasset new file mode 100644 index 00000000..26a7468b Binary files /dev/null and b/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Normal.uasset differ diff --git a/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Opacity.uasset b/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Opacity.uasset new file mode 100644 index 00000000..579dc4aa Binary files /dev/null and b/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Opacity.uasset differ diff --git a/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Specular.uasset b/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Specular.uasset new file mode 100644 index 00000000..e6c515c6 Binary files /dev/null and b/Content/Peoples/Female_04/SM_Female_04_fbm/__4_sleeves_tops_Specular.uasset differ diff --git a/Content/Peoples/Female_04/textures/SM_Female_04/2_meshes_Merge_Displacement.uasset b/Content/Peoples/Female_04/textures/SM_Female_04/2_meshes_Merge_Displacement.uasset new file mode 100644 index 00000000..b53e650f Binary files /dev/null and b/Content/Peoples/Female_04/textures/SM_Female_04/2_meshes_Merge_Displacement.uasset differ diff --git a/Content/Peoples/Female_04/textures/SM_Female_04/2_meshes_Merge_Glow.uasset b/Content/Peoples/Female_04/textures/SM_Female_04/2_meshes_Merge_Glow.uasset new file mode 100644 index 00000000..eac13041 Binary files /dev/null and b/Content/Peoples/Female_04/textures/SM_Female_04/2_meshes_Merge_Glow.uasset differ diff --git a/Content/Peoples/Female_04/textures/SM_Female_04/2_meshes_Merge_ORM.uasset b/Content/Peoples/Female_04/textures/SM_Female_04/2_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..a67f2851 Binary files /dev/null and b/Content/Peoples/Female_04/textures/SM_Female_04/2_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Female_04/textures/SM_Female_04/3_meshes_Merge_Displacement.uasset b/Content/Peoples/Female_04/textures/SM_Female_04/3_meshes_Merge_Displacement.uasset new file mode 100644 index 00000000..6b58c37b Binary files /dev/null and b/Content/Peoples/Female_04/textures/SM_Female_04/3_meshes_Merge_Displacement.uasset differ diff --git a/Content/Peoples/Female_04/textures/SM_Female_04/3_meshes_Merge_Glow.uasset b/Content/Peoples/Female_04/textures/SM_Female_04/3_meshes_Merge_Glow.uasset new file mode 100644 index 00000000..4fc3a62b Binary files /dev/null and b/Content/Peoples/Female_04/textures/SM_Female_04/3_meshes_Merge_Glow.uasset differ diff --git a/Content/Peoples/Female_04/textures/SM_Female_04/3_meshes_Merge_ORM.uasset b/Content/Peoples/Female_04/textures/SM_Female_04/3_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..c55edebe Binary files /dev/null and b/Content/Peoples/Female_04/textures/SM_Female_04/3_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Female_04/textures/SM_Female_04/4_meshes_Merge_ORM.uasset b/Content/Peoples/Female_04/textures/SM_Female_04/4_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..fb2fa26c Binary files /dev/null and b/Content/Peoples/Female_04/textures/SM_Female_04/4_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Female_04/textures/SM_Female_04/4_meshes_Merge_ResourceMap_Position.uasset b/Content/Peoples/Female_04/textures/SM_Female_04/4_meshes_Merge_ResourceMap_Position.uasset new file mode 100644 index 00000000..d70f0778 Binary files /dev/null and b/Content/Peoples/Female_04/textures/SM_Female_04/4_meshes_Merge_ResourceMap_Position.uasset differ diff --git a/Content/Peoples/Female_04/textures/SM_Female_04/4_meshes_Merge_ResourceMap_WSNormal.uasset b/Content/Peoples/Female_04/textures/SM_Female_04/4_meshes_Merge_ResourceMap_WSNormal.uasset new file mode 100644 index 00000000..773d8f31 Binary files /dev/null and b/Content/Peoples/Female_04/textures/SM_Female_04/4_meshes_Merge_ResourceMap_WSNormal.uasset differ diff --git a/Content/Peoples/Female_04/textures/SM_Female_04/RL_HairMesh_Merge_Glow.uasset b/Content/Peoples/Female_04/textures/SM_Female_04/RL_HairMesh_Merge_Glow.uasset new file mode 100644 index 00000000..f621676b Binary files /dev/null and b/Content/Peoples/Female_04/textures/SM_Female_04/RL_HairMesh_Merge_Glow.uasset differ diff --git a/Content/Peoples/Female_04/textures/SM_Female_04/RL_HairMesh_Merge_ORM.uasset b/Content/Peoples/Female_04/textures/SM_Female_04/RL_HairMesh_Merge_ORM.uasset new file mode 100644 index 00000000..74a51b99 Binary files /dev/null and b/Content/Peoples/Female_04/textures/SM_Female_04/RL_HairMesh_Merge_ORM.uasset differ diff --git a/Content/Peoples/Female_05/Materials/SM_Female_05/2_meshes_Merge_Inst.uasset b/Content/Peoples/Female_05/Materials/SM_Female_05/2_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..15499484 Binary files /dev/null and b/Content/Peoples/Female_05/Materials/SM_Female_05/2_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Female_05/Materials/SM_Female_05/4_meshes_Merge_Inst.uasset b/Content/Peoples/Female_05/Materials/SM_Female_05/4_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..4f76a4fa Binary files /dev/null and b/Content/Peoples/Female_05/Materials/SM_Female_05/4_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Female_05/Materials/SM_Female_05/Cute_braid_long_hair_Merge_Inst.uasset b/Content/Peoples/Female_05/Materials/SM_Female_05/Cute_braid_long_hair_Merge_Inst.uasset new file mode 100644 index 00000000..09add3b0 Binary files /dev/null and b/Content/Peoples/Female_05/Materials/SM_Female_05/Cute_braid_long_hair_Merge_Inst.uasset differ diff --git a/Content/Peoples/Female_05/Materials/SM_Female_05/Female_Angled_Merge_Inst.uasset b/Content/Peoples/Female_05/Materials/SM_Female_05/Female_Angled_Merge_Inst.uasset new file mode 100644 index 00000000..4e419c9e Binary files /dev/null and b/Content/Peoples/Female_05/Materials/SM_Female_05/Female_Angled_Merge_Inst.uasset differ diff --git a/Content/Peoples/Female_05/Materials/SM_Female_05/__4_sleeves_tops_Inst.uasset b/Content/Peoples/Female_05/Materials/SM_Female_05/__4_sleeves_tops_Inst.uasset new file mode 100644 index 00000000..9194d68c Binary files /dev/null and b/Content/Peoples/Female_05/Materials/SM_Female_05/__4_sleeves_tops_Inst.uasset differ diff --git a/Content/Peoples/Female_05/SM_Female_05.uasset b/Content/Peoples/Female_05/SM_Female_05.uasset new file mode 100644 index 00000000..7a3a6554 Binary files /dev/null and b/Content/Peoples/Female_05/SM_Female_05.uasset differ diff --git a/Content/Peoples/Female_05/SM_Female_05_PhysicsAsset.uasset b/Content/Peoples/Female_05/SM_Female_05_PhysicsAsset.uasset new file mode 100644 index 00000000..20215e3a Binary files /dev/null and b/Content/Peoples/Female_05/SM_Female_05_PhysicsAsset.uasset differ diff --git a/Content/Peoples/Female_05/SM_Female_05_fbm/2_meshes_Merge_Diffuse.uasset b/Content/Peoples/Female_05/SM_Female_05_fbm/2_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..0e766667 Binary files /dev/null and b/Content/Peoples/Female_05/SM_Female_05_fbm/2_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Female_05/SM_Female_05_fbm/2_meshes_Merge_Normal.uasset b/Content/Peoples/Female_05/SM_Female_05_fbm/2_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..78b1b565 Binary files /dev/null and b/Content/Peoples/Female_05/SM_Female_05_fbm/2_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Female_05/SM_Female_05_fbm/2_meshes_Merge_Opacity.uasset b/Content/Peoples/Female_05/SM_Female_05_fbm/2_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..15d8112f Binary files /dev/null and b/Content/Peoples/Female_05/SM_Female_05_fbm/2_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Female_05/SM_Female_05_fbm/2_meshes_Merge_Specular.uasset b/Content/Peoples/Female_05/SM_Female_05_fbm/2_meshes_Merge_Specular.uasset new file mode 100644 index 00000000..c4a09c4c Binary files /dev/null and b/Content/Peoples/Female_05/SM_Female_05_fbm/2_meshes_Merge_Specular.uasset differ diff --git a/Content/Peoples/Female_05/SM_Female_05_fbm/4_meshes_Merge_Diffuse.uasset b/Content/Peoples/Female_05/SM_Female_05_fbm/4_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..11e45ba7 Binary files /dev/null and b/Content/Peoples/Female_05/SM_Female_05_fbm/4_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Female_05/SM_Female_05_fbm/4_meshes_Merge_Normal.uasset b/Content/Peoples/Female_05/SM_Female_05_fbm/4_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..d68d1f63 Binary files /dev/null and b/Content/Peoples/Female_05/SM_Female_05_fbm/4_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Female_05/SM_Female_05_fbm/4_meshes_Merge_Opacity.uasset b/Content/Peoples/Female_05/SM_Female_05_fbm/4_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..e613c3e5 Binary files /dev/null and b/Content/Peoples/Female_05/SM_Female_05_fbm/4_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Female_05/SM_Female_05_fbm/Cute_braid_long_hair_Merge_Diffuse.uasset b/Content/Peoples/Female_05/SM_Female_05_fbm/Cute_braid_long_hair_Merge_Diffuse.uasset new file mode 100644 index 00000000..ac8143fe Binary files /dev/null and b/Content/Peoples/Female_05/SM_Female_05_fbm/Cute_braid_long_hair_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Female_05/SM_Female_05_fbm/Cute_braid_long_hair_Merge_Opacity.uasset b/Content/Peoples/Female_05/SM_Female_05_fbm/Cute_braid_long_hair_Merge_Opacity.uasset new file mode 100644 index 00000000..17f06c77 Binary files /dev/null and b/Content/Peoples/Female_05/SM_Female_05_fbm/Cute_braid_long_hair_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Female_05/SM_Female_05_fbm/Female_Angled_Merge_Diffuse.uasset b/Content/Peoples/Female_05/SM_Female_05_fbm/Female_Angled_Merge_Diffuse.uasset new file mode 100644 index 00000000..da206fdd Binary files /dev/null and b/Content/Peoples/Female_05/SM_Female_05_fbm/Female_Angled_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Female_05/SM_Female_05_fbm/Female_Angled_Merge_Opacity.uasset b/Content/Peoples/Female_05/SM_Female_05_fbm/Female_Angled_Merge_Opacity.uasset new file mode 100644 index 00000000..4a682e38 Binary files /dev/null and b/Content/Peoples/Female_05/SM_Female_05_fbm/Female_Angled_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse.uasset b/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse.uasset new file mode 100644 index 00000000..4a6eb0a4 Binary files /dev/null and b/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse.uasset differ diff --git a/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse_0001.uasset b/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse_0001.uasset new file mode 100644 index 00000000..ab19db34 Binary files /dev/null and b/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse_0001.uasset differ diff --git a/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse_0002.uasset b/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse_0002.uasset new file mode 100644 index 00000000..769eaad6 Binary files /dev/null and b/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse_0002.uasset differ diff --git a/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse_0003.uasset b/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse_0003.uasset new file mode 100644 index 00000000..660afe63 Binary files /dev/null and b/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse_0003.uasset differ diff --git a/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse_0004.uasset b/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse_0004.uasset new file mode 100644 index 00000000..185691ba Binary files /dev/null and b/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse_0004.uasset differ diff --git a/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse_0005.uasset b/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse_0005.uasset new file mode 100644 index 00000000..c9dab5e9 Binary files /dev/null and b/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse_0005.uasset differ diff --git a/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse_0006.uasset b/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse_0006.uasset new file mode 100644 index 00000000..032ec2a1 Binary files /dev/null and b/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse_0006.uasset differ diff --git a/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse_0007.uasset b/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse_0007.uasset new file mode 100644 index 00000000..c2980af0 Binary files /dev/null and b/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse_0007.uasset differ diff --git a/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse_0008.uasset b/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse_0008.uasset new file mode 100644 index 00000000..bc629919 Binary files /dev/null and b/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Diffuse_0008.uasset differ diff --git a/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Normal.uasset b/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Normal.uasset new file mode 100644 index 00000000..2cdee57b Binary files /dev/null and b/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Normal.uasset differ diff --git a/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Opacity.uasset b/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Opacity.uasset new file mode 100644 index 00000000..2ecf3f1b Binary files /dev/null and b/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Opacity.uasset differ diff --git a/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Specular.uasset b/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Specular.uasset new file mode 100644 index 00000000..eab5c935 Binary files /dev/null and b/Content/Peoples/Female_05/SM_Female_05_fbm/__4_sleeves_tops_Specular.uasset differ diff --git a/Content/Peoples/Female_05/textures/SM_Female_05/4_meshes_Merge_ORM.uasset b/Content/Peoples/Female_05/textures/SM_Female_05/4_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..06b0f2f4 Binary files /dev/null and b/Content/Peoples/Female_05/textures/SM_Female_05/4_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Female_05/textures/SM_Female_05/4_meshes_Merge_ResourceMap_Position.uasset b/Content/Peoples/Female_05/textures/SM_Female_05/4_meshes_Merge_ResourceMap_Position.uasset new file mode 100644 index 00000000..e73e799a Binary files /dev/null and b/Content/Peoples/Female_05/textures/SM_Female_05/4_meshes_Merge_ResourceMap_Position.uasset differ diff --git a/Content/Peoples/Female_05/textures/SM_Female_05/4_meshes_Merge_ResourceMap_WSNormal.uasset b/Content/Peoples/Female_05/textures/SM_Female_05/4_meshes_Merge_ResourceMap_WSNormal.uasset new file mode 100644 index 00000000..c5d34dde Binary files /dev/null and b/Content/Peoples/Female_05/textures/SM_Female_05/4_meshes_Merge_ResourceMap_WSNormal.uasset differ diff --git a/Content/Peoples/Female_05/textures/SM_Female_05/Cute_braid_long_hair_Merge_ORM.uasset b/Content/Peoples/Female_05/textures/SM_Female_05/Cute_braid_long_hair_Merge_ORM.uasset new file mode 100644 index 00000000..4c984b25 Binary files /dev/null and b/Content/Peoples/Female_05/textures/SM_Female_05/Cute_braid_long_hair_Merge_ORM.uasset differ diff --git a/Content/Peoples/Female_05/textures/SM_Female_05/Female_Angled_Merge_ORM.uasset b/Content/Peoples/Female_05/textures/SM_Female_05/Female_Angled_Merge_ORM.uasset new file mode 100644 index 00000000..02093783 Binary files /dev/null and b/Content/Peoples/Female_05/textures/SM_Female_05/Female_Angled_Merge_ORM.uasset differ diff --git a/Content/Peoples/Female_06/Materials/SM_Female_06/2_meshes_Merge_Inst.uasset b/Content/Peoples/Female_06/Materials/SM_Female_06/2_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..75f2fcbe Binary files /dev/null and b/Content/Peoples/Female_06/Materials/SM_Female_06/2_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Female_06/Materials/SM_Female_06/3_meshes_Merge_Inst.uasset b/Content/Peoples/Female_06/Materials/SM_Female_06/3_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..778659b5 Binary files /dev/null and b/Content/Peoples/Female_06/Materials/SM_Female_06/3_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Female_06/Materials/SM_Female_06/4_meshes_Merge_0_Inst.uasset b/Content/Peoples/Female_06/Materials/SM_Female_06/4_meshes_Merge_0_Inst.uasset new file mode 100644 index 00000000..d193a2c4 Binary files /dev/null and b/Content/Peoples/Female_06/Materials/SM_Female_06/4_meshes_Merge_0_Inst.uasset differ diff --git a/Content/Peoples/Female_06/Materials/SM_Female_06/4_meshes_Merge_Inst.uasset b/Content/Peoples/Female_06/Materials/SM_Female_06/4_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..b8f2b479 Binary files /dev/null and b/Content/Peoples/Female_06/Materials/SM_Female_06/4_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Female_06/SM_Female_06.uasset b/Content/Peoples/Female_06/SM_Female_06.uasset new file mode 100644 index 00000000..a4b401ed Binary files /dev/null and b/Content/Peoples/Female_06/SM_Female_06.uasset differ diff --git a/Content/Peoples/Female_06/SM_Female_06_PhysicsAsset.uasset b/Content/Peoples/Female_06/SM_Female_06_PhysicsAsset.uasset new file mode 100644 index 00000000..7e3f8605 Binary files /dev/null and b/Content/Peoples/Female_06/SM_Female_06_PhysicsAsset.uasset differ diff --git a/Content/Peoples/Female_06/SM_Female_06_fbm/2_meshes_Merge_Diffuse.uasset b/Content/Peoples/Female_06/SM_Female_06_fbm/2_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..677a4f52 Binary files /dev/null and b/Content/Peoples/Female_06/SM_Female_06_fbm/2_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Female_06/SM_Female_06_fbm/2_meshes_Merge_Opacity.uasset b/Content/Peoples/Female_06/SM_Female_06_fbm/2_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..3e5ef8b6 Binary files /dev/null and b/Content/Peoples/Female_06/SM_Female_06_fbm/2_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Female_06/SM_Female_06_fbm/3_meshes_Merge_Diffuse.uasset b/Content/Peoples/Female_06/SM_Female_06_fbm/3_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..f6cd9558 Binary files /dev/null and b/Content/Peoples/Female_06/SM_Female_06_fbm/3_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Female_06/SM_Female_06_fbm/3_meshes_Merge_Normal.uasset b/Content/Peoples/Female_06/SM_Female_06_fbm/3_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..13decc0a Binary files /dev/null and b/Content/Peoples/Female_06/SM_Female_06_fbm/3_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Female_06/SM_Female_06_fbm/3_meshes_Merge_Opacity.uasset b/Content/Peoples/Female_06/SM_Female_06_fbm/3_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..ac783577 Binary files /dev/null and b/Content/Peoples/Female_06/SM_Female_06_fbm/3_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Female_06/SM_Female_06_fbm/4_meshes_Merge_0_Diffuse.uasset b/Content/Peoples/Female_06/SM_Female_06_fbm/4_meshes_Merge_0_Diffuse.uasset new file mode 100644 index 00000000..74adb597 Binary files /dev/null and b/Content/Peoples/Female_06/SM_Female_06_fbm/4_meshes_Merge_0_Diffuse.uasset differ diff --git a/Content/Peoples/Female_06/SM_Female_06_fbm/4_meshes_Merge_0_Normal.uasset b/Content/Peoples/Female_06/SM_Female_06_fbm/4_meshes_Merge_0_Normal.uasset new file mode 100644 index 00000000..353550c7 Binary files /dev/null and b/Content/Peoples/Female_06/SM_Female_06_fbm/4_meshes_Merge_0_Normal.uasset differ diff --git a/Content/Peoples/Female_06/SM_Female_06_fbm/4_meshes_Merge_0_Opacity.uasset b/Content/Peoples/Female_06/SM_Female_06_fbm/4_meshes_Merge_0_Opacity.uasset new file mode 100644 index 00000000..a437339e Binary files /dev/null and b/Content/Peoples/Female_06/SM_Female_06_fbm/4_meshes_Merge_0_Opacity.uasset differ diff --git a/Content/Peoples/Female_06/SM_Female_06_fbm/4_meshes_Merge_Diffuse.uasset b/Content/Peoples/Female_06/SM_Female_06_fbm/4_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..b59b212d Binary files /dev/null and b/Content/Peoples/Female_06/SM_Female_06_fbm/4_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Female_06/SM_Female_06_fbm/4_meshes_Merge_Normal.uasset b/Content/Peoples/Female_06/SM_Female_06_fbm/4_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..25ed84f7 Binary files /dev/null and b/Content/Peoples/Female_06/SM_Female_06_fbm/4_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Female_06/SM_Female_06_fbm/4_meshes_Merge_Opacity.uasset b/Content/Peoples/Female_06/SM_Female_06_fbm/4_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..1491bb01 Binary files /dev/null and b/Content/Peoples/Female_06/SM_Female_06_fbm/4_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Female_06/textures/SM_Female_06/2_meshes_Merge_ORM.uasset b/Content/Peoples/Female_06/textures/SM_Female_06/2_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..49f3601e Binary files /dev/null and b/Content/Peoples/Female_06/textures/SM_Female_06/2_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Female_06/textures/SM_Female_06/3_meshes_Merge_Displacement.uasset b/Content/Peoples/Female_06/textures/SM_Female_06/3_meshes_Merge_Displacement.uasset new file mode 100644 index 00000000..18441197 Binary files /dev/null and b/Content/Peoples/Female_06/textures/SM_Female_06/3_meshes_Merge_Displacement.uasset differ diff --git a/Content/Peoples/Female_06/textures/SM_Female_06/3_meshes_Merge_ORM.uasset b/Content/Peoples/Female_06/textures/SM_Female_06/3_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..e943b501 Binary files /dev/null and b/Content/Peoples/Female_06/textures/SM_Female_06/3_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Female_06/textures/SM_Female_06/4_meshes_Merge_0_ORM.uasset b/Content/Peoples/Female_06/textures/SM_Female_06/4_meshes_Merge_0_ORM.uasset new file mode 100644 index 00000000..228be5dd Binary files /dev/null and b/Content/Peoples/Female_06/textures/SM_Female_06/4_meshes_Merge_0_ORM.uasset differ diff --git a/Content/Peoples/Female_06/textures/SM_Female_06/4_meshes_Merge_ORM.uasset b/Content/Peoples/Female_06/textures/SM_Female_06/4_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..990e5d03 Binary files /dev/null and b/Content/Peoples/Female_06/textures/SM_Female_06/4_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Female_06/textures/SM_Female_06/4_meshes_Merge_ResourceMap_Position.uasset b/Content/Peoples/Female_06/textures/SM_Female_06/4_meshes_Merge_ResourceMap_Position.uasset new file mode 100644 index 00000000..7d0e1110 Binary files /dev/null and b/Content/Peoples/Female_06/textures/SM_Female_06/4_meshes_Merge_ResourceMap_Position.uasset differ diff --git a/Content/Peoples/Female_06/textures/SM_Female_06/4_meshes_Merge_ResourceMap_WSNormal.uasset b/Content/Peoples/Female_06/textures/SM_Female_06/4_meshes_Merge_ResourceMap_WSNormal.uasset new file mode 100644 index 00000000..54dcc3f9 Binary files /dev/null and b/Content/Peoples/Female_06/textures/SM_Female_06/4_meshes_Merge_ResourceMap_WSNormal.uasset differ diff --git a/Content/Peoples/Female_07/Materials/SM_Female_07/2_meshes_Merge_Inst.uasset b/Content/Peoples/Female_07/Materials/SM_Female_07/2_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..d7ce7131 Binary files /dev/null and b/Content/Peoples/Female_07/Materials/SM_Female_07/2_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Female_07/Materials/SM_Female_07/4_meshes_Merge_0_Inst.uasset b/Content/Peoples/Female_07/Materials/SM_Female_07/4_meshes_Merge_0_Inst.uasset new file mode 100644 index 00000000..f5ebc5ce Binary files /dev/null and b/Content/Peoples/Female_07/Materials/SM_Female_07/4_meshes_Merge_0_Inst.uasset differ diff --git a/Content/Peoples/Female_07/Materials/SM_Female_07/4_meshes_Merge_Inst.uasset b/Content/Peoples/Female_07/Materials/SM_Female_07/4_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..dcf89f9b Binary files /dev/null and b/Content/Peoples/Female_07/Materials/SM_Female_07/4_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Female_07/SM_Female_07.uasset b/Content/Peoples/Female_07/SM_Female_07.uasset new file mode 100644 index 00000000..fefbdaf7 Binary files /dev/null and b/Content/Peoples/Female_07/SM_Female_07.uasset differ diff --git a/Content/Peoples/Female_07/SM_Female_07_PhysicsAsset.uasset b/Content/Peoples/Female_07/SM_Female_07_PhysicsAsset.uasset new file mode 100644 index 00000000..e70ae66b Binary files /dev/null and b/Content/Peoples/Female_07/SM_Female_07_PhysicsAsset.uasset differ diff --git a/Content/Peoples/Female_07/SM_Female_07_fbm/2_meshes_Merge_Diffuse.uasset b/Content/Peoples/Female_07/SM_Female_07_fbm/2_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..24823d0b Binary files /dev/null and b/Content/Peoples/Female_07/SM_Female_07_fbm/2_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Female_07/SM_Female_07_fbm/2_meshes_Merge_Normal.uasset b/Content/Peoples/Female_07/SM_Female_07_fbm/2_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..3d23abd9 Binary files /dev/null and b/Content/Peoples/Female_07/SM_Female_07_fbm/2_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Female_07/SM_Female_07_fbm/2_meshes_Merge_Opacity.uasset b/Content/Peoples/Female_07/SM_Female_07_fbm/2_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..2c3e6e8a Binary files /dev/null and b/Content/Peoples/Female_07/SM_Female_07_fbm/2_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Female_07/SM_Female_07_fbm/4_meshes_Merge_0_Diffuse.uasset b/Content/Peoples/Female_07/SM_Female_07_fbm/4_meshes_Merge_0_Diffuse.uasset new file mode 100644 index 00000000..7868df07 Binary files /dev/null and b/Content/Peoples/Female_07/SM_Female_07_fbm/4_meshes_Merge_0_Diffuse.uasset differ diff --git a/Content/Peoples/Female_07/SM_Female_07_fbm/4_meshes_Merge_0_Normal.uasset b/Content/Peoples/Female_07/SM_Female_07_fbm/4_meshes_Merge_0_Normal.uasset new file mode 100644 index 00000000..98885004 Binary files /dev/null and b/Content/Peoples/Female_07/SM_Female_07_fbm/4_meshes_Merge_0_Normal.uasset differ diff --git a/Content/Peoples/Female_07/SM_Female_07_fbm/4_meshes_Merge_0_Opacity.uasset b/Content/Peoples/Female_07/SM_Female_07_fbm/4_meshes_Merge_0_Opacity.uasset new file mode 100644 index 00000000..b636dd82 Binary files /dev/null and b/Content/Peoples/Female_07/SM_Female_07_fbm/4_meshes_Merge_0_Opacity.uasset differ diff --git a/Content/Peoples/Female_07/SM_Female_07_fbm/4_meshes_Merge_Diffuse.uasset b/Content/Peoples/Female_07/SM_Female_07_fbm/4_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..b9a78826 Binary files /dev/null and b/Content/Peoples/Female_07/SM_Female_07_fbm/4_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Female_07/SM_Female_07_fbm/4_meshes_Merge_Normal.uasset b/Content/Peoples/Female_07/SM_Female_07_fbm/4_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..b1948237 Binary files /dev/null and b/Content/Peoples/Female_07/SM_Female_07_fbm/4_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Female_07/SM_Female_07_fbm/4_meshes_Merge_Opacity.uasset b/Content/Peoples/Female_07/SM_Female_07_fbm/4_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..2699aa18 Binary files /dev/null and b/Content/Peoples/Female_07/SM_Female_07_fbm/4_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Female_07/textures/SM_Female_07/2_meshes_Merge_ORM.uasset b/Content/Peoples/Female_07/textures/SM_Female_07/2_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..3e7c8055 Binary files /dev/null and b/Content/Peoples/Female_07/textures/SM_Female_07/2_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Female_07/textures/SM_Female_07/4_meshes_Merge_0_ORM.uasset b/Content/Peoples/Female_07/textures/SM_Female_07/4_meshes_Merge_0_ORM.uasset new file mode 100644 index 00000000..73bdf1ba Binary files /dev/null and b/Content/Peoples/Female_07/textures/SM_Female_07/4_meshes_Merge_0_ORM.uasset differ diff --git a/Content/Peoples/Female_07/textures/SM_Female_07/4_meshes_Merge_ORM.uasset b/Content/Peoples/Female_07/textures/SM_Female_07/4_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..34cdefbc Binary files /dev/null and b/Content/Peoples/Female_07/textures/SM_Female_07/4_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Female_07/textures/SM_Female_07/4_meshes_Merge_ResourceMap_BlendMask.uasset b/Content/Peoples/Female_07/textures/SM_Female_07/4_meshes_Merge_ResourceMap_BlendMask.uasset new file mode 100644 index 00000000..5a54be19 Binary files /dev/null and b/Content/Peoples/Female_07/textures/SM_Female_07/4_meshes_Merge_ResourceMap_BlendMask.uasset differ diff --git a/Content/Peoples/Female_07/textures/SM_Female_07/4_meshes_Merge_ResourceMap_Position.uasset b/Content/Peoples/Female_07/textures/SM_Female_07/4_meshes_Merge_ResourceMap_Position.uasset new file mode 100644 index 00000000..36a37227 Binary files /dev/null and b/Content/Peoples/Female_07/textures/SM_Female_07/4_meshes_Merge_ResourceMap_Position.uasset differ diff --git a/Content/Peoples/Female_07/textures/SM_Female_07/4_meshes_Merge_ResourceMap_WSNormal.uasset b/Content/Peoples/Female_07/textures/SM_Female_07/4_meshes_Merge_ResourceMap_WSNormal.uasset new file mode 100644 index 00000000..a4b61a42 Binary files /dev/null and b/Content/Peoples/Female_07/textures/SM_Female_07/4_meshes_Merge_ResourceMap_WSNormal.uasset differ diff --git a/Content/Peoples/Female_08/Materials/SM_Female_08/2_meshes_Merge_Inst.uasset b/Content/Peoples/Female_08/Materials/SM_Female_08/2_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..c33fa4c9 Binary files /dev/null and b/Content/Peoples/Female_08/Materials/SM_Female_08/2_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Female_08/Materials/SM_Female_08/4_meshes_Merge_Inst.uasset b/Content/Peoples/Female_08/Materials/SM_Female_08/4_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..06de49cb Binary files /dev/null and b/Content/Peoples/Female_08/Materials/SM_Female_08/4_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Female_08/Materials/SM_Female_08/Wavy_short_Bob_0__Merge_Inst.uasset b/Content/Peoples/Female_08/Materials/SM_Female_08/Wavy_short_Bob_0__Merge_Inst.uasset new file mode 100644 index 00000000..df607add Binary files /dev/null and b/Content/Peoples/Female_08/Materials/SM_Female_08/Wavy_short_Bob_0__Merge_Inst.uasset differ diff --git a/Content/Peoples/Female_08/SM_Female_08.uasset b/Content/Peoples/Female_08/SM_Female_08.uasset new file mode 100644 index 00000000..4b15f876 Binary files /dev/null and b/Content/Peoples/Female_08/SM_Female_08.uasset differ diff --git a/Content/Peoples/Female_08/SM_Female_08_PhysicsAsset.uasset b/Content/Peoples/Female_08/SM_Female_08_PhysicsAsset.uasset new file mode 100644 index 00000000..9fabe219 Binary files /dev/null and b/Content/Peoples/Female_08/SM_Female_08_PhysicsAsset.uasset differ diff --git a/Content/Peoples/Female_08/SM_Female_08_fbm/2_meshes_Merge_Diffuse.uasset b/Content/Peoples/Female_08/SM_Female_08_fbm/2_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..573955b8 Binary files /dev/null and b/Content/Peoples/Female_08/SM_Female_08_fbm/2_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Female_08/SM_Female_08_fbm/2_meshes_Merge_Normal.uasset b/Content/Peoples/Female_08/SM_Female_08_fbm/2_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..fef7f886 Binary files /dev/null and b/Content/Peoples/Female_08/SM_Female_08_fbm/2_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Female_08/SM_Female_08_fbm/2_meshes_Merge_Opacity.uasset b/Content/Peoples/Female_08/SM_Female_08_fbm/2_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..ad25992e Binary files /dev/null and b/Content/Peoples/Female_08/SM_Female_08_fbm/2_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Female_08/SM_Female_08_fbm/4_meshes_Merge_Diffuse.uasset b/Content/Peoples/Female_08/SM_Female_08_fbm/4_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..f160670a Binary files /dev/null and b/Content/Peoples/Female_08/SM_Female_08_fbm/4_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Female_08/SM_Female_08_fbm/4_meshes_Merge_Normal.uasset b/Content/Peoples/Female_08/SM_Female_08_fbm/4_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..0c4edf98 Binary files /dev/null and b/Content/Peoples/Female_08/SM_Female_08_fbm/4_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Female_08/SM_Female_08_fbm/4_meshes_Merge_Opacity.uasset b/Content/Peoples/Female_08/SM_Female_08_fbm/4_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..09fe6e1f Binary files /dev/null and b/Content/Peoples/Female_08/SM_Female_08_fbm/4_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Female_08/SM_Female_08_fbm/Wavy_short_Bob_0__Merge_Diffuse.uasset b/Content/Peoples/Female_08/SM_Female_08_fbm/Wavy_short_Bob_0__Merge_Diffuse.uasset new file mode 100644 index 00000000..acd55dc2 Binary files /dev/null and b/Content/Peoples/Female_08/SM_Female_08_fbm/Wavy_short_Bob_0__Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Female_08/SM_Female_08_fbm/Wavy_short_Bob_0__Merge_Opacity.uasset b/Content/Peoples/Female_08/SM_Female_08_fbm/Wavy_short_Bob_0__Merge_Opacity.uasset new file mode 100644 index 00000000..3a774b00 Binary files /dev/null and b/Content/Peoples/Female_08/SM_Female_08_fbm/Wavy_short_Bob_0__Merge_Opacity.uasset differ diff --git a/Content/Peoples/Female_08/textures/SM_Female_08/2_meshes_Merge_Glow.uasset b/Content/Peoples/Female_08/textures/SM_Female_08/2_meshes_Merge_Glow.uasset new file mode 100644 index 00000000..e8ccad23 Binary files /dev/null and b/Content/Peoples/Female_08/textures/SM_Female_08/2_meshes_Merge_Glow.uasset differ diff --git a/Content/Peoples/Female_08/textures/SM_Female_08/2_meshes_Merge_ORM.uasset b/Content/Peoples/Female_08/textures/SM_Female_08/2_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..fbc6be7a Binary files /dev/null and b/Content/Peoples/Female_08/textures/SM_Female_08/2_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Female_08/textures/SM_Female_08/4_meshes_Merge_ORM.uasset b/Content/Peoples/Female_08/textures/SM_Female_08/4_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..08a5d2cc Binary files /dev/null and b/Content/Peoples/Female_08/textures/SM_Female_08/4_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Female_08/textures/SM_Female_08/4_meshes_Merge_ResourceMap_Position.uasset b/Content/Peoples/Female_08/textures/SM_Female_08/4_meshes_Merge_ResourceMap_Position.uasset new file mode 100644 index 00000000..754faedd Binary files /dev/null and b/Content/Peoples/Female_08/textures/SM_Female_08/4_meshes_Merge_ResourceMap_Position.uasset differ diff --git a/Content/Peoples/Female_08/textures/SM_Female_08/4_meshes_Merge_ResourceMap_WSNormal.uasset b/Content/Peoples/Female_08/textures/SM_Female_08/4_meshes_Merge_ResourceMap_WSNormal.uasset new file mode 100644 index 00000000..7324fefa Binary files /dev/null and b/Content/Peoples/Female_08/textures/SM_Female_08/4_meshes_Merge_ResourceMap_WSNormal.uasset differ diff --git a/Content/Peoples/Female_08/textures/SM_Female_08/Wavy_short_Bob_0__Merge_ORM.uasset b/Content/Peoples/Female_08/textures/SM_Female_08/Wavy_short_Bob_0__Merge_ORM.uasset new file mode 100644 index 00000000..6e963e03 Binary files /dev/null and b/Content/Peoples/Female_08/textures/SM_Female_08/Wavy_short_Bob_0__Merge_ORM.uasset differ diff --git a/Content/Peoples/Girl_01/Materials/SM_Girl_01/3_meshes_Merge_0_Inst.uasset b/Content/Peoples/Girl_01/Materials/SM_Girl_01/3_meshes_Merge_0_Inst.uasset new file mode 100644 index 00000000..2d05e8fc Binary files /dev/null and b/Content/Peoples/Girl_01/Materials/SM_Girl_01/3_meshes_Merge_0_Inst.uasset differ diff --git a/Content/Peoples/Girl_01/Materials/SM_Girl_01/3_meshes_Merge_Inst.uasset b/Content/Peoples/Girl_01/Materials/SM_Girl_01/3_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..a2f81bbf Binary files /dev/null and b/Content/Peoples/Girl_01/Materials/SM_Girl_01/3_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Girl_01/Materials/SM_Girl_01/4_meshes_Merge_Inst.uasset b/Content/Peoples/Girl_01/Materials/SM_Girl_01/4_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..6796527d Binary files /dev/null and b/Content/Peoples/Girl_01/Materials/SM_Girl_01/4_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Girl_01/SM_Girl_01.uasset b/Content/Peoples/Girl_01/SM_Girl_01.uasset new file mode 100644 index 00000000..0b8718cf Binary files /dev/null and b/Content/Peoples/Girl_01/SM_Girl_01.uasset differ diff --git a/Content/Peoples/Girl_01/SM_Girl_01_PhysicsAsset.uasset b/Content/Peoples/Girl_01/SM_Girl_01_PhysicsAsset.uasset new file mode 100644 index 00000000..61f9d447 Binary files /dev/null and b/Content/Peoples/Girl_01/SM_Girl_01_PhysicsAsset.uasset differ diff --git a/Content/Peoples/Girl_01/SM_Girl_01_fbm/3_meshes_Merge_0_Diffuse.uasset b/Content/Peoples/Girl_01/SM_Girl_01_fbm/3_meshes_Merge_0_Diffuse.uasset new file mode 100644 index 00000000..ab96bc30 Binary files /dev/null and b/Content/Peoples/Girl_01/SM_Girl_01_fbm/3_meshes_Merge_0_Diffuse.uasset differ diff --git a/Content/Peoples/Girl_01/SM_Girl_01_fbm/3_meshes_Merge_0_Normal.uasset b/Content/Peoples/Girl_01/SM_Girl_01_fbm/3_meshes_Merge_0_Normal.uasset new file mode 100644 index 00000000..2f81e766 Binary files /dev/null and b/Content/Peoples/Girl_01/SM_Girl_01_fbm/3_meshes_Merge_0_Normal.uasset differ diff --git a/Content/Peoples/Girl_01/SM_Girl_01_fbm/3_meshes_Merge_0_Opacity.uasset b/Content/Peoples/Girl_01/SM_Girl_01_fbm/3_meshes_Merge_0_Opacity.uasset new file mode 100644 index 00000000..61cdf1a4 Binary files /dev/null and b/Content/Peoples/Girl_01/SM_Girl_01_fbm/3_meshes_Merge_0_Opacity.uasset differ diff --git a/Content/Peoples/Girl_01/SM_Girl_01_fbm/3_meshes_Merge_Diffuse.uasset b/Content/Peoples/Girl_01/SM_Girl_01_fbm/3_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..4261124e Binary files /dev/null and b/Content/Peoples/Girl_01/SM_Girl_01_fbm/3_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Girl_01/SM_Girl_01_fbm/3_meshes_Merge_Normal.uasset b/Content/Peoples/Girl_01/SM_Girl_01_fbm/3_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..5c8eba7a Binary files /dev/null and b/Content/Peoples/Girl_01/SM_Girl_01_fbm/3_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Girl_01/SM_Girl_01_fbm/3_meshes_Merge_Opacity.uasset b/Content/Peoples/Girl_01/SM_Girl_01_fbm/3_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..5f127164 Binary files /dev/null and b/Content/Peoples/Girl_01/SM_Girl_01_fbm/3_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Girl_01/SM_Girl_01_fbm/4_meshes_Merge_Diffuse.uasset b/Content/Peoples/Girl_01/SM_Girl_01_fbm/4_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..a3bb5e14 Binary files /dev/null and b/Content/Peoples/Girl_01/SM_Girl_01_fbm/4_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Girl_01/SM_Girl_01_fbm/4_meshes_Merge_Normal.uasset b/Content/Peoples/Girl_01/SM_Girl_01_fbm/4_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..2c919991 Binary files /dev/null and b/Content/Peoples/Girl_01/SM_Girl_01_fbm/4_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Girl_01/SM_Girl_01_fbm/4_meshes_Merge_Opacity.uasset b/Content/Peoples/Girl_01/SM_Girl_01_fbm/4_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..96e57832 Binary files /dev/null and b/Content/Peoples/Girl_01/SM_Girl_01_fbm/4_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Girl_01/textures/SM_Girl_01/3_meshes_Merge_0_ORM.uasset b/Content/Peoples/Girl_01/textures/SM_Girl_01/3_meshes_Merge_0_ORM.uasset new file mode 100644 index 00000000..92a22ab3 Binary files /dev/null and b/Content/Peoples/Girl_01/textures/SM_Girl_01/3_meshes_Merge_0_ORM.uasset differ diff --git a/Content/Peoples/Girl_01/textures/SM_Girl_01/3_meshes_Merge_ORM.uasset b/Content/Peoples/Girl_01/textures/SM_Girl_01/3_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..0f2e1101 Binary files /dev/null and b/Content/Peoples/Girl_01/textures/SM_Girl_01/3_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Girl_01/textures/SM_Girl_01/4_meshes_Merge_ORM.uasset b/Content/Peoples/Girl_01/textures/SM_Girl_01/4_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..96e22a8f Binary files /dev/null and b/Content/Peoples/Girl_01/textures/SM_Girl_01/4_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Girl_01/textures/SM_Girl_01/4_meshes_Merge_ResourceMap_Position.uasset b/Content/Peoples/Girl_01/textures/SM_Girl_01/4_meshes_Merge_ResourceMap_Position.uasset new file mode 100644 index 00000000..58172eb0 Binary files /dev/null and b/Content/Peoples/Girl_01/textures/SM_Girl_01/4_meshes_Merge_ResourceMap_Position.uasset differ diff --git a/Content/Peoples/Girl_01/textures/SM_Girl_01/4_meshes_Merge_ResourceMap_WSNormal.uasset b/Content/Peoples/Girl_01/textures/SM_Girl_01/4_meshes_Merge_ResourceMap_WSNormal.uasset new file mode 100644 index 00000000..bdffc09c Binary files /dev/null and b/Content/Peoples/Girl_01/textures/SM_Girl_01/4_meshes_Merge_ResourceMap_WSNormal.uasset differ diff --git a/Content/Peoples/Girl_02/Materials/SM_Girl_02/2_meshes_Merge_Inst.uasset b/Content/Peoples/Girl_02/Materials/SM_Girl_02/2_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..3310e8c4 Binary files /dev/null and b/Content/Peoples/Girl_02/Materials/SM_Girl_02/2_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Girl_02/Materials/SM_Girl_02/3_meshes_Merge_Inst.uasset b/Content/Peoples/Girl_02/Materials/SM_Girl_02/3_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..193d1e4d Binary files /dev/null and b/Content/Peoples/Girl_02/Materials/SM_Girl_02/3_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Girl_02/Materials/SM_Girl_02/4_meshes_Merge_Inst.uasset b/Content/Peoples/Girl_02/Materials/SM_Girl_02/4_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..e0680519 Binary files /dev/null and b/Content/Peoples/Girl_02/Materials/SM_Girl_02/4_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02.uasset b/Content/Peoples/Girl_02/SM_Girl_02.uasset new file mode 100644 index 00000000..772e63e1 Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_PhysicsAsset.uasset b/Content/Peoples/Girl_02/SM_Girl_02_PhysicsAsset.uasset new file mode 100644 index 00000000..4cfc1d20 Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_PhysicsAsset.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/2_meshes_Merge_Diffuse.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/2_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..072b635c Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/2_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/2_meshes_Merge_Opacity.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/2_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..704d1e8c Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/2_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/3_meshes_Merge_Diffuse.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/3_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..372ab44a Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/3_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/3_meshes_Merge_Normal.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/3_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..6100f94e Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/3_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/3_meshes_Merge_Opacity.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/3_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..802ad0bb Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/3_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/4_meshes_Merge_Diffuse.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/4_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..cec0f5b3 Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/4_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/4_meshes_Merge_Normal.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/4_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..bbd68c66 Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/4_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/4_meshes_Merge_Opacity.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/4_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..91ba4f46 Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/4_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse.uasset new file mode 100644 index 00000000..8aacd2d0 Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse_0001.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse_0001.uasset new file mode 100644 index 00000000..d7e7b997 Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse_0001.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse_0002.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse_0002.uasset new file mode 100644 index 00000000..027489b9 Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse_0002.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse_0003.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse_0003.uasset new file mode 100644 index 00000000..5e9c96e9 Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse_0003.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse_0004.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse_0004.uasset new file mode 100644 index 00000000..9ed64b46 Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse_0004.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse_0005.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse_0005.uasset new file mode 100644 index 00000000..e0d7b254 Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse_0005.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse_0006.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse_0006.uasset new file mode 100644 index 00000000..fbff2ec9 Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse_0006.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse_0007.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse_0007.uasset new file mode 100644 index 00000000..4f7ff9ce Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse_0007.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse_0008.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse_0008.uasset new file mode 100644 index 00000000..a35e01ef Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Diffuse_0008.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Opacity.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Opacity.uasset new file mode 100644 index 00000000..64ab1ad9 Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Hair_Transparency_Opacity.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse.uasset new file mode 100644 index 00000000..eb2a2efb Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse_0001.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse_0001.uasset new file mode 100644 index 00000000..ee90998b Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse_0001.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse_0002.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse_0002.uasset new file mode 100644 index 00000000..85f48ec1 Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse_0002.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse_0003.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse_0003.uasset new file mode 100644 index 00000000..cb099f19 Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse_0003.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse_0004.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse_0004.uasset new file mode 100644 index 00000000..6cf2f691 Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse_0004.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse_0005.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse_0005.uasset new file mode 100644 index 00000000..1a8c480f Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse_0005.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse_0006.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse_0006.uasset new file mode 100644 index 00000000..94fbab64 Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse_0006.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse_0007.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse_0007.uasset new file mode 100644 index 00000000..518ea68a Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse_0007.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse_0008.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse_0008.uasset new file mode 100644 index 00000000..7852ce5a Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Diffuse_0008.uasset differ diff --git a/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Opacity.uasset b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Opacity.uasset new file mode 100644 index 00000000..92d18c00 Binary files /dev/null and b/Content/Peoples/Girl_02/SM_Girl_02_fbm/Scalp_Transparency_Opacity.uasset differ diff --git a/Content/Peoples/Girl_02/textures/SM_Girl_02/2_meshes_Merge_ORM.uasset b/Content/Peoples/Girl_02/textures/SM_Girl_02/2_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..5a926154 Binary files /dev/null and b/Content/Peoples/Girl_02/textures/SM_Girl_02/2_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Girl_02/textures/SM_Girl_02/3_meshes_Merge_ORM.uasset b/Content/Peoples/Girl_02/textures/SM_Girl_02/3_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..7fd8440d Binary files /dev/null and b/Content/Peoples/Girl_02/textures/SM_Girl_02/3_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Girl_02/textures/SM_Girl_02/4_meshes_Merge_ORM.uasset b/Content/Peoples/Girl_02/textures/SM_Girl_02/4_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..523ceac3 Binary files /dev/null and b/Content/Peoples/Girl_02/textures/SM_Girl_02/4_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Girl_02/textures/SM_Girl_02/4_meshes_Merge_ResourceMap_BlendMask.uasset b/Content/Peoples/Girl_02/textures/SM_Girl_02/4_meshes_Merge_ResourceMap_BlendMask.uasset new file mode 100644 index 00000000..7aff678c Binary files /dev/null and b/Content/Peoples/Girl_02/textures/SM_Girl_02/4_meshes_Merge_ResourceMap_BlendMask.uasset differ diff --git a/Content/Peoples/Girl_02/textures/SM_Girl_02/4_meshes_Merge_ResourceMap_Position.uasset b/Content/Peoples/Girl_02/textures/SM_Girl_02/4_meshes_Merge_ResourceMap_Position.uasset new file mode 100644 index 00000000..6433cd42 Binary files /dev/null and b/Content/Peoples/Girl_02/textures/SM_Girl_02/4_meshes_Merge_ResourceMap_Position.uasset differ diff --git a/Content/Peoples/Girl_02/textures/SM_Girl_02/4_meshes_Merge_ResourceMap_WSNormal.uasset b/Content/Peoples/Girl_02/textures/SM_Girl_02/4_meshes_Merge_ResourceMap_WSNormal.uasset new file mode 100644 index 00000000..0421b949 Binary files /dev/null and b/Content/Peoples/Girl_02/textures/SM_Girl_02/4_meshes_Merge_ResourceMap_WSNormal.uasset differ diff --git a/Content/Peoples/Girl_03/Materials/SM_Girl_03/3_meshes_Merge_Inst.uasset b/Content/Peoples/Girl_03/Materials/SM_Girl_03/3_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..a012a13a Binary files /dev/null and b/Content/Peoples/Girl_03/Materials/SM_Girl_03/3_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Girl_03/Materials/SM_Girl_03/4_meshes_Merge_Inst.uasset b/Content/Peoples/Girl_03/Materials/SM_Girl_03/4_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..d34a1481 Binary files /dev/null and b/Content/Peoples/Girl_03/Materials/SM_Girl_03/4_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Girl_03/Materials/SM_Girl_03/Wavy_short_Bob_0__Merge_Inst.uasset b/Content/Peoples/Girl_03/Materials/SM_Girl_03/Wavy_short_Bob_0__Merge_Inst.uasset new file mode 100644 index 00000000..48847135 Binary files /dev/null and b/Content/Peoples/Girl_03/Materials/SM_Girl_03/Wavy_short_Bob_0__Merge_Inst.uasset differ diff --git a/Content/Peoples/Girl_03/SM_Girl_03.uasset b/Content/Peoples/Girl_03/SM_Girl_03.uasset new file mode 100644 index 00000000..549be26b Binary files /dev/null and b/Content/Peoples/Girl_03/SM_Girl_03.uasset differ diff --git a/Content/Peoples/Girl_03/SM_Girl_03_PhysicsAsset.uasset b/Content/Peoples/Girl_03/SM_Girl_03_PhysicsAsset.uasset new file mode 100644 index 00000000..7b764767 Binary files /dev/null and b/Content/Peoples/Girl_03/SM_Girl_03_PhysicsAsset.uasset differ diff --git a/Content/Peoples/Girl_03/SM_Girl_03_fbm/3_meshes_Merge_Diffuse.uasset b/Content/Peoples/Girl_03/SM_Girl_03_fbm/3_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..d5085183 Binary files /dev/null and b/Content/Peoples/Girl_03/SM_Girl_03_fbm/3_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Girl_03/SM_Girl_03_fbm/3_meshes_Merge_Normal.uasset b/Content/Peoples/Girl_03/SM_Girl_03_fbm/3_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..4d9c1a09 Binary files /dev/null and b/Content/Peoples/Girl_03/SM_Girl_03_fbm/3_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Girl_03/SM_Girl_03_fbm/3_meshes_Merge_Opacity.uasset b/Content/Peoples/Girl_03/SM_Girl_03_fbm/3_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..899cde62 Binary files /dev/null and b/Content/Peoples/Girl_03/SM_Girl_03_fbm/3_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Girl_03/SM_Girl_03_fbm/4_meshes_Merge_Diffuse.uasset b/Content/Peoples/Girl_03/SM_Girl_03_fbm/4_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..980d02b0 Binary files /dev/null and b/Content/Peoples/Girl_03/SM_Girl_03_fbm/4_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Girl_03/SM_Girl_03_fbm/4_meshes_Merge_Normal.uasset b/Content/Peoples/Girl_03/SM_Girl_03_fbm/4_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..890b07b3 Binary files /dev/null and b/Content/Peoples/Girl_03/SM_Girl_03_fbm/4_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Girl_03/SM_Girl_03_fbm/4_meshes_Merge_Opacity.uasset b/Content/Peoples/Girl_03/SM_Girl_03_fbm/4_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..8daff643 Binary files /dev/null and b/Content/Peoples/Girl_03/SM_Girl_03_fbm/4_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Girl_03/SM_Girl_03_fbm/Wavy_short_Bob_0__Merge_Diffuse.uasset b/Content/Peoples/Girl_03/SM_Girl_03_fbm/Wavy_short_Bob_0__Merge_Diffuse.uasset new file mode 100644 index 00000000..cc55b31f Binary files /dev/null and b/Content/Peoples/Girl_03/SM_Girl_03_fbm/Wavy_short_Bob_0__Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Girl_03/SM_Girl_03_fbm/Wavy_short_Bob_0__Merge_Opacity.uasset b/Content/Peoples/Girl_03/SM_Girl_03_fbm/Wavy_short_Bob_0__Merge_Opacity.uasset new file mode 100644 index 00000000..24b54c2b Binary files /dev/null and b/Content/Peoples/Girl_03/SM_Girl_03_fbm/Wavy_short_Bob_0__Merge_Opacity.uasset differ diff --git a/Content/Peoples/Girl_03/textures/SM_Girl_03/3_meshes_Merge_Glow.uasset b/Content/Peoples/Girl_03/textures/SM_Girl_03/3_meshes_Merge_Glow.uasset new file mode 100644 index 00000000..c200e23c Binary files /dev/null and b/Content/Peoples/Girl_03/textures/SM_Girl_03/3_meshes_Merge_Glow.uasset differ diff --git a/Content/Peoples/Girl_03/textures/SM_Girl_03/3_meshes_Merge_ORM.uasset b/Content/Peoples/Girl_03/textures/SM_Girl_03/3_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..2aa6fef3 Binary files /dev/null and b/Content/Peoples/Girl_03/textures/SM_Girl_03/3_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Girl_03/textures/SM_Girl_03/4_meshes_Merge_ORM.uasset b/Content/Peoples/Girl_03/textures/SM_Girl_03/4_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..2e17059a Binary files /dev/null and b/Content/Peoples/Girl_03/textures/SM_Girl_03/4_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Girl_03/textures/SM_Girl_03/4_meshes_Merge_ResourceMap_Position.uasset b/Content/Peoples/Girl_03/textures/SM_Girl_03/4_meshes_Merge_ResourceMap_Position.uasset new file mode 100644 index 00000000..738f131b Binary files /dev/null and b/Content/Peoples/Girl_03/textures/SM_Girl_03/4_meshes_Merge_ResourceMap_Position.uasset differ diff --git a/Content/Peoples/Girl_03/textures/SM_Girl_03/4_meshes_Merge_ResourceMap_WSNormal.uasset b/Content/Peoples/Girl_03/textures/SM_Girl_03/4_meshes_Merge_ResourceMap_WSNormal.uasset new file mode 100644 index 00000000..99a59d4d Binary files /dev/null and b/Content/Peoples/Girl_03/textures/SM_Girl_03/4_meshes_Merge_ResourceMap_WSNormal.uasset differ diff --git a/Content/Peoples/Girl_03/textures/SM_Girl_03/Wavy_short_Bob_0__Merge_ORM.uasset b/Content/Peoples/Girl_03/textures/SM_Girl_03/Wavy_short_Bob_0__Merge_ORM.uasset new file mode 100644 index 00000000..a7a119c9 Binary files /dev/null and b/Content/Peoples/Girl_03/textures/SM_Girl_03/Wavy_short_Bob_0__Merge_ORM.uasset differ diff --git a/Content/Peoples/Male_01/Materials/SM_Male_01/4_meshes_Merge_0_Inst.uasset b/Content/Peoples/Male_01/Materials/SM_Male_01/4_meshes_Merge_0_Inst.uasset new file mode 100644 index 00000000..42e20b47 Binary files /dev/null and b/Content/Peoples/Male_01/Materials/SM_Male_01/4_meshes_Merge_0_Inst.uasset differ diff --git a/Content/Peoples/Male_01/Materials/SM_Male_01/4_meshes_Merge_Inst.uasset b/Content/Peoples/Male_01/Materials/SM_Male_01/4_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..a75ffada Binary files /dev/null and b/Content/Peoples/Male_01/Materials/SM_Male_01/4_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Male_01/Materials/SM_Male_01/Classic_side_part_0__Merge_Inst.uasset b/Content/Peoples/Male_01/Materials/SM_Male_01/Classic_side_part_0__Merge_Inst.uasset new file mode 100644 index 00000000..3f64ba19 Binary files /dev/null and b/Content/Peoples/Male_01/Materials/SM_Male_01/Classic_side_part_0__Merge_Inst.uasset differ diff --git a/Content/Peoples/Male_01/SM_Male_01.uasset b/Content/Peoples/Male_01/SM_Male_01.uasset new file mode 100644 index 00000000..b2d72256 Binary files /dev/null and b/Content/Peoples/Male_01/SM_Male_01.uasset differ diff --git a/Content/Peoples/Male_01/SM_Male_01_PhysicsAsset.uasset b/Content/Peoples/Male_01/SM_Male_01_PhysicsAsset.uasset new file mode 100644 index 00000000..6ec8faac Binary files /dev/null and b/Content/Peoples/Male_01/SM_Male_01_PhysicsAsset.uasset differ diff --git a/Content/Peoples/Male_01/SM_Male_01_fbm/4_meshes_Merge_0_Diffuse.uasset b/Content/Peoples/Male_01/SM_Male_01_fbm/4_meshes_Merge_0_Diffuse.uasset new file mode 100644 index 00000000..8ee68246 Binary files /dev/null and b/Content/Peoples/Male_01/SM_Male_01_fbm/4_meshes_Merge_0_Diffuse.uasset differ diff --git a/Content/Peoples/Male_01/SM_Male_01_fbm/4_meshes_Merge_0_Normal.uasset b/Content/Peoples/Male_01/SM_Male_01_fbm/4_meshes_Merge_0_Normal.uasset new file mode 100644 index 00000000..f56d84bd Binary files /dev/null and b/Content/Peoples/Male_01/SM_Male_01_fbm/4_meshes_Merge_0_Normal.uasset differ diff --git a/Content/Peoples/Male_01/SM_Male_01_fbm/4_meshes_Merge_0_Opacity.uasset b/Content/Peoples/Male_01/SM_Male_01_fbm/4_meshes_Merge_0_Opacity.uasset new file mode 100644 index 00000000..ca6d181d Binary files /dev/null and b/Content/Peoples/Male_01/SM_Male_01_fbm/4_meshes_Merge_0_Opacity.uasset differ diff --git a/Content/Peoples/Male_01/SM_Male_01_fbm/4_meshes_Merge_0_Specular.uasset b/Content/Peoples/Male_01/SM_Male_01_fbm/4_meshes_Merge_0_Specular.uasset new file mode 100644 index 00000000..79ae286e Binary files /dev/null and b/Content/Peoples/Male_01/SM_Male_01_fbm/4_meshes_Merge_0_Specular.uasset differ diff --git a/Content/Peoples/Male_01/SM_Male_01_fbm/4_meshes_Merge_Diffuse.uasset b/Content/Peoples/Male_01/SM_Male_01_fbm/4_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..001fe063 Binary files /dev/null and b/Content/Peoples/Male_01/SM_Male_01_fbm/4_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Male_01/SM_Male_01_fbm/4_meshes_Merge_Normal.uasset b/Content/Peoples/Male_01/SM_Male_01_fbm/4_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..0b99c87a Binary files /dev/null and b/Content/Peoples/Male_01/SM_Male_01_fbm/4_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Male_01/SM_Male_01_fbm/4_meshes_Merge_Opacity.uasset b/Content/Peoples/Male_01/SM_Male_01_fbm/4_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..89cae31c Binary files /dev/null and b/Content/Peoples/Male_01/SM_Male_01_fbm/4_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Male_01/SM_Male_01_fbm/9_meshes_Merge_Diffuse.uasset b/Content/Peoples/Male_01/SM_Male_01_fbm/9_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..b26c2521 Binary files /dev/null and b/Content/Peoples/Male_01/SM_Male_01_fbm/9_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Male_01/SM_Male_01_fbm/9_meshes_Merge_Normal.uasset b/Content/Peoples/Male_01/SM_Male_01_fbm/9_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..67c0f9e5 Binary files /dev/null and b/Content/Peoples/Male_01/SM_Male_01_fbm/9_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Male_01/SM_Male_01_fbm/9_meshes_Merge_Opacity.uasset b/Content/Peoples/Male_01/SM_Male_01_fbm/9_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..b5d18cad Binary files /dev/null and b/Content/Peoples/Male_01/SM_Male_01_fbm/9_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Male_01/SM_Male_01_fbm/Classic_side_part_0__Merge_Diffuse.uasset b/Content/Peoples/Male_01/SM_Male_01_fbm/Classic_side_part_0__Merge_Diffuse.uasset new file mode 100644 index 00000000..1d842eb0 Binary files /dev/null and b/Content/Peoples/Male_01/SM_Male_01_fbm/Classic_side_part_0__Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Male_01/SM_Male_01_fbm/Classic_side_part_0__Merge_Opacity.uasset b/Content/Peoples/Male_01/SM_Male_01_fbm/Classic_side_part_0__Merge_Opacity.uasset new file mode 100644 index 00000000..22b1baff Binary files /dev/null and b/Content/Peoples/Male_01/SM_Male_01_fbm/Classic_side_part_0__Merge_Opacity.uasset differ diff --git a/Content/Peoples/Male_01/SM_Male_01_fbm/Classic_side_part_0__Merge_Specular.uasset b/Content/Peoples/Male_01/SM_Male_01_fbm/Classic_side_part_0__Merge_Specular.uasset new file mode 100644 index 00000000..365f6083 Binary files /dev/null and b/Content/Peoples/Male_01/SM_Male_01_fbm/Classic_side_part_0__Merge_Specular.uasset differ diff --git a/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_0_Glow.uasset b/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_0_Glow.uasset new file mode 100644 index 00000000..5297ff49 Binary files /dev/null and b/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_0_Glow.uasset differ diff --git a/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_0_ORM.uasset b/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_0_ORM.uasset new file mode 100644 index 00000000..8a0f15e8 Binary files /dev/null and b/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_0_ORM.uasset differ diff --git a/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_0_ao.uasset b/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_0_ao.uasset new file mode 100644 index 00000000..492f87cb Binary files /dev/null and b/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_0_ao.uasset differ diff --git a/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_0_metallic.uasset b/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_0_metallic.uasset new file mode 100644 index 00000000..9be2537d Binary files /dev/null and b/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_0_metallic.uasset differ diff --git a/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_0_roughness.uasset b/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_0_roughness.uasset new file mode 100644 index 00000000..a00a2cea Binary files /dev/null and b/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_0_roughness.uasset differ diff --git a/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_ORM.uasset b/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..ae6443b1 Binary files /dev/null and b/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_ResourceMap_Position.uasset b/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_ResourceMap_Position.uasset new file mode 100644 index 00000000..74845a9c Binary files /dev/null and b/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_ResourceMap_Position.uasset differ diff --git a/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_ResourceMap_WSNormal.uasset b/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_ResourceMap_WSNormal.uasset new file mode 100644 index 00000000..67959333 Binary files /dev/null and b/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_ResourceMap_WSNormal.uasset differ diff --git a/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_ao.uasset b/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_ao.uasset new file mode 100644 index 00000000..940ea2de Binary files /dev/null and b/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_ao.uasset differ diff --git a/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_metallic.uasset b/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_metallic.uasset new file mode 100644 index 00000000..a1f6c719 Binary files /dev/null and b/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_metallic.uasset differ diff --git a/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_roughness.uasset b/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_roughness.uasset new file mode 100644 index 00000000..dbd9b480 Binary files /dev/null and b/Content/Peoples/Male_01/textures/SM_Male_01/4_meshes_Merge_roughness.uasset differ diff --git a/Content/Peoples/Male_01/textures/SM_Male_01/9_meshes_Merge_Glow.uasset b/Content/Peoples/Male_01/textures/SM_Male_01/9_meshes_Merge_Glow.uasset new file mode 100644 index 00000000..ba232ec9 Binary files /dev/null and b/Content/Peoples/Male_01/textures/SM_Male_01/9_meshes_Merge_Glow.uasset differ diff --git a/Content/Peoples/Male_01/textures/SM_Male_01/9_meshes_Merge_ORM.uasset b/Content/Peoples/Male_01/textures/SM_Male_01/9_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..bfd5908b Binary files /dev/null and b/Content/Peoples/Male_01/textures/SM_Male_01/9_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Male_01/textures/SM_Male_01/Classic_side_part_0__Merge_ORM.uasset b/Content/Peoples/Male_01/textures/SM_Male_01/Classic_side_part_0__Merge_ORM.uasset new file mode 100644 index 00000000..93eccc3a Binary files /dev/null and b/Content/Peoples/Male_01/textures/SM_Male_01/Classic_side_part_0__Merge_ORM.uasset differ diff --git a/Content/Peoples/Male_01/textures/SM_Male_01/Classic_side_part_0__Merge_ao.uasset b/Content/Peoples/Male_01/textures/SM_Male_01/Classic_side_part_0__Merge_ao.uasset new file mode 100644 index 00000000..4d0f1e1e Binary files /dev/null and b/Content/Peoples/Male_01/textures/SM_Male_01/Classic_side_part_0__Merge_ao.uasset differ diff --git a/Content/Peoples/Male_01/textures/SM_Male_01/Classic_side_part_0__Merge_metallic.uasset b/Content/Peoples/Male_01/textures/SM_Male_01/Classic_side_part_0__Merge_metallic.uasset new file mode 100644 index 00000000..e1d77569 Binary files /dev/null and b/Content/Peoples/Male_01/textures/SM_Male_01/Classic_side_part_0__Merge_metallic.uasset differ diff --git a/Content/Peoples/Male_01/textures/SM_Male_01/Classic_side_part_0__Merge_roughness.uasset b/Content/Peoples/Male_01/textures/SM_Male_01/Classic_side_part_0__Merge_roughness.uasset new file mode 100644 index 00000000..77b1cb7e Binary files /dev/null and b/Content/Peoples/Male_01/textures/SM_Male_01/Classic_side_part_0__Merge_roughness.uasset differ diff --git a/Content/Peoples/Male_02/Materials/SM_Male_02/3_meshes_Merge_Inst.uasset b/Content/Peoples/Male_02/Materials/SM_Male_02/3_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..22c37819 Binary files /dev/null and b/Content/Peoples/Male_02/Materials/SM_Male_02/3_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Male_02/Materials/SM_Male_02/4_meshes_Merge_Inst.uasset b/Content/Peoples/Male_02/Materials/SM_Male_02/4_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..b4f34795 Binary files /dev/null and b/Content/Peoples/Male_02/Materials/SM_Male_02/4_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Male_02/Materials/SM_Male_02/hair002_Merge_Inst.uasset b/Content/Peoples/Male_02/Materials/SM_Male_02/hair002_Merge_Inst.uasset new file mode 100644 index 00000000..81f1726b Binary files /dev/null and b/Content/Peoples/Male_02/Materials/SM_Male_02/hair002_Merge_Inst.uasset differ diff --git a/Content/Peoples/Male_02/SM_Male_02.uasset b/Content/Peoples/Male_02/SM_Male_02.uasset new file mode 100644 index 00000000..3f789b11 Binary files /dev/null and b/Content/Peoples/Male_02/SM_Male_02.uasset differ diff --git a/Content/Peoples/Male_02/SM_Male_02_PhysicsAsset.uasset b/Content/Peoples/Male_02/SM_Male_02_PhysicsAsset.uasset new file mode 100644 index 00000000..86b4f366 Binary files /dev/null and b/Content/Peoples/Male_02/SM_Male_02_PhysicsAsset.uasset differ diff --git a/Content/Peoples/Male_02/SM_Male_02_fbm/3_meshes_Merge_Diffuse.uasset b/Content/Peoples/Male_02/SM_Male_02_fbm/3_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..007de29b Binary files /dev/null and b/Content/Peoples/Male_02/SM_Male_02_fbm/3_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Male_02/SM_Male_02_fbm/3_meshes_Merge_Normal.uasset b/Content/Peoples/Male_02/SM_Male_02_fbm/3_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..d55d34ac Binary files /dev/null and b/Content/Peoples/Male_02/SM_Male_02_fbm/3_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Male_02/SM_Male_02_fbm/3_meshes_Merge_Opacity.uasset b/Content/Peoples/Male_02/SM_Male_02_fbm/3_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..f30cf3c1 Binary files /dev/null and b/Content/Peoples/Male_02/SM_Male_02_fbm/3_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Male_02/SM_Male_02_fbm/3_meshes_Merge_Specular.uasset b/Content/Peoples/Male_02/SM_Male_02_fbm/3_meshes_Merge_Specular.uasset new file mode 100644 index 00000000..a5ede999 Binary files /dev/null and b/Content/Peoples/Male_02/SM_Male_02_fbm/3_meshes_Merge_Specular.uasset differ diff --git a/Content/Peoples/Male_02/SM_Male_02_fbm/4_meshes_Merge_Diffuse.uasset b/Content/Peoples/Male_02/SM_Male_02_fbm/4_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..6bba8cc1 Binary files /dev/null and b/Content/Peoples/Male_02/SM_Male_02_fbm/4_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Male_02/SM_Male_02_fbm/4_meshes_Merge_Normal.uasset b/Content/Peoples/Male_02/SM_Male_02_fbm/4_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..1deedf70 Binary files /dev/null and b/Content/Peoples/Male_02/SM_Male_02_fbm/4_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Male_02/SM_Male_02_fbm/4_meshes_Merge_Opacity.uasset b/Content/Peoples/Male_02/SM_Male_02_fbm/4_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..4ecd2f96 Binary files /dev/null and b/Content/Peoples/Male_02/SM_Male_02_fbm/4_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Male_02/SM_Male_02_fbm/4_meshes_Merge_Reflection.uasset b/Content/Peoples/Male_02/SM_Male_02_fbm/4_meshes_Merge_Reflection.uasset new file mode 100644 index 00000000..8ecfcbe6 Binary files /dev/null and b/Content/Peoples/Male_02/SM_Male_02_fbm/4_meshes_Merge_Reflection.uasset differ diff --git a/Content/Peoples/Male_02/SM_Male_02_fbm/hair002_Merge_Diffuse.uasset b/Content/Peoples/Male_02/SM_Male_02_fbm/hair002_Merge_Diffuse.uasset new file mode 100644 index 00000000..3cfe1550 Binary files /dev/null and b/Content/Peoples/Male_02/SM_Male_02_fbm/hair002_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Male_02/SM_Male_02_fbm/hair002_Merge_Opacity.uasset b/Content/Peoples/Male_02/SM_Male_02_fbm/hair002_Merge_Opacity.uasset new file mode 100644 index 00000000..a94492c7 Binary files /dev/null and b/Content/Peoples/Male_02/SM_Male_02_fbm/hair002_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Male_02/SM_Male_02_fbm/hair002_Merge_Specular.uasset b/Content/Peoples/Male_02/SM_Male_02_fbm/hair002_Merge_Specular.uasset new file mode 100644 index 00000000..a504681f Binary files /dev/null and b/Content/Peoples/Male_02/SM_Male_02_fbm/hair002_Merge_Specular.uasset differ diff --git a/Content/Peoples/Male_02/textures/SM_Male_02/3_meshes_Merge_Glow.uasset b/Content/Peoples/Male_02/textures/SM_Male_02/3_meshes_Merge_Glow.uasset new file mode 100644 index 00000000..bbadcbed Binary files /dev/null and b/Content/Peoples/Male_02/textures/SM_Male_02/3_meshes_Merge_Glow.uasset differ diff --git a/Content/Peoples/Male_02/textures/SM_Male_02/3_meshes_Merge_ORM.uasset b/Content/Peoples/Male_02/textures/SM_Male_02/3_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..a4e0ebf4 Binary files /dev/null and b/Content/Peoples/Male_02/textures/SM_Male_02/3_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Male_02/textures/SM_Male_02/3_meshes_Merge_ao.uasset b/Content/Peoples/Male_02/textures/SM_Male_02/3_meshes_Merge_ao.uasset new file mode 100644 index 00000000..ef96e005 Binary files /dev/null and b/Content/Peoples/Male_02/textures/SM_Male_02/3_meshes_Merge_ao.uasset differ diff --git a/Content/Peoples/Male_02/textures/SM_Male_02/3_meshes_Merge_metallic.uasset b/Content/Peoples/Male_02/textures/SM_Male_02/3_meshes_Merge_metallic.uasset new file mode 100644 index 00000000..d07adcc2 Binary files /dev/null and b/Content/Peoples/Male_02/textures/SM_Male_02/3_meshes_Merge_metallic.uasset differ diff --git a/Content/Peoples/Male_02/textures/SM_Male_02/3_meshes_Merge_roughness.uasset b/Content/Peoples/Male_02/textures/SM_Male_02/3_meshes_Merge_roughness.uasset new file mode 100644 index 00000000..c56fb21c Binary files /dev/null and b/Content/Peoples/Male_02/textures/SM_Male_02/3_meshes_Merge_roughness.uasset differ diff --git a/Content/Peoples/Male_02/textures/SM_Male_02/4_meshes_Merge_ORM.uasset b/Content/Peoples/Male_02/textures/SM_Male_02/4_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..296d20a1 Binary files /dev/null and b/Content/Peoples/Male_02/textures/SM_Male_02/4_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Male_02/textures/SM_Male_02/4_meshes_Merge_ResourceMap_Position.uasset b/Content/Peoples/Male_02/textures/SM_Male_02/4_meshes_Merge_ResourceMap_Position.uasset new file mode 100644 index 00000000..2b6f205d Binary files /dev/null and b/Content/Peoples/Male_02/textures/SM_Male_02/4_meshes_Merge_ResourceMap_Position.uasset differ diff --git a/Content/Peoples/Male_02/textures/SM_Male_02/4_meshes_Merge_ResourceMap_WSNormal.uasset b/Content/Peoples/Male_02/textures/SM_Male_02/4_meshes_Merge_ResourceMap_WSNormal.uasset new file mode 100644 index 00000000..cd05c83c Binary files /dev/null and b/Content/Peoples/Male_02/textures/SM_Male_02/4_meshes_Merge_ResourceMap_WSNormal.uasset differ diff --git a/Content/Peoples/Male_02/textures/SM_Male_02/4_meshes_Merge_ao.uasset b/Content/Peoples/Male_02/textures/SM_Male_02/4_meshes_Merge_ao.uasset new file mode 100644 index 00000000..047c5546 Binary files /dev/null and b/Content/Peoples/Male_02/textures/SM_Male_02/4_meshes_Merge_ao.uasset differ diff --git a/Content/Peoples/Male_02/textures/SM_Male_02/4_meshes_Merge_metallic.uasset b/Content/Peoples/Male_02/textures/SM_Male_02/4_meshes_Merge_metallic.uasset new file mode 100644 index 00000000..2f3875d2 Binary files /dev/null and b/Content/Peoples/Male_02/textures/SM_Male_02/4_meshes_Merge_metallic.uasset differ diff --git a/Content/Peoples/Male_02/textures/SM_Male_02/4_meshes_Merge_roughness.uasset b/Content/Peoples/Male_02/textures/SM_Male_02/4_meshes_Merge_roughness.uasset new file mode 100644 index 00000000..ed06e040 Binary files /dev/null and b/Content/Peoples/Male_02/textures/SM_Male_02/4_meshes_Merge_roughness.uasset differ diff --git a/Content/Peoples/Male_02/textures/SM_Male_02/hair002_Merge_ORM.uasset b/Content/Peoples/Male_02/textures/SM_Male_02/hair002_Merge_ORM.uasset new file mode 100644 index 00000000..7a7e13a2 Binary files /dev/null and b/Content/Peoples/Male_02/textures/SM_Male_02/hair002_Merge_ORM.uasset differ diff --git a/Content/Peoples/Male_02/textures/SM_Male_02/hair002_Merge_ao.uasset b/Content/Peoples/Male_02/textures/SM_Male_02/hair002_Merge_ao.uasset new file mode 100644 index 00000000..bd0360a1 Binary files /dev/null and b/Content/Peoples/Male_02/textures/SM_Male_02/hair002_Merge_ao.uasset differ diff --git a/Content/Peoples/Male_02/textures/SM_Male_02/hair002_Merge_blend_multiply.uasset b/Content/Peoples/Male_02/textures/SM_Male_02/hair002_Merge_blend_multiply.uasset new file mode 100644 index 00000000..f32bfdd1 Binary files /dev/null and b/Content/Peoples/Male_02/textures/SM_Male_02/hair002_Merge_blend_multiply.uasset differ diff --git a/Content/Peoples/Male_02/textures/SM_Male_02/hair002_Merge_metallic.uasset b/Content/Peoples/Male_02/textures/SM_Male_02/hair002_Merge_metallic.uasset new file mode 100644 index 00000000..2bfb51c3 Binary files /dev/null and b/Content/Peoples/Male_02/textures/SM_Male_02/hair002_Merge_metallic.uasset differ diff --git a/Content/Peoples/Male_02/textures/SM_Male_02/hair002_Merge_roughness.uasset b/Content/Peoples/Male_02/textures/SM_Male_02/hair002_Merge_roughness.uasset new file mode 100644 index 00000000..bc5317f7 Binary files /dev/null and b/Content/Peoples/Male_02/textures/SM_Male_02/hair002_Merge_roughness.uasset differ diff --git a/Content/Peoples/Male_03/Materials/SM_Male_03/3_meshes_Merge_Inst.uasset b/Content/Peoples/Male_03/Materials/SM_Male_03/3_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..cdb95535 Binary files /dev/null and b/Content/Peoples/Male_03/Materials/SM_Male_03/3_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Male_03/Materials/SM_Male_03/4_meshes_Merge_Inst.uasset b/Content/Peoples/Male_03/Materials/SM_Male_03/4_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..3b3ad8a1 Binary files /dev/null and b/Content/Peoples/Male_03/Materials/SM_Male_03/4_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Male_03/SM_Male_03.uasset b/Content/Peoples/Male_03/SM_Male_03.uasset new file mode 100644 index 00000000..eb7748fa Binary files /dev/null and b/Content/Peoples/Male_03/SM_Male_03.uasset differ diff --git a/Content/Peoples/Male_03/SM_Male_03_PhysicsAsset.uasset b/Content/Peoples/Male_03/SM_Male_03_PhysicsAsset.uasset new file mode 100644 index 00000000..cb545d0d Binary files /dev/null and b/Content/Peoples/Male_03/SM_Male_03_PhysicsAsset.uasset differ diff --git a/Content/Peoples/Male_03/SM_Male_03_fbm/3_meshes_Merge_Diffuse.uasset b/Content/Peoples/Male_03/SM_Male_03_fbm/3_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..dc21f507 Binary files /dev/null and b/Content/Peoples/Male_03/SM_Male_03_fbm/3_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Male_03/SM_Male_03_fbm/3_meshes_Merge_Normal.uasset b/Content/Peoples/Male_03/SM_Male_03_fbm/3_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..afd1f975 Binary files /dev/null and b/Content/Peoples/Male_03/SM_Male_03_fbm/3_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Male_03/SM_Male_03_fbm/3_meshes_Merge_Opacity.uasset b/Content/Peoples/Male_03/SM_Male_03_fbm/3_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..d7dcc1ef Binary files /dev/null and b/Content/Peoples/Male_03/SM_Male_03_fbm/3_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Male_03/SM_Male_03_fbm/3_meshes_Merge_Specular.uasset b/Content/Peoples/Male_03/SM_Male_03_fbm/3_meshes_Merge_Specular.uasset new file mode 100644 index 00000000..7d02ea57 Binary files /dev/null and b/Content/Peoples/Male_03/SM_Male_03_fbm/3_meshes_Merge_Specular.uasset differ diff --git a/Content/Peoples/Male_03/SM_Male_03_fbm/4_meshes_Merge_Diffuse.uasset b/Content/Peoples/Male_03/SM_Male_03_fbm/4_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..a7fecfa0 Binary files /dev/null and b/Content/Peoples/Male_03/SM_Male_03_fbm/4_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Male_03/SM_Male_03_fbm/4_meshes_Merge_Normal.uasset b/Content/Peoples/Male_03/SM_Male_03_fbm/4_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..1b1e66f5 Binary files /dev/null and b/Content/Peoples/Male_03/SM_Male_03_fbm/4_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Male_03/SM_Male_03_fbm/4_meshes_Merge_Opacity.uasset b/Content/Peoples/Male_03/SM_Male_03_fbm/4_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..f2d0e8a9 Binary files /dev/null and b/Content/Peoples/Male_03/SM_Male_03_fbm/4_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Male_03/SM_Male_03_fbm/4_meshes_Merge_Reflection.uasset b/Content/Peoples/Male_03/SM_Male_03_fbm/4_meshes_Merge_Reflection.uasset new file mode 100644 index 00000000..dd083a07 Binary files /dev/null and b/Content/Peoples/Male_03/SM_Male_03_fbm/4_meshes_Merge_Reflection.uasset differ diff --git a/Content/Peoples/Male_03/textures/SM_Male_03/3_meshes_Merge_Glow.uasset b/Content/Peoples/Male_03/textures/SM_Male_03/3_meshes_Merge_Glow.uasset new file mode 100644 index 00000000..69800b9c Binary files /dev/null and b/Content/Peoples/Male_03/textures/SM_Male_03/3_meshes_Merge_Glow.uasset differ diff --git a/Content/Peoples/Male_03/textures/SM_Male_03/3_meshes_Merge_ORM.uasset b/Content/Peoples/Male_03/textures/SM_Male_03/3_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..e0809fbb Binary files /dev/null and b/Content/Peoples/Male_03/textures/SM_Male_03/3_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Male_03/textures/SM_Male_03/3_meshes_Merge_ao.uasset b/Content/Peoples/Male_03/textures/SM_Male_03/3_meshes_Merge_ao.uasset new file mode 100644 index 00000000..6cc67444 Binary files /dev/null and b/Content/Peoples/Male_03/textures/SM_Male_03/3_meshes_Merge_ao.uasset differ diff --git a/Content/Peoples/Male_03/textures/SM_Male_03/3_meshes_Merge_metallic.uasset b/Content/Peoples/Male_03/textures/SM_Male_03/3_meshes_Merge_metallic.uasset new file mode 100644 index 00000000..d555dd48 Binary files /dev/null and b/Content/Peoples/Male_03/textures/SM_Male_03/3_meshes_Merge_metallic.uasset differ diff --git a/Content/Peoples/Male_03/textures/SM_Male_03/3_meshes_Merge_roughness.uasset b/Content/Peoples/Male_03/textures/SM_Male_03/3_meshes_Merge_roughness.uasset new file mode 100644 index 00000000..dea0092a Binary files /dev/null and b/Content/Peoples/Male_03/textures/SM_Male_03/3_meshes_Merge_roughness.uasset differ diff --git a/Content/Peoples/Male_03/textures/SM_Male_03/4_meshes_Merge_ORM.uasset b/Content/Peoples/Male_03/textures/SM_Male_03/4_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..31eb8a31 Binary files /dev/null and b/Content/Peoples/Male_03/textures/SM_Male_03/4_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Male_03/textures/SM_Male_03/4_meshes_Merge_ResourceMap_Position.uasset b/Content/Peoples/Male_03/textures/SM_Male_03/4_meshes_Merge_ResourceMap_Position.uasset new file mode 100644 index 00000000..de41513b Binary files /dev/null and b/Content/Peoples/Male_03/textures/SM_Male_03/4_meshes_Merge_ResourceMap_Position.uasset differ diff --git a/Content/Peoples/Male_03/textures/SM_Male_03/4_meshes_Merge_ResourceMap_WSNormal.uasset b/Content/Peoples/Male_03/textures/SM_Male_03/4_meshes_Merge_ResourceMap_WSNormal.uasset new file mode 100644 index 00000000..efdab4bb Binary files /dev/null and b/Content/Peoples/Male_03/textures/SM_Male_03/4_meshes_Merge_ResourceMap_WSNormal.uasset differ diff --git a/Content/Peoples/Male_03/textures/SM_Male_03/4_meshes_Merge_ao.uasset b/Content/Peoples/Male_03/textures/SM_Male_03/4_meshes_Merge_ao.uasset new file mode 100644 index 00000000..93c39116 Binary files /dev/null and b/Content/Peoples/Male_03/textures/SM_Male_03/4_meshes_Merge_ao.uasset differ diff --git a/Content/Peoples/Male_03/textures/SM_Male_03/4_meshes_Merge_metallic.uasset b/Content/Peoples/Male_03/textures/SM_Male_03/4_meshes_Merge_metallic.uasset new file mode 100644 index 00000000..ac709528 Binary files /dev/null and b/Content/Peoples/Male_03/textures/SM_Male_03/4_meshes_Merge_metallic.uasset differ diff --git a/Content/Peoples/Male_03/textures/SM_Male_03/4_meshes_Merge_roughness.uasset b/Content/Peoples/Male_03/textures/SM_Male_03/4_meshes_Merge_roughness.uasset new file mode 100644 index 00000000..820fc1c9 Binary files /dev/null and b/Content/Peoples/Male_03/textures/SM_Male_03/4_meshes_Merge_roughness.uasset differ diff --git a/Content/Peoples/Male_04/Materials/SM_Male_04/3_meshes_Merge_Inst.uasset b/Content/Peoples/Male_04/Materials/SM_Male_04/3_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..cc72d2ce Binary files /dev/null and b/Content/Peoples/Male_04/Materials/SM_Male_04/3_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Male_04/Materials/SM_Male_04/4_meshes_Merge_Inst.uasset b/Content/Peoples/Male_04/Materials/SM_Male_04/4_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..19014a1c Binary files /dev/null and b/Content/Peoples/Male_04/Materials/SM_Male_04/4_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Male_04/Materials/SM_Male_04/Center_part_curtains_0__Merge_Inst.uasset b/Content/Peoples/Male_04/Materials/SM_Male_04/Center_part_curtains_0__Merge_Inst.uasset new file mode 100644 index 00000000..0c7d8244 Binary files /dev/null and b/Content/Peoples/Male_04/Materials/SM_Male_04/Center_part_curtains_0__Merge_Inst.uasset differ diff --git a/Content/Peoples/Male_04/SM_Male_04.uasset b/Content/Peoples/Male_04/SM_Male_04.uasset new file mode 100644 index 00000000..07e3a3be Binary files /dev/null and b/Content/Peoples/Male_04/SM_Male_04.uasset differ diff --git a/Content/Peoples/Male_04/SM_Male_04_PhysicsAsset.uasset b/Content/Peoples/Male_04/SM_Male_04_PhysicsAsset.uasset new file mode 100644 index 00000000..b94d0ea8 Binary files /dev/null and b/Content/Peoples/Male_04/SM_Male_04_PhysicsAsset.uasset differ diff --git a/Content/Peoples/Male_04/SM_Male_04_fbm/3_meshes_Merge_Diffuse.uasset b/Content/Peoples/Male_04/SM_Male_04_fbm/3_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..c51923f6 Binary files /dev/null and b/Content/Peoples/Male_04/SM_Male_04_fbm/3_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Male_04/SM_Male_04_fbm/3_meshes_Merge_Normal.uasset b/Content/Peoples/Male_04/SM_Male_04_fbm/3_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..4e643916 Binary files /dev/null and b/Content/Peoples/Male_04/SM_Male_04_fbm/3_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Male_04/SM_Male_04_fbm/3_meshes_Merge_Opacity.uasset b/Content/Peoples/Male_04/SM_Male_04_fbm/3_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..3f2f0379 Binary files /dev/null and b/Content/Peoples/Male_04/SM_Male_04_fbm/3_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Male_04/SM_Male_04_fbm/3_meshes_Merge_Specular.uasset b/Content/Peoples/Male_04/SM_Male_04_fbm/3_meshes_Merge_Specular.uasset new file mode 100644 index 00000000..1d9d0360 Binary files /dev/null and b/Content/Peoples/Male_04/SM_Male_04_fbm/3_meshes_Merge_Specular.uasset differ diff --git a/Content/Peoples/Male_04/SM_Male_04_fbm/4_meshes_Merge_Diffuse.uasset b/Content/Peoples/Male_04/SM_Male_04_fbm/4_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..f876ab2a Binary files /dev/null and b/Content/Peoples/Male_04/SM_Male_04_fbm/4_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Male_04/SM_Male_04_fbm/4_meshes_Merge_Normal.uasset b/Content/Peoples/Male_04/SM_Male_04_fbm/4_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..f1205743 Binary files /dev/null and b/Content/Peoples/Male_04/SM_Male_04_fbm/4_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Male_04/SM_Male_04_fbm/4_meshes_Merge_Opacity.uasset b/Content/Peoples/Male_04/SM_Male_04_fbm/4_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..d963fcfe Binary files /dev/null and b/Content/Peoples/Male_04/SM_Male_04_fbm/4_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Male_04/SM_Male_04_fbm/4_meshes_Merge_Reflection.uasset b/Content/Peoples/Male_04/SM_Male_04_fbm/4_meshes_Merge_Reflection.uasset new file mode 100644 index 00000000..c0b74ea6 Binary files /dev/null and b/Content/Peoples/Male_04/SM_Male_04_fbm/4_meshes_Merge_Reflection.uasset differ diff --git a/Content/Peoples/Male_04/SM_Male_04_fbm/Center_part_curtains_0__Merge_Diffuse.uasset b/Content/Peoples/Male_04/SM_Male_04_fbm/Center_part_curtains_0__Merge_Diffuse.uasset new file mode 100644 index 00000000..049fab4d Binary files /dev/null and b/Content/Peoples/Male_04/SM_Male_04_fbm/Center_part_curtains_0__Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Male_04/SM_Male_04_fbm/Center_part_curtains_0__Merge_Opacity.uasset b/Content/Peoples/Male_04/SM_Male_04_fbm/Center_part_curtains_0__Merge_Opacity.uasset new file mode 100644 index 00000000..e2ab39d9 Binary files /dev/null and b/Content/Peoples/Male_04/SM_Male_04_fbm/Center_part_curtains_0__Merge_Opacity.uasset differ diff --git a/Content/Peoples/Male_04/SM_Male_04_fbm/Center_part_curtains_0__Merge_Specular.uasset b/Content/Peoples/Male_04/SM_Male_04_fbm/Center_part_curtains_0__Merge_Specular.uasset new file mode 100644 index 00000000..7293621f Binary files /dev/null and b/Content/Peoples/Male_04/SM_Male_04_fbm/Center_part_curtains_0__Merge_Specular.uasset differ diff --git a/Content/Peoples/Male_04/textures/SM_Male_04/3_meshes_Merge_Glow.uasset b/Content/Peoples/Male_04/textures/SM_Male_04/3_meshes_Merge_Glow.uasset new file mode 100644 index 00000000..6014f6d8 Binary files /dev/null and b/Content/Peoples/Male_04/textures/SM_Male_04/3_meshes_Merge_Glow.uasset differ diff --git a/Content/Peoples/Male_04/textures/SM_Male_04/3_meshes_Merge_ORM.uasset b/Content/Peoples/Male_04/textures/SM_Male_04/3_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..6b5322bf Binary files /dev/null and b/Content/Peoples/Male_04/textures/SM_Male_04/3_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Male_04/textures/SM_Male_04/3_meshes_Merge_ao.uasset b/Content/Peoples/Male_04/textures/SM_Male_04/3_meshes_Merge_ao.uasset new file mode 100644 index 00000000..789c5877 Binary files /dev/null and b/Content/Peoples/Male_04/textures/SM_Male_04/3_meshes_Merge_ao.uasset differ diff --git a/Content/Peoples/Male_04/textures/SM_Male_04/3_meshes_Merge_metallic.uasset b/Content/Peoples/Male_04/textures/SM_Male_04/3_meshes_Merge_metallic.uasset new file mode 100644 index 00000000..313ed6a6 Binary files /dev/null and b/Content/Peoples/Male_04/textures/SM_Male_04/3_meshes_Merge_metallic.uasset differ diff --git a/Content/Peoples/Male_04/textures/SM_Male_04/3_meshes_Merge_roughness.uasset b/Content/Peoples/Male_04/textures/SM_Male_04/3_meshes_Merge_roughness.uasset new file mode 100644 index 00000000..deaadfc8 Binary files /dev/null and b/Content/Peoples/Male_04/textures/SM_Male_04/3_meshes_Merge_roughness.uasset differ diff --git a/Content/Peoples/Male_04/textures/SM_Male_04/4_meshes_Merge_ORM.uasset b/Content/Peoples/Male_04/textures/SM_Male_04/4_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..f77c463e Binary files /dev/null and b/Content/Peoples/Male_04/textures/SM_Male_04/4_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Male_04/textures/SM_Male_04/4_meshes_Merge_ResourceMap_Position.uasset b/Content/Peoples/Male_04/textures/SM_Male_04/4_meshes_Merge_ResourceMap_Position.uasset new file mode 100644 index 00000000..d0dced40 Binary files /dev/null and b/Content/Peoples/Male_04/textures/SM_Male_04/4_meshes_Merge_ResourceMap_Position.uasset differ diff --git a/Content/Peoples/Male_04/textures/SM_Male_04/4_meshes_Merge_ResourceMap_WSNormal.uasset b/Content/Peoples/Male_04/textures/SM_Male_04/4_meshes_Merge_ResourceMap_WSNormal.uasset new file mode 100644 index 00000000..9438dc84 Binary files /dev/null and b/Content/Peoples/Male_04/textures/SM_Male_04/4_meshes_Merge_ResourceMap_WSNormal.uasset differ diff --git a/Content/Peoples/Male_04/textures/SM_Male_04/4_meshes_Merge_ao.uasset b/Content/Peoples/Male_04/textures/SM_Male_04/4_meshes_Merge_ao.uasset new file mode 100644 index 00000000..a22c695b Binary files /dev/null and b/Content/Peoples/Male_04/textures/SM_Male_04/4_meshes_Merge_ao.uasset differ diff --git a/Content/Peoples/Male_04/textures/SM_Male_04/4_meshes_Merge_metallic.uasset b/Content/Peoples/Male_04/textures/SM_Male_04/4_meshes_Merge_metallic.uasset new file mode 100644 index 00000000..477bce2f Binary files /dev/null and b/Content/Peoples/Male_04/textures/SM_Male_04/4_meshes_Merge_metallic.uasset differ diff --git a/Content/Peoples/Male_04/textures/SM_Male_04/4_meshes_Merge_roughness.uasset b/Content/Peoples/Male_04/textures/SM_Male_04/4_meshes_Merge_roughness.uasset new file mode 100644 index 00000000..46cd224e Binary files /dev/null and b/Content/Peoples/Male_04/textures/SM_Male_04/4_meshes_Merge_roughness.uasset differ diff --git a/Content/Peoples/Male_04/textures/SM_Male_04/Center_part_curtains_0__Merge_ORM.uasset b/Content/Peoples/Male_04/textures/SM_Male_04/Center_part_curtains_0__Merge_ORM.uasset new file mode 100644 index 00000000..83e31edc Binary files /dev/null and b/Content/Peoples/Male_04/textures/SM_Male_04/Center_part_curtains_0__Merge_ORM.uasset differ diff --git a/Content/Peoples/Male_04/textures/SM_Male_04/Center_part_curtains_0__Merge_ao.uasset b/Content/Peoples/Male_04/textures/SM_Male_04/Center_part_curtains_0__Merge_ao.uasset new file mode 100644 index 00000000..ee97916a Binary files /dev/null and b/Content/Peoples/Male_04/textures/SM_Male_04/Center_part_curtains_0__Merge_ao.uasset differ diff --git a/Content/Peoples/Male_04/textures/SM_Male_04/Center_part_curtains_0__Merge_metallic.uasset b/Content/Peoples/Male_04/textures/SM_Male_04/Center_part_curtains_0__Merge_metallic.uasset new file mode 100644 index 00000000..23be3ca5 Binary files /dev/null and b/Content/Peoples/Male_04/textures/SM_Male_04/Center_part_curtains_0__Merge_metallic.uasset differ diff --git a/Content/Peoples/Male_04/textures/SM_Male_04/Center_part_curtains_0__Merge_roughness.uasset b/Content/Peoples/Male_04/textures/SM_Male_04/Center_part_curtains_0__Merge_roughness.uasset new file mode 100644 index 00000000..2f74f047 Binary files /dev/null and b/Content/Peoples/Male_04/textures/SM_Male_04/Center_part_curtains_0__Merge_roughness.uasset differ diff --git a/Content/Peoples/Male_05/Materials/SM_Male_05/3_meshes_Merge_Inst.uasset b/Content/Peoples/Male_05/Materials/SM_Male_05/3_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..b1938f6d Binary files /dev/null and b/Content/Peoples/Male_05/Materials/SM_Male_05/3_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Male_05/Materials/SM_Male_05/4_meshes_Merge_Inst.uasset b/Content/Peoples/Male_05/Materials/SM_Male_05/4_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..4bd1748f Binary files /dev/null and b/Content/Peoples/Male_05/Materials/SM_Male_05/4_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Male_05/Materials/SM_Male_05/Center_part_curtains_0__Merge_Inst.uasset b/Content/Peoples/Male_05/Materials/SM_Male_05/Center_part_curtains_0__Merge_Inst.uasset new file mode 100644 index 00000000..435b739b Binary files /dev/null and b/Content/Peoples/Male_05/Materials/SM_Male_05/Center_part_curtains_0__Merge_Inst.uasset differ diff --git a/Content/Peoples/Male_05/SM_Male_05.uasset b/Content/Peoples/Male_05/SM_Male_05.uasset new file mode 100644 index 00000000..9b33b69a Binary files /dev/null and b/Content/Peoples/Male_05/SM_Male_05.uasset differ diff --git a/Content/Peoples/Male_05/SM_Male_05_PhysicsAsset.uasset b/Content/Peoples/Male_05/SM_Male_05_PhysicsAsset.uasset new file mode 100644 index 00000000..3bce17f3 Binary files /dev/null and b/Content/Peoples/Male_05/SM_Male_05_PhysicsAsset.uasset differ diff --git a/Content/Peoples/Male_05/SM_Male_05_fbm/3_meshes_Merge_Diffuse.uasset b/Content/Peoples/Male_05/SM_Male_05_fbm/3_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..4ec3c66b Binary files /dev/null and b/Content/Peoples/Male_05/SM_Male_05_fbm/3_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Male_05/SM_Male_05_fbm/3_meshes_Merge_Normal.uasset b/Content/Peoples/Male_05/SM_Male_05_fbm/3_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..5e36dc22 Binary files /dev/null and b/Content/Peoples/Male_05/SM_Male_05_fbm/3_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Male_05/SM_Male_05_fbm/3_meshes_Merge_Opacity.uasset b/Content/Peoples/Male_05/SM_Male_05_fbm/3_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..029850b2 Binary files /dev/null and b/Content/Peoples/Male_05/SM_Male_05_fbm/3_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Male_05/SM_Male_05_fbm/3_meshes_Merge_Specular.uasset b/Content/Peoples/Male_05/SM_Male_05_fbm/3_meshes_Merge_Specular.uasset new file mode 100644 index 00000000..6bd6d509 Binary files /dev/null and b/Content/Peoples/Male_05/SM_Male_05_fbm/3_meshes_Merge_Specular.uasset differ diff --git a/Content/Peoples/Male_05/SM_Male_05_fbm/4_meshes_Merge_Diffuse.uasset b/Content/Peoples/Male_05/SM_Male_05_fbm/4_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..ccdcdaca Binary files /dev/null and b/Content/Peoples/Male_05/SM_Male_05_fbm/4_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Male_05/SM_Male_05_fbm/4_meshes_Merge_Normal.uasset b/Content/Peoples/Male_05/SM_Male_05_fbm/4_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..f03fcf40 Binary files /dev/null and b/Content/Peoples/Male_05/SM_Male_05_fbm/4_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Male_05/SM_Male_05_fbm/4_meshes_Merge_Opacity.uasset b/Content/Peoples/Male_05/SM_Male_05_fbm/4_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..1a176ca7 Binary files /dev/null and b/Content/Peoples/Male_05/SM_Male_05_fbm/4_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Male_05/SM_Male_05_fbm/Center_part_curtains_0__Merge_Diffuse.uasset b/Content/Peoples/Male_05/SM_Male_05_fbm/Center_part_curtains_0__Merge_Diffuse.uasset new file mode 100644 index 00000000..3a8d4744 Binary files /dev/null and b/Content/Peoples/Male_05/SM_Male_05_fbm/Center_part_curtains_0__Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Male_05/SM_Male_05_fbm/Center_part_curtains_0__Merge_Opacity.uasset b/Content/Peoples/Male_05/SM_Male_05_fbm/Center_part_curtains_0__Merge_Opacity.uasset new file mode 100644 index 00000000..95666b09 Binary files /dev/null and b/Content/Peoples/Male_05/SM_Male_05_fbm/Center_part_curtains_0__Merge_Opacity.uasset differ diff --git a/Content/Peoples/Male_05/SM_Male_05_fbm/Center_part_curtains_0__Merge_Specular.uasset b/Content/Peoples/Male_05/SM_Male_05_fbm/Center_part_curtains_0__Merge_Specular.uasset new file mode 100644 index 00000000..7c9721ba Binary files /dev/null and b/Content/Peoples/Male_05/SM_Male_05_fbm/Center_part_curtains_0__Merge_Specular.uasset differ diff --git a/Content/Peoples/Male_05/textures/SM_Male_05/3_meshes_Merge_roughness.uasset b/Content/Peoples/Male_05/textures/SM_Male_05/3_meshes_Merge_roughness.uasset new file mode 100644 index 00000000..31d76485 Binary files /dev/null and b/Content/Peoples/Male_05/textures/SM_Male_05/3_meshes_Merge_roughness.uasset differ diff --git a/Content/Peoples/Male_05/textures/SM_Male_05/4_meshes_Merge_ORM.uasset b/Content/Peoples/Male_05/textures/SM_Male_05/4_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..041a42ab Binary files /dev/null and b/Content/Peoples/Male_05/textures/SM_Male_05/4_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Male_05/textures/SM_Male_05/4_meshes_Merge_ResourceMap_Position.uasset b/Content/Peoples/Male_05/textures/SM_Male_05/4_meshes_Merge_ResourceMap_Position.uasset new file mode 100644 index 00000000..c2bea833 Binary files /dev/null and b/Content/Peoples/Male_05/textures/SM_Male_05/4_meshes_Merge_ResourceMap_Position.uasset differ diff --git a/Content/Peoples/Male_05/textures/SM_Male_05/4_meshes_Merge_ResourceMap_WSNormal.uasset b/Content/Peoples/Male_05/textures/SM_Male_05/4_meshes_Merge_ResourceMap_WSNormal.uasset new file mode 100644 index 00000000..92ec767e Binary files /dev/null and b/Content/Peoples/Male_05/textures/SM_Male_05/4_meshes_Merge_ResourceMap_WSNormal.uasset differ diff --git a/Content/Peoples/Male_05/textures/SM_Male_05/4_meshes_Merge_ao.uasset b/Content/Peoples/Male_05/textures/SM_Male_05/4_meshes_Merge_ao.uasset new file mode 100644 index 00000000..208f2cb0 Binary files /dev/null and b/Content/Peoples/Male_05/textures/SM_Male_05/4_meshes_Merge_ao.uasset differ diff --git a/Content/Peoples/Male_05/textures/SM_Male_05/4_meshes_Merge_metallic.uasset b/Content/Peoples/Male_05/textures/SM_Male_05/4_meshes_Merge_metallic.uasset new file mode 100644 index 00000000..56939e4c Binary files /dev/null and b/Content/Peoples/Male_05/textures/SM_Male_05/4_meshes_Merge_metallic.uasset differ diff --git a/Content/Peoples/Male_05/textures/SM_Male_05/4_meshes_Merge_roughness.uasset b/Content/Peoples/Male_05/textures/SM_Male_05/4_meshes_Merge_roughness.uasset new file mode 100644 index 00000000..ded9ba0a Binary files /dev/null and b/Content/Peoples/Male_05/textures/SM_Male_05/4_meshes_Merge_roughness.uasset differ diff --git a/Content/Peoples/Male_05/textures/SM_Male_05/Center_part_curtains_0__Merge_ORM.uasset b/Content/Peoples/Male_05/textures/SM_Male_05/Center_part_curtains_0__Merge_ORM.uasset new file mode 100644 index 00000000..371e97a8 Binary files /dev/null and b/Content/Peoples/Male_05/textures/SM_Male_05/Center_part_curtains_0__Merge_ORM.uasset differ diff --git a/Content/Peoples/Male_05/textures/SM_Male_05/Center_part_curtains_0__Merge_ao.uasset b/Content/Peoples/Male_05/textures/SM_Male_05/Center_part_curtains_0__Merge_ao.uasset new file mode 100644 index 00000000..b2d29dd5 Binary files /dev/null and b/Content/Peoples/Male_05/textures/SM_Male_05/Center_part_curtains_0__Merge_ao.uasset differ diff --git a/Content/Peoples/Male_05/textures/SM_Male_05/Center_part_curtains_0__Merge_metallic.uasset b/Content/Peoples/Male_05/textures/SM_Male_05/Center_part_curtains_0__Merge_metallic.uasset new file mode 100644 index 00000000..ea835a65 Binary files /dev/null and b/Content/Peoples/Male_05/textures/SM_Male_05/Center_part_curtains_0__Merge_metallic.uasset differ diff --git a/Content/Peoples/Male_05/textures/SM_Male_05/Center_part_curtains_0__Merge_roughness.uasset b/Content/Peoples/Male_05/textures/SM_Male_05/Center_part_curtains_0__Merge_roughness.uasset new file mode 100644 index 00000000..ec81ca6f Binary files /dev/null and b/Content/Peoples/Male_05/textures/SM_Male_05/Center_part_curtains_0__Merge_roughness.uasset differ diff --git a/Content/Peoples/Male_06/Materials/SM_Male_06/3_meshes_Merge_Inst.uasset b/Content/Peoples/Male_06/Materials/SM_Male_06/3_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..79fa4cee Binary files /dev/null and b/Content/Peoples/Male_06/Materials/SM_Male_06/3_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Male_06/Materials/SM_Male_06/4_meshes_Merge_Inst.uasset b/Content/Peoples/Male_06/Materials/SM_Male_06/4_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..da84fe40 Binary files /dev/null and b/Content/Peoples/Male_06/Materials/SM_Male_06/4_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Male_06/Materials/SM_Male_06/Classic_side_part_0__Merge_Inst.uasset b/Content/Peoples/Male_06/Materials/SM_Male_06/Classic_side_part_0__Merge_Inst.uasset new file mode 100644 index 00000000..522af125 Binary files /dev/null and b/Content/Peoples/Male_06/Materials/SM_Male_06/Classic_side_part_0__Merge_Inst.uasset differ diff --git a/Content/Peoples/Male_06/SM_Male_06.uasset b/Content/Peoples/Male_06/SM_Male_06.uasset new file mode 100644 index 00000000..9f5b7f89 Binary files /dev/null and b/Content/Peoples/Male_06/SM_Male_06.uasset differ diff --git a/Content/Peoples/Male_06/SM_Male_06_PhysicsAsset.uasset b/Content/Peoples/Male_06/SM_Male_06_PhysicsAsset.uasset new file mode 100644 index 00000000..ddf77211 Binary files /dev/null and b/Content/Peoples/Male_06/SM_Male_06_PhysicsAsset.uasset differ diff --git a/Content/Peoples/Male_06/SM_Male_06_fbm/3_meshes_Merge_Diffuse.uasset b/Content/Peoples/Male_06/SM_Male_06_fbm/3_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..1a9ef352 Binary files /dev/null and b/Content/Peoples/Male_06/SM_Male_06_fbm/3_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Male_06/SM_Male_06_fbm/3_meshes_Merge_Normal.uasset b/Content/Peoples/Male_06/SM_Male_06_fbm/3_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..a262740e Binary files /dev/null and b/Content/Peoples/Male_06/SM_Male_06_fbm/3_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Male_06/SM_Male_06_fbm/3_meshes_Merge_Opacity.uasset b/Content/Peoples/Male_06/SM_Male_06_fbm/3_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..766c54fd Binary files /dev/null and b/Content/Peoples/Male_06/SM_Male_06_fbm/3_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Male_06/SM_Male_06_fbm/4_meshes_Merge_Diffuse.uasset b/Content/Peoples/Male_06/SM_Male_06_fbm/4_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..97344db0 Binary files /dev/null and b/Content/Peoples/Male_06/SM_Male_06_fbm/4_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Male_06/SM_Male_06_fbm/4_meshes_Merge_Normal.uasset b/Content/Peoples/Male_06/SM_Male_06_fbm/4_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..e2998864 Binary files /dev/null and b/Content/Peoples/Male_06/SM_Male_06_fbm/4_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Male_06/SM_Male_06_fbm/4_meshes_Merge_Opacity.uasset b/Content/Peoples/Male_06/SM_Male_06_fbm/4_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..7523a737 Binary files /dev/null and b/Content/Peoples/Male_06/SM_Male_06_fbm/4_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Male_06/SM_Male_06_fbm/Classic_side_part_0__Merge_Diffuse.uasset b/Content/Peoples/Male_06/SM_Male_06_fbm/Classic_side_part_0__Merge_Diffuse.uasset new file mode 100644 index 00000000..59573e90 Binary files /dev/null and b/Content/Peoples/Male_06/SM_Male_06_fbm/Classic_side_part_0__Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Male_06/SM_Male_06_fbm/Classic_side_part_0__Merge_Opacity.uasset b/Content/Peoples/Male_06/SM_Male_06_fbm/Classic_side_part_0__Merge_Opacity.uasset new file mode 100644 index 00000000..94507b24 Binary files /dev/null and b/Content/Peoples/Male_06/SM_Male_06_fbm/Classic_side_part_0__Merge_Opacity.uasset differ diff --git a/Content/Peoples/Male_06/textures/SM_Male_06/3_meshes_Merge_Glow.uasset b/Content/Peoples/Male_06/textures/SM_Male_06/3_meshes_Merge_Glow.uasset new file mode 100644 index 00000000..f61cf0bb Binary files /dev/null and b/Content/Peoples/Male_06/textures/SM_Male_06/3_meshes_Merge_Glow.uasset differ diff --git a/Content/Peoples/Male_06/textures/SM_Male_06/3_meshes_Merge_ORM.uasset b/Content/Peoples/Male_06/textures/SM_Male_06/3_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..beb29df6 Binary files /dev/null and b/Content/Peoples/Male_06/textures/SM_Male_06/3_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Male_06/textures/SM_Male_06/4_meshes_Merge_ORM.uasset b/Content/Peoples/Male_06/textures/SM_Male_06/4_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..e6556535 Binary files /dev/null and b/Content/Peoples/Male_06/textures/SM_Male_06/4_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Male_06/textures/SM_Male_06/4_meshes_Merge_ResourceMap_Position.uasset b/Content/Peoples/Male_06/textures/SM_Male_06/4_meshes_Merge_ResourceMap_Position.uasset new file mode 100644 index 00000000..a7c5f271 Binary files /dev/null and b/Content/Peoples/Male_06/textures/SM_Male_06/4_meshes_Merge_ResourceMap_Position.uasset differ diff --git a/Content/Peoples/Male_06/textures/SM_Male_06/4_meshes_Merge_ResourceMap_WSNormal.uasset b/Content/Peoples/Male_06/textures/SM_Male_06/4_meshes_Merge_ResourceMap_WSNormal.uasset new file mode 100644 index 00000000..41038ed1 Binary files /dev/null and b/Content/Peoples/Male_06/textures/SM_Male_06/4_meshes_Merge_ResourceMap_WSNormal.uasset differ diff --git a/Content/Peoples/Male_06/textures/SM_Male_06/4_meshes_Merge_blend_multiply.uasset b/Content/Peoples/Male_06/textures/SM_Male_06/4_meshes_Merge_blend_multiply.uasset new file mode 100644 index 00000000..b36182e6 Binary files /dev/null and b/Content/Peoples/Male_06/textures/SM_Male_06/4_meshes_Merge_blend_multiply.uasset differ diff --git a/Content/Peoples/Male_06/textures/SM_Male_06/Classic_side_part_0__Merge_ORM.uasset b/Content/Peoples/Male_06/textures/SM_Male_06/Classic_side_part_0__Merge_ORM.uasset new file mode 100644 index 00000000..40e9eb58 Binary files /dev/null and b/Content/Peoples/Male_06/textures/SM_Male_06/Classic_side_part_0__Merge_ORM.uasset differ diff --git a/Content/Peoples/Male_07/Materials/SM_Male_07/3_meshes_Merge_0_Inst.uasset b/Content/Peoples/Male_07/Materials/SM_Male_07/3_meshes_Merge_0_Inst.uasset new file mode 100644 index 00000000..323a6191 Binary files /dev/null and b/Content/Peoples/Male_07/Materials/SM_Male_07/3_meshes_Merge_0_Inst.uasset differ diff --git a/Content/Peoples/Male_07/Materials/SM_Male_07/3_meshes_Merge_Inst.uasset b/Content/Peoples/Male_07/Materials/SM_Male_07/3_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..9a061591 Binary files /dev/null and b/Content/Peoples/Male_07/Materials/SM_Male_07/3_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Male_07/Materials/SM_Male_07/4_meshes_Merge_Inst.uasset b/Content/Peoples/Male_07/Materials/SM_Male_07/4_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..2cddfdae Binary files /dev/null and b/Content/Peoples/Male_07/Materials/SM_Male_07/4_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Male_07/Materials/SM_Male_07/hair002_Merge_Inst.uasset b/Content/Peoples/Male_07/Materials/SM_Male_07/hair002_Merge_Inst.uasset new file mode 100644 index 00000000..400bb292 Binary files /dev/null and b/Content/Peoples/Male_07/Materials/SM_Male_07/hair002_Merge_Inst.uasset differ diff --git a/Content/Peoples/Male_07/SM_Male_07.uasset b/Content/Peoples/Male_07/SM_Male_07.uasset new file mode 100644 index 00000000..faea2429 Binary files /dev/null and b/Content/Peoples/Male_07/SM_Male_07.uasset differ diff --git a/Content/Peoples/Male_07/SM_Male_07_PhysicsAsset.uasset b/Content/Peoples/Male_07/SM_Male_07_PhysicsAsset.uasset new file mode 100644 index 00000000..93edf62c Binary files /dev/null and b/Content/Peoples/Male_07/SM_Male_07_PhysicsAsset.uasset differ diff --git a/Content/Peoples/Male_07/SM_Male_07_fbm/3_meshes_Merge_0_Diffuse.uasset b/Content/Peoples/Male_07/SM_Male_07_fbm/3_meshes_Merge_0_Diffuse.uasset new file mode 100644 index 00000000..de661860 Binary files /dev/null and b/Content/Peoples/Male_07/SM_Male_07_fbm/3_meshes_Merge_0_Diffuse.uasset differ diff --git a/Content/Peoples/Male_07/SM_Male_07_fbm/3_meshes_Merge_0_Opacity.uasset b/Content/Peoples/Male_07/SM_Male_07_fbm/3_meshes_Merge_0_Opacity.uasset new file mode 100644 index 00000000..c2aa3219 Binary files /dev/null and b/Content/Peoples/Male_07/SM_Male_07_fbm/3_meshes_Merge_0_Opacity.uasset differ diff --git a/Content/Peoples/Male_07/SM_Male_07_fbm/3_meshes_Merge_Diffuse.uasset b/Content/Peoples/Male_07/SM_Male_07_fbm/3_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..b6668218 Binary files /dev/null and b/Content/Peoples/Male_07/SM_Male_07_fbm/3_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Male_07/SM_Male_07_fbm/3_meshes_Merge_Normal.uasset b/Content/Peoples/Male_07/SM_Male_07_fbm/3_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..65dd82ba Binary files /dev/null and b/Content/Peoples/Male_07/SM_Male_07_fbm/3_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Male_07/SM_Male_07_fbm/3_meshes_Merge_Opacity.uasset b/Content/Peoples/Male_07/SM_Male_07_fbm/3_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..e828c37b Binary files /dev/null and b/Content/Peoples/Male_07/SM_Male_07_fbm/3_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Male_07/SM_Male_07_fbm/3_meshes_Merge_Specular.uasset b/Content/Peoples/Male_07/SM_Male_07_fbm/3_meshes_Merge_Specular.uasset new file mode 100644 index 00000000..53b64b63 Binary files /dev/null and b/Content/Peoples/Male_07/SM_Male_07_fbm/3_meshes_Merge_Specular.uasset differ diff --git a/Content/Peoples/Male_07/SM_Male_07_fbm/4_meshes_Merge_Diffuse.uasset b/Content/Peoples/Male_07/SM_Male_07_fbm/4_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..e5bfa1a9 Binary files /dev/null and b/Content/Peoples/Male_07/SM_Male_07_fbm/4_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Male_07/SM_Male_07_fbm/4_meshes_Merge_Normal.uasset b/Content/Peoples/Male_07/SM_Male_07_fbm/4_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..feabe4fd Binary files /dev/null and b/Content/Peoples/Male_07/SM_Male_07_fbm/4_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Male_07/SM_Male_07_fbm/4_meshes_Merge_Opacity.uasset b/Content/Peoples/Male_07/SM_Male_07_fbm/4_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..358e112f Binary files /dev/null and b/Content/Peoples/Male_07/SM_Male_07_fbm/4_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Male_07/SM_Male_07_fbm/Chin_Curtain_Sparse_Merge_Diffuse.uasset b/Content/Peoples/Male_07/SM_Male_07_fbm/Chin_Curtain_Sparse_Merge_Diffuse.uasset new file mode 100644 index 00000000..29a80319 Binary files /dev/null and b/Content/Peoples/Male_07/SM_Male_07_fbm/Chin_Curtain_Sparse_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Male_07/SM_Male_07_fbm/Chin_Curtain_Sparse_Merge_Opacity.uasset b/Content/Peoples/Male_07/SM_Male_07_fbm/Chin_Curtain_Sparse_Merge_Opacity.uasset new file mode 100644 index 00000000..ee94eebe Binary files /dev/null and b/Content/Peoples/Male_07/SM_Male_07_fbm/Chin_Curtain_Sparse_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Male_07/SM_Male_07_fbm/Chin_Curtain_Sparse_Merge_Specular.uasset b/Content/Peoples/Male_07/SM_Male_07_fbm/Chin_Curtain_Sparse_Merge_Specular.uasset new file mode 100644 index 00000000..fbc9b339 Binary files /dev/null and b/Content/Peoples/Male_07/SM_Male_07_fbm/Chin_Curtain_Sparse_Merge_Specular.uasset differ diff --git a/Content/Peoples/Male_07/SM_Male_07_fbm/hair002_Merge_Diffuse.uasset b/Content/Peoples/Male_07/SM_Male_07_fbm/hair002_Merge_Diffuse.uasset new file mode 100644 index 00000000..f7c6f19e Binary files /dev/null and b/Content/Peoples/Male_07/SM_Male_07_fbm/hair002_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Male_07/SM_Male_07_fbm/hair002_Merge_Opacity.uasset b/Content/Peoples/Male_07/SM_Male_07_fbm/hair002_Merge_Opacity.uasset new file mode 100644 index 00000000..750d54a7 Binary files /dev/null and b/Content/Peoples/Male_07/SM_Male_07_fbm/hair002_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Male_07/SM_Male_07_fbm/hair002_Merge_Specular.uasset b/Content/Peoples/Male_07/SM_Male_07_fbm/hair002_Merge_Specular.uasset new file mode 100644 index 00000000..c6c244fc Binary files /dev/null and b/Content/Peoples/Male_07/SM_Male_07_fbm/hair002_Merge_Specular.uasset differ diff --git a/Content/Peoples/Male_07/textures/SM_Male_07/3_meshes_Merge_0_ORM.uasset b/Content/Peoples/Male_07/textures/SM_Male_07/3_meshes_Merge_0_ORM.uasset new file mode 100644 index 00000000..ecc3b098 Binary files /dev/null and b/Content/Peoples/Male_07/textures/SM_Male_07/3_meshes_Merge_0_ORM.uasset differ diff --git a/Content/Peoples/Male_07/textures/SM_Male_07/4_meshes_Merge_ORM.uasset b/Content/Peoples/Male_07/textures/SM_Male_07/4_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..2003994b Binary files /dev/null and b/Content/Peoples/Male_07/textures/SM_Male_07/4_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Male_07/textures/SM_Male_07/4_meshes_Merge_ResourceMap_Position.uasset b/Content/Peoples/Male_07/textures/SM_Male_07/4_meshes_Merge_ResourceMap_Position.uasset new file mode 100644 index 00000000..f48cdaaf Binary files /dev/null and b/Content/Peoples/Male_07/textures/SM_Male_07/4_meshes_Merge_ResourceMap_Position.uasset differ diff --git a/Content/Peoples/Male_07/textures/SM_Male_07/4_meshes_Merge_ResourceMap_WSNormal.uasset b/Content/Peoples/Male_07/textures/SM_Male_07/4_meshes_Merge_ResourceMap_WSNormal.uasset new file mode 100644 index 00000000..460a776f Binary files /dev/null and b/Content/Peoples/Male_07/textures/SM_Male_07/4_meshes_Merge_ResourceMap_WSNormal.uasset differ diff --git a/Content/Peoples/Male_07/textures/SM_Male_07/4_meshes_Merge_ao.uasset b/Content/Peoples/Male_07/textures/SM_Male_07/4_meshes_Merge_ao.uasset new file mode 100644 index 00000000..5f24d42b Binary files /dev/null and b/Content/Peoples/Male_07/textures/SM_Male_07/4_meshes_Merge_ao.uasset differ diff --git a/Content/Peoples/Male_07/textures/SM_Male_07/4_meshes_Merge_metallic.uasset b/Content/Peoples/Male_07/textures/SM_Male_07/4_meshes_Merge_metallic.uasset new file mode 100644 index 00000000..37eee51b Binary files /dev/null and b/Content/Peoples/Male_07/textures/SM_Male_07/4_meshes_Merge_metallic.uasset differ diff --git a/Content/Peoples/Male_07/textures/SM_Male_07/4_meshes_Merge_roughness.uasset b/Content/Peoples/Male_07/textures/SM_Male_07/4_meshes_Merge_roughness.uasset new file mode 100644 index 00000000..2763ee09 Binary files /dev/null and b/Content/Peoples/Male_07/textures/SM_Male_07/4_meshes_Merge_roughness.uasset differ diff --git a/Content/Peoples/Male_07/textures/SM_Male_07/Chin_Curtain_Sparse_Merge_ORM.uasset b/Content/Peoples/Male_07/textures/SM_Male_07/Chin_Curtain_Sparse_Merge_ORM.uasset new file mode 100644 index 00000000..7f5f22f1 Binary files /dev/null and b/Content/Peoples/Male_07/textures/SM_Male_07/Chin_Curtain_Sparse_Merge_ORM.uasset differ diff --git a/Content/Peoples/Male_07/textures/SM_Male_07/Chin_Curtain_Sparse_Merge_ao.uasset b/Content/Peoples/Male_07/textures/SM_Male_07/Chin_Curtain_Sparse_Merge_ao.uasset new file mode 100644 index 00000000..76ced7e2 Binary files /dev/null and b/Content/Peoples/Male_07/textures/SM_Male_07/Chin_Curtain_Sparse_Merge_ao.uasset differ diff --git a/Content/Peoples/Male_07/textures/SM_Male_07/Chin_Curtain_Sparse_Merge_metallic.uasset b/Content/Peoples/Male_07/textures/SM_Male_07/Chin_Curtain_Sparse_Merge_metallic.uasset new file mode 100644 index 00000000..d2b61671 Binary files /dev/null and b/Content/Peoples/Male_07/textures/SM_Male_07/Chin_Curtain_Sparse_Merge_metallic.uasset differ diff --git a/Content/Peoples/Male_07/textures/SM_Male_07/Chin_Curtain_Sparse_Merge_roughness.uasset b/Content/Peoples/Male_07/textures/SM_Male_07/Chin_Curtain_Sparse_Merge_roughness.uasset new file mode 100644 index 00000000..fa662625 Binary files /dev/null and b/Content/Peoples/Male_07/textures/SM_Male_07/Chin_Curtain_Sparse_Merge_roughness.uasset differ diff --git a/Content/Peoples/Male_07/textures/SM_Male_07/hair002_Merge_ORM.uasset b/Content/Peoples/Male_07/textures/SM_Male_07/hair002_Merge_ORM.uasset new file mode 100644 index 00000000..f5218bf9 Binary files /dev/null and b/Content/Peoples/Male_07/textures/SM_Male_07/hair002_Merge_ORM.uasset differ diff --git a/Content/Peoples/Male_07/textures/SM_Male_07/hair002_Merge_ao.uasset b/Content/Peoples/Male_07/textures/SM_Male_07/hair002_Merge_ao.uasset new file mode 100644 index 00000000..d1185235 Binary files /dev/null and b/Content/Peoples/Male_07/textures/SM_Male_07/hair002_Merge_ao.uasset differ diff --git a/Content/Peoples/Male_07/textures/SM_Male_07/hair002_Merge_blend_multiply.uasset b/Content/Peoples/Male_07/textures/SM_Male_07/hair002_Merge_blend_multiply.uasset new file mode 100644 index 00000000..d3b5d5f8 Binary files /dev/null and b/Content/Peoples/Male_07/textures/SM_Male_07/hair002_Merge_blend_multiply.uasset differ diff --git a/Content/Peoples/Male_07/textures/SM_Male_07/hair002_Merge_metallic.uasset b/Content/Peoples/Male_07/textures/SM_Male_07/hair002_Merge_metallic.uasset new file mode 100644 index 00000000..3fdd8bf0 Binary files /dev/null and b/Content/Peoples/Male_07/textures/SM_Male_07/hair002_Merge_metallic.uasset differ diff --git a/Content/Peoples/Male_07/textures/SM_Male_07/hair002_Merge_roughness.uasset b/Content/Peoples/Male_07/textures/SM_Male_07/hair002_Merge_roughness.uasset new file mode 100644 index 00000000..f149d588 Binary files /dev/null and b/Content/Peoples/Male_07/textures/SM_Male_07/hair002_Merge_roughness.uasset differ diff --git a/Content/Peoples/Male_08/Materials/SM_Male_08/2_meshes_Merge_Inst.uasset b/Content/Peoples/Male_08/Materials/SM_Male_08/2_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..ab7c6985 Binary files /dev/null and b/Content/Peoples/Male_08/Materials/SM_Male_08/2_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Male_08/Materials/SM_Male_08/3_meshes_Merge_Inst.uasset b/Content/Peoples/Male_08/Materials/SM_Male_08/3_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..8fa6f61a Binary files /dev/null and b/Content/Peoples/Male_08/Materials/SM_Male_08/3_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Male_08/Materials/SM_Male_08/4_meshes_Merge_Inst.uasset b/Content/Peoples/Male_08/Materials/SM_Male_08/4_meshes_Merge_Inst.uasset new file mode 100644 index 00000000..2848cd79 Binary files /dev/null and b/Content/Peoples/Male_08/Materials/SM_Male_08/4_meshes_Merge_Inst.uasset differ diff --git a/Content/Peoples/Male_08/SM_Male_08.uasset b/Content/Peoples/Male_08/SM_Male_08.uasset new file mode 100644 index 00000000..cfee7ac9 Binary files /dev/null and b/Content/Peoples/Male_08/SM_Male_08.uasset differ diff --git a/Content/Peoples/Male_08/SM_Male_08_PhysicsAsset.uasset b/Content/Peoples/Male_08/SM_Male_08_PhysicsAsset.uasset new file mode 100644 index 00000000..429e047a Binary files /dev/null and b/Content/Peoples/Male_08/SM_Male_08_PhysicsAsset.uasset differ diff --git a/Content/Peoples/Male_08/SM_Male_08_fbm/2_meshes_Merge_Diffuse.uasset b/Content/Peoples/Male_08/SM_Male_08_fbm/2_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..99fa7cbc Binary files /dev/null and b/Content/Peoples/Male_08/SM_Male_08_fbm/2_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Male_08/SM_Male_08_fbm/2_meshes_Merge_Normal.uasset b/Content/Peoples/Male_08/SM_Male_08_fbm/2_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..9b9509d7 Binary files /dev/null and b/Content/Peoples/Male_08/SM_Male_08_fbm/2_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Male_08/SM_Male_08_fbm/2_meshes_Merge_Opacity.uasset b/Content/Peoples/Male_08/SM_Male_08_fbm/2_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..494aa5cc Binary files /dev/null and b/Content/Peoples/Male_08/SM_Male_08_fbm/2_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Male_08/SM_Male_08_fbm/3_meshes_Merge_Diffuse.uasset b/Content/Peoples/Male_08/SM_Male_08_fbm/3_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..23a128b2 Binary files /dev/null and b/Content/Peoples/Male_08/SM_Male_08_fbm/3_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Male_08/SM_Male_08_fbm/3_meshes_Merge_Normal.uasset b/Content/Peoples/Male_08/SM_Male_08_fbm/3_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..ebf10e7c Binary files /dev/null and b/Content/Peoples/Male_08/SM_Male_08_fbm/3_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Male_08/SM_Male_08_fbm/3_meshes_Merge_Opacity.uasset b/Content/Peoples/Male_08/SM_Male_08_fbm/3_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..f22a613b Binary files /dev/null and b/Content/Peoples/Male_08/SM_Male_08_fbm/3_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Male_08/SM_Male_08_fbm/3_meshes_Merge_Specular.uasset b/Content/Peoples/Male_08/SM_Male_08_fbm/3_meshes_Merge_Specular.uasset new file mode 100644 index 00000000..71d45d23 Binary files /dev/null and b/Content/Peoples/Male_08/SM_Male_08_fbm/3_meshes_Merge_Specular.uasset differ diff --git a/Content/Peoples/Male_08/SM_Male_08_fbm/4_meshes_Merge_Diffuse.uasset b/Content/Peoples/Male_08/SM_Male_08_fbm/4_meshes_Merge_Diffuse.uasset new file mode 100644 index 00000000..09907f54 Binary files /dev/null and b/Content/Peoples/Male_08/SM_Male_08_fbm/4_meshes_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Male_08/SM_Male_08_fbm/4_meshes_Merge_Normal.uasset b/Content/Peoples/Male_08/SM_Male_08_fbm/4_meshes_Merge_Normal.uasset new file mode 100644 index 00000000..0f5865ff Binary files /dev/null and b/Content/Peoples/Male_08/SM_Male_08_fbm/4_meshes_Merge_Normal.uasset differ diff --git a/Content/Peoples/Male_08/SM_Male_08_fbm/4_meshes_Merge_Opacity.uasset b/Content/Peoples/Male_08/SM_Male_08_fbm/4_meshes_Merge_Opacity.uasset new file mode 100644 index 00000000..75d9e27f Binary files /dev/null and b/Content/Peoples/Male_08/SM_Male_08_fbm/4_meshes_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Male_08/SM_Male_08_fbm/hair002_Merge_Diffuse.uasset b/Content/Peoples/Male_08/SM_Male_08_fbm/hair002_Merge_Diffuse.uasset new file mode 100644 index 00000000..8d9c35df Binary files /dev/null and b/Content/Peoples/Male_08/SM_Male_08_fbm/hair002_Merge_Diffuse.uasset differ diff --git a/Content/Peoples/Male_08/SM_Male_08_fbm/hair002_Merge_Opacity.uasset b/Content/Peoples/Male_08/SM_Male_08_fbm/hair002_Merge_Opacity.uasset new file mode 100644 index 00000000..f73eb3e1 Binary files /dev/null and b/Content/Peoples/Male_08/SM_Male_08_fbm/hair002_Merge_Opacity.uasset differ diff --git a/Content/Peoples/Male_08/textures/SM_Male_08/2_meshes_Merge_ORM.uasset b/Content/Peoples/Male_08/textures/SM_Male_08/2_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..b154baf9 Binary files /dev/null and b/Content/Peoples/Male_08/textures/SM_Male_08/2_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Male_08/textures/SM_Male_08/4_meshes_Merge_ORM.uasset b/Content/Peoples/Male_08/textures/SM_Male_08/4_meshes_Merge_ORM.uasset new file mode 100644 index 00000000..8d6746d7 Binary files /dev/null and b/Content/Peoples/Male_08/textures/SM_Male_08/4_meshes_Merge_ORM.uasset differ diff --git a/Content/Peoples/Male_08/textures/SM_Male_08/4_meshes_Merge_ResourceMap_Position.uasset b/Content/Peoples/Male_08/textures/SM_Male_08/4_meshes_Merge_ResourceMap_Position.uasset new file mode 100644 index 00000000..4a42fcd3 Binary files /dev/null and b/Content/Peoples/Male_08/textures/SM_Male_08/4_meshes_Merge_ResourceMap_Position.uasset differ diff --git a/Content/Peoples/Male_08/textures/SM_Male_08/4_meshes_Merge_ResourceMap_WSNormal.uasset b/Content/Peoples/Male_08/textures/SM_Male_08/4_meshes_Merge_ResourceMap_WSNormal.uasset new file mode 100644 index 00000000..54d37238 Binary files /dev/null and b/Content/Peoples/Male_08/textures/SM_Male_08/4_meshes_Merge_ResourceMap_WSNormal.uasset differ diff --git a/Content/Peoples/Male_08/textures/SM_Male_08/hair002_Merge_ORM.uasset b/Content/Peoples/Male_08/textures/SM_Male_08/hair002_Merge_ORM.uasset new file mode 100644 index 00000000..d41740b7 Binary files /dev/null and b/Content/Peoples/Male_08/textures/SM_Male_08/hair002_Merge_ORM.uasset differ diff --git a/Content/Peoples/Male_08/textures/SM_Male_08/hair002_Merge_blend_multiply.uasset b/Content/Peoples/Male_08/textures/SM_Male_08/hair002_Merge_blend_multiply.uasset new file mode 100644 index 00000000..c48fa730 Binary files /dev/null and b/Content/Peoples/Male_08/textures/SM_Male_08/hair002_Merge_blend_multiply.uasset differ diff --git a/Content/SkatePark/Material_Naberez/MI_Brick_04.uasset b/Content/SkatePark/Material_Naberez/MI_Brick_04.uasset index 8e3563b0..8b4e2794 100644 Binary files a/Content/SkatePark/Material_Naberez/MI_Brick_04.uasset and b/Content/SkatePark/Material_Naberez/MI_Brick_04.uasset differ diff --git a/Content/SkatePark/Material_Naberez/MI_Brick_05.uasset b/Content/SkatePark/Material_Naberez/MI_Brick_05.uasset index 75f53e0c..c5d5e80a 100644 Binary files a/Content/SkatePark/Material_Naberez/MI_Brick_05.uasset and b/Content/SkatePark/Material_Naberez/MI_Brick_05.uasset differ diff --git a/Content/SkatePark/Material_Naberez/MI_Brick_06.uasset b/Content/SkatePark/Material_Naberez/MI_Brick_06.uasset index 5d6cae58..8086cb08 100644 Binary files a/Content/SkatePark/Material_Naberez/MI_Brick_06.uasset and b/Content/SkatePark/Material_Naberez/MI_Brick_06.uasset differ diff --git a/Content/SkatePark/Material_Naberez/MI_Brick_07.uasset b/Content/SkatePark/Material_Naberez/MI_Brick_07.uasset index 3670dec1..cc5967af 100644 Binary files a/Content/SkatePark/Material_Naberez/MI_Brick_07.uasset and b/Content/SkatePark/Material_Naberez/MI_Brick_07.uasset differ diff --git a/Content/SkatePark/Material_Naberez/M_Tile2_Inst5.uasset b/Content/SkatePark/Material_Naberez/M_Tile2_Inst5.uasset index dd0288fd..c71feaa5 100644 Binary files a/Content/SkatePark/Material_Naberez/M_Tile2_Inst5.uasset and b/Content/SkatePark/Material_Naberez/M_Tile2_Inst5.uasset differ diff --git a/Content/SkatePark/Naberez_Model/fix/MI_Roof.uasset b/Content/SkatePark/Naberez_Model/fix/MI_Roof.uasset index 15e00890..0208369c 100644 Binary files a/Content/SkatePark/Naberez_Model/fix/MI_Roof.uasset and b/Content/SkatePark/Naberez_Model/fix/MI_Roof.uasset differ diff --git a/Content/SkatePark/Naberez_Model/fix/MI_Roof1.uasset b/Content/SkatePark/Naberez_Model/fix/MI_Roof1.uasset index 42893ef8..edbca3ec 100644 Binary files a/Content/SkatePark/Naberez_Model/fix/MI_Roof1.uasset and b/Content/SkatePark/Naberez_Model/fix/MI_Roof1.uasset differ diff --git a/Content/SkatePark/Naberez_Model/fix/MI_Roof2.uasset b/Content/SkatePark/Naberez_Model/fix/MI_Roof2.uasset index 0e34aacd..9814fe66 100644 Binary files a/Content/SkatePark/Naberez_Model/fix/MI_Roof2.uasset and b/Content/SkatePark/Naberez_Model/fix/MI_Roof2.uasset differ diff --git a/Content/SkatePark/Naberez_Model/fix/Naberejka_SM_Naberejnaya_1.uasset b/Content/SkatePark/Naberez_Model/fix/Naberejka_SM_Naberejnaya_1.uasset index 77523ee8..4b973ee5 100644 Binary files a/Content/SkatePark/Naberez_Model/fix/Naberejka_SM_Naberejnaya_1.uasset and b/Content/SkatePark/Naberez_Model/fix/Naberejka_SM_Naberejnaya_1.uasset differ diff --git a/Content/SkatePark/Naberez_Model/fix/Yard/MI_RMA_Fasad_RAL_7005.uasset b/Content/SkatePark/Naberez_Model/fix/Yard/MI_RMA_Fasad_RAL_7005.uasset index 16854625..27a71798 100644 Binary files a/Content/SkatePark/Naberez_Model/fix/Yard/MI_RMA_Fasad_RAL_7005.uasset and b/Content/SkatePark/Naberez_Model/fix/Yard/MI_RMA_Fasad_RAL_7005.uasset differ diff --git a/Content/SkatePark/Naberez_Model/fix/Yard/MI_RMA_naberejnaya4.uasset b/Content/SkatePark/Naberez_Model/fix/Yard/MI_RMA_naberejnaya4.uasset index 120802d9..7820034e 100644 Binary files a/Content/SkatePark/Naberez_Model/fix/Yard/MI_RMA_naberejnaya4.uasset and b/Content/SkatePark/Naberez_Model/fix/Yard/MI_RMA_naberejnaya4.uasset differ diff --git a/Content/SkatePark/Naberez_Model/fix/Yard/MI_RMA_naberejnaya5.uasset b/Content/SkatePark/Naberez_Model/fix/Yard/MI_RMA_naberejnaya5.uasset index ada47b54..30f8c4e7 100644 Binary files a/Content/SkatePark/Naberez_Model/fix/Yard/MI_RMA_naberejnaya5.uasset and b/Content/SkatePark/Naberez_Model/fix/Yard/MI_RMA_naberejnaya5.uasset differ diff --git a/Content/SkatePark/Naberez_Model/fix/Yard/MI_Roof3.uasset b/Content/SkatePark/Naberez_Model/fix/Yard/MI_Roof3.uasset index 6fb8889c..34e8325a 100644 Binary files a/Content/SkatePark/Naberez_Model/fix/Yard/MI_Roof3.uasset and b/Content/SkatePark/Naberez_Model/fix/Yard/MI_Roof3.uasset differ diff --git a/Content/SkatePark/Naberez_Model/fix/Yard/MI_Roof6.uasset b/Content/SkatePark/Naberez_Model/fix/Yard/MI_Roof6.uasset index 01f7f62f..39a08653 100644 Binary files a/Content/SkatePark/Naberez_Model/fix/Yard/MI_Roof6.uasset and b/Content/SkatePark/Naberez_Model/fix/Yard/MI_Roof6.uasset differ diff --git a/Content/SkatePark/Naberez_Model/fix/Yard/MI_Roof7.uasset b/Content/SkatePark/Naberez_Model/fix/Yard/MI_Roof7.uasset index c0eaa94d..8f00ff57 100644 Binary files a/Content/SkatePark/Naberez_Model/fix/Yard/MI_Roof7.uasset and b/Content/SkatePark/Naberez_Model/fix/Yard/MI_Roof7.uasset differ diff --git a/Content/SkatePark/Naberez_Model/fix/Yard/M_NoRMA_Tile_Master_Inst.uasset b/Content/SkatePark/Naberez_Model/fix/Yard/M_NoRMA_Tile_Master_Inst.uasset index 3f6bc202..5d1e01a1 100644 Binary files a/Content/SkatePark/Naberez_Model/fix/Yard/M_NoRMA_Tile_Master_Inst.uasset and b/Content/SkatePark/Naberez_Model/fix/Yard/M_NoRMA_Tile_Master_Inst.uasset differ diff --git a/Content/Sounds/tokyoDrift.uasset b/Content/Sounds/tokyoDrift.uasset new file mode 100644 index 00000000..b4d017e6 Binary files /dev/null and b/Content/Sounds/tokyoDrift.uasset differ diff --git a/Content/Textures/IES/1.uasset b/Content/Textures/IES/1.uasset new file mode 100644 index 00000000..247d7f47 Binary files /dev/null and b/Content/Textures/IES/1.uasset differ diff --git a/Content/Textures/IES/10_.uasset b/Content/Textures/IES/10_.uasset new file mode 100644 index 00000000..7b8731fb Binary files /dev/null and b/Content/Textures/IES/10_.uasset differ diff --git a/Content/Textures/IES/11.uasset b/Content/Textures/IES/11.uasset new file mode 100644 index 00000000..16426ec1 Binary files /dev/null and b/Content/Textures/IES/11.uasset differ diff --git a/Content/Textures/IES/13.uasset b/Content/Textures/IES/13.uasset new file mode 100644 index 00000000..12b75f7c Binary files /dev/null and b/Content/Textures/IES/13.uasset differ diff --git a/Content/Textures/IES/14.uasset b/Content/Textures/IES/14.uasset new file mode 100644 index 00000000..de5e72b9 Binary files /dev/null and b/Content/Textures/IES/14.uasset differ diff --git a/Content/Textures/IES/15.uasset b/Content/Textures/IES/15.uasset new file mode 100644 index 00000000..b474e47a Binary files /dev/null and b/Content/Textures/IES/15.uasset differ diff --git a/Content/Textures/IES/16.uasset b/Content/Textures/IES/16.uasset new file mode 100644 index 00000000..c7317344 Binary files /dev/null and b/Content/Textures/IES/16.uasset differ diff --git a/Content/Textures/IES/17.uasset b/Content/Textures/IES/17.uasset new file mode 100644 index 00000000..3e5a54a0 Binary files /dev/null and b/Content/Textures/IES/17.uasset differ diff --git a/Content/Textures/IES/18.uasset b/Content/Textures/IES/18.uasset new file mode 100644 index 00000000..4440e228 Binary files /dev/null and b/Content/Textures/IES/18.uasset differ diff --git a/Content/Textures/IES/19.uasset b/Content/Textures/IES/19.uasset new file mode 100644 index 00000000..edfd2ad8 Binary files /dev/null and b/Content/Textures/IES/19.uasset differ diff --git a/Content/Textures/IES/2.uasset b/Content/Textures/IES/2.uasset new file mode 100644 index 00000000..484ecdf9 Binary files /dev/null and b/Content/Textures/IES/2.uasset differ diff --git a/Content/Textures/IES/20.uasset b/Content/Textures/IES/20.uasset new file mode 100644 index 00000000..a54f4bad Binary files /dev/null and b/Content/Textures/IES/20.uasset differ diff --git a/Content/Textures/IES/21.uasset b/Content/Textures/IES/21.uasset new file mode 100644 index 00000000..6390516b Binary files /dev/null and b/Content/Textures/IES/21.uasset differ diff --git a/Content/Textures/IES/22.uasset b/Content/Textures/IES/22.uasset new file mode 100644 index 00000000..39d2be7c Binary files /dev/null and b/Content/Textures/IES/22.uasset differ diff --git a/Content/Textures/IES/23.uasset b/Content/Textures/IES/23.uasset new file mode 100644 index 00000000..8d878337 Binary files /dev/null and b/Content/Textures/IES/23.uasset differ diff --git a/Content/Textures/IES/24.uasset b/Content/Textures/IES/24.uasset new file mode 100644 index 00000000..aade3f68 Binary files /dev/null and b/Content/Textures/IES/24.uasset differ diff --git a/Content/Textures/IES/25.uasset b/Content/Textures/IES/25.uasset new file mode 100644 index 00000000..1866d8a2 Binary files /dev/null and b/Content/Textures/IES/25.uasset differ diff --git a/Content/Textures/IES/26.uasset b/Content/Textures/IES/26.uasset new file mode 100644 index 00000000..38933128 Binary files /dev/null and b/Content/Textures/IES/26.uasset differ diff --git a/Content/Textures/IES/27.uasset b/Content/Textures/IES/27.uasset new file mode 100644 index 00000000..61714010 Binary files /dev/null and b/Content/Textures/IES/27.uasset differ diff --git a/Content/Textures/IES/28.uasset b/Content/Textures/IES/28.uasset new file mode 100644 index 00000000..52a2cd34 Binary files /dev/null and b/Content/Textures/IES/28.uasset differ diff --git a/Content/Textures/IES/29.uasset b/Content/Textures/IES/29.uasset new file mode 100644 index 00000000..7da9d72e Binary files /dev/null and b/Content/Textures/IES/29.uasset differ diff --git a/Content/Textures/IES/3.uasset b/Content/Textures/IES/3.uasset new file mode 100644 index 00000000..04b313ab Binary files /dev/null and b/Content/Textures/IES/3.uasset differ diff --git a/Content/Textures/IES/30.uasset b/Content/Textures/IES/30.uasset new file mode 100644 index 00000000..611c7852 Binary files /dev/null and b/Content/Textures/IES/30.uasset differ diff --git a/Content/Textures/IES/4.uasset b/Content/Textures/IES/4.uasset new file mode 100644 index 00000000..91961f32 Binary files /dev/null and b/Content/Textures/IES/4.uasset differ diff --git a/Content/Textures/IES/5.uasset b/Content/Textures/IES/5.uasset new file mode 100644 index 00000000..ac147cd1 Binary files /dev/null and b/Content/Textures/IES/5.uasset differ diff --git a/Content/Textures/IES/6.uasset b/Content/Textures/IES/6.uasset new file mode 100644 index 00000000..f107b391 Binary files /dev/null and b/Content/Textures/IES/6.uasset differ diff --git a/Content/Textures/IES/6Wing.uasset b/Content/Textures/IES/6Wing.uasset new file mode 100644 index 00000000..c5c44081 Binary files /dev/null and b/Content/Textures/IES/6Wing.uasset differ diff --git a/Content/Textures/IES/7.uasset b/Content/Textures/IES/7.uasset new file mode 100644 index 00000000..6112afb4 Binary files /dev/null and b/Content/Textures/IES/7.uasset differ diff --git a/Content/Textures/IES/8.uasset b/Content/Textures/IES/8.uasset new file mode 100644 index 00000000..e19da84f Binary files /dev/null and b/Content/Textures/IES/8.uasset differ diff --git a/Content/Textures/IES/9.uasset b/Content/Textures/IES/9.uasset new file mode 100644 index 00000000..fe6e005c Binary files /dev/null and b/Content/Textures/IES/9.uasset differ diff --git a/Content/Textures/IES/Arrow_Star.uasset b/Content/Textures/IES/Arrow_Star.uasset new file mode 100644 index 00000000..392ab6f4 Binary files /dev/null and b/Content/Textures/IES/Arrow_Star.uasset differ diff --git a/Content/Textures/IES/Arrow_Up.uasset b/Content/Textures/IES/Arrow_Up.uasset new file mode 100644 index 00000000..52c6856c Binary files /dev/null and b/Content/Textures/IES/Arrow_Up.uasset differ diff --git a/Content/Textures/IES/Beam.uasset b/Content/Textures/IES/Beam.uasset new file mode 100644 index 00000000..2b9bb55c Binary files /dev/null and b/Content/Textures/IES/Beam.uasset differ diff --git a/Content/Textures/IES/Beam2.uasset b/Content/Textures/IES/Beam2.uasset new file mode 100644 index 00000000..a25cd95f Binary files /dev/null and b/Content/Textures/IES/Beam2.uasset differ diff --git a/Content/Textures/IES/Beam3.uasset b/Content/Textures/IES/Beam3.uasset new file mode 100644 index 00000000..b5b482a9 Binary files /dev/null and b/Content/Textures/IES/Beam3.uasset differ diff --git a/Content/Textures/IES/Beam4.uasset b/Content/Textures/IES/Beam4.uasset new file mode 100644 index 00000000..7ca4d807 Binary files /dev/null and b/Content/Textures/IES/Beam4.uasset differ diff --git a/Content/Textures/IES/Beam5.uasset b/Content/Textures/IES/Beam5.uasset new file mode 100644 index 00000000..9278aeab Binary files /dev/null and b/Content/Textures/IES/Beam5.uasset differ diff --git a/Content/Textures/IES/Beam6.uasset b/Content/Textures/IES/Beam6.uasset new file mode 100644 index 00000000..312bb309 Binary files /dev/null and b/Content/Textures/IES/Beam6.uasset differ diff --git a/Content/Textures/IES/Beam7.uasset b/Content/Textures/IES/Beam7.uasset new file mode 100644 index 00000000..94324ab6 Binary files /dev/null and b/Content/Textures/IES/Beam7.uasset differ diff --git a/Content/Textures/IES/Beam8.uasset b/Content/Textures/IES/Beam8.uasset new file mode 100644 index 00000000..c9974b8d Binary files /dev/null and b/Content/Textures/IES/Beam8.uasset differ diff --git a/Content/Textures/IES/Bow1.uasset b/Content/Textures/IES/Bow1.uasset new file mode 100644 index 00000000..f81a771a Binary files /dev/null and b/Content/Textures/IES/Bow1.uasset differ diff --git a/Content/Textures/IES/Capped1.uasset b/Content/Textures/IES/Capped1.uasset new file mode 100644 index 00000000..609b7662 Binary files /dev/null and b/Content/Textures/IES/Capped1.uasset differ diff --git a/Content/Textures/IES/Capped2.uasset b/Content/Textures/IES/Capped2.uasset new file mode 100644 index 00000000..ccde62e7 Binary files /dev/null and b/Content/Textures/IES/Capped2.uasset differ diff --git a/Content/Textures/IES/LEDBeam1.uasset b/Content/Textures/IES/LEDBeam1.uasset new file mode 100644 index 00000000..bfc3692b Binary files /dev/null and b/Content/Textures/IES/LEDBeam1.uasset differ diff --git a/Content/Textures/IES/LEDBeam2.uasset b/Content/Textures/IES/LEDBeam2.uasset new file mode 100644 index 00000000..642342d7 Binary files /dev/null and b/Content/Textures/IES/LEDBeam2.uasset differ diff --git a/Content/Textures/IES/LEDBeam3.uasset b/Content/Textures/IES/LEDBeam3.uasset new file mode 100644 index 00000000..cb6da8b3 Binary files /dev/null and b/Content/Textures/IES/LEDBeam3.uasset differ diff --git a/Content/Textures/IES/LEDBeam4.uasset b/Content/Textures/IES/LEDBeam4.uasset new file mode 100644 index 00000000..52a69a83 Binary files /dev/null and b/Content/Textures/IES/LEDBeam4.uasset differ diff --git a/Content/Textures/IES/LEDBeam5.uasset b/Content/Textures/IES/LEDBeam5.uasset new file mode 100644 index 00000000..8ce03db2 Binary files /dev/null and b/Content/Textures/IES/LEDBeam5.uasset differ diff --git a/Content/Textures/IES/LEDBeam6.uasset b/Content/Textures/IES/LEDBeam6.uasset new file mode 100644 index 00000000..4cba138b Binary files /dev/null and b/Content/Textures/IES/LEDBeam6.uasset differ diff --git a/Content/Textures/IES/LEDBeam7.uasset b/Content/Textures/IES/LEDBeam7.uasset new file mode 100644 index 00000000..d767a415 Binary files /dev/null and b/Content/Textures/IES/LEDBeam7.uasset differ diff --git a/Content/Textures/IES/Shattered1.uasset b/Content/Textures/IES/Shattered1.uasset new file mode 100644 index 00000000..8fff2f34 Binary files /dev/null and b/Content/Textures/IES/Shattered1.uasset differ diff --git a/Content/Textures/IES/Shattered2.uasset b/Content/Textures/IES/Shattered2.uasset new file mode 100644 index 00000000..cdb0ccd0 Binary files /dev/null and b/Content/Textures/IES/Shattered2.uasset differ diff --git a/Content/Textures/IES/Shattered3.uasset b/Content/Textures/IES/Shattered3.uasset new file mode 100644 index 00000000..8f84bd2d Binary files /dev/null and b/Content/Textures/IES/Shattered3.uasset differ diff --git a/Content/Textures/IES/Shattered4.uasset b/Content/Textures/IES/Shattered4.uasset new file mode 100644 index 00000000..9a76eb58 Binary files /dev/null and b/Content/Textures/IES/Shattered4.uasset differ diff --git a/Content/Textures/IES/Shattered5.uasset b/Content/Textures/IES/Shattered5.uasset new file mode 100644 index 00000000..1db2d027 Binary files /dev/null and b/Content/Textures/IES/Shattered5.uasset differ diff --git a/Content/Textures/IES/SpotLight1.uasset b/Content/Textures/IES/SpotLight1.uasset new file mode 100644 index 00000000..735434df Binary files /dev/null and b/Content/Textures/IES/SpotLight1.uasset differ diff --git a/Content/Textures/IES/SpotLight2.uasset b/Content/Textures/IES/SpotLight2.uasset new file mode 100644 index 00000000..923b33af Binary files /dev/null and b/Content/Textures/IES/SpotLight2.uasset differ diff --git a/Content/Textures/IES/Spotlight3.uasset b/Content/Textures/IES/Spotlight3.uasset new file mode 100644 index 00000000..35930969 Binary files /dev/null and b/Content/Textures/IES/Spotlight3.uasset differ diff --git a/Content/Textures/IES/Spotlight4.uasset b/Content/Textures/IES/Spotlight4.uasset new file mode 100644 index 00000000..a6169903 Binary files /dev/null and b/Content/Textures/IES/Spotlight4.uasset differ diff --git a/Content/Textures/IES/Spreadout1.uasset b/Content/Textures/IES/Spreadout1.uasset new file mode 100644 index 00000000..fbfbc71a Binary files /dev/null and b/Content/Textures/IES/Spreadout1.uasset differ diff --git a/Content/Textures/IES/Spreadout2.uasset b/Content/Textures/IES/Spreadout2.uasset new file mode 100644 index 00000000..e9af36e7 Binary files /dev/null and b/Content/Textures/IES/Spreadout2.uasset differ diff --git a/Content/Textures/IES/Spreadout3.uasset b/Content/Textures/IES/Spreadout3.uasset new file mode 100644 index 00000000..2a680d6e Binary files /dev/null and b/Content/Textures/IES/Spreadout3.uasset differ diff --git a/Content/Textures/IES/Spreadout4.uasset b/Content/Textures/IES/Spreadout4.uasset new file mode 100644 index 00000000..8d64e6bc Binary files /dev/null and b/Content/Textures/IES/Spreadout4.uasset differ diff --git a/Content/Textures/IES/Star_Bow.uasset b/Content/Textures/IES/Star_Bow.uasset new file mode 100644 index 00000000..e6e57b96 Binary files /dev/null and b/Content/Textures/IES/Star_Bow.uasset differ diff --git a/Content/Textures/IES/Star_Burst.uasset b/Content/Textures/IES/Star_Burst.uasset new file mode 100644 index 00000000..59ab45de Binary files /dev/null and b/Content/Textures/IES/Star_Burst.uasset differ diff --git a/Content/Textures/IES/Star_Burst2.uasset b/Content/Textures/IES/Star_Burst2.uasset new file mode 100644 index 00000000..4c9bbd2a Binary files /dev/null and b/Content/Textures/IES/Star_Burst2.uasset differ diff --git a/Content/Textures/IES/Star_Burst3.uasset b/Content/Textures/IES/Star_Burst3.uasset new file mode 100644 index 00000000..2e4e045b Binary files /dev/null and b/Content/Textures/IES/Star_Burst3.uasset differ diff --git a/Content/Textures/IES/Star_Burst4.uasset b/Content/Textures/IES/Star_Burst4.uasset new file mode 100644 index 00000000..8265df2e Binary files /dev/null and b/Content/Textures/IES/Star_Burst4.uasset differ diff --git a/Content/Textures/IES/Star_Burst5.uasset b/Content/Textures/IES/Star_Burst5.uasset new file mode 100644 index 00000000..89cfe408 Binary files /dev/null and b/Content/Textures/IES/Star_Burst5.uasset differ diff --git a/Content/Textures/IES/Star_Burst6.uasset b/Content/Textures/IES/Star_Burst6.uasset new file mode 100644 index 00000000..d9dc28ea Binary files /dev/null and b/Content/Textures/IES/Star_Burst6.uasset differ diff --git a/Content/Textures/IES/Star_Burst7.uasset b/Content/Textures/IES/Star_Burst7.uasset new file mode 100644 index 00000000..2dd96796 Binary files /dev/null and b/Content/Textures/IES/Star_Burst7.uasset differ diff --git a/Content/Textures/IES/Star_Burst8.uasset b/Content/Textures/IES/Star_Burst8.uasset new file mode 100644 index 00000000..7951070a Binary files /dev/null and b/Content/Textures/IES/Star_Burst8.uasset differ diff --git a/Content/Textures/IES/VWing.uasset b/Content/Textures/IES/VWing.uasset new file mode 100644 index 00000000..226f1928 Binary files /dev/null and b/Content/Textures/IES/VWing.uasset differ diff --git a/Content/Textures/IES/VWing2.uasset b/Content/Textures/IES/VWing2.uasset new file mode 100644 index 00000000..f4db7756 Binary files /dev/null and b/Content/Textures/IES/VWing2.uasset differ diff --git a/Content/Textures/IES/Wall_Boomerang.uasset b/Content/Textures/IES/Wall_Boomerang.uasset new file mode 100644 index 00000000..19200887 Binary files /dev/null and b/Content/Textures/IES/Wall_Boomerang.uasset differ diff --git a/Content/Textures/IES/Wall_InvertedV.uasset b/Content/Textures/IES/Wall_InvertedV.uasset new file mode 100644 index 00000000..ac19661f Binary files /dev/null and b/Content/Textures/IES/Wall_InvertedV.uasset differ diff --git a/Content/Textures/IES/Wall_TStar.uasset b/Content/Textures/IES/Wall_TStar.uasset new file mode 100644 index 00000000..8bc426e8 Binary files /dev/null and b/Content/Textures/IES/Wall_TStar.uasset differ diff --git a/Content/Textures/IES/XStar2.uasset b/Content/Textures/IES/XStar2.uasset new file mode 100644 index 00000000..ae024240 Binary files /dev/null and b/Content/Textures/IES/XStar2.uasset differ diff --git a/Content/Textures/MOP/T_Chrome_Laminam_FILO_ARGENTO_N.uasset b/Content/Textures/MOP/T_Chrome_Laminam_FILO_ARGENTO_N.uasset index 1e79d0b5..bb3ef335 100644 Binary files a/Content/Textures/MOP/T_Chrome_Laminam_FILO_ARGENTO_N.uasset and b/Content/Textures/MOP/T_Chrome_Laminam_FILO_ARGENTO_N.uasset differ diff --git a/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst.uasset b/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst.uasset new file mode 100644 index 00000000..dda7b4d3 Binary files /dev/null and b/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst.uasset differ diff --git a/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst1.uasset b/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst1.uasset new file mode 100644 index 00000000..6d2f9729 Binary files /dev/null and b/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst1.uasset differ diff --git a/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst10.uasset b/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst10.uasset new file mode 100644 index 00000000..edc26454 Binary files /dev/null and b/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst10.uasset differ diff --git a/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst11.uasset b/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst11.uasset new file mode 100644 index 00000000..cf71642b Binary files /dev/null and b/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst11.uasset differ diff --git a/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst2.uasset b/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst2.uasset new file mode 100644 index 00000000..e2c523c9 Binary files /dev/null and b/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst2.uasset differ diff --git a/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst3.uasset b/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst3.uasset new file mode 100644 index 00000000..dff3fe0d Binary files /dev/null and b/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst3.uasset differ diff --git a/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst4.uasset b/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst4.uasset new file mode 100644 index 00000000..6a66948b Binary files /dev/null and b/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst4.uasset differ diff --git a/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst5.uasset b/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst5.uasset new file mode 100644 index 00000000..66621f72 Binary files /dev/null and b/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst5.uasset differ diff --git a/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst6.uasset b/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst6.uasset new file mode 100644 index 00000000..9204bd4c Binary files /dev/null and b/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst6.uasset differ diff --git a/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst7.uasset b/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst7.uasset new file mode 100644 index 00000000..2879ba27 Binary files /dev/null and b/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst7.uasset differ diff --git a/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst8.uasset b/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst8.uasset new file mode 100644 index 00000000..0d4bed74 Binary files /dev/null and b/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst8.uasset differ diff --git a/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst9.uasset b/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst9.uasset new file mode 100644 index 00000000..4712c1d7 Binary files /dev/null and b/Content/Textures/parallaxFlatTextures/M_result_Mat_Inst9.uasset differ diff --git a/Content/Textures/parallaxFlatTextures/result_Tex.uasset b/Content/Textures/parallaxFlatTextures/result_Tex.uasset new file mode 100644 index 00000000..7dceea38 Binary files /dev/null and b/Content/Textures/parallaxFlatTextures/result_Tex.uasset differ diff --git a/Content/Textures/parallaxFlatTextures/result_Tex1.uasset b/Content/Textures/parallaxFlatTextures/result_Tex1.uasset new file mode 100644 index 00000000..7e34aaa7 Binary files /dev/null and b/Content/Textures/parallaxFlatTextures/result_Tex1.uasset differ diff --git a/Content/Textures/parallaxFlatTextures/result_Tex10.uasset b/Content/Textures/parallaxFlatTextures/result_Tex10.uasset new file mode 100644 index 00000000..b8c2f72e Binary files /dev/null and b/Content/Textures/parallaxFlatTextures/result_Tex10.uasset differ diff --git a/Content/Textures/parallaxFlatTextures/result_Tex11.uasset b/Content/Textures/parallaxFlatTextures/result_Tex11.uasset new file mode 100644 index 00000000..9f1834f4 Binary files /dev/null and b/Content/Textures/parallaxFlatTextures/result_Tex11.uasset differ diff --git a/Content/Textures/parallaxFlatTextures/result_Tex2.uasset b/Content/Textures/parallaxFlatTextures/result_Tex2.uasset new file mode 100644 index 00000000..064be231 Binary files /dev/null and b/Content/Textures/parallaxFlatTextures/result_Tex2.uasset differ diff --git a/Content/Textures/parallaxFlatTextures/result_Tex3.uasset b/Content/Textures/parallaxFlatTextures/result_Tex3.uasset new file mode 100644 index 00000000..d09d69c4 Binary files /dev/null and b/Content/Textures/parallaxFlatTextures/result_Tex3.uasset differ diff --git a/Content/Textures/parallaxFlatTextures/result_Tex4.uasset b/Content/Textures/parallaxFlatTextures/result_Tex4.uasset new file mode 100644 index 00000000..57edba73 Binary files /dev/null and b/Content/Textures/parallaxFlatTextures/result_Tex4.uasset differ diff --git a/Content/Textures/parallaxFlatTextures/result_Tex5.uasset b/Content/Textures/parallaxFlatTextures/result_Tex5.uasset new file mode 100644 index 00000000..ab92d953 Binary files /dev/null and b/Content/Textures/parallaxFlatTextures/result_Tex5.uasset differ diff --git a/Content/Textures/parallaxFlatTextures/result_Tex6.uasset b/Content/Textures/parallaxFlatTextures/result_Tex6.uasset new file mode 100644 index 00000000..bdacc4c7 Binary files /dev/null and b/Content/Textures/parallaxFlatTextures/result_Tex6.uasset differ diff --git a/Content/Textures/parallaxFlatTextures/result_Tex7.uasset b/Content/Textures/parallaxFlatTextures/result_Tex7.uasset new file mode 100644 index 00000000..347ef233 Binary files /dev/null and b/Content/Textures/parallaxFlatTextures/result_Tex7.uasset differ diff --git a/Content/Textures/parallaxFlatTextures/result_Tex8.uasset b/Content/Textures/parallaxFlatTextures/result_Tex8.uasset new file mode 100644 index 00000000..b7694bbc Binary files /dev/null and b/Content/Textures/parallaxFlatTextures/result_Tex8.uasset differ diff --git a/Content/Textures/parallaxFlatTextures/result_Tex9.uasset b/Content/Textures/parallaxFlatTextures/result_Tex9.uasset new file mode 100644 index 00000000..e010fe75 Binary files /dev/null and b/Content/Textures/parallaxFlatTextures/result_Tex9.uasset differ diff --git a/Content/UltraDynamicSky/Blueprints/Ultra_Dynamic_Sky.uasset b/Content/UltraDynamicSky/Blueprints/Ultra_Dynamic_Sky.uasset index 3c05a4be..32de3703 100644 Binary files a/Content/UltraDynamicSky/Blueprints/Ultra_Dynamic_Sky.uasset and b/Content/UltraDynamicSky/Blueprints/Ultra_Dynamic_Sky.uasset differ diff --git a/Content/UltraDynamicSky/Maps/DemoMap.umap b/Content/UltraDynamicSky/Maps/DemoMap.umap index 10f690c9..7b6a8311 100644 Binary files a/Content/UltraDynamicSky/Maps/DemoMap.umap and b/Content/UltraDynamicSky/Maps/DemoMap.umap differ diff --git a/Content/UltraDynamicSky/Materials/Color_Curves/Ambient_Curves/skylightCubemapTintting.uasset b/Content/UltraDynamicSky/Materials/Color_Curves/Ambient_Curves/skylightCubemapTintting.uasset new file mode 100644 index 00000000..ca78135f Binary files /dev/null and b/Content/UltraDynamicSky/Materials/Color_Curves/Ambient_Curves/skylightCubemapTintting.uasset differ diff --git a/Content/UltraDynamicSky/Materials/Float_Curves/FogDensity_Curve.uasset b/Content/UltraDynamicSky/Materials/Float_Curves/FogDensity_Curve.uasset index 39039b73..ba6a70f2 100644 Binary files a/Content/UltraDynamicSky/Materials/Float_Curves/FogDensity_Curve.uasset and b/Content/UltraDynamicSky/Materials/Float_Curves/FogDensity_Curve.uasset differ diff --git a/Ivazowsky.uproject b/Ivazowsky.uproject index ad0c480a..5bbf943f 100644 --- a/Ivazowsky.uproject +++ b/Ivazowsky.uproject @@ -257,15 +257,6 @@ "Name": "PlasticSourceControl", "Enabled": false }, - { - "Name": "SteamVR", - "Enabled": false, - "SupportedTargetPlatforms": [ - "Win32", - "Win64", - "Linux" - ] - }, { "Name": "OpenXREyeTracker", "Enabled": false, @@ -288,15 +279,6 @@ "HoloLens" ] }, - { - "Name": "OculusVR", - "Enabled": false, - "SupportedTargetPlatforms": [ - "Win32", - "Win64", - "Android" - ] - }, { "Name": "Niagara", "Enabled": true @@ -336,6 +318,37 @@ { "Name": "Water", "Enabled": true + }, + { + "Name": "RemoteControl", + "Enabled": true + }, + { + "Name": "OculusVR", + "Enabled": false, + "SupportedTargetPlatforms": [ + "Win32", + "Win64", + "Android" + ] + }, + { + "Name": "SteamVR", + "Enabled": false, + "SupportedTargetPlatforms": [ + "Win32", + "Win64", + "Linux" + ] + }, + { + "Name": "DLSS", + "Enabled": false, + "MarketplaceURL": "https://www.unrealengine.com/marketplace/en-US/product/nvidia-dlss" + }, + { + "Name": "UnrealCLR", + "Enabled": false } ], "TargetPlatforms": [ diff --git a/plugins/DLSS/Config/FilterPlugin.ini b/plugins/DLSS/Config/FilterPlugin.ini new file mode 100644 index 00000000..25af8dea --- /dev/null +++ b/plugins/DLSS/Config/FilterPlugin.ini @@ -0,0 +1,15 @@ +[FilterPlugin] +; This section lists additional files which will be packaged along with your plugin. Paths should be listed relative to the root plugin directory, and +; may include "...", "*", and "?" wildcards to match directories, files, and individual characters respectively. +; +; Examples: +; /README.txt +; /Extras/... +; /Binaries/ThirdParty/*.dll + + +/*.md +/*.pdf +/Config/... +/Images/... + diff --git a/plugins/DLSS/DLSS.uplugin b/plugins/DLSS/DLSS.uplugin new file mode 100644 index 00000000..ba8ead30 --- /dev/null +++ b/plugins/DLSS/DLSS.uplugin @@ -0,0 +1,87 @@ +{ + "FileVersion": 3, + "Version": 10, + "VersionName": "2.3.3", + "FriendlyName": "NVIDIA DLSS", + "Description": "NVIDIA Deep Learning Super Sampling", + "Category": "Rendering", + "CreatedBy": "NVIDIA", + "CreatedByURL": "https://developer.nvidia.com/dlss", + "DocsURL": "", + "MarketplaceURL": "https://www.unrealengine.com/marketplace/en-US/product/nvidia-dlss", + "SupportURL": "mailto:DLSS-Support@nvidia.com", + "EngineVersion": "4.27.0", + "CanContainContent": true, + "Installed": true, + "Modules": [ + { + "Name": "DLSSUtility", + "Type": "Runtime", + "LoadingPhase": "PostConfigInit", + "WhitelistPlatforms": [ + "Win64" + ] + }, + { + "Name": "DLSS", + "Type": "Runtime", + "LoadingPhase": "PostEngineInit", + "WhitelistPlatforms": [ + "Win64" + ] + }, + { + "Name": "DLSSBlueprint", + "Type": "Runtime", + "LoadingPhase": "PostConfigInit" + }, + { + "Name": "NGXRHI", + "Type": "Runtime", + "LoadingPhase": "PostEngineInit", + "WhitelistPlatforms": [ + "Win64" + ] + }, + { + "Name": "NGXD3D11RHI", + "Type": "Runtime", + "LoadingPhase": "PostEngineInit", + "WhitelistPlatforms": [ + "Win64" + ] + }, + { + "Name": "NGXD3D12RHI", + "Type": "Runtime", + "LoadingPhase": "PostEngineInit", + "WhitelistPlatforms": [ + "Win64" + ] + }, + { + "Name": "NGXVulkanRHIPreInit", + "Type": "Runtime", + "LoadingPhase": "PostConfigInit", + "WhitelistPlatforms": [ + "Win64" + ] + }, + { + "Name": "NGXVulkanRHI", + "Type": "Runtime", + "LoadingPhase": "PostEngineInit", + "WhitelistPlatforms": [ + "Win64" + ] + }, + { + "Name": "DLSSEditor", + "Type": "Editor", + "LoadingPhase": "PostEngineInit", + "WhitelistPlatforms": [ + "Win64" + ] + } + ] +} \ No newline at end of file diff --git a/plugins/DLSS/DLSS_Programming_Guide_Release.pdf b/plugins/DLSS/DLSS_Programming_Guide_Release.pdf new file mode 100644 index 00000000..e02ba205 Binary files /dev/null and b/plugins/DLSS/DLSS_Programming_Guide_Release.pdf differ diff --git a/plugins/DLSS/Images/DLSSBlueprintLibrary.png b/plugins/DLSS/Images/DLSSBlueprintLibrary.png new file mode 100644 index 00000000..37256215 Binary files /dev/null and b/plugins/DLSS/Images/DLSSBlueprintLibrary.png differ diff --git a/plugins/DLSS/Images/DLSSDeveloperMessages.png b/plugins/DLSS/Images/DLSSDeveloperMessages.png new file mode 100644 index 00000000..86b10ca5 Binary files /dev/null and b/plugins/DLSS/Images/DLSSDeveloperMessages.png differ diff --git a/plugins/DLSS/Images/DLSSIncompatibleCaptureToolsPlugins.png b/plugins/DLSS/Images/DLSSIncompatibleCaptureToolsPlugins.png new file mode 100644 index 00000000..bd2699f5 Binary files /dev/null and b/plugins/DLSS/Images/DLSSIncompatibleCaptureToolsPlugins.png differ diff --git a/plugins/DLSS/Images/DLSSMoviePipelineSupportDLSSFormatFlags.png b/plugins/DLSS/Images/DLSSMoviePipelineSupportDLSSFormatFlags.png new file mode 100644 index 00000000..b8a33b3c Binary files /dev/null and b/plugins/DLSS/Images/DLSSMoviePipelineSupportDLSSFormatFlags.png differ diff --git a/plugins/DLSS/Images/DLSSMoviePipelineSupportDLSSOptions.png b/plugins/DLSS/Images/DLSSMoviePipelineSupportDLSSOptions.png new file mode 100644 index 00000000..b4b3b38b Binary files /dev/null and b/plugins/DLSS/Images/DLSSMoviePipelineSupportDLSSOptions.png differ diff --git a/plugins/DLSS/Images/DLSSMoviePipelineSupportDLSSetting.png b/plugins/DLSS/Images/DLSSMoviePipelineSupportDLSSetting.png new file mode 100644 index 00000000..cb6c33bd Binary files /dev/null and b/plugins/DLSS/Images/DLSSMoviePipelineSupportDLSSetting.png differ diff --git a/plugins/DLSS/Images/DLSSMoviePipelineSupportPlugin.png b/plugins/DLSS/Images/DLSSMoviePipelineSupportPlugin.png new file mode 100644 index 00000000..48d72428 Binary files /dev/null and b/plugins/DLSS/Images/DLSSMoviePipelineSupportPlugin.png differ diff --git a/plugins/DLSS/Images/DLSSOutputLogMenu.png b/plugins/DLSS/Images/DLSSOutputLogMenu.png new file mode 100644 index 00000000..9b3d074a Binary files /dev/null and b/plugins/DLSS/Images/DLSSOutputLogMenu.png differ diff --git a/plugins/DLSS/Images/DLSSOutputLogNotWorking.png b/plugins/DLSS/Images/DLSSOutputLogNotWorking.png new file mode 100644 index 00000000..25fc92da Binary files /dev/null and b/plugins/DLSS/Images/DLSSOutputLogNotWorking.png differ diff --git a/plugins/DLSS/Images/DLSSOutputLogNotWorkingDriverOutOfDate.png b/plugins/DLSS/Images/DLSSOutputLogNotWorkingDriverOutOfDate.png new file mode 100644 index 00000000..a94c0b06 Binary files /dev/null and b/plugins/DLSS/Images/DLSSOutputLogNotWorkingDriverOutOfDate.png differ diff --git a/plugins/DLSS/Images/DLSSPlugin.png b/plugins/DLSS/Images/DLSSPlugin.png new file mode 100644 index 00000000..e08c1ed0 Binary files /dev/null and b/plugins/DLSS/Images/DLSSPlugin.png differ diff --git a/plugins/DLSS/Images/DLSSPluginProjectSettings.png b/plugins/DLSS/Images/DLSSPluginProjectSettings.png new file mode 100644 index 00000000..e8ea73c8 Binary files /dev/null and b/plugins/DLSS/Images/DLSSPluginProjectSettings.png differ diff --git a/plugins/DLSS/Images/DLSSPluginProjectSettingsLocal.png b/plugins/DLSS/Images/DLSSPluginProjectSettingsLocal.png new file mode 100644 index 00000000..0a9f8963 Binary files /dev/null and b/plugins/DLSS/Images/DLSSPluginProjectSettingsLocal.png differ diff --git a/plugins/DLSS/Images/DLSSViewportSettingsDLSSOn.png b/plugins/DLSS/Images/DLSSViewportSettingsDLSSOn.png new file mode 100644 index 00000000..420faf80 Binary files /dev/null and b/plugins/DLSS/Images/DLSSViewportSettingsDLSSOn.png differ diff --git a/plugins/DLSS/Images/PluginSettings.png b/plugins/DLSS/Images/PluginSettings.png new file mode 100644 index 00000000..dda725e4 Binary files /dev/null and b/plugins/DLSS/Images/PluginSettings.png differ diff --git a/plugins/DLSS/Images/nv-logo.png b/plugins/DLSS/Images/nv-logo.png new file mode 100644 index 00000000..5511fded Binary files /dev/null and b/plugins/DLSS/Images/nv-logo.png differ diff --git a/plugins/DLSS/README.md b/plugins/DLSS/README.md new file mode 100644 index 00000000..f60e2860 --- /dev/null +++ b/plugins/DLSS/README.md @@ -0,0 +1,439 @@ +![NVIDIA Logo](Images/nv-logo.png) + +NVIDIA Unreal Engine DLSS/DLAA Plugin +===================================== + +The NVIDIA *DLSS/DLAA* plugin is part of a wider suite of related NVIDIA performance and image quality improving technologies and corresponding NVIDIA Unreal Engine plugins: + +- NVIDIA *Deep Learning Supersampling (DLSS)* is used to provide the highest possible frame rates at maximum graphics settings. *DLSS* requires an NVIDIA RTX graphics card. +- NVIDIA *Deep Learning Anti-Aliasing (DLAA)* is used to improve image quality. *DLAA* requires an NVIDIA RTX graphics card. +- NVIDIA *Image Scaling (NIS)* provides best-in class upscaling and sharpening for non-RTX GPUs, both NVIDIA or 3rd party. Please refer to the NVIDIA *Image Scaling* Unreal Engine plugin for further details. + +# Quickstart + +Please refer to the relevant section in this document for additional details. + +1. Enable the *DLSS* plugin in the Editor, then restart the editor +2. DLSS in the Editor: enable the following settings in the Project Plugin settings + 1. Enable DLSS to be turned on in Editor viewports (it should be set by default) + 2. In the Viewport Options (downwards pointing arrow in the top left corner), use the DLSS Settings menu to toggle the different DLSS quality modes +3. DLSS/DLAA in [Blueprint](#dlss-blueprints): + The `SetDLSSMode` and `EnableDLAA` functions of the DLSS blueprint library provide convenient functions for setting those console variables and are recommended to be used when integrating support into a project's user interface and settings. +4. DLSS in Game: make sure that the following [console variables](#command-line-options-and-console-variables-and-commands) are set to enable DLSS: + 1. r.NGX.Enable 1 (can be overriden on the command line with -ngxenable) + 2. r.NGX.DLSS.Enable 1 + 3. r.NGX.DLSS.Quality -1 + 4. r.NGX.DLSS.Quality.Auto false + 5. r.NGX.DLAA.Enable 0 +5. DLAA in Game: make sure that the following [console variables](#command-line-options-and-console-variables-and-commands) are set to enable DLAA + 1. r.NGX.Enable 1 (can be overriden on the command line with -ngxenable) + 2. r.NGX.DLAA.Enable 1 +6. Check the log for `LogDLSS: NVIDIA NGX DLSS supported 1` +7. (Optionally) Enable the DLSS on screen indicator in the bottom left of the screen via `\DLSS\Source\ThirdParty\NGX\Utils\ngx_driver_onscreenindicator.reg` to verify that DLSS is active + +# Troubleshooting + +## System requirements + +- Windows 10, 64 bit + - at least version v1709, Windows 10 Fall 2017 Creators Update 64-bit. +- NVIDIA Geforce Driver + - Recommended: version 461.40 or higher + - Required: version 445.00 or higher +- NVIDIA RTX GPU (GeForce, Titan or Quadro) with [DLSS](https://www.nvidia.com/en-us/geforce/technologies/dlss/) support +- UE project using either + - Vulkan + - DX11 + - DX12 + +## Diagnosing DLSS Issues in the Editor + +The DLSS plugin shows various common reasons why DLSS might not be working at the top of the screen (in non-Shipping build configurations). This message can also be turned off in the DLSS plugin settings, as discussed in the "DLSS Plugin Settings" section in this document. + +![DLSS Editor Developer messages](Images/DLSSDeveloperMessages.png) + +Additionally, the DLSS plugin modules write various information into the following UE log categories: + +* LogDLSS +* LogDLSSEditor +* LogDLSSBlueprint +* LogDLSSNGXRHI +* LogDLSSNGXD3D11RHI +* LogDLSSNGXD3D12RHI +* LogDLSSNGXVulkanRHIPreInit +* LogDLSSNGXVulkanRHI +* LogDLSSNGX + +Those can be accessed in the Editor under `Window -> Developer Tools -> Message Log` + +![DLSS Editor Output log menu](Images/DLSSOutputLogMenu.png) + +The Message log then can be filtered to show only the DLSS related messages to get more information on why DLSS might not be functioning as expected, as shown in those examples. + +![DLSS Editor Output log disabled](Images/DLSSOutputLogNotWorking.png) +![DLSS Editor Output log driver out of date](Images/DLSSOutputLogNotWorkingDriverOutOfDate.png) + +## Incompatibilities with API Capture Tools such as RenderDoc + +The Editor will show a warning at startup if DLSS incompatible API capture tools (such as RenderDoc) or plugins are used. To enable DLSS, please use an API capture tool such as [NVIDIA NSIGHT Graphics](https://developer.nvidia.com/nsight-graphics), which support the NGX APIs required by DLSS. + +![DLSS Editor incompatible tools and plugins](Images/DLSSIncompatibleCaptureToolsPlugins.png) + +## Incompatibilities with Screenpercentage override in Post Procssing Volumes +When DLSS is active, the DLSS quality mode determines the effective screen percentage. As such screen percentage overrides specified in postprocessing volumes are ignored. This can lead to unexpected performance behavior when DLSS is turned on, compared to when DLSS is turned off. + +## Incompatibilities with Depth of Field +As DLSS workload occurs in the same spot as TAAU in the pipeline, visual differences in DoF are expected. +To minimize the differences, it is recommended to use DLSS in 'Quality' or 'Ultra Quality' modes. +It is possible to tweak the DoF settings in the camera actor to compensate for the differences. +Please keep in mind this is content dependent. Thus for some scenes the differences can be minimal and avoided while in other cases it might be more challenging. + +## Verify Engine side plugin hooks + +The following cvars should be set to those values by default: +- r.DefaultFeature.Antialiasing 2 +- r.TemporalAA.Upscaler 1 +- r.Reflections.Denoiser 2 + +## Enabling NGX DLSS Logging on End User machines + +The DLSS plugin also pipes the NGX DLSS logs into the UE logging system into the `LogDLSSNGX` log category. It is enabled by default and can be tweaked with the `r.NGX.LogLevel` console variable, or set with the -NGXLogLevel=X command line option. + +This requires an NVIDIA GeForce **driver version 461.36** or later. + +## Enabling NGX DLSS Logging during Development + +If r.NGX.EnableOtherLoggingSinks is set then additional NGX logging of the NVIDIA NGX software stack to files can be used as well, as discussed in the "NGX logging" chapter of the [DLSS Programming Guide](DLSS_Programming_Guide_Release.pdf) for details. The -NGXLogFileEnable and -NGXLogFileDisable command line options can also override the default setting. +The DLSS SDK provides registry keys which can be set with the following .reg files which can be found in the plugin folder under `\DLSS\Source\ThirdParty\NGX\Utils\`: +* `ngx_log_on.reg` +* `ngx_log_off.reg` +* `ngx_log_verbose.reg` + +The DLSS plugin will write those into subfolder under `$(ProjectDir)\Saved\Logs\` with a `NGX_$(TimeStamp)_$(GUID)` pattern +* `nvngx.log` +* `nvngx_dlss_2_1_34.log` +* `nvsdk_ngx.log` + +## DLSS On-Screen Indicator + +The DLSS SDK provides registry keys which can be set with the following .reg files which can be found in the plugin folder under `\DLSS\Source\ThirdParty\NGX\Utils\`: + +* `ngx_driver_onscreenindicator.reg` +* `ngx_driver_off_screenindicator.reg` + +With the first registry key set, DLSS will display an indicator on-screen when it is enabled, enabling easier troubleshooting. The second registry key can be used to disable this indicator again. + +Please see the [DLSS Programming Guide](DLSS_Programming_Guide_Release.pdf) for further details. + +# Command Line Options And Console Variables and Commands + +## Enabling DLSS (Engine Side) + +The DLSS plugin uses various engine side hooks, which can be configured by the following cvars. Their default values + +- r.DefaultFeature.Antialiasing (2, default) + - Enable Temporal Anti-Aliasing +- r.TemporalAA.Upscaler (1, default) + - Enable a custom TAAU upscaling plugin, such as the DLSS plugin +- r.Reflections.Denoiser (2, default) + - Enable a custom denoising plugin. The DLSS plugin makes use of this to improve image quality for raytraced reflections by adding additionial TAA passes + +## Enabling Motion vectors for DLSS + +DLSS requires correct motion vectors to function properly. The following console variable can be used to render motion vectors for all objects, and not just the ones with dynamic geometry. This can be useful if it's infeasible to e.g. change all meshes to stationary or dynamic. + +- r.BasePassForceOutputsVelocity (0, default) + - Force the base pass to compute motion vector, regardless of FPrimitiveUniformShaderParameters. + - 0: Disabled + - 1: Enabled + +## Enabling DLSS/DLAA (Plugin Side) + +- r.NGX.Enable (1, default) can also be overriden on the command line with **-ngxenable** and **-ngxdisable** + - Whether the NGX library should be loaded. This allow to have the DLSS plugin enabled but avoiding potential incompatibilities by skipping the driver side NGX parts of DLSS. +- r.NGX.DLSS.Enable (1, default) + - Enable/Disable DLSS entirely. +- r.NGX.DLSS.Quality (-1, default) + - DLSS Performance/Quality setting. **Note:** Not all modes might be supported at runtime, in this case Balanced mode is used + - -2: Ultra Performance + - -1: Performance (default) + - 0: Balanced + - 1: Quality + - 2: Ultra Quality +- r.NGX.DLSS.Quality.Auto (false, default) + - Whether the DLSS quality mode should be chosen dynamically based on viewport size. Overrides r.NGX.DLSS.Quality +- r.NGX.DLAA.Enable (false, default) + - Enable/Disable DLAA. DLSS will be disabled while DLAA is enabled + +**Blueprint** functions: +- `SetDLSSMode`, `GetDLSSMode` +- `IsDLSSSupported`, `QueryDLSSSupport`, `GetDLSSMinimumDriverVersion`, `GetDefaultDLSSMode` +- `IsDLSSModeSupported`, `GetSupportedDLSSModes`,`GetDLSSModeInformation`, `GetDLSSScreenPercentageRange` +- `EnableDLAA`, `IsDLAAEnabled` + + +## DLSS Runtime Image Quality Tweaks + +- r.NGX.DLSS.DilateMotionVectors (1, default) + - 0: pass low resolution motion vectors into DLSS + - 1: pass dilated high resolution motion vectors into DLSS. This can help with improving image quality of thin details. + +- r.NGX.DLSS.Reflections.TemporalAA (1, default) + - Apply a temporal AA pass on the denoised reflections + +- r.NGX.DLSS.WaterReflections.TemporalAA (1, default) + - Apply a temporal AA pass on the denoised water reflections + +- r.NGX.DLSS.Sharpness (0.0f off, default) + - -1.0 to 1.0: Softening/sharpening to apply to the DLSS pass. Negative values soften the image, positive values sharpen. + +- r.NGX.DLSS.EnableAutoExposure + - 0: Use the engine-computed exposure value for input images to DLSS + - 1: Enable DLSS internal auto-exposure instead of the application provided one - enabling this can alleviate effects such as ghosting in darker scenes (default) + +- r.NGX.DLSS.PreferNISSharpen (2,default) + - Prefer sharpening with an extra NIS plugin sharpening pass instead of DLSS sharpening if the NIS plugin is also enabled for the project. + - Requires UE4.27.1 and the NIS plugin to be enabled, DLSS sharpening will be used otherwise. + - 0: Softening/sharpening with the DLSS pass. + - 1: Sharpen with the NIS plugin. Softening is not supported. Requires the NIS plugin to be enabled. + - 2: Sharpen with the NIS plugin. Softening (i.e. negative sharpness) with the DLSS plugin . Requires the NIS plugin to be enabled. + **Note** This cvar is only evaluated when using the `SetDLSSSharpness` Blueprint function, from either C++ or a Blueprint event graph! + +**Blueprint** functions: +- `SetDLSSSharpness`, `GetDLSSSharpness` + +## DLSS Binaries + +- r.NGX.BinarySearchOrder (0, default) + - 0: automatic + - use custom binaries from project and launch folder $(ProjectDir)/Binaries/ThirdParty/NVIDIA/NGX/$(Platform) if present + - fallback to generic binaries from plugin folder + - 1: force generic binaries from plugin folder, fail if not found + - 2: force custom binaries from project or launch folder, fail if not found + - 3: force generic development binaries from plugin folder, fail if not found. This is only supported in non-shipping build configurations + +## DLSS memory usage + +- `stat DLSS` + - shows how much GPU memory DLSS uses and how many DLSS features, i.e. instances of DLSS are allocated. + - In steady state there should be 1 DLSS feature allocated per view. This value can increase temporarily, typically after changing the DLSS quality mode or resizing the window. This can be configured with the `r.NGX.FramesUntilFeatureDestruction` console variable + +## NGX Project ID + +The DLSS plugin by default uses the project identifier to initialize NGX and DLSS. On rare occasion, NVIDIA might provide a special NVIDIA NGX application ID. The following console variable determines which one is used. + +r.NGX.ProjectIdentifier (0, default) + - 0: automatic: + - use NVIDIA NGX Application ID if non-zero, otherwise use UE Project ID + - 1: force UE Project ID + - 2: force NVIDIA NGX Application ID (set via the Project Settings -> NVIDIA DLSS plugin) + +Please refer to the "Distributing DLSS" section for further details. + +## Multi GPU Support (Experimental) + +The DLSS plugin supports multiple GPUs in certain circumstances, as shown in the following table. +There AFR stands for Alternate-Frame-Rendering, i.e. SLI or CrossFire, and SFR stands for Split-Frame-Rendering, which is what the nDisplay plugin uses. + +| RHI | AFR | SFR| +| --- | --- | --- | +| D3D12RHI | no | conditionally| +| D3D11RHI| yes| no| +| VulkanRHI| no | no| + +Notes: +- D3D12RHI + - AFR is not supported + - Primarily due to higher level renderer code not maintaining TAA (and thus DLSS) history across non-consecutive frames on the same GPU + - SFR is conditionally supported + - Support requires a custom nDisplay plugin to enable calling into the DLSS plugin + - Please refer to the [NvRTX](https://github.com/NvRTX/UnrealEngine) GitHub repository + - GPUs are expected to be in Linked Display Adapter (LDA) mode + - **This will not work with unmodified engine distributions, such as those from the Epic Games Launcher** + +- D3D11RHI + - AFR is supported via driver based, automatic SLI support + +- VulkanRHI + - The VulkanRHI (as of UE 4.27) does not implement explicit MGPU, and thus neither AFR nor SFR are available + +The following console variables can be used to adjust how DLSS interacts with the GPU nodes + +- r.NGX.DLSS.FeatureCreationNode (-1, default) + - Determines which GPU the DLSS feature is getting created on + - -1: Create on the GPU the command list is getting executed on + - 0: Create on GPU node 0 + - 1: Create on GPU node 1 + +- r.NGX.DLSS.FeatureVisibilityMask (-1, default) + - Determines which GPU the DLSS feature is visible to + - -1: Visible to the GPU the command list is getting executed on + - 1: visible to GPU node 0 + - 2: visible to GPU node 1 + - 3: visible to GPU node 0 and GPU node 1 + + +## Miscellaneous + +- r.NGX.DLSS.AutomationTesting (0, default) + - Whether the NGX library should be loaded when GIsAutomationTesting is true.(default is false) + - Must be set to true before startup. This can be enabled for cases where running automation testing with DLSS is desired +- r.NGX.Automation.Enable (0, default) + - Enable automation for NGX DLSS image quality and performance evaluation. +- r.NGX.Automation.ViewIndex (0, default) + - Select which view to use with NGX DLSS image quality and performance automation. +- r.NGX.Automation.NonGameViews (0,default) + - Enable non-game views for NGX DLSS image quality and performance automation. +- r.NGX.FramesUntilFeatureDestruction (3, default) + - Number of frames until an unused NGX feature gets destroyed +- r.NGX.DLSS.MinimumWindowsBuildVersion (16299, default for v1709) + - Sets the minimum Windows 10 build version required to enable DLSS +- r.NGX.LogLevel (1, default) + - Determines the minimal amount of logging the NGX implementation. Please refer to the DLSS plugin documentation on other ways to change the logging level. + - 0: off + - 1: on + - 2: verbose +- r.NGX.EnableOtherLoggingSinks (0, default) + - Determines whether the NGX implementation will turn on additional log sinks LogDLSSNGXRHI + - 0: off + - 1: on +- r.NGX.RenameNGXLogSeverities (1, default) + - Renames 'error' and 'warning' in messages returned by the NGX log callback to 'e_rror' and 'w_arning' before passing them to the UE log system + - 0: off + - 1: on, for select messages during initalization + - 2: on, for all messages +- r.NGX.DLSS.ReleaseMemoryOnDelete (1, default) + - Enable/disable releasing DLSS related memory on the NGX side when DLSS features get released + +# DLSS and the NIS NVIDIA Image Scaling plugin (UE 4.27.1+) + +The *DLSS* plugin and NVIDIA Image Scaling (*NIS*) plugins can be enabled together for the same project. Please see the `RTX UI Developer Guidelines` document for suggested UI implementations. + +When both the *DLSS* and *NIS* plugins are enabled for a project, NIS will be used instead of DLSS sharpening. See `r.NGX.DLSS.PreferNISSharpen` for details. + +# DLSS in the Editor + +## Enabling DLSS for a project + +![DLSS Plugin](Images/DLSSPlugin.png) + +## Enabling DLSS in Level Editor Viewports + +With "Enable DLSS to be turned on in Editor viewports" set in the project plugin settings, (on by default), the DLSS mode can be turned on in level editor viewports like this. Each viewport can have a different DLSS mode. + +![DLSS Viewport On](Images/DLSSViewportSettingsDLSSOn.png) + +## DLSS Plugin Settings + +Some of the "Level Editor - Viewport" settings are split across two config files and settings pages to tailor how DLSS is interacting with the editor user experience. + +For example, a cross-platform game project might find it more practical by default to only have DLSS enabled in "Play In Editor Viewports" or in "game mode" in order to maintain a consistent content authoring experience across the range of supported platforms. +However projects (e.g. an architecture visualization project with notable raytracing workloads), might find it more useful to have DLSS enabled during the content authoring. Either way each user can override those settings locally: + +- `Project Settings -> Plugins -> NVIDIA DLSS` + - stored in DefaultEngine.ini + - typically resides in source control. + - settings here are shared between users +- `Project Settings -> Plugins -> NVIDIA DLSS (Local)` + - stored UserEngine.ini + - not recommended to be checked into source control. + - allow a user to override project wide settings if desired. Defaults to "use project settings" + +![DLSS plugin project settings](Images/DLSSPluginProjectSettings.png) + +![DLSS plugin local project settings](Images/DLSSPluginProjectSettingsLocal.png) + + +## DLSS Blueprints + +The UDLSSLibrary blueprint library provides functionality to query whether DLSS and which modes are supported. It also provides convenient functions to enable the underlying DLSS console variables. The tooltips of each function provide additional information. + +Using the UDLSSLibrary via blueprint or C++ (by including the DLSSBlueprint module in a game project) is recommended over setting the console variables directly. This will make sure that any future updates will be picked up by simply updating the DLSS plugin, without having to update the game logic. + +![DLSS Blueprint library](Images/DLSSBlueprintLibrary.png) + +## DLSS Movie Render Queue Support (UE 4.27) + +Starting with UE4.27 DLSS supports the DLSS when rendering movies with the Movie Render Queue plugin. + +0. Enable the *Movie Render Queue* and *DLSS* plugins in the Editor +1. Enable the *Movie Render Queue DLSS Support* plugin in the Editor, then restart the editor +2. In the configuration, add the `Settings -> DLSS` page +3. In the DLSS settings page, change the desired DLSS quality mode + 1. Note: Unsupported DLSS modes will show a warning at the bottom of the window +4. Optional: The `Settings -> Output -> File Name Format` page supports a `{dlss_quality}` format tag + +**Note:** Only the *Deferred Rendering* render pass is supported with DLSS, all other passes use the built-in TAA + + +![DLSS Movie Scene Support Plugin](Images/DLSSMoviePipelineSupportPlugin.png) +![DLSS Movie Scene Support DLSS Setting](Images/DLSSMoviePipelineSupportDLSSetting.png) +![DLSS Movie Scene Support DLSS Setting Options](Images/DLSSMoviePipelineSupportDLSSOptions.png) +![DLSS Movie Scene Support DLSS Setting Options](Images/DLSSMoviePipelineSupportDLSSFormatFlags.png) + +## DLSS nDisplay support (NVRTX only) + +**Unmodified engine distributions, such as those from the Epic Games Launcher do not support DLSS with the nDisplay plugin.** + +The [NvRTX](https://github.com/NvRTX/UnrealEngine) GitHub repository hosts a modified version of the nDisplay plugin that has those changes to the nDisplay plugin: + +At the top of `\Engine\Plugins\Runtime\nDisplay\Source\DisplayCluster\Private\Game\EngineClasses\Basics\DisplayClusterViewportClient.cpp`, right after the existing header includes around line 50, add this block: + +``` +#include "CustomStaticScreenPercentage.h" + +static TAutoConsoleVariable CVarAllowTemporalUpsampling( + TEXT("nDisplay.render.TemporalUpsampling"), + 1, + TEXT("Allow custom upscaler plugins when rendering with nDisplay"), + ECVF_Default +); +``` + +And in `UDisplayClusterViewportClient::Draw`, around line 510, add this before the block that checks whether the view family has a screenpercentage interface set or not: + +``` +if (CVarAllowTemporalUpsampling.GetValueOnGameThread() && GCustomStaticScreenPercentage && ViewFamily.ViewMode == EViewModeIndex::VMI_Lit) +{ + GCustomStaticScreenPercentage->SetupMainGameViewFamily(ViewFamily); + + // Regular GameViewport set the primary screenpercentage mode elsewhere + if (ViewFamily.GetTemporalUpscalerInterface()) + { + for (FSceneView* View : Views) + { + View->PrimaryScreenPercentageMethod = EPrimaryScreenPercentageMethod::TemporalUpscale; + } + } +} +``` + +The `nDisplay.render.TemporalUpsampling` console variable then can be used to enable/disable calling into the DLSS plugin. +The usual DLSS blueprint functionality can then be used to configure DLSS. + + + +# Distributing DLSS + +The DLSS plugin ships with a ready-to-use production DLSS binary (without watermarks) and uses the project identifier to initialize NGX and DLSS. This is the common case for distribution to end users and does not require further actions from either your or NVIDIA's side. +On rare occasion NVIDIA however might provide: + +1. a custom project specific DLSS binary +2. an NVIDIA application ID + +In that case those can be configured in the advanced plugin settings. Additionally please also ensure that the r.NGX.ProjectIdentifier console variable is set to either 0 (the default) or 2. +The project plugin settings can be used to configure those (please see above). + +1. The custom, project specific DLSS binary `nvngx_dlss.dll` should be put into the project under `$(ProjectDir)/Binaries/ThirdParty/NVIDIA/NGX/$(Platform)` +2. Setting the NVIDIA NGX application ID for the project. + ![DLSS Plugin Project Settings](Images/DLSSPluginProjectSettings.png) + +Please refer to "Chapter 4 Distributing DLSS in a Game" in the the [DLSS Programming Guide](DLSS_Programming_Guide_Release.pdf) for details. + +# DLSS API and UI Documentation + +The [DLSS Programming Guide](DLSS_Programming_Guide_Release.pdf) provides details about the NVIDIA NGX APIs which are used by the plugin to implement DLSS. + +The [RTX UI Developer Guidelines](RTX UI Developer Guidelines.pdf) ([Chinese](RTX UI Developer Guidelines Chinese Version.pdf)) provides details about recommended game settings and UI for DLSS. + +The NVIDIA Developer Blog [Tips: Getting the Most out of the DLSS Unreal Engine 4 Plugin](https://developer.nvidia.com/blog/tips-getting-the-most-out-of-the-dlss-unreal-engine-4-plugin/) provides best practices along with other tips and tricks to use NVIDIA DLSS in Unreal Engine games and applications. diff --git a/plugins/DLSS/Resources/Icon128.png b/plugins/DLSS/Resources/Icon128.png new file mode 100644 index 00000000..8e700abd Binary files /dev/null and b/plugins/DLSS/Resources/Icon128.png differ diff --git a/plugins/DLSS/Shaders/Private/VelocityCombine.usf b/plugins/DLSS/Shaders/Private/VelocityCombine.usf new file mode 100644 index 00000000..e5dbc321 --- /dev/null +++ b/plugins/DLSS/Shaders/Private/VelocityCombine.usf @@ -0,0 +1,199 @@ +/* +* Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#include "/Engine/Private/Common.ush" +#include "/Engine/Private/FastMath.ush" +#include "/Engine/Private/ScreenPass.ush" + +#ifndef THREADGROUP_SIZEX +#define THREADGROUP_SIZEX 8 +#endif +#ifndef THREADGROUP_SIZEY +#define THREADGROUP_SIZEY 8 +#endif +#define THREADGROUP_TOTALSIZE (THREADGROUP_SIZEX * THREADGROUP_SIZEY) + +#ifndef DILATE_MOTION_VECTORS +#define DILATE_MOTION_VECTORS 0 +#endif + +#if DILATE_MOTION_VECTORS +#define AA_CROSS 1 +float2 TemporalJitterPixels; +#else +#endif + +Texture2D VelocityTexture; +SamplerState VelocityTextureSampler; +SCREEN_PASS_TEXTURE_VIEWPORT(Velocity) + +Texture2D DepthTexture; +SamplerState DepthTextureSampler; + +RWTexture2D OutVelocityCombinedTexture; +SCREEN_PASS_TEXTURE_VIEWPORT(CombinedVelocity) + + + + +[numthreads(THREADGROUP_SIZEX, THREADGROUP_SIZEY, 1)] +void VelocityCombineMain( + uint2 GroupId : SV_GroupID, + uint2 DispatchThreadId : SV_DispatchThreadID, + uint2 GroupThreadId : SV_GroupThreadID, + uint GroupIndex : SV_GroupIndex) +{ + uint2 PixelPos = min(DispatchThreadId + Velocity_ViewportMin, Velocity_ViewportMax - 1); + + // CombinedVelocity_ViewportMin is expected to be 0, but in case it is not + uint2 OutputPixelPos = CombinedVelocity_ViewportMin + DispatchThreadId; + const bool bInsideViewport = all(PixelPos.xy < Velocity_ViewportMax); + + BRANCH + if (!bInsideViewport) + return; + +#if DILATE_MOTION_VECTORS // TODO: 2x2. + + // Screen position of minimum depth. + float2 VelocityOffset = float2(0.0, 0.0); + + float2 NearestBufferUV = (PixelPos + 0.5f) * Velocity_ViewportSizeInverse; + + //float2 ViewportUV = NearestBufferUV; + float2 ViewportUV = (float2(DispatchThreadId) + 0.5f) * CombinedVelocity_ViewportSizeInverse; + + // Pixel coordinate of the center of output pixel O in the input viewport. + float2 PPCo = ViewportUV * Velocity_ViewportSize + TemporalJitterPixels; + + // Pixel coordinate of the center of the nearest input pixel K. + float2 PPCk = floor(PPCo) + 0.5; + + // Pixel coordinate of the center of the nearest top left input pixel T. + float2 PPCt = floor(PPCo - 0.5) + 0.5; + + NearestBufferUV = Velocity_ExtentInverse * (Velocity_ViewportMin + PPCk); + + // FIND MOTION OF PIXEL AND NEAREST IN NEIGHBORHOOD + // ------------------------------------------------ + float3 PosN; // Position of this pixel, possibly later nearest pixel in neighborhood. + PosN.xy = ViewportUVToScreenPos(ViewportUV); + PosN.z = DepthTexture.SampleLevel(DepthTextureSampler, NearestBufferUV, 0).x; + + { + // For motion vector, use camera/dynamic motion from min depth pixel in pattern around pixel. + // This enables better quality outline on foreground against different motion background. + // Larger 2 pixel distance "x" works best (because AA dilates surface). + float4 Depths; + Depths.x = DepthTexture.SampleLevel(DepthTextureSampler, NearestBufferUV, 0, int2(-AA_CROSS, -AA_CROSS)).x; + Depths.y = DepthTexture.SampleLevel(DepthTextureSampler, NearestBufferUV, 0, int2(AA_CROSS, -AA_CROSS)).x; + Depths.z = DepthTexture.SampleLevel(DepthTextureSampler, NearestBufferUV, 0, int2(-AA_CROSS, AA_CROSS)).x; + Depths.w = DepthTexture.SampleLevel(DepthTextureSampler, NearestBufferUV, 0, int2(AA_CROSS, AA_CROSS)).x; + + float2 DepthOffset = float2(AA_CROSS, AA_CROSS); + float DepthOffsetXx = float(AA_CROSS); +#if HAS_INVERTED_Z_BUFFER + // Nearest depth is the largest depth (depth surface 0=far, 1=near). + if (Depths.x > Depths.y) + { + DepthOffsetXx = -AA_CROSS; + } + if (Depths.z > Depths.w) + { + DepthOffset.x = -AA_CROSS; + } + float DepthsXY = max(Depths.x, Depths.y); + float DepthsZW = max(Depths.z, Depths.w); + if (DepthsXY > DepthsZW) + { + DepthOffset.y = -AA_CROSS; + DepthOffset.x = DepthOffsetXx; + } + float DepthsXYZW = max(DepthsXY, DepthsZW); + if (DepthsXYZW > PosN.z) + { + // This is offset for reading from velocity texture. + // This supports half or fractional resolution velocity textures. + // With the assumption that UV position scales between velocity and color. + VelocityOffset = DepthOffset * Velocity_ExtentInverse; + // This is [0 to 1] flipped in Y. + //PosN.xy = ScreenPos + DepthOffset * ViewportSize.zw * 2.0; + PosN.z = DepthsXYZW; + } +#else // !HAS_INVERTED_Z_BUFFER +#error Fix me! +#endif // !HAS_INVERTED_Z_BUFFER + } + // Camera motion for pixel or nearest pixel (in ScreenPos space). + bool OffScreen = false; + float Velocity = 0; + float HistoryBlur = 0; + + float4 ThisClip = float4(PosN.xy, PosN.z, 1); + float4 PrevClip = mul(ThisClip, View.ClipToPrevClip); + float2 PrevScreen = PrevClip.xy / PrevClip.w; + float2 BackN = PosN.xy - PrevScreen; + + float2 BackTemp = BackN * Velocity_ViewportSize; + + float4 VelocityN = VelocityTexture.SampleLevel(VelocityTextureSampler, NearestBufferUV + VelocityOffset, 0); + bool DynamicN = VelocityN.x > 0.0; + if (DynamicN) + { + BackN = DecodeVelocityFromTexture(VelocityN).xy; + } + BackTemp = BackN * CombinedVelocity_ViewportSize; + + OutVelocityCombinedTexture[OutputPixelPos].xy = -BackTemp * float2(0.5, -0.5); + +#else + float4 EncodedVelocity = VelocityTexture[PixelPos]; + float Depth = DepthTexture[PixelPos].x; + + float2 Velocity; + if (all(EncodedVelocity.xy > 0)) + { + Velocity = DecodeVelocityFromTexture(EncodedVelocity).xy; + } + else + { + float4 ClipPos; + ClipPos.xy = SvPositionToScreenPosition(float4(PixelPos.xy, 0, 1)).xy; + ClipPos.z = Depth; + ClipPos.w = 1; + + float4 PrevClipPos = mul(ClipPos, View.ClipToPrevClip); + + if (PrevClipPos.w > 0) + { + float2 PrevScreen = PrevClipPos.xy / PrevClipPos.w; + Velocity = ClipPos.xy - PrevScreen.xy; + } + else + { + Velocity = EncodedVelocity.xy; + } + } + + float2 OutVelocity = Velocity * float2(0.5, -0.5) * View.ViewSizeAndInvSize.xy; + + OutVelocityCombinedTexture[OutputPixelPos].xy = -OutVelocity; +#endif +} \ No newline at end of file diff --git a/plugins/DLSS/Source/DLSS/DLSS.Build.cs b/plugins/DLSS/Source/DLSS/DLSS.Build.cs new file mode 100644 index 00000000..bcca694a --- /dev/null +++ b/plugins/DLSS/Source/DLSS/DLSS.Build.cs @@ -0,0 +1,103 @@ +/* +* Copyright (c) 2020 - 2022 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +* property and proprietary rights in and to this material, related +* documentation and any modifications thereto. Any use, reproduction, +* disclosure or distribution of this material and related documentation +* without an express license agreement from NVIDIA CORPORATION or +* its affiliates is strictly prohibited. +*/ + +using UnrealBuildTool; + +public class DLSS : ModuleRules +{ + public virtual string [] SupportedDynamicallyLoadedNGXRHIModules(ReadOnlyTargetRules Target) + { + if(Target.Platform == UnrealTargetPlatform.Win64 ) + { + return new string[] + { + "NGXD3D11RHI", + "NGXD3D12RHI", + "NGXVulkanRHI" + }; + } + return new string[] { "" }; + } + + public DLSS(ReadOnlyTargetRules Target) : base(Target) + { + PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; + + PublicIncludePaths.AddRange( + new string[] { + // ... add public include paths required here ... + } + ); + + + PrivateIncludePaths.AddRange( + new string[] { + EngineDirectory + "/Source/Runtime/Renderer/Private", + // ... add other private include paths required here ... + } + ); + + PublicDependencyModuleNames.AddRange( + new string[] + { + + // ... add other public dependencies that you statically link with here ... + } + ); + + + PrivateDependencyModuleNames.AddRange( + new string[] + { + "Core", + "CoreUObject", + "EngineSettings", + "Engine", + "RenderCore", + "Renderer", + "RHI", + "NGX", + "Projects", + "DeveloperSettings", + "DLSSUtility", + "NGXRHI", + // ... add private dependencies that you statically link with here ... + } + ); + if (ReadOnlyBuildVersion.Current.MajorVersion == 5) + { + PrivateDependencyModuleNames.Add("RHICore"); + } + DynamicallyLoadedModuleNames.AddRange(SupportedDynamicallyLoadedNGXRHIModules(Target)); + + // We can't quite check whether we have CL 16848904 (in UE5-Main) so we do this in a round about way + bool bSupportsPostProcessingScreenPercentage = (Target.Version.MajorVersion == 4) || + ((Target.Version.MajorVersion == 5) && (Target.Version.BranchName == "++UE5+Release-5.0-EarlyAccess")) + ; + PrivateDefinitions.Add(string.Format("SUPPORTS_POSTPROCESSING_SCREEN_PERCENTAGE={0}", bSupportsPostProcessingScreenPercentage ? "1" : "0")); + + // this is a public definition so the DLSSMoviePipelineSupport modules (if compiled against that branch) see it + bool bSupportsCustomStaticScreenpercentageSetupViewFamily = ((Target.Version.MajorVersion == 4) && (Target.Version.MinorVersion >= 27)) || ((Target.Version.MajorVersion == 5) && (Target.Version.BranchName != "++UE5+Release-5.0-EarlyAccess")); + PublicDefinitions.Add(string.Format("DLSS_ENGINE_SUPPORTS_CSSPD={0}", bSupportsCustomStaticScreenpercentageSetupViewFamily ? "1" : "0")); + + // We can't quite check whether we have CL 16758229 so we do this in a round about way + bool bEngineHasAAM_TSR = (Target.Version.MajorVersion == 5) && (Target.Version.BranchName != "++UE5+Release-5.0-EarlyAccess"); + PrivateDefinitions.Add(string.Format("DLSS_ENGINE_HAS_AAM_TSR={0}", bEngineHasAAM_TSR ? "1" : "0")); + + // 4.x and early access 5.0 engines had GTemporalUpscaler interface + bool bEngineHasGTemporalUpscaler = (Target.Version.MajorVersion == 4) || (Target.Version.BranchName == "++UE5+Release-5.0-EarlyAccess"); + PrivateDefinitions.Add(string.Format("DLSS_ENGINE_HAS_GTEMPORALUPSCALER={0}", bEngineHasGTemporalUpscaler ? "1" : "0")); + + // 4.x and early access 5.0 engines, ITemporalUpscaler::AddPasses returns values through pointers passed into the function + bool bEngineAddPassesReturnThroughParams = (Target.Version.MajorVersion == 4) || (Target.Version.BranchName == "++UE5+Release-5.0-EarlyAccess"); + PublicDefinitions.Add(string.Format("DLSS_ENGINE_ADDPASSES_RETURN_THROUGH_PARAMS={0}", bEngineAddPassesReturnThroughParams ? "1" : "0")); + } +} diff --git a/plugins/DLSS/Source/DLSS/Private/DLSS.cpp b/plugins/DLSS/Source/DLSS/Private/DLSS.cpp new file mode 100644 index 00000000..15f38969 --- /dev/null +++ b/plugins/DLSS/Source/DLSS/Private/DLSS.cpp @@ -0,0 +1,527 @@ +/* +* Copyright (c) 2020 - 2022 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +* property and proprietary rights in and to this material, related +* documentation and any modifications thereto. Any use, reproduction, +* disclosure or distribution of this material and related documentation +* without an express license agreement from NVIDIA CORPORATION or +* its affiliates is strictly prohibited. +*/ +#include "DLSS.h" +#include "CoreMinimal.h" +#include "DLSSUpscalerPrivate.h" + +#include "DLSSUpscaler.h" +#include "DLSSDenoiser.h" + +#include "NGXRHI.h" + +#include "Modules/ModuleManager.h" +#include "Interfaces/IPluginManager.h" + +#include "GeneralProjectSettings.h" +#include "DLSSSettings.h" + +#include "SceneViewExtension.h" +#include "SceneView.h" +#include "Misc/MessageDialog.h" + + +#define LOCTEXT_NAMESPACE "FDLSSModule" +DEFINE_LOG_CATEGORY(LogDLSS); + +static TAutoConsoleVariable CVarNGXBinarySearchOrder( + TEXT("r.NGX.BinarySearchOrder"), + 0, + TEXT("0: automatic: (default)\n") + TEXT(" use custom binaries from project and launch folder $(ProjectDir)/Binaries/ThirdParty/NVIDIA/NGX/$(Platform) if present\n") + TEXT(" fallback to generic binaries from plugin folder\n") + TEXT("1: force generic binaries from plugin folder, fail if not found\n") + TEXT("2: force custom binaries from project or launch folder, fail if not found\n") + TEXT("3: force generic development binaries from plugin folder, fail if not found. This is only supported in non-shipping build configurations\n"), + ECVF_ReadOnly); + +static TAutoConsoleVariable CVarNGXEnable( + TEXT("r.NGX.Enable"), 1, + TEXT("Whether the NGX library should be loaded. This allow to have the DLSS plugin enabled but avoiding potential ") + TEXT("incompatibilities by skipping the driver side NGX parts of DLSS. Can also be set on the command line via -ngxenable and -ngxdisable"), + ECVF_Default); + +static TAutoConsoleVariable CVarNGXDLSSMinimumWindowsBuildVersion( + TEXT("r.NGX.DLSS.MinimumWindowsBuildVersion"), 16299, + TEXT("Sets the minimum Windows 10 build version required to enable DLSS. (default: 16299 for v1709, Windows 10 Fall 2017 Creators Update 64-bit)"), + ECVF_Default +); + +static TAutoConsoleVariable CVarNGXProjectIdentifier( + TEXT("r.NGX.ProjectIdentifier"), + 0, + TEXT("0: automatic: (default)\n") + TEXT(" use NVIDIA NGX Application ID if non-zero, otherwise use UE Project ID)\n") + TEXT("1: force UE Project ID\n") + TEXT("2: force NVIDIA NGX Application ID (set via the Project Settings -> NVIDIA DLSS plugin)\n"), + ECVF_ReadOnly); + + +static TAutoConsoleVariable CVarNGXAutomationEnable( + TEXT("r.NGX.Automation.Enable"), + false, + TEXT("Enable automation for NGX DLSS image quality and performance evaluation. (default = 0)\n"), + ECVF_RenderThreadSafe); + +static TAutoConsoleVariable CVarNGXAutomationViewIndex( + TEXT("r.NGX.Automation.ViewIndex"), + 0, + TEXT("Select which view to use with NGX DLSS image quality and performance automation. (default = 0). \n"), + ECVF_RenderThreadSafe); + +static TAutoConsoleVariable CVarNGXAutomationNonGameViews( + TEXT("r.NGX.Automation.NonGameViews"), + 0, + TEXT("Enable NGX DLSS image quality and performance automation for non-game views. (default = 0). \n"), + ECVF_RenderThreadSafe); + + +class FNGXAutomationViewExtension final : public FSceneViewExtensionBase +{ +public: + FNGXAutomationViewExtension(const FAutoRegister& AutoRegister): FSceneViewExtensionBase(AutoRegister) + { + FSceneViewExtensionIsActiveFunctor IsActiveFunctor; + + IsActiveFunctor.IsActiveFunction = [](const ISceneViewExtension* SceneViewExtension, const FSceneViewExtensionContext& Context) + { + return CVarNGXAutomationEnable.GetValueOnAnyThread(); + }; + + IsActiveThisFrameFunctions.Add(IsActiveFunctor); + } + + virtual void SetupViewFamily(FSceneViewFamily& InViewFamily) {} + virtual void SetupView(FSceneViewFamily& InViewFamily, FSceneView& InView) {} + virtual void SetupViewPoint(APlayerController* Player, FMinimalViewInfo& InViewInfo) {} + virtual void BeginRenderViewFamily(FSceneViewFamily& InViewFamily) {} + virtual void PreRenderView_RenderThread(FRHICommandListImmediate& RHICmdList, FSceneView& InView) final {} + virtual void PreRenderViewFamily_RenderThread(FRHICommandListImmediate& RHICmdList, FSceneViewFamily& InViewFamily) final + { + int32 ViewIndex = CVarNGXAutomationViewIndex.GetValueOnRenderThread(); + + if (InViewFamily.Views.IsValidIndex(ViewIndex)) + { + const FSceneView* View = InViewFamily.Views[ViewIndex]; + if (View->bIsGameView || CVarNGXAutomationNonGameViews.GetValueOnRenderThread()) + { + const FString AiAgentMarker = FString::Printf(TEXT("{\"camera\":{\"position\":{\"x\": %f, \"y\": %f, \"z\": %f},\"rotation\":{\"pitch\": %f, \"roll\": %f, \"yaw\": %f}}}"), + View->ViewLocation.X, View->ViewLocation.Y, View->ViewLocation.Z, + View->ViewRotation.Pitch, View->ViewRotation.Roll, View->ViewRotation.Yaw); + + static FColor ColorMarker = FColor::FromHex("0xA1A5E87"); + RHICmdList.PushEvent(*AiAgentMarker, ColorMarker); + RHICmdList.PopEvent(); + } + } + } +}; + + +static bool IsCompatibleEngineVersion(FString& OutPluginVersion, FString& OutEngineVersion) +{ + + // Binary incompatibility between 4.26.0 and 4.26.1, so check for the engine patch version at runtime here + // Engine loading code already checks for compatibility for major/minor/changelist + // Written so that no code change will be needed for future engine versions if compatibility isn't broken again + FEngineVersion Version = FEngineVersion::Current(); + + OutEngineVersion = FString::Printf(TEXT("%u.%u.%u"), Version.GetMajor(), Version.GetMinor(), Version.GetPatch()); + OutPluginVersion = FString::Printf(TEXT("%u.%u.%u"), ENGINE_MAJOR_VERSION, ENGINE_MINOR_VERSION, ENGINE_PATCH_VERSION); +#if ENGINE_MAJOR_VERSION == 4 + #if ENGINE_MINOR_VERSION == 26 + #if ENGINE_PATCH_VERSION == 0 + // 4.26.0 + return Version.GetPatch() == 0; + #else + // 4.26.x, x > 0 + return Version.GetPatch() >= 1; + #endif + #else + // 4.x._, x > 26 + return true; + #endif +#elif ENGINE_MAJOR_VERSION == 5 + return true; +#else +#error "ENGINE_MAJOR_VERSION must be either 4 or 5" +#endif +} + +void FDLSSModule::StartupModule() +{ + // This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module + UE_LOG(LogDLSS, Log, TEXT("%s Enter"), ANSI_TO_TCHAR(__FUNCTION__)); + + // Get the base directory of this plugin + const FString PluginBaseDir = IPluginManager::Get().FindPlugin(TEXT("DLSS"))->GetBaseDir(); + const FString NGXBinariesDir = FPaths::Combine(*PluginBaseDir, TEXT("Binaries/ThirdParty/Win64/")); + const FString RHIName = GDynamicRHI->GetName(); + + UE_LOG(LogDLSS, Log, TEXT("PluginBaseDir %s"), *PluginBaseDir); + UE_LOG(LogDLSS, Log, TEXT("NGXBinariesDir %s"), *NGXBinariesDir); + UE_LOG(LogDLSS, Log, TEXT("GDynamicRHIName %s %s"), RHIVendorIdToString(), *RHIName ); + + bool bLoadLibraries = CVarNGXEnable.GetValueOnAnyThread() != 0; + if (FParse::Param(FCommandLine::Get(), TEXT("ngxenable"))) + { + bLoadLibraries = true; + } + else if (FParse::Param(FCommandLine::Get(), TEXT("ngxdisable"))) + { + bLoadLibraries = false; + } + + const int32 NGXDLSSMinimumWindowsBuildVersion = CVarNGXDLSSMinimumWindowsBuildVersion.GetValueOnAnyThread(); + + + FString PluginVersion; + FString EngineVersion; + + if (!IsCompatibleEngineVersion(PluginVersion, EngineVersion)) + { + FEngineVersion Version = FEngineVersion::Current(); + UE_LOG(LogDLSS, Error, + TEXT("This prebuilt binary distribution version %s of the NVIDIA DLSS plugin is not compatible with the current engine version %s"), + *PluginVersion, *EngineVersion); + UE_LOG(LogDLSS, Error, TEXT("Build the DLSS plugin from source (e.g. via the Editor -> Plugins -> NVIDIA DLSS -> Package)")); + DLSSSupport = EDLSSSupport::NotSupported; + +// we don't want this ever show up in packaged builds +#if WITH_EDITOR + const bool IsUnattended = FApp::IsUnattended() || IsRunningCommandlet() || GIsRunningUnattendedScript; + if (!IsUnattended ) + { + const FText DialogTitle(LOCTEXT("DLSSIncompatibleEngineVersionTitle", "Error - DLSS plugin incompatible with engine")); + + const FTextFormat Format(LOCTEXT("DLSSIncompatibleEngineVersion", + "The binary version {0} of this DLSS Unreal Engine Plugin is not compatible with the binary version {1} of this Unreal Engine installation. \n\n" + "Please build the DLSS plugin from source (e.g. via the Editor -> Plugins -> NVIDIA DLSS -> Package)")); + const FText WarningMessage = FText::Format(Format, FText::FromString(PluginVersion), FText::FromString(EngineVersion)); + + FMessageDialog::Open(EAppMsgType::Ok,WarningMessage, &DialogTitle); + } +#endif //WITH_EDITOR + } + else if (!IsRHIDeviceNVIDIA()) + { + UE_LOG(LogDLSS, Log, TEXT("NVIDIA NGX DLSS requires an NVIDIA RTX series graphics card")); + DLSSSupport = EDLSSSupport::NotSupportedIncompatibleHardware; + } +#if PLATFORM_WINDOWS + else if (NGXDLSSMinimumWindowsBuildVersion > 0 && !FPlatformMisc::VerifyWindowsVersion(10, 0 + #if PLATFORM_DESKTOP + , NGXDLSSMinimumWindowsBuildVersion + #endif + )) + { + // From https://docs.microsoft.com/en-us/windows/release-information/ + UE_LOG(LogDLSS, Log, TEXT("NVIDIA NGX DLSS requires at least Windows 10, build %u "), NGXDLSSMinimumWindowsBuildVersion); + DLSSSupport = EDLSSSupport::NotSupportedOperatingSystemOutOfDate; + } +#endif + else if (!bLoadLibraries) + { + UE_LOG(LogDLSS, Log, TEXT("NVIDIA NGX library loading has been disabled with r.NGX.Enable=0")); + DLSSSupport = EDLSSSupport::NotSupported; + } + else + { + const bool bIsDX12 = (RHIName == TEXT("D3D12")) && GetDefault()->bEnableDLSSD3D12; + const bool bIsDX11 = (RHIName == TEXT("D3D11")) && GetDefault()->bEnableDLSSD3D11; + const bool bIsVulkan = (RHIName == TEXT("Vulkan")) && GetDefault()->bEnableDLSSVulkan; + const TCHAR* NGXRHIModuleName = nullptr; + + DLSSSupport = (bIsDX11 || bIsDX12 || bIsVulkan) ? EDLSSSupport::Supported : EDLSSSupport::NotSupported; + + if (DLSSSupport == EDLSSSupport::Supported) + { + if (bIsDX11) + { + NGXRHIModuleName = TEXT("NGXD3D11RHI"); + } + else if (bIsDX12) + { + NGXRHIModuleName = TEXT("NGXD3D12RHI"); + } + else if (bIsVulkan) + { + // TODO Vulkan (which might need a second, pre RHI init module to route the required vulkan extensions to the VulkanRHI, similar to the HMD stuff + NGXRHIModuleName = TEXT("NGXVulkanRHI"); + } + + + uint32 NGXAppID = GetDefault()->NVIDIANGXApplicationId; + UE_LOG(LogDLSS, Log, TEXT("Plugin settings: NGXAppId = %u"), NGXAppID); + + if (NGXAppID != 0) + { + UE_LOG(LogDLSS, Warning, TEXT("NGX Application ID is specified, overriding the Project ID. Please refer to https://developer.nvidia.com/dlss.")); + } + else + { + UE_LOG(LogDLSS, Warning, TEXT("NGX Application ID not specified, using the Project ID by default.")); + } + + FNGXRHICreateArguments Arguments; + Arguments.PluginBaseDir = PluginBaseDir; + Arguments.DynamicRHI = GDynamicRHI; + Arguments.NGXBinariesSearchOrder = ENGXBinariesSearchOrder(FMath::Clamp(CVarNGXBinarySearchOrder.GetValueOnAnyThread(), int32(ENGXBinariesSearchOrder::MinValue), int32(ENGXBinariesSearchOrder::MaxValue))); + + Arguments.ProjectIdentifier = ENGXProjectIdentifier(FMath::Clamp(CVarNGXProjectIdentifier.GetValueOnAnyThread(), int32(ENGXProjectIdentifier::MinValue), int32(ENGXProjectIdentifier::MaxValue))); + Arguments.NGXAppId = NGXAppID; + Arguments.UnrealEngineVersion = FString::Printf(TEXT("%u.%u"), FEngineVersion::Current().GetMajor(), FEngineVersion::Current().GetMinor()); + Arguments.UnrealProjectID = GetDefault()->ProjectID.ToString(); + + INGXRHIModule* NGXRHIModule = &FModuleManager::LoadModuleChecked(NGXRHIModuleName); + NGXRHIExtensions = NGXRHIModule->CreateNGXRHI(Arguments); + + + const bool bRenderDocPluginFound = FModuleManager::Get().ModuleExists(TEXT("RenderDocPlugin")); + const bool bDLSSUnavailable = (!NGXRHIExtensions || !NGXRHIExtensions->IsDLSSAvailable()); + const bool bIncompatibleAPICaptureToolActive = (bRenderDocPluginFound || NGXRHI::IsIncompatibleAPICaptureToolActive()); + if (bDLSSUnavailable && bIncompatibleAPICaptureToolActive) + { + if (bRenderDocPluginFound) + { + UE_LOG(LogDLSS, Warning, TEXT("DLSS is not compatible with the RenderDoc plugin. To enable DLSS please disable the RenderDoc plugin.")); + } + + if (NGXRHI::IsIncompatibleAPICaptureToolActive()) + { + UE_LOG(LogDLSS, Warning, TEXT("DLSS is not compatible with some API capture tools, such as RenderDoc. To enable DLSS please use an API capture tool such as NVIDIA NSIGHT graphics, which support the APIs required by DLSS.")); + } +// we don't want this ever show up in packaged builds +#if WITH_EDITOR + const bool IsUnattended = FApp::IsUnattended() || IsRunningCommandlet() || GIsRunningUnattendedScript; + auto LocalSettings = GetMutableDefault(); + if (!IsUnattended && LocalSettings->bShowDLSSIncompatiblePluginsToolsWarnings) + { + const FText DialogTitle(LOCTEXT("DLSSIncompatibleWithCaptureToolTitle", "Warning -- DLSS incompatible with plugins and/or API capture tools")); + const FText WarningMessage(LOCTEXT("DLSSIncompatibleWithCaptureTool", + "To enable DLSS, please disable the RenderDoc plugin and/or use an API capture tool such as NVIDIA NSIGHT graphics, which supports the APIs required by DLSS.\n\n" + "Would you like to continue to see this message for this project? It can also be disabled in the NVIDIA DLSS Overrides (Local) plugin settings.")); + + EAppReturnType::Type YesNoCancelReply = FMessageDialog::Open(EAppMsgType::YesNoCancel, EAppReturnType::Yes, WarningMessage, &DialogTitle); + + if(YesNoCancelReply == EAppReturnType::No) + { + LocalSettings->bShowDLSSIncompatiblePluginsToolsWarnings = false; + } + else if (YesNoCancelReply == EAppReturnType::Cancel) + { + FPlatformMisc::RequestExit(true); + } + } +#endif //WITH_EDITOR + } + + if (NGXRHIExtensions) + { + if (NGXRHIExtensions->IsDLSSAvailable()) + { + check(NVSDK_NGX_SUCCEED(NGXRHIExtensions->GetDLSSInitResult())); + DLSSSupport = EDLSSSupport::Supported; + } + else + { + // map some of the NGX error codes to something that the UI/gameplay could suggest the end user to do something about + if (bIncompatibleAPICaptureToolActive) + { + DLSSSupport = EDLSSSupport::NotSupportedIncompatibleAPICaptureToolActive; + } + else if (NVSDK_NGX_Result_FAIL_OutOfDate == NGXRHIExtensions->GetDLSSInitResult()) + { + DLSSSupport = EDLSSSupport::NotSupportedDriverOutOfDate; + } + else if (NVSDK_NGX_Result_FAIL_FeatureNotSupported == NGXRHIExtensions->GetDLSSInitResult()) + { + DLSSSupport = EDLSSSupport::NotSupportedIncompatibleHardware; + } + else + { + DLSSSupport = EDLSSSupport::NotSupported; + } + } + + const FNGXDriverRequirements DriverRequirements = NGXRHIExtensions->GetDLSSDriverRequirements(); + if (DriverRequirements.DriverUpdateRequired) + { + if (DLSSSupport == EDLSSSupport::Supported) + { + UE_LOG(LogDLSS, Log, TEXT("NVIDIA NGX DLSS could be loaded properly. However it is recommended to update the version to at least: %u.%u"), DriverRequirements.MinDriverVersionMajor, DriverRequirements.MinDriverVersionMinor); + } + else + { + UE_LOG(LogDLSS, Log, TEXT("NVIDIA NGX DLSS cannot be loaded properly. Please verify that at least this driver version is installed: %u.%u"), DriverRequirements.MinDriverVersionMajor, DriverRequirements.MinDriverVersionMinor); + DLSSSupport = EDLSSSupport::NotSupportedDriverOutOfDate; + MinDriverVersionMajor = DriverRequirements.MinDriverVersionMajor; + MinDriverVersionMinor = DriverRequirements.MinDriverVersionMinor; + } + + } + } + else + { + UE_LOG(LogDLSS, Log, TEXT("Could not load %s module"), NGXRHIModuleName); + DLSSSupport = EDLSSSupport::NotSupported; + } + + if (DLSSSupport != EDLSSSupport::Supported) + { + UE_LOG(LogDLSS, Log, TEXT("DLSS not supported by the %s %s RHI in the %s module at runtime"), RHIVendorIdToString(), *RHIName, NGXRHIModuleName); + } + } + else + { + UE_LOG(LogDLSS, Log, TEXT("DLSS not implemented for the %s RHI, or disabled in the project settings"), *RHIName); + DLSSSupport = EDLSSSupport::NotSupported; + } + } + + + if (DLSSSupport == EDLSSSupport::Supported) + { + // set the upscaler + { + DLSSUpscaler.Reset(new FDLSSUpscaler(NGXRHIExtensions.Get())); + check(DLSSUpscaler); + if (DLSSUpscaler->GetNumRuntimeQualityModes() == 0) + { + UE_LOG(LogDLSS, Log, TEXT("DLSS not available due to not supporting any quality modes at runtime")); + DLSSSupport = EDLSSSupport::NotSupported; + DLSSUpscaler.Reset(); + NGXRHIExtensions.Reset(); + } +#if DLSS_ENGINE_HAS_GTEMPORALUPSCALER + else + { + checkf(GTemporalUpscaler == ITemporalUpscaler::GetDefaultTemporalUpscaler(), TEXT("GTemporalUpscaler is not set to the default upscaler. Please check that only one upscaling plugin is active.")); + GTemporalUpscaler = DLSSUpscaler.Get(); + } +#endif + } + } + + UE_LOG(LogDLSS, Log, TEXT("NVIDIA NGX DLSS supported %u"), QueryDLSSSupport() == EDLSSSupport::Supported); + + // and the other related interfaces + + if (DLSSSupport == EDLSSSupport::Supported) + { + // set the denoiser + { + + static const auto CVar = IConsoleManager::Get().FindConsoleVariable(TEXT("r.Reflections.Denoiser")); + if (CVar && (CVar->GetInt() != 2)) + { + UE_LOG(LogDLSS, Warning, TEXT("For optimal results NVIDIA NGX DLSS requires the use of a custom denoiser plugin, which currently is disabled. To enable, set r.Reflections.Denoiser=2")); + } + + DLSSDenoiser.Reset(new FDLSSDenoiser(GScreenSpaceDenoiser, DLSSUpscaler.Get())); + GScreenSpaceDenoiser = DLSSDenoiser.Get(); + UE_LOG(LogDLSS, Log, TEXT("%s wrapping %s"), DLSSDenoiser->GetDebugName(), DLSSDenoiser->GetWrappedDenoiser()->GetDebugName()); + } + + // set the screen percentage driver for game views + { + checkf(GCustomStaticScreenPercentage == nullptr, TEXT("GCustomStaticScreenPercentage is already in use. Please check that only one upscaling plugin is active.")); + GCustomStaticScreenPercentage = DLSSUpscaler.Get(); + } + + // set the resource pool + { + checkf(GCustomResourcePool == nullptr, TEXT("GCustomResourcePool is already in use. Please check that only one upscaling plugin is active.")); + GCustomResourcePool = DLSSUpscaler.Get(); + } + } + + // setup DLSS image quality and performance automation hooks + { + NGXAutomationViewExtension = FSceneViewExtensions::NewExtension(); + } + + UE_LOG(LogDLSS, Log, TEXT("%s Leave"), ANSI_TO_TCHAR(__FUNCTION__)); +} + +void FDLSSModule::ShutdownModule() +{ + UE_LOG(LogDLSS, Log, TEXT("%s Enter"), ANSI_TO_TCHAR(__FUNCTION__)); + + // reset DLSS image quality and performance automation hooks + { + NGXAutomationViewExtension = nullptr; + } + + if (QueryDLSSSupport() == EDLSSSupport::Supported) + { + // reset the resource pool + { + GCustomResourcePool = nullptr; + } + + // reset the screen percentage driver for game views + { + GCustomStaticScreenPercentage = nullptr; + } + + // reset the denoiser + { + UE_LOG(LogDLSS, Log, TEXT("%s unwrapping %s"), DLSSDenoiser->GetDebugName(), DLSSDenoiser->GetWrappedDenoiser()->GetDebugName()); + GScreenSpaceDenoiser = DLSSDenoiser->GetWrappedDenoiser(); + DLSSDenoiser.Reset(); + } + + // reset the upscaler + { +#if DLSS_ENGINE_HAS_GTEMPORALUPSCALER + GTemporalUpscaler = ITemporalUpscaler::GetDefaultTemporalUpscaler(); +#endif + FDLSSUpscaler::ReleaseStaticResources(); + DLSSUpscaler.Reset(); + } + + NGXRHIExtensions.Reset(); + } + + UE_LOG(LogDLSS, Log, TEXT("%s Leave"), ANSI_TO_TCHAR(__FUNCTION__)); +} + + +EDLSSSupport FDLSSModule::QueryDLSSSupport() const +{ + return DLSSSupport; +} + + +void FDLSSModule::GetDLSSMinDriverVersion(int32& OutMajorVersion, int32& OutMinorVersion) const +{ + OutMajorVersion = MinDriverVersionMajor; + OutMinorVersion = MinDriverVersionMinor; +} + + +float FDLSSModule::GetResolutionFractionForQuality(int32 Quality) const +{ + checkf(QueryDLSSSupport() == EDLSSSupport::Supported,TEXT("GetResolutionFractionForQuality should only be called when DLSS is supported")); + checkf(Quality >= int32(EDLSSQualityMode::MinValue) && Quality <= int32(EDLSSQualityMode::MaxValue),TEXT("The Quality %d argument of GetResolutionFractionForQuality is out of range and/or an unsupported DLSS quality mode"), Quality); + return DLSSUpscaler->GetOptimalResolutionFractionForQuality(EDLSSQualityMode(Quality)); +} + +FDLSSUpscaler* FDLSSModule::GetDLSSUpscaler() const +{ + return DLSSUpscaler.Get(); +} + +#undef LOCTEXT_NAMESPACE + +IMPLEMENT_MODULE(FDLSSModule, DLSS) + + diff --git a/plugins/DLSS/Source/DLSS/Private/DLSSDenoiser.cpp b/plugins/DLSS/Source/DLSS/Private/DLSSDenoiser.cpp new file mode 100644 index 00000000..e5938456 --- /dev/null +++ b/plugins/DLSS/Source/DLSS/Private/DLSSDenoiser.cpp @@ -0,0 +1,201 @@ +/* +* Copyright (c) 2020 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +* +* NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +* property and proprietary rights in and to this material, related +* documentation and any modifications thereto. Any use, reproduction, +* disclosure or distribution of this material and related documentation +* without an express license agreement from NVIDIA CORPORATION or +* its affiliates is strictly prohibited. +*/ + +#include "DLSSDenoiser.h" +#include "DLSSUpscaler.h" +#include "PostProcess/TemporalAA.h" +#include "SceneTextureParameters.h" +#include "ScenePrivate.h" + + +static TAutoConsoleVariable CVarNGXDLSSReflectionsTemporalAA( + TEXT("r.NGX.DLSS.Reflections.TemporalAA"), + 1, + TEXT("Apply a temporal AA pass on the denoised reflections"), + ECVF_RenderThreadSafe +); + +static TAutoConsoleVariable CVarNGXDLSSWaterReflectionsTemporalAA( + TEXT("r.NGX.DLSS.WaterReflections.TemporalAA"), + 1, + TEXT("Apply a temporal AA pass on the denoised water reflections"), + ECVF_RenderThreadSafe +); + + +// defined in Buid.cs since it depends on the branch and engine version +#if !DLSS_ENGINE_HAS_AAM_TSR +/** Returns whether the anti-aliasing method use a temporal accumulation */ +static inline bool IsTemporalAccumulationBasedMethod(EAntiAliasingMethod AntiAliasingMethod) +{ + return AntiAliasingMethod == AAM_TemporalAA; +} +#endif + +FDLSSDenoiser::FDLSSDenoiser(const IScreenSpaceDenoiser* InWrappedDenoiser, const FDLSSUpscaler* InUpscaler) + : WrappedDenoiser(InWrappedDenoiser) + , Upscaler(InUpscaler) +{ + check(Upscaler); + check(WrappedDenoiser); +} + +const TCHAR* FDLSSDenoiser::GetDebugName() const +{ + if (Upscaler->IsDLSSActive()) + { + // we don't have the View here to check whether we have a valid GetTemporalUpscalerInterface, which we'll do when we actually get called to denoise/add TAA + // and this is only for profilegpu anyways so OK if it's not 100% accurate + if (Upscaler->IsAutoQualityMode()) + { + return TEXT("FDLSSDenoiserWrapper(Auto)"); + } + else + { + return TEXT("FDLSSDenoiserWrapper(Active)"); + } + } + else + { + return TEXT("FDLSSDenoiserWrapper(Inactive)"); + } +} + +IScreenSpaceDenoiser::EShadowRequirements FDLSSDenoiser::GetShadowRequirements(const FViewInfo& View, const FLightSceneInfo& LightSceneInfo, const FShadowRayTracingConfig& RayTracingConfig) const +{ + return WrappedDenoiser->GetShadowRequirements(View, LightSceneInfo, RayTracingConfig); +} + +void FDLSSDenoiser::DenoiseShadowVisibilityMasks(FRDGBuilder& GraphBuilder, const FViewInfo& View, FPreviousViewInfo* PreviousViewInfos, const FSceneTextureParameters& SceneTextures, const TStaticArray& InputParameters, const int32 InputParameterCount, TStaticArray& Outputs) const +{ + WrappedDenoiser->DenoiseShadowVisibilityMasks(GraphBuilder, View, PreviousViewInfos, SceneTextures, InputParameters, InputParameterCount, Outputs); +} + +IScreenSpaceDenoiser::FPolychromaticPenumbraOutputs FDLSSDenoiser::DenoisePolychromaticPenumbraHarmonics(FRDGBuilder& GraphBuilder, const FViewInfo& View, FPreviousViewInfo* PreviousViewInfos, const FSceneTextureParameters& SceneTextures, const FPolychromaticPenumbraHarmonics& Inputs) const +{ + return WrappedDenoiser->DenoisePolychromaticPenumbraHarmonics(GraphBuilder, View, PreviousViewInfos, SceneTextures, Inputs); +} + +IScreenSpaceDenoiser::FReflectionsOutputs FDLSSDenoiser::DenoiseReflections(FRDGBuilder& GraphBuilder, const FViewInfo& View, FPreviousViewInfo* PreviousViewInfos, const FSceneTextureParameters& SceneTextures, const FReflectionsInputs& Inputs, const FReflectionsRayTracingConfig Config) const +{ + FReflectionsOutputs Outputs = WrappedDenoiser->DenoiseReflections(GraphBuilder, View, PreviousViewInfos, SceneTextures, Inputs, Config); + const bool bIsDLSSActive = Upscaler->IsDLSSActive() && View.Family && Upscaler->IsValidUpscalerInstance(View.Family->GetTemporalUpscalerInterface()); + const bool bApplyTemporalAA = bIsDLSSActive && CVarNGXDLSSReflectionsTemporalAA.GetValueOnRenderThread() && View.ViewState && IsTemporalAccumulationBasedMethod(View.AntiAliasingMethod); + if(bApplyTemporalAA) + { + check(View.ViewState); + + FTAAPassParameters TAASettings(View); + TAASettings.Pass = ETAAPassConfig::ScreenSpaceReflections; + TAASettings.SceneDepthTexture = SceneTextures.SceneDepthTexture; + TAASettings.SceneVelocityTexture = SceneTextures.GBufferVelocityTexture; + TAASettings.SceneColorInput = Outputs.Color; + TAASettings.bOutputRenderTargetable = true; + + FTAAOutputs TAAOutputs = AddTemporalAAPass( + GraphBuilder, + View, + TAASettings, + View.PrevViewInfo.SSRHistory, + &View.ViewState->PrevFrameViewInfo.SSRHistory); + + Outputs.Color = TAAOutputs.SceneColor; + } + + return Outputs; +} + +IScreenSpaceDenoiser::FReflectionsOutputs FDLSSDenoiser::DenoiseWaterReflections(FRDGBuilder& GraphBuilder, const FViewInfo& View, FPreviousViewInfo* PreviousViewInfos, const FSceneTextureParameters& SceneTextures, const FReflectionsInputs& Inputs, const FReflectionsRayTracingConfig Config) const +{ + FReflectionsOutputs Outputs = WrappedDenoiser->DenoiseWaterReflections(GraphBuilder, View, PreviousViewInfos, SceneTextures, Inputs, Config); + const bool bIsDLSSActive = Upscaler->IsDLSSActive() && View.Family && Upscaler->IsValidUpscalerInstance(View.Family->GetTemporalUpscalerInterface()); + const bool bApplyTemporalAA = bIsDLSSActive && Upscaler->IsDLSSActive() && CVarNGXDLSSWaterReflectionsTemporalAA.GetValueOnRenderThread() && View.ViewState && IsTemporalAccumulationBasedMethod(View.AntiAliasingMethod); + if (bApplyTemporalAA) + { + check(View.ViewState); + + FTAAPassParameters TAASettings(View); + TAASettings.Pass = ETAAPassConfig::ScreenSpaceReflections; + TAASettings.SceneDepthTexture = SceneTextures.SceneDepthTexture; + TAASettings.SceneVelocityTexture = SceneTextures.GBufferVelocityTexture; + TAASettings.SceneColorInput = Outputs.Color; + TAASettings.bOutputRenderTargetable = true; + + FTAAOutputs TAAOutputs = AddTemporalAAPass( + GraphBuilder, + View, + TAASettings, + View.PrevViewInfo.WaterSSRHistory, + &View.ViewState->PrevFrameViewInfo.WaterSSRHistory); + + Outputs.Color = TAAOutputs.SceneColor; + } + + return Outputs; +} + +IScreenSpaceDenoiser::FAmbientOcclusionOutputs FDLSSDenoiser::DenoiseAmbientOcclusion(FRDGBuilder& GraphBuilder, const FViewInfo& View, FPreviousViewInfo* PreviousViewInfos, const FSceneTextureParameters& SceneTextures, const FAmbientOcclusionInputs& Inputs, const FAmbientOcclusionRayTracingConfig Config) const +{ + return WrappedDenoiser->DenoiseAmbientOcclusion(GraphBuilder, View, PreviousViewInfos, SceneTextures, Inputs, Config); +} +#if ENGINE_MAJOR_VERSION == 4 +IScreenSpaceDenoiser::FDiffuseIndirectOutputs FDLSSDenoiser::DenoiseDiffuseIndirect(FRDGBuilder& GraphBuilder, const FViewInfo& View, FPreviousViewInfo* PreviousViewInfos, const FSceneTextureParameters& SceneTextures, const FDiffuseIndirectInputs& Inputs, const FAmbientOcclusionRayTracingConfig Config) const +{ + return WrappedDenoiser->DenoiseDiffuseIndirect(GraphBuilder, View, PreviousViewInfos, SceneTextures, Inputs, Config); +} +IScreenSpaceDenoiser::FDiffuseIndirectOutputs FDLSSDenoiser::DenoiseScreenSpaceDiffuseIndirect(FRDGBuilder& GraphBuilder, const FViewInfo& View, FPreviousViewInfo* PreviousViewInfos, const FSceneTextureParameters& SceneTextures, const FDiffuseIndirectInputs& Inputs, const FAmbientOcclusionRayTracingConfig Config) const +{ + return WrappedDenoiser->DenoiseScreenSpaceDiffuseIndirect(GraphBuilder, View, PreviousViewInfos, SceneTextures, Inputs, Config); +} +IScreenSpaceDenoiser::FDiffuseIndirectHarmonic FDLSSDenoiser::DenoiseDiffuseIndirectHarmonic(FRDGBuilder& GraphBuilder, const FViewInfo& View, FPreviousViewInfo* PreviousViewInfos, const FSceneTextureParameters& SceneTextures, const FDiffuseIndirectHarmonic& Inputs, const FAmbientOcclusionRayTracingConfig Config) const +{ + return WrappedDenoiser->DenoiseDiffuseIndirectHarmonic(GraphBuilder, View, PreviousViewInfos, SceneTextures, Inputs, Config); +} +#elif ENGINE_MAJOR_VERSION == 5 + +FSSDSignalTextures FDLSSDenoiser::DenoiseDiffuseIndirect(FRDGBuilder& GraphBuilder, const FViewInfo& View, FPreviousViewInfo* PreviousViewInfos, const FSceneTextureParameters& SceneTextures, const FDiffuseIndirectInputs& Inputs, const FAmbientOcclusionRayTracingConfig Config) const +{ + return WrappedDenoiser->DenoiseDiffuseIndirect(GraphBuilder, View, PreviousViewInfos, SceneTextures, Inputs, Config); +} + +FSSDSignalTextures FDLSSDenoiser::DenoiseScreenSpaceDiffuseIndirect(FRDGBuilder& GraphBuilder, const FViewInfo& View, FPreviousViewInfo* PreviousViewInfos, const FSceneTextureParameters& SceneTextures, const FDiffuseIndirectInputs& Inputs, const FAmbientOcclusionRayTracingConfig Config) const +{ + return WrappedDenoiser->DenoiseScreenSpaceDiffuseIndirect(GraphBuilder, View, PreviousViewInfos, SceneTextures, Inputs, Config); +} + +FSSDSignalTextures FDLSSDenoiser::DenoiseDiffuseIndirectHarmonic(FRDGBuilder& GraphBuilder, const FViewInfo& View, FPreviousViewInfo* PreviousViewInfos, const FSceneTextureParameters& SceneTextures, const FDiffuseIndirectHarmonic& Inputs, const HybridIndirectLighting::FCommonParameters& CommonDiffuseParameters) const +{ + return WrappedDenoiser->DenoiseDiffuseIndirectHarmonic(GraphBuilder, View, PreviousViewInfos, SceneTextures, Inputs, CommonDiffuseParameters); +} +#else +#error "ENGINE_MAJOR_VERSION must be either 4 or 5" +#endif + +IScreenSpaceDenoiser::FDiffuseIndirectOutputs FDLSSDenoiser::DenoiseSkyLight(FRDGBuilder& GraphBuilder, const FViewInfo& View, FPreviousViewInfo* PreviousViewInfos, const FSceneTextureParameters& SceneTextures, const FDiffuseIndirectInputs& Inputs, const FAmbientOcclusionRayTracingConfig Config) const +{ + return WrappedDenoiser->DenoiseSkyLight(GraphBuilder, View, PreviousViewInfos, SceneTextures, Inputs, Config); +} + +IScreenSpaceDenoiser::FDiffuseIndirectOutputs FDLSSDenoiser::DenoiseReflectedSkyLight(FRDGBuilder& GraphBuilder, const FViewInfo& View, FPreviousViewInfo* PreviousViewInfos, const FSceneTextureParameters& SceneTextures, const FDiffuseIndirectInputs& Inputs, const FAmbientOcclusionRayTracingConfig Config) const +{ + return WrappedDenoiser->DenoiseReflectedSkyLight(GraphBuilder, View, PreviousViewInfos, SceneTextures, Inputs, Config); +} + + +bool FDLSSDenoiser::SupportsScreenSpaceDiffuseIndirectDenoiser(EShaderPlatform Platform) const +{ + return WrappedDenoiser->SupportsScreenSpaceDiffuseIndirectDenoiser(Platform); +} + +const IScreenSpaceDenoiser* FDLSSDenoiser::GetWrappedDenoiser() const +{ + return WrappedDenoiser; +} diff --git a/plugins/DLSS/Source/DLSS/Private/DLSSDenoiser.h b/plugins/DLSS/Source/DLSS/Private/DLSSDenoiser.h new file mode 100644 index 00000000..425883c8 --- /dev/null +++ b/plugins/DLSS/Source/DLSS/Private/DLSSDenoiser.h @@ -0,0 +1,65 @@ +/* +* Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#pragma once + +#include "CoreMinimal.h" +#include "ScreenSpaceDenoise.h" +// for ENGINE_MAJOR_VERSION +#include "Launch/Resources/Version.h" +class FDLSSUpscaler; + +// wrapper for the default denoiser to add TAA after some passes +class DLSS_API FDLSSDenoiser final : public IScreenSpaceDenoiser +{ + +public: + FDLSSDenoiser(const IScreenSpaceDenoiser* InWrappedDenoiser, const FDLSSUpscaler* InUpscaler); + + // Inherited via IScreenSpaceDenoiser + virtual const TCHAR* GetDebugName() const final; + virtual EShadowRequirements GetShadowRequirements(const FViewInfo& View, const FLightSceneInfo& LightSceneInfo, const FShadowRayTracingConfig& RayTracingConfig) const final; + virtual void DenoiseShadowVisibilityMasks(FRDGBuilder& GraphBuilder, const FViewInfo& View, FPreviousViewInfo* PreviousViewInfos, const FSceneTextureParameters& SceneTextures, const TStaticArray& InputParameters, const int32 InputParameterCount, TStaticArray& Outputs) const final; + virtual FPolychromaticPenumbraOutputs DenoisePolychromaticPenumbraHarmonics(FRDGBuilder& GraphBuilder, const FViewInfo& View, FPreviousViewInfo* PreviousViewInfos, const FSceneTextureParameters& SceneTextures, const FPolychromaticPenumbraHarmonics& Inputs) const final; + virtual FReflectionsOutputs DenoiseReflections(FRDGBuilder& GraphBuilder, const FViewInfo& View, FPreviousViewInfo* PreviousViewInfos, const FSceneTextureParameters& SceneTextures, const FReflectionsInputs& Inputs, const FReflectionsRayTracingConfig Config) const final; + virtual FReflectionsOutputs DenoiseWaterReflections(FRDGBuilder& GraphBuilder, const FViewInfo& View, FPreviousViewInfo* PreviousViewInfos, const FSceneTextureParameters& SceneTextures, const FReflectionsInputs& Inputs, const FReflectionsRayTracingConfig Config) const override; + virtual FAmbientOcclusionOutputs DenoiseAmbientOcclusion(FRDGBuilder& GraphBuilder, const FViewInfo& View, FPreviousViewInfo* PreviousViewInfos, const FSceneTextureParameters& SceneTextures, const FAmbientOcclusionInputs& Inputs, const FAmbientOcclusionRayTracingConfig Config) const final; +#if ENGINE_MAJOR_VERSION == 4 + virtual FDiffuseIndirectOutputs DenoiseDiffuseIndirect(FRDGBuilder& GraphBuilder, const FViewInfo& View, FPreviousViewInfo* PreviousViewInfos, const FSceneTextureParameters& SceneTextures, const FDiffuseIndirectInputs& Inputs, const FAmbientOcclusionRayTracingConfig Config) const final; + virtual FDiffuseIndirectHarmonic DenoiseDiffuseIndirectHarmonic(FRDGBuilder& GraphBuilder, const FViewInfo& View, FPreviousViewInfo* PreviousViewInfos, const FSceneTextureParameters& SceneTextures, const FDiffuseIndirectHarmonic& Inputs, const FAmbientOcclusionRayTracingConfig Config) const final; + virtual FDiffuseIndirectOutputs DenoiseScreenSpaceDiffuseIndirect(FRDGBuilder& GraphBuilder, const FViewInfo& View, FPreviousViewInfo* PreviousViewInfos, const FSceneTextureParameters& SceneTextures, const FDiffuseIndirectInputs& Inputs, const FAmbientOcclusionRayTracingConfig Config) const final; +#elif ENGINE_MAJOR_VERSION == 5 + virtual FSSDSignalTextures DenoiseDiffuseIndirect(FRDGBuilder& GraphBuilder, const FViewInfo& View, FPreviousViewInfo* PreviousViewInfos, const FSceneTextureParameters& SceneTextures, const FDiffuseIndirectInputs& Inputs, const FAmbientOcclusionRayTracingConfig Config) const final; + virtual FSSDSignalTextures DenoiseScreenSpaceDiffuseIndirect(FRDGBuilder& GraphBuilder, const FViewInfo& View, FPreviousViewInfo* PreviousViewInfos, const FSceneTextureParameters& SceneTextures, const FDiffuseIndirectInputs& Inputs, const FAmbientOcclusionRayTracingConfig Config) const final; + virtual FSSDSignalTextures DenoiseDiffuseIndirectHarmonic(FRDGBuilder& GraphBuilder,const FViewInfo& View,FPreviousViewInfo* PreviousViewInfos, const FSceneTextureParameters& SceneTextures, const FDiffuseIndirectHarmonic& Inputs, const HybridIndirectLighting::FCommonParameters& CommonDiffuseParameters) const final; +#else +#error "ENGINE_MAJOR_VERSION must be either 4 or 5" +#endif + virtual FDiffuseIndirectOutputs DenoiseSkyLight(FRDGBuilder& GraphBuilder, const FViewInfo& View, FPreviousViewInfo* PreviousViewInfos, const FSceneTextureParameters& SceneTextures, const FDiffuseIndirectInputs& Inputs, const FAmbientOcclusionRayTracingConfig Config) const final; + virtual FDiffuseIndirectOutputs DenoiseReflectedSkyLight(FRDGBuilder& GraphBuilder, const FViewInfo& View, FPreviousViewInfo* PreviousViewInfos, const FSceneTextureParameters& SceneTextures, const FDiffuseIndirectInputs& Inputs, const FAmbientOcclusionRayTracingConfig Config) const final; + + + virtual bool SupportsScreenSpaceDiffuseIndirectDenoiser(EShaderPlatform Platform) const final; + const IScreenSpaceDenoiser* GetWrappedDenoiser() const; +private: + + const IScreenSpaceDenoiser* WrappedDenoiser; + const FDLSSUpscaler* Upscaler; +}; \ No newline at end of file diff --git a/plugins/DLSS/Source/DLSS/Private/DLSSSettings.cpp b/plugins/DLSS/Source/DLSS/Private/DLSSSettings.cpp new file mode 100644 index 00000000..97a360e7 --- /dev/null +++ b/plugins/DLSS/Source/DLSS/Private/DLSSSettings.cpp @@ -0,0 +1,22 @@ +/* +* Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#include "DLSSSettings.h" +#define LOCTEXT_NAMESPACE "FDLSSModule" diff --git a/plugins/DLSS/Source/DLSS/Private/DLSSUpscaler.cpp b/plugins/DLSS/Source/DLSS/Private/DLSSUpscaler.cpp new file mode 100644 index 00000000..77879654 --- /dev/null +++ b/plugins/DLSS/Source/DLSS/Private/DLSSUpscaler.cpp @@ -0,0 +1,790 @@ +/* +* Copyright (c) 2020 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +* +* NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +* property and proprietary rights in and to this material, related +* documentation and any modifications thereto. Any use, reproduction, +* disclosure or distribution of this material and related documentation +* without an express license agreement from NVIDIA CORPORATION or +* its affiliates is strictly prohibited. +*/ + +#include "DLSSUpscaler.h" + + +#include "DLSSUpscalerPrivate.h" +#include "DLSSUpscalerHistory.h" +#include "DLSSSettings.h" + +#include "VelocityCombinePass.h" + +#include "PostProcess/SceneRenderTargets.h" +#include "PostProcess/PostProcessing.h" +#include "SceneTextureParameters.h" +#include "ScreenPass.h" + +#include "RayTracing/RaytracingOptions.h" + +#include "LegacyScreenPercentageDriver.h" + + +#define LOCTEXT_NAMESPACE "FDLSSModule" + +#ifndef SUPPORTS_POSTPROCESSING_SCREEN_PERCENTAGE +#define SUPPORTS_POSTPROCESSING_SCREEN_PERCENTAGE 1 +#endif + +static TAutoConsoleVariable CVarNGXDLSSEnable( + TEXT("r.NGX.DLSS.Enable"), 1, + TEXT("Enable/Disable DLSS entirely."), + ECVF_RenderThreadSafe); + +static TAutoConsoleVariable CVarNGXDLAAEnable( + TEXT("r.NGX.DLAA.Enable"), false, + TEXT("Enable/Disable DLAA"), + ECVF_RenderThreadSafe); + +static TAutoConsoleVariable CVarNGXDLSSAutomationTesting( + TEXT("r.NGX.DLSS.AutomationTesting"), 0, + TEXT("Whether the NGX library should be loaded when GIsAutomationTesting is true.(default is false)\n") + TEXT("Must be set to true before startup. This can be enabled for cases where running automation testing with DLSS desired"), + ECVF_ReadOnly); + +static TAutoConsoleVariable CVarNGXDLSSPerfQualitySetting( + TEXT("r.NGX.DLSS.Quality"), + -1, + TEXT("DLSS Performance/Quality setting. Not all modes might be supported at runtime, in this case Balanced mode is used as a fallback\n") + TEXT(" -2: Ultra Performance\n") + TEXT(" -1: Performance (default)\n") + TEXT(" 0: Balanced\n") + TEXT(" 1: Quality\n") + TEXT(" 2: Ultra Quality\n"), + ECVF_RenderThreadSafe); + +static TAutoConsoleVariable CVarNGXDLSSAutoQualitySetting( + TEXT("r.NGX.DLSS.Quality.Auto"), 0, + TEXT("Enable/Disable DLSS automatically selecting the DLSS quality mode based on the render resolution"), + ECVF_RenderThreadSafe); + +static TAutoConsoleVariable CVarNGXDLSSSharpness( + TEXT("r.NGX.DLSS.Sharpness"), + 0.0f, + TEXT("-1.0 to 1.0: Softening/sharpening to apply to the DLSS pass. Negative values soften the image, positive values sharpen. (default: 0.0f)"), + ECVF_RenderThreadSafe); + +static TAutoConsoleVariable CVarNGXDLSSDilateMotionVectors( + TEXT("r.NGX.DLSS.DilateMotionVectors"), + 1, + TEXT(" 0: pass low resolution motion vectors into DLSS\n") + TEXT(" 1: pass dilated high resolution motion vectors into DLSS. This can help with improving image quality of thin details. (default)"), + ECVF_RenderThreadSafe); + +static TAutoConsoleVariable CVarNGXDLSSAutoExposure( + TEXT("r.NGX.DLSS.AutoExposure"), 1, + TEXT("0: Use the engine-computed exposure value for input images to DLSS - in some cases this may reduce artifacts\n") + TEXT("1: Enable DLSS internal auto-exposure instead of the application provided one (default)\n"), + ECVF_RenderThreadSafe); + +static TAutoConsoleVariable CVarNGXDLSSReleaseMemoryOnDelete( + TEXT("r.NGX.DLSS.ReleaseMemoryOnDelete"), + 1, + TEXT("Enabling/disable releasing DLSS related memory on the NGX side when DLSS features get released.(default=1)"), + ECVF_RenderThreadSafe); + + +static TAutoConsoleVariable CVarNGXDLSSFeatureCreationNode( + TEXT("r.NGX.DLSS.FeatureCreationNode"), -1, + TEXT("Determines which GPU the DLSS feature is getting created on\n") + TEXT("-1: Create on the GPU the command list is getting executed on (default)\n") + TEXT(" 0: Create on GPU node 0 \n") + TEXT(" 1: Create on GPU node 1 \n"), + ECVF_RenderThreadSafe); + + +static TAutoConsoleVariable CVarNGXDLSSFeatureVisibilityMask( + TEXT("r.NGX.DLSS.FeatureVisibilityMask"), -1, + TEXT("Determines which GPU the DLSS feature is visible to\n") + TEXT("-1: Visible to the GPU the command list is getting executed on (default)\n") + TEXT(" 1: visible to GPU node 0 \n") + TEXT(" 2: visible to GPU node 1 \n") + TEXT(" 3: visible to GPU node 0 and GPU node 1\n"), + ECVF_RenderThreadSafe); + +DECLARE_GPU_STAT(DLSS) + +BEGIN_SHADER_PARAMETER_STRUCT(FDLSSShaderParameters, ) + +// Input images +SHADER_PARAMETER_RDG_TEXTURE(Texture2D, SceneColorInput) +SHADER_PARAMETER_RDG_TEXTURE(Texture2D, SceneDepthInput) +SHADER_PARAMETER_RDG_TEXTURE(Texture2D, EyeAdaptation) +SHADER_PARAMETER_RDG_TEXTURE(Texture2D, SceneVelocityInput) + + +// Output images +RDG_TEXTURE_ACCESS(SceneColorOutput, ERHIAccess::UAVCompute) + +END_SHADER_PARAMETER_STRUCT() + + +FIntPoint FDLSSPassParameters::GetOutputExtent() const +{ + check(Validate()); + check(SceneColorInput); + + FIntPoint InputExtent = SceneColorInput->Desc.Extent; + + FIntPoint QuantizedPrimaryUpscaleViewSize; + QuantizeSceneBufferSize(OutputViewRect.Size(), QuantizedPrimaryUpscaleViewSize); + + return FIntPoint( + FMath::Max(InputExtent.X, QuantizedPrimaryUpscaleViewSize.X), + FMath::Max(InputExtent.Y, QuantizedPrimaryUpscaleViewSize.Y)); +} + +bool FDLSSPassParameters::Validate() const +{ + checkf(OutputViewRect.Min == FIntPoint::ZeroValue,TEXT("The DLSS OutputViewRect %dx%d must be non-zero"), OutputViewRect.Min.X, OutputViewRect.Min.Y); + return true; +} + +const TCHAR* FDLSSUpscaler::GetDebugName() const +{ + return TEXT("FDLSSUpscaler"); +} + + +static NVSDK_NGX_PerfQuality_Value ToNGXQuality(EDLSSQualityMode Quality) +{ + static_assert(int32(EDLSSQualityMode::NumValues) == 5, "dear DLSS plugin NVIDIA developer, please update this code to handle the new EDLSSQualityMode enum values"); + switch (Quality) + { + case EDLSSQualityMode::UltraPerformance: + return NVSDK_NGX_PerfQuality_Value_UltraPerformance; + + default: + checkf(false, TEXT("ToNGXQuality should not be called with an out of range EDLSSQualityMode from the higher level code")); + case EDLSSQualityMode::Performance: + return NVSDK_NGX_PerfQuality_Value_MaxPerf; + + case EDLSSQualityMode::Balanced: + return NVSDK_NGX_PerfQuality_Value_Balanced; + + case EDLSSQualityMode::Quality: + return NVSDK_NGX_PerfQuality_Value_MaxQuality; + + case EDLSSQualityMode::UltraQuality: + return NVSDK_NGX_PerfQuality_Value_UltraQuality; + } +} + +NGXRHI* FDLSSUpscaler::NGXRHIExtensions; +TStaticArray , uint32(EDLSSQualityMode::NumValues)> FDLSSUpscaler::DLSSUpscalerInstancesPerViewFamily; +float FDLSSUpscaler::MinResolutionFraction = TNumericLimits ::Max(); +float FDLSSUpscaler::MaxResolutionFraction = TNumericLimits ::Min(); + + +uint32 FDLSSUpscaler::NumRuntimeQualityModes = 0; +TArray FDLSSUpscaler::ResolutionSettings; + + +FDLSSUpscaler* FDLSSUpscaler::GetUpscalerInstanceForViewFamily(const FDLSSUpscaler* InUpscaler, EDLSSQualityMode InQualityMode) +{ + uint32 ArrayIndex = (int32)ToNGXQuality(InQualityMode); + if (!DLSSUpscalerInstancesPerViewFamily[ArrayIndex]) + { + DLSSUpscalerInstancesPerViewFamily[ArrayIndex] = MakeShared(InUpscaler, InQualityMode); + + } + return DLSSUpscalerInstancesPerViewFamily[ArrayIndex].Get(); +} + +bool FDLSSUpscaler::IsValidUpscalerInstance(const ITemporalUpscaler* InUpscaler) +{ + // DLSSUpscalerInstancesPerViewFamily gets lazily initialized, but we don't want to accidentally treat nullptr as a valid + // upscaler instance, when we want to check (e.g. in the denoiser) whether DLSS is actually active for the viewfamily + if (InUpscaler == nullptr) + { + return false; + } + + for (auto UpscalerInstance : DLSSUpscalerInstancesPerViewFamily) + { + if (UpscalerInstance.Get() == InUpscaler) + { + return true; + } + } + return false; +} + +bool FDLSSUpscaler::IsAutoQualityMode() +{ + return CVarNGXDLSSAutoQualitySetting.GetValueOnAnyThread(); +} + +bool FDLSSUpscaler::IsDLAAMode() +{ + return CVarNGXDLAAEnable.GetValueOnAnyThread(); +} + +void FDLSSUpscaler::SetAutoQualityMode(bool bAutoQualityMode) +{ + check(IsInGameThread()); + CVarNGXDLSSAutoQualitySetting->Set(bAutoQualityMode, ECVF_SetByCommandline); +} + +// make copy & assign quality mode +FDLSSUpscaler::FDLSSUpscaler(const FDLSSUpscaler* InUpscaler, EDLSSQualityMode InQualityMode) + : FDLSSUpscaler(*InUpscaler) +{ + DLSSQualityMode = InQualityMode; + check(NGXRHIExtensions); +} + + +FDLSSUpscaler::FDLSSUpscaler(NGXRHI* InNGXRHIExtensions) + +{ + UE_LOG(LogDLSS, Log, TEXT("%s Enter"), ANSI_TO_TCHAR(__FUNCTION__)); + + + checkf(!NGXRHIExtensions, TEXT("static member NGXRHIExtensions should only be assigned once by this ctor when called during module startup") ); + NGXRHIExtensions = InNGXRHIExtensions; + + ResolutionSettings.Init(FDLSSOptimalSettings(), int32(EDLSSQualityMode::NumValues)); + + static_assert(int32(EDLSSQualityMode::NumValues) == 5, "dear DLSS plugin NVIDIA developer, please update this code to handle the new EDLSSQualityMode enum values"); + for (auto QualityMode : { EDLSSQualityMode::UltraPerformance, EDLSSQualityMode::Performance , EDLSSQualityMode::Balanced, EDLSSQualityMode::Quality, EDLSSQualityMode::UltraQuality }) + { + check(ToNGXQuality(QualityMode) < ResolutionSettings.Num()); + check(ToNGXQuality(QualityMode) >= 0); + + FDLSSOptimalSettings OptimalSettings = NGXRHIExtensions->GetDLSSOptimalSettings(ToNGXQuality(QualityMode)); + + ResolutionSettings[ToNGXQuality(QualityMode)] = OptimalSettings; + + // we only consider non-fixed resolutions for the overall min / max resolution fraction + if (OptimalSettings.bIsSupported && !OptimalSettings.IsFixedResolution()) + { + // We use OptimalSettings.OptimalResolutionFraction to avoid getting to "floating point close" to OptimalSettings.{MinMax}ResolutionFraction) + MinResolutionFraction = FMath::Min(MinResolutionFraction, OptimalSettings.OptimalResolutionFraction); + MaxResolutionFraction = FMath::Max(MaxResolutionFraction, OptimalSettings.OptimalResolutionFraction); + ++NumRuntimeQualityModes; + } + + UE_LOG(LogDLSS, Log, TEXT("QualityMode %d: bSupported = %u, ResolutionFraction = %.4f. MinResolutionFraction=%.4f, MaxResolutionFraction %.4f"), + QualityMode, OptimalSettings.bIsSupported, OptimalSettings.OptimalResolutionFraction, OptimalSettings.MinResolutionFraction, OptimalSettings.MaxResolutionFraction); + } + + // the DLSS module will report DLSS as not supported if there are no supported quality modes at runtime + UE_LOG(LogDLSS, Log, TEXT("NumRuntimeQualityModes=%u, MinResolutionFraction=%.4f, MaxResolutionFraction=%.4f"), NumRuntimeQualityModes, MinResolutionFraction, MaxResolutionFraction); + + // Higher levels of the code (e.g. UI) should check whether each mode is actually supported + // But for now verify early that the DLSS 2.0 modes are supported. Those checks could be removed in the future + check(IsQualityModeSupported(EDLSSQualityMode::Performance)); + check(IsQualityModeSupported(EDLSSQualityMode::Balanced)); + check(IsQualityModeSupported(EDLSSQualityMode::Quality)); + + + UE_LOG(LogDLSS, Log, TEXT("%s Leave"), ANSI_TO_TCHAR(__FUNCTION__)); +} + +FDLSSUpscaler::~FDLSSUpscaler() +{ + UE_LOG(LogDLSS, Log, TEXT("%s Enter"), ANSI_TO_TCHAR(__FUNCTION__)); + + UE_LOG(LogDLSS, Log, TEXT("%s Leave"), ANSI_TO_TCHAR(__FUNCTION__)); +} + +// this gets explicitly called during module shutdown +void FDLSSUpscaler::ReleaseStaticResources() +{ + UE_LOG(LogDLSS, Log, TEXT("%s Enter"), ANSI_TO_TCHAR(__FUNCTION__)); + ResolutionSettings.Empty(); + for (auto& UpscalerInstance : DLSSUpscalerInstancesPerViewFamily) + { + UpscalerInstance.Reset(); + } + + UE_LOG(LogDLSS, Log, TEXT("%s Leave"), ANSI_TO_TCHAR(__FUNCTION__)); +} + +#if DLSS_ENGINE_ADDPASSES_RETURN_THROUGH_PARAMS +void FDLSSUpscaler::AddPasses( +#else +ITemporalUpscaler::FOutputs FDLSSUpscaler::AddPasses( +#endif + FRDGBuilder& GraphBuilder, + const FViewInfo& View, + const FPassInputs& PassInputs +#if DLSS_ENGINE_ADDPASSES_RETURN_THROUGH_PARAMS + , FRDGTextureRef* OutSceneColorTexture + , FIntRect* OutSceneColorViewRect + , FRDGTextureRef* OutSceneColorHalfResTexture + , FIntRect* OutSceneColorHalfResViewRect +#endif +) const +{ +#if ENGINE_MAJOR_VERSION < 5 + // For TAAU, this can happen with screen percentages larger than 100%, so not something that DLSS viewports are setup with + checkf(!PassInputs.bAllowDownsampleSceneColor,TEXT("The DLSS plugin does not support downsampling the scenecolor. Please set r.TemporalAA.AllowDownsampling=0")); +#endif + checkf(View.PrimaryScreenPercentageMethod == EPrimaryScreenPercentageMethod::TemporalUpscale, TEXT("DLSS requires TemporalUpscale. If you hit this assert, please set r.TemporalAA.Upscale=1")); + + + + + const FTemporalAAHistory& InputHistory = View.PrevViewInfo.TemporalAAHistory; + const TRefCountPtr InputCustomHistory = View.PrevViewInfo.CustomTemporalAAHistory; + + FTemporalAAHistory* OutputHistory = View.ViewState ? &(View.ViewState->PrevFrameViewInfo.TemporalAAHistory) : nullptr; + TRefCountPtr < ICustomTemporalAAHistory >* OutputCustomHistory = View.ViewState ? &(View.ViewState->PrevFrameViewInfo.CustomTemporalAAHistory) : nullptr; + + + FDLSSPassParameters DLSSParameters(View); + const FIntRect SecondaryViewRect = DLSSParameters.OutputViewRect; +#if !DLSS_ENGINE_ADDPASSES_RETURN_THROUGH_PARAMS + ITemporalUpscaler::FOutputs Outputs; +#endif + { + RDG_GPU_STAT_SCOPE(GraphBuilder, DLSS); + RDG_EVENT_SCOPE(GraphBuilder, "DLSS"); + + const bool bDilateMotionVectors = CVarNGXDLSSDilateMotionVectors.GetValueOnRenderThread() != 0; + + FRDGTextureRef CombinedVelocityTexture = AddVelocityCombinePass(GraphBuilder, View, PassInputs.SceneDepthTexture, PassInputs.SceneVelocityTexture, bDilateMotionVectors); + + DLSSParameters.SceneColorInput = PassInputs.SceneColorTexture; + DLSSParameters.SceneVelocityInput = CombinedVelocityTexture; + DLSSParameters.SceneDepthInput = PassInputs.SceneDepthTexture; + DLSSParameters.bHighResolutionMotionVectors = bDilateMotionVectors; + const FDLSSOutputs DLSSOutputs = AddDLSSPass( + GraphBuilder, + View, + DLSSParameters, + InputHistory, + OutputHistory, + InputCustomHistory, + OutputCustomHistory + ); + +#if DLSS_ENGINE_ADDPASSES_RETURN_THROUGH_PARAMS + FRDGTextureRef SceneColorTexture = DLSSOutputs.SceneColor; + + *OutSceneColorTexture = SceneColorTexture; + *OutSceneColorViewRect = SecondaryViewRect; + + *OutSceneColorHalfResTexture = nullptr; + *OutSceneColorHalfResViewRect = FIntRect(FIntPoint::ZeroValue, FIntPoint::ZeroValue); +#else + Outputs.FullRes.Texture = DLSSOutputs.SceneColor; + Outputs.FullRes.ViewRect = SecondaryViewRect; +#endif + } +#if !DLSS_ENGINE_ADDPASSES_RETURN_THROUGH_PARAMS + return Outputs; +#endif +} + +FDLSSOutputs FDLSSUpscaler::AddDLSSPass( + FRDGBuilder& GraphBuilder, + const FViewInfo& View, + const FDLSSPassParameters& Inputs, + const FTemporalAAHistory& InputHistory, + FTemporalAAHistory* OutputHistory, + const TRefCountPtr InputCustomHistoryInterface, + TRefCountPtr* OutputCustomHistoryInterface +) const +{ + check(IsValidUpscalerInstance(this)); + check(IsDLSSActive()); + const FDLSSUpscalerHistory* InputCustomHistory = static_cast(InputCustomHistoryInterface.GetReference()); + + const bool bCameraCut = !InputHistory.IsValid() || View.bCameraCut || !OutputHistory; + const FIntPoint OutputExtent = Inputs.GetOutputExtent(); + + const FIntRect SrcRect = Inputs.InputViewRect; + const FIntRect DestRect = Inputs.OutputViewRect; + + const float ScaleX = float(SrcRect.Width()) / float(DestRect.Width()); + const float ScaleY = float(SrcRect.Height()) / float(DestRect.Height()); + + // FDLSSUpscaler::SetupMainGameViewFamily or FDLSSUpscalerEditor::SetupEditorViewFamily + // set DLSSQualityMode by setting an FDLSSUpscaler on the ViewFamily (from the pool in DLSSUpscalerInstancesPerViewFamily) + + checkf(DLSSQualityMode != EDLSSQualityMode::NumValues, TEXT("Invalid Quality mode, not initialized")); + checkf(IsQualityModeSupported(DLSSQualityMode), TEXT("%u is not a valid Quality mode"), DLSSQualityMode); + + // This assert can accidentally hit with small viewrect dimensions (e.g. when resizing an editor view) due to floating point rounding & quantization issues + // e.g. with 33% screen percentage at 1000 DestRect dimension we get 333/1000 = 0.33 but at 10 DestRect dimension we get 3/10 0.3, thus the assert hits + + checkf(DestRect.Width() < 100 || GetMinResolutionFractionForQuality(DLSSQualityMode) - 0.01f <= ScaleX && ScaleX <= GetMaxResolutionFractionForQuality(DLSSQualityMode) + 0.01f, TEXT("The current resolution fraction %f is out of the supported DLSS range [%f ... %f] for quality mode %d."), ScaleX, GetMinResolutionFractionForQuality(DLSSQualityMode), GetMaxResolutionFractionForQuality(DLSSQualityMode), DLSSQualityMode); + checkf(DestRect.Height() < 100 || GetMinResolutionFractionForQuality(DLSSQualityMode) - 0.01f <= ScaleY && ScaleY <= GetMaxResolutionFractionForQuality(DLSSQualityMode) + 0.01f, TEXT("The current resolution fraction %f is out of the supported DLSS range [%f ... %f] for quality mode %d."), ScaleY, GetMinResolutionFractionForQuality(DLSSQualityMode), GetMaxResolutionFractionForQuality(DLSSQualityMode), DLSSQualityMode); + + const TCHAR* PassName = TEXT("MainUpsampling"); + + // Create outputs + FDLSSOutputs Outputs; + { + FRDGTextureDesc SceneColorDesc = FRDGTextureDesc::Create2D( + OutputExtent, + PF_FloatRGBA, + FClearValueBinding::Black, + TexCreate_ShaderResource | TexCreate_UAV); + + const TCHAR* OutputName = TEXT("DLSSOutputSceneColor"); + + Outputs.SceneColor = GraphBuilder.CreateTexture( + SceneColorDesc, + OutputName); + } + + FDLSSStateRef DLSSState = (InputCustomHistory && InputCustomHistory->DLSSState) ? InputCustomHistory->DLSSState : MakeShared(); + { + FDLSSShaderParameters* PassParameters = GraphBuilder.AllocParameters(); + + // Set up common shader parameters + const FIntPoint InputExtent = Inputs.SceneColorInput->Desc.Extent; + const FIntRect InputViewRect = Inputs.InputViewRect; + const FIntRect OutputViewRect = Inputs.OutputViewRect; + + // Input buffer shader parameters + { + PassParameters->SceneColorInput = Inputs.SceneColorInput; + PassParameters->SceneDepthInput = Inputs.SceneDepthInput; + PassParameters->SceneVelocityInput = Inputs.SceneVelocityInput; + PassParameters->EyeAdaptation = GetEyeAdaptationTexture(GraphBuilder, View); + } + + // Outputs + { + PassParameters->SceneColorOutput = Outputs.SceneColor; + } + + const FVector2D JitterOffset = View.TemporalJitterPixels; +#if ENGINE_MAJOR_VERSION < 5 + const float DeltaWorldTime = View.Family->DeltaWorldTime; +#else + const float DeltaWorldTime = View.Family->Time.GetDeltaWorldTimeSeconds(); +#endif + + const float PreExposure = View.PreExposure; + const bool bUseAutoExposure = CVarNGXDLSSAutoExposure.GetValueOnRenderThread() != 0; + + const bool bReleaseMemoryOnDelete = CVarNGXDLSSReleaseMemoryOnDelete.GetValueOnRenderThread() != 0; + + const float Sharpness = FMath::Clamp(CVarNGXDLSSSharpness.GetValueOnRenderThread(), -1.0f, 1.0f); + NGXRHI* LocalNGXRHIExtensions = this->NGXRHIExtensions; + const int32 NGXPerfQuality = ToNGXQuality(DLSSQualityMode); + GraphBuilder.AddPass( + RDG_EVENT_NAME("DLSS %s%s %dx%d -> %dx%d", + PassName, + Sharpness != 0.0f ? TEXT(" Sharpen") : TEXT(""), + SrcRect.Width(), SrcRect.Height(), + DestRect.Width(), DestRect.Height()), + PassParameters, + ERDGPassFlags::Compute | ERDGPassFlags::Raster | ERDGPassFlags::SkipRenderPass, + [LocalNGXRHIExtensions, PassParameters, Inputs, bCameraCut, JitterOffset, DeltaWorldTime, PreExposure, Sharpness, NGXPerfQuality, DLSSState, bUseAutoExposure, bReleaseMemoryOnDelete](FRHICommandListImmediate& RHICmdList) + { + FRHIDLSSArguments DLSSArguments; + FMemory::Memzero(&DLSSArguments, sizeof(DLSSArguments)); + + // input parameters + DLSSArguments.SrcRect = Inputs.InputViewRect; + DLSSArguments.DestRect = Inputs.OutputViewRect; + + DLSSArguments.Sharpness = Sharpness; + DLSSArguments.bReset = bCameraCut; + + +#if ENGINE_MAJOR_VERSION < 5 + DLSSArguments.JitterOffset = JitterOffset; + DLSSArguments.MotionVectorScale = FVector2D(1.0f, 1.0f); +#else + DLSSArguments.JitterOffset = FVector2f(JitterOffset); // LWC_TODO: Precision loss + DLSSArguments.MotionVectorScale = FVector2f::UnitVector; + +#endif ENGINE_MAJOR_VERSION + + DLSSArguments.bHighResolutionMotionVectors = Inputs.bHighResolutionMotionVectors; + DLSSArguments.DeltaTime = DeltaWorldTime; + DLSSArguments.bReleaseMemoryOnDelete = bReleaseMemoryOnDelete; + + DLSSArguments.PerfQuality = NGXPerfQuality; + + check(PassParameters->SceneColorInput); + PassParameters->SceneColorInput->MarkResourceAsUsed(); + DLSSArguments.InputColor = PassParameters->SceneColorInput->GetRHI(); + + + check(PassParameters->SceneVelocityInput); + PassParameters->SceneVelocityInput->MarkResourceAsUsed(); + DLSSArguments.InputMotionVectors = PassParameters->SceneVelocityInput->GetRHI(); + + check(PassParameters->SceneDepthInput); + PassParameters->SceneDepthInput->MarkResourceAsUsed(); + DLSSArguments.InputDepth = PassParameters->SceneDepthInput->GetRHI(); + + check(PassParameters->EyeAdaptation); + PassParameters->EyeAdaptation->MarkResourceAsUsed(); + DLSSArguments.InputExposure = PassParameters->EyeAdaptation->GetRHI(); + DLSSArguments.PreExposure = PreExposure; + DLSSArguments.bUseAutoExposure = bUseAutoExposure; + + // output images + check(PassParameters->SceneColorOutput); + PassParameters->SceneColorOutput->MarkResourceAsUsed(); + DLSSArguments.OutputColor = PassParameters->SceneColorOutput->GetRHI(); + + RHICmdList.TransitionResource(ERHIAccess::UAVMask, DLSSArguments.OutputColor); + RHICmdList.EnqueueLambda( + [LocalNGXRHIExtensions, DLSSArguments, DLSSState](FRHICommandListImmediate& Cmd) mutable + { + const uint32 FeatureCreationNode = CVarNGXDLSSFeatureCreationNode.GetValueOnRenderThread(); + const uint32 FeatureVisibilityMask = CVarNGXDLSSFeatureVisibilityMask.GetValueOnRenderThread(); + + DLSSArguments.GPUNode = FeatureCreationNode == -1 ? Cmd.GetGPUMask().ToIndex() : FMath::Clamp(FeatureCreationNode, 0u, GNumExplicitGPUsForRendering - 1); + DLSSArguments.GPUVisibility = FeatureVisibilityMask == -1 ? Cmd.GetGPUMask().GetNative() : (Cmd.GetGPUMask().All().GetNative() & FeatureVisibilityMask) ; + + LocalNGXRHIExtensions->ExecuteDLSS(Cmd, DLSSArguments, DLSSState); + }); + }); + } + + if (!View.bStatePrevViewInfoIsReadOnly && OutputHistory) + { + OutputHistory->SafeRelease(); + + GraphBuilder.QueueTextureExtraction(Outputs.SceneColor, &OutputHistory->RT[0]); + + OutputHistory->ViewportRect = DestRect; + OutputHistory->ReferenceBufferSize = OutputExtent; + } + + + if (!View.bStatePrevViewInfoIsReadOnly && OutputCustomHistoryInterface) + { + if (!OutputCustomHistoryInterface->GetReference()) + { + (*OutputCustomHistoryInterface) = new FDLSSUpscalerHistory(DLSSState); + } + } + return Outputs; +} + +void FDLSSUpscaler::Tick(FRHICommandListImmediate& RHICmdList) +{ + check(NGXRHIExtensions); + check(IsInRenderingThread()); + // Pass it over to the RHI thread which handles the lifetime of the NGX DLSS resources + RHICmdList.EnqueueLambda( + [this](FRHICommandListImmediate& Cmd) + { + NGXRHIExtensions->TickPoolElements(); + }); +} + +bool FDLSSUpscaler::IsQualityModeSupported(EDLSSQualityMode InQualityMode) const +{ + return ResolutionSettings[ToNGXQuality(InQualityMode)].bIsSupported; +} + +bool FDLSSUpscaler::IsDLSSActive() const +{ + static const auto CVarTemporalAAUpscaler = IConsoleManager::Get().FindConsoleVariable(TEXT("r.TemporalAA.Upscaler")); + const bool bDLSSActive = +#if DLSS_ENGINE_HAS_GTEMPORALUPSCALER + ((GTemporalUpscaler == this) || IsValidUpscalerInstance(this)) && +#else + ((GCustomStaticScreenPercentage == this) || IsValidUpscalerInstance(this)) && +#endif + CVarTemporalAAUpscaler && (CVarTemporalAAUpscaler->GetInt() != 0) && + ((CVarNGXDLSSEnable.GetValueOnAnyThread() != 0) || CVarNGXDLAAEnable.GetValueOnAnyThread()); + return bDLSSActive; +} + + +void FDLSSUpscaler::SetupMainGameViewFamily(FSceneViewFamily& ViewFamily) +{ + const bool bDLSSActiveWithAutomation = !GIsAutomationTesting || (GIsAutomationTesting && (CVarNGXDLSSAutomationTesting.GetValueOnAnyThread() != 0)); + + if (IsDLSSActive() && bDLSSActiveWithAutomation) + { +#if DLSS_ENGINE_HAS_GTEMPORALUPSCALER + checkf(GTemporalUpscaler == this, TEXT("GTemporalUpscaler is not set to a DLSS upscaler . Please check that only one upscaling plugin is active.")); +#endif + checkf(GCustomStaticScreenPercentage == this, TEXT("GCustomStaticScreenPercentage is not set to a DLSS upscaler. Please check that only one upscaling plugin is active.")); + + if (!GIsEditor || (GIsEditor && GIsPlayInEditorWorld && EnableDLSSInPlayInEditorViewports())) + { + bool bIsDLAAMode = IsDLAAMode(); + EDLSSQualityMode DLSSQuality; + if (bIsDLAAMode) + { + DLSSQuality = EDLSSQualityMode::Quality; + } + else if (IsAutoQualityMode()) + { + TOptional MaybeDLSSQuality = GetAutoQualityModeFromViewFamily(ViewFamily); + if (!MaybeDLSSQuality.IsSet()) + { + return; + } + else + { + DLSSQuality = MaybeDLSSQuality.GetValue(); + } + } + else + { + DLSSQuality = GetSupportedQualityModeFromCVarValue(CVarNGXDLSSPerfQualitySetting.GetValueOnGameThread()); + } + + ViewFamily.SetTemporalUpscalerInterface(GetUpscalerInstanceForViewFamily(this, DLSSQuality)); + + if (ViewFamily.EngineShowFlags.ScreenPercentage && !ViewFamily.GetScreenPercentageInterface()) + { + // DLSS uses recommended resolution fraction, DLAA forces a 1.0 scale + float ResolutionFraction = 1.0f; + if (!bIsDLAAMode) + { + ResolutionFraction = GetOptimalResolutionFractionForQuality(DLSSQuality); + } + ViewFamily.SetScreenPercentageInterface(new FLegacyScreenPercentageDriver( + ViewFamily, ResolutionFraction +#if SUPPORTS_POSTPROCESSING_SCREEN_PERCENTAGE + /* AllowPostProcessSettingsScreenPercentage = */ , false +#endif + + )); + } + } + } +} + +#if DLSS_ENGINE_SUPPORTS_CSSPD +void FDLSSUpscaler::SetupViewFamily(FSceneViewFamily& ViewFamily, TSharedPtr InScreenPercentageDataInterface) +{ + check(InScreenPercentageDataInterface.IsValid()); + TSharedPtr ScreenPercentageData = StaticCastSharedPtr(InScreenPercentageDataInterface); + + EDLSSQualityMode Quality = static_cast(ScreenPercentageData->QualitySetting); + const bool bIsDLAAMode = ScreenPercentageData->bDLAAEnabled; + if (bIsDLAAMode) + { + Quality = EDLSSQualityMode::Quality; + } + if (!IsQualityModeSupported(Quality)) + { + UE_LOG(LogDLSS, Warning, TEXT("DLSS Quality mode is not supported %d"), Quality); + return; + } + const bool bDLSSActiveWithAutomation = !GIsAutomationTesting || (GIsAutomationTesting && (CVarNGXDLSSAutomationTesting.GetValueOnAnyThread() != 0)); + if (IsDLSSActive() && bDLSSActiveWithAutomation) + { +#if DLSS_ENGINE_HAS_GTEMPORALUPSCALER + checkf(GTemporalUpscaler == this, TEXT("GTemporalUpscaler is not set to a DLSS upscaler . Please check that only one upscaling plugin is active.")); +#endif + checkf(GCustomStaticScreenPercentage == this, TEXT("GCustomStaticScreenPercentage is not set to a DLSS upscaler. Please check that only one upscaling plugin is active.")); + + ViewFamily.SetTemporalUpscalerInterface(GetUpscalerInstanceForViewFamily(this, Quality)); + + if (ViewFamily.EngineShowFlags.ScreenPercentage && !ViewFamily.GetScreenPercentageInterface()) + { + const float ResolutionFraction = bIsDLAAMode ? 1.0f : GetOptimalResolutionFractionForQuality(Quality); + ViewFamily.SetScreenPercentageInterface(new FLegacyScreenPercentageDriver( + ViewFamily, ResolutionFraction + #if SUPPORTS_POSTPROCESSING_SCREEN_PERCENTAGE + /* AllowPostProcessSettingsScreenPercentage = */ , false + #endif + )); + } + } +} +#endif + +TOptional FDLSSUpscaler::GetAutoQualityModeFromViewFamily(const FSceneViewFamily& ViewFamily) const +{ + if (ensure(ViewFamily.RenderTarget != nullptr)) + { + FIntPoint ViewSize = ViewFamily.RenderTarget->GetSizeXY(); + int32 Pixels = ViewSize.X * ViewSize.Y; + return GetAutoQualityModeFromPixels(Pixels); + } + + return TOptional {}; +} + +TOptional FDLSSUpscaler::GetAutoQualityModeFromPixels(int PixelCount) const +{ + if (PixelCount >= 8'300'000 && IsQualityModeSupported(EDLSSQualityMode::UltraPerformance)) + { + return EDLSSQualityMode::UltraPerformance; + } + else if (PixelCount >= 3'690'000 && IsQualityModeSupported(EDLSSQualityMode::Performance)) + { + return EDLSSQualityMode::Performance; + } + else if (PixelCount >= 2'030'000 && IsQualityModeSupported(EDLSSQualityMode::Quality)) + { + return EDLSSQualityMode::Quality; + } + + return TOptional {}; +} + + +bool FDLSSUpscaler::EnableDLSSInPlayInEditorViewports() const +{ + if (GetDefault()->EnableDLSSInPlayInEditorViewportsOverride == EDLSSSettingOverride::UseProjectSettings) + { + return GetDefault()->bEnableDLSSInPlayInEditorViewports; + } + else + { + return GetDefault()->EnableDLSSInPlayInEditorViewportsOverride == EDLSSSettingOverride::Enabled; + } +} + +float FDLSSUpscaler::GetMinUpsampleResolutionFraction() const +{ + return MinResolutionFraction; +} + +float FDLSSUpscaler::GetMaxUpsampleResolutionFraction() const +{ + return MaxResolutionFraction; +} + +float FDLSSUpscaler::GetOptimalResolutionFractionForQuality(EDLSSQualityMode Quality) const +{ + checkf(IsQualityModeSupported(Quality),TEXT("%u is not a valid Quality mode"), Quality); + return ResolutionSettings[ToNGXQuality(Quality)].OptimalResolutionFraction; +} + +float FDLSSUpscaler::GetOptimalSharpnessForQuality(EDLSSQualityMode Quality) const +{ + checkf(IsQualityModeSupported(Quality), TEXT("%u is not a valid Quality mode"), Quality); + return ResolutionSettings[ToNGXQuality(Quality)].Sharpness; +} + +float FDLSSUpscaler::GetMinResolutionFractionForQuality(EDLSSQualityMode Quality) const +{ + checkf(IsQualityModeSupported(Quality), TEXT("%u is not a valid Quality mode"), Quality); + return ResolutionSettings[ToNGXQuality(Quality)].MinResolutionFraction; +} + +float FDLSSUpscaler::GetMaxResolutionFractionForQuality(EDLSSQualityMode Quality) const +{ + checkf(IsQualityModeSupported(Quality), TEXT("%u is not a valid Quality mode"), Quality); + return ResolutionSettings[ToNGXQuality(Quality)].MaxResolutionFraction; +} + +bool FDLSSUpscaler::IsFixedResolutionFraction(EDLSSQualityMode Quality) const +{ + checkf(IsQualityModeSupported(Quality), TEXT("%u is not a valid Quality mode"), Quality); + return ResolutionSettings[ToNGXQuality(Quality)].IsFixedResolution(); +} + +#undef LOCTEXT_NAMESPACE diff --git a/plugins/DLSS/Source/DLSS/Private/DLSSUpscaler.h b/plugins/DLSS/Source/DLSS/Private/DLSSUpscaler.h new file mode 100644 index 00000000..b9d9f7b9 --- /dev/null +++ b/plugins/DLSS/Source/DLSS/Private/DLSSUpscaler.h @@ -0,0 +1,189 @@ +/* +* Copyright (c) 2020 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +* +* NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +* property and proprietary rights in and to this material, related +* documentation and any modifications thereto. Any use, reproduction, +* disclosure or distribution of this material and related documentation +* without an express license agreement from NVIDIA CORPORATION or +* its affiliates is strictly prohibited. +*/ + +#pragma once + +#include "CoreMinimal.h" +#include "RendererInterface.h" +#include "PostProcess/TemporalAA.h" +#include "ScreenPass.h" +#include "NGXRHI.h" +#include "DLSSSettings.h" + +#include "CustomStaticScreenPercentage.h" +#include "CustomResourcePool.h" + +class FSceneTextureParameters; + +struct FTemporalAAHistory; + +class FRHITexture; +class NGXRHI; +struct FDLSSOptimalSettings; +struct FDLSSPassParameters +{ + FIntRect InputViewRect; + FIntRect OutputViewRect; + bool bHighResolutionMotionVectors = false; + + FRDGTexture* SceneColorInput = nullptr; + FRDGTexture* SceneVelocityInput = nullptr; + FRDGTexture* SceneDepthInput = nullptr; + + FDLSSPassParameters(const FViewInfo& View) + : InputViewRect(View.ViewRect) + , OutputViewRect(FIntPoint::ZeroValue, View.GetSecondaryViewRectSize()) + { + } + + /** Returns the texture resolution that will be output. */ + FIntPoint GetOutputExtent() const; + + /** Validate the settings of TAA, to make sure there is no issue. */ + bool Validate() const; +}; + +struct FDLSSOutputs +{ + FRDGTexture* SceneColor = nullptr; +}; + +enum class EDLSSQualityMode +{ + MinValue = -2, + UltraPerformance = -2, + Performance = -1, + Balanced = 0, + Quality = 1, + UltraQuality = 2, + MaxValue = UltraQuality, + NumValues = 5 +}; + +class DLSS_API FDLSSUpscaler final : public ITemporalUpscaler, public ICustomStaticScreenPercentage, public ICustomResourcePool +{ + + friend class FDLSSModule; +public: + + + FDLSSUpscaler(const FDLSSUpscaler* InUpscaler, EDLSSQualityMode InQualityMode); + virtual ~FDLSSUpscaler(); + // Inherited via ITemporalUpscaler + virtual const TCHAR* GetDebugName() const final; + +#if DLSS_ENGINE_ADDPASSES_RETURN_THROUGH_PARAMS + virtual void AddPasses( +#else + virtual ITemporalUpscaler::FOutputs AddPasses( +#endif + FRDGBuilder& GraphBuilder, + const FViewInfo& View, + const FPassInputs& PassInputs +#if DLSS_ENGINE_ADDPASSES_RETURN_THROUGH_PARAMS + , FRDGTextureRef* OutSceneColorTexture + , FIntRect* OutSceneColorViewRect + , FRDGTextureRef* OutSceneColorHalfResTexture + , FIntRect* OutSceneColorHalfResViewRect +#endif + ) const final; + + // Inherited via ICustomStaticScreenPercentage + virtual void SetupMainGameViewFamily(FSceneViewFamily& ViewFamily) final; + +#if DLSS_ENGINE_SUPPORTS_CSSPD + /** Allows to setup View Family directly. To be used by modules that are aware of DLSS Plugin. */ + virtual void SetupViewFamily(FSceneViewFamily& ViewFamily, TSharedPtr InScreenPercentageDataInterface) final; +#endif + + virtual float GetMinUpsampleResolutionFraction() const final; + virtual float GetMaxUpsampleResolutionFraction() const final; + + float GetOptimalResolutionFractionForQuality(EDLSSQualityMode Quality) const; + float GetOptimalSharpnessForQuality(EDLSSQualityMode Quality) const; + float GetMinResolutionFractionForQuality(EDLSSQualityMode Quality) const; + float GetMaxResolutionFractionForQuality(EDLSSQualityMode Quality) const; + bool IsFixedResolutionFraction(EDLSSQualityMode Quality) const; + + const NGXRHI* GetNGXRHI() const + { + return NGXRHIExtensions; + } + + // Inherited via ICustomResourcePool + virtual void Tick(FRHICommandListImmediate& RHICmdList) override; + + bool IsQualityModeSupported(EDLSSQualityMode InQualityMode) const; + uint32 GetNumRuntimeQualityModes() const + { + return NumRuntimeQualityModes; + } + + bool IsDLSSActive() const; + + static FDLSSUpscaler* GetUpscalerInstanceForViewFamily(const FDLSSUpscaler* InUpscaler, EDLSSQualityMode InQualityMode); + static bool IsValidUpscalerInstance(const ITemporalUpscaler* InUpscaler); + + static bool IsDLAAMode(); + static bool IsAutoQualityMode(); + static void SetAutoQualityMode(bool bAutoQualityMode); + + // Give the suggested EDLSSQualityMode if one is appropriate for the given pixel count, or nothing if DLSS should be disabled + TOptional GetAutoQualityModeFromPixels(int PixelCount) const; + + static void ReleaseStaticResources(); + +private: + FDLSSUpscaler(NGXRHI* InNGXRHIExtensions); + FDLSSUpscaler(const FDLSSUpscaler&) = default; + + + EDLSSQualityMode GetSupportedQualityModeFromCVarValue(int32 InCVarValue) const + { + checkf(NumRuntimeQualityModes, TEXT("This should only be called from the higher level code when DLSS is supported") ); + static_assert(int32(EDLSSQualityMode::NumValues) == 5, "dear DLSS plugin NVIDIA developer, please update this code to handle the new EDLSSQualityMode enum values"); + for (auto QualityMode : { EDLSSQualityMode::UltraPerformance, EDLSSQualityMode::Performance , EDLSSQualityMode::Balanced, EDLSSQualityMode::Quality, EDLSSQualityMode::UltraQuality }) + { + if (InCVarValue == static_cast(QualityMode) && IsQualityModeSupported(QualityMode)) + { + return QualityMode; + } + } + return EDLSSQualityMode::Balanced; + } + + TOptional GetAutoQualityModeFromViewFamily(const FSceneViewFamily& ViewFamily) const; + + bool EnableDLSSInPlayInEditorViewports() const; + FDLSSOutputs AddDLSSPass( + FRDGBuilder& GraphBuilder, + const FViewInfo& View, + const FDLSSPassParameters& Inputs, + const FTemporalAAHistory& InputHistory, + FTemporalAAHistory* OutputHistory, + const TRefCountPtr InputCustomHistoryInterface, + TRefCountPtr* OutputCustomHistoryInterface + ) const; + + + + EDLSSQualityMode DLSSQualityMode = EDLSSQualityMode::NumValues; + + // The FDLSSUpscaler(NGXRHI*) will update those once + static NGXRHI* NGXRHIExtensions; + static float MinResolutionFraction; + static float MaxResolutionFraction; + + static uint32 NumRuntimeQualityModes; + static TArray ResolutionSettings; + + static TStaticArray , uint32(EDLSSQualityMode::NumValues)> DLSSUpscalerInstancesPerViewFamily; +}; diff --git a/plugins/DLSS/Source/DLSS/Private/DLSSUpscalerHistory.cpp b/plugins/DLSS/Source/DLSS/Private/DLSSUpscalerHistory.cpp new file mode 100644 index 00000000..d3f4826c --- /dev/null +++ b/plugins/DLSS/Source/DLSS/Private/DLSSUpscalerHistory.cpp @@ -0,0 +1,44 @@ +/* +* Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#include "DLSSUpscalerHistory.h" +#include "DLSSUpscalerPrivate.h" +#include "NGXRHI.h" + + +#include "PostProcess/SceneRenderTargets.h" +#include "PostProcess/PostProcessing.h" + + + +#define LOCTEXT_NAMESPACE "FDLSSModule" + + +FDLSSUpscalerHistory::FDLSSUpscalerHistory(FDLSSStateRef InDLSSState) + : DLSSState(InDLSSState) +{ +} + +FDLSSUpscalerHistory::~FDLSSUpscalerHistory() +{ +} + + +#undef LOCTEXT_NAMESPACE \ No newline at end of file diff --git a/plugins/DLSS/Source/DLSS/Private/DLSSUpscalerHistory.h b/plugins/DLSS/Source/DLSS/Private/DLSSUpscalerHistory.h new file mode 100644 index 00000000..700986b6 --- /dev/null +++ b/plugins/DLSS/Source/DLSS/Private/DLSSUpscalerHistory.h @@ -0,0 +1,53 @@ +/* +* Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#pragma once + +#include "CoreMinimal.h" +#include "SceneRendering.h" +#include "NGXRHI.h" + +class DLSS_API FDLSSUpscalerHistory final : public ICustomTemporalAAHistory, public FRefCountBase +{ + friend class FDLSSUpscaler; + + FDLSSStateRef DLSSState; + + + + virtual uint32 AddRef() const final + { + return FRefCountBase::AddRef(); + } + + virtual uint32 Release() const final + { + return FRefCountBase::Release(); + } + + virtual uint32 GetRefCount() const final + { + return FRefCountBase::GetRefCount(); + } + + FDLSSUpscalerHistory(FDLSSStateRef InDLSSState); + ~FDLSSUpscalerHistory(); + +}; diff --git a/plugins/DLSS/Source/DLSS/Private/DLSSUpscalerPrivate.h b/plugins/DLSS/Source/DLSS/Private/DLSSUpscalerPrivate.h new file mode 100644 index 00000000..20971272 --- /dev/null +++ b/plugins/DLSS/Source/DLSS/Private/DLSSUpscalerPrivate.h @@ -0,0 +1,26 @@ +/* +* Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#pragma once + +#include "CoreMinimal.h" + +DECLARE_LOG_CATEGORY_EXTERN(LogDLSS, Verbose, All); + diff --git a/plugins/DLSS/Source/DLSS/Public/DLSS.h b/plugins/DLSS/Source/DLSS/Public/DLSS.h new file mode 100644 index 00000000..038769b9 --- /dev/null +++ b/plugins/DLSS/Source/DLSS/Public/DLSS.h @@ -0,0 +1,74 @@ +/* +* Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#pragma once + +#include "Modules/ModuleManager.h" + +class FDLSSUpscaler; +class FDLSSDenoiser; +class FNGXAutomationViewExtension; +class NGXRHI; + + +enum class EDLSSSupport : uint8 +{ + Supported, + NotSupported, + NotSupportedIncompatibleHardware, + NotSupportedDriverOutOfDate, + NotSupportedOperatingSystemOutOfDate, + NotSupportedIncompatibleAPICaptureToolActive, +}; + + +class IDLSSModuleInterface : public IModuleInterface +{ + public: + virtual EDLSSSupport QueryDLSSSupport() const = 0; + virtual void GetDLSSMinDriverVersion(int32& MajorVersion, int32& MinorVersion) const = 0; + virtual float GetResolutionFractionForQuality(int32 Quality) const = 0; + virtual FDLSSUpscaler* GetDLSSUpscaler() const = 0; +}; + +class FDLSSModule final: public IDLSSModuleInterface +{ +public: + + /** IModuleInterface implementation */ + virtual void StartupModule(); + virtual void ShutdownModule(); + + // Inherited via IDLSSModuleInterface + virtual EDLSSSupport QueryDLSSSupport() const; + virtual void GetDLSSMinDriverVersion(int32& MajorVersion, int32& MinorVersion) const; + virtual float GetResolutionFractionForQuality(int32 Quality) const; + virtual FDLSSUpscaler* GetDLSSUpscaler() const ; + +private: + + TUniquePtr DLSSUpscaler; + TUniquePtr DLSSDenoiser; + TUniquePtr NGXRHIExtensions; + TSharedPtr< FNGXAutomationViewExtension, ESPMode::ThreadSafe> NGXAutomationViewExtension; + EDLSSSupport DLSSSupport = EDLSSSupport::NotSupported; + int32 MinDriverVersionMinor; + int32 MinDriverVersionMajor; +}; diff --git a/plugins/DLSS/Source/DLSS/Public/DLSSSettings.h b/plugins/DLSS/Source/DLSS/Public/DLSSSettings.h new file mode 100644 index 00000000..67a8fce3 --- /dev/null +++ b/plugins/DLSS/Source/DLSS/Public/DLSSSettings.h @@ -0,0 +1,121 @@ +/* +* Copyright (c) 2020 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +* +* NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +* property and proprietary rights in and to this material, related +* documentation and any modifications thereto. Any use, reproduction, +* disclosure or distribution of this material and related documentation +* without an express license agreement from NVIDIA CORPORATION or +* its affiliates is strictly prohibited. +*/ +#pragma once + +#include "UObject/ObjectMacros.h" +#include "UObject/Object.h" +#include "Engine/DeveloperSettings.h" +#include "CustomStaticScreenPercentage.h" +#include "Runtime/Launch/Resources/Version.h" + +#include "DLSSSettings.generated.h" + +UENUM() +enum class EDLSSSettingOverride : uint8 +{ + Enabled UMETA(DisplayName = "True"), + Disabled UMETA(DisplayName = "False"), + UseProjectSettings UMETA(DisplayName = "Use project settings"), +}; + +UCLASS(Config = Engine, ProjectUserConfig) +class DLSS_API UDLSSOverrideSettings : public UObject +{ +public: + + GENERATED_BODY() + + /** This enables DLSS in editor viewports. Saved to local user config only.*/ + UPROPERTY(Config, EditAnywhere, Category = "Level Editor - Viewport (Local)", DisplayName = "Enable DLSS to be turned on in Editor viewports") + EDLSSSettingOverride EnableDLSSInEditorViewportsOverride = EDLSSSettingOverride::UseProjectSettings; + + /** This setting enables adjusting the screenpercentage directly in the editor, outside of the optimized DLSS quality modes. Saved to local user config only.*/ + UPROPERTY(Config, EditAnywhere, Category = "Level Editor - Viewport (Local)", DisplayName = "Enable Screenpercentage Manipulation in DLSS Editor Viewports") + EDLSSSettingOverride EnableScreenpercentageManipulationInDLSSEditorViewportsOverride = EDLSSSettingOverride::UseProjectSettings; + + /** This enables DLSS in play in editor viewports. Saved to local user config only. */ + UPROPERTY(Config, EditAnywhere, Category = "Level Editor - Viewport (Local)", DisplayName = "Enable DLSS in Play In Editor viewports") + EDLSSSettingOverride EnableDLSSInPlayInEditorViewportsOverride = EDLSSSettingOverride::UseProjectSettings; + + /** This enables warnings about plugins & tools that are incompatible with DLSS in the editor. Saved to local user config only. */ + UPROPERTY(Config, EditAnywhere, Category = "Editor (Local)", DisplayName = "Warn about incompatible plugins and tools") + bool bShowDLSSIncompatiblePluginsToolsWarnings = true; + + /** This enables on screen warnings and errors about DLSS */ + UPROPERTY(Config, EditAnywhere, Category = "Editor (Local)", DisplayName = "Show various DLSS on screen debug messages") + EDLSSSettingOverride ShowDLSSSDebugOnScreenMessages = EDLSSSettingOverride::UseProjectSettings; + +}; + +UCLASS(Config = Engine, DefaultConfig, DisplayName="NVIDIA DLSS") +class DLSS_API UDLSSSettings: public UObject +{ + GENERATED_BODY() + +private: + +public: + + /** Enable DLSS for D3D12, if the driver supports it at runtime */ + UPROPERTY(Config, EditAnywhere, Category = "Platforms", DisplayName = "Enable DLSS for the D3D12RHI") + bool bEnableDLSSD3D12 = PLATFORM_WINDOWS; + + /** Enable DLSS for D3D11, if the driver supports it at runtime */ + UPROPERTY(Config, EditAnywhere, Category = "Platforms", DisplayName = "Enable DLSS for the D3D11RHI") + bool bEnableDLSSD3D11 = PLATFORM_WINDOWS; + + /** Enable DLSS for Vulkan, if the driver supports it at runtime */ + UPROPERTY(Config, EditAnywhere, Category = "Platforms", DisplayName = "Enable DLSS for the VulkanRHI") + bool bEnableDLSSVulkan = PLATFORM_WINDOWS; + + /** This enables DLSS in editor viewports. This project wide setting can be locally overridden in the NVIDIA DLSS (Local) settings.*/ + UPROPERTY(Config, EditAnywhere, Category = "Level Editor - Viewport", DisplayName = "Enable DLSS to be turned on in Editor viewports") + bool bEnableDLSSInEditorViewports = true; + + /** This setting enables adjusting the screenpercentage directly in the editor, outside of the optimized DLSS quality modes. This project wide setting can be locally overridden in the NVIDIA DLSS (Local) settings.*/ + UPROPERTY(Config = Editor, EditAnywhere, Category = "Level Editor - Viewport", DisplayName = "Enable Screenpercentage Manipulation in DLSS Editor Viewports") + bool bEnableScreenpercentageManipulationInDLSSEditorViewports = false; + + /** This enables DLSS in play in editor viewports. This project wide setting can be locally overridden in in the NVIDIA DLSS (Local) settings.*/ + UPROPERTY(Config, EditAnywhere, Category = "Level Editor - Viewport", DisplayName = "Enable DLSS in Play In Editor viewports") + bool bEnableDLSSInPlayInEditorViewports = true; + + /** This enables on screen warnings and errors about DLSS. This project wide setting can be locally overridden in the NVIDIA DLSS (Local) settings. */ + UPROPERTY(Config, EditAnywhere, Category = "Level Editor - Viewport", DisplayName = "Show various DLSS on screen debug messages") + bool bShowDLSSSDebugOnScreenMessages = true; + + /** This is part of the DLSS plugin and used by most projects*/ + UPROPERTY(VisibleAnywhere, Config, Category = "General Settings", DisplayName = "Generic DLSS Binary Path") + FString GenericDLSSBinaryPath; + + UPROPERTY(VisibleAnywhere, Config, Category = "General Settings", DisplayName = "Exists") + bool bGenericDLSSBinaryExists; + + /** By default the DLSS plugin uses the UE Project ID to initalize DLSS. In some cases NVIDIA might provide a separate NVIDIA Application ID, which should be put here. Please refer to https://developer.nvidia.com/dlss for details*/ + UPROPERTY(Config, EditAnywhere, Category = "General Settings", DisplayName = "NVIDIA NGX Application ID", AdvancedDisplay) + uint32 NVIDIANGXApplicationId; + + /** In some cases NVIDIA might provide a project specific DLSS binary for your project. Please refer to https://developer.nvidia.com/dlss for details*/ + UPROPERTY(VisibleAnywhere, Config, Category = "General Settings", DisplayName = "Custom DLSS Binary Path", AdvancedDisplay) + FString CustomDLSSBinaryPath; + UPROPERTY(VisibleAnywhere, Config, Category = "General Settings", DisplayName = "Exists", AdvancedDisplay) + bool bCustomDLSSBinaryExists; +}; + +// This is publically defined in the .Build.cs so it can key off branch names, which is not feasible to do with the preprocessor +#if DLSS_ENGINE_SUPPORTS_CSSPD +class FDLSSViewportQualitySetting final : public ICustomStaticScreenPercentageData +{ +public: + int32 QualitySetting = 0; + bool bDLAAEnabled = false; +}; +#endif diff --git a/plugins/DLSS/Source/DLSSBlueprint/DLSSBlueprint.Build.cs b/plugins/DLSS/Source/DLSSBlueprint/DLSSBlueprint.Build.cs new file mode 100644 index 00000000..c056d014 --- /dev/null +++ b/plugins/DLSS/Source/DLSSBlueprint/DLSSBlueprint.Build.cs @@ -0,0 +1,95 @@ +/* +* Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +using UnrealBuildTool; +using System.IO; + +public class DLSSBlueprint : ModuleRules +{ + protected virtual bool IsSupportedPlatform(ReadOnlyTargetRules Target) + { + return Target.Platform == UnrealTargetPlatform.Win64; + } + + public DLSSBlueprint(ReadOnlyTargetRules Target) : base(Target) + { + PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; + + PrivateDependencyModuleNames.AddRange( + new string[] + { + "Core", + "CoreUObject", + "Engine", + "RenderCore", + "Renderer", + "Projects", + } + ); + + + // for ITemporalUpscaler in PostProcess/TemporalAA.h + PrivateIncludePaths.AddRange( + new string[] { + EngineDirectory + "/Source/Runtime/Renderer/Private", + // ... add other private include paths required here ... + } + ); + + bool bPlatformSupportsDLSS = IsSupportedPlatform(Target); + + PublicDefinitions.Add("WITH_DLSS=" + (bPlatformSupportsDLSS ? '1' : '0')); + + if (bPlatformSupportsDLSS) + { + PublicIncludePaths.AddRange( + new string[] + { + Path.Combine(ModuleDirectory, "../DLSS/Public"), + } + ); + + PrivateIncludePaths.AddRange( + new string[] + { + Path.Combine(EngineDirectory,"Source/Runtime/Renderer/Private"), + Path.Combine(ModuleDirectory, "../DLSS/Private") + } + ); + + PublicDependencyModuleNames.AddRange( + new string[] + { + } + ); + + PrivateDependencyModuleNames.AddRange( + new string[] + { + "NGX", + "NGXRHI", + "DLSS", + } + ); + } + } + + +} diff --git a/plugins/DLSS/Source/DLSSBlueprint/Private/DLSSLibrary.cpp b/plugins/DLSS/Source/DLSSBlueprint/Private/DLSSLibrary.cpp new file mode 100644 index 00000000..9238aeb4 --- /dev/null +++ b/plugins/DLSS/Source/DLSSBlueprint/Private/DLSSLibrary.cpp @@ -0,0 +1,725 @@ +/* +* Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#include "DLSSLibrary.h" + +#if WITH_DLSS +#include "DLSS.h" +#include "DLSSSettings.h" +#include "DLSSUpscaler.h" +#include "NGXRHI.h" +#endif + +#include "PostProcess/TemporalAA.h" +#include "Modules/ModuleManager.h" +#include "Interfaces/IPluginManager.h" +#include "ShaderCore.h" + +#define LOCTEXT_NAMESPACE "FDLSSBlueprintModule" +DEFINE_LOG_CATEGORY_STATIC(LogDLSSBlueprint, Log, All); + +static TAutoConsoleVariable CVarNGXDLSSPreferNISSharpen( + TEXT("r.NGX.DLSS.PreferNISSharpen"), + 2, + TEXT("Prefer sharpening with an extra NIS plugin sharpening pass instead of DLSS sharpening if the NIS plugin is also enabled for the project. (default: true)\n") + TEXT("Requires UE4.27.1 and the NIS plugin to be enabled, DLSS sharpening will be used otherwise \n") + TEXT(" 0: Softening/sharpening with the DLSS pass.\n") + TEXT(" 1: Sharpen with the NIS plugin. Softening is not supported. Requires the NIS plugin to be enabled.\n") + TEXT(" 2: Sharpen with the NIS plugin. Softening (i.e. negative sharpness)with the DLSS plugin. Requires the NIS plugin to be enabled.\n") + TEXT("Note: This cvar is only evaluated when using the `SetDLSSSharpness` Blueprint function, from either C++ or a Blueprint event graph!"), + ECVF_RenderThreadSafe); + +static const FName SetDLSSModeInvalidEnumValueError= FName("SetDLSSModeInvalidEnumValueError"); +static const FName IsDLSSModeSupportedInvalidEnumValueError = FName("IsDLSSModeSupportedInvalidEnumValueError"); + +UDLSSSupport UDLSSLibrary::DLSSSupport = UDLSSSupport::NotSupportedByPlatformAtBuildTime; +#if WITH_DLSS +int32 UDLSSLibrary::MinDLSSDriverVersionMajor = 0; +int32 UDLSSLibrary::MinDLSSDriverVersionMinor = 0; + +FDLSSUpscaler* UDLSSLibrary::DLSSUpscaler = nullptr; +bool UDLSSLibrary::bDLSSLibraryInitialized = false; + +static bool ShowDLSSSDebugOnScreenMessages() +{ + + if (GetDefault()->ShowDLSSSDebugOnScreenMessages == EDLSSSettingOverride::UseProjectSettings) + { + return GetDefault()->bShowDLSSSDebugOnScreenMessages; + } + else + { + return GetDefault()->ShowDLSSSDebugOnScreenMessages == EDLSSSettingOverride::Enabled; + } +} + + +#if !UE_BUILD_SHIPPING + +UDLSSLibrary::FDLSSErrorState UDLSSLibrary::DLSSErrorState; +FDelegateHandle UDLSSLibrary::DLSSOnScreenMessagesDelegateHandle; +void UDLSSLibrary::GetDLSSOnScreenMessages(TMultiMap& OutMessages) +{ + check(IsInGameThread()); + + // We need a valid DLSSSupport, so calling this here in case other UDLSSLibrary functions which call TryInitDLSSLibrary() haven't been called + if (!TryInitDLSSLibrary()) + { + return; + } + + if(ShowDLSSSDebugOnScreenMessages()) + { + + if (DLSSErrorState.bIsDLSSModeUnsupported) + { + const FTextFormat Format(LOCTEXT("DLSSOnScreenDebugSetModeUnsupportedDLSSMode", + "DLSS Error: The DLSS mode \"{0}\" is not supported. This error can be avoided by calling SetDLSSMode({0}) only if IsDLSSModeSupported({0}) returns true.")); + const FText Message = FText::Format(Format, StaticEnum()->GetDisplayNameTextByValue(int64(DLSSErrorState.InvalidDLSSMode))); + OutMessages.Add(FCoreDelegates::EOnScreenMessageSeverity::Error, Message); + } + + // Checking for "contains" in case virtualization is changing the GPU string + const bool bIsNVIDIA = FWindowsPlatformMisc::GetPrimaryGPUBrand().Contains(TEXT("NVIDIA")); + + bool bShowNotSupportedMessage = bIsNVIDIA && (UDLSSSupport::Supported != DLSSSupport); + + if ((UDLSSSupport::NotSupportedIncompatibleAPICaptureToolActive == DLSSSupport) && !GetMutableDefault()->bShowDLSSIncompatiblePluginsToolsWarnings ) + { + bShowNotSupportedMessage = false; + } + + if (bShowNotSupportedMessage) + { + const FTextFormat Format(LOCTEXT("DLSSOnScreenDebugDLSSNotSupported", + "DLSS Information: DLSS is not supported due to {0}.Please see the various LogDLSS* categories in the Developer Tools -> Output Log for further detail.")); + const FText Message = FText::Format(Format, StaticEnum()->GetDisplayNameTextByValue(int64(DLSSSupport))); + OutMessages.Add(FCoreDelegates::EOnScreenMessageSeverity::Warning, Message); + } + } +} +#endif + + +static EDLSSQualityMode ToEDLSSQualityMode(UDLSSMode InDLSSQualityMode) +{ + static_assert(int32(EDLSSQualityMode::NumValues) == 5, "dear DLSS plugin NVIDIA developer, please update this code to translate the new EDLSSQualityMode enum values to UDLSSMode"); + + switch (InDLSSQualityMode) + { + + case UDLSSMode::UltraPerformance: + return EDLSSQualityMode::UltraPerformance; + + // the higher level code should catch this... + case UDLSSMode::Off: + checkf(InDLSSQualityMode != UDLSSMode::Off, TEXT("ToEDLSSQualityMode should not be called with an InDLSSQualityMode of UDLSSMode::Off from the higher level code")); + default: + checkf(false, TEXT("ToEDLSSQualityMode should not be called with an out of range InDLSSQualityMode %d InDLSSQualityMode from the higher level code"), InDLSSQualityMode); + + case UDLSSMode::Performance: + return EDLSSQualityMode::Performance; + + case UDLSSMode::Balanced: + return EDLSSQualityMode::Balanced; + + case UDLSSMode::Quality: + return EDLSSQualityMode::Quality; + + case UDLSSMode::UltraQuality: + return EDLSSQualityMode::UltraQuality; + } +} + +int32 UDLSSLibrary::ToDLSSQualityCVarValue(UDLSSMode DLSSMode) +{ + return static_cast(ToEDLSSQualityMode(DLSSMode)); +} + +#endif + +bool UDLSSLibrary::IsDLSSModeSupported(UDLSSMode DLSSMode) +{ + const UEnum* Enum = StaticEnum(); + + // UEnums are strongly typed, but then one can also cast a byte to an UEnum ... + if (Enum->IsValidEnumValue(int64(DLSSMode)) && (Enum->GetMaxEnumValue() != int64(DLSSMode))) + { + if (DLSSMode == UDLSSMode::Off) + { + return true; + } +#if WITH_DLSS + if (!TryInitDLSSLibrary()) + { + UE_LOG(LogDLSSBlueprint, Error, TEXT("IsDLSSModeSupported should not be called before PostEngineInit")); + return false; + } + if (!IsDLSSSupported()) + { + return false; + } + else if (DLSSMode == UDLSSMode::Auto) + { + return true; + } + else + { + return DLSSUpscaler->IsQualityModeSupported(ToEDLSSQualityMode(DLSSMode)); + } +#else + return false; +#endif + } + else + { +#if !UE_BUILD_SHIPPING + FFrame::KismetExecutionMessage(*FString::Printf( + TEXT("IsDLSSModeSupported should not be called with an invalid DLSSMode enum value (%d) \"%s\""), + int64(DLSSMode), *StaticEnum()->GetDisplayNameTextByValue(int64(DLSSMode)).ToString()), + ELogVerbosity::Error, IsDLSSModeSupportedInvalidEnumValueError); +#endif + return false; + } + +} + +void UDLSSLibrary::GetDLSSModeInformation(UDLSSMode DLSSMode, FVector2D ScreenResolution, bool& bIsSupported, float& OptimalScreenPercentage, bool& bIsFixedScreenPercentage, float& MinScreenPercentage, float& MaxScreenPercentage, float& OptimalSharpness) +{ + // fall back to TAA for unsupported or DLSS off + OptimalScreenPercentage = 0.0f; + bIsFixedScreenPercentage = false; + MinScreenPercentage = 100.0f * ITemporalUpscaler::GetDefaultTemporalUpscaler()->GetMinUpsampleResolutionFraction(); + MaxScreenPercentage = 100.0f * ITemporalUpscaler::GetDefaultTemporalUpscaler()->GetMaxUpsampleResolutionFraction(); + OptimalSharpness = 0.0f; +#if WITH_DLSS + if (!TryInitDLSSLibrary()) + { + UE_LOG(LogDLSSBlueprint, Error, TEXT("GetDLSSModeInformation should not be called before PostEngineInit")); + bIsSupported = false; + return; + } +#endif + bIsSupported = IsDLSSModeSupported(DLSSMode); + +#if WITH_DLSS + if ((DLSSMode != UDLSSMode::Off) && bIsSupported) + { + EDLSSQualityMode EDLSSMode; + if (DLSSMode != UDLSSMode::Auto) + { + EDLSSMode = ToEDLSSQualityMode(DLSSMode); + } + else + { + // Auto DLSS mode is based on total pixels + float PixelsFloat = ScreenResolution.X * ScreenResolution.Y; + int32 PixelsInt = (PixelsFloat < static_cast(MAX_int32)) ? static_cast(PixelsFloat) : MAX_int32; + TOptional MaybeDLSSMode = DLSSUpscaler->GetAutoQualityModeFromPixels(PixelsInt); + if (!MaybeDLSSMode.IsSet()) + { + // DLSS Off + return; + } + EDLSSMode = MaybeDLSSMode.GetValue(); + } + bIsFixedScreenPercentage = DLSSUpscaler->IsFixedResolutionFraction(EDLSSMode); + + OptimalScreenPercentage = 100.0f * DLSSUpscaler->GetOptimalResolutionFractionForQuality(EDLSSMode); + MinScreenPercentage = 100.0f * DLSSUpscaler->GetMinResolutionFractionForQuality(EDLSSMode); + MaxScreenPercentage = 100.0f * DLSSUpscaler->GetMaxResolutionFractionForQuality(EDLSSMode); + + OptimalSharpness = DLSSUpscaler->GetOptimalSharpnessForQuality(EDLSSMode); + } +#endif +} + +void UDLSSLibrary::GetDLSSScreenPercentageRange(float& MinScreenPercentage, float& MaxScreenPercentage) +{ +#if WITH_DLSS + if (!TryInitDLSSLibrary()) + { + UE_LOG(LogDLSSBlueprint, Error, TEXT("GetDLSSScreenPercentageRange should not be called before PostEngineInit")); + MinScreenPercentage = 100.0f; + MaxScreenPercentage = 100.0f; + return; + } + + if (IsDLSSSupported()) + { + MinScreenPercentage = 100.0f * DLSSUpscaler->GetMinUpsampleResolutionFraction(); + MaxScreenPercentage = 100.0f * DLSSUpscaler->GetMaxUpsampleResolutionFraction(); + } + else +#endif + { + MinScreenPercentage = 100.0f; + MaxScreenPercentage = 100.0f; + } +} + +TArray UDLSSLibrary::GetSupportedDLSSModes() +{ + TArray SupportedQualityModes; +#if WITH_DLSS + if (!TryInitDLSSLibrary()) + { + UE_LOG(LogDLSSBlueprint, Error, TEXT("GetSupportedDLSSModes should not be called before PostEngineInit")); + return SupportedQualityModes; + } +#endif + { + const UEnum* Enum = StaticEnum(); + for (int32 EnumIndex = 0; EnumIndex < Enum->NumEnums(); ++EnumIndex) + { + const int64 EnumValue = Enum->GetValueByIndex(EnumIndex); + if (EnumValue != Enum->GetMaxEnumValue()) + { + const UDLSSMode QualityMode = UDLSSMode(EnumValue); + if (IsDLSSModeSupported(QualityMode)) + { + SupportedQualityModes.Add(QualityMode); + } + } + } + } + return SupportedQualityModes; +} + +bool UDLSSLibrary::IsDLSSSupported() +{ +#if WITH_DLSS + if (!TryInitDLSSLibrary()) + { + UE_LOG(LogDLSSBlueprint, Error, TEXT("IsDLSSSupported should not be called before PostEngineInit")); + return false; + } + + return QueryDLSSSupport() == UDLSSSupport::Supported; +#else + return false; +#endif +} + +UDLSSSupport UDLSSLibrary::QueryDLSSSupport() +{ +#if WITH_DLSS + if (!TryInitDLSSLibrary()) + { + UE_LOG(LogDLSSBlueprint, Error, TEXT("QueryDLSSSupport should not be called before PostEngineInit")); + return UDLSSSupport::NotSupported; + } +#endif + return DLSSSupport; +} + +void UDLSSLibrary::GetDLSSMinimumDriverVersion(int32& MinDriverVersionMajor, int32& MinDriverVersionMinor) +{ +#if WITH_DLSS + if (!TryInitDLSSLibrary()) + { + UE_LOG(LogDLSSBlueprint, Error, TEXT("GetDLSSMinimumDriverVersion should not be called before PostEngineInit")); + } + MinDriverVersionMajor = MinDLSSDriverVersionMajor; + MinDriverVersionMinor = MinDLSSDriverVersionMinor; +#else + MinDriverVersionMajor = 0; + MinDriverVersionMinor = 0; +#endif +} + +void UDLSSLibrary::EnableDLAA(bool bEnabled) +{ +#if WITH_DLSS + if (!TryInitDLSSLibrary()) + { + UE_LOG(LogDLSSBlueprint, Error, TEXT("EnableDLAA should not be called before PostEngineInit")); + return; + } + + static const auto CVarNGXEnable = IConsoleManager::Get().FindConsoleVariable(TEXT("r.NGX.Enable")); + bool bNGXEnabled = CVarNGXEnable && (CVarNGXEnable->GetInt() != 0); + + static auto CVarDLAAEnable = IConsoleManager::Get().FindConsoleVariable(TEXT("r.NGX.DLAA.Enable")); + if (CVarDLAAEnable) + { + // r.NGX.Enable might be set to 0 via hotfix so disable DLAA too (in case it might come from saved settings) + bool bDLAAEnabled = bNGXEnabled && bEnabled; + CVarDLAAEnable->Set(bDLAAEnabled, ECVF_SetByCommandline); + if (bDLAAEnabled) + { + // DLAA needs to override the temporal upscaler + static const auto CVarUseTemporalAAUpscaler = IConsoleManager::Get().FindConsoleVariable(TEXT("r.TemporalAA.Upscaler")); + CVarUseTemporalAAUpscaler->SetWithCurrentPriority(1); + } + } +#endif +} + +bool UDLSSLibrary::IsDLAAEnabled() +{ +#if WITH_DLSS + if (!TryInitDLSSLibrary()) + { + UE_LOG(LogDLSSBlueprint, Error, TEXT("IsDLAAEnabled should not be called before PostEngineInit")); + return false; + } + + static const auto CVarNGXEnable = IConsoleManager::Get().FindConsoleVariable(TEXT("r.NGX.Enable")); + const bool bNGXEnabled = CVarNGXEnable && (CVarNGXEnable->GetInt() != 0); + + const bool bDLAAEnabled = (DLSSUpscaler != nullptr) && DLSSUpscaler->IsDLAAMode(); + + return bNGXEnabled && bDLAAEnabled; +#else + return false; +#endif +} + +void UDLSSLibrary::SetDLSSMode(UDLSSMode DLSSMode) +{ +#if WITH_DLSS + if (!TryInitDLSSLibrary()) + { + UE_LOG(LogDLSSBlueprint, Error, TEXT("SetDLSSMode should not be called before PostEngineInit")); + return; + } + + const UEnum* Enum = StaticEnum(); + + // UEnums are strongly typed, but then one can also cast a byte to an UEnum ... + if(Enum->IsValidEnumValue(int64(DLSSMode)) && (Enum->GetMaxEnumValue() != int64(DLSSMode))) + { + static const auto CVarNGXEnable = IConsoleManager::Get().FindConsoleVariable(TEXT("r.NGX.Enable")); + const bool bNGXEnabled = CVarNGXEnable && CVarNGXEnable->GetInt(); + + static auto CVarDLSSEnable = IConsoleManager::Get().FindConsoleVariable(TEXT("r.NGX.DLSS.Enable")); + if (CVarDLSSEnable) + { + // r.NGX.Enable might be set to 0 via hotfix so set r.NGX.DLSS.Enable to 0 too (in case it might come from saved settings) + const bool bDLSSEnabled = bNGXEnabled && (DLSSMode != UDLSSMode::Off); + CVarDLSSEnable->Set(bDLSSEnabled ? 1 : 0, ECVF_SetByCommandline); + + // Spatial upscalers such as NIS might set this to 0, but we need r.TemporalAA.Upscaler to be 1 for DLSS to work. + // but we don't want to change the Cvar if DLSS is not active as to avoid impacting other code paths + // we don't need to set r.TemporalAA.Upsampling since r.TemporalAA.Upscaler implies that + if (bDLSSEnabled) + { + static const auto CVarTemporalAAUpscaler = IConsoleManager::Get().FindConsoleVariable(TEXT("r.TemporalAA.Upscaler")); + CVarTemporalAAUpscaler->Set(1, ECVF_SetByCommandline); + } + } + + static auto CVarDLSSAutoQualityMode = IConsoleManager::Get().FindConsoleVariable(TEXT("r.NGX.DLSS.Quality.Auto")); + if (CVarDLSSAutoQualityMode) + { + bool bIsAutoQualityMode = bNGXEnabled && (DLSSMode == UDLSSMode::Auto); + CVarDLSSAutoQualityMode->Set(bIsAutoQualityMode, ECVF_SetByCommandline); + } + + static auto CVarDLSSQuality = IConsoleManager::Get().FindConsoleVariable(TEXT("r.NGX.DLSS.Quality")); + + if (CVarDLSSQuality && (DLSSMode != UDLSSMode::Off) && (DLSSMode != UDLSSMode::Auto)) + { +#if !UE_BUILD_SHIPPING + check(IsInGameThread()); + DLSSErrorState.bIsDLSSModeUnsupported = !IsDLSSModeSupported(DLSSMode); + DLSSErrorState.InvalidDLSSMode = DLSSMode; +#endif + CVarDLSSQuality->Set(ToDLSSQualityCVarValue(DLSSMode), ECVF_SetByCommandline); + } + } + else + { +#if !UE_BUILD_SHIPPING + FFrame::KismetExecutionMessage(*FString::Printf( + TEXT("SetDLSSMode should not be called with an invalid DLSSMode enum value (%d) \"%s\""), + int64(DLSSMode), *StaticEnum()->GetDisplayNameTextByValue(int64(DLSSMode)).ToString()), + ELogVerbosity::Error, SetDLSSModeInvalidEnumValueError); +#endif + } +#endif // WITH_DLSS +} + +UDLSSMode UDLSSLibrary::GetDLSSMode() +{ +#if WITH_DLSS + if (!TryInitDLSSLibrary()) + { + UE_LOG(LogDLSSBlueprint, Error, TEXT("GetDLSSMode should not be called before PostEngineInit")); + return UDLSSMode::Off; + } + + static const auto CVarTemporalAAUpscaler = IConsoleManager::Get().FindConsoleVariable(TEXT("r.TemporalAA.Upscaler")); + const bool bTemporalUpscalerActive = CVarTemporalAAUpscaler && CVarTemporalAAUpscaler->GetInt() != 0; + + static const auto CVarNGXEnable = IConsoleManager::Get().FindConsoleVariable(TEXT("r.NGX.Enable")); + const bool bNGXEnabled = CVarNGXEnable && CVarNGXEnable->GetInt(); + + static const auto CVarDLSSEnable = IConsoleManager::Get().FindConsoleVariable(TEXT("r.NGX.DLSS.Enable")); + const bool bDLSSEnabled = CVarDLSSEnable && CVarDLSSEnable->GetInt(); + + static const auto CVarDLSSQuality = IConsoleManager::Get().FindConsoleVariable(TEXT("r.NGX.DLSS.Quality")); + const int32 DLSSQuality = CVarDLSSQuality ? CVarDLSSQuality->GetInt() : 0; + + static const auto CVarDLSSAutoQualityMode = IConsoleManager::Get().FindConsoleVariable(TEXT("r.NGX.DLSS.Quality.Auto")); + const bool bIsAutoQualityMode = CVarDLSSAutoQualityMode ? CVarDLSSAutoQualityMode->GetBool() : false; + const bool bDLAAEnabled = (DLSSUpscaler != nullptr) && DLSSUpscaler->IsDLAAMode(); + + if (bDLAAEnabled) + { + // DLSS is mutually exclusive with DLAA, DLAA wins + return UDLSSMode::Off; + } + else if (bTemporalUpscalerActive && bNGXEnabled && bDLSSEnabled && bIsAutoQualityMode) + { + return UDLSSMode::Auto; + } + else if (bTemporalUpscalerActive && bNGXEnabled && bDLSSEnabled && CVarDLSSQuality) + { + static_assert(int32(EDLSSQualityMode::NumValues) == 5, "dear DLSS plugin NVIDIA developer, please update this code to handle the new enum values"); + + switch (EDLSSQualityMode(DLSSQuality)) + { + case EDLSSQualityMode::UltraPerformance: + return UDLSSMode::UltraPerformance; + + default: + UE_LOG(LogDLSSBlueprint , Error, TEXT("r.NGX.DLSS.Quality is set to %d, which is outside of the valid range [%d, %d])"), DLSSQuality, EDLSSQualityMode::MinValue, EDLSSQualityMode::MaxValue); + + case EDLSSQualityMode::Performance: + return UDLSSMode::Performance; + + case EDLSSQualityMode::Balanced: + return UDLSSMode::Balanced; + + case EDLSSQualityMode::Quality: + return UDLSSMode::Quality; + + case EDLSSQualityMode::UltraQuality: + return UDLSSMode::UltraQuality; + }; + } +#endif + return UDLSSMode::Off; +} + +#ifndef ENGINE_CAN_SUPPORT_NIS_PLUGIN +#define ENGINE_CAN_SUPPORT_NIS_PLUGIN (ENGINE_MAJOR_VERSION == 5 || (ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION ==27 && ENGINE_PATCH_VERSION >=1 )) +#endif + +void UDLSSLibrary::SetDLSSSharpness(float Sharpness) +{ +#if WITH_DLSS + + if (!TryInitDLSSLibrary()) + { + UE_LOG(LogDLSSBlueprint, Error, TEXT("SetDLSSSharpness should not be called before PostEngineInit")); + return; + } + static const auto CVarNGXDLSSharpness = IConsoleManager::Get().FindConsoleVariable(TEXT("r.NGX.DLSS.Sharpness")); + if (CVarNGXDLSSharpness) + { +#if ENGINE_CAN_SUPPORT_NIS_PLUGIN + static const auto CVarNISSharpness = IConsoleManager::Get().FindConsoleVariable(TEXT("r.NIS.Sharpness")); + static const auto CVarNISEnable = IConsoleManager::Get().FindConsoleVariable(TEXT("r.NIS.Enable")); + const bool bHasNISPlugin = CVarNISSharpness != nullptr && CVarNISEnable != nullptr; + const bool bIsNISEnabled = bHasNISPlugin && CVarNISEnable->GetBool(); + + if (bHasNISPlugin && bIsNISEnabled) + { + const int32 PreferNISSharpen = CVarNGXDLSSPreferNISSharpen.GetValueOnAnyThread(); + const bool bUseNISSharpen = PreferNISSharpen == 1 || (PreferNISSharpen == 2 && Sharpness > 0); + if (bUseNISSharpen) + { + Sharpness = FMath::Clamp(Sharpness, 0.0f, 1.0f); + } + // Quantize here so we can have sharpness snap to 0, which downstream is used to turn off the NGX sharpening flag + // CVarNGXDLSSharpness->Set(Sharpness, ECVF_SetByCommandline) internally uses Set(*FString::Printf(TEXT("%g"), InValue), SetBy); + CVarNGXDLSSharpness->Set(*FString::Printf(TEXT("%2.2f"), bUseNISSharpen ? 0.0f : Sharpness), ECVF_SetByCommandline); + CVarNISSharpness->Set( *FString::Printf(TEXT("%2.2f"), bUseNISSharpen ? Sharpness : 0.0f), ECVF_SetByCommandline); + } + else +#endif // ENGINE_CAN_SUPPORT_NIS_PLUGIN + { + // Quantize here so we can have sharpness snap to 0, which downstream is used to turn off the NGX sharpening flag + // CVarNGXDLSSharpness->Set(Sharpness, ECVF_SetByCommandline) internally uses Set(*FString::Printf(TEXT("%g"), InValue), SetBy); + CVarNGXDLSSharpness->Set(*FString::Printf(TEXT("%2.2f"), Sharpness), ECVF_SetByCommandline); + } + } +#endif +} + +float UDLSSLibrary::GetDLSSSharpness() +{ +#if WITH_DLSS + if (!TryInitDLSSLibrary()) + { + UE_LOG(LogDLSSBlueprint, Error, TEXT("GetDLSSSharpness should not be called before PostEngineInit")); + return 0.0f; + } + + static const auto CVarNGXDLSSharpness = IConsoleManager::Get().FindConsoleVariable(TEXT("r.NGX.DLSS.Sharpness")); + + if (CVarNGXDLSSharpness) + { +#if ENGINE_CAN_SUPPORT_NIS_PLUGIN + static const auto CVarNISSharpness = IConsoleManager::Get().FindConsoleVariable(TEXT("r.NIS.Sharpness")); + static const auto CVarNISEnable = IConsoleManager::Get().FindConsoleVariable(TEXT("r.NIS.Enable")); + const bool bHasNISPlugin = CVarNISSharpness != nullptr && CVarNISEnable != nullptr; + const bool bIsNISEnabled = bHasNISPlugin && CVarNISEnable->GetBool(); + const int32 PreferNISSharpen = CVarNGXDLSSPreferNISSharpen.GetValueOnAnyThread(); + if (bHasNISPlugin && bIsNISEnabled && (PreferNISSharpen == 1)) + { + return CVarNISSharpness->GetFloat(); + } + else if (bHasNISPlugin && bIsNISEnabled && (PreferNISSharpen == 2)) + { + const float DLSSSharpness = CVarNGXDLSSharpness->GetFloat(); + if (DLSSSharpness < 0) + { + return DLSSSharpness; + } + else + { + return CVarNISSharpness->GetFloat(); + } + } + else +#endif + { + return CVarNGXDLSSharpness->GetFloat(); + } + } +#endif + + return 0.0f; +} + +UDLSSMode UDLSSLibrary::GetDefaultDLSSMode() +{ +#if WITH_DLSS + if (!TryInitDLSSLibrary()) + { + UE_LOG(LogDLSSBlueprint, Error, TEXT("GetDefaultDLSSMode should not be called before PostEngineInit")); + return UDLSSMode::Off; + } +#endif + if (UDLSSLibrary::IsDLSSSupported()) + { + return UDLSSMode::Auto; + } + else + { + return UDLSSMode::Off; + } +} + +#if WITH_DLSS +static UDLSSSupport ToUDLSSSupport(EDLSSSupport InDLSSSupport) +{ + switch (InDLSSSupport) + { + + case EDLSSSupport::Supported: + return UDLSSSupport::Supported; + + // this should be resolved at development time + default: + checkf(false, TEXT("ToUDLSSSupport should not be called with an out of range InDLSSSupport from the higher level code")); + case EDLSSSupport::NotSupported: + return UDLSSSupport::NotSupported; + + case EDLSSSupport::NotSupportedIncompatibleHardware: + return UDLSSSupport::NotSupportedIncompatibleHardware; + + + case EDLSSSupport::NotSupportedDriverOutOfDate: + return UDLSSSupport::NotSupportedDriverOutOfDate; + + case EDLSSSupport::NotSupportedOperatingSystemOutOfDate: + return UDLSSSupport::NotSupportedOperatingSystemOutOfDate; + + case EDLSSSupport::NotSupportedIncompatibleAPICaptureToolActive: + return UDLSSSupport::NotSupportedIncompatibleAPICaptureToolActive; + } +} + +// Delayed initialization, which allows this module to be available early so blueprints can be loaded before DLSS is available in PostEngineInit +bool UDLSSLibrary::TryInitDLSSLibrary() +{ + if (bDLSSLibraryInitialized) + { + return true; + } + + // Register this before we bail out so we can show error messages +#if !UE_BUILD_SHIPPING + if (!DLSSOnScreenMessagesDelegateHandle.IsValid()) + { + DLSSOnScreenMessagesDelegateHandle = FCoreDelegates::OnGetOnScreenMessages.AddStatic(&GetDLSSOnScreenMessages); + } +#endif + + IDLSSModuleInterface* DLSSModule = FModuleManager::GetModulePtr(TEXT("DLSS")); + if (DLSSModule == nullptr) + { + return false; + } + + DLSSUpscaler = DLSSModule->GetDLSSUpscaler(); + DLSSSupport = ToUDLSSSupport(DLSSModule->QueryDLSSSupport()); + DLSSModule->GetDLSSMinDriverVersion(MinDLSSDriverVersionMajor, MinDLSSDriverVersionMinor); + + checkf((DLSSModule->GetDLSSUpscaler() != nullptr) || (DLSSModule->QueryDLSSSupport() != EDLSSSupport::Supported), TEXT("mismatch between not having a valid DLSSModule->GetDLSSUpscaler() while also reporting DLSS as being supported by DLSSModule->QueryDLSSSupport() %u "), DLSSModule->QueryDLSSSupport()); + + bDLSSLibraryInitialized = true; + + return true; +} +#endif // WITH_DLSS + +void FDLSSBlueprintModule::StartupModule() +{ +#if WITH_DLSS + // This initialization will likely not succeed unless this module has been moved to PostEngineInit, and that's ok + UDLSSLibrary::TryInitDLSSLibrary(); +#else + UE_LOG(LogDLSSBlueprint, Log, TEXT("DLSS is not supported on this platform at build time. The DLSS Blueprint library however is supported and stubbed out to ignore any calls to enable DLSS and will always return UDLSSSupport::NotSupportedByPlatformAtBuildTime, regardless of the underlying hardware. This can be used to e.g. to turn off DLSS related UI elements.")); + UDLSSLibrary::DLSSSupport = UDLSSSupport::NotSupportedByPlatformAtBuildTime; +#endif +} + +void FDLSSBlueprintModule::ShutdownModule() +{ +#if WITH_DLSS && !UE_BUILD_SHIPPING + if (UDLSSLibrary::DLSSOnScreenMessagesDelegateHandle.IsValid()) + { + FCoreDelegates::OnGetOnScreenMessages.Remove(UDLSSLibrary::DLSSOnScreenMessagesDelegateHandle); + UDLSSLibrary::DLSSOnScreenMessagesDelegateHandle.Reset(); + } +#endif +} + + +#undef LOCTEXT_NAMESPACE + +IMPLEMENT_MODULE(FDLSSBlueprintModule, DLSSBlueprint) + diff --git a/plugins/DLSS/Source/DLSSBlueprint/Public/DLSSLibrary.h b/plugins/DLSS/Source/DLSSBlueprint/Public/DLSSLibrary.h new file mode 100644 index 00000000..a3a8add0 --- /dev/null +++ b/plugins/DLSS/Source/DLSSBlueprint/Public/DLSSLibrary.h @@ -0,0 +1,166 @@ +/* +* Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ +#pragma once + +#include "Modules/ModuleManager.h" + +#include "UObject/ObjectMacros.h" +#include "UObject/Object.h" +#include "Kismet/BlueprintFunctionLibrary.h" +#include "Misc/CoreDelegates.h" + +#include "DLSSLibrary.generated.h" + +class FDLSSUpscaler; +class FDelegateHandle; + +#ifndef WITH_DLSS +#define WITH_DLSS 0 +#endif + +UENUM(BlueprintType) +enum class UDLSSSupport : uint8 +{ + Supported UMETA(DisplayName = "Supported"), + + NotSupported UMETA(DisplayName = "Not Supported"), + NotSupportedIncompatibleHardware UMETA(DisplayName = "Incompatible Hardware", ToolTip = "DLSS requires an NVIDIA RTX GPU"), + NotSupportedDriverOutOfDate UMETA(DisplayName = "Driver Out of Date", ToolTip = "The driver is outdated. Also see GetDLSSMinimumDriverVersion"), + NotSupportedOperatingSystemOutOfDate UMETA(DisplayName = "Operating System Out of Date", ToolTip = "DLSS requires at least Windows 10 Fall 2017 Creators Update 64-bit, (v1709, build 16299)"), + NotSupportedByPlatformAtBuildTime UMETA(DisplayName = "Platform Not Supported At Build Time", ToolTip = "This platform doesn't not support DLSS at build time. Currently DLSS is only supported on Windows 64"), + NotSupportedIncompatibleAPICaptureToolActive UMETA(DisplayName = "Incompatible API Capture Tool Active", ToolTip = "DLSS is not compatible with an active API capture tool such as RenderDoc.") +}; + + +UENUM(BlueprintType) +enum class UDLSSMode : uint8 +{ + Off UMETA(DisplayName = "Off"), + Auto UMETA(DisplayName = "Auto"), + UltraQuality UMETA(DisplayName = "Ultra Quality"), + Quality UMETA(DisplayName = "Quality"), + Balanced UMETA(DisplayName = "Balanced"), + Performance UMETA(DisplayName = "Performance"), + UltraPerformance UMETA(DisplayName = "Ultra Performance") +}; + +UCLASS(MinimalAPI) +class UDLSSLibrary : public UBlueprintFunctionLibrary +{ + friend class FDLSSBlueprintModule; + GENERATED_BODY() +public: + + /** Checks whether DLSS/DLAA is supported by the current GPU. Further details can be retrieved via QueryDLSSSupport*/ + UFUNCTION(BlueprintPure, Category = "DLSS", meta = (DisplayName = "Is NVIDIA DLSS Supported")) + static DLSSBLUEPRINT_API bool IsDLSSSupported(); + + /** Checks whether DLSS/DLAA is supported by the current GPU */ + UFUNCTION(BlueprintPure, Category = "DLSS", meta = (DisplayName = "Query NVIDIA DLSS Support")) + static DLSSBLUEPRINT_API UDLSSSupport QueryDLSSSupport(); + + /** If QueryDLSSSupport returns "NotSupportedDriverOutOfDate", then MinDriverVersionMajor and MinDriverVersionMinor contains the required driver version.*/ + UFUNCTION(BlueprintPure, Category = "DLSS", meta = (DisplayName = "Get DLSS Minimum DriverVersion")) + static DLSSBLUEPRINT_API void GetDLSSMinimumDriverVersion(int32& MinDriverVersionMajor, int32& MinDriverVersionMinor); + + /** Enable/disable DLAA. Note that while DLAA is enabled, DLSS will be automatically disabled */ + UFUNCTION(BlueprintCallable, Category = "DLSS", meta = (DisplayName = "Enable DLAA")) + static DLSSBLUEPRINT_API void EnableDLAA(bool bEnabled); + + /** Checks whether DLAA is enabled */ + UFUNCTION(BlueprintPure, Category = "DLSS", meta = (DisplayName = "Is DLAA Enabled")) + static DLSSBLUEPRINT_API bool IsDLAAEnabled(); + + /** Checks whether a DLSS mode is supported */ + UFUNCTION(BlueprintPure, Category = "DLSS", meta = (DisplayName = "Is DLSS Mode Supported")) + static DLSSBLUEPRINT_API bool IsDLSSModeSupported(UDLSSMode DLSSMode); + + /** Retrieves all supported DLSS modes. Can be used to populate UI */ + UFUNCTION(BlueprintPure, Category = "DLSS", meta = (DisplayName = "Get Supported DLSS Modes")) + static DLSSBLUEPRINT_API TArray GetSupportedDLSSModes(); + + /** Provides additional details (such as screen percentage ranges) about a DLSS mode. Screen Resolution is required for Auto mode */ + UFUNCTION(BlueprintPure, Category = "DLSS", meta = (DisplayName = "Get DLSS Mode Information")) + static DLSSBLUEPRINT_API void GetDLSSModeInformation(UDLSSMode DLSSMode, FVector2D ScreenResolution, bool& bIsSupported, float& OptimalScreenPercentage, bool& bIsFixedScreenPercentage, float& MinScreenPercentage, float& MaxScreenPercentage, float& OptimalSharpness); + + /** The global screen percentage range that DLSS supports. Excludes DLSS modes with fixed screen percentage. Also see GetDLSSModeInformation*/ + UFUNCTION(BlueprintPure, Category = "DLSS", meta = (DisplayName = "Get DLSS Screenpercentage Range")) + static DLSSBLUEPRINT_API void GetDLSSScreenPercentageRange(float& MinScreenPercentage, float& MaxScreenPercentage); + + /** Sets the console variables to enable/disable DLSS (r.NGX.DLSS.Enable, r.NGX.DLSS.Quality)*/ + UFUNCTION(BlueprintCallable, Category = "DLSS", meta = (DisplayName = "Set DLSS Mode")) + static DLSSBLUEPRINT_API void SetDLSSMode(UDLSSMode DLSSMode); + + /* Reads the console variables to infer the current DLSS mode (r.NGX.DLSS.Enable, r.NGX.DLSS.Quality, r.TemporalAA.Upscaler)*/ + UFUNCTION(BlueprintPure, Category = "DLSS", meta = (DisplayName = "Get DLSS Mode")) + static DLSSBLUEPRINT_API UDLSSMode GetDLSSMode(); + + /* Sets the console variables to enable additional DLSS sharpening. Set to 0 to disable (r.NGX.DLSS.Sharpness) */ + UFUNCTION(BlueprintCallable, Category = "DLSS", meta = (DisplayName = "Set DLSS Sharpness")) + static DLSSBLUEPRINT_API void SetDLSSSharpness(float Sharpness); + + /*Reads the console variables to infer the current DLSS sharpness (r.NGX.DLSS.Sharpness) */ + UFUNCTION(BlueprintPure, Category = "DLSS", meta = (DisplayName = "Get DLSS Sharpness")) + static DLSSBLUEPRINT_API float GetDLSSSharpness(); + + /* Find a reasonable default DLSS mode based on current hardware */ + UFUNCTION(BlueprintPure, Category = "DLSS", meta = (DisplayName = "Get Default DLSS Mode")) + static DLSSBLUEPRINT_API UDLSSMode GetDefaultDLSSMode(); + + /* Allows conversion from BlueprintType enums. */ + static DLSSBLUEPRINT_API int32 ToDLSSQualityCVarValue(UDLSSMode InDLSSQualityMode); + +private: + static UDLSSSupport DLSSSupport; + +#if WITH_DLSS + static int32 MinDLSSDriverVersionMinor; + static int32 MinDLSSDriverVersionMajor; + static FDLSSUpscaler* DLSSUpscaler; + static bool bDLSSLibraryInitialized; + + static bool TryInitDLSSLibrary(); + +#if !UE_BUILD_SHIPPING + struct FDLSSErrorState + { + bool bIsDLSSModeUnsupported = false; + UDLSSMode InvalidDLSSMode = UDLSSMode::Off; + }; + + static FDLSSErrorState DLSSErrorState; + + static void GetDLSSOnScreenMessages(TMultiMap& OutMessages); + static FDelegateHandle DLSSOnScreenMessagesDelegateHandle; +#endif + +#endif +}; + +class FDLSSBlueprintModule final : public IModuleInterface +{ +public: + + /** IModuleInterface implementation */ + virtual void StartupModule() override; + virtual void ShutdownModule() override; + +private: +}; diff --git a/plugins/DLSS/Source/DLSSEditor/DLSSEditor.Build.cs b/plugins/DLSS/Source/DLSSEditor/DLSSEditor.Build.cs new file mode 100644 index 00000000..205253c3 --- /dev/null +++ b/plugins/DLSS/Source/DLSSEditor/DLSSEditor.Build.cs @@ -0,0 +1,84 @@ +/* +* Copyright (c) 2020 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +* +* NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +* property and proprietary rights in and to this material, related +* documentation and any modifications thereto. Any use, reproduction, +* disclosure or distribution of this material and related documentation +* without an express license agreement from NVIDIA CORPORATION or +* its affiliates is strictly prohibited. +*/ + + +using UnrealBuildTool; +using System.IO; + +public class DLSSEditor : ModuleRules +{ + public DLSSEditor(ReadOnlyTargetRules Target) : base(Target) + { + PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; + + PublicIncludePaths.AddRange( + new string[] { + } + ); + + + PrivateIncludePaths.AddRange( + new string[] { + Path.Combine(EngineDirectory,"Source/Runtime/Renderer/Private"), + Path.Combine(EngineDirectory,"Source/Editor/LevelEditor/Private"), + + Path.Combine(ModuleDirectory, "../DLSS/Private") + } + ); + + PublicDependencyModuleNames.AddRange( + new string[] + { + "DLSS", + } + ); + + PrivateDependencyModuleNames.AddRange( + new string[] + { + "Core", + "CoreUObject", + "Engine", + "RenderCore", + "Renderer", + "RHI", + + "Settings", + "LevelEditor", + "ToolMenus", + "Slate", + "SlateCore", + "EditorWidgets", + "EditorStyle", + "InputCore", + "UnrealEd", + "Projects", + + "NGX", + "DLSS", + "NGXRHI", + } + ); + // We can't quite check whether we have CL 16509387 (in UE5-Release) so we do this in a round about way + bool bUseSlotsArgumentsAPI = (Target.Version.MajorVersion == 5) && (Target.Version.BranchName != "++UE5+Release-5.0-EarlyAccess"); + PrivateDefinitions.Add(string.Format("USE_SLOT_SLOT_ARGUMENTS_API={0}", bUseSlotsArgumentsAPI ? "1" : "0")); + + // We can't quite check whether we have CL 16848904 (in UE5-Main) so we do this in a round about way + bool bSupportsPostProcessingScreenPercentage = (Target.Version.MajorVersion == 4) || + ((Target.Version.MajorVersion == 5) && (Target.Version.BranchName == "++UE5+Release-5.0-EarlyAccess")) + ; + PrivateDefinitions.Add(string.Format("SUPPORTS_POSTPROCESSING_SCREEN_PERCENTAGE={0}", bSupportsPostProcessingScreenPercentage ? "1" : "0")); + + // 4.x and early access 5.0 engines had GTemporalUpscaler interface + bool bEngineHasGTemporalUpscaler = (Target.Version.MajorVersion == 4) || (Target.Version.BranchName == "++UE5+Release-5.0-EarlyAccess"); + PrivateDefinitions.Add(string.Format("DLSS_ENGINE_HAS_GTEMPORALUPSCALER={0}", bEngineHasGTemporalUpscaler ? "1" : "0")); + } +} diff --git a/plugins/DLSS/Source/DLSSEditor/Private/DLSSEditor.cpp b/plugins/DLSS/Source/DLSSEditor/Private/DLSSEditor.cpp new file mode 100644 index 00000000..944c8711 --- /dev/null +++ b/plugins/DLSS/Source/DLSSEditor/Private/DLSSEditor.cpp @@ -0,0 +1,124 @@ +/* +* Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#include "DLSSEditor.h" + +#include "DLSSUpscaler.h" +#include "DLSSUpscalerEditor.h" +#include "DLSS.h" +#include "DLSSSettings.h" +#include "NGXRHI.h" + +#include "CoreMinimal.h" +#include "ISettingsModule.h" +#include "ISettingsSection.h" +#include "UObject/Class.h" +#include "UObject/WeakObjectPtr.h" + + + +#define LOCTEXT_NAMESPACE "FDLSSEditorModule" + +DEFINE_LOG_CATEGORY(LogDLSSEditor); + +void FDLSSEditorModule::StartupModule() +{ + UE_LOG(LogDLSSEditor, Log, TEXT("%s Enter"), ANSI_TO_TCHAR(__FUNCTION__)); + + check(GIsEditor); + + // verify that the other DLSS modules are correctly hooked up + { + IDLSSModuleInterface* DLSSModule = &FModuleManager::LoadModuleChecked(TEXT("DLSS")); + UE_LOG(LogDLSSEditor, Log, TEXT("DLSS module %p, QueryDLSSSupport = %u DLSSUpscaler = %p"), DLSSModule, DLSSModule->QueryDLSSSupport(), DLSSModule->GetDLSSUpscaler()); + + bIsDLSSAvailable = DLSSModule->QueryDLSSSupport() == EDLSSSupport::Supported; + if (bIsDLSSAvailable) + { + checkf(GCustomStaticScreenPercentage == DLSSModule->GetDLSSUpscaler(),TEXT("GCustomStaticScreenPercentage is not set to the DLSS upscaler. Please check that only one upscaling plugin is active.")); + + DLSSUpscalerEditor = MakeShared(DLSSModule->GetDLSSUpscaler()); + checkf(GCustomEditorStaticScreenPercentage == nullptr, TEXT("GCustomEditorStaticScreenPercentage is already in use. Please check that only one upscaling active is active.")); + GCustomEditorStaticScreenPercentage = DLSSUpscalerEditor.Get(); + } + } + + // register settings + { + ISettingsModule* SettingsModule = FModuleManager::GetModulePtr("Settings"); + if (SettingsModule != nullptr) + { + { + auto Settings = GetMutableDefault(); + if(bIsDLSSAvailable) + { + IDLSSModuleInterface* DLSSModule = &FModuleManager::LoadModuleChecked(TEXT("DLSS")); + const NGXRHI* NGXRHIExtensions = DLSSModule->GetDLSSUpscaler()->GetNGXRHI(); + Settings->GenericDLSSBinaryPath = NGXRHIExtensions->GetDLSSGenericBinaryInfo().Get<0>(); + Settings->bGenericDLSSBinaryExists = NGXRHIExtensions->GetDLSSGenericBinaryInfo().Get<1>(); + + Settings->CustomDLSSBinaryPath = NGXRHIExtensions->GetDLSSCustomBinaryInfo().Get<0>(); + Settings->bCustomDLSSBinaryExists = NGXRHIExtensions->GetDLSSCustomBinaryInfo().Get<1>(); + } + + ISettingsSectionPtr SettingsSection = SettingsModule->RegisterSettings("Project", "Plugins", "DLSS", + LOCTEXT("DLSSSettingsName", "NVIDIA DLSS"), + LOCTEXT("DLSSSettingsDescription", "Configure the NVIDIA DLSS plug-in."), + Settings + ); + } + + { + auto Settings = GetMutableDefault(); + + ISettingsSectionPtr SettingsSection = SettingsModule->RegisterSettings("Project", "Plugins", "DLSSOverride", + LOCTEXT("DLSSOverrideSettingsName", "NVIDIA DLSS Overrides (Local)"), + LOCTEXT("DLSSOverrideSettingsDescription", "Configure the local settings for the NVIDIA DLSS plug-in."), + Settings + ); + } + } + } + + UE_LOG(LogDLSSEditor, Log, TEXT("%s Leave"), ANSI_TO_TCHAR(__FUNCTION__)); +} + +void FDLSSEditorModule::ShutdownModule() +{ + UE_LOG(LogDLSSEditor, Log, TEXT("%s Enter"), ANSI_TO_TCHAR(__FUNCTION__)); + + if (bIsDLSSAvailable) + { + GCustomEditorStaticScreenPercentage = nullptr; + DLSSUpscalerEditor = nullptr; + } + + UE_LOG(LogDLSSEditor, Log, TEXT("%s Leave"), ANSI_TO_TCHAR(__FUNCTION__)); +} + +FDLSSUpscalerEditor* FDLSSEditorModule::GetDLSSUpscalerEditor() const +{ + return DLSSUpscalerEditor.Get(); +} + +#undef LOCTEXT_NAMESPACE + +IMPLEMENT_MODULE(FDLSSEditorModule, DLSSEditor) + diff --git a/plugins/DLSS/Source/DLSSEditor/Private/DLSSUpscalerEditor.cpp b/plugins/DLSS/Source/DLSSEditor/Private/DLSSUpscalerEditor.cpp new file mode 100644 index 00000000..931ebcb9 --- /dev/null +++ b/plugins/DLSS/Source/DLSSEditor/Private/DLSSUpscalerEditor.cpp @@ -0,0 +1,549 @@ +/* +* Copyright (c) 2020 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +* +* NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +* property and proprietary rights in and to this material, related +* documentation and any modifications thereto. Any use, reproduction, +* disclosure or distribution of this material and related documentation +* without an express license agreement from NVIDIA CORPORATION or +* its affiliates is strictly prohibited. +*/ + +#include "DLSSUpscalerEditor.h" +#include "DLSSUpscaler.h" + +#include "LegacyScreenPercentageDriver.h" + +#include "DLSSSettings.h" + +#include "Editor.h" +#include "SLevelViewportToolBar.h" +#include "ToolMenus.h" +#include "Widgets/Layout/SBox.h" +#include "Widgets/Input/SSpinBox.h" +#include "Framework/Commands/Commands.h" + +#include "ISettingsModule.h" +#include "ISettingsSection.h" +#include "UObject/Class.h" +#include "UObject/WeakObjectPtr.h" +#include "Widgets/SBoxPanel.h" +#include "Widgets/SNullWidget.h" +#include "Styling/SlateTypes.h" +#include "Widgets/Layout/SBorder.h" +#include "Widgets/Text/STextBlock.h" +#include "Widgets/Input/SButton.h" +#include "Widgets/Input/SCheckBox.h" +#include "Widgets/Input/SSlider.h" +#include "Widgets/Layout/SGridPanel.h" + +#include "EditorStyleSet.h" +#include "Editor.h" +#include "Settings/EditorSettings.h" +#include "Editor/EditorPerformanceSettings.h" + +#define LOCTEXT_NAMESPACE "FDLSSEditorModule" + + +// We can't quite check whether we have CL 16509387 in UE5-Release-5.0 so we do this in a round about way by branch name +// We also can't do a preprocessor string compare in C++ so we resolve this in DLSSEditor.Build.cs; +#ifndef USE_SLOT_SLOT_ARGUMENTS_API +#define USE_SLOT_SLOT_ARGUMENTS_API 1 +#endif + +// We can't quite check whether we have CL 16848904 (in UE5-Main) so we do this in a round about way +#ifndef SUPPORTS_POSTPROCESSING_SCREEN_PERCENTAGE +#define SUPPORTS_POSTPROCESSING_SCREEN_PERCENTAGE 1 +#endif + +// DLSS_TODO move the implementation of this to FDLSSUpscalerEditor? +class DLSSEDITOR_API SDLSSSettings : public SCompoundWidget +{ +public: + + SLATE_BEGIN_ARGS(SDLSSSettings) + {} + SLATE_ARGUMENT(FDLSSUpscalerEditor*, UpscalerEditor) + SLATE_ARGUMENT(ICustomEditorStaticScreenPercentage::FViewportMenuEntryArguments,ViewportMenuEntryArguments) + + SLATE_END_ARGS() + + // Widget construction + void Construct(const FArguments& InArgs); + + ~SDLSSSettings(); +private: + + // Makes a general quality level header button widget + TSharedRef MakeHeaderButtonWidget(const FText& InName, EDLSSQualityMode InQualityLevel, const FText& InToolTip); + + // Callback for when a quality level header button is pressed + FReply OnHeaderClicked(EDLSSQualityMode InQualityLevel); + + + // Create a gridslot for the group quality level with all the required formatting +#if USE_SLOT_SLOT_ARGUMENTS_API + SGridPanel::FSlot::FSlotArguments MakeGridSlot(int32 InCol, int32 InRow, int32 InColSpan = 1, int32 InRowSpan = 1); +#else + SGridPanel::FSlot& MakeGridSlot(int32 InCol, int32 InRow, int32 InColSpan = 1, int32 InRowSpan = 1); +#endif + +private: + + FDLSSUpscalerEditor* UpscalerEditor; + ICustomEditorStaticScreenPercentage::FViewportMenuEntryArguments ViewportMenuEntryArguments; +}; + +TSharedRef SDLSSSettings::MakeHeaderButtonWidget(const FText& InName, EDLSSQualityMode InQualityLevel, const FText& InToolTip) +{ + return SNew(SButton) + .OnClicked(this, &SDLSSSettings::OnHeaderClicked, InQualityLevel) + .ToolTipText(InToolTip) + .Content() + [ + SNew(STextBlock) + .Text(InName) + ]; +} + +FReply SDLSSSettings::OnHeaderClicked(EDLSSQualityMode InQualityLevel) +{ + UE_LOG(LogDLSSEditor, Log, TEXT("%s InQualityLevel = %d"), ANSI_TO_TCHAR(__FUNCTION__), InQualityLevel); + if (InQualityLevel != EDLSSQualityMode::NumValues) + { + const int32 ScreenPercentage = UpscalerEditor->DLSSUpscaler->GetOptimalResolutionFractionForQuality(InQualityLevel) * 100.0f; + + UpscalerEditor->OnQualityModeSelected(InQualityLevel, ViewportMenuEntryArguments); + + UpscalerEditor->OnScreenPercentageValueChanged(ScreenPercentage, ViewportMenuEntryArguments); + UpscalerEditor->OnSetPreviewCustomTemporalUpscaler(true, ViewportMenuEntryArguments); + + + } + else + { + UpscalerEditor->OnSetPreviewCustomTemporalUpscaler(false, ViewportMenuEntryArguments); + } + + return FReply::Handled(); +} +#if USE_SLOT_SLOT_ARGUMENTS_API +SGridPanel::FSlot::FSlotArguments SDLSSSettings::MakeGridSlot(int32 InCol, int32 InRow, int32 InColSpan /*= 1*/, int32 InRowSpan /*= 1*/) +{ + float PaddingH = 2.0f; + float PaddingV = InRow == 0 ? 8.0f : 2.0f; + return MoveTemp(SGridPanel::Slot(InCol, InRow) + .Padding(PaddingH, PaddingV) + .RowSpan(InRowSpan) + .ColumnSpan(InColSpan)); +} +#else +SGridPanel::FSlot& SDLSSSettings::MakeGridSlot(int32 InCol, int32 InRow, int32 InColSpan /*= 1*/, int32 InRowSpan /*= 1*/) +{ + float PaddingH = 2.0f; + float PaddingV = InRow == 0 ? 8.0f : 2.0f; + return SGridPanel::Slot(InCol, InRow) + .Padding(PaddingH, PaddingV) + .RowSpan(InRowSpan) + .ColumnSpan(InColSpan); +} +#endif +void SDLSSSettings::Construct(const FArguments& InArgs) +{ + this->UpscalerEditor = InArgs._UpscalerEditor; + this->ViewportMenuEntryArguments = InArgs._ViewportMenuEntryArguments; + + auto TitleFont = FEditorStyle::GetFontStyle(TEXT("MenuItem.Font")); + + static float QualityColumnCoeff = 1.0f; + + static_assert(int32(EDLSSQualityMode::NumValues) == 5, "dear DLSS plugin NVIDIA developer, please update this code to handle the new enum values"); + + auto MakeWidget = [this](EDLSSQualityMode QualityMode, const FText& InName, const FText& InToolTip) + { + const bool bSupported = UpscalerEditor->DLSSUpscaler->IsQualityModeSupported(QualityMode); + if (!bSupported) + { + return SNullWidget::NullWidget; + } + else + { + return MakeHeaderButtonWidget(InName, QualityMode, InToolTip); + } + }; + + TSharedRef ButtonMatrix = + SNew(SGridPanel) + .FillColumn(0, QualityColumnCoeff) + + MakeGridSlot(0, 0).VAlign(VAlign_Center)[SNew(STextBlock).Text(LOCTEXT("DLSSModeLabel" , "DLSS Mode")).Font(TitleFont)] + + MakeGridSlot(1, 0)[MakeHeaderButtonWidget(LOCTEXT("DLSSModeOffLabel", "Off"), EDLSSQualityMode::NumValues, LOCTEXT("DLSSModeOff" , "Turn DLSS off and use built-in TAA"))] + + MakeGridSlot(2, 0)[MakeWidget(EDLSSQualityMode::UltraQuality, LOCTEXT("DLSSModeUltraQualityLabel", "Ultra Quality"), LOCTEXT("DLSSModeUltraQuality", "Set DLSS mode to Ultra Quality"))] + + MakeGridSlot(3, 0)[MakeWidget(EDLSSQualityMode::Quality, LOCTEXT("DLSSModeQualityLabel", "Quality"), LOCTEXT("DLSSModeQuality", "Set DLSS mode to Quality"))] + + MakeGridSlot(4, 0)[MakeWidget(EDLSSQualityMode::Balanced, LOCTEXT("DLSSModeBalancedLabel", "Balanced"), LOCTEXT("DLSSModeBalanced", "Set DLSS mode to Balanced"))] + + MakeGridSlot(5, 0)[MakeWidget(EDLSSQualityMode::Performance, LOCTEXT("DLSSModePerformanceLabel", "Performance"), LOCTEXT("DLSSModePerformance", "Set DLSS mode to Performance"))] + + MakeGridSlot(6, 0)[MakeWidget(EDLSSQualityMode::UltraPerformance, LOCTEXT("DLSSModeUltraPerformanceLabel", "Ultra Performance"), LOCTEXT("DLSSModeUltraPerformance", "Set DLSS mode to Ultra Performance"))]; + + this->ChildSlot + .HAlign(EHorizontalAlignment::HAlign_Fill) + [ + SNew(SVerticalBox) + + SVerticalBox::Slot() + [ + ButtonMatrix + ] + ]; +} + +SDLSSSettings::~SDLSSSettings() +{ + +} +static void MakeDLSSQualitySettingsMenu(UToolMenu* InMenu, FDLSSUpscalerEditor* DLSSUpscalerEditor, const ICustomEditorStaticScreenPercentage::FViewportMenuEntryArguments Arguments) +{ + { + FToolMenuSection& Section = InMenu->AddSection("Section"); + Section.AddEntry(FToolMenuEntry::InitWidget("DLSSQualitySettings", SNew(SDLSSSettings).UpscalerEditor(DLSSUpscalerEditor).ViewportMenuEntryArguments(Arguments), FText(), true)); + } +} + +class DLSSEDITOR_API FFDLSSEditorViewportClientData final : public FEditorViewportClient::ICustomTemporalUpscalerData +{ +public: + + bool bIsDLSSEnabled; + float ResolutionFraction; + + EDLSSQualityMode DLSSQualityMode = EDLSSQualityMode::NumValues; + float MinResolutionFraction = 0.0f; + float MaxResolutionFraction = 1.0f; + bool bIsFixedResolutionFraction = false; +}; + +TSharedPtr FDLSSUpscalerEditor::GetOrCreateDLSSViewportData(FEditorViewportClient* ViewportClient) +{ + check(ViewportClient); + TSharedPtr CustomData = ViewportClient->GetCustomTemporalUpscalerData(); + TSharedPtr DLSSViewportData; + + if (CustomData) + { + DLSSViewportData = StaticCastSharedPtr(CustomData); + check(DLSSViewportData); + } + else + { + DLSSViewportData = MakeShared< FFDLSSEditorViewportClientData>(); + ViewportClient->SetCustomTemporalUpscalerData(DLSSViewportData); + } + return DLSSViewportData; +} + +FDLSSUpscalerEditor::FDLSSUpscalerEditor(FDLSSUpscaler* InDLSSUpscaler) + : DLSSUpscaler(InDLSSUpscaler) +{ + +} + +FDLSSUpscalerEditor::~FDLSSUpscalerEditor() +{ + UE_LOG(LogDLSSEditor, Log, TEXT("%s Enter"), ANSI_TO_TCHAR(__FUNCTION__)); + UE_LOG(LogDLSSEditor, Log, TEXT("%s Leave"), ANSI_TO_TCHAR(__FUNCTION__)); +} + + +void FDLSSUpscalerEditor::SetupEditorViewFamily(FSceneViewFamily& ViewFamily, FEditorViewportClient* ViewportClient) +{ + + // this purpusefully does not check "r.TemporalAA.Upscaler", which is used at runtime since the enable/disable comes from DLSSViewportData->bIsDLSSEnabled + // however make sure that the upscaler is "ours" + static const auto CVarDLSSEnable = IConsoleManager::Get().FindConsoleVariable(TEXT("r.NGX.DLSS.Enable")); + const bool bDLSSActive = CVarDLSSEnable && (CVarDLSSEnable->GetInt() != 0); + + static const auto CVarDLSSAutomationTesting = IConsoleManager::Get().FindConsoleVariable(TEXT("r.NGX.DLSS.AutomationTesting")); + const bool bDLSSActiveWithAutomation = !GIsAutomationTesting || (GIsAutomationTesting && CVarDLSSAutomationTesting && (CVarDLSSAutomationTesting->GetInt() != 0)); + +#if DLSS_ENGINE_HAS_GTEMPORALUPSCALER + if ((GTemporalUpscaler == DLSSUpscaler) && bDLSSActive && bDLSSActiveWithAutomation) +#else + if (bDLSSActive && bDLSSActiveWithAutomation) +#endif + { + check(GIsEditor); + checkf(GCustomStaticScreenPercentage == DLSSUpscaler, TEXT("GCustomStaticScreenPercentage is not set to the DLSS upscaler. Please check that only one upscaling plugin is active.")); + checkf(GCustomEditorStaticScreenPercentage == this, TEXT("GCustomEditorStaticScreenPercentage is not set to the DLSS upscaler. Please check that only one upscaling plugin is active.")); + check(ViewportClient); + + TSharedPtr DLSSViewportData = GetOrCreateDLSSViewportData(ViewportClient); + + if(DLSSViewportData->bIsDLSSEnabled && EnableDLSSInEditorViewports()) + { + ViewFamily.SetTemporalUpscalerInterface(DLSSUpscaler->GetUpscalerInstanceForViewFamily(DLSSUpscaler, DLSSViewportData->DLSSQualityMode)); + // DLSS_TODO figure out what to do, should this ever be the case + checkf(ViewFamily.GetScreenPercentageInterface() == nullptr, TEXT("ViewFamily.GetScreenPercentageInterface() is already in use. Please check that only one upscaling plugin active is active.")); + + ViewFamily.EngineShowFlags.ScreenPercentage = true; + + const float ResolutionFraction = DLSSViewportData->ResolutionFraction; + ViewFamily.SetScreenPercentageInterface(new FLegacyScreenPercentageDriver( + ViewFamily, ResolutionFraction +#if SUPPORTS_POSTPROCESSING_SCREEN_PERCENTAGE + /* AllowPostProcessSettingsScreenPercentage = */, false +#endif + )); + } + } +} + +bool FDLSSUpscalerEditor::GenerateEditorViewportOptionsMenuEntry(const ICustomEditorStaticScreenPercentage::FViewportMenuEntryArguments& Arguments) +{ + // this purpusefully does not check "r.TemporalAA.Upscaler", which is used at runtime since the enable/disable comes from DLSSViewportData->bIsDLSSEnabled + // however make sure that the upscaler is "ours" + + static const auto CVarDLSSEnable = IConsoleManager::Get().FindConsoleVariable(TEXT("r.NGX.DLSS.Enable")); + +#if DLSS_ENGINE_HAS_GTEMPORALUPSCALER + if ((GTemporalUpscaler == DLSSUpscaler) && CVarDLSSEnable && (CVarDLSSEnable->GetInt() != 0)) +#else + if (CVarDLSSEnable && (CVarDLSSEnable->GetInt() != 0)) +#endif + { + check(GIsEditor); + checkf(GCustomStaticScreenPercentage == DLSSUpscaler, TEXT("GCustomStaticScreenPercentage is not set to the DLSS upscaler. Please check that only one upscaling plugin is active.")); + checkf(GCustomEditorStaticScreenPercentage == this, TEXT("GCustomEditorStaticScreenPercentage is not set to the DLSS upscaler. Please check that only one upscaling plugin is active.")); + + FLevelEditorViewportClient& Levelviewport = Arguments.Viewport->GetLevelViewportClient(); + + FEngineShowFlags ShowFlags = Levelviewport.EngineShowFlags; + + // DLSS_TODO is there a better way to detect whether TAA (and thus DLSS) is turned off? + // maybe pass this in as a flag or have the callsite do this + // FEditorViewportClient::Draw calls EngineShowFlagOrthographicOverride(IsPerspective(), ViewFamily.EngineShowFlags); which turns TAA off. And DLSS is a TAA flavor + // EngineShowFlags.TemporalAA = 0; + // EngineShowFlags.MotionBlur = 0; + // but that well only be called later so emulate this here. + + if (!ShowFlags.Lighting) + { + return false; + } + + if (!Levelviewport.IsPerspective()) + { + return false; + } + + if (!EnableDLSSInEditorViewports()) + { + return false; + } + + const bool bUseSubmenuForDLSSSettings = true; + + if(bUseSubmenuForDLSSSettings) + { + Arguments.Section->AddSubMenu( + "DLSSSettings", + LOCTEXT("DLSSSettingsSubMenu", "DLSS Settings"), + LOCTEXT("DLSSSettingsSubMenu_ToolTip", "Open the DLSS settings"), + FNewToolMenuDelegate::CreateStatic(&MakeDLSSQualitySettingsMenu, this, Arguments)); + } + else + { + Arguments.Section->AddEntry(FToolMenuEntry::InitWidget("DLSSSettings", SNew(SDLSSSettings).UpscalerEditor(this).ViewportMenuEntryArguments(Arguments), FText(), true)); + } + + TSharedPtr DLSSViewportData = GetOrCreateDLSSViewportData(&Arguments.Viewport->GetLevelViewportClient()); + + if (DLSSViewportData->bIsDLSSEnabled) + { + Arguments.Section->AddEntry(FToolMenuEntry::InitWidget("DLSSScreenPercentage", GenerateScreenPercentageMenu(Arguments), LOCTEXT("DLSSScreenPercentage", "Screen Percentage (DLSS)"))); + + const int32 PreviewScreenPercentageMin = DLSSViewportData->MinResolutionFraction * 100.0f; + const int32 PreviewScreenPercentageMax = DLSSViewportData->MaxResolutionFraction * 100.0f; + + // clamp the current preview screen percentage (which might be 100%) to the supported DLSS range + this->OnScreenPercentageValueChanged(FMath::Clamp(this->OnGetScreenPercentageValue(Arguments), PreviewScreenPercentageMin, PreviewScreenPercentageMax), Arguments); + return true; + } + else + { + return false; + } + + + } + else + { + return false; + } + +} + +TSharedRef FDLSSUpscalerEditor::GenerateScreenPercentageMenu(const ICustomEditorStaticScreenPercentage::FViewportMenuEntryArguments& Arguments) const +{ + TSharedPtr DLSSViewportData = GetOrCreateDLSSViewportData(&Arguments.Viewport->GetLevelViewportClient()); + + const int32 PreviewScreenPercentageMin = DLSSViewportData->MinResolutionFraction * 100.0f; + const int32 PreviewScreenPercentageMax = DLSSViewportData->MaxResolutionFraction * 100.0f; +#if ENGINE_MAJOR_VERSION==4 + return + SNew(SBox) + .HAlign(HAlign_Right) + .IsEnabled(this, &FDLSSUpscalerEditor::OnScreenPercentageIsEnabled, Arguments) + [ + SNew(SBox) + .Padding(FMargin(4.0f, 0.0f, 0.0f, 0.0f)) + .WidthOverride(100.0f) + [ + SNew(SSpinBox) + .Font(FEditorStyle::GetFontStyle(TEXT("MenuItem.Font"))) + .MinValue(PreviewScreenPercentageMin) + .MaxValue(PreviewScreenPercentageMax) + .Value(this, &FDLSSUpscalerEditor::OnGetScreenPercentageValue, Arguments) + .OnValueChanged(this, &FDLSSUpscalerEditor::OnScreenPercentageValueChanged, Arguments) + .ToolTipText( + DLSSViewportData->bIsFixedResolutionFraction ? + FText(LOCTEXT("DLSSScreenPercentageTooltipFixedResolution", "This DLSS quality mode has a fixed screen percentage and cannot be adjusted at runtime.")) : + FText( LOCTEXT("DLSSScreenPercentageTooltip", + "At runtime, the screen percentage is controlled by the r.NGX.DLSS.Quality cvar. To enable adjusting the screenpercentage directly in the editor, set the \"Enable Screenpercentage Manipulation In DLSS Editor Viewports\" setting under Editor Preferences -> Plugins -> NVIDIA DLSS")) + ) + ] + ]; +#elif ENGINE_MAJOR_VERSION==5 + return + SNew(SBox) + .HAlign(HAlign_Right) + .IsEnabled(this, &FDLSSUpscalerEditor::OnScreenPercentageIsEnabled, Arguments) + [ + SNew(SBox) + .Padding(FMargin(4.0f, 0.0f, 0.0f, 0.0f)) + .WidthOverride(100.0f) + [ + SNew(SBorder) + .BorderImage(FAppStyle::Get().GetBrush("Menu.WidgetBorder")) + .Padding(FMargin(1.0f)) + [ + SNew(SSpinBox) + .Style(&FAppStyle::Get(), "Menu.SpinBox") + .Font(FEditorStyle::GetFontStyle(TEXT("MenuItem.Font"))) + .MinValue(PreviewScreenPercentageMin) + .MaxValue(PreviewScreenPercentageMax) + .Value(this, &FDLSSUpscalerEditor::OnGetScreenPercentageValue, Arguments) + .OnValueChanged(this, &FDLSSUpscalerEditor::OnScreenPercentageValueChanged, Arguments) + .ToolTipText( + DLSSViewportData->bIsFixedResolutionFraction ? + FText(LOCTEXT("DLSSScreenPercentageTooltipFixedResolution", "This DLSS quality mode has a fixed screen percentage and cannot be adjusted at runtime.")) : + FText(LOCTEXT("DLSSScreenPercentageTooltip", + "At runtime, the screen percentage is controlled by the r.NGX.DLSS.Quality cvar. To enable adjusting the screenpercentage directly in the editor, set the \"Enable Screenpercentage Manipulation In DLSS Editor Viewports\" setting under Editor Preferences -> Plugins -> NVIDIA DLSS")) + ) + ] + ] + ]; +#else +#error "ENGINE_MAJOR_VERSION must be either 4 or 5" +#endif +} + +bool FDLSSUpscalerEditor::EnableScreenpercentageInEditorViewports() const +{ + if (GetDefault()->EnableScreenpercentageManipulationInDLSSEditorViewportsOverride == EDLSSSettingOverride::UseProjectSettings) + { + return GetDefault()->bEnableScreenpercentageManipulationInDLSSEditorViewports; + } + else + { + return GetDefault()->EnableScreenpercentageManipulationInDLSSEditorViewportsOverride == EDLSSSettingOverride::Enabled; + } +} + +bool FDLSSUpscalerEditor::EnableDLSSInEditorViewports() const +{ + if (GetDefault()->EnableDLSSInEditorViewportsOverride == EDLSSSettingOverride::UseProjectSettings) + { + return GetDefault()->bEnableDLSSInEditorViewports; + } + else + { + return GetDefault()->EnableDLSSInEditorViewportsOverride == EDLSSSettingOverride::Enabled; + } +} + + +bool FDLSSUpscalerEditor::OnScreenPercentageIsEnabled(const ICustomEditorStaticScreenPercentage::FViewportMenuEntryArguments Arguments) const +{ + check(DLSSUpscaler); + TSharedPtr DLSSViewportData = GetOrCreateDLSSViewportData(&Arguments.Viewport->GetLevelViewportClient()); + // adapted from SLevelViewportToolBar::OnScreenPercentageIsEnabled() + + return EnableScreenpercentageInEditorViewports() && !DLSSViewportData->bIsFixedResolutionFraction && Arguments.Viewport->GetLevelViewportClient().SupportsPreviewResolutionFraction(); +} + +int32 FDLSSUpscalerEditor::OnGetScreenPercentageValue(const ICustomEditorStaticScreenPercentage::FViewportMenuEntryArguments Arguments) const +{ + // adapted from SLevelViewportToolBar::OnGetScreenPercentageValue(), using DLSSViewportData->ResolutionFraction + + // We expose the resolution fraction derived from DPI, to not lie to the artist when screen percentage = 100%. + + TSharedPtr DLSSViewportData = GetOrCreateDLSSViewportData(&Arguments.Viewport->GetLevelViewportClient()); + + return FMath::RoundToInt(FMath::Clamp( + DLSSViewportData->ResolutionFraction, + DLSSViewportData->MinResolutionFraction, + DLSSViewportData->MaxResolutionFraction) * 100.0f); +} + +void FDLSSUpscalerEditor::OnScreenPercentageValueChanged(int32 NewValue, const ICustomEditorStaticScreenPercentage::FViewportMenuEntryArguments Arguments) const +{ + // adapted from SLevelViewportToolBar::OnScreenPercentageValueChanged() and SetPreviewScreenPercentage() + FLevelEditorViewportClient& ViewportClient = Arguments.Viewport->GetLevelViewportClient(); + + TSharedPtr DLSSViewportData = GetOrCreateDLSSViewportData(&ViewportClient); + DLSSViewportData->ResolutionFraction = (NewValue / 100.0f); + + ViewportClient.Invalidate(); +} + +bool FDLSSUpscalerEditor::OnGetPreviewCustomTemporalUpscaler(const ICustomEditorStaticScreenPercentage::FViewportMenuEntryArguments Arguments) const +{ + return GetOrCreateDLSSViewportData(&Arguments.Viewport->GetLevelViewportClient())->bIsDLSSEnabled; +} + +void FDLSSUpscalerEditor::OnSetPreviewCustomTemporalUpscaler(bool NewValue, const ICustomEditorStaticScreenPercentage::FViewportMenuEntryArguments Arguments) const +{ + FLevelEditorViewportClient& ViewportClient = Arguments.Viewport->GetLevelViewportClient(); + TSharedPtr DLSSViewportData = GetOrCreateDLSSViewportData(&ViewportClient); + DLSSViewportData->bIsDLSSEnabled = NewValue; + ViewportClient.Invalidate(); +} + +void FDLSSUpscalerEditor::OnPreviewCustomTemporalUpscalerChanged(bool NewValue, const ICustomEditorStaticScreenPercentage::FViewportMenuEntryArguments Arguments) const +{ + FLevelEditorViewportClient& ViewportClient = Arguments.Viewport->GetLevelViewportClient(); + TSharedPtr DLSSViewportData = GetOrCreateDLSSViewportData(&ViewportClient); + DLSSViewportData->bIsDLSSEnabled = NewValue; + ViewportClient.Invalidate(); +} + +void FDLSSUpscalerEditor::OnQualityModeSelected(EDLSSQualityMode InQualityLevel, const ICustomEditorStaticScreenPercentage::FViewportMenuEntryArguments Arguments) +{ + TSharedPtr DLSSViewportData = GetOrCreateDLSSViewportData(&Arguments.Viewport->GetLevelViewportClient()); + + DLSSViewportData->bIsFixedResolutionFraction = DLSSUpscaler->IsFixedResolutionFraction(InQualityLevel); + DLSSViewportData->DLSSQualityMode = InQualityLevel; + + if (DLSSViewportData->bIsFixedResolutionFraction) + { + DLSSViewportData->MinResolutionFraction = DLSSUpscaler->GetOptimalResolutionFractionForQuality(InQualityLevel); + DLSSViewportData->MaxResolutionFraction = DLSSUpscaler->GetOptimalResolutionFractionForQuality(InQualityLevel); + } + else + { + DLSSViewportData->MinResolutionFraction = DLSSUpscaler->GetMinUpsampleResolutionFraction(); + DLSSViewportData->MaxResolutionFraction = DLSSUpscaler->GetMaxUpsampleResolutionFraction(); + } +} + +#undef LOCTEXT_NAMESPACE + + + diff --git a/plugins/DLSS/Source/DLSSEditor/Public/DLSSEditor.h b/plugins/DLSS/Source/DLSSEditor/Public/DLSSEditor.h new file mode 100644 index 00000000..ea9e8442 --- /dev/null +++ b/plugins/DLSS/Source/DLSSEditor/Public/DLSSEditor.h @@ -0,0 +1,50 @@ +/* +* Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#pragma once + +#include "Modules/ModuleManager.h" + + +class FDLSSUpscalerEditor; + +class IDLSSEditorModuleInterface : public IModuleInterface +{ +public: + virtual FDLSSUpscalerEditor* GetDLSSUpscalerEditor() const = 0; +}; + +class FDLSSEditorModule final : public IDLSSEditorModuleInterface +{ +public: + + /** IModuleInterface implementation */ + virtual void StartupModule() final; + virtual void ShutdownModule() final; + + + // Inherited via IDLSSEditorModuleInterface + virtual FDLSSUpscalerEditor* GetDLSSUpscalerEditor() const ; +private: + TSharedPtr DLSSUpscalerEditor; + bool bIsDLSSAvailable = false; +}; + + diff --git a/plugins/DLSS/Source/DLSSEditor/Public/DLSSUpscalerEditor.h b/plugins/DLSS/Source/DLSSEditor/Public/DLSSUpscalerEditor.h new file mode 100644 index 00000000..3a95c58a --- /dev/null +++ b/plugins/DLSS/Source/DLSSEditor/Public/DLSSUpscalerEditor.h @@ -0,0 +1,70 @@ +/* +* Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#pragma once + + +#include "CustomEditorStaticScreenPercentage.h" + +DECLARE_LOG_CATEGORY_EXTERN(LogDLSSEditor, Log, All); + +class FDLSSUpscaler; +enum class EDLSSQualityMode; +class SWidget; +class SLevelViewportToolBar; +class SDLSSSettings; +class FFDLSSEditorViewportClientData; +class FEditorViewportClient; + +class DLSSEDITOR_API FDLSSUpscalerEditor : public TSharedFromThis, public ICustomEditorStaticScreenPercentage +{ + friend class SDLSSSettings; +public: + FDLSSUpscalerEditor(FDLSSUpscaler* InDLSSUpscaler); + virtual ~FDLSSUpscalerEditor(); + + // Inherited via ICustomEditorStaticScreenPercentage + virtual bool GenerateEditorViewportOptionsMenuEntry(const ICustomEditorStaticScreenPercentage::FViewportMenuEntryArguments& Arguments) final; + virtual void SetupEditorViewFamily(FSceneViewFamily& ViewFamily, FEditorViewportClient* ViewportClient) final; + + +private: + + bool OnScreenPercentageIsEnabled(const ICustomEditorStaticScreenPercentage::FViewportMenuEntryArguments Arguments) const; + int32 OnGetScreenPercentageValue(const ICustomEditorStaticScreenPercentage::FViewportMenuEntryArguments Arguments) const; + void OnScreenPercentageValueChanged(int32 NewValue, const ICustomEditorStaticScreenPercentage::FViewportMenuEntryArguments Arguments) const; + + + bool OnGetPreviewCustomTemporalUpscaler(const ICustomEditorStaticScreenPercentage::FViewportMenuEntryArguments Arguments) const; + void OnSetPreviewCustomTemporalUpscaler(bool NewValue, const ICustomEditorStaticScreenPercentage::FViewportMenuEntryArguments Arguments) const; + void OnPreviewCustomTemporalUpscalerChanged(bool NewValue, const ICustomEditorStaticScreenPercentage::FViewportMenuEntryArguments Arguments) const; + + + bool EnableScreenpercentageInEditorViewports() const; + bool EnableDLSSInEditorViewports() const; + TSharedRef GenerateScreenPercentageMenu(const ICustomEditorStaticScreenPercentage::FViewportMenuEntryArguments& Arguments) const; + + FDLSSUpscaler* DLSSUpscaler; + + void OnQualityModeSelected(EDLSSQualityMode InQualityLevel, const ICustomEditorStaticScreenPercentage::FViewportMenuEntryArguments Arguments); + + static TSharedPtr GetOrCreateDLSSViewportData(FEditorViewportClient* ViewportClient); +}; + diff --git a/plugins/DLSS/Source/DLSSUtility/DLSSUtility.Build.cs b/plugins/DLSS/Source/DLSSUtility/DLSSUtility.Build.cs new file mode 100644 index 00000000..e59c1b6a --- /dev/null +++ b/plugins/DLSS/Source/DLSSUtility/DLSSUtility.Build.cs @@ -0,0 +1,57 @@ +/* +* Copyright (c) 2020 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +* +* NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +* property and proprietary rights in and to this material, related +* documentation and any modifications thereto. Any use, reproduction, +* disclosure or distribution of this material and related documentation +* without an express license agreement from NVIDIA CORPORATION or +* its affiliates is strictly prohibited. +*/ + +using UnrealBuildTool; +using System.IO; + +public class DLSSUtility : ModuleRules +{ + public DLSSUtility(ReadOnlyTargetRules Target) : base(Target) + { + PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; + + PublicIncludePaths.AddRange( + new string[] { + } + ); + + PrivateIncludePaths.AddRange( + new string[] { + Path.Combine(EngineDirectory,"Source/Runtime/Renderer/Private"), + } + ); + + + PublicDependencyModuleNames.AddRange( + new string[] + { + "Core", + "RenderCore", + "Renderer", + + } + ); + + + PrivateDependencyModuleNames.AddRange( + new string[] + { + "Engine", + "RHI", + "Projects" + } + ); + + // 4.x and early access 5.0 engines used FVector2D type instead of FVector2f type for shader parameters + bool bEngineUsesFVector2D = (Target.Version.MajorVersion == 4) || (Target.Version.BranchName == "++UE5+Release-5.0-EarlyAccess"); + PrivateDefinitions.Add(string.Format("DLSS_ENGINE_USES_FVECTOR2D={0}", bEngineUsesFVector2D ? "1" : "0")); + } +} diff --git a/plugins/DLSS/Source/DLSSUtility/Private/DLSSUtility.cpp b/plugins/DLSS/Source/DLSSUtility/Private/DLSSUtility.cpp new file mode 100644 index 00000000..0600b19c --- /dev/null +++ b/plugins/DLSS/Source/DLSSUtility/Private/DLSSUtility.cpp @@ -0,0 +1,42 @@ +/* +* Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#include "DLSSUtility.h" +#include "Modules/ModuleManager.h" +#include "Interfaces/IPluginManager.h" +#include "ShaderCore.h" + +#define LOCTEXT_NAMESPACE "FDLSSUtilityModule" + +void FDLSSUtilityModule::StartupModule() +{ + FString PluginShaderDir = FPaths::Combine(IPluginManager::Get().FindPlugin(TEXT("DLSS"))->GetBaseDir(), TEXT("Shaders")); + AddShaderSourceDirectoryMapping(TEXT("/Plugin/DLSS"), PluginShaderDir); + +} + +void FDLSSUtilityModule::ShutdownModule() +{ + +} + +#undef LOCTEXT_NAMESPACE + +IMPLEMENT_MODULE(FDLSSUtilityModule, DLSSUtility) diff --git a/plugins/DLSS/Source/DLSSUtility/Private/VelocityCombinePass.cpp b/plugins/DLSS/Source/DLSSUtility/Private/VelocityCombinePass.cpp new file mode 100644 index 00000000..3644649a --- /dev/null +++ b/plugins/DLSS/Source/DLSSUtility/Private/VelocityCombinePass.cpp @@ -0,0 +1,153 @@ +/* +* Copyright (c) 2020 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +* +* NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +* property and proprietary rights in and to this material, related +* documentation and any modifications thereto. Any use, reproduction, +* disclosure or distribution of this material and related documentation +* without an express license agreement from NVIDIA CORPORATION or +* its affiliates is strictly prohibited. +*/ + +#include "VelocityCombinePass.h" + + +const int32 kVelocityCombineComputeTileSizeX = FComputeShaderUtils::kGolden2DGroupSize; +const int32 kVelocityCombineComputeTileSizeY = FComputeShaderUtils::kGolden2DGroupSize; + + +class FDilateMotionVectorsDim : SHADER_PERMUTATION_BOOL("DILATE_MOTION_VECTORS"); + +class FVelocityCombineCS : public FGlobalShader +{ +public: + static bool ShouldCompilePermutation(const FGlobalShaderPermutationParameters& Parameters) + { + // Only cook for the platforms/RHIs where DLSS is supported, which is DX11,DX12 and Vulkan [on Win64] + return IsFeatureLevelSupported(Parameters.Platform, ERHIFeatureLevel::SM5) && + IsPCPlatform(Parameters.Platform) && ( + IsVulkanSM5Platform(Parameters.Platform) || +#if (ENGINE_MAJOR_VERSION == 4) && (ENGINE_MINOR_VERSION == 26) + IsD3DPlatform(Parameters.Platform, false)); +#else + IsD3DPlatform(Parameters.Platform)); +#endif + + } + + static void ModifyCompilationEnvironment(const FGlobalShaderPermutationParameters& Parameters, FShaderCompilerEnvironment& OutEnvironment) + { + FGlobalShader::ModifyCompilationEnvironment(Parameters, OutEnvironment); + OutEnvironment.SetDefine(TEXT("THREADGROUP_SIZEX"), kVelocityCombineComputeTileSizeX); + OutEnvironment.SetDefine(TEXT("THREADGROUP_SIZEY"), kVelocityCombineComputeTileSizeY); + } + using FPermutationDomain = TShaderPermutationDomain; + + DECLARE_GLOBAL_SHADER(FVelocityCombineCS); + SHADER_USE_PARAMETER_STRUCT(FVelocityCombineCS, FGlobalShader); + + BEGIN_SHADER_PARAMETER_STRUCT(FParameters, ) + // Input images + SHADER_PARAMETER_RDG_TEXTURE(Texture2D, VelocityTexture) + SHADER_PARAMETER_SAMPLER(SamplerState, VelocityTextureSampler) + SHADER_PARAMETER_STRUCT(FScreenPassTextureViewportParameters, Velocity) + + SHADER_PARAMETER_RDG_TEXTURE(Texture2D, DepthTexture) + SHADER_PARAMETER_SAMPLER(SamplerState, DepthTextureSampler) + +#if DLSS_ENGINE_USES_FVECTOR2D + SHADER_PARAMETER(FVector2D, TemporalJitterPixels) +#else + SHADER_PARAMETER(FVector2f, TemporalJitterPixels) +#endif + + SHADER_PARAMETER_STRUCT_REF(FViewUniformShaderParameters, View) + + // Output images + SHADER_PARAMETER_RDG_TEXTURE_UAV(RWTexture2D, OutVelocityCombinedTexture) + SHADER_PARAMETER_STRUCT(FScreenPassTextureViewportParameters, CombinedVelocity) + + END_SHADER_PARAMETER_STRUCT() +}; + + +IMPLEMENT_GLOBAL_SHADER(FVelocityCombineCS, "/Plugin/DLSS/Private/VelocityCombine.usf", "VelocityCombineMain", SF_Compute); + +FRDGTextureRef AddVelocityCombinePass( + FRDGBuilder& GraphBuilder, + const FViewInfo& View, + FRDGTextureRef InSceneDepthTexture, + FRDGTextureRef InVelocityTexture, + bool bDilateMotionVectors +) +{ + const FIntRect InputViewRect = View.ViewRect; + const FIntRect OutputViewRect = FIntRect( FIntPoint::ZeroValue, bDilateMotionVectors ? View.GetSecondaryViewRectSize() : View.ViewRect.Size()); + + FRDGTextureDesc CombinedVelocityDesc = FRDGTextureDesc::Create2D( + OutputViewRect.Size(), + PF_G16R16F, + FClearValueBinding::Black, + TexCreate_ShaderResource | TexCreate_UAV); + const TCHAR* OutputName = TEXT("DLSSCombinedVelocity"); + + FRDGTextureRef CombinedVelocityTexture = GraphBuilder.CreateTexture( + CombinedVelocityDesc, + OutputName); + + FVelocityCombineCS::FParameters* PassParameters = GraphBuilder.AllocParameters(); + + // input velocity + { + PassParameters->VelocityTexture = InVelocityTexture; + PassParameters->VelocityTextureSampler = TStaticSamplerState::GetRHI(); + + // we use InSceneDepthTexture here and not InVelocityTexture since the latter can be a 1x1 black texture + check(InVelocityTexture->Desc.Extent == FIntPoint(1, 1) || InVelocityTexture->Desc.Extent == InSceneDepthTexture->Desc.Extent); + FScreenPassTextureViewport velocityViewport(InSceneDepthTexture, InputViewRect); + FScreenPassTextureViewportParameters velocityViewportParameters = GetScreenPassTextureViewportParameters(velocityViewport); + PassParameters->Velocity = velocityViewportParameters; + } + // input depth + { + PassParameters->DepthTexture = InSceneDepthTexture; + PassParameters->DepthTextureSampler = TStaticSamplerState::GetRHI(); + } + // output combined velocity + { + PassParameters->OutVelocityCombinedTexture = GraphBuilder.CreateUAV(CombinedVelocityTexture); + + FScreenPassTextureViewport CombinedVelocityViewport(CombinedVelocityTexture, OutputViewRect); + FScreenPassTextureViewportParameters CombinedVelocityViewportParameters = GetScreenPassTextureViewportParameters(CombinedVelocityViewport); + PassParameters->CombinedVelocity = CombinedVelocityViewportParameters; + } + + // various state + { + +#if ENGINE_MAJOR_VERSION < 5 + PassParameters->TemporalJitterPixels = View.TemporalJitterPixels; +#else + PassParameters->TemporalJitterPixels = FVector2f(View.TemporalJitterPixels); // LWC_TODO: Precision loss +#endif + PassParameters->View = View.ViewUniformBuffer; + } + + FVelocityCombineCS::FPermutationDomain PermutationVector; + PermutationVector.Set(bDilateMotionVectors); + + TShaderMapRef ComputeShader(View.ShaderMap, PermutationVector); + + FComputeShaderUtils::AddPass( + GraphBuilder, + RDG_EVENT_NAME("Velocity Combine%s (%dx%d -> %dx%d)", + bDilateMotionVectors ? TEXT(" Dilate") : TEXT(""), + InputViewRect.Width(), InputViewRect.Height(), + OutputViewRect.Width(), OutputViewRect.Height() + ), + ComputeShader, + PassParameters, + FComputeShaderUtils::GetGroupCount(OutputViewRect.Size(), FComputeShaderUtils::kGolden2DGroupSize)); + + return CombinedVelocityTexture; +} \ No newline at end of file diff --git a/plugins/DLSS/Source/DLSSUtility/Public/DLSSUtility.h b/plugins/DLSS/Source/DLSSUtility/Public/DLSSUtility.h new file mode 100644 index 00000000..040e9a17 --- /dev/null +++ b/plugins/DLSS/Source/DLSSUtility/Public/DLSSUtility.h @@ -0,0 +1,35 @@ +/* +* Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#pragma once + +#include "Modules/ModuleManager.h" + + +class FDLSSUtilityModule final : public IModuleInterface +{ +public: + + /** IModuleInterface implementation */ + virtual void StartupModule() override; + virtual void ShutdownModule() override; + +private: +}; diff --git a/plugins/DLSS/Source/DLSSUtility/Public/VelocityCombinePass.h b/plugins/DLSS/Source/DLSSUtility/Public/VelocityCombinePass.h new file mode 100644 index 00000000..667cf241 --- /dev/null +++ b/plugins/DLSS/Source/DLSSUtility/Public/VelocityCombinePass.h @@ -0,0 +1,34 @@ +/* +* Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#pragma once + +#include "CoreMinimal.h" +#include "RendererInterface.h" +#include "ScreenPass.h" + + +extern DLSSUTILITY_API FRDGTextureRef AddVelocityCombinePass( + FRDGBuilder& GraphBuilder, + const FViewInfo& View, + FRDGTextureRef InSceneDepthTexture, + FRDGTextureRef InVelocityTexture, + bool bDilateMotionVectors +); diff --git a/plugins/DLSS/Source/NGXD3D11RHI/NGXD3D11RHI.Build.cs b/plugins/DLSS/Source/NGXD3D11RHI/NGXD3D11RHI.Build.cs new file mode 100644 index 00000000..12b4a3c2 --- /dev/null +++ b/plugins/DLSS/Source/NGXD3D11RHI/NGXD3D11RHI.Build.cs @@ -0,0 +1,79 @@ +/* +* Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + + +using UnrealBuildTool; + +using System.IO; + +public class NGXD3D11RHI : ModuleRules +{ + public NGXD3D11RHI(ReadOnlyTargetRules Target) : base(Target) + { + PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; + + PublicIncludePaths.AddRange( + new string[] { + } + ); + + + PrivateIncludePaths.AddRange( + new string[] { + Path.Combine(EngineDirectory,"Source/Runtime/Windows/D3D11RHI/Private"), + Path.Combine(EngineDirectory,"Source/Runtime/Windows/D3D11RHI/Private/Windows"), + } + ); + + + PublicDependencyModuleNames.AddRange( + new string[] + { + } + ); + + + PrivateDependencyModuleNames.AddRange( + new string[] + { + "Core", + "Engine", + "RenderCore", + "RHI", + "D3D11RHI", + + "NGX", + "NGXRHI", + } + ); + + if (ReadOnlyBuildVersion.Current.MajorVersion == 5) + { + PrivateDependencyModuleNames.Add("RHICore"); + } + + // those come from the D3D11RHI + AddEngineThirdPartyPrivateStaticDependencies(Target, "DX11"); + AddEngineThirdPartyPrivateStaticDependencies(Target, "NVAPI"); + AddEngineThirdPartyPrivateStaticDependencies(Target, "NVAftermath"); + AddEngineThirdPartyPrivateStaticDependencies(Target, "IntelMetricsDiscovery"); + AddEngineThirdPartyPrivateStaticDependencies(Target, "IntelExtensionsFramework"); + } +} diff --git a/plugins/DLSS/Source/NGXD3D11RHI/Private/NGXD3D11RHI.cpp b/plugins/DLSS/Source/NGXD3D11RHI/Private/NGXD3D11RHI.cpp new file mode 100644 index 00000000..84b6e106 --- /dev/null +++ b/plugins/DLSS/Source/NGXD3D11RHI/Private/NGXD3D11RHI.cpp @@ -0,0 +1,330 @@ +/* +* Copyright (c) 2020 - 2021 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#include "NGXD3D11RHI.h" + +#include "nvsdk_ngx.h" +#include "nvsdk_ngx_helpers.h" + +#include "D3D11RHIPrivate.h" +#include "D3D11Util.h" +#include "D3D11State.h" +#include "D3D11Resources.h" +#include "D3D11Viewport.h" +#include "D3D11ConstantBuffer.h" +#include "D3D11StateCache.h" +#include "RHIValidationCommon.h" + +#include "GenericPlatform/GenericPlatformFile.h" +DEFINE_LOG_CATEGORY_STATIC(LogDLSSNGXD3D11RHI, Log, All); + +#define LOCTEXT_NAMESPACE "FNGXD3D11RHIModule" + +class FD3D11NGXFeatureHandle final : public NGXDLSSFeature +{ + +public: + + using NGXDLSSFeature::NGXDLSSFeature; + + virtual ~FD3D11NGXFeatureHandle() + { + check(!IsRunningRHIInSeparateThread() || IsInRHIThread()); + check(NGXRHI::NGXInitialized()); + NVSDK_NGX_Result ResultReleaseFeature = NVSDK_NGX_D3D11_ReleaseFeature(Feature); + checkf(NVSDK_NGX_SUCCEED(ResultReleaseFeature), TEXT("NVSDK_NGX_D3D11_ReleaseFeature failed! (%u %s), %s"), ResultReleaseFeature, GetNGXResultAsString(ResultReleaseFeature), *Desc.GetDebugDescription()); + + if (NGXRHI::SupportsAllocateParameters()) + { + NVSDK_NGX_Result ResultDestroyParameter = NVSDK_NGX_D3D11_DestroyParameters(Parameter); + checkf(NVSDK_NGX_SUCCEED(ResultDestroyParameter), TEXT("NVSDK_NGX_D3D11_DestroyParameters failed! (%u %s), %s"), ResultDestroyParameter, GetNGXResultAsString(ResultDestroyParameter), *Desc.GetDebugDescription()); + } + } +}; + +class FNGXD3D11RHI final : public NGXRHI +{ +public: + FNGXD3D11RHI(const FNGXRHICreateArguments& Arguments); + + virtual void ExecuteDLSS(FRHICommandList& CmdList, const FRHIDLSSArguments& InArguments, FDLSSStateRef InDLSSState) final; + virtual ~FNGXD3D11RHI(); +private: + + FD3D11DynamicRHI* D3D11RHI = nullptr; + ID3D11Device* Direct3DDevice = nullptr; + ID3D11DeviceContext* Direct3DDeviceIMContext = nullptr; + + NVSDK_NGX_Result Init_NGX_D3D11(const FNGXRHICreateArguments& InArguments, const wchar_t* InApplicationDataPath, ID3D11Device* InHandle, const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo); + static bool IsIncompatibleAPICaptureToolActive(ID3D11Device* InDirect3DDevice); + +}; + +bool FNGXD3D11RHI::IsIncompatibleAPICaptureToolActive(ID3D11Device* InDirect3DDevice) +{ + // RenderDoc + { + IID RenderDocID; + if (SUCCEEDED(IIDFromString(L"{A7AA6116-9C8D-4BBA-9083-B4D816B71B78}", &RenderDocID))) + { + TRefCountPtr RenderDoc; + if (SUCCEEDED(InDirect3DDevice->QueryInterface(RenderDocID, (void**)RenderDoc.GetInitReference()))) + { + return true; + } + } + } + return false; +} + +NVSDK_NGX_Result FNGXD3D11RHI::Init_NGX_D3D11(const FNGXRHICreateArguments& InArguments, const wchar_t* InApplicationDataPath, ID3D11Device* InHandle, const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo) +{ + NVSDK_NGX_Result Result = NVSDK_NGX_Result_Fail; + int32 APIVersion = NVSDK_NGX_VERSION_API_MACRO; + do + { + if (InArguments.InitializeNGXWithNGXApplicationID()) + { + Result = NVSDK_NGX_D3D11_Init(InArguments.NGXAppId, InApplicationDataPath, InHandle, InFeatureInfo, static_cast(APIVersion)); + UE_LOG(LogDLSSNGXD3D11RHI, Log, TEXT("NVSDK_NGX_D3D11_Init(AppID= %u, APIVersion = 0x%x) -> (%u %s)"), InArguments.NGXAppId, APIVersion, Result, GetNGXResultAsString(Result)); + } + else + { + Result = NVSDK_NGX_D3D11_Init_with_ProjectID(TCHAR_TO_UTF8(*InArguments.UnrealProjectID), NVSDK_NGX_ENGINE_TYPE_UNREAL, TCHAR_TO_UTF8(*InArguments.UnrealEngineVersion), InApplicationDataPath, InHandle, InFeatureInfo, static_cast(APIVersion)); + UE_LOG(LogDLSSNGXD3D11RHI, Log, TEXT("NVSDK_NGX_D3D11_Init_with_ProjectID(ProjectID = %s, EngineVersion=%s, APIVersion = 0x%x) -> (%u %s)"), *InArguments.UnrealProjectID, *InArguments.UnrealEngineVersion, APIVersion, Result, GetNGXResultAsString(Result)); + } + + if (NVSDK_NGX_FAILED(Result)) + { + NVSDK_NGX_D3D11_Shutdown(); + } + + --APIVersion; + } while (NVSDK_NGX_FAILED(Result) && APIVersion >= NVSDK_NGX_VERSION_API_MACRO_BASE_LINE); + + if (!NVSDK_NGX_FAILED(Result) && (APIVersion + 1 < NVSDK_NGX_VERSION_API_MACRO_WITH_LOGGING)) + { + UE_LOG(LogDLSSNGXD3D11RHI, Log, TEXT("Warning: NVSDK_NGX_D3D11_Init succeeded, but the driver installed on this system is too old the support the NGX logging API. The console variables r.NGX.LogLevel and r.NGX.EnableOtherLoggingSinks will have no effect and NGX logs will only show up in their own log files, and not in UE's log files.")); + } + + return Result; +} + +FNGXD3D11RHI::FNGXD3D11RHI(const FNGXRHICreateArguments& Arguments) + : NGXRHI(Arguments) + , D3D11RHI(static_cast(Arguments.DynamicRHI)) + , Direct3DDevice(D3D11RHI->GetDevice()) + , Direct3DDeviceIMContext(D3D11RHI->GetDeviceContext()) +{ + ensure(D3D11RHI); + ensure(Direct3DDevice); + + bIsIncompatibleAPICaptureToolActive = IsIncompatibleAPICaptureToolActive(Direct3DDevice); + + const FString NGXLogDir = GetNGXLogDirectory(); + IPlatformFile::GetPlatformPhysical().CreateDirectoryTree(*NGXLogDir); + + NVSDK_NGX_Result ResultInit = Init_NGX_D3D11(Arguments, *NGXLogDir, Direct3DDevice, CommonFeatureInfo()); + UE_LOG(LogDLSSNGXD3D11RHI, Log, TEXT("NVSDK_NGX_D3D11_Init (Log %s) -> (%u %s)"), *NGXLogDir, ResultInit, GetNGXResultAsString(ResultInit)); + + // store for the higher level code interpret + DLSSQueryFeature.DLSSInitResult = ResultInit; + + if (NVSDK_NGX_Result_FAIL_OutOfDate == ResultInit) + { + DLSSQueryFeature.DriverRequirements.DriverUpdateRequired = true; + } + else if (NVSDK_NGX_SUCCEED(ResultInit)) + { + bNGXInitialized = true; + + NVSDK_NGX_Result ResultGetParameters = NVSDK_NGX_D3D11_GetCapabilityParameters(&DLSSQueryFeature.CapabilityParameters); + + UE_LOG(LogDLSSNGXD3D11RHI, Log, TEXT("NVSDK_NGX_D3D11_GetCapabilityParameters -> (%u %s)"), ResultGetParameters, GetNGXResultAsString(ResultGetParameters)); + + if (NVSDK_NGX_Result_FAIL_OutOfDate == ResultGetParameters) + { + DLSSQueryFeature.DriverRequirements.DriverUpdateRequired = true; + } + + if (NVSDK_NGX_FAILED(ResultGetParameters)) + { + ResultGetParameters = NVSDK_NGX_D3D11_GetParameters(&DLSSQueryFeature.CapabilityParameters); + UE_LOG(LogDLSSNGXD3D11RHI, Log, TEXT("NVSDK_NGX_D3D11_GetParameters -> (%u %s)"), ResultGetParameters, GetNGXResultAsString(ResultGetParameters)); + + bSupportsAllocateParameters = false; + } + + if (NVSDK_NGX_SUCCEED(ResultGetParameters)) + { + DLSSQueryFeature.QueryDLSSSupport(); + } + } +} + +FNGXD3D11RHI::~FNGXD3D11RHI() +{ + UE_LOG(LogDLSSNGXD3D11RHI, Log, TEXT("%s Enter"), ANSI_TO_TCHAR(__FUNCTION__)); + if(bNGXInitialized) + { + // Destroy the parameters and features before we call NVSDK_NGX_D3D11_Shutdown + ReleaseAllocatedFeatures(); + + NVSDK_NGX_Result Result; + if (bSupportsAllocateParameters && DLSSQueryFeature.CapabilityParameters) + { + Result = NVSDK_NGX_D3D11_DestroyParameters(DLSSQueryFeature.CapabilityParameters); + UE_LOG(LogDLSSNGXD3D11RHI, Log, TEXT("NVSDK_NGX_D3D11_DestroyParameters -> (%u %s)"), Result, GetNGXResultAsString(Result)); + } + Result = NVSDK_NGX_D3D11_Shutdown(); + UE_LOG(LogDLSSNGXD3D11RHI, Log, TEXT("NVSDK_NGX_D3D11_Shutdown -> (%u %s)"), Result, GetNGXResultAsString(Result)); + bNGXInitialized = false; + } + UE_LOG(LogDLSSNGXD3D11RHI, Log, TEXT("%s Leave"), ANSI_TO_TCHAR(__FUNCTION__)); +} + + +void FNGXD3D11RHI::ExecuteDLSS(FRHICommandList& CmdList, const FRHIDLSSArguments& InArguments, FDLSSStateRef InDLSSState) +{ + check(!IsRunningRHIInSeparateThread() || IsInRHIThread()); + check(IsDLSSAvailable()); + if (!IsDLSSAvailable()) + return; + InArguments.Validate(); + + if (InDLSSState->RequiresFeatureRecreation(InArguments)) + { + check(!InDLSSState->DLSSFeature || InDLSSState->HasValidFeature()); + InDLSSState->DLSSFeature = nullptr; + } + + if (InArguments.bReset) + { + check(!InDLSSState->DLSSFeature); + InDLSSState->DLSSFeature = FindFreeFeature(InArguments); + } + + if (!InDLSSState->DLSSFeature) + { + NVSDK_NGX_Parameter* NewNGXParameterHandle = nullptr; + + if (NGXRHI::SupportsAllocateParameters()) + { + NVSDK_NGX_Result Result = NVSDK_NGX_D3D11_AllocateParameters(&NewNGXParameterHandle); + checkf(NVSDK_NGX_SUCCEED(Result), TEXT("NVSDK_NGX_D3D11_AllocateParameters failed! (%u %s)"), Result, GetNGXResultAsString(Result)); + } + else + { + NVSDK_NGX_Result Result = NVSDK_NGX_D3D11_GetParameters(&NewNGXParameterHandle); + checkf(NVSDK_NGX_SUCCEED(Result), TEXT("NVSDK_NGX_D3D11_GetParameters failed! (%u %s)"), Result, GetNGXResultAsString(Result)); + } + + ApplyCommonNGXParameterSettings(NewNGXParameterHandle, InArguments); + + NVSDK_NGX_DLSS_Create_Params DlssCreateParams = InArguments.GetNGXDLSSCreateParams(); + NVSDK_NGX_Handle* NewNGXHandle = nullptr; + NVSDK_NGX_Result ResultCreate = NGX_D3D11_CREATE_DLSS_EXT( + Direct3DDeviceIMContext, + &NewNGXHandle, + NewNGXParameterHandle, + &DlssCreateParams); + checkf(NVSDK_NGX_SUCCEED(ResultCreate), TEXT("NGX_D3D11_CREATE_DLSS failed! (%u %s), %s"), ResultCreate, GetNGXResultAsString(ResultCreate), *InArguments.GetFeatureDesc().GetDebugDescription()); + + InDLSSState->DLSSFeature = MakeShared(NewNGXHandle, NewNGXParameterHandle, InArguments.GetFeatureDesc(), FrameCounter); + RegisterFeature(InDLSSState->DLSSFeature); + } + + check(InDLSSState->HasValidFeature()); + + // execute + + D3D11RHI->RegisterGPUWork(1); + + NVSDK_NGX_D3D11_DLSS_Eval_Params DlssEvalParams; + FMemory::Memzero(DlssEvalParams); + + DlssEvalParams.Feature.pInOutput = GetD3D11TextureFromRHITexture(InArguments.OutputColor)->GetResource(); + DlssEvalParams.InOutputSubrectBase.X = InArguments.DestRect.Min.X; + DlssEvalParams.InOutputSubrectBase.Y = InArguments.DestRect.Min.Y; + + DlssEvalParams.InRenderSubrectDimensions.Width = InArguments.SrcRect.Width(); + DlssEvalParams.InRenderSubrectDimensions.Height = InArguments.SrcRect.Height(); + + DlssEvalParams.Feature.pInColor = GetD3D11TextureFromRHITexture(InArguments.InputColor)->GetResource(); + DlssEvalParams.InColorSubrectBase.X = InArguments.SrcRect.Min.X; + DlssEvalParams.InColorSubrectBase.Y = InArguments.SrcRect.Min.Y; + + DlssEvalParams.pInDepth = GetD3D11TextureFromRHITexture(InArguments.InputDepth)->GetResource(); + DlssEvalParams.InDepthSubrectBase.X = InArguments.SrcRect.Min.X; + DlssEvalParams.InDepthSubrectBase.Y = InArguments.SrcRect.Min.Y; + + // The VelocityCombine pass puts the motion vectors into the top left corner + DlssEvalParams.pInMotionVectors = GetD3D11TextureFromRHITexture(InArguments.InputMotionVectors)->GetResource(); + DlssEvalParams.InMVSubrectBase.X = 0; + DlssEvalParams.InMVSubrectBase.Y = 0; + + DlssEvalParams.pInExposureTexture = InArguments.bUseAutoExposure ? nullptr : GetD3D11TextureFromRHITexture(InArguments.InputExposure)->GetResource(); + DlssEvalParams.InPreExposure = InArguments.PreExposure; + + DlssEvalParams.Feature.InSharpness = InArguments.Sharpness; + DlssEvalParams.InJitterOffsetX = InArguments.JitterOffset.X; + DlssEvalParams.InJitterOffsetY = InArguments.JitterOffset.Y; + + DlssEvalParams.InMVScaleX = InArguments.MotionVectorScale.X; + DlssEvalParams.InMVScaleY = InArguments.MotionVectorScale.Y; + DlssEvalParams.InReset = InArguments.bReset; + + DlssEvalParams.InFrameTimeDeltaInMsec = InArguments.DeltaTime; + + + NVSDK_NGX_Result ResultEvaluate = NGX_D3D11_EVALUATE_DLSS_EXT( + Direct3DDeviceIMContext, + InDLSSState->DLSSFeature->Feature, + InDLSSState->DLSSFeature->Parameter, + &DlssEvalParams + ); + checkf(NVSDK_NGX_SUCCEED(ResultEvaluate), TEXT("NGX_D3D11_EVALUATE_DLSS_EXT failed! (%u %s), %s"), ResultEvaluate, GetNGXResultAsString(ResultEvaluate), *InDLSSState->DLSSFeature->Desc.GetDebugDescription()); + + InDLSSState->DLSSFeature->Tick(FrameCounter); +} + +/** IModuleInterface implementation */ + +void FNGXD3D11RHIModule::StartupModule() +{ + // NGXRHI module should be loaded to ensure logging state is initialized + FModuleManager::LoadModuleChecked(TEXT("NGXRHI")); +} + +void FNGXD3D11RHIModule::ShutdownModule() +{ +} + +TUniquePtr FNGXD3D11RHIModule::CreateNGXRHI(const FNGXRHICreateArguments& Arguments) +{ + TUniquePtr Result(new FNGXD3D11RHI(Arguments)); + return Result; +} + +IMPLEMENT_MODULE(FNGXD3D11RHIModule, NGXD3D11RHI) + +#undef LOCTEXT_NAMESPACE + + diff --git a/plugins/DLSS/Source/NGXD3D11RHI/Public/NGXD3D11RHI.h b/plugins/DLSS/Source/NGXD3D11RHI/Public/NGXD3D11RHI.h new file mode 100644 index 00000000..a60075e5 --- /dev/null +++ b/plugins/DLSS/Source/NGXD3D11RHI/Public/NGXD3D11RHI.h @@ -0,0 +1,36 @@ +/* +* Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#pragma once +#include "Modules/ModuleManager.h" + +#include "NGXRHI.h" + +class FNGXD3D11RHIModule final : public INGXRHIModule +{ +public: + + /** IModuleInterface implementation */ + virtual void StartupModule(); + virtual void ShutdownModule(); + + /** INGXRHIModule implementation */ + virtual TUniquePtr CreateNGXRHI(const FNGXRHICreateArguments& Arguments); +}; \ No newline at end of file diff --git a/plugins/DLSS/Source/NGXD3D12RHI/NGXD3D12RHI.Build.cs b/plugins/DLSS/Source/NGXD3D12RHI/NGXD3D12RHI.Build.cs new file mode 100644 index 00000000..fac57f31 --- /dev/null +++ b/plugins/DLSS/Source/NGXD3D12RHI/NGXD3D12RHI.Build.cs @@ -0,0 +1,73 @@ +/* +* Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +using UnrealBuildTool; +using System.IO; +public class NGXD3D12RHI : ModuleRules +{ + public NGXD3D12RHI(ReadOnlyTargetRules Target) : base(Target) + { + PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; + + PublicIncludePaths.AddRange( + new string[] { + } + ); + + PrivateIncludePaths.AddRange( + new string[] { + Path.Combine(EngineDirectory,"Source/Runtime/D3D12RHI/Private"), + Path.Combine(EngineDirectory,"Source/Runtime/D3D12RHI/Private/Windows"), + } + ); + + PublicDependencyModuleNames.AddRange( + new string[] + { + } + ); + + + PrivateDependencyModuleNames.AddRange( + new string[] + { + "Core", + "Engine", + "RenderCore", + "RHI", + "D3D12RHI", + + "NGX", + "NGXRHI", + } + ); + + if (ReadOnlyBuildVersion.Current.MajorVersion == 5) + { + PrivateDependencyModuleNames.Add("RHICore"); + } + // those come from the D3D12RHI + AddEngineThirdPartyPrivateStaticDependencies(Target, "DX12"); + AddEngineThirdPartyPrivateStaticDependencies(Target, "NVAPI"); + AddEngineThirdPartyPrivateStaticDependencies(Target, "NVAftermath"); + AddEngineThirdPartyPrivateStaticDependencies(Target, "IntelMetricsDiscovery"); + AddEngineThirdPartyPrivateStaticDependencies(Target, "IntelExtensionsFramework"); + } +} diff --git a/plugins/DLSS/Source/NGXD3D12RHI/Private/NGXD3D12RHI.cpp b/plugins/DLSS/Source/NGXD3D12RHI/Private/NGXD3D12RHI.cpp new file mode 100644 index 00000000..cab8003f --- /dev/null +++ b/plugins/DLSS/Source/NGXD3D12RHI/Private/NGXD3D12RHI.cpp @@ -0,0 +1,343 @@ +/* +* Copyright (c) 2020 - 2021 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#include "NGXD3D12RHI.h" + +#include "nvsdk_ngx.h" +#include "nvsdk_ngx_helpers.h" + +#include "D3D12RHIPrivate.h" +#include "D3D12Util.h" +#include "D3D12State.h" +#include "D3D12Resources.h" +#include "D3D12Viewport.h" +#include "D3D12ConstantBuffer.h" + +#include "RHIValidationCommon.h" +#include "GenericPlatform/GenericPlatformFile.h" + + + +DEFINE_LOG_CATEGORY_STATIC(LogDLSSNGXD3D12RHI, Log, All); + +#define LOCTEXT_NAMESPACE "FNGXD3D12RHIModule" + +class FD3D12NGXDLSSFeature final : public NGXDLSSFeature +{ + +public: + using NGXDLSSFeature::NGXDLSSFeature; + + virtual ~FD3D12NGXDLSSFeature() + { + check(!IsRunningRHIInSeparateThread() || IsInRHIThread()); + check(NGXRHI::NGXInitialized()); + NVSDK_NGX_Result ResultReleaseFeature = NVSDK_NGX_D3D12_ReleaseFeature(Feature); + checkf(NVSDK_NGX_SUCCEED(ResultReleaseFeature), TEXT("NVSDK_NGX_D3D12_ReleaseFeature failed! (%u %s), %s"), ResultReleaseFeature, GetNGXResultAsString(ResultReleaseFeature), *Desc.GetDebugDescription()); + + if (NGXRHI::SupportsAllocateParameters()) + { + NVSDK_NGX_Result ResultDestroyParameter = NVSDK_NGX_D3D12_DestroyParameters(Parameter); + checkf(NVSDK_NGX_SUCCEED(ResultDestroyParameter), TEXT("NVSDK_NGX_D3D12_DestroyParameters failed! (%u %s), %s"), ResultDestroyParameter, GetNGXResultAsString(ResultDestroyParameter), *Desc.GetDebugDescription()); + } + } +}; + +class FNGXD3D12RHI final : public NGXRHI +{ + +public: + FNGXD3D12RHI(const FNGXRHICreateArguments& Arguments); + virtual void ExecuteDLSS(FRHICommandList& CmdList, const FRHIDLSSArguments& InArguments, FDLSSStateRef InDLSSState) final; + virtual ~FNGXD3D12RHI(); +private: + NVSDK_NGX_Result Init_NGX_D3D12(const FNGXRHICreateArguments& InArguments, const wchar_t* InApplicationDataPath, ID3D12Device* InHandle, const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo); + static bool IsIncompatibleAPICaptureToolActive(ID3D12Device* InDirect3DDevice); + + FD3D12DynamicRHI* D3D12RHI = nullptr; + + +}; + +bool FNGXD3D12RHI::IsIncompatibleAPICaptureToolActive(ID3D12Device* InDirect3DDevice) +{ + // RenderDoc + { + IID RenderDocID; + if (SUCCEEDED(IIDFromString(L"{A7AA6116-9C8D-4BBA-9083-B4D816B71B78}", &RenderDocID))) + { + TRefCountPtr RenderDoc; + if (SUCCEEDED(InDirect3DDevice->QueryInterface(RenderDocID, (void**)RenderDoc.GetInitReference()))) + { + return true; + } + } + } + return false; +} + +NVSDK_NGX_Result FNGXD3D12RHI::Init_NGX_D3D12(const FNGXRHICreateArguments& InArguments, const wchar_t* InApplicationDataPath, ID3D12Device* InHandle, const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo) +{ + NVSDK_NGX_Result Result = NVSDK_NGX_Result_Fail; + int32 APIVersion = NVSDK_NGX_VERSION_API_MACRO; + do + { + if (InArguments.InitializeNGXWithNGXApplicationID()) + { + Result = NVSDK_NGX_D3D12_Init(InArguments.NGXAppId, InApplicationDataPath, InHandle, InFeatureInfo, static_cast(APIVersion)); + UE_LOG(LogDLSSNGXD3D12RHI, Log, TEXT("NVSDK_NGX_D3D12_Init(AppID= %u, APIVersion = 0x%x, Device=%p) -> (%u %s)"), InArguments.NGXAppId, APIVersion, InHandle, Result, GetNGXResultAsString(Result)); + } + else + { + Result = NVSDK_NGX_D3D12_Init_with_ProjectID(TCHAR_TO_UTF8(*InArguments.UnrealProjectID), NVSDK_NGX_ENGINE_TYPE_UNREAL, TCHAR_TO_UTF8(*InArguments.UnrealEngineVersion), InApplicationDataPath, InHandle, InFeatureInfo, static_cast(APIVersion)); + UE_LOG(LogDLSSNGXD3D12RHI, Log, TEXT("NVSDK_NGX_D3D12_Init_with_ProjectID(ProjectID = %s, EngineVersion=%s, APIVersion = 0x%x, Device=%p) -> (%u %s)"), *InArguments.UnrealProjectID, *InArguments.UnrealEngineVersion, APIVersion, InHandle, Result, GetNGXResultAsString(Result)); + } + + if (NVSDK_NGX_FAILED(Result)) + { + NVSDK_NGX_D3D12_Shutdown(); + } + + --APIVersion; + } while (NVSDK_NGX_FAILED(Result) && APIVersion >= NVSDK_NGX_VERSION_API_MACRO_BASE_LINE); + + if (NVSDK_NGX_SUCCEED(Result) && (APIVersion + 1 < NVSDK_NGX_VERSION_API_MACRO_WITH_LOGGING)) + { + UE_LOG(LogDLSSNGXD3D12RHI, Log, TEXT("Warning: NVSDK_NGX_D3D12_Init succeeded, but the driver installed on this system is too old the support the NGX logging API. The console variables r.NGX.LogLevel and r.NGX.EnableOtherLoggingSinks will have no effect and NGX logs will only show up in their own log files, and not in UE's log files.")); + } + + return Result; +} + + + +FNGXD3D12RHI::FNGXD3D12RHI(const FNGXRHICreateArguments& Arguments) + : NGXRHI(Arguments) + , D3D12RHI(static_cast(Arguments.DynamicRHI)) + +{ + ID3D12Device* Direct3DDevice = D3D12RHI->GetAdapter().GetD3DDevice(); + + ensure(D3D12RHI); + ensure(Direct3DDevice); + bIsIncompatibleAPICaptureToolActive = IsIncompatibleAPICaptureToolActive(Direct3DDevice); + + const FString NGXLogDir = GetNGXLogDirectory(); + IPlatformFile::GetPlatformPhysical().CreateDirectoryTree(*NGXLogDir); + + NVSDK_NGX_Result ResultInit = Init_NGX_D3D12(Arguments, *NGXLogDir, Direct3DDevice, CommonFeatureInfo()); + UE_LOG(LogDLSSNGXD3D12RHI, Log, TEXT("NVSDK_NGX_D3D12_Init (Log %s) -> (%u %s)"), *NGXLogDir, ResultInit, GetNGXResultAsString(ResultInit)); + + // store for the higher level code interpret + DLSSQueryFeature.DLSSInitResult = ResultInit; + + if (NVSDK_NGX_Result_FAIL_OutOfDate == ResultInit) + { + DLSSQueryFeature.DriverRequirements.DriverUpdateRequired = true; + } + else if (NVSDK_NGX_SUCCEED(ResultInit)) + { + bNGXInitialized = true; + + NVSDK_NGX_Result ResultGetParameters = NVSDK_NGX_D3D12_GetCapabilityParameters(&DLSSQueryFeature.CapabilityParameters); + + UE_LOG(LogDLSSNGXD3D12RHI, Log, TEXT("NVSDK_NGX_D3D12_GetCapabilityParameters -> (%u %s)"), ResultGetParameters, GetNGXResultAsString(ResultGetParameters)); + + if (NVSDK_NGX_Result_FAIL_OutOfDate == ResultGetParameters) + { + DLSSQueryFeature.DriverRequirements.DriverUpdateRequired = true; + } + + if (NVSDK_NGX_FAILED(ResultGetParameters)) + { + ResultGetParameters = NVSDK_NGX_D3D12_GetParameters(&DLSSQueryFeature.CapabilityParameters); + UE_LOG(LogDLSSNGXD3D12RHI, Log, TEXT("NVSDK_NGX_D3D12_GetParameters -> (%u %s)"), ResultGetParameters, GetNGXResultAsString(ResultGetParameters)); + + bSupportsAllocateParameters = false; + } + + if (NVSDK_NGX_SUCCEED(ResultGetParameters)) + { + DLSSQueryFeature.QueryDLSSSupport(); + } + } +} + +FNGXD3D12RHI::~FNGXD3D12RHI() +{ + UE_LOG(LogDLSSNGXD3D12RHI, Log, TEXT("%s Enter"), ANSI_TO_TCHAR(__FUNCTION__)); + if (bNGXInitialized) + { + // Destroy the parameters and features before we call NVSDK_NGX_D3D11_Shutdown + ReleaseAllocatedFeatures(); + + NVSDK_NGX_Result Result; + if (bSupportsAllocateParameters && DLSSQueryFeature.CapabilityParameters) + { + Result = NVSDK_NGX_D3D12_DestroyParameters(DLSSQueryFeature.CapabilityParameters); + UE_LOG(LogDLSSNGXD3D12RHI, Log, TEXT("NVSDK_NGX_D3D12_DestroyParameters -> (%u %s)"), Result, GetNGXResultAsString(Result)); + } + Result = NVSDK_NGX_D3D12_Shutdown(); + UE_LOG(LogDLSSNGXD3D12RHI, Log, TEXT("NVSDK_NGX_D3D12_Shutdown -> (%u %s)"), Result, GetNGXResultAsString(Result)); + bNGXInitialized = false; + } + UE_LOG(LogDLSSNGXD3D12RHI, Log, TEXT("%s Leave"), ANSI_TO_TCHAR(__FUNCTION__)); +} + +void FNGXD3D12RHI::ExecuteDLSS(FRHICommandList& CmdList, const FRHIDLSSArguments& InArguments, FDLSSStateRef InDLSSState) +{ + check(!IsRunningRHIInSeparateThread() || IsInRHIThread()); + check(IsDLSSAvailable()); + if (!IsDLSSAvailable()) return; + + InArguments.Validate(); + + FD3D12Device* Device = D3D12RHI->GetAdapter().GetDevice(CmdList.GetGPUMask().ToIndex()); + ID3D12GraphicsCommandList* D3DGraphicsCommandList = Device->GetCommandContext().CommandListHandle.GraphicsCommandList(); + if (InDLSSState->RequiresFeatureRecreation(InArguments)) + { + check(!InDLSSState->DLSSFeature || InDLSSState->HasValidFeature()); + InDLSSState->DLSSFeature = nullptr; + } + + if (InArguments.bReset) + { + check(!InDLSSState->DLSSFeature); + InDLSSState->DLSSFeature = FindFreeFeature(InArguments); + } + + if (!InDLSSState->DLSSFeature) + { + NVSDK_NGX_Parameter* NewNGXParameterHandle = nullptr; + if (NGXRHI::SupportsAllocateParameters()) + { + NVSDK_NGX_Result Result = NVSDK_NGX_D3D12_AllocateParameters(&NewNGXParameterHandle); + checkf(NVSDK_NGX_SUCCEED(Result), TEXT("NVSDK_NGX_D3D12_AllocateParameters failed! (%u %s)"), Result, GetNGXResultAsString(Result)); + } + else + { + NVSDK_NGX_Result Result = NVSDK_NGX_D3D12_GetParameters(&NewNGXParameterHandle); + checkf(NVSDK_NGX_SUCCEED(Result), TEXT("NVSDK_NGX_D3D12_GetParameters failed! (%u %s)"), Result, GetNGXResultAsString(Result)); + } + + ApplyCommonNGXParameterSettings(NewNGXParameterHandle, InArguments); + + NVSDK_NGX_DLSS_Create_Params DlssCreateParams = InArguments.GetNGXDLSSCreateParams(); + NVSDK_NGX_Handle* NewNGXFeatureHandle = nullptr; + + const uint32 CreationNodeMask = 1 << InArguments.GPUNode; + const uint32 VisibilityNodeMask = InArguments.GPUVisibility; + + NVSDK_NGX_Result ResultCreate = NGX_D3D12_CREATE_DLSS_EXT( + D3DGraphicsCommandList, + CreationNodeMask, + VisibilityNodeMask, + &NewNGXFeatureHandle, + NewNGXParameterHandle, + &DlssCreateParams + ); + checkf(NVSDK_NGX_SUCCEED(ResultCreate), TEXT("NGX_D3D12_CREATE_DLSS_EXT (CreationNodeMask=0x%x VisibilityNodeMask=0x%x) failed! (%u %s), %s"), CreationNodeMask, VisibilityNodeMask, ResultCreate, GetNGXResultAsString(ResultCreate), *InArguments.GetFeatureDesc().GetDebugDescription()); + InDLSSState->DLSSFeature = MakeShared(NewNGXFeatureHandle, NewNGXParameterHandle, InArguments.GetFeatureDesc(), FrameCounter); + RegisterFeature(InDLSSState->DLSSFeature); + } + + check(InDLSSState->HasValidFeature()); + + // execute + if (Device->GetCommandContext().IsDefaultContext()) + { + Device->RegisterGPUWork(1); + } + + NVSDK_NGX_D3D12_DLSS_Eval_Params DlssEvalParams; + FMemory::Memzero(DlssEvalParams); + + DlssEvalParams.Feature.pInOutput = GetD3D12TextureFromRHITexture(InArguments.OutputColor, InArguments.GPUNode)->GetResource()->GetResource(); + DlssEvalParams.InOutputSubrectBase.X = InArguments.DestRect.Min.X; + DlssEvalParams.InOutputSubrectBase.Y = InArguments.DestRect.Min.Y; + + DlssEvalParams.InRenderSubrectDimensions.Width = InArguments.SrcRect.Width(); + DlssEvalParams.InRenderSubrectDimensions.Height = InArguments.SrcRect.Height(); + + DlssEvalParams.Feature.pInColor = GetD3D12TextureFromRHITexture(InArguments.InputColor, InArguments.GPUNode)->GetResource()->GetResource(); + DlssEvalParams.InColorSubrectBase.X = InArguments.SrcRect.Min.X; + DlssEvalParams.InColorSubrectBase.Y = InArguments.SrcRect.Min.Y; + + DlssEvalParams.pInDepth = GetD3D12TextureFromRHITexture(InArguments.InputDepth, InArguments.GPUNode)->GetResource()->GetResource(); + DlssEvalParams.InDepthSubrectBase.X = InArguments.SrcRect.Min.X; + DlssEvalParams.InDepthSubrectBase.Y = InArguments.SrcRect.Min.Y; + + DlssEvalParams.pInMotionVectors = GetD3D12TextureFromRHITexture(InArguments.InputMotionVectors, InArguments.GPUNode)->GetResource()->GetResource(); + // The VelocityCombine pass puts the motion vectors into the top left corner + DlssEvalParams.InMVSubrectBase.X = 0; + DlssEvalParams.InMVSubrectBase.Y = 0; + + DlssEvalParams.pInExposureTexture = InArguments.bUseAutoExposure ? nullptr : GetD3D12TextureFromRHITexture(InArguments.InputExposure, InArguments.GPUNode)->GetResource()->GetResource(); + DlssEvalParams.InPreExposure = InArguments.PreExposure; + + DlssEvalParams.Feature.InSharpness = InArguments.Sharpness; + DlssEvalParams.InJitterOffsetX = InArguments.JitterOffset.X; + DlssEvalParams.InJitterOffsetY = InArguments.JitterOffset.Y; + + DlssEvalParams.InMVScaleX = InArguments.MotionVectorScale.X; + DlssEvalParams.InMVScaleY = InArguments.MotionVectorScale.Y; + DlssEvalParams.InReset = InArguments.bReset; + + DlssEvalParams.InFrameTimeDeltaInMsec = InArguments.DeltaTime; + + NVSDK_NGX_Result ResultEvaluate = NGX_D3D12_EVALUATE_DLSS_EXT( + D3DGraphicsCommandList, + InDLSSState->DLSSFeature->Feature, + InDLSSState->DLSSFeature->Parameter, + &DlssEvalParams + ); + checkf(NVSDK_NGX_SUCCEED(ResultEvaluate), TEXT("NGX_D3D12_EVALUATE_DLSS_EXT failed! (%u %s), %s"), ResultEvaluate, GetNGXResultAsString(ResultEvaluate), *InDLSSState->DLSSFeature->Desc.GetDebugDescription()); + InDLSSState->DLSSFeature->Tick(FrameCounter); + + Device->GetCommandContext().StateCache.ForceSetComputeRootSignature(); + Device->GetCommandContext().StateCache.GetDescriptorCache()->SetCurrentCommandList(Device->GetCommandContext().CommandListHandle); + +} + +/** IModuleInterface implementation */ + +void FNGXD3D12RHIModule::StartupModule() +{ + // NGXRHI module should be loaded to ensure logging state is initialized + FModuleManager::LoadModuleChecked(TEXT("NGXRHI")); +} + +void FNGXD3D12RHIModule::ShutdownModule() +{ +} + +TUniquePtr FNGXD3D12RHIModule::CreateNGXRHI(const FNGXRHICreateArguments& Arguments) +{ + TUniquePtr Result(new FNGXD3D12RHI(Arguments)); + return Result; +} + +IMPLEMENT_MODULE(FNGXD3D12RHIModule, NGXD3D12RHI) + +#undef LOCTEXT_NAMESPACE + + + + diff --git a/plugins/DLSS/Source/NGXD3D12RHI/Public/NGXD3D12RHI.h b/plugins/DLSS/Source/NGXD3D12RHI/Public/NGXD3D12RHI.h new file mode 100644 index 00000000..4631420d --- /dev/null +++ b/plugins/DLSS/Source/NGXD3D12RHI/Public/NGXD3D12RHI.h @@ -0,0 +1,37 @@ +/* +* Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#pragma once + +#include "Modules/ModuleManager.h" +#include "NGXRHI.h" + +class FNGXD3D12RHIModule final : public INGXRHIModule +{ +public: + + /** IModuleInterface implementation */ + virtual void StartupModule(); + virtual void ShutdownModule(); + + /** INGXRHIModule implementation */ + + virtual TUniquePtr CreateNGXRHI(const FNGXRHICreateArguments& Arguments); +}; \ No newline at end of file diff --git a/plugins/DLSS/Source/NGXRHI/NGXRHI.Build.cs b/plugins/DLSS/Source/NGXRHI/NGXRHI.Build.cs new file mode 100644 index 00000000..3b06dfb5 --- /dev/null +++ b/plugins/DLSS/Source/NGXRHI/NGXRHI.Build.cs @@ -0,0 +1,68 @@ +/* +* Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + + +using UnrealBuildTool; +using System.IO; +public class NGXRHI : ModuleRules +{ + public NGXRHI(ReadOnlyTargetRules Target) : base(Target) + { + PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; + + + PublicIncludePaths.AddRange( + new string[] { + } + ); + + + PrivateIncludePaths.AddRange( + new string[] { + } + ); + + + PublicDependencyModuleNames.AddRange( + new string[] + { + } + ); + + + PrivateDependencyModuleNames.AddRange( + new string[] + { + + "Core", + "Engine", + "RenderCore", + "RHI", + + "NGX", + } + ); + DynamicallyLoadedModuleNames.AddRange( + new string[] + { + } + ); + } +} diff --git a/plugins/DLSS/Source/NGXRHI/Private/NGXRHI.cpp b/plugins/DLSS/Source/NGXRHI/Private/NGXRHI.cpp new file mode 100644 index 00000000..6e5fa07c --- /dev/null +++ b/plugins/DLSS/Source/NGXRHI/Private/NGXRHI.cpp @@ -0,0 +1,530 @@ +/* +* Copyright (c) 2020 - 2021 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#include "NGXRHI.h" + +#include "Misc/Paths.h" +#include "GenericPlatform/GenericPlatformFile.h" + +#include "nvsdk_ngx.h" +#include "nvsdk_ngx_params.h" +#include "nvsdk_ngx_helpers.h" + +// NGX software stack +DEFINE_LOG_CATEGORY_STATIC(LogDLSSNGX, Log, All); +// The UE module +DEFINE_LOG_CATEGORY_STATIC(LogDLSSNGXRHI, Log, All); + + + +DECLARE_STATS_GROUP(TEXT("DLSS"), STATGROUP_DLSS, STATCAT_Advanced); +DECLARE_MEMORY_STAT_POOL(TEXT("DLSS: Video memory"), STAT_DLSSInternalGPUMemory, STATGROUP_DLSS, FPlatformMemory::MCR_GPU); +DECLARE_DWORD_COUNTER_STAT(TEXT("DLSS: Num DLSS features"), STAT_DLSSNumFeatures, STATGROUP_DLSS); + +#define LOCTEXT_NAMESPACE "NGXRHI" + +static TAutoConsoleVariable CVarNGXLogLevel( + TEXT("r.NGX.LogLevel"), 1, + TEXT("Determines the minimal amount of logging the NGX implementation pipes into LogDLSSNGX. Can be overridden by the -NGXLogLevel= command line option\n") + TEXT("Please refer to the DLSS plugin documentation on other ways to change the logging level.\n") + TEXT("0: off \n") + TEXT("1: on (default)\n") + TEXT("2: verbose "), + ECVF_ReadOnly); + +static TAutoConsoleVariable CVarNGXEnableOtherLoggingSinks( + TEXT("r.NGX.EnableOtherLoggingSinks"), 0, + TEXT("Determines whether the NGX implementation will write logs to files. Can also be set on the command line via -NGXLogFileEnable and -NGXLogFileDisable\n") + TEXT("0: off (default)\n") + TEXT("1: on \n"), + ECVF_ReadOnly); + + +static TAutoConsoleVariable CVarNGXFramesUntilFeatureDestruction( + TEXT("r.NGX.FramesUntilFeatureDestruction"), 3, + TEXT("Number of frames until an unused NGX feature gets destroyed. (default=3)"), + ECVF_RenderThreadSafe); + +static TAutoConsoleVariable CVarNGXRenameLogSeverities( + TEXT("r.NGX.RenameNGXLogSeverities"), 1, + TEXT("Renames 'error' and 'warning' in messages returned by the NGX log callback to 'e_rror' and 'w_arning' before passing them to the UE log system\n") + TEXT("0: off \n") + TEXT("1: on, for select messages during initalization (default)\n") + TEXT("2: on, for all messages\n"), + ECVF_Default); + +void FRHIDLSSArguments::Validate() const +{ + check(InputColor); + check(InputDepth); + check(InputMotionVectors); + check(InputExposure); + check(OutputColor); +} + +NGXDLSSFeature::~NGXDLSSFeature() +{ + check(!IsRunningRHIInSeparateThread() || IsInRHIThread()); + UE_LOG(LogDLSSNGXRHI, Log, TEXT("Destroying NGX DLSS Feature %s "), *Desc.GetDebugDescription()); +} + +void NVSDK_CONV NGXLogSink(const char* InNGXMessage, NVSDK_NGX_Logging_Level InLoggingLevel, NVSDK_NGX_Feature InSourceComponent) +{ + FString Message(FString(UTF8_TO_TCHAR(InNGXMessage)).TrimEnd()); + const TCHAR* NGXComponent = TEXT("Unknown"); + + switch (InSourceComponent) + { + case NVSDK_NGX_Feature_SuperSampling: NGXComponent = TEXT("DLSS"); break; + case NVSDK_NGX_Feature_Reserved_SDK : NGXComponent = TEXT("SDK"); break; + case NVSDK_NGX_Feature_Reserved_Core: NGXComponent = TEXT("Core"); break; + } + + const bool bIsVerboseStartupMessage = + (Message.Contains(TEXT(" doesn't exist in any of the search paths")) && !Message.Contains(TEXT("nvngx_dlss.dll"))) || // we want to know if the DLSS binary is missing + Message.Contains(TEXT("warning: UWP compliant mode enabled")); + + + + if ((CVarNGXRenameLogSeverities.GetValueOnAnyThread() == 2) || ((CVarNGXRenameLogSeverities.GetValueOnAnyThread() == 1) && bIsVerboseStartupMessage)) + { + Message = Message.Replace(TEXT("error:"), TEXT("e_rror:")); + Message = Message.Replace(TEXT("Warning:"), TEXT("w_arning:")); + UE_LOG(LogDLSSNGX, Verbose, TEXT("[%s]: %s"), NGXComponent, *Message); + } + else + { + UE_LOG(LogDLSSNGX, Log, TEXT("[%s]: %s"), NGXComponent, *Message); + } + +} + + +// the derived RHIs will set this to false based on runtime support +bool NGXRHI::bSupportsAllocateParameters = true; + +bool NGXRHI::bNGXInitialized = false; + +// the derived RHIs will set this to true during their initialization +bool NGXRHI::bIsIncompatibleAPICaptureToolActive = false; + +NGXRHI::NGXRHI(const FNGXRHICreateArguments& Arguments) + : DynamicRHI(Arguments.DynamicRHI) +{ + FString PluginNGXProductionBinariesDir = FPaths::Combine(Arguments.PluginBaseDir, TEXT("Binaries/ThirdParty/Win64/")); + FString PluginNGXDevelopmentBinariesDir = FPaths::Combine(Arguments.PluginBaseDir, TEXT("Binaries/ThirdParty/Win64/Development/")); + FString PluginNGXBinariesDir = PluginNGXProductionBinariesDir; + + // Thee paths can be different depending on the project type (source, no source) and how the project is packaged, thus we have both + FString ProjectNGXBinariesDir = FPaths::Combine(FPaths::ProjectDir(), TEXT("Binaries/ThirdParty/NVIDIA/NGX/Win64/")); + FString LaunchNGXBinariesDir = FPaths::Combine(FPaths::LaunchDir(), TEXT("Binaries/ThirdParty/NVIDIA/NGX/Win64/")); + + switch (Arguments.NGXBinariesSearchOrder) + { + default: + case ENGXBinariesSearchOrder::CustomThenGeneric: + { + UE_LOG(LogDLSSNGXRHI, Log, TEXT("Searching for custom and generic DLSS binaries")); + NGXDLLSearchPaths.Append({ ProjectNGXBinariesDir, LaunchNGXBinariesDir, PluginNGXProductionBinariesDir }); + break; + } + case ENGXBinariesSearchOrder::ForceGeneric: + { + UE_LOG(LogDLSSNGXRHI, Log, TEXT("Searching only for generic binaries from the plugin folder")); + NGXDLLSearchPaths.Append({ PluginNGXProductionBinariesDir }); + break; + } + case ENGXBinariesSearchOrder::ForceCustom: + { + UE_LOG(LogDLSSNGXRHI, Log, TEXT("Searching only for custom DLSS binaries from the DLSS plugin")); + NGXDLLSearchPaths.Append({ ProjectNGXBinariesDir, LaunchNGXBinariesDir }); + break; + } + case ENGXBinariesSearchOrder::ForceDevelopmentGeneric: + { + UE_LOG(LogDLSSNGXRHI, Log, TEXT("Searching only for generic development DLSS binaries from the DLSS plugin. This binary is only packaged for non-shipping build configurations")); + NGXDLLSearchPaths.Append({ PluginNGXDevelopmentBinariesDir }); + PluginNGXBinariesDir = PluginNGXDevelopmentBinariesDir; + break; + } + } + + for (int32 i = 0; i < NGXDLLSearchPaths.Num(); ++i) + { + NGXDLLSearchPaths[i] = FPaths::ConvertRelativePathToFull(NGXDLLSearchPaths[i]); + FPaths::RemoveDuplicateSlashes(NGXDLLSearchPaths[i]); + FPaths::MakePlatformFilename(NGXDLLSearchPaths[i]); + + // After this we should not touch NGXDLLSearchPaths since that provides the backing store for NGXDLLSearchPathRawStrings + NGXDLLSearchPathRawStrings.Add(*NGXDLLSearchPaths[i]); + const bool bHasDLSSBinary = IPlatformFile::GetPlatformPhysical().FileExists(*FPaths::Combine(NGXDLLSearchPaths[i], NGX_DLSS_BINARY_NAME)); + UE_LOG(LogDLSSNGXRHI, Log, TEXT("NVIDIA NGX DLSS binary %s %s in search path %s"), NGX_DLSS_BINARY_NAME, bHasDLSSBinary ? TEXT("found") : TEXT("not found"), *NGXDLLSearchPaths[i]); + } + + // we do this separately here so we can show relative paths in the UI later + DLSSGenericBinaryInfo.Get<0>() = FPaths::Combine(PluginNGXBinariesDir, NGX_DLSS_BINARY_NAME); + DLSSGenericBinaryInfo.Get<1>() = IPlatformFile::GetPlatformPhysical().FileExists(*DLSSGenericBinaryInfo.Get<0>()); + + DLSSCustomBinaryInfo.Get<0>() = FPaths::Combine(ProjectNGXBinariesDir, NGX_DLSS_BINARY_NAME); + DLSSCustomBinaryInfo.Get<1>() = IPlatformFile::GetPlatformPhysical().FileExists(*DLSSCustomBinaryInfo.Get<0>()); + + FeatureInfo.PathListInfo.Path = const_cast(NGXDLLSearchPathRawStrings.GetData()); + FeatureInfo.PathListInfo.Length = NGXDLLSearchPathRawStrings.Num(); + + // logging + { + FeatureInfo.LoggingInfo.DisableOtherLoggingSinks = 1 != CVarNGXEnableOtherLoggingSinks.GetValueOnAnyThread(); + FeatureInfo.LoggingInfo.LoggingCallback = &NGXLogSink; + + switch (CVarNGXLogLevel.GetValueOnAnyThread()) + { + case 0: + FeatureInfo.LoggingInfo.MinimumLoggingLevel = NVSDK_NGX_LOGGING_LEVEL_OFF; + break; + // should match the CVarNGXLogLevel default value + default: + case 1: + FeatureInfo.LoggingInfo.MinimumLoggingLevel = NVSDK_NGX_LOGGING_LEVEL_ON; + break; + case 2: + FeatureInfo.LoggingInfo.MinimumLoggingLevel = NVSDK_NGX_LOGGING_LEVEL_VERBOSE; + break; + } + } +} + +TTuple NGXRHI::GetDLSSGenericBinaryInfo() const +{ + return DLSSGenericBinaryInfo; +} + +TTuple NGXRHI::GetDLSSCustomBinaryInfo() const +{ + return DLSSCustomBinaryInfo; +} + +NGXRHI::~NGXRHI() +{ + UE_LOG(LogDLSSNGXRHI, Log, TEXT("%s Enter"), ANSI_TO_TCHAR(__FUNCTION__)); + UE_LOG(LogDLSSNGXRHI, Log, TEXT("%s Leave"), ANSI_TO_TCHAR(__FUNCTION__)); +} + + +void NGXRHI::FDLSSQueryFeature::QueryDLSSSupport() +{ + int32 bNeedsUpdatedDriver = 0; + int32 MinDriverVersionMajor = 0; + int32 MinDriverVersionMinor = 0; + + // Centralize this here instead during NGXRHI init. This should not happen but if we don't have a a valid CapabilityParameters, then we also don't have DLSS. + if (!CapabilityParameters) + { + UE_LOG(LogDLSSNGXRHI, Log, TEXT("NVIDIA NGX DLSS cannot be loaded possibly due to issues initializing NGX.")); + DLSSInitResult = NVSDK_NGX_Result_Fail; + bIsAvailable = false; + return; + } + + check(CapabilityParameters); + + NVSDK_NGX_Result ResultUpdatedDriver = CapabilityParameters->Get(NVSDK_NGX_Parameter_SuperSampling_NeedsUpdatedDriver, &bNeedsUpdatedDriver); + NVSDK_NGX_Result ResultMinDriverVersionMajor = CapabilityParameters->Get(NVSDK_NGX_Parameter_SuperSampling_MinDriverVersionMajor, &MinDriverVersionMajor); + NVSDK_NGX_Result ResultMinDriverVersionMinor = CapabilityParameters->Get(NVSDK_NGX_Parameter_SuperSampling_MinDriverVersionMinor, &MinDriverVersionMinor); + + UE_LOG(LogDLSSNGXRHI, Log, TEXT("Get NVSDK_NGX_Parameter_SuperSampling_NeedsUpdatedDriver -> (%u %s), bNeedsUpdatedDriver = %d"), ResultUpdatedDriver, GetNGXResultAsString(ResultUpdatedDriver), bNeedsUpdatedDriver); + UE_LOG(LogDLSSNGXRHI, Log, TEXT("Get NVSDK_NGX_Parameter_SuperSampling_MinDriverVersionMajor -> (%u %s), MinDriverVersionMajor = %d"), ResultMinDriverVersionMajor, GetNGXResultAsString(ResultMinDriverVersionMajor), MinDriverVersionMajor); + UE_LOG(LogDLSSNGXRHI, Log, TEXT("Get NVSDK_NGX_Parameter_SuperSampling_MinDriverVersionMinor -> (%u %s), MinDriverVersionMinor = %d"), ResultMinDriverVersionMinor, GetNGXResultAsString(ResultMinDriverVersionMinor), MinDriverVersionMinor); + + if (NVSDK_NGX_SUCCEED(ResultUpdatedDriver) && NVSDK_NGX_SUCCEED(ResultMinDriverVersionMajor) && NVSDK_NGX_SUCCEED(ResultMinDriverVersionMinor)) + { + DriverRequirements.DriverUpdateRequired = DriverRequirements.DriverUpdateRequired || bNeedsUpdatedDriver != 0; + + // ignore 0.0 and fall back to the what's baked into FNGXDriverRequirements; + if (MinDriverVersionMajor) + { + + DriverRequirements.MinDriverVersionMajor = MinDriverVersionMajor; + } + + if (MinDriverVersionMinor) + { + DriverRequirements.MinDriverVersionMinor = MinDriverVersionMinor; + } + + + if (bNeedsUpdatedDriver) + { + UE_LOG(LogDLSSNGXRHI, Log, TEXT("NVIDIA NGX DLSS cannot be loaded due to an outdated driver. Minimum Driver Version required : %u.%u"), MinDriverVersionMajor, MinDriverVersionMinor); + } + else + { + UE_LOG(LogDLSSNGXRHI, Log, TEXT("NVIDIA NGX DLSS is supported by the currently installed driver. Minimum driver version was reported as: %u.%u"), MinDriverVersionMajor, MinDriverVersionMinor); + } + } + else + { + UE_LOG(LogDLSSNGXRHI, Log, TEXT("NVIDIA NGX DLSS Minimum driver version was not reported")); + } + + // determine if DLSS is available + int DlssAvailable = 0; + NVSDK_NGX_Result ResultAvailable = CapabilityParameters->Get(NVSDK_NGX_EParameter_SuperSampling_Available, &DlssAvailable); + UE_LOG(LogDLSSNGXRHI, Log, TEXT("Get NVSDK_NGX_EParameter_SuperSampling_Available -> (%u %s), DlssAvailable = %d"), ResultAvailable, GetNGXResultAsString(ResultAvailable), DlssAvailable); + + if (NVSDK_NGX_SUCCEED(ResultAvailable) && DlssAvailable) + { + bIsAvailable = true; + + // store for the higher level code interpret + DLSSInitResult = ResultAvailable; + } + + // DLSS_TODO verify this + if(!DlssAvailable) + { + // and try to find out more details on why it might have failed + NVSDK_NGX_Result DlssFeatureInitResult = NVSDK_NGX_Result_Fail; + NVSDK_NGX_Result ResultDlssFeatureInitResult = CapabilityParameters->Get(NVSDK_NGX_Parameter_SuperSampling_FeatureInitResult, (int*)&DlssFeatureInitResult); + UE_LOG(LogDLSSNGXRHI, Log, TEXT("Get NVSDK_NGX_Parameter_SuperSampling_FeatureInitResult -> (%u %s), NVSDK_NGX_Parameter_SuperSampling_FeatureInitResult = (%u %s)"), ResultDlssFeatureInitResult, GetNGXResultAsString(ResultDlssFeatureInitResult), DlssFeatureInitResult, GetNGXResultAsString(DlssFeatureInitResult)); + + // store for the higher level code interpret + DLSSInitResult = NVSDK_NGX_SUCCEED(ResultDlssFeatureInitResult) ? DlssFeatureInitResult : NVSDK_NGX_Result_Fail; + } +} + +FDLSSOptimalSettings NGXRHI::FDLSSQueryFeature::GetDLSSOptimalSettings(const FDLSSResolutionParameters& InResolution) const +{ + check(CapabilityParameters); + + FDLSSOptimalSettings OptimalSettings; + + const NVSDK_NGX_Result ResultGetOptimalSettings = NGX_DLSS_GET_OPTIMAL_SETTINGS( + CapabilityParameters, + InResolution.Width, + InResolution.Height, + InResolution.PerfQuality, + reinterpret_cast(&OptimalSettings.RenderSize.X), + reinterpret_cast(&OptimalSettings.RenderSize.Y), + reinterpret_cast(&OptimalSettings.RenderSizeMax.X), + reinterpret_cast(&OptimalSettings.RenderSizeMax.Y), + reinterpret_cast(&OptimalSettings.RenderSizeMin.X), + reinterpret_cast(&OptimalSettings.RenderSizeMin.Y), + &OptimalSettings.Sharpness + ); + UE_LOG(LogDLSSNGXRHI, Log, TEXT("NGX_DLSS_GET_OPTIMAL_SETTINGS -> (%u %s)"), ResultGetOptimalSettings, GetNGXResultAsString(ResultGetOptimalSettings)); + checkf(NVSDK_NGX_SUCCEED(ResultGetOptimalSettings), TEXT("failed to query supported DLSS modes")); + + OptimalSettings.bIsSupported = (OptimalSettings.RenderSize.X > 0) && (OptimalSettings.RenderSize.Y > 0); + auto ComputeResolutionFraction = [&InResolution](int32 RenderSizeX, int32 RenderSizeY) + { + float XScale = float(RenderSizeX) / float(InResolution.Width); + float YScale = float(RenderSizeY) / float(InResolution.Height); + return FMath::Min(XScale, YScale); + }; + + + OptimalSettings.MinResolutionFraction = ComputeResolutionFraction(OptimalSettings.RenderSizeMin.X, OptimalSettings.RenderSizeMin.Y); + OptimalSettings.MaxResolutionFraction = ComputeResolutionFraction(OptimalSettings.RenderSizeMax.X, OptimalSettings.RenderSizeMax.Y); + + // restrict to range since floating point numbers are gonna floating point + OptimalSettings.OptimalResolutionFraction = FMath::Clamp(ComputeResolutionFraction(OptimalSettings.RenderSize.X, OptimalSettings.RenderSize.Y), OptimalSettings.MinResolutionFraction, OptimalSettings.MaxResolutionFraction); + + + return OptimalSettings; +} + + FString NGXRHI::GetNGXLogDirectory() +{ + // encode the time and instance id to handle cases like PIE standalone game where multiple processe are running at the same time. + FString AbsoluteProjectLogDir = FPaths::ConvertRelativePathToFull(FPaths::ProjectLogDir()); + FString NGXLogDir = FPaths::Combine(AbsoluteProjectLogDir, TEXT("NGX"), FString::Printf(TEXT("NGX_%s_%s"), *FDateTime::Now().ToString(), *FApp::GetInstanceId().ToString())); + return NGXLogDir; +} + +uint32 FRHIDLSSArguments::GetNGXCommonDLSSFeatureFlags() const +{ + check(!IsRunningRHIInSeparateThread() || IsInRHIThread()); + uint32 DLSSFeatureFlags = NVSDK_NGX_DLSS_Feature_Flags_None; + DLSSFeatureFlags |= NVSDK_NGX_DLSS_Feature_Flags_IsHDR; + DLSSFeatureFlags |= bool(ERHIZBuffer::IsInverted) ? NVSDK_NGX_DLSS_Feature_Flags_DepthInverted : 0; + DLSSFeatureFlags |= !bHighResolutionMotionVectors ? NVSDK_NGX_DLSS_Feature_Flags_MVLowRes : 0; + DLSSFeatureFlags |= Sharpness != 0.0f ? NVSDK_NGX_DLSS_Feature_Flags_DoSharpening : 0; + DLSSFeatureFlags |= bUseAutoExposure ? NVSDK_NGX_DLSS_Feature_Flags_AutoExposure : 0; + return DLSSFeatureFlags; +} + +NVSDK_NGX_DLSS_Create_Params FRHIDLSSArguments::GetNGXDLSSCreateParams() const +{ + check(!IsRunningRHIInSeparateThread() || IsInRHIThread()); + NVSDK_NGX_DLSS_Create_Params Result; + FMemory::Memzero(Result); + Result.Feature.InWidth = SrcRect.Width(); + Result.Feature.InHeight = SrcRect.Height(); + Result.Feature.InTargetWidth = DestRect.Width(); + Result.Feature.InTargetHeight = DestRect.Height(); + Result.Feature.InPerfQualityValue = static_cast(PerfQuality); + check((Result.Feature.InPerfQualityValue >= NVSDK_NGX_PerfQuality_Value_MaxPerf) && (Result.Feature.InPerfQualityValue <= NVSDK_NGX_PerfQuality_Value_UltraQuality)); + + Result.InFeatureCreateFlags = GetNGXCommonDLSSFeatureFlags(); + Result.InEnableOutputSubrects = OutputColor->GetTexture2D()->GetSizeXY() != DestRect.Size(); + return Result; +} + + + +// this is used by the RHIs to see whether they need to recreate the NGX feature +bool FDLSSState::RequiresFeatureRecreation(const FRHIDLSSArguments& InArguments) +{ + check(!IsRunningRHIInSeparateThread() || IsInRHIThread()); + return !DLSSFeature || DLSSFeature->Desc != InArguments.GetFeatureDesc(); +} + +void NGXRHI::RegisterFeature(TSharedPtr InFeature) +{ + check(!IsRunningRHIInSeparateThread() || IsInRHIThread()); + UE_LOG(LogDLSSNGXRHI, Log, TEXT("Creating NGX DLSS Feature %s "), *InFeature->Desc.GetDebugDescription()); + AllocatedDLSSFeatures.Add(InFeature); +} + +TSharedPtr NGXRHI::FindFreeFeature(const FRHIDLSSArguments& InArguments) +{ + check(!IsRunningRHIInSeparateThread() || IsInRHIThread()); + TSharedPtr OutFeature; + for (int FeatureIndex = 0; FeatureIndex < AllocatedDLSSFeatures.Num(); ++FeatureIndex) + { + // another view already uses this (1 reference from AllocatedDLSSFeatures, another refernces held by FDLSState + if (AllocatedDLSSFeatures[FeatureIndex].GetSharedReferenceCount() > 1) + { + continue; + } + + if (AllocatedDLSSFeatures[FeatureIndex]->Desc == InArguments.GetFeatureDesc()) + { + OutFeature = AllocatedDLSSFeatures[FeatureIndex]; + OutFeature->LastUsedFrame = FrameCounter; + break; + + } + } + return OutFeature; +} + +void NGXRHI::ReleaseAllocatedFeatures() +{ + UE_LOG(LogDLSSNGXRHI, Log, TEXT("%s Enter"), ANSI_TO_TCHAR(__FUNCTION__)); + + // There should be no FDLSSState::DLSSFeature anymore when we shut down + for (int FeatureIndex = 0; FeatureIndex < AllocatedDLSSFeatures.Num(); ++FeatureIndex) + { + checkf(AllocatedDLSSFeatures[FeatureIndex].GetSharedReferenceCount() == 1,TEXT("There should be no FDLSSState::DLSSFeature references elsewhere.")); + } + + AllocatedDLSSFeatures.Empty(); + SET_DWORD_STAT(STAT_DLSSNumFeatures, AllocatedDLSSFeatures.Num()); + UE_LOG(LogDLSSNGXRHI, Log, TEXT("%s Leave"), ANSI_TO_TCHAR(__FUNCTION__)); +} + +void NGXRHI::ApplyCommonNGXParameterSettings(NVSDK_NGX_Parameter* InOutParameter, const FRHIDLSSArguments& InArguments) +{ + NVSDK_NGX_Parameter_SetI(InOutParameter, NVSDK_NGX_Parameter_FreeMemOnReleaseFeature, InArguments.bReleaseMemoryOnDelete ? 1 : 0); +} + +void NGXRHI::TickPoolElements() +{ + check(!IsRunningRHIInSeparateThread() || IsInRHIThread()); + const uint32 kFramesUntilRelease = CVarNGXFramesUntilFeatureDestruction.GetValueOnAnyThread(); + + int32 FeatureIndex = 0; + + while (FeatureIndex < AllocatedDLSSFeatures.Num()) + { + TSharedPtr& Feature = AllocatedDLSSFeatures[FeatureIndex]; + + const bool bIsUnused = Feature.GetSharedReferenceCount() == 1; + const bool bNotRequestedRecently = (FrameCounter - Feature->LastUsedFrame) > kFramesUntilRelease; + + if (bIsUnused && bNotRequestedRecently) + { + Swap(Feature, AllocatedDLSSFeatures.Last()); + AllocatedDLSSFeatures.Pop(); + } + else + { + ++FeatureIndex; + } + } + + SET_DWORD_STAT(STAT_DLSSNumFeatures, AllocatedDLSSFeatures.Num()); + + + // if r.NGX.Enable is 0 then this should be nullptr + if(DLSSQueryFeature.CapabilityParameters) + { + static const auto CVarNGXDLSSEnable = IConsoleManager::Get().FindConsoleVariable(TEXT("r.NGX.Enable")); + check(CVarNGXDLSSEnable && CVarNGXDLSSEnable->GetInt() != 0); + + unsigned long long VRAM = 0; + + NVSDK_NGX_Result ResultGetStats = NGX_DLSS_GET_STATS(DLSSQueryFeature.CapabilityParameters, &VRAM); + + checkf(NVSDK_NGX_SUCCEED(ResultGetStats), TEXT("Failed to retrieve DLSS memory statistics via NGX_DLSS_GET_STATS -> (%u %s)"), ResultGetStats, GetNGXResultAsString(ResultGetStats)); + if (NVSDK_NGX_SUCCEED(ResultGetStats)) + { + SET_DWORD_STAT(STAT_DLSSInternalGPUMemory, VRAM); + } + } + + ++FrameCounter; +} + +IMPLEMENT_MODULE(FNGXRHIModule, NGXRHI) + +#undef LOCTEXT_NAMESPACE + +/** IModuleInterface implementation */ + +void FNGXRHIModule::StartupModule() +{ + UE_LOG(LogDLSSNGXRHI, Log, TEXT("%s Enter"), ANSI_TO_TCHAR(__FUNCTION__)); + + int32 NGXLogLevel = CVarNGXLogLevel.GetValueOnAnyThread(); + if (FParse::Value(FCommandLine::Get(), TEXT("ngxloglevel="), NGXLogLevel)) + { + CVarNGXLogLevel->Set(NGXLogLevel, ECVF_SetByCommandline); + } + + if (FParse::Param(FCommandLine::Get(), TEXT("ngxlogfileenable"))) + { + CVarNGXEnableOtherLoggingSinks->Set(1, ECVF_SetByCommandline); + } + else if (FParse::Param(FCommandLine::Get(), TEXT("ngxlogfiledisable"))) + { + CVarNGXEnableOtherLoggingSinks->Set(0, ECVF_SetByCommandline); + } + + UE_LOG(LogDLSSNGXRHI, Log, TEXT("%s Leave"), ANSI_TO_TCHAR(__FUNCTION__)); +} + +void FNGXRHIModule::ShutdownModule() +{ + UE_LOG(LogDLSSNGXRHI, Log, TEXT("%s Enter"), ANSI_TO_TCHAR(__FUNCTION__)); + UE_LOG(LogDLSSNGXRHI, Log, TEXT("%s Leave"), ANSI_TO_TCHAR(__FUNCTION__)); +} + diff --git a/plugins/DLSS/Source/NGXRHI/Public/NGXRHI.h b/plugins/DLSS/Source/NGXRHI/Public/NGXRHI.h new file mode 100644 index 00000000..e31aeb74 --- /dev/null +++ b/plugins/DLSS/Source/NGXRHI/Public/NGXRHI.h @@ -0,0 +1,409 @@ +/* +* Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#pragma once + +#include "Modules/ModuleManager.h" + +#include "CoreMinimal.h" +#include "RendererInterface.h" +#include "Runtime/Launch/Resources/Version.h" + +#include "nvsdk_ngx_params.h" + +#define NVSDK_NGX_VERSION_API_MACRO_BASE_LINE (0x0000013) +#define NVSDK_NGX_VERSION_API_MACRO_WITH_LOGGING (0x0000014) + +struct FDLSSState; + +struct FDLSSFeatureDesc +{ + bool operator != (const FDLSSFeatureDesc& Other) const + { + return DestRect.Size() != Other.DestRect.Size() + || PerfQuality != Other.PerfQuality + || bHighResolutionMotionVectors != Other.bHighResolutionMotionVectors + || bNonZeroSharpness != Other.bNonZeroSharpness + || bUseAutoExposure != Other.bUseAutoExposure + || bReleaseMemoryOnDelete != Other.bReleaseMemoryOnDelete + || GPUNode != Other.GPUNode + || GPUVisibility != Other.GPUVisibility; + } + + bool operator == (const FDLSSFeatureDesc& Other) const + { + return !operator !=(Other); + } + + FIntRect SrcRect = FIntRect(FIntPoint::NoneValue, FIntPoint::NoneValue); + FIntRect DestRect = FIntRect(FIntPoint::NoneValue, FIntPoint::NoneValue); + int32 PerfQuality = -1; + bool bHighResolutionMotionVectors = false; + bool bNonZeroSharpness = false; + bool bUseAutoExposure = false; + bool bReleaseMemoryOnDelete = false; + uint32 GPUNode = 0; + uint32 GPUVisibility = 0; + FString GetDebugDescription() const + { + auto NGXPerfQualityString = [] (int NGXPerfQuality) + { + switch (NGXPerfQuality) + { + case NVSDK_NGX_PerfQuality_Value_MaxPerf:return TEXT("MaxPerf"); + case NVSDK_NGX_PerfQuality_Value_Balanced:return TEXT("Balanced"); + case NVSDK_NGX_PerfQuality_Value_MaxQuality:return TEXT("MaxQuality"); + case NVSDK_NGX_PerfQuality_Value_UltraPerformance:return TEXT("UltraPerformance"); + case NVSDK_NGX_PerfQuality_Value_UltraQuality:return TEXT("UltraQuality"); + default:return TEXT("Invalid NVSDK_NGX_PerfQuality_Value"); + } + }; + return FString::Printf(TEXT("SrcRect=[%dx%d->%dx%d], DestRect=[%dx%d->%dx%d], ScaleX=%f, ScaleY=%f, NGXPerfQuality=%s(%d), bHighResolutionMotionVectors=%d, bNonZeroSharpness=%d, bUseAutoExposure=%d, bReleaseMemoryOnDelete=%d, GPUNode=%u, GPUVisibility=0x%x"), + SrcRect.Min.X, SrcRect.Min.Y, SrcRect.Max.X, SrcRect.Max.Y, + DestRect.Min.X, DestRect.Min.Y, DestRect.Max.X, DestRect.Max.Y, + float(SrcRect.Width()) / float(DestRect.Width()), + float(SrcRect.Height()) / float(DestRect.Height()), + NGXPerfQualityString(PerfQuality), + PerfQuality, + bHighResolutionMotionVectors, + bNonZeroSharpness, + bUseAutoExposure, + bReleaseMemoryOnDelete, + GPUNode, + GPUVisibility); + + } +}; + +struct NGXRHI_API FRHIDLSSArguments +{ + FRHITexture* InputColor = nullptr; + FRHITexture* InputDepth = nullptr; + FRHITexture* InputMotionVectors = nullptr; + FRHITexture* InputExposure = nullptr; + + FRHITexture* OutputColor = nullptr; + + FIntRect SrcRect = FIntRect(FIntPoint::ZeroValue, FIntPoint::ZeroValue); + FIntRect DestRect = FIntRect(FIntPoint::ZeroValue, FIntPoint::ZeroValue); +#if ENGINE_MAJOR_VERSION < 5 + FVector2D JitterOffset= FVector2D::ZeroVector; + FVector2D MotionVectorScale{ 1.0f,1.0f }; +#else + FVector2f JitterOffset = FVector2f::ZeroVector; + FVector2f MotionVectorScale = FVector2f::UnitVector; +#endif + bool bHighResolutionMotionVectors = false; + + float Sharpness = 0.0f; + bool bReset = false; + + int32 PerfQuality = 0; + float DeltaTime = 0.0f; + + float PreExposure = 1.0f; + bool bUseAutoExposure = false; + + + bool bReleaseMemoryOnDelete = false; + uint32 GPUNode = 0; + uint32 GPUVisibility = 0; + void Validate() const; + + inline FDLSSFeatureDesc GetFeatureDesc() const + { + return FDLSSFeatureDesc{ SrcRect, DestRect, PerfQuality, bHighResolutionMotionVectors, Sharpness != 0.0f, bUseAutoExposure, bReleaseMemoryOnDelete, GPUNode, GPUVisibility}; + } + + uint32 GetNGXCommonDLSSFeatureFlags() const; + NVSDK_NGX_DLSS_Create_Params GetNGXDLSSCreateParams() const; +}; + +struct FNGXDriverRequirements +{ + bool DriverUpdateRequired = false; + int32 MinDriverVersionMajor = 470; + int32 MinDriverVersionMinor = 0; +}; + +// the API specic RHI extensions derive from this to handle the lifetime +class NGXRHI_API NGXDLSSFeature +{ +public: + virtual ~NGXDLSSFeature() = 0; + + FDLSSFeatureDesc Desc; + NVSDK_NGX_Handle* Feature = nullptr; + NVSDK_NGX_Parameter* Parameter = nullptr; + uint32 LastUsedFrame = 0; + + void Tick(uint32 InFrameNumber) + { + check(Feature); + check(Parameter); + LastUsedFrame = InFrameNumber; + } + + NGXDLSSFeature(NVSDK_NGX_Handle* InFeature, NVSDK_NGX_Parameter* InParameter, const FDLSSFeatureDesc& InFeatureDesc, uint32 InLastUsedEvaluation) + : Desc(InFeatureDesc) + , Feature(InFeature) + , Parameter(InParameter) + , LastUsedFrame(InLastUsedEvaluation) + { + check(!IsRunningRHIInSeparateThread() || IsInRHIThread()); + check(Feature); + check(Parameter); + } + bool IsValid() const + { + return Feature && Parameter; + } +}; + +struct NGXRHI_API FDLSSState +{ + // this is used by the RHIs to see whether they need to recreate the NGX feature + + bool RequiresFeatureRecreation(const FRHIDLSSArguments& InArguments); + + bool HasValidFeature() const + { + return DLSSFeature && DLSSFeature->IsValid(); + } + + // this is stored via pointer to allow the NGXRHIs use the API specific functions to create & release + TSharedPtr DLSSFeature; +}; + +using FDLSSStateRef = TSharedPtr; + +enum class ENGXBinariesSearchOrder +{ + MinValue = 0, + CustomThenGeneric = 0, + ForceGeneric = 1, + ForceCustom = 2, + ForceDevelopmentGeneric = 3, + MaxValue = ForceDevelopmentGeneric +}; + +enum class ENGXProjectIdentifier +{ + MinValue = 0, + NGXApplicationIDThenUEProjectID = 0, + ForceUEProjectID = 1, + ForceNGXApplicationID = 2, + MaxValue = ForceNGXApplicationID +}; + +struct FNGXRHICreateArguments +{ + FString PluginBaseDir; + FDynamicRHI* DynamicRHI = nullptr; + ENGXBinariesSearchOrder NGXBinariesSearchOrder = ENGXBinariesSearchOrder::CustomThenGeneric; + + ENGXProjectIdentifier ProjectIdentifier = ENGXProjectIdentifier::NGXApplicationIDThenUEProjectID; + uint32 NGXAppId = 0; + FString UnrealEngineVersion; + FString UnrealProjectID; + + // centralize that logic here for the derived NGXRHIs + bool InitializeNGXWithNGXApplicationID() const + { + if ((ProjectIdentifier == ENGXProjectIdentifier::NGXApplicationIDThenUEProjectID) && (NGXAppId != 0)) + { + return true; + } + else if (ProjectIdentifier == ENGXProjectIdentifier::ForceNGXApplicationID) + { + return true; + } + else + { + return false; + } + } +}; + +struct FDLSSOptimalSettings +{ + FIntPoint RenderSize; + + FIntPoint RenderSizeMin; + FIntPoint RenderSizeMax; + float Sharpness; + + bool bIsSupported; + float OptimalResolutionFraction; + + float MinResolutionFraction; + float MaxResolutionFraction; + + bool IsFixedResolution() const + { + return MinResolutionFraction == MaxResolutionFraction; + } +}; + +class NGXRHI_API NGXRHI +{ + struct NGXRHI_API FDLSSQueryFeature + { + struct FDLSSResolutionParameters + { + uint32 Width = 0; + uint32 Height = 0; + NVSDK_NGX_PerfQuality_Value PerfQuality = NVSDK_NGX_PerfQuality_Value_MaxPerf; + + + FDLSSResolutionParameters(uint32 InWidth, uint32 InHeight, NVSDK_NGX_PerfQuality_Value InPerfQuality) + : Width(InWidth) + , Height(InHeight) + , PerfQuality(InPerfQuality) + {} + }; + + void QueryDLSSSupport(); + FDLSSOptimalSettings GetDLSSOptimalSettings(const FDLSSResolutionParameters& InResolution) const; + + // the lifetime of this is managed directly by the encompassing derived RHI + NVSDK_NGX_Parameter* CapabilityParameters = nullptr; + + bool bIsAvailable = false; + FNGXDriverRequirements DriverRequirements; + + NVSDK_NGX_Result DLSSInitResult = NVSDK_NGX_Result_Fail; + }; + + +public: + + + virtual ~NGXRHI(); + + virtual void ExecuteDLSS(FRHICommandList& CmdList, const FRHIDLSSArguments& InArguments, FDLSSStateRef InDLSSState) = 0; + + bool IsDLSSAvailable() const + { + return DLSSQueryFeature.bIsAvailable; + } + + NVSDK_NGX_Result GetDLSSInitResult() const + { + return DLSSQueryFeature.DLSSInitResult; + } + + const FNGXDriverRequirements& GetDLSSDriverRequirements() const + { + return DLSSQueryFeature.DriverRequirements; + } + + FDLSSOptimalSettings GetDLSSOptimalSettings(const FDLSSQueryFeature::FDLSSResolutionParameters& InResolution) const + { + return DLSSQueryFeature.GetDLSSOptimalSettings(InResolution); + } + + FDLSSOptimalSettings GetDLSSOptimalSettings(NVSDK_NGX_PerfQuality_Value QualityLevel) const + { + return DLSSQueryFeature.GetDLSSOptimalSettings(FDLSSQueryFeature::FDLSSResolutionParameters(1000, 1000, QualityLevel)); + } + + float GetDLSSResolutionFraction(NVSDK_NGX_PerfQuality_Value QualityLevel) const + { + return GetDLSSOptimalSettings(QualityLevel).OptimalResolutionFraction; + } + + TPair GetDLSSGenericBinaryInfo() const; + TPair GetDLSSCustomBinaryInfo() const; + + void TickPoolElements(); + + static bool SupportsAllocateParameters() + { + return bSupportsAllocateParameters; + } + + static bool NGXInitialized() + { + return bNGXInitialized; + } + + static bool IsIncompatibleAPICaptureToolActive() + { + return bIsIncompatibleAPICaptureToolActive; + } + + +protected: + + NGXRHI(const FNGXRHICreateArguments& Arguments); + + const NVSDK_NGX_FeatureCommonInfo* CommonFeatureInfo() const + { + return &FeatureInfo; + } + + void RegisterFeature(TSharedPtr InFeature); + TSharedPtr FindFreeFeature(const FRHIDLSSArguments& InArguments); + + void ReleaseAllocatedFeatures(); + void ApplyCommonNGXParameterSettings(NVSDK_NGX_Parameter* Parameter, const FRHIDLSSArguments& InArguments); + static FString GetNGXLogDirectory(); + + + + + FDynamicRHI* DynamicRHI = nullptr; + + FDLSSQueryFeature DLSSQueryFeature; + + uint32 FrameCounter = 1; + + static bool bNGXInitialized; + static bool bSupportsAllocateParameters; + static bool bIsIncompatibleAPICaptureToolActive; +private: + TArray< TSharedPtr> AllocatedDLSSFeatures; + + TTuple DLSSGenericBinaryInfo; + TTuple DLSSCustomBinaryInfo; + + TArray NGXDLLSearchPaths; + TArray NGXDLLSearchPathRawStrings; + + NVSDK_NGX_FeatureCommonInfo FeatureInfo = {{0}}; +}; + + +// Implemented by the API specific modules +class INGXRHIModule : public IModuleInterface +{ +public: + virtual TUniquePtr CreateNGXRHI(const FNGXRHICreateArguments& Arguments) = 0; +}; + +class FNGXRHIModule final : public IModuleInterface +{ +public: + + /** IModuleInterface implementation */ + virtual void StartupModule(); + virtual void ShutdownModule(); +}; diff --git a/plugins/DLSS/Source/NGXVulkanRHI/NGXVulkanRHI.Build.cs b/plugins/DLSS/Source/NGXVulkanRHI/NGXVulkanRHI.Build.cs new file mode 100644 index 00000000..d59837c2 --- /dev/null +++ b/plugins/DLSS/Source/NGXVulkanRHI/NGXVulkanRHI.Build.cs @@ -0,0 +1,75 @@ +/* +* Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + + +using UnrealBuildTool; +using System.IO; + +public class NGXVulkanRHI : ModuleRules +{ + public NGXVulkanRHI(ReadOnlyTargetRules Target) : base(Target) + { + PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; + + PublicIncludePaths.AddRange( + new string[] { + } + ); + + + PrivateIncludePaths.AddRange( + new string[] { + Path.Combine(EngineDirectory,"Source/Runtime/VulkanRHI/Private"), + Path.Combine(EngineDirectory,"Source/Runtime/VulkanRHI/Private/Windows"), + } + ); + + + PublicDependencyModuleNames.AddRange( + new string[] + { + } + ); + + + PrivateDependencyModuleNames.AddRange( + new string[] + { + "Core", + "Engine", + "RenderCore", + "RHI", + "VulkanRHI", + + "NGX", + "NGXRHI", + } + ); + + if (ReadOnlyBuildVersion.Current.MajorVersion == 5) + { + PrivateDependencyModuleNames.Add("RHICore"); + } + + // those come from the VulkanRHI + AddEngineThirdPartyPrivateStaticDependencies(Target, "Vulkan"); + + } +} diff --git a/plugins/DLSS/Source/NGXVulkanRHI/Private/NGXVulkanRHI.cpp b/plugins/DLSS/Source/NGXVulkanRHI/Private/NGXVulkanRHI.cpp new file mode 100644 index 00000000..40ca0941 --- /dev/null +++ b/plugins/DLSS/Source/NGXVulkanRHI/Private/NGXVulkanRHI.cpp @@ -0,0 +1,371 @@ +/* +* Copyright (c) 2020 - 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +* +* NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +* property and proprietary rights in and to this material, related +* documentation and any modifications thereto. Any use, reproduction, +* disclosure or distribution of this material and related documentation +* without an express license agreement from NVIDIA CORPORATION or +* its affiliates is strictly prohibited. +*/ + +#include "NGXVulkanRHI.h" + +#include "VulkanRHIPrivate.h" +#include "VulkanPendingState.h" +#include "VulkanRHIBridge.h" +#include "VulkanContext.h" + +#include "nvsdk_ngx_vk.h" +#include "nvsdk_ngx_helpers_vk.h" + +#include "GenericPlatform/GenericPlatformFile.h" + +DEFINE_LOG_CATEGORY_STATIC(LogDLSSNGXVulkanRHI, Log, All); + +#define LOCTEXT_NAMESPACE "FNGXVulkanRHIModule" + +class FVulkanNGXDLSSFeature final : public NGXDLSSFeature +{ + +public: + using NGXDLSSFeature::NGXDLSSFeature; + + virtual ~FVulkanNGXDLSSFeature() + { + check(!IsRunningRHIInSeparateThread() || IsInRHIThread()); + check(NGXRHI::NGXInitialized()); + NVSDK_NGX_Result ResultReleaseFeature = NVSDK_NGX_VULKAN_ReleaseFeature(Feature); + checkf(NVSDK_NGX_SUCCEED(ResultReleaseFeature), TEXT("NVSDK_NGX_VULKAN_ReleaseFeature failed! (%u %s), %s"), ResultReleaseFeature, GetNGXResultAsString(ResultReleaseFeature), *Desc.GetDebugDescription()); + + if (NGXRHI::SupportsAllocateParameters()) + { + NVSDK_NGX_Result ResultDestroyParameter = NVSDK_NGX_VULKAN_DestroyParameters(Parameter); + checkf(NVSDK_NGX_SUCCEED(ResultDestroyParameter), TEXT("NVSDK_NGX_VULKAN_DestroyParameters failed! (%u %s), %s"), ResultDestroyParameter, GetNGXResultAsString(ResultDestroyParameter), *Desc.GetDebugDescription()); + } + } +}; + + +class FNGXVulkanRHI final : public NGXRHI +{ + +public: + FNGXVulkanRHI(const FNGXRHICreateArguments& Arguments); + virtual void ExecuteDLSS(FRHICommandList& CmdList, const FRHIDLSSArguments& InArguments, FDLSSStateRef InDLSSState) final; + virtual ~FNGXVulkanRHI(); +private: + + FVulkanDynamicRHI* VulkanRHI = nullptr; + FVulkanDevice* VulkanDevice = nullptr; + + NVSDK_NGX_Result Init_NGX_VK(const FNGXRHICreateArguments& InArguments, const wchar_t* InApplicationDataPath, VkInstance InInstance, VkPhysicalDevice InPD, VkDevice InDevice, const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo); + static bool IsIncompatibleAPICaptureToolActive(); +}; + + +bool FNGXVulkanRHI::IsIncompatibleAPICaptureToolActive() +{ + // TODO figure out whether the renderdoc layer is active, either here or in the PreInit module + return false; +} + +NVSDK_NGX_Result FNGXVulkanRHI::Init_NGX_VK(const FNGXRHICreateArguments& InArguments, const wchar_t* InApplicationDataPath, VkInstance InInstance, VkPhysicalDevice InPD, VkDevice InDevice, const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo) +{ + NVSDK_NGX_Result Result = NVSDK_NGX_Result_Fail; + int32 APIVersion = NVSDK_NGX_VERSION_API_MACRO; + do + { + if (InArguments.InitializeNGXWithNGXApplicationID()) + { + Result = NVSDK_NGX_VULKAN_Init(InArguments.NGXAppId, InApplicationDataPath, InInstance, InPD, InDevice, InFeatureInfo, static_cast(APIVersion)); + UE_LOG(LogDLSSNGXVulkanRHI, Log, TEXT("NVSDK_NGX_VULKAN_Init(AppID= %u, APIVersion = 0x%x) -> (%u %s)"), InArguments.NGXAppId, APIVersion, Result, GetNGXResultAsString(Result)); + } + else + { + Result = NVSDK_NGX_VULKAN_Init_with_ProjectID(TCHAR_TO_UTF8(*InArguments.UnrealProjectID), NVSDK_NGX_ENGINE_TYPE_UNREAL, TCHAR_TO_UTF8(*InArguments.UnrealEngineVersion), InApplicationDataPath, InInstance, InPD, InDevice, InFeatureInfo, static_cast(APIVersion)); + UE_LOG(LogDLSSNGXVulkanRHI, Log, TEXT("NVSDK_NGX_VULKAN_Init(ProjectID = %s, EngineVersion=%s, APIVersion = 0x%x) -> (%u %s)"), *InArguments.UnrealProjectID, *InArguments.UnrealEngineVersion, APIVersion, Result, GetNGXResultAsString(Result)); + } + + if (NVSDK_NGX_FAILED(Result)) + { + NVSDK_NGX_VULKAN_Shutdown(); + } + + --APIVersion; + } while (NVSDK_NGX_FAILED(Result) && APIVersion >= NVSDK_NGX_VERSION_API_MACRO_BASE_LINE); + + if (NVSDK_NGX_SUCCEED(Result) && (APIVersion + 1 < NVSDK_NGX_VERSION_API_MACRO_WITH_LOGGING)) + { + UE_LOG(LogDLSSNGXVulkanRHI, Log, TEXT("Warning: NVSDK_NGX_VULKAN_Init succeeded, but the driver installed on this system is too old the support the NGX logging API. The console variables r.NGX.LogLevel and r.NGX.EnableOtherLoggingSinks will have no effect and NGX logs will only show up in their own log files, and not in UE's log files.")); + } + + return Result; +} + + +FNGXVulkanRHI::FNGXVulkanRHI(const FNGXRHICreateArguments& Arguments) + : NGXRHI(Arguments) + , VulkanRHI(static_cast(Arguments.DynamicRHI)) + , VulkanDevice(VulkanRHIBridge::GetDevice(VulkanRHI) +) +{ + ensure(VulkanRHI); + + const FString NGXLogDir = GetNGXLogDirectory(); + IPlatformFile::GetPlatformPhysical().CreateDirectoryTree(*NGXLogDir); + + bIsIncompatibleAPICaptureToolActive = IsIncompatibleAPICaptureToolActive(); + + VkInstance VulkanInstance = reinterpret_cast(VulkanRHIBridge::GetInstance(VulkanRHI)); + VkPhysicalDevice VulkanPhysicalDevice = reinterpret_cast(VulkanRHIBridge::GetPhysicalDevice(VulkanDevice)); + VkDevice VulkanLogicalDevice = reinterpret_cast(VulkanRHIBridge::GetLogicalDevice(VulkanDevice)); + + NVSDK_NGX_Result ResultInit = Init_NGX_VK(Arguments, *NGXLogDir, VulkanInstance, VulkanPhysicalDevice, VulkanLogicalDevice, CommonFeatureInfo()); + UE_LOG(LogDLSSNGXVulkanRHI, Log, TEXT("NVSDK_NGX_VULKAN_Init (Log %s) -> (%u %s)"), *NGXLogDir, ResultInit, GetNGXResultAsString(ResultInit)); + + // store for the higher level code interpret + DLSSQueryFeature.DLSSInitResult = ResultInit; + + if (NVSDK_NGX_Result_FAIL_OutOfDate == ResultInit) + { + DLSSQueryFeature.DriverRequirements.DriverUpdateRequired = true; + } + else if (NVSDK_NGX_SUCCEED(ResultInit)) + { + bNGXInitialized = true; + + NVSDK_NGX_Result ResultGetParameters = NVSDK_NGX_VULKAN_GetCapabilityParameters(&DLSSQueryFeature.CapabilityParameters); + UE_LOG(LogDLSSNGXVulkanRHI, Log, TEXT("NVSDK_NGX_VULKAN_GetCapabilityParameters -> (%u %s)"), ResultGetParameters, GetNGXResultAsString(ResultGetParameters)); + + if (NVSDK_NGX_Result_FAIL_OutOfDate == ResultGetParameters) + { + DLSSQueryFeature.DriverRequirements.DriverUpdateRequired = true; + } + + if (NVSDK_NGX_FAILED(ResultGetParameters)) + { + ResultGetParameters = NVSDK_NGX_VULKAN_GetParameters(&DLSSQueryFeature.CapabilityParameters); + UE_LOG(LogDLSSNGXVulkanRHI, Log, TEXT("NVSDK_NGX_VULKAN_GetParameters -> (%u %s)"), ResultGetParameters, GetNGXResultAsString(ResultGetParameters)); + + bSupportsAllocateParameters = false; + } + + if (NVSDK_NGX_SUCCEED(ResultGetParameters)) + { + DLSSQueryFeature.QueryDLSSSupport(); + } + } +} + +FNGXVulkanRHI::~FNGXVulkanRHI() +{ + UE_LOG(LogDLSSNGXVulkanRHI, Log, TEXT("%s Enter"), ANSI_TO_TCHAR(__FUNCTION__)); + if (bNGXInitialized) + { + // Destroy the parameters and features before we call NVSDK_NGX_D3D11_Shutdown + ReleaseAllocatedFeatures(); + + NVSDK_NGX_Result Result; + if (bSupportsAllocateParameters && DLSSQueryFeature.CapabilityParameters) + { + Result = NVSDK_NGX_VULKAN_DestroyParameters(DLSSQueryFeature.CapabilityParameters); + UE_LOG(LogDLSSNGXVulkanRHI, Log, TEXT("NVSDK_NGX_VULKAN_DestroyParameters -> (%u %s)"), Result, GetNGXResultAsString(Result)); + } + Result = NVSDK_NGX_VULKAN_Shutdown(); + UE_LOG(LogDLSSNGXVulkanRHI, Log, TEXT("NVSDK_NGX_VULKAN_Shutdown -> (%u %s)"), Result, GetNGXResultAsString(Result)); + bNGXInitialized = false; + } + UE_LOG(LogDLSSNGXVulkanRHI, Log, TEXT("%s Leave"), ANSI_TO_TCHAR(__FUNCTION__)); +} + +void FNGXVulkanRHI::ExecuteDLSS(FRHICommandList& CmdList, const FRHIDLSSArguments& InArguments, FDLSSStateRef InDLSSState) +{ + check(!IsRunningRHIInSeparateThread() || IsInRHIThread()); + check(IsDLSSAvailable()); + if (!IsDLSSAvailable()) return; + + InArguments.Validate(); + + FVulkanCommandListContextImmediate& ImmediateContext = VulkanDevice->GetImmediateContext(); + VkCommandBuffer VulkanCommandBuffer = ImmediateContext.GetCommandBufferManager()->GetActiveCmdBuffer()->GetHandle(); + + if (InDLSSState->RequiresFeatureRecreation(InArguments)) + { + check(!InDLSSState->DLSSFeature || InDLSSState->HasValidFeature()); + InDLSSState->DLSSFeature = nullptr; + } + + if (InArguments.bReset) + { + check(!InDLSSState->DLSSFeature); + InDLSSState->DLSSFeature = FindFreeFeature(InArguments); + } + + if (!InDLSSState->DLSSFeature) + { + NVSDK_NGX_Parameter* NewNGXParameterHandle = nullptr; + if (NGXRHI::SupportsAllocateParameters()) + { + NVSDK_NGX_Result Result = NVSDK_NGX_VULKAN_AllocateParameters(&NewNGXParameterHandle); + checkf(NVSDK_NGX_SUCCEED(Result), TEXT("NVSDK_NGX_VULKAN_AllocateParameters failed! (%u %s)"), Result, GetNGXResultAsString(Result)); + } + else + { + NVSDK_NGX_Result Result = NVSDK_NGX_VULKAN_GetParameters(&NewNGXParameterHandle); + checkf(NVSDK_NGX_SUCCEED(Result), TEXT("NVSDK_NGX_VULKAN_GetParameters failed! (%u %s)"), Result, GetNGXResultAsString(Result)); + } + + ApplyCommonNGXParameterSettings(NewNGXParameterHandle, InArguments); + + NVSDK_NGX_DLSS_Create_Params DlssCreateParams = InArguments.GetNGXDLSSCreateParams(); + NVSDK_NGX_Handle* NewNGXHandle = nullptr; + + const uint32 CreationNodeMask = 1 << InArguments.GPUNode; + const uint32 VisibilityNodeMask = InArguments.GPUVisibility; + + NVSDK_NGX_Result ResultCreate = NGX_VULKAN_CREATE_DLSS_EXT( + VulkanCommandBuffer, + CreationNodeMask, + VisibilityNodeMask, + &NewNGXHandle, + NewNGXParameterHandle, + &DlssCreateParams); + + checkf(NVSDK_NGX_SUCCEED(ResultCreate), TEXT("NGX_VULKAN_CREATE_DLSS failed! (CreationNodeMask=0x%x VisibilityNodeMask=0x%x) (%u %s), %s"), CreationNodeMask, VisibilityNodeMask, ResultCreate, GetNGXResultAsString(ResultCreate), *InArguments.GetFeatureDesc().GetDebugDescription()); + InDLSSState->DLSSFeature = MakeShared(NewNGXHandle, NewNGXParameterHandle, InArguments.GetFeatureDesc(), FrameCounter); + RegisterFeature(InDLSSState->DLSSFeature); + } + + check(InDLSSState->HasValidFeature()); + + // execute + NVSDK_NGX_VK_DLSS_Eval_Params DlssEvalParams; + FMemory::Memzero(DlssEvalParams); + auto NGXVulkanResourceFromRHITexture = [](FRHITexture* InRHITexture) + { + check(InRHITexture); + if (FRHITextureReference* TexRef = InRHITexture->GetTextureReference()) + { + InRHITexture = TexRef->GetReferencedTexture(); + check(InRHITexture); + } + + FVulkanTextureBase* VulkanTexture = static_cast(InRHITexture->GetTextureBaseRHI()); + + NVSDK_NGX_Resource_VK NGXTexture; + FMemory::Memzero(NGXTexture); + + NGXTexture.Type = NVSDK_NGX_RESOURCE_VK_TYPE_VK_IMAGEVIEW; + + // Check for VK_IMAGE_USAGE_STORAGE_BIT. Those are not directly stored but FVulkanSurface::GenerateImageCreateInfo sets the VK flag based on those UEFlags + NGXTexture.ReadWrite = EnumHasAnyFlags(VulkanTexture->Surface.UEFlags, TexCreate_Presentable | TexCreate_UAV); + + NGXTexture.Resource.ImageViewInfo.ImageView = VulkanTexture->DefaultView.View; + NGXTexture.Resource.ImageViewInfo.Image = VulkanTexture->DefaultView.Image; + NGXTexture.Resource.ImageViewInfo.Format = VulkanTexture->Surface.ViewFormat; + + NGXTexture.Resource.ImageViewInfo.Width = VulkanTexture->Surface.Width; + NGXTexture.Resource.ImageViewInfo.Height = VulkanTexture->Surface.Height; + check(VulkanTexture->Surface.Depth == 1); + + NGXTexture.Resource.ImageViewInfo.SubresourceRange.aspectMask = VulkanTexture->Surface.GetFullAspectMask(); + + NGXTexture.Resource.ImageViewInfo.SubresourceRange.layerCount = VulkanTexture->Surface.GetNumberOfArrayLevels(); + NGXTexture.Resource.ImageViewInfo.SubresourceRange.levelCount = VulkanTexture->Surface.GetNumMips(); + + // DLSS_TODO Figure out where to get those from if the textures are arrayed or mipped. + check(VulkanTexture->Surface.GetNumberOfArrayLevels() == 1); + check(VulkanTexture->Surface.GetNumMips() == 1); + NGXTexture.Resource.ImageViewInfo.SubresourceRange.baseMipLevel = 0; + NGXTexture.Resource.ImageViewInfo.SubresourceRange.baseArrayLayer = 0; + + return NGXTexture; + }; + + NVSDK_NGX_Resource_VK InOutput = NGXVulkanResourceFromRHITexture(InArguments.OutputColor); + DlssEvalParams.Feature.pInOutput = &InOutput; + check(InArguments.OutputColor->GetFlags() & ( TexCreate_UAV | TexCreate_Presentable)); + check(InOutput.ReadWrite == true); + DlssEvalParams.InOutputSubrectBase.X = InArguments.DestRect.Min.X; + DlssEvalParams.InOutputSubrectBase.Y = InArguments.DestRect.Min.Y; + + DlssEvalParams.InRenderSubrectDimensions.Width = InArguments.SrcRect.Width(); + DlssEvalParams.InRenderSubrectDimensions.Height = InArguments.SrcRect.Height(); + + NVSDK_NGX_Resource_VK InColor = NGXVulkanResourceFromRHITexture(InArguments.InputColor); + DlssEvalParams.Feature.pInColor = &InColor; + DlssEvalParams.InColorSubrectBase.X = InArguments.SrcRect.Min.X; + DlssEvalParams.InColorSubrectBase.Y = InArguments.SrcRect.Min.Y; + + NVSDK_NGX_Resource_VK InDepth = NGXVulkanResourceFromRHITexture(InArguments.InputDepth); + DlssEvalParams.pInDepth = &InDepth; + DlssEvalParams.InDepthSubrectBase.X = InArguments.SrcRect.Min.X; + DlssEvalParams.InDepthSubrectBase.Y = InArguments.SrcRect.Min.Y; + + NVSDK_NGX_Resource_VK InMotionVectors = NGXVulkanResourceFromRHITexture(InArguments.InputMotionVectors); + DlssEvalParams.pInMotionVectors = &InMotionVectors; + // The VelocityCombine pass puts the motion vectors into the top left corner + DlssEvalParams.InMVSubrectBase.X = 0; + DlssEvalParams.InMVSubrectBase.Y = 0; + + NVSDK_NGX_Resource_VK InExposureTexture = NGXVulkanResourceFromRHITexture(InArguments.InputExposure); + DlssEvalParams.pInExposureTexture = InArguments.bUseAutoExposure ? nullptr : &InExposureTexture; + DlssEvalParams.InPreExposure = InArguments.PreExposure; + + DlssEvalParams.Feature.InSharpness = InArguments.Sharpness; + DlssEvalParams.InJitterOffsetX = InArguments.JitterOffset.X; + DlssEvalParams.InJitterOffsetY = InArguments.JitterOffset.Y; + + DlssEvalParams.InMVScaleX = InArguments.MotionVectorScale.X; + DlssEvalParams.InMVScaleY = InArguments.MotionVectorScale.Y; + DlssEvalParams.InReset = InArguments.bReset; + + + DlssEvalParams.InFrameTimeDeltaInMsec = InArguments.DeltaTime; + + NVSDK_NGX_Result ResultEvaluate = NGX_VULKAN_EVALUATE_DLSS_EXT( + VulkanCommandBuffer, + InDLSSState->DLSSFeature->Feature, + InDLSSState->DLSSFeature->Parameter, + &DlssEvalParams + ); + + checkf(NVSDK_NGX_SUCCEED(ResultEvaluate), TEXT("NGX_Vulkan_EVALUATE_DLSS_EXT failed! (%u %s), %s"), ResultEvaluate, GetNGXResultAsString(ResultEvaluate), *InDLSSState->DLSSFeature->Desc.GetDebugDescription()); + InDLSSState->DLSSFeature->Tick(FrameCounter); + + if (FVulkanPlatform::RegisterGPUWork() && ImmediateContext.IsImmediate()) + { + ImmediateContext.GetGPUProfiler().RegisterGPUWork(1); + } + + + + ImmediateContext.GetPendingComputeState()->Reset(); + ImmediateContext.GetPendingGfxState()->Reset(); +} + + +/** IModuleInterface implementation */ + +void FNGXVulkanRHIModule::StartupModule() +{ + // NGXRHI module should be loaded to ensure logging state is initialized + FModuleManager::LoadModuleChecked(TEXT("NGXRHI")); +} + +void FNGXVulkanRHIModule::ShutdownModule() +{ +} + +TUniquePtr FNGXVulkanRHIModule::CreateNGXRHI(const FNGXRHICreateArguments& Arguments) +{ + TUniquePtr Result(new FNGXVulkanRHI(Arguments)); + return Result; +} + +IMPLEMENT_MODULE(FNGXVulkanRHIModule, NGXVulkanRHI) + +#undef LOCTEXT_NAMESPACE + + diff --git a/plugins/DLSS/Source/NGXVulkanRHI/Public/NGXVulkanRHI.h b/plugins/DLSS/Source/NGXVulkanRHI/Public/NGXVulkanRHI.h new file mode 100644 index 00000000..2fd74353 --- /dev/null +++ b/plugins/DLSS/Source/NGXVulkanRHI/Public/NGXVulkanRHI.h @@ -0,0 +1,36 @@ +/* +* Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#pragma once +#include "Modules/ModuleManager.h" + +#include "NGXRHI.h" + +class FNGXVulkanRHIModule final : public INGXRHIModule +{ +public: + + /** IModuleInterface implementation */ + virtual void StartupModule(); + virtual void ShutdownModule(); + + /** INGXRHIModule implementation */ + virtual TUniquePtr CreateNGXRHI(const FNGXRHICreateArguments& Arguments); +}; diff --git a/plugins/DLSS/Source/NGXVulkanRHIPreInit/NGXVulkanRHIPreInit.Build.cs b/plugins/DLSS/Source/NGXVulkanRHIPreInit/NGXVulkanRHIPreInit.Build.cs new file mode 100644 index 00000000..94e5e321 --- /dev/null +++ b/plugins/DLSS/Source/NGXVulkanRHIPreInit/NGXVulkanRHIPreInit.Build.cs @@ -0,0 +1,71 @@ +/* +* Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +using UnrealBuildTool; +using System.IO; + +public class NGXVulkanRHIPreInit : ModuleRules +{ + public NGXVulkanRHIPreInit(ReadOnlyTargetRules Target) : base(Target) + { + PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; + + PublicIncludePaths.AddRange( + new string[] { + // ... add public include paths required here ... + } + ); + + + PrivateIncludePaths.AddRange( + new string[] { + Path.Combine(EngineDirectory,"Source/Runtime/VulkanRHI/Private"), + Path.Combine(EngineDirectory,"Source/Runtime/VulkanRHI/Private/Windows"), + } + ); + + + PublicDependencyModuleNames.AddRange( + new string[] + { + } + ); + + + PrivateDependencyModuleNames.AddRange( + new string[] + { + "Core", + "Engine", + "RenderCore", + "RHI", + + "VulkanRHI", + "NGX", + } + ); + if (ReadOnlyBuildVersion.Current.MajorVersion == 5) + { + PrivateDependencyModuleNames.Add("RHICore"); + } + // those come from the VulkanRHI + AddEngineThirdPartyPrivateStaticDependencies(Target, "Vulkan"); + } +} diff --git a/plugins/DLSS/Source/NGXVulkanRHIPreInit/Private/NGXVulkanRHIPreInit.cpp b/plugins/DLSS/Source/NGXVulkanRHIPreInit/Private/NGXVulkanRHIPreInit.cpp new file mode 100644 index 00000000..0fc52d40 --- /dev/null +++ b/plugins/DLSS/Source/NGXVulkanRHIPreInit/Private/NGXVulkanRHIPreInit.cpp @@ -0,0 +1,96 @@ +/* +* Copyright (c) 2020 - 2021 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#include "NGXVulkanRHIPreInit.h" + +#include "VulkanRHIPrivate.h" +#include "VulkanRHIBridge.h" + +#include "DynamicRHI.h" + +#include "nvsdk_ngx_vk.h" + +DEFINE_LOG_CATEGORY_STATIC(LogDLSSNGXVulkanRHIPreInit, Log, All); + +#define LOCTEXT_NAMESPACE "FNGXVulkanRHIPreInitModule" + + +void FNGXVulkanRHIPreInitModule::StartupModule() +{ + UE_LOG(LogDLSSNGXVulkanRHIPreInit, Log, TEXT("%s Enter"), ANSI_TO_TCHAR(__FUNCTION__)); + if(FApp::CanEverRender()) + { + const TCHAR* VulkanRHIModuleName = TEXT("VulkanRHI"); + + // don't cleanup since the same module gets loaded shortly thereafter anyways + const TCHAR* DynamicRHIModuleName = GetSelectedDynamicRHIModuleName(false); + UE_LOG(LogDLSSNGXVulkanRHIPreInit, Log, TEXT("GetSelectedDynamicRHIModuleName = %s"), DynamicRHIModuleName); + + if(FString(VulkanRHIModuleName) == FString(DynamicRHIModuleName)) + { + IDynamicRHIModule* VulkanRHIModule = FModuleManager::GetModulePtr(VulkanRHIModuleName); + + if(VulkanRHIModule && VulkanRHIModule->IsSupported()) + { + unsigned int NumInstanceExtensions = 0 ; + const char** InstanceExtensions = nullptr; + unsigned int NumDeviceExtensions = 0; + const char** DeviceExtensions = nullptr; + + const NVSDK_NGX_Result ResultRequiredExtensions = NVSDK_NGX_VULKAN_RequiredExtensions(&NumInstanceExtensions, &InstanceExtensions, &NumDeviceExtensions, &DeviceExtensions); + UE_LOG(LogDLSSNGXVulkanRHIPreInit, Log, TEXT("NVSDK_NGX_VULKAN_RequiredExtensions -> (%u %s)"), ResultRequiredExtensions, GetNGXResultAsString(ResultRequiredExtensions)); + + const TArray RHIBridgeInstanceExtensions(InstanceExtensions, NumInstanceExtensions); + VulkanRHIBridge::AddEnabledInstanceExtensionsAndLayers(RHIBridgeInstanceExtensions, TArray()); + + const TArray RHIBridgeDeviceExtensions(DeviceExtensions, NumDeviceExtensions); + VulkanRHIBridge::AddEnabledDeviceExtensionsAndLayers(RHIBridgeDeviceExtensions, TArray()); + + UE_LOG(LogDLSSNGXVulkanRHIPreInit, Log, TEXT("Preregistered the required NGX DLSS Vulkan device extensions (%u) and instance extensions (%u) via the VulkanRHIBridge"), NumDeviceExtensions, NumInstanceExtensions); + } + else + { + UE_LOG(LogDLSSNGXVulkanRHIPreInit, Log, TEXT("Failed to load the VulkanRHI module and/or Vulkan is not supported; skipping of pregistering the required NGX DLSS Vulkan device and instance extensions via the VulkanRHIBridge")); + } + } + else + { + UE_LOG(LogDLSSNGXVulkanRHIPreInit, Log, TEXT("VulkanRHI is not the active DynamicRHI; skipping of pregistering the required NGX DLSS Vulkan device and instance extensions via the VulkanRHIBridge")); + } + } + else + { + UE_LOG(LogDLSSNGXVulkanRHIPreInit, Log, TEXT("This UE instance does not render; skipping of pregistering the required NGX DLSS Vulkan device and instance extensions via the VulkanRHIBridge")); + } + UE_LOG(LogDLSSNGXVulkanRHIPreInit, Log, TEXT("%s Leave"), ANSI_TO_TCHAR(__FUNCTION__)); + +} + +void FNGXVulkanRHIPreInitModule::ShutdownModule() +{ + UE_LOG(LogDLSSNGXVulkanRHIPreInit, Log, TEXT("%s Enter"), ANSI_TO_TCHAR(__FUNCTION__)); + UE_LOG(LogDLSSNGXVulkanRHIPreInit, Log, TEXT("%s Leave"), ANSI_TO_TCHAR(__FUNCTION__)); +} + +IMPLEMENT_MODULE(FNGXVulkanRHIPreInitModule, NGXVulkanRHIPreInit) + +#undef LOCTEXT_NAMESPACE + + diff --git a/plugins/DLSS/Source/NGXVulkanRHIPreInit/Public/NGXVulkanRHIPreInit.h b/plugins/DLSS/Source/NGXVulkanRHIPreInit/Public/NGXVulkanRHIPreInit.h new file mode 100644 index 00000000..0bc279da --- /dev/null +++ b/plugins/DLSS/Source/NGXVulkanRHIPreInit/Public/NGXVulkanRHIPreInit.h @@ -0,0 +1,31 @@ +/* +* Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#pragma once +#include "Modules/ModuleManager.h" + +class FNGXVulkanRHIPreInitModule final : public IModuleInterface +{ +public: + + /** IModuleInterface implementation */ + virtual void StartupModule(); + virtual void ShutdownModule(); +}; \ No newline at end of file diff --git a/plugins/DLSS/Source/ThirdParty/NGX/Include/nvsdk_ngx.h b/plugins/DLSS/Source/ThirdParty/NGX/Include/nvsdk_ngx.h new file mode 100644 index 00000000..57ece96b --- /dev/null +++ b/plugins/DLSS/Source/ThirdParty/NGX/Include/nvsdk_ngx.h @@ -0,0 +1,437 @@ +/* +* Copyright (c) 2018 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +/* +* HOW TO USE: +* +* IMPORTANT: FOR DLSS/DLISP PLEASE SEE THE PROGRAMMING GUIDE +* +* IMPORTANT: Methods in this library are NOT thread safe. It is up to the +* client to ensure that thread safety is enforced as needed. +* +* 1) Call NVSDK_CONV NVSDK_NGX_D3D11/D3D12/CUDA_Init and pass your app Id +* and other parameters. This will initialize SDK or return an error code +* if SDK cannot run on target machine. Depending on error user might +* need to update drivers. Please note that application Id is provided +* by NVIDIA so if you do not have one please contact us. +* +* 2) Call NVSDK_NGX_D3D11/D3D12/CUDA_GetParameters to obtain pointer to +* interface used to pass parameters to SDK. Interface instance is +* allocated and released by SDK so there is no need to do any memory +* management on client side. +* +* 3) Set key parameters for the feature you want to use. For example, +* width and height are required for all features and they can be +* set like this: +* Params->Set(NVSDK_NGX_Parameter_Width,MY_WIDTH); +* Params->Set(NVSDK_NGX_Parameter_Height,MY_HEIGHT); +* +* You can also provide hints like NVSDK_NGX_Parameter_Hint_HDR to tell +* SDK that it should expect HDR color space is needed. Please refer to +* samples since different features need different parameters and hints. +* +* 4) Call NVSDK_NGX_D3D11/D3D12/CUDA_GetScratchBufferSize to obtain size of +* the scratch buffer needed by specific feature. This D3D or CUDA buffer +* should be allocated by client and passed as: +* Params->Set(NVSDK_NGX_Parameter_Scratch,MY_SCRATCH_POINTER) +* Params->Set(NVSDK_NGX_Parameter_Scratch_SizeInBytes,MY_SCRATCH_SIZE_IN_BYTES) +* NOTE: Returned size can be 0 if feature does not use any scratch buffer. +* It is OK to use bigger buffer or reuse buffers across features as long +* as minimum size requirement is met. +* +* 5) Call NVSDK_NGX_D3D11/D3D12/CUDA_CreateFeature to create feature you need. +* On success SDK will return a handle which must be used in any successive +* calls to SDK which require feature handle. SDK will use all parameters +* and hints provided by client to generate feature. If feature with the same +* parameters already exists and error code will be returned. +* +* 6) Call NVSDK_NGX_D3D11/D3D12/CUDA_EvaluateFeature to invoke execution of +* specific feature. Before feature can be evaluated input parameters must +* be specified (like for example color/albedo buffer, motion vectors etc) +* +* 6) Call NVSDK_NGX_D3D11/D3D12/CUDA_ReleaseFeature when feature is no longer +* needed. After this call feature handle becomes invalid and cannot be used. +* +* 7) Call NVSDK_NGX_D3D11/D3D12/CUDA_Shutdown when SDK is no longer needed to +* release all resources. + +* Contact: ngxsupport@nvidia.com +*/ + + +#ifndef NVSDK_NGX_H +#define NVSDK_NGX_H + +#include // For size_t + +#include "nvsdk_ngx_defs.h" +#include "nvsdk_ngx_params.h" +#ifndef __cplusplus +#include +#include +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + +typedef struct IUnknown IUnknown; + +typedef struct ID3D11Device ID3D11Device; +typedef struct ID3D11Resource ID3D11Resource; +typedef struct ID3D11DeviceContext ID3D11DeviceContext; +typedef struct D3D11_TEXTURE2D_DESC D3D11_TEXTURE2D_DESC; +typedef struct D3D11_BUFFER_DESC D3D11_BUFFER_DESC; +typedef struct ID3D11Buffer ID3D11Buffer; +typedef struct ID3D11Texture2D ID3D11Texture2D; + +typedef struct ID3D12Device ID3D12Device; +typedef struct ID3D12Resource ID3D12Resource; +typedef struct ID3D12GraphicsCommandList ID3D12GraphicsCommandList; +typedef struct D3D12_RESOURCE_DESC D3D12_RESOURCE_DESC; +typedef struct CD3DX12_HEAP_PROPERTIES CD3DX12_HEAP_PROPERTIES; + +typedef void (NVSDK_CONV *PFN_NVSDK_NGX_D3D12_ResourceAllocCallback)(D3D12_RESOURCE_DESC *InDesc, int InState, CD3DX12_HEAP_PROPERTIES *InHeap, ID3D12Resource **OutResource); +typedef void (NVSDK_CONV *PFN_NVSDK_NGX_D3D11_BufferAllocCallback)(D3D11_BUFFER_DESC *InDesc, ID3D11Buffer **OutResource); +typedef void (NVSDK_CONV *PFN_NVSDK_NGX_D3D11_Tex2DAllocCallback)(D3D11_TEXTURE2D_DESC *InDesc, ID3D11Texture2D **OutResource); +typedef void (NVSDK_CONV *PFN_NVSDK_NGX_ResourceReleaseCallback)(IUnknown *InResource); + +typedef unsigned long long CUtexObject; + +/////////////////////////////////////////////////////////////////////////////////////////////////// +// NVSDK_NGX_Init +// ------------------------------------- +// +// InApplicationId: +// Unique Id provided by NVIDIA +// +// InApplicationDataPath: +// Folder to store logs and other temporary files (write access required), +// Normally this would be a location in Documents or ProgramData. +// +// InDevice: [d3d11/12 only] +// DirectX device to use +// +// InFeatureInfo: +// Contains information common to all features, presently only a list of all paths +// feature dlls can be located in, other than the default path - application directory. +// +// DESCRIPTION: +// Initializes new SDK instance. +// +#ifdef __cplusplus +NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D11_Init(unsigned long long InApplicationId, const wchar_t *InApplicationDataPath, ID3D11Device *InDevice, const NVSDK_NGX_FeatureCommonInfo *InFeatureInfo = nullptr, NVSDK_NGX_Version InSDKVersion = NVSDK_NGX_Version_API); +NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D12_Init(unsigned long long InApplicationId, const wchar_t *InApplicationDataPath, ID3D12Device *InDevice, const NVSDK_NGX_FeatureCommonInfo *InFeatureInfo = nullptr, NVSDK_NGX_Version InSDKVersion = NVSDK_NGX_Version_API); +NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_CUDA_Init(unsigned long long InApplicationId, const wchar_t *InApplicationDataPath, const NVSDK_NGX_FeatureCommonInfo *InFeatureInfo = nullptr, NVSDK_NGX_Version InSDKVersion = NVSDK_NGX_Version_API); +#else +NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D11_Init(unsigned long long InApplicationId, const wchar_t *InApplicationDataPath, ID3D11Device *InDevice, const NVSDK_NGX_FeatureCommonInfo *InFeatureInfo, NVSDK_NGX_Version InSDKVersion); +NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D12_Init(unsigned long long InApplicationId, const wchar_t *InApplicationDataPath, ID3D12Device *InDevice, const NVSDK_NGX_FeatureCommonInfo *InFeatureInfo, NVSDK_NGX_Version InSDKVersion); +NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_CUDA_Init(unsigned long long InApplicationId, const wchar_t *InApplicationDataPath, const NVSDK_NGX_FeatureCommonInfo *InFeatureInfo, NVSDK_NGX_Version InSDKVersion); +#endif + +/////////////////////////////////////////////////////////////////////////////////////////////////// +// NVSDK_NGX_Init_with_ProjectID +// ------------------------------------- +// +// InProjectId: +// Unique Id provided by the rendering engine used +// +// InEngineType: +// Rendering engine used by the application / plugin. +// Use NVSDK_NGX_ENGINE_TYPE_CUSTOM if the specific engine type is not supported explicitly +// +// InEngineVersion: +// Version number of the rendering engine used by the application / plugin. +// +// InApplicationDataPath: +// Folder to store logs and other temporary files (write access required), +// Normally this would be a location in Documents or ProgramData. +// +// InDevice: [d3d11/12 only] +// DirectX device to use +// +// InFeatureInfo: +// Contains information common to all features, presently only a list of all paths +// feature dlls can be located in, other than the default path - application directory. +// +// DESCRIPTION: +// Initializes new SDK instance. +// +#ifdef __cplusplus +NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D11_Init_with_ProjectID(const char *InProjectId, NVSDK_NGX_EngineType InEngineType, const char *InEngineVersion, const wchar_t *InApplicationDataPath, ID3D11Device *InDevice, const NVSDK_NGX_FeatureCommonInfo *InFeatureInfo = nullptr, NVSDK_NGX_Version InSDKVersion = NVSDK_NGX_Version_API); +NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D12_Init_with_ProjectID(const char *InProjectId, NVSDK_NGX_EngineType InEngineType, const char *InEngineVersion, const wchar_t *InApplicationDataPath, ID3D12Device *InDevice, const NVSDK_NGX_FeatureCommonInfo *InFeatureInfo = nullptr, NVSDK_NGX_Version InSDKVersion = NVSDK_NGX_Version_API); +NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_CUDA_Init_with_ProjectID(const char *InProjectId, NVSDK_NGX_EngineType InEngineType, const char *InEngineVersion, const wchar_t *InApplicationDataPath, const NVSDK_NGX_FeatureCommonInfo *InFeatureInfo = nullptr, NVSDK_NGX_Version InSDKVersion = NVSDK_NGX_Version_API); +#else +NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D11_Init_with_ProjectID(const char *InProjectId, NVSDK_NGX_EngineType InEngineType, const char *InEngineVersion, const wchar_t *InApplicationDataPath, ID3D11Device *InDevice, const NVSDK_NGX_FeatureCommonInfo *InFeatureInfo, NVSDK_NGX_Version InSDKVersion); +NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D12_Init_with_ProjectID(const char *InProjectId, NVSDK_NGX_EngineType InEngineType, const char *InEngineVersion, const wchar_t *InApplicationDataPath, ID3D12Device *InDevice, const NVSDK_NGX_FeatureCommonInfo *InFeatureInfo, NVSDK_NGX_Version InSDKVersion); +NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_CUDA_Init_with_ProjectID(const char *InProjectId, NVSDK_NGX_EngineType InEngineType, const char *InEngineVersion, const wchar_t *InApplicationDataPath, const NVSDK_NGX_FeatureCommonInfo *InFeatureInfo, NVSDK_NGX_Version InSDKVersion); +#endif + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// NVSDK_NGX_Shutdown +// ------------------------------------- +// +// DESCRIPTION: +// Shuts down the current SDK instance and releases all resources. +// Shutdown1(Device) only affects specified device +// Shutdown1(nullptr) = Shutdown() and shuts down all devices +// +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D11_Shutdown(void); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D11_Shutdown1(ID3D11Device *InDevice); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D12_Shutdown(void); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D12_Shutdown1(ID3D12Device *InDevice); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_CUDA_Shutdown(void); + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// NVSDK_NGX_GetParameters +// ---------------------------------------------------------- +// +// OutParameters: +// Parameters interface used to set any parameter needed by the SDK +// +// DESCRIPTION: +// This interface allows simple parameter setup using named fields. +// For example one can set width by calling Set(NVSDK_NGX_Parameter_Denoiser_Width,100) or +// provide CUDA buffer pointer by calling Set(NVSDK_NGX_Parameter_Denoiser_Color,cudaBuffer) +// For more details please see sample code. Please note that allocated memory +// will be freed by NGX so free/delete operator should NOT be called. +// Parameter maps output by NVSDK_NGX_GetParameters are also pre-populated +// with NGX capabilities and available features. +// Unlike with NVSDK_NGX_AllocateParameters, parameter maps output by NVSDK_NGX_GetParameters +// have their lifetimes managed by NGX, and must not +// be destroyed by the app using NVSDK_NGX_DestroyParameters. +// NVSDK_NGX_GetParameters is soon to be deprecated and apps should move to using +// NVSDK_NGX_AllocateParameters and NVSDK_NGX_GetCapabilityParameters when possible. +// Nevertheless, due to the possibility that the user will be using an older driver version, +// NVSDK_NGX_GetParameters should still be used as a fallback if NVSDK_NGX_AllocateParameters +// or NVSDK_NGX_GetCapabilityParameters return NVSDK_NGX_Result_FAIL_OutOfDate. +// +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D11_GetParameters(NVSDK_NGX_Parameter **OutParameters); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D12_GetParameters(NVSDK_NGX_Parameter **OutParameters); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_CUDA_GetParameters(NVSDK_NGX_Parameter **OutParameters); + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// NVSDK_NGX_AllocateParameters +// ---------------------------------------------------------- +// +// OutParameters: +// Parameters interface used to set any parameter needed by the SDK +// +// DESCRIPTION: +// This interface allows allocating a simple parameter setup using named fields, whose +// lifetime the app must manage. +// For example one can set width by calling Set(NVSDK_NGX_Parameter_Denoiser_Width,100) or +// provide CUDA buffer pointer by calling Set(NVSDK_NGX_Parameter_Denoiser_Color,cudaBuffer) +// For more details please see sample code. +// Parameter maps output by NVSDK_NGX_AllocateParameters must NOT be freed using +// the free/delete operator; to free a parameter map +// output by NVSDK_NGX_AllocateParameters, NVSDK_NGX_DestroyParameters should be used. +// Unlike with NVSDK_NGX_GetParameters, parameter maps allocated with NVSDK_NGX_AllocateParameters +// must be destroyed by the app using NVSDK_NGX_DestroyParameters. +// Also unlike with NVSDK_NGX_GetParameters, parameter maps output by NVSDK_NGX_AllocateParameters +// do not come pre-populated with NGX capabilities and available features. +// To create a new parameter map pre-populated with such information, NVSDK_NGX_GetCapabilityParameters +// should be used. +// This function may return NVSDK_NGX_Result_FAIL_OutOfDate if an older driver, which +// does not support this API call is being used. In such a case, NVSDK_NGX_GetParameters +// may be used as a fallback. +// This function may only be called after a successful call into NVSDK_NGX_Init. +// +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D11_AllocateParameters(NVSDK_NGX_Parameter** OutParameters); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D12_AllocateParameters(NVSDK_NGX_Parameter** OutParameters); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_CUDA_AllocateParameters(NVSDK_NGX_Parameter** OutParameters); + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// NVSDK_NGX_GetCapabilityParameters +// ---------------------------------------------------------- +// +// OutParameters: +// The parameters interface populated with NGX and feature capabilities +// +// DESCRIPTION: +// This interface allows the app to create a new parameter map +// pre-populated with NGX capabilities and available features. +// The output parameter map can also be used for any purpose +// parameter maps output by NVSDK_NGX_AllocateParameters can be used for +// but it is not recommended to use NVSDK_NGX_GetCapabilityParameters +// unless querying NGX capabilities and available features +// due to the overhead associated with pre-populating the parameter map. +// Parameter maps output by NVSDK_NGX_GetCapabilityParameters must NOT be freed using +// the free/delete operator; to free a parameter map +// output by NVSDK_NGX_GetCapabilityParameters, NVSDK_NGX_DestroyParameters should be used. +// Unlike with NVSDK_NGX_GetParameters, parameter maps allocated with NVSDK_NGX_GetCapabilityParameters +// must be destroyed by the app using NVSDK_NGX_DestroyParameters. +// This function may return NVSDK_NGX_Result_FAIL_OutOfDate if an older driver, which +// does not support this API call is being used. This function may only be called +// after a successful call into NVSDK_NGX_Init. +// If NVSDK_NGX_GetCapabilityParameters fails with NVSDK_NGX_Result_FAIL_OutOfDate, +// NVSDK_NGX_GetParameters may be used as a fallback, to get a parameter map pre-populated +// with NGX capabilities and available features. +// +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D11_GetCapabilityParameters(NVSDK_NGX_Parameter** OutParameters); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D12_GetCapabilityParameters(NVSDK_NGX_Parameter** OutParameters); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_CUDA_GetCapabilityParameters(NVSDK_NGX_Parameter** OutParameters); + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// NVSDK_NGX_DestroyParameters +// ---------------------------------------------------------- +// +// InParameters: +// The parameters interface to be destroyed +// +// DESCRIPTION: +// This interface allows the app to destroy the parameter map passed in. Once +// NVSDK_NGX_DestroyParameters is called on a parameter map, it +// must not be used again. +// NVSDK_NGX_DestroyParameters must not be called on any parameter map returned +// by NVSDK_NGX_GetParameters; NGX will manage the lifetime of those +// parameter maps. +// This function may return NVSDK_NGX_Result_FAIL_OutOfDate if an older driver, which +// does not support this API call is being used. This function may only be called +// after a successful call into NVSDK_NGX_Init. +// +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D11_DestroyParameters(NVSDK_NGX_Parameter* InParameters); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D12_DestroyParameters(NVSDK_NGX_Parameter* InParameters); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_CUDA_DestroyParameters(NVSDK_NGX_Parameter* InParameters); + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// NVSDK_NGX_GetScratchBufferSize +// ---------------------------------------------------------- +// +// InFeatureId: +// AI feature in question +// +// InParameters: +// Parameters used by the feature to help estimate scratch buffer size +// +// OutSizeInBytes: +// Number of bytes needed for the scratch buffer for the specified feature. +// +// DESCRIPTION: +// SDK needs a buffer of a certain size provided by the client in +// order to initialize AI feature. Once feature is no longer +// needed buffer can be released. It is safe to reuse the same +// scratch buffer for different features as long as minimum size +// requirement is met for all features. Please note that some +// features might not need a scratch buffer so return size of 0 +// is completely valid. +// +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D11_GetScratchBufferSize(NVSDK_NGX_Feature InFeatureId, const NVSDK_NGX_Parameter *InParameters, size_t *OutSizeInBytes); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D12_GetScratchBufferSize(NVSDK_NGX_Feature InFeatureId, const NVSDK_NGX_Parameter *InParameters, size_t *OutSizeInBytes); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_CUDA_GetScratchBufferSize(NVSDK_NGX_Feature InFeatureId, const NVSDK_NGX_Parameter *InParameters, size_t *OutSizeInBytes); + +///////////////////////////////////////////////////////////////////////// +// NVSDK_NGX_CreateFeature +// ------------------------------------- +// +// InCmdList:[d3d12 only] +// Command list to use to execute GPU commands. Must be: +// - Open and recording +// - With node mask including the device provided in NVSDK_NGX_D3D12_Init +// - Execute on non-copy command queue. +// InDevCtx: [d3d11 only] +// Device context to use to execute GPU commands +// +// InFeatureID: +// AI feature to initialize +// +// InParameters: +// List of parameters +// +// OutHandle: +// Handle which uniquely identifies the feature. If feature with +// provided parameters already exists the "already exists" error code is returned. +// +// DESCRIPTION: +// Each feature needs to be created before it can be used. +// Refer to the sample code to find out which input parameters +// are needed to create specific feature. +// +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D11_CreateFeature(ID3D11DeviceContext *InDevCtx, NVSDK_NGX_Feature InFeatureID, const NVSDK_NGX_Parameter *InParameters, NVSDK_NGX_Handle **OutHandle); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D12_CreateFeature(ID3D12GraphicsCommandList *InCmdList, NVSDK_NGX_Feature InFeatureID, const NVSDK_NGX_Parameter *InParameters, NVSDK_NGX_Handle **OutHandle); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_CUDA_CreateFeature(NVSDK_NGX_Feature InFeatureID, const NVSDK_NGX_Parameter *InParameters, NVSDK_NGX_Handle **OutHandle); + +///////////////////////////////////////////////////////////////////////// +// NVSDK_NGX_Release +// ------------------------------------- +// +// InHandle: +// Handle to feature to be released +// +// DESCRIPTION: +// Releases feature with a given handle. +// Handles are not reference counted so +// after this call it is invalid to use provided handle. +// +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D11_ReleaseFeature(NVSDK_NGX_Handle *InHandle); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D12_ReleaseFeature(NVSDK_NGX_Handle *InHandle); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_CUDA_ReleaseFeature(NVSDK_NGX_Handle *InHandle); + +///////////////////////////////////////////////////////////////////////// +// NVSDK_NGX_EvaluateFeature +// ------------------------------------- +// +// InCmdList:[d3d12 only] +// Command list to use to execute GPU commands. Must be: +// - Open and recording +// - With node mask including the device provided in NVSDK_NGX_D3D12_Init +// - Execute on non-copy command queue. +// InDevCtx: [d3d11 only] +// Device context to use to execute GPU commands +// +// InFeatureHandle: +// Handle representing feature to be evaluated +// +// InParameters: +// List of parameters required to evaluate feature +// +// InCallback: +// Optional callback for features which might take longer +// to execture. If specified SDK will call it with progress +// values in range 0.0f - 1.0f +// +// DESCRIPTION: +// Evaluates given feature using the provided parameters and +// pre-trained NN. Please note that for most features +// it can be benefitials to pass as many input buffers and parameters +// as possible (for example provide all render targets like color, albedo, normals, depth etc) +// + +#ifdef __cplusplus +typedef void (NVSDK_CONV *PFN_NVSDK_NGX_ProgressCallback)(float InCurrentProgress, bool &OutShouldCancel); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D11_EvaluateFeature(ID3D11DeviceContext *InDevCtx, const NVSDK_NGX_Handle *InFeatureHandle, const NVSDK_NGX_Parameter *InParameters, PFN_NVSDK_NGX_ProgressCallback InCallback = NULL); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D12_EvaluateFeature(ID3D12GraphicsCommandList *InCmdList, const NVSDK_NGX_Handle *InFeatureHandle, const NVSDK_NGX_Parameter *InParameters, PFN_NVSDK_NGX_ProgressCallback InCallback = NULL); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_CUDA_EvaluateFeature(const NVSDK_NGX_Handle *InFeatureHandle, const NVSDK_NGX_Parameter *InParameters, PFN_NVSDK_NGX_ProgressCallback InCallback = NULL); +#endif + +typedef void (NVSDK_CONV *PFN_NVSDK_NGX_ProgressCallback_C)(float InCurrentProgress, bool *OutShouldCancel); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D11_EvaluateFeature_C(ID3D11DeviceContext *InDevCtx, const NVSDK_NGX_Handle *InFeatureHandle, const NVSDK_NGX_Parameter *InParameters, PFN_NVSDK_NGX_ProgressCallback_C InCallback); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D12_EvaluateFeature_C(ID3D12GraphicsCommandList *InCmdList, const NVSDK_NGX_Handle *InFeatureHandle, const NVSDK_NGX_Parameter *InParameters, PFN_NVSDK_NGX_ProgressCallback_C InCallback); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_CUDA_EvaluateFeature_C(const NVSDK_NGX_Handle *InFeatureHandle, const NVSDK_NGX_Parameter *InParameters, PFN_NVSDK_NGX_ProgressCallback_C InCallback); + +// NGX return-code conversion-to-string utility only as a helper for debugging/logging - not for official use. +const wchar_t* NVSDK_CONV GetNGXResultAsString(NVSDK_NGX_Result InNGXResult); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // #define NVSDK_NGX_H diff --git a/plugins/DLSS/Source/ThirdParty/NGX/Include/nvsdk_ngx_defs.h b/plugins/DLSS/Source/ThirdParty/NGX/Include/nvsdk_ngx_defs.h new file mode 100644 index 00000000..e5c2a573 --- /dev/null +++ b/plugins/DLSS/Source/ThirdParty/NGX/Include/nvsdk_ngx_defs.h @@ -0,0 +1,597 @@ +/* +* Copyright (c) 2018 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#ifndef NVSDK_NGX_DEFS_H +#define NVSDK_NGX_DEFS_H +#pragma once + +#ifndef __cplusplus +#include // For size_t +#include +#include +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + +#ifdef __cplusplus +#if defined(NVSDK_NGX) && defined(NV_WINDOWS) +#define NVSDK_NGX_API extern "C" __declspec(dllexport) +#else +#define NVSDK_NGX_API extern "C" +#endif +#else +#if defined(NVSDK_NGX) && defined(NV_WINDOWS) +#define NVSDK_NGX_API __declspec(dllexport) +#else +#define NVSDK_NGX_API +#endif +#endif + +#ifdef __GNUC__ +#define NVSDK_CONV +#else +#define NVSDK_CONV __cdecl +#endif + +#define NVSDK_NGX_ARRAY_LEN(a) (sizeof(a) / sizeof((a)[0])) + +// Version Notes: +// Version 0x0000014: +// * Added a logging callback that the app may pass in on init +// * Added ability for the app to override the logging level +// Version 0x0000015: +// * Support multiple GPUs (bug 3270533) +#define NVSDK_NGX_VERSION_API_MACRO 0x0000014 // NGX_VERSION_DOT 1.4.0 + +typedef struct NVSDK_NGX_FeatureCommonInfo_Internal NVSDK_NGX_FeatureCommonInfo_Internal; + +typedef enum NVSDK_NGX_Version { NVSDK_NGX_Version_API = NVSDK_NGX_VERSION_API_MACRO } NVSDK_NGX_Version; + +typedef enum NVSDK_NGX_Result +{ + NVSDK_NGX_Result_Success = 0x1, + + NVSDK_NGX_Result_Fail = 0xBAD00000, + + // Feature is not supported on current hardware + NVSDK_NGX_Result_FAIL_FeatureNotSupported = NVSDK_NGX_Result_Fail | 1, + + // Platform error - for example - check d3d12 debug layer log for more information + NVSDK_NGX_Result_FAIL_PlatformError = NVSDK_NGX_Result_Fail | 2, + + // Feature with given parameters already exists + NVSDK_NGX_Result_FAIL_FeatureAlreadyExists = NVSDK_NGX_Result_Fail | 3, + + // Feature with provided handle does not exist + NVSDK_NGX_Result_FAIL_FeatureNotFound = NVSDK_NGX_Result_Fail | 4, + + // Invalid parameter was provided + NVSDK_NGX_Result_FAIL_InvalidParameter = NVSDK_NGX_Result_Fail | 5, + + // Provided buffer is too small, please use size provided by NVSDK_NGX_GetScratchBufferSize + NVSDK_NGX_Result_FAIL_ScratchBufferTooSmall = NVSDK_NGX_Result_Fail | 6, + + // SDK was not initialized properly + NVSDK_NGX_Result_FAIL_NotInitialized = NVSDK_NGX_Result_Fail | 7, + + // Unsupported format used for input/output buffers + NVSDK_NGX_Result_FAIL_UnsupportedInputFormat = NVSDK_NGX_Result_Fail | 8, + + // Feature input/output needs RW access (UAV) (d3d11/d3d12 specific) + NVSDK_NGX_Result_FAIL_RWFlagMissing = NVSDK_NGX_Result_Fail | 9, + + // Feature was created with specific input but none is provided at evaluation + NVSDK_NGX_Result_FAIL_MissingInput = NVSDK_NGX_Result_Fail | 10, + + // Feature is not available on the system + NVSDK_NGX_Result_FAIL_UnableToInitializeFeature = NVSDK_NGX_Result_Fail | 11, + + // NGX system libraries are old and need an update + NVSDK_NGX_Result_FAIL_OutOfDate = NVSDK_NGX_Result_Fail | 12, + + // Feature requires more GPU memory than it is available on system + NVSDK_NGX_Result_FAIL_OutOfGPUMemory = NVSDK_NGX_Result_Fail | 13, + + // Format used in input buffer(s) is not supported by feature + NVSDK_NGX_Result_FAIL_UnsupportedFormat = NVSDK_NGX_Result_Fail | 14, + + // Path provided in InApplicationDataPath cannot be written to + NVSDK_NGX_Result_FAIL_UnableToWriteToAppDataPath = NVSDK_NGX_Result_Fail | 15, + + // Unsupported parameter was provided (e.g. specific scaling factor is unsupported) + NVSDK_NGX_Result_FAIL_UnsupportedParameter = NVSDK_NGX_Result_Fail | 16, + + // The feature or application was denied (contact NVIDIA for further details) + NVSDK_NGX_Result_FAIL_Denied = NVSDK_NGX_Result_Fail | 17 +} NVSDK_NGX_Result; + +#define NVSDK_NGX_SUCCEED(value) (((value) & 0xFFF00000) != NVSDK_NGX_Result_Fail) +#define NVSDK_NGX_FAILED(value) (((value) & 0xFFF00000) == NVSDK_NGX_Result_Fail) + +typedef enum NVSDK_NGX_Feature +{ + NVSDK_NGX_Feature_Reserved0, + + NVSDK_NGX_Feature_SuperSampling, + + NVSDK_NGX_Feature_InPainting, + + NVSDK_NGX_Feature_ImageSuperResolution, + + NVSDK_NGX_Feature_SlowMotion, + + NVSDK_NGX_Feature_VideoSuperResolution, + + NVSDK_NGX_Feature_Reserved1, + + NVSDK_NGX_Feature_Reserved2, + + NVSDK_NGX_Feature_Reserved3, + + NVSDK_NGX_Feature_ImageSignalProcessing, + + NVSDK_NGX_Feature_DeepResolve, + + NVSDK_NGX_Feature_Reserved4, + + // New features go here + NVSDK_NGX_Feature_Count, + + // These members are not strictly NGX features, but are + // components of the NGX system, and it may sometimes + // be useful to identify them using the same enum + NVSDK_NGX_Feature_Reserved_SDK = 32764, + + NVSDK_NGX_Feature_Reserved_Core, + + NVSDK_NGX_Feature_Reserved_Unknown +} NVSDK_NGX_Feature; + +//TODO create grayscale format (R32F?) +typedef enum NVSDK_NGX_Buffer_Format +{ + NVSDK_NGX_Buffer_Format_Unknown, + NVSDK_NGX_Buffer_Format_RGB8UI, + NVSDK_NGX_Buffer_Format_RGB16F, + NVSDK_NGX_Buffer_Format_RGB32F, + NVSDK_NGX_Buffer_Format_RGBA8UI, + NVSDK_NGX_Buffer_Format_RGBA16F, + NVSDK_NGX_Buffer_Format_RGBA32F, +} NVSDK_NGX_Buffer_Format; + +typedef enum NVSDK_NGX_PerfQuality_Value +{ + NVSDK_NGX_PerfQuality_Value_MaxPerf, + NVSDK_NGX_PerfQuality_Value_Balanced, + NVSDK_NGX_PerfQuality_Value_MaxQuality, + // Extended PerfQuality modes + NVSDK_NGX_PerfQuality_Value_UltraPerformance, + NVSDK_NGX_PerfQuality_Value_UltraQuality, +} NVSDK_NGX_PerfQuality_Value; + +typedef enum NVSDK_NGX_RTX_Value +{ + NVSDK_NGX_RTX_Value_Off, + NVSDK_NGX_RTX_Value_On, +} NVSDK_NGX_RTX_Value; + +typedef enum NVSDK_NGX_DLSS_Mode +{ + NVSDK_NGX_DLSS_Mode_Off, // use existing in-engine AA + upscale solution + NVSDK_NGX_DLSS_Mode_DLSS_DLISP, + NVSDK_NGX_DLSS_Mode_DLISP_Only, // use existing in-engine AA solution + NVSDK_NGX_DLSS_Mode_DLSS, // DLSS will apply AA and upsample at the same time +} NVSDK_NGX_DLSS_Mode; + +typedef struct NVSDK_NGX_Handle { unsigned int Id; } NVSDK_NGX_Handle; + +typedef enum NSDK_NGX_GPU_Arch +{ + NVSDK_NGX_GPU_Arch_NotSupported = 0, + + // Match NvAPI's NV_GPU_ARCHITECTURE_ID values for GV100 and TU100 for + // backwards compatibility with snippets built against NvAPI + NVSDK_NGX_GPU_Arch_Volta = 0x0140, + NVSDK_NGX_GPU_Arch_Turing = 0x0160, + + // Presumably something newer + NVSDK_NGX_GPU_Arch_Unknown = 0x7FFFFFF +} NVSDK_NGX_GPU_Arch; + + +typedef enum NVSDK_NGX_DLSS_Feature_Flags +{ + NVSDK_NGX_DLSS_Feature_Flags_IsInvalid = 1 << 31, + + NVSDK_NGX_DLSS_Feature_Flags_None = 0, + NVSDK_NGX_DLSS_Feature_Flags_IsHDR = 1 << 0, + NVSDK_NGX_DLSS_Feature_Flags_MVLowRes = 1 << 1, + NVSDK_NGX_DLSS_Feature_Flags_MVJittered = 1 << 2, + NVSDK_NGX_DLSS_Feature_Flags_DepthInverted = 1 << 3, + NVSDK_NGX_DLSS_Feature_Flags_Reserved_0 = 1 << 4, + NVSDK_NGX_DLSS_Feature_Flags_DoSharpening = 1 << 5, + NVSDK_NGX_DLSS_Feature_Flags_AutoExposure = 1 << 6, +} NVSDK_NGX_DLSS_Feature_Flags; + +typedef enum NVSDK_NGX_ToneMapperType +{ + NVSDK_NGX_TONEMAPPER_STRING = 0, + NVSDK_NGX_TONEMAPPER_REINHARD, + NVSDK_NGX_TONEMAPPER_ONEOVERLUMA, + NVSDK_NGX_TONEMAPPER_ACES, + NVSDK_NGX_TONEMAPPERTYPE_NUM +} NVSDK_NGX_ToneMapperType; + +typedef enum NVSDK_NGX_GBufferType +{ + NVSDK_NGX_GBUFFER_ALBEDO = 0, + NVSDK_NGX_GBUFFER_ROUGHNESS, + NVSDK_NGX_GBUFFER_METALLIC, + NVSDK_NGX_GBUFFER_SPECULAR, + NVSDK_NGX_GBUFFER_SUBSURFACE, + NVSDK_NGX_GBUFFER_NORMALS, + NVSDK_NGX_GBUFFER_SHADINGMODELID, /* unique identifier for drawn object or how the object is drawn */ + NVSDK_NGX_GBUFFER_MATERIALID, /* unique identifier for material */ + NVSDK_NGX_GBUFFERTYPE_NUM = 16 +} NVSDK_NGX_GBufferType; + +typedef struct NVSDK_NGX_Coordinates +{ + unsigned int X; + unsigned int Y; +} NVSDK_NGX_Coordinates; + +typedef struct NVSDK_NGX_Dimensions +{ + unsigned int Width; + unsigned int Height; +} NVSDK_NGX_Dimensions; + +typedef struct NVSDK_NGX_PathListInfo +{ + wchar_t **Path; + // Path-list length + unsigned int Length; +} NVSDK_NGX_PathListInfo; + +typedef enum NVSDK_NGX_Logging_Level +{ + NVSDK_NGX_LOGGING_LEVEL_OFF = 0, + NVSDK_NGX_LOGGING_LEVEL_ON, + NVSDK_NGX_LOGGING_LEVEL_VERBOSE, + NVSDK_NGX_LOGGING_LEVEL_NUM +} NVSDK_NGX_Logging_Level; + +// A logging callback provided by the app to allow piping log lines back to the app. +// Please take careful note of the signature and calling convention. +// The callback must be able to be called from any thread. +// It must also be fully thread-safe and any number of threads may call into it concurrently. +// It must fully process message by the time it returns, and there is no guarantee that +// message will still be valid or allocated after it returns. +// message will be a null-terminated string and may contain multibyte characters. +#if defined(__GNUC__) || defined(__clang__) +typedef void NVSDK_CONV(*NVSDK_NGX_AppLogCallback)(const char* message, NVSDK_NGX_Logging_Level loggingLevel, NVSDK_NGX_Feature sourceComponent); +#else +typedef void(NVSDK_CONV* NVSDK_NGX_AppLogCallback)(const char* message, NVSDK_NGX_Logging_Level loggingLevel, NVSDK_NGX_Feature sourceComponent); +#endif + +typedef struct NGSDK_NGX_LoggingInfo +{ + // Fields below were introduced in SDK version 0x0000014 + + // App-provided logging callback + NVSDK_NGX_AppLogCallback LoggingCallback; + + // The minimum logging level to use. If this is higher + // than the logging level otherwise configured, this will override + // that logging level. Otherwise, that logging level will be used. + NVSDK_NGX_Logging_Level MinimumLoggingLevel; + + // Whether or not to disable writing log lines to sinks other than the app log callback. This + // may be useful if the app provides a logging callback. LoggingCallback must be non-null and point + // to a valid logging callback if this is set to true. + bool DisableOtherLoggingSinks; + +} NGSDK_NGX_LoggingInfo; + +typedef struct NVSDK_NGX_FeatureCommonInfo +{ + // List of all paths in descending order of search sequence to locate a feature dll in, other than the default path - application folder. + NVSDK_NGX_PathListInfo PathListInfo; + // Used internally by NGX + NVSDK_NGX_FeatureCommonInfo_Internal* InternalData; // Introduced in SDK version 0x0000013 + + // Fields below were introduced in SDK version 0x0000014 + + NGSDK_NGX_LoggingInfo LoggingInfo; +} NVSDK_NGX_FeatureCommonInfo; + +typedef enum NVSDK_NGX_Resource_VK_Type +{ + NVSDK_NGX_RESOURCE_VK_TYPE_VK_IMAGEVIEW, + NVSDK_NGX_RESOURCE_VK_TYPE_VK_BUFFER +} NVSDK_NGX_Resource_VK_Type; + +typedef enum NVSDK_NGX_Opt_Level +{ + NVSDK_NGX_OPT_LEVEL_UNDEFINED = 0, + NVSDK_NGX_OPT_LEVEL_DEBUG = 20, + NVSDK_NGX_OPT_LEVEL_DEVELOP = 30, + NVSDK_NGX_OPT_LEVEL_RELEASE = 40 +} NVSDK_NGX_Opt_Level; + +typedef enum NVSDK_NGX_EngineType +{ + NVSDK_NGX_ENGINE_TYPE_CUSTOM = 0, + NVSDK_NGX_ENGINE_TYPE_UNREAL, + NVSDK_NGX_ENGINE_TYPE_UNITY, + NVSDK_NGX_ENGINE_TYPE_OMNIVERSE, + NVSDK_NGX_ENGINE_COUNT +} NVSDK_NGX_EngineType; + +// Read-only parameters provided by NGX +#define NVSDK_NGX_EParameter_Reserved00 "#\x00" +#define NVSDK_NGX_EParameter_SuperSampling_Available "#\x01" +#define NVSDK_NGX_EParameter_InPainting_Available "#\x02" +#define NVSDK_NGX_EParameter_ImageSuperResolution_Available "#\x03" +#define NVSDK_NGX_EParameter_SlowMotion_Available "#\x04" +#define NVSDK_NGX_EParameter_VideoSuperResolution_Available "#\x05" +#define NVSDK_NGX_EParameter_Reserved06 "#\x06" +#define NVSDK_NGX_EParameter_Reserved07 "#\x07" +#define NVSDK_NGX_EParameter_Reserved08 "#\x08" +#define NVSDK_NGX_EParameter_ImageSignalProcessing_Available "#\x09" +#define NVSDK_NGX_EParameter_ImageSuperResolution_ScaleFactor_2_1 "#\x0a" +#define NVSDK_NGX_EParameter_ImageSuperResolution_ScaleFactor_3_1 "#\x0b" +#define NVSDK_NGX_EParameter_ImageSuperResolution_ScaleFactor_3_2 "#\x0c" +#define NVSDK_NGX_EParameter_ImageSuperResolution_ScaleFactor_4_3 "#\x0d" +#define NVSDK_NGX_EParameter_NumFrames "#\x0e" +#define NVSDK_NGX_EParameter_Scale "#\x0f" +#define NVSDK_NGX_EParameter_Width "#\x10" +#define NVSDK_NGX_EParameter_Height "#\x11" +#define NVSDK_NGX_EParameter_OutWidth "#\x12" +#define NVSDK_NGX_EParameter_OutHeight "#\x13" +#define NVSDK_NGX_EParameter_Sharpness "#\x14" +#define NVSDK_NGX_EParameter_Scratch "#\x15" +#define NVSDK_NGX_EParameter_Scratch_SizeInBytes "#\x16" +#define NVSDK_NGX_EParameter_Deprecated_17 "#\x17" +#define NVSDK_NGX_EParameter_Input1 "#\x18" +#define NVSDK_NGX_EParameter_Input1_Format "#\x19" +#define NVSDK_NGX_EParameter_Input1_SizeInBytes "#\x1a" +#define NVSDK_NGX_EParameter_Input2 "#\x1b" +#define NVSDK_NGX_EParameter_Input2_Format "#\x1c" +#define NVSDK_NGX_EParameter_Input2_SizeInBytes "#\x1d" +#define NVSDK_NGX_EParameter_Color "#\x1e" +#define NVSDK_NGX_EParameter_Color_Format "#\x1f" +#define NVSDK_NGX_EParameter_Color_SizeInBytes "#\x20" +#define NVSDK_NGX_EParameter_Albedo "#\x21" +#define NVSDK_NGX_EParameter_Output "#\x22" +#define NVSDK_NGX_EParameter_Output_Format "#\x23" +#define NVSDK_NGX_EParameter_Output_SizeInBytes "#\x24" +#define NVSDK_NGX_EParameter_Reset "#\x25" +#define NVSDK_NGX_EParameter_BlendFactor "#\x26" +#define NVSDK_NGX_EParameter_MotionVectors "#\x27" +#define NVSDK_NGX_EParameter_Rect_X "#\x28" +#define NVSDK_NGX_EParameter_Rect_Y "#\x29" +#define NVSDK_NGX_EParameter_Rect_W "#\x2a" +#define NVSDK_NGX_EParameter_Rect_H "#\x2b" +#define NVSDK_NGX_EParameter_MV_Scale_X "#\x2c" +#define NVSDK_NGX_EParameter_MV_Scale_Y "#\x2d" +#define NVSDK_NGX_EParameter_Model "#\x2e" +#define NVSDK_NGX_EParameter_Format "#\x2f" +#define NVSDK_NGX_EParameter_SizeInBytes "#\x30" +#define NVSDK_NGX_EParameter_ResourceAllocCallback "#\x31" +#define NVSDK_NGX_EParameter_BufferAllocCallback "#\x32" +#define NVSDK_NGX_EParameter_Tex2DAllocCallback "#\x33" +#define NVSDK_NGX_EParameter_ResourceReleaseCallback "#\x34" +#define NVSDK_NGX_EParameter_CreationNodeMask "#\x35" +#define NVSDK_NGX_EParameter_VisibilityNodeMask "#\x36" +#define NVSDK_NGX_EParameter_PreviousOutput "#\x37" +#define NVSDK_NGX_EParameter_MV_Offset_X "#\x38" +#define NVSDK_NGX_EParameter_MV_Offset_Y "#\x39" +#define NVSDK_NGX_EParameter_Hint_UseFireflySwatter "#\x3a" +#define NVSDK_NGX_EParameter_Resource_Width "#\x3b" +#define NVSDK_NGX_EParameter_Resource_Height "#\x3c" +#define NVSDK_NGX_EParameter_Depth "#\x3d" +#define NVSDK_NGX_EParameter_DLSSOptimalSettingsCallback "#\x3e" +#define NVSDK_NGX_EParameter_PerfQualityValue "#\x3f" +#define NVSDK_NGX_EParameter_RTXValue "#\x40" +#define NVSDK_NGX_EParameter_DLSSMode "#\x41" +#define NVSDK_NGX_EParameter_DeepResolve_Available "#\x42" +#define NVSDK_NGX_EParameter_Deprecated_43 "#\x43" +#define NVSDK_NGX_EParameter_OptLevel "#\x44" +#define NVSDK_NGX_EParameter_IsDevSnippetBranch "#\x45" + +#define NVSDK_NGX_Parameter_OptLevel "Snippet.OptLevel" +#define NVSDK_NGX_Parameter_IsDevSnippetBranch "Snippet.IsDevBranch" +#define NVSDK_NGX_Parameter_SuperSampling_ScaleFactor "SuperSampling.ScaleFactor" +#define NVSDK_NGX_Parameter_ImageSignalProcessing_ScaleFactor "ImageSignalProcessing.ScaleFactor" +#define NVSDK_NGX_Parameter_SuperSampling_Available "SuperSampling.Available" +#define NVSDK_NGX_Parameter_InPainting_Available "InPainting.Available" +#define NVSDK_NGX_Parameter_ImageSuperResolution_Available "ImageSuperResolution.Available" +#define NVSDK_NGX_Parameter_SlowMotion_Available "SlowMotion.Available" +#define NVSDK_NGX_Parameter_VideoSuperResolution_Available "VideoSuperResolution.Available" +#define NVSDK_NGX_Parameter_ImageSignalProcessing_Available "ImageSignalProcessing.Available" +#define NVSDK_NGX_Parameter_DeepResolve_Available "DeepResolve.Available" +#define NVSDK_NGX_Parameter_SuperSampling_NeedsUpdatedDriver "SuperSampling.NeedsUpdatedDriver" +#define NVSDK_NGX_Parameter_InPainting_NeedsUpdatedDriver "InPainting.NeedsUpdatedDriver" +#define NVSDK_NGX_Parameter_ImageSuperResolution_NeedsUpdatedDriver "ImageSuperResolution.NeedsUpdatedDriver" +#define NVSDK_NGX_Parameter_SlowMotion_NeedsUpdatedDriver "SlowMotion.NeedsUpdatedDriver" +#define NVSDK_NGX_Parameter_VideoSuperResolution_NeedsUpdatedDriver "VideoSuperResolution.NeedsUpdatedDriver" +#define NVSDK_NGX_Parameter_ImageSignalProcessing_NeedsUpdatedDriver "ImageSignalProcessing.NeedsUpdatedDriver" +#define NVSDK_NGX_Parameter_DeepResolve_NeedsUpdatedDriver "DeepResolve.NeedsUpdatedDriver" +#define NVSDK_NGX_Parameter_FrameInterpolation_NeedsUpdatedDriver "FrameInterpolation.NeedsUpdatedDriver" +#define NVSDK_NGX_Parameter_SuperSampling_MinDriverVersionMajor "SuperSampling.MinDriverVersionMajor" +#define NVSDK_NGX_Parameter_InPainting_MinDriverVersionMajor "InPainting.MinDriverVersionMajor" +#define NVSDK_NGX_Parameter_ImageSuperResolution_MinDriverVersionMajor "ImageSuperResolution.MinDriverVersionMajor" +#define NVSDK_NGX_Parameter_SlowMotion_MinDriverVersionMajor "SlowMotion.MinDriverVersionMajor" +#define NVSDK_NGX_Parameter_VideoSuperResolution_MinDriverVersionMajor "VideoSuperResolution.MinDriverVersionMajor" +#define NVSDK_NGX_Parameter_ImageSignalProcessing_MinDriverVersionMajor "ImageSignalProcessing.MinDriverVersionMajor" +#define NVSDK_NGX_Parameter_DeepResolve_MinDriverVersionMajor "DeepResolve.MinDriverVersionMajor" +#define NVSDK_NGX_Parameter_FrameInterpolation_MinDriverVersionMajor "FrameInterpolation.MinDriverVersionMajor" +#define NVSDK_NGX_Parameter_SuperSampling_MinDriverVersionMinor "SuperSampling.MinDriverVersionMinor" +#define NVSDK_NGX_Parameter_InPainting_MinDriverVersionMinor "InPainting.MinDriverVersionMinor" +#define NVSDK_NGX_Parameter_ImageSuperResolution_MinDriverVersionMinor "ImageSuperResolution.MinDriverVersionMinor" +#define NVSDK_NGX_Parameter_SlowMotion_MinDriverVersionMinor "SlowMotion.MinDriverVersionMinor" +#define NVSDK_NGX_Parameter_VideoSuperResolution_MinDriverVersionMinor "VideoSuperResolution.MinDriverVersionMinor" +#define NVSDK_NGX_Parameter_ImageSignalProcessing_MinDriverVersionMinor "ImageSignalProcessing.MinDriverVersionMinor" +#define NVSDK_NGX_Parameter_DeepResolve_MinDriverVersionMinor "DeepResolve.MinDriverVersionMinor" +#define NVSDK_NGX_Parameter_SuperSampling_FeatureInitResult "SuperSampling.FeatureInitResult" +#define NVSDK_NGX_Parameter_InPainting_FeatureInitResult "InPainting.FeatureInitResult" +#define NVSDK_NGX_Parameter_ImageSuperResolution_FeatureInitResult "ImageSuperResolution.FeatureInitResult" +#define NVSDK_NGX_Parameter_SlowMotion_FeatureInitResult "SlowMotion.FeatureInitResult" +#define NVSDK_NGX_Parameter_VideoSuperResolution_FeatureInitResult "VideoSuperResolution.FeatureInitResult" +#define NVSDK_NGX_Parameter_ImageSignalProcessing_FeatureInitResult "ImageSignalProcessing.FeatureInitResult" +#define NVSDK_NGX_Parameter_DeepResolve_FeatureInitResult "DeepResolve.FeatureInitResult" +#define NVSDK_NGX_Parameter_FrameInterpolation_FeatureInitResult "FrameInterpolation.FeatureInitResult" +#define NVSDK_NGX_Parameter_ImageSuperResolution_ScaleFactor_2_1 "ImageSuperResolution.ScaleFactor.2.1" +#define NVSDK_NGX_Parameter_ImageSuperResolution_ScaleFactor_3_1 "ImageSuperResolution.ScaleFactor.3.1" +#define NVSDK_NGX_Parameter_ImageSuperResolution_ScaleFactor_3_2 "ImageSuperResolution.ScaleFactor.3.2" +#define NVSDK_NGX_Parameter_ImageSuperResolution_ScaleFactor_4_3 "ImageSuperResolution.ScaleFactor.4.3" +#define NVSDK_NGX_Parameter_NumFrames "NumFrames" +#define NVSDK_NGX_Parameter_Scale "Scale" +#define NVSDK_NGX_Parameter_Width "Width" +#define NVSDK_NGX_Parameter_Height "Height" +#define NVSDK_NGX_Parameter_OutWidth "OutWidth" +#define NVSDK_NGX_Parameter_OutHeight "OutHeight" +#define NVSDK_NGX_Parameter_Sharpness "Sharpness" +#define NVSDK_NGX_Parameter_Scratch "Scratch" +#define NVSDK_NGX_Parameter_Scratch_SizeInBytes "Scratch.SizeInBytes" +#define NVSDK_NGX_Parameter_Input1 "Input1" +#define NVSDK_NGX_Parameter_Input1_Format "Input1.Format" +#define NVSDK_NGX_Parameter_Input1_SizeInBytes "Input1.SizeInBytes" +#define NVSDK_NGX_Parameter_Input2 "Input2" +#define NVSDK_NGX_Parameter_Input2_Format "Input2.Format" +#define NVSDK_NGX_Parameter_Input2_SizeInBytes "Input2.SizeInBytes" +#define NVSDK_NGX_Parameter_Color "Color" +#define NVSDK_NGX_Parameter_Color_Format "Color.Format" +#define NVSDK_NGX_Parameter_Color_SizeInBytes "Color.SizeInBytes" +#define NVSDK_NGX_Parameter_FI_Color1 "Color1" +#define NVSDK_NGX_Parameter_FI_Color2 "Color2" +#define NVSDK_NGX_Parameter_Albedo "Albedo" +#define NVSDK_NGX_Parameter_Output "Output" +#define NVSDK_NGX_Parameter_Output_SizeInBytes "Output.SizeInBytes" +#define NVSDK_NGX_Parameter_FI_Output1 "Output1" +#define NVSDK_NGX_Parameter_FI_Output2 "Output2" +#define NVSDK_NGX_Parameter_FI_Output3 "Output3" +#define NVSDK_NGX_Parameter_Reset "Reset" +#define NVSDK_NGX_Parameter_BlendFactor "BlendFactor" +#define NVSDK_NGX_Parameter_MotionVectors "MotionVectors" +#define NVSDK_NGX_Parameter_FI_MotionVectors1 "MotionVectors1" +#define NVSDK_NGX_Parameter_FI_MotionVectors2 "MotionVectors2" +#define NVSDK_NGX_Parameter_Rect_X "Rect.X" +#define NVSDK_NGX_Parameter_Rect_Y "Rect.Y" +#define NVSDK_NGX_Parameter_Rect_W "Rect.W" +#define NVSDK_NGX_Parameter_Rect_H "Rect.H" +#define NVSDK_NGX_Parameter_MV_Scale_X "MV.Scale.X" +#define NVSDK_NGX_Parameter_MV_Scale_Y "MV.Scale.Y" +#define NVSDK_NGX_Parameter_Model "Model" +#define NVSDK_NGX_Parameter_Format "Format" +#define NVSDK_NGX_Parameter_SizeInBytes "SizeInBytes" +#define NVSDK_NGX_Parameter_ResourceAllocCallback "ResourceAllocCallback" +#define NVSDK_NGX_Parameter_BufferAllocCallback "BufferAllocCallback" +#define NVSDK_NGX_Parameter_Tex2DAllocCallback "Tex2DAllocCallback" +#define NVSDK_NGX_Parameter_ResourceReleaseCallback "ResourceReleaseCallback" +#define NVSDK_NGX_Parameter_CreationNodeMask "CreationNodeMask" +#define NVSDK_NGX_Parameter_VisibilityNodeMask "VisibilityNodeMask" +#define NVSDK_NGX_Parameter_MV_Offset_X "MV.Offset.X" +#define NVSDK_NGX_Parameter_MV_Offset_Y "MV.Offset.Y" +#define NVSDK_NGX_Parameter_Hint_UseFireflySwatter "Hint.UseFireflySwatter" +#define NVSDK_NGX_Parameter_Resource_Width "ResourceWidth" +#define NVSDK_NGX_Parameter_Resource_Height "ResourceHeight" +#define NVSDK_NGX_Parameter_Resource_OutWidth "ResourceOutWidth" +#define NVSDK_NGX_Parameter_Resource_OutHeight "ResourceOutHeight" +#define NVSDK_NGX_Parameter_Depth "Depth" +#define NVSDK_NGX_Parameter_FI_Depth1 "Depth1" +#define NVSDK_NGX_Parameter_FI_Depth2 "Depth2" +#define NVSDK_NGX_Parameter_DLSSOptimalSettingsCallback "DLSSOptimalSettingsCallback" +#define NVSDK_NGX_Parameter_DLSSGetStatsCallback "DLSSGetStatsCallback" +#define NVSDK_NGX_Parameter_PerfQualityValue "PerfQualityValue" +#define NVSDK_NGX_Parameter_RTXValue "RTXValue" +#define NVSDK_NGX_Parameter_DLSSMode "DLSSMode" +#define NVSDK_NGX_Parameter_FI_Mode "FIMode" +#define NVSDK_NGX_Parameter_FI_OF_Preset "FIOFPreset" +#define NVSDK_NGX_Parameter_FI_OF_GridSize "FIOFGridSize" +#define NVSDK_NGX_Parameter_Jitter_Offset_X "Jitter.Offset.X" +#define NVSDK_NGX_Parameter_Jitter_Offset_Y "Jitter.Offset.Y" +#define NVSDK_NGX_Parameter_Denoise "Denoise" +#define NVSDK_NGX_Parameter_TransparencyMask "TransparencyMask" +#define NVSDK_NGX_Parameter_ExposureTexture "ExposureTexture" // a 1x1 texture containing the final exposure scale +#define NVSDK_NGX_Parameter_DLSS_Feature_Create_Flags "DLSS.Feature.Create.Flags" +#define NVSDK_NGX_Parameter_DLSS_Checkerboard_Jitter_Hack "DLSS.Checkerboard.Jitter.Hack" +#define NVSDK_NGX_Parameter_GBuffer_Albedo "GBuffer.Albedo" +#define NVSDK_NGX_Parameter_GBuffer_Roughness "GBuffer.Roughness" +#define NVSDK_NGX_Parameter_GBuffer_Metallic "GBuffer.Metallic" +#define NVSDK_NGX_Parameter_GBuffer_Specular "GBuffer.Specular" +#define NVSDK_NGX_Parameter_GBuffer_Subsurface "GBuffer.Subsurface" +#define NVSDK_NGX_Parameter_GBuffer_Normals "GBuffer.Normals" +#define NVSDK_NGX_Parameter_GBuffer_ShadingModelId "GBuffer.ShadingModelId" +#define NVSDK_NGX_Parameter_GBuffer_MaterialId "GBuffer.MaterialId" +#define NVSDK_NGX_Parameter_GBuffer_Atrrib_8 "GBuffer.Attrib.8" +#define NVSDK_NGX_Parameter_GBuffer_Atrrib_9 "GBuffer.Attrib.9" +#define NVSDK_NGX_Parameter_GBuffer_Atrrib_10 "GBuffer.Attrib.10" +#define NVSDK_NGX_Parameter_GBuffer_Atrrib_11 "GBuffer.Attrib.11" +#define NVSDK_NGX_Parameter_GBuffer_Atrrib_12 "GBuffer.Attrib.12" +#define NVSDK_NGX_Parameter_GBuffer_Atrrib_13 "GBuffer.Attrib.13" +#define NVSDK_NGX_Parameter_GBuffer_Atrrib_14 "GBuffer.Attrib.14" +#define NVSDK_NGX_Parameter_GBuffer_Atrrib_15 "GBuffer.Attrib.15" +#define NVSDK_NGX_Parameter_TonemapperType "TonemapperType" +#define NVSDK_NGX_Parameter_FreeMemOnReleaseFeature "FreeMemOnReleaseFeature" +#define NVSDK_NGX_Parameter_MotionVectors3D "MotionVectors3D" +#define NVSDK_NGX_Parameter_IsParticleMask "IsParticleMask" +#define NVSDK_NGX_Parameter_AnimatedTextureMask "AnimatedTextureMask" +#define NVSDK_NGX_Parameter_DepthHighRes "DepthHighRes" +#define NVSDK_NGX_Parameter_Position_ViewSpace "Position.ViewSpace" +#define NVSDK_NGX_Parameter_FrameTimeDeltaInMsec "FrameTimeDeltaInMsec" +#define NVSDK_NGX_Parameter_RayTracingHitDistance "RayTracingHitDistance" +#define NVSDK_NGX_Parameter_MotionVectorsReflection "MotionVectorsReflection" +#define NVSDK_NGX_Parameter_DLSS_Enable_Output_Subrects "DLSS.Enable.Output.Subrects" +#define NVSDK_NGX_Parameter_DLSS_Input_Color_Subrect_Base_X "DLSS.Input.Color.Subrect.Base.X" +#define NVSDK_NGX_Parameter_DLSS_Input_Color_Subrect_Base_Y "DLSS.Input.Color.Subrect.Base.Y" +#define NVSDK_NGX_Parameter_DLSS_Input_Depth_Subrect_Base_X "DLSS.Input.Depth.Subrect.Base.X" +#define NVSDK_NGX_Parameter_DLSS_Input_Depth_Subrect_Base_Y "DLSS.Input.Depth.Subrect.Base.Y" +#define NVSDK_NGX_Parameter_DLSS_Input_MV_SubrectBase_X "DLSS.Input.MV.Subrect.Base.X" +#define NVSDK_NGX_Parameter_DLSS_Input_MV_SubrectBase_Y "DLSS.Input.MV.Subrect.Base.Y" +#define NVSDK_NGX_Parameter_DLSS_Input_Translucency_SubrectBase_X "DLSS.Input.Translucency.Subrect.Base.X" +#define NVSDK_NGX_Parameter_DLSS_Input_Translucency_SubrectBase_Y "DLSS.Input.Translucency.Subrect.Base.Y" +#define NVSDK_NGX_Parameter_DLSS_Output_Subrect_Base_X "DLSS.Output.Subrect.Base.X" +#define NVSDK_NGX_Parameter_DLSS_Output_Subrect_Base_Y "DLSS.Output.Subrect.Base.Y" +#define NVSDK_NGX_Parameter_DLSS_Render_Subrect_Dimensions_Width "DLSS.Render.Subrect.Dimensions.Width" +#define NVSDK_NGX_Parameter_DLSS_Render_Subrect_Dimensions_Height "DLSS.Render.Subrect.Dimensions.Height" +#define NVSDK_NGX_Parameter_DLSS_Pre_Exposure "DLSS.Pre.Exposure" +#define NVSDK_NGX_Parameter_DLSS_Exposure_Scale "DLSS.Exposure.Scale" +#define NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_Mask "DLSS.Input.Bias.Current.Color.Mask" +#define NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_SubrectBase_X "DLSS.Input.Bias.Current.Color.Subrect.Base.X" +#define NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_SubrectBase_Y "DLSS.Input.Bias.Current.Color.Subrect.Base.Y" +#define NVSDK_NGX_Parameter_DLSS_Indicator_Invert_Y_Axis "DLSS.Indicator.Invert.Y.Axis" +#define NVSDK_NGX_Parameter_DLSS_Indicator_Invert_X_Axis "DLSS.Indicator.Invert.X.Axis" + +#define NVSDK_NGX_Parameter_DLSS_Get_Dynamic_Max_Render_Width "DLSS.Get.Dynamic.Max.Render.Width" +#define NVSDK_NGX_Parameter_DLSS_Get_Dynamic_Max_Render_Height "DLSS.Get.Dynamic.Max.Render.Height" +#define NVSDK_NGX_Parameter_DLSS_Get_Dynamic_Min_Render_Width "DLSS.Get.Dynamic.Min.Render.Width" +#define NVSDK_NGX_Parameter_DLSS_Get_Dynamic_Min_Render_Height "DLSS.Get.Dynamic.Min.Render.Height" + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif diff --git a/plugins/DLSS/Source/ThirdParty/NGX/Include/nvsdk_ngx_helpers.h b/plugins/DLSS/Source/ThirdParty/NGX/Include/nvsdk_ngx_helpers.h new file mode 100644 index 00000000..f70e6031 --- /dev/null +++ b/plugins/DLSS/Source/ThirdParty/NGX/Include/nvsdk_ngx_helpers.h @@ -0,0 +1,629 @@ +/* +* Copyright (c) 2018 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#ifndef NVSDK_NGX_HELPERS_H +#define NVSDK_NGX_HELPERS_H +#pragma once + +#include "nvsdk_ngx.h" +#include "nvsdk_ngx_defs.h" + +typedef NVSDK_NGX_Result(NVSDK_CONV *PFN_NVSDK_NGX_DLSS_GetStatsCallback)(NVSDK_NGX_Parameter *InParams); + +static inline NVSDK_NGX_Result NGX_DLSS_GET_STATS_2( + NVSDK_NGX_Parameter *pInParams, + unsigned long long *pVRAMAllocatedBytes, + unsigned int *pOptLevel, unsigned int *IsDevSnippetBranch) +{ + void *Callback = NULL; + NVSDK_NGX_Parameter_GetVoidPointer(pInParams, NVSDK_NGX_Parameter_DLSSGetStatsCallback, &Callback); + if (!Callback) + { + // Possible reasons for this: + // - Installed DLSS is out of date and does not support the feature we need + // - You used NVSDK_NGX_AllocateParameters() for creating InParams. Try using NVSDK_NGX_GetCapabilityParameters() instead + return NVSDK_NGX_Result_FAIL_OutOfDate; + } + + NVSDK_NGX_Result Res = NVSDK_NGX_Result_Success; + PFN_NVSDK_NGX_DLSS_GetStatsCallback PFNCallback = (PFN_NVSDK_NGX_DLSS_GetStatsCallback)Callback; + Res = PFNCallback(pInParams); + if (NVSDK_NGX_FAILED(Res)) + { + return Res; + } + NVSDK_NGX_Parameter_GetULL(pInParams, NVSDK_NGX_Parameter_SizeInBytes, pVRAMAllocatedBytes); + NVSDK_NGX_Parameter_GetUI(pInParams, NVSDK_NGX_EParameter_OptLevel, pOptLevel); + NVSDK_NGX_Parameter_GetUI(pInParams, NVSDK_NGX_EParameter_IsDevSnippetBranch, IsDevSnippetBranch); + return Res; +} + +static inline NVSDK_NGX_Result NGX_DLSS_GET_STATS_1( + NVSDK_NGX_Parameter *pInParams, + unsigned long long *pVRAMAllocatedBytes, + unsigned int *pOptLevel) +{ + unsigned int dummy = 0; + return NGX_DLSS_GET_STATS_2(pInParams, pVRAMAllocatedBytes, pOptLevel, &dummy); +} + +static inline NVSDK_NGX_Result NGX_DLSS_GET_STATS( + NVSDK_NGX_Parameter *pInParams, + unsigned long long *pVRAMAllocatedBytes) +{ + unsigned int dummy = 0; + return NGX_DLSS_GET_STATS_2(pInParams, pVRAMAllocatedBytes, &dummy, &dummy); +} + +typedef NVSDK_NGX_Result(NVSDK_CONV *PFN_NVSDK_NGX_DLSS_GetOptimalSettingsCallback)(NVSDK_NGX_Parameter *InParams); + +static inline NVSDK_NGX_Result NGX_DLSS_GET_OPTIMAL_SETTINGS( + NVSDK_NGX_Parameter *pInParams, + unsigned int InUserSelectedWidth, + unsigned int InUserSelectedHeight, + NVSDK_NGX_PerfQuality_Value InPerfQualityValue, + unsigned int *pOutRenderOptimalWidth, + unsigned int *pOutRenderOptimalHeight, + unsigned int *pOutRenderMaxWidth, + unsigned int *pOutRenderMaxHeight, + unsigned int *pOutRenderMinWidth, + unsigned int *pOutRenderMinHeight, + float *pOutSharpness) +{ + void *Callback = NULL; + NVSDK_NGX_Parameter_GetVoidPointer(pInParams, NVSDK_NGX_Parameter_DLSSOptimalSettingsCallback, &Callback); + if (!Callback) + { + // Possible reasons for this: + // - Installed DLSS is out of date and does not support the feature we need + // - You used NVSDK_NGX_AllocateParameters() for creating InParams. Try using NVSDK_NGX_GetCapabilityParameters() instead + return NVSDK_NGX_Result_FAIL_OutOfDate; + } + + // These are selections made by user in UI + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Width, InUserSelectedWidth); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Height, InUserSelectedHeight); + NVSDK_NGX_Parameter_SetI(pInParams, NVSDK_NGX_Parameter_PerfQualityValue, InPerfQualityValue); + NVSDK_NGX_Parameter_SetI(pInParams, NVSDK_NGX_Parameter_RTXValue, false); // Some older DLSS dlls still expect this value to be set + + NVSDK_NGX_Result Res = NVSDK_NGX_Result_Success; + PFN_NVSDK_NGX_DLSS_GetOptimalSettingsCallback PFNCallback = (PFN_NVSDK_NGX_DLSS_GetOptimalSettingsCallback)Callback; + Res = PFNCallback(pInParams); + if (NVSDK_NGX_FAILED(Res)) + { + return Res; + } + NVSDK_NGX_Parameter_GetUI(pInParams, NVSDK_NGX_Parameter_OutWidth, pOutRenderOptimalWidth); + NVSDK_NGX_Parameter_GetUI(pInParams, NVSDK_NGX_Parameter_OutHeight, pOutRenderOptimalHeight); + // If we have an older DLSS Dll those might need to be set to the optimal dimensions instead + *pOutRenderMaxWidth = *pOutRenderOptimalWidth; + *pOutRenderMaxHeight = *pOutRenderOptimalHeight; + *pOutRenderMinWidth = *pOutRenderOptimalWidth; + *pOutRenderMinHeight = *pOutRenderOptimalHeight; + NVSDK_NGX_Parameter_GetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Get_Dynamic_Max_Render_Width, pOutRenderMaxWidth); + NVSDK_NGX_Parameter_GetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Get_Dynamic_Max_Render_Height, pOutRenderMaxHeight); + NVSDK_NGX_Parameter_GetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Get_Dynamic_Min_Render_Width, pOutRenderMinWidth); + NVSDK_NGX_Parameter_GetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Get_Dynamic_Min_Render_Height, pOutRenderMinHeight); + NVSDK_NGX_Parameter_GetF(pInParams, NVSDK_NGX_Parameter_Sharpness, pOutSharpness); + return Res; +} + +/*** D3D11 ***/ +typedef struct NVSDK_NGX_D3D11_Feature_Eval_Params +{ + ID3D11Resource* pInColor; + ID3D11Resource* pInOutput; + /*** OPTIONAL for DLSS ***/ + float InSharpness; +} NVSDK_NGX_D3D11_Feature_Eval_Params; + +typedef struct NVSDK_NGX_CUDA_Feature_Eval_Params +{ + CUtexObject* pInColor; + CUtexObject* pInOutput; + /*** OPTIONAL for DLSS ***/ + float InSharpness; +} NVSDK_NGX_CUDA_Feature_Eval_Params; + +typedef struct NVSDK_NGX_D3D11_GBuffer +{ + ID3D11Resource* pInAttrib[NVSDK_NGX_GBUFFERTYPE_NUM]; +} NVSDK_NGX_D3D11_GBuffer; + +typedef struct NVSDK_NGX_D3D11_DLSS_Eval_Params +{ + NVSDK_NGX_D3D11_Feature_Eval_Params Feature; + ID3D11Resource* pInDepth; + ID3D11Resource* pInMotionVectors; + float InJitterOffsetX; /* Jitter offset must be in input/render pixel space */ + float InJitterOffsetY; + NVSDK_NGX_Dimensions InRenderSubrectDimensions; + /*** OPTIONAL - leave to 0/0.0f if unused ***/ + int InReset; /* Set to 1 when scene changes completely (new level etc) */ + float InMVScaleX; /* If MVs need custom scaling to convert to pixel space */ + float InMVScaleY; + ID3D11Resource* pInTransparencyMask; /* Unused/Reserved for future use */ + ID3D11Resource* pInExposureTexture; + ID3D11Resource* pInBiasCurrentColorMask; + NVSDK_NGX_Coordinates InColorSubrectBase; + NVSDK_NGX_Coordinates InDepthSubrectBase; + NVSDK_NGX_Coordinates InMVSubrectBase; + NVSDK_NGX_Coordinates InTranslucencySubrectBase; + NVSDK_NGX_Coordinates InBiasCurrentColorSubrectBase; + NVSDK_NGX_Coordinates InOutputSubrectBase; + float InPreExposure; + int InIndicatorInvertXAxis; + int InIndicatorInvertYAxis; + /*** OPTIONAL - only for research purposes ***/ + NVSDK_NGX_D3D11_GBuffer GBufferSurface; + NVSDK_NGX_ToneMapperType InToneMapperType; + ID3D11Resource* pInMotionVectors3D; + ID3D11Resource* pInIsParticleMask; /* to identify which pixels contains particles, essentially that are not drawn as part of base pass */ + ID3D11Resource* pInAnimatedTextureMask; /* a binary mask covering pixels occupied by animated textures */ + ID3D11Resource* pInDepthHighRes; + ID3D11Resource* pInPositionViewSpace; + float InFrameTimeDeltaInMsec; /* helps in determining the amount to denoise or anti-alias based on the speed of the object from motion vector magnitudes and fps as determined by this delta */ + ID3D11Resource* pInRayTracingHitDistance; /* for each effect - approximation to the amount of noise in a ray-traced color */ + ID3D11Resource* pInMotionVectorsReflections; /* motion vectors of reflected objects like for mirrored surfaces */ +} NVSDK_NGX_D3D11_DLSS_Eval_Params; + +typedef struct NVSDK_NGX_D3D11_DLISP_Eval_Params +{ + NVSDK_NGX_D3D11_Feature_Eval_Params Feature; + /*** OPTIONAL - leave to 0/0.0f if unused ***/ + unsigned int InRectX; + unsigned int InRectY; + unsigned int InRectW; + unsigned int InRectH; + float InDenoise; +} NVSDK_NGX_D3D11_DLISP_Eval_Params; + +typedef struct NVSDK_NGX_CUDA_DLISP_Eval_Params +{ + NVSDK_NGX_CUDA_Feature_Eval_Params Feature; + /*** OPTIONAL - leave to 0/0.0f if unused ***/ + unsigned int InRectX; + unsigned int InRectY; + unsigned int InRectW; + unsigned int InRectH; + float InDenoise; +} NVSDK_NGX_CUDA_DLISP_Eval_Params; + +static inline NVSDK_NGX_Result NGX_D3D11_CREATE_DLSS_EXT( + ID3D11DeviceContext *pInCtx, + NVSDK_NGX_Handle **ppOutHandle, + NVSDK_NGX_Parameter *pInParams, + NVSDK_NGX_DLSS_Create_Params *pInDlssCreateParams) +{ + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Width, pInDlssCreateParams->Feature.InWidth); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Height, pInDlssCreateParams->Feature.InHeight); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_OutWidth, pInDlssCreateParams->Feature.InTargetWidth); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_OutHeight, pInDlssCreateParams->Feature.InTargetHeight); + NVSDK_NGX_Parameter_SetI(pInParams, NVSDK_NGX_Parameter_PerfQualityValue, pInDlssCreateParams->Feature.InPerfQualityValue); + NVSDK_NGX_Parameter_SetI(pInParams, NVSDK_NGX_Parameter_DLSS_Feature_Create_Flags, pInDlssCreateParams->InFeatureCreateFlags); + NVSDK_NGX_Parameter_SetI(pInParams, NVSDK_NGX_Parameter_DLSS_Enable_Output_Subrects, pInDlssCreateParams->InEnableOutputSubrects ? 1 : 0); + + return NVSDK_NGX_D3D11_CreateFeature(pInCtx, NVSDK_NGX_Feature_SuperSampling, pInParams, ppOutHandle); +} + +static inline NVSDK_NGX_Result NGX_D3D11_EVALUATE_DLSS_EXT( + ID3D11DeviceContext *pInCtx, + NVSDK_NGX_Handle *pInHandle, + NVSDK_NGX_Parameter *pInParams, + NVSDK_NGX_D3D11_DLSS_Eval_Params *pInDlssEvalParams) +{ + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_Color, pInDlssEvalParams->Feature.pInColor); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_Output, pInDlssEvalParams->Feature.pInOutput); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_Depth, pInDlssEvalParams->pInDepth); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_MotionVectors, pInDlssEvalParams->pInMotionVectors); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_Jitter_Offset_X, pInDlssEvalParams->InJitterOffsetX); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_Jitter_Offset_Y, pInDlssEvalParams->InJitterOffsetY); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_Sharpness, pInDlssEvalParams->Feature.InSharpness); + NVSDK_NGX_Parameter_SetI(pInParams, NVSDK_NGX_Parameter_Reset, pInDlssEvalParams->InReset); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_MV_Scale_X, pInDlssEvalParams->InMVScaleX == 0.0f ? 1.0f : pInDlssEvalParams->InMVScaleX); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_MV_Scale_Y, pInDlssEvalParams->InMVScaleY == 0.0f ? 1.0f : pInDlssEvalParams->InMVScaleY); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_TransparencyMask, pInDlssEvalParams->pInTransparencyMask); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_ExposureTexture, pInDlssEvalParams->pInExposureTexture); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_Mask, pInDlssEvalParams->pInBiasCurrentColorMask); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Albedo, pInDlssEvalParams->GBufferSurface.pInAttrib[NVSDK_NGX_GBUFFER_ALBEDO]); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Roughness, pInDlssEvalParams->GBufferSurface.pInAttrib[NVSDK_NGX_GBUFFER_ROUGHNESS]); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Metallic, pInDlssEvalParams->GBufferSurface.pInAttrib[NVSDK_NGX_GBUFFER_METALLIC]); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Specular, pInDlssEvalParams->GBufferSurface.pInAttrib[NVSDK_NGX_GBUFFER_SPECULAR]); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Subsurface, pInDlssEvalParams->GBufferSurface.pInAttrib[NVSDK_NGX_GBUFFER_SUBSURFACE]); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Normals, pInDlssEvalParams->GBufferSurface.pInAttrib[NVSDK_NGX_GBUFFER_NORMALS]); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_ShadingModelId, pInDlssEvalParams->GBufferSurface.pInAttrib[NVSDK_NGX_GBUFFER_SHADINGMODELID]); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_MaterialId, pInDlssEvalParams->GBufferSurface.pInAttrib[NVSDK_NGX_GBUFFER_MATERIALID]); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Atrrib_8, pInDlssEvalParams->GBufferSurface.pInAttrib[8]); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Atrrib_9, pInDlssEvalParams->GBufferSurface.pInAttrib[9]); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Atrrib_10, pInDlssEvalParams->GBufferSurface.pInAttrib[10]); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Atrrib_11, pInDlssEvalParams->GBufferSurface.pInAttrib[11]); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Atrrib_12, pInDlssEvalParams->GBufferSurface.pInAttrib[12]); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Atrrib_13, pInDlssEvalParams->GBufferSurface.pInAttrib[13]); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Atrrib_14, pInDlssEvalParams->GBufferSurface.pInAttrib[14]); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Atrrib_15, pInDlssEvalParams->GBufferSurface.pInAttrib[15]); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_TonemapperType, pInDlssEvalParams->InToneMapperType); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_MotionVectors3D, pInDlssEvalParams->pInMotionVectors3D); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_IsParticleMask, pInDlssEvalParams->pInIsParticleMask); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_AnimatedTextureMask, pInDlssEvalParams->pInAnimatedTextureMask); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_DepthHighRes, pInDlssEvalParams->pInDepthHighRes); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_Position_ViewSpace, pInDlssEvalParams->pInPositionViewSpace); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_FrameTimeDeltaInMsec, pInDlssEvalParams->InFrameTimeDeltaInMsec); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_RayTracingHitDistance, pInDlssEvalParams->pInRayTracingHitDistance); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_MotionVectorsReflection, pInDlssEvalParams->pInMotionVectorsReflections); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Color_Subrect_Base_X, pInDlssEvalParams->InColorSubrectBase.X); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Color_Subrect_Base_Y, pInDlssEvalParams->InColorSubrectBase.Y); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Depth_Subrect_Base_X, pInDlssEvalParams->InDepthSubrectBase.X); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Depth_Subrect_Base_Y, pInDlssEvalParams->InDepthSubrectBase.Y); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_MV_SubrectBase_X, pInDlssEvalParams->InMVSubrectBase.X); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_MV_SubrectBase_Y, pInDlssEvalParams->InMVSubrectBase.Y); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Translucency_SubrectBase_X, pInDlssEvalParams->InTranslucencySubrectBase.X); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Translucency_SubrectBase_Y, pInDlssEvalParams->InTranslucencySubrectBase.Y); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_SubrectBase_X, pInDlssEvalParams->InBiasCurrentColorSubrectBase.X); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_SubrectBase_Y, pInDlssEvalParams->InBiasCurrentColorSubrectBase.Y); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Output_Subrect_Base_X, pInDlssEvalParams->InOutputSubrectBase.X); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Output_Subrect_Base_Y, pInDlssEvalParams->InOutputSubrectBase.Y); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Render_Subrect_Dimensions_Width , pInDlssEvalParams->InRenderSubrectDimensions.Width); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Render_Subrect_Dimensions_Height, pInDlssEvalParams->InRenderSubrectDimensions.Height); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_DLSS_Pre_Exposure, pInDlssEvalParams->InPreExposure == 0.0f ? 1.0f : pInDlssEvalParams->InPreExposure); + NVSDK_NGX_Parameter_SetI(pInParams, NVSDK_NGX_Parameter_DLSS_Indicator_Invert_X_Axis, pInDlssEvalParams->InIndicatorInvertXAxis); + NVSDK_NGX_Parameter_SetI(pInParams, NVSDK_NGX_Parameter_DLSS_Indicator_Invert_Y_Axis, pInDlssEvalParams->InIndicatorInvertYAxis); + + return NVSDK_NGX_D3D11_EvaluateFeature_C(pInCtx, pInHandle, pInParams, NULL); +} + + +static inline NVSDK_NGX_Result NGX_D3D11_CREATE_DLISP_EXT( + ID3D11DeviceContext *pInCtx, + NVSDK_NGX_Handle **ppOutHandle, + NVSDK_NGX_Parameter *pInParams, + NVSDK_NGX_Feature_Create_Params *pDlispCreateParams) +{ + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Width, pDlispCreateParams->InWidth); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Height, pDlispCreateParams->InHeight); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_OutWidth, pDlispCreateParams->InTargetWidth); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_OutHeight, pDlispCreateParams->InTargetHeight); + + return NVSDK_NGX_D3D11_CreateFeature(pInCtx, NVSDK_NGX_Feature_ImageSignalProcessing, pInParams, ppOutHandle); +} + +static inline NVSDK_NGX_Result NGX_CUDA_CREATE_DLISP_EXT( + NVSDK_NGX_Handle** ppOutHandle, + NVSDK_NGX_Parameter* pInParams, + NVSDK_NGX_Feature_Create_Params* pDlispCreateParams) +{ + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Width, pDlispCreateParams->InWidth); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Height, pDlispCreateParams->InHeight); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_OutWidth, pDlispCreateParams->InTargetWidth); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_OutHeight, pDlispCreateParams->InTargetHeight); + + return NVSDK_NGX_CUDA_CreateFeature(NVSDK_NGX_Feature_ImageSignalProcessing, pInParams, ppOutHandle); +} + +static inline NVSDK_NGX_Result NGX_D3D11_EVALUATE_DLISP_EXT( + ID3D11DeviceContext *pInCtx, + NVSDK_NGX_Handle *pInHandle, + NVSDK_NGX_Parameter *pInParams, + NVSDK_NGX_D3D11_DLISP_Eval_Params *pDlispEvalParams) +{ + if (pDlispEvalParams->Feature.InSharpness < 0.0f || pDlispEvalParams->Feature.InSharpness > 1.0f || pDlispEvalParams->InDenoise < 0.0f || pDlispEvalParams->InDenoise > 1.0f) + { + return NVSDK_NGX_Result_FAIL_InvalidParameter; + } + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_Color, pDlispEvalParams->Feature.pInColor); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_Output, pDlispEvalParams->Feature.pInOutput); + // Both sharpness and denoise in range [0.0f,1.0f] + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_Sharpness, pDlispEvalParams->Feature.InSharpness); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_Denoise, pDlispEvalParams->InDenoise); + // If input is atlas - use RECT to upscale only the required area + if (pDlispEvalParams->InRectW) + { + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Rect_X, pDlispEvalParams->InRectX); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Rect_Y, pDlispEvalParams->InRectY); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Rect_W, pDlispEvalParams->InRectW); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Rect_H, pDlispEvalParams->InRectH); + } + + return NVSDK_NGX_D3D11_EvaluateFeature_C(pInCtx, pInHandle, pInParams, NULL); +} + +static inline NVSDK_NGX_Result NGX_CUDA_EVALUATE_DLISP_EXT( + NVSDK_NGX_Handle *pInHandle, + NVSDK_NGX_Parameter *pInParams, + NVSDK_NGX_CUDA_DLISP_Eval_Params *pDlispEvalParams) +{ + if (pDlispEvalParams->Feature.InSharpness < 0.0f || pDlispEvalParams->Feature.InSharpness > 1.0f || pDlispEvalParams->InDenoise < 0.0f || pDlispEvalParams->InDenoise > 1.0f) + { + return NVSDK_NGX_Result_FAIL_InvalidParameter; + } + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_Color, pDlispEvalParams->Feature.pInColor); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_Output, pDlispEvalParams->Feature.pInOutput); + // Both sharpness and denoise in range [0.0f,1.0f] + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_Sharpness, pDlispEvalParams->Feature.InSharpness); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_Denoise, pDlispEvalParams->InDenoise); + // If input is atlas - use RECT to upscale only the required area + if (pDlispEvalParams->InRectW) + { + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Rect_X, pDlispEvalParams->InRectX); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Rect_Y, pDlispEvalParams->InRectY); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Rect_W, pDlispEvalParams->InRectW); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Rect_H, pDlispEvalParams->InRectH); + } + + return NVSDK_NGX_CUDA_EvaluateFeature_C(pInHandle, pInParams, NULL); +} + +static inline NVSDK_NGX_Result NGX_D3D11_CREATE_DLRESOLVE_EXT( + ID3D11DeviceContext *pInCtx, + NVSDK_NGX_Handle **ppOutHandle, + NVSDK_NGX_Parameter *pInParams, + NVSDK_NGX_Feature_Create_Params *pDlresolveCreateParams) +{ + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Width, pDlresolveCreateParams->InWidth); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Height, pDlresolveCreateParams->InHeight); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_OutWidth, pDlresolveCreateParams->InTargetWidth); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_OutHeight, pDlresolveCreateParams->InTargetHeight); + + return NVSDK_NGX_D3D11_CreateFeature(pInCtx, NVSDK_NGX_Feature_DeepResolve, pInParams, ppOutHandle); +} + +static inline NVSDK_NGX_Result NGX_D3D11_EVALUATE_DLRESOLVE_EXT( + ID3D11DeviceContext *pInCtx, + NVSDK_NGX_Handle *InHandle, + NVSDK_NGX_Parameter *pInParams, + NVSDK_NGX_D3D11_Feature_Eval_Params *pDlresolveEvalParams) +{ + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_Color, pDlresolveEvalParams->pInColor); + NVSDK_NGX_Parameter_SetD3d11Resource(pInParams, NVSDK_NGX_Parameter_Output, pDlresolveEvalParams->pInOutput); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_Sharpness, pDlresolveEvalParams->InSharpness); + + return NVSDK_NGX_D3D11_EvaluateFeature_C(pInCtx, InHandle, pInParams, NULL); +} + +/*** D3D12 ***/ +typedef struct NVSDK_NGX_D3D12_Feature_Eval_Params +{ + ID3D12Resource* pInColor; + ID3D12Resource* pInOutput; + /*** OPTIONAL for DLSS ***/ + float InSharpness; +} NVSDK_NGX_D3D12_Feature_Eval_Params; + +typedef struct NVSDK_NGX_D3D12_GBuffer +{ + ID3D12Resource* pInAttrib[NVSDK_NGX_GBUFFERTYPE_NUM]; +} NVSDK_NGX_D3D12_GBuffer; + +typedef struct NVSDK_NGX_D3D12_DLSS_Eval_Params +{ + NVSDK_NGX_D3D12_Feature_Eval_Params Feature; + ID3D12Resource* pInDepth; + ID3D12Resource* pInMotionVectors; + float InJitterOffsetX; /* Jitter offset must be in input/render pixel space */ + float InJitterOffsetY; + NVSDK_NGX_Dimensions InRenderSubrectDimensions; + /*** OPTIONAL - leave to 0/0.0f if unused ***/ + int InReset; /* Set to 1 when scene changes completely (new level etc) */ + float InMVScaleX; /* If MVs need custom scaling to convert to pixel space */ + float InMVScaleY; + ID3D12Resource* pInTransparencyMask; /* Unused/Reserved for future use */ + ID3D12Resource* pInExposureTexture; + ID3D12Resource* pInBiasCurrentColorMask; + NVSDK_NGX_Coordinates InColorSubrectBase; + NVSDK_NGX_Coordinates InDepthSubrectBase; + NVSDK_NGX_Coordinates InMVSubrectBase; + NVSDK_NGX_Coordinates InTranslucencySubrectBase; + NVSDK_NGX_Coordinates InBiasCurrentColorSubrectBase; + NVSDK_NGX_Coordinates InOutputSubrectBase; + float InPreExposure; + int InIndicatorInvertXAxis; + int InIndicatorInvertYAxis; + /*** OPTIONAL - only for research purposes ***/ + NVSDK_NGX_D3D12_GBuffer GBufferSurface; + NVSDK_NGX_ToneMapperType InToneMapperType; + ID3D12Resource* pInMotionVectors3D; + ID3D12Resource* pInIsParticleMask; /* to identify which pixels contains particles, essentially that are not drawn as part of base pass */ + ID3D12Resource* pInAnimatedTextureMask; /* a binary mask covering pixels occupied by animated textures */ + ID3D12Resource* pInDepthHighRes; + ID3D12Resource* pInPositionViewSpace; + float InFrameTimeDeltaInMsec; /* helps in determining the amount to denoise or anti-alias based on the speed of the object from motion vector magnitudes and fps as determined by this delta */ + ID3D12Resource* pInRayTracingHitDistance; /* for each effect - approximation to the amount of noise in a ray-traced color */ + ID3D12Resource* pInMotionVectorsReflections; /* motion vectors of reflected objects like for mirrored surfaces */ +} NVSDK_NGX_D3D12_DLSS_Eval_Params; + +typedef struct NVSDK_NGX_D3D12_DLISP_Eval_Params +{ + NVSDK_NGX_D3D12_Feature_Eval_Params Feature; + /*** OPTIONAL ***/ + unsigned int InRectX; + unsigned int InRectY; + unsigned int InRectW; + unsigned int InRectH; + float InDenoise; +} NVSDK_NGX_D3D12_DLISP_Eval_Params; + +static inline NVSDK_NGX_Result NGX_D3D12_CREATE_DLSS_EXT( + ID3D12GraphicsCommandList *pInCmdList, + unsigned int InCreationNodeMask, + unsigned int InVisibilityNodeMask, + NVSDK_NGX_Handle **ppOutHandle, + NVSDK_NGX_Parameter *pInParams, + NVSDK_NGX_DLSS_Create_Params *pInDlssCreateParams) +{ + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_CreationNodeMask, InCreationNodeMask); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_VisibilityNodeMask, InVisibilityNodeMask); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Width, pInDlssCreateParams->Feature.InWidth); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Height, pInDlssCreateParams->Feature.InHeight); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_OutWidth, pInDlssCreateParams->Feature.InTargetWidth); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_OutHeight, pInDlssCreateParams->Feature.InTargetHeight); + NVSDK_NGX_Parameter_SetI(pInParams, NVSDK_NGX_Parameter_PerfQualityValue, pInDlssCreateParams->Feature.InPerfQualityValue); + NVSDK_NGX_Parameter_SetI(pInParams, NVSDK_NGX_Parameter_DLSS_Feature_Create_Flags, pInDlssCreateParams->InFeatureCreateFlags); + NVSDK_NGX_Parameter_SetI(pInParams, NVSDK_NGX_Parameter_DLSS_Enable_Output_Subrects, pInDlssCreateParams->InEnableOutputSubrects ? 1 : 0); + + return NVSDK_NGX_D3D12_CreateFeature(pInCmdList, NVSDK_NGX_Feature_SuperSampling, pInParams, ppOutHandle); +} + +static inline NVSDK_NGX_Result NGX_D3D12_EVALUATE_DLSS_EXT( + ID3D12GraphicsCommandList *pInCmdList, + NVSDK_NGX_Handle *pInHandle, + NVSDK_NGX_Parameter *pInParams, + NVSDK_NGX_D3D12_DLSS_Eval_Params *pInDlssEvalParams) +{ + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_Color, pInDlssEvalParams->Feature.pInColor); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_Output, pInDlssEvalParams->Feature.pInOutput); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_Depth, pInDlssEvalParams->pInDepth); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_MotionVectors, pInDlssEvalParams->pInMotionVectors); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_Jitter_Offset_X, pInDlssEvalParams->InJitterOffsetX); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_Jitter_Offset_Y, pInDlssEvalParams->InJitterOffsetY); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_Sharpness, pInDlssEvalParams->Feature.InSharpness); + NVSDK_NGX_Parameter_SetI(pInParams, NVSDK_NGX_Parameter_Reset, pInDlssEvalParams->InReset); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_MV_Scale_X, pInDlssEvalParams->InMVScaleX == 0.0f ? 1.0f : pInDlssEvalParams->InMVScaleX); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_MV_Scale_Y, pInDlssEvalParams->InMVScaleY == 0.0f ? 1.0f : pInDlssEvalParams->InMVScaleY); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_TransparencyMask, pInDlssEvalParams->pInTransparencyMask); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_ExposureTexture, pInDlssEvalParams->pInExposureTexture); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_Mask, pInDlssEvalParams->pInBiasCurrentColorMask); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Albedo, pInDlssEvalParams->GBufferSurface.pInAttrib[NVSDK_NGX_GBUFFER_ALBEDO]); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Roughness, pInDlssEvalParams->GBufferSurface.pInAttrib[NVSDK_NGX_GBUFFER_ROUGHNESS]); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Metallic, pInDlssEvalParams->GBufferSurface.pInAttrib[NVSDK_NGX_GBUFFER_METALLIC]); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Specular, pInDlssEvalParams->GBufferSurface.pInAttrib[NVSDK_NGX_GBUFFER_SPECULAR]); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Subsurface, pInDlssEvalParams->GBufferSurface.pInAttrib[NVSDK_NGX_GBUFFER_SUBSURFACE]); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Normals, pInDlssEvalParams->GBufferSurface.pInAttrib[NVSDK_NGX_GBUFFER_NORMALS]); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_ShadingModelId, pInDlssEvalParams->GBufferSurface.pInAttrib[NVSDK_NGX_GBUFFER_SHADINGMODELID]); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_MaterialId, pInDlssEvalParams->GBufferSurface.pInAttrib[NVSDK_NGX_GBUFFER_MATERIALID]); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Atrrib_8, pInDlssEvalParams->GBufferSurface.pInAttrib[8]); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Atrrib_9, pInDlssEvalParams->GBufferSurface.pInAttrib[9]); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Atrrib_10, pInDlssEvalParams->GBufferSurface.pInAttrib[10]); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Atrrib_11, pInDlssEvalParams->GBufferSurface.pInAttrib[11]); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Atrrib_12, pInDlssEvalParams->GBufferSurface.pInAttrib[12]); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Atrrib_13, pInDlssEvalParams->GBufferSurface.pInAttrib[13]); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Atrrib_14, pInDlssEvalParams->GBufferSurface.pInAttrib[14]); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_GBuffer_Atrrib_15, pInDlssEvalParams->GBufferSurface.pInAttrib[15]); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_TonemapperType, pInDlssEvalParams->InToneMapperType); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_MotionVectors3D, pInDlssEvalParams->pInMotionVectors3D); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_IsParticleMask, pInDlssEvalParams->pInIsParticleMask); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_AnimatedTextureMask, pInDlssEvalParams->pInAnimatedTextureMask); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_DepthHighRes, pInDlssEvalParams->pInDepthHighRes); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_Position_ViewSpace, pInDlssEvalParams->pInPositionViewSpace); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_FrameTimeDeltaInMsec, pInDlssEvalParams->InFrameTimeDeltaInMsec); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_RayTracingHitDistance, pInDlssEvalParams->pInRayTracingHitDistance); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_MotionVectorsReflection, pInDlssEvalParams->pInMotionVectorsReflections); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Color_Subrect_Base_X, pInDlssEvalParams->InColorSubrectBase.X); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Color_Subrect_Base_Y, pInDlssEvalParams->InColorSubrectBase.Y); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Depth_Subrect_Base_X, pInDlssEvalParams->InDepthSubrectBase.X); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Depth_Subrect_Base_Y, pInDlssEvalParams->InDepthSubrectBase.Y); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_MV_SubrectBase_X, pInDlssEvalParams->InMVSubrectBase.X); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_MV_SubrectBase_Y, pInDlssEvalParams->InMVSubrectBase.Y); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Translucency_SubrectBase_X, pInDlssEvalParams->InTranslucencySubrectBase.X); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Translucency_SubrectBase_Y, pInDlssEvalParams->InTranslucencySubrectBase.Y); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_SubrectBase_X, pInDlssEvalParams->InBiasCurrentColorSubrectBase.X); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_SubrectBase_Y, pInDlssEvalParams->InBiasCurrentColorSubrectBase.Y); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Output_Subrect_Base_X, pInDlssEvalParams->InOutputSubrectBase.X); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Output_Subrect_Base_Y, pInDlssEvalParams->InOutputSubrectBase.Y); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Render_Subrect_Dimensions_Width , pInDlssEvalParams->InRenderSubrectDimensions.Width); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Render_Subrect_Dimensions_Height, pInDlssEvalParams->InRenderSubrectDimensions.Height); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_DLSS_Pre_Exposure, pInDlssEvalParams->InPreExposure == 0.0f ? 1.0f : pInDlssEvalParams->InPreExposure); + NVSDK_NGX_Parameter_SetI(pInParams, NVSDK_NGX_Parameter_DLSS_Indicator_Invert_X_Axis, pInDlssEvalParams->InIndicatorInvertXAxis); + NVSDK_NGX_Parameter_SetI(pInParams, NVSDK_NGX_Parameter_DLSS_Indicator_Invert_Y_Axis, pInDlssEvalParams->InIndicatorInvertYAxis); + + return NVSDK_NGX_D3D12_EvaluateFeature_C(pInCmdList, pInHandle, pInParams, NULL); +} + + +static inline NVSDK_NGX_Result NGX_D3D12_CREATE_DLISP_EXT( + ID3D12GraphicsCommandList *InCmdList, + unsigned int InCreationNodeMask, + unsigned int InVisibilityNodeMask, + NVSDK_NGX_Handle **ppOutHandle, + NVSDK_NGX_Parameter *pInParams, + NVSDK_NGX_Feature_Create_Params *pDlispCreateParams) +{ + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_CreationNodeMask, InCreationNodeMask); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_VisibilityNodeMask, InVisibilityNodeMask); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Width, pDlispCreateParams->InWidth); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Height, pDlispCreateParams->InHeight); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_OutWidth, pDlispCreateParams->InTargetWidth); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_OutHeight, pDlispCreateParams->InTargetHeight); + NVSDK_NGX_Parameter_SetI(pInParams, NVSDK_NGX_Parameter_PerfQualityValue, pDlispCreateParams->InPerfQualityValue); + + return NVSDK_NGX_D3D12_CreateFeature(InCmdList, NVSDK_NGX_Feature_ImageSignalProcessing, pInParams, ppOutHandle); +} + +static inline NVSDK_NGX_Result NGX_D3D12_EVALUATE_DLISP_EXT( + ID3D12GraphicsCommandList *pInCmdList, + NVSDK_NGX_Handle *pInHandle, + NVSDK_NGX_Parameter *pInParams, + NVSDK_NGX_D3D12_DLISP_Eval_Params *pDlispEvalParams) +{ + if (pDlispEvalParams->Feature.InSharpness < 0.0f || pDlispEvalParams->Feature.InSharpness > 1.0f || pDlispEvalParams->InDenoise < 0.0f || pDlispEvalParams->InDenoise > 1.0f) + { + return NVSDK_NGX_Result_FAIL_InvalidParameter; + } + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_Color, pDlispEvalParams->Feature.pInColor); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_Output, pDlispEvalParams->Feature.pInOutput); + // Both sharpness and denoise in range [0.0f,1.0f] + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_Sharpness, pDlispEvalParams->Feature.InSharpness); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_Denoise, pDlispEvalParams->InDenoise); + // If input is atlas - use RECT to upscale only the required area + if (pDlispEvalParams->InRectW) + { + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Rect_X, pDlispEvalParams->InRectX); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Rect_Y, pDlispEvalParams->InRectY); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Rect_W, pDlispEvalParams->InRectW); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Rect_H, pDlispEvalParams->InRectH); + } + return NVSDK_NGX_D3D12_EvaluateFeature_C(pInCmdList, pInHandle, pInParams, NULL); +} + + +static inline NVSDK_NGX_Result NGX_D3D12_CREATE_DLRESOLVE_EXT( + ID3D12GraphicsCommandList *pInCmdList, + unsigned int InCreationNodeMask, + unsigned int InVisibilityNodeMask, + NVSDK_NGX_Handle **ppOutHandle, + NVSDK_NGX_Parameter *pInParams, + NVSDK_NGX_Feature_Create_Params *pDlresolveCreateParams) +{ + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_CreationNodeMask, InCreationNodeMask); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_VisibilityNodeMask, InVisibilityNodeMask); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Width, pDlresolveCreateParams->InWidth); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Height, pDlresolveCreateParams->InHeight); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_OutWidth, pDlresolveCreateParams->InTargetWidth); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_OutHeight, pDlresolveCreateParams->InTargetHeight); + + return NVSDK_NGX_D3D12_CreateFeature(pInCmdList, NVSDK_NGX_Feature_DeepResolve, pInParams, ppOutHandle); +} + +static inline NVSDK_NGX_Result NGX_D3D12_EVALUATE_DLRESOLVE_EXT( + ID3D12GraphicsCommandList *pInCmdList, + NVSDK_NGX_Handle *pInHandle, + NVSDK_NGX_Parameter *pInParams, + NVSDK_NGX_D3D12_Feature_Eval_Params *pDlresolveEvalParams) +{ + // This call to NVSDK_NGX_Parameter_SetXXX() is equivalent to the Params->Set below functionally + // but to work around the lack of virtual functions and polymorphism in a C only project + // we introduced this new way to set params. + // The test should enforce that both paths work. + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_Color, pDlresolveEvalParams->pInColor); + NVSDK_NGX_Parameter_SetD3d12Resource(pInParams, NVSDK_NGX_Parameter_Output, pDlresolveEvalParams->pInOutput); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_Sharpness, pDlresolveEvalParams->InSharpness); + + return NVSDK_NGX_D3D12_EvaluateFeature_C(pInCmdList, pInHandle, pInParams, NULL); +} + +#endif diff --git a/plugins/DLSS/Source/ThirdParty/NGX/Include/nvsdk_ngx_helpers_vk.h b/plugins/DLSS/Source/ThirdParty/NGX/Include/nvsdk_ngx_helpers_vk.h new file mode 100644 index 00000000..1fd46580 --- /dev/null +++ b/plugins/DLSS/Source/ThirdParty/NGX/Include/nvsdk_ngx_helpers_vk.h @@ -0,0 +1,318 @@ +/* +* Copyright (c) 2018 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#ifndef NVSDK_NGX_HELPERS_VK_H +#define NVSDK_NGX_HELPERS_VK_H +#pragma once + +#include "nvsdk_ngx_vk.h" + +#define NVSDK_NGX_ENSURE_VK_IMAGEVIEW(InResource) if ((InResource) && (InResource)->Type != NVSDK_NGX_RESOURCE_VK_TYPE_VK_IMAGEVIEW) { return NVSDK_NGX_Result_FAIL_InvalidParameter; } + +static inline NVSDK_NGX_Resource_VK NVSDK_NGX_Create_ImageView_Resource_VK(VkImageView imageView, VkImage image, VkImageSubresourceRange subresourceRange, VkFormat format, unsigned int width, unsigned int height, bool readWrite) +{ + NVSDK_NGX_Resource_VK resourceVK = {0}; + resourceVK.Type = NVSDK_NGX_RESOURCE_VK_TYPE_VK_IMAGEVIEW; + resourceVK.Resource.ImageViewInfo.ImageView = imageView; + resourceVK.Resource.ImageViewInfo.Image = image; + resourceVK.Resource.ImageViewInfo.SubresourceRange = subresourceRange; + resourceVK.Resource.ImageViewInfo.Height = height; + resourceVK.Resource.ImageViewInfo.Width = width; + resourceVK.Resource.ImageViewInfo.Format = format; + resourceVK.ReadWrite = readWrite; + return resourceVK; +} + +static inline NVSDK_NGX_Resource_VK NVSDK_NGX_Create_Buffer_Resource_VK(VkBuffer buffer, unsigned int sizeInBytes, bool readWrite) +{ + NVSDK_NGX_Resource_VK resourceVK = {0}; + resourceVK.Type = NVSDK_NGX_RESOURCE_VK_TYPE_VK_BUFFER; + resourceVK.Resource.BufferInfo.Buffer = buffer; + resourceVK.Resource.BufferInfo.SizeInBytes = sizeInBytes; + resourceVK.ReadWrite = readWrite; + return resourceVK; +} + +typedef struct NVSDK_NGX_VK_Feature_Eval_Params +{ + NVSDK_NGX_Resource_VK *pInColor; + NVSDK_NGX_Resource_VK *pInOutput; + /*** OPTIONAL for DLSS ***/ + float InSharpness; +} NVSDK_NGX_VK_Feature_Eval_Params; + +typedef struct NVSDK_NGX_VK_GBuffer +{ + NVSDK_NGX_Resource_VK *pInAttrib[NVSDK_NGX_GBUFFERTYPE_NUM]; +} NVSDK_NGX_VK_GBuffer; + +typedef struct NVSDK_NGX_Coordinates_VK +{ + unsigned int X; + unsigned int Y; +} NVSDK_NGX_Coordinates_VK; + +typedef struct NVSDK_NGX_VK_DLSS_Eval_Params +{ + NVSDK_NGX_VK_Feature_Eval_Params Feature; + NVSDK_NGX_Resource_VK * pInDepth; + NVSDK_NGX_Resource_VK * pInMotionVectors; + float InJitterOffsetX; /* Jitter offset must be in input/render pixel space */ + float InJitterOffsetY; + NVSDK_NGX_Dimensions InRenderSubrectDimensions; + /*** OPTIONAL - leave to 0/0.0f if unused ***/ + int InReset; /* Set to 1 when scene changes completely (new level etc) */ + float InMVScaleX; /* If MVs need custom scaling to convert to pixel space */ + float InMVScaleY; + NVSDK_NGX_Resource_VK * pInTransparencyMask; /* Unused/Reserved for future use */ + NVSDK_NGX_Resource_VK * pInExposureTexture; + NVSDK_NGX_Resource_VK * pInBiasCurrentColorMask; + NVSDK_NGX_Coordinates InColorSubrectBase; + NVSDK_NGX_Coordinates InDepthSubrectBase; + NVSDK_NGX_Coordinates InMVSubrectBase; + NVSDK_NGX_Coordinates InTranslucencySubrectBase; + NVSDK_NGX_Coordinates InBiasCurrentColorSubrectBase; + NVSDK_NGX_Coordinates InOutputSubrectBase; + float InPreExposure; + int InIndicatorInvertXAxis; + int InIndicatorInvertYAxis; + /*** OPTIONAL - only for research purposes ***/ + NVSDK_NGX_VK_GBuffer GBufferSurface; + NVSDK_NGX_ToneMapperType InToneMapperType; + NVSDK_NGX_Resource_VK * pInMotionVectors3D; + NVSDK_NGX_Resource_VK * pInIsParticleMask; /* to identify which pixels contains particles, essentially that are not drawn as part of base pass */ + NVSDK_NGX_Resource_VK * pInAnimatedTextureMask; /* a binary mask covering pixels occupied by animated textures */ + NVSDK_NGX_Resource_VK * pInDepthHighRes; + NVSDK_NGX_Resource_VK * pInPositionViewSpace; + float InFrameTimeDeltaInMsec; /* helps in determining the amount to denoise or anti-alias based on the speed of the object from motion vector magnitudes and fps as determined by this delta */ + NVSDK_NGX_Resource_VK * pInRayTracingHitDistance; /* for each effect - approximation to the amount of noise in a ray-traced color */ + NVSDK_NGX_Resource_VK * pInMotionVectorsReflections; /* motion vectors of reflected objects like for mirrored surfaces */ +} NVSDK_NGX_VK_DLSS_Eval_Params; + +typedef struct NVSDK_NGX_VK_DLISP_Eval_Params +{ + NVSDK_NGX_VK_Feature_Eval_Params Feature; + /*** OPTIONAL - leave to 0/0.0f if unused ***/ + unsigned int InRectX; + unsigned int InRectY; + unsigned int InRectW; + unsigned int InRectH; + float InDenoise; +} NVSDK_NGX_VK_DLISP_Eval_Params; + +static inline NVSDK_NGX_Result NGX_VULKAN_CREATE_DLSS_EXT1( + VkDevice InDevice, + VkCommandBuffer InCmdList, + unsigned int InCreationNodeMask, + unsigned int InVisibilityNodeMask, + NVSDK_NGX_Handle **ppOutHandle, + NVSDK_NGX_Parameter *pInParams, + NVSDK_NGX_DLSS_Create_Params *pInDlssCreateParams) +{ + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_CreationNodeMask, InCreationNodeMask); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_VisibilityNodeMask, InVisibilityNodeMask); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Width, pInDlssCreateParams->Feature.InWidth); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Height, pInDlssCreateParams->Feature.InHeight); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_OutWidth, pInDlssCreateParams->Feature.InTargetWidth); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_OutHeight, pInDlssCreateParams->Feature.InTargetHeight); + NVSDK_NGX_Parameter_SetI(pInParams, NVSDK_NGX_Parameter_PerfQualityValue, pInDlssCreateParams->Feature.InPerfQualityValue); + NVSDK_NGX_Parameter_SetI(pInParams, NVSDK_NGX_Parameter_DLSS_Feature_Create_Flags, pInDlssCreateParams->InFeatureCreateFlags); + NVSDK_NGX_Parameter_SetI(pInParams, NVSDK_NGX_Parameter_DLSS_Enable_Output_Subrects, pInDlssCreateParams->InEnableOutputSubrects ? 1 : 0); + + if (InDevice) return NVSDK_NGX_VULKAN_CreateFeature1(InDevice, InCmdList, NVSDK_NGX_Feature_SuperSampling, pInParams, ppOutHandle); + else return NVSDK_NGX_VULKAN_CreateFeature(InCmdList, NVSDK_NGX_Feature_SuperSampling, pInParams, ppOutHandle); +} + +static inline NVSDK_NGX_Result NGX_VULKAN_CREATE_DLSS_EXT( + VkCommandBuffer InCmdList, + unsigned int InCreationNodeMask, + unsigned int InVisibilityNodeMask, + NVSDK_NGX_Handle **ppOutHandle, + NVSDK_NGX_Parameter *pInParams, + NVSDK_NGX_DLSS_Create_Params *pInDlssCreateParams) +{ + return NGX_VULKAN_CREATE_DLSS_EXT1(NULL, InCmdList, InCreationNodeMask, InVisibilityNodeMask, ppOutHandle, pInParams, pInDlssCreateParams); +} + +static inline NVSDK_NGX_Result NGX_VULKAN_EVALUATE_DLSS_EXT( + VkCommandBuffer InCmdList, + NVSDK_NGX_Handle *pInHandle, + NVSDK_NGX_Parameter *pInParams, + NVSDK_NGX_VK_DLSS_Eval_Params *pInDlssEvalParams) +{ + NVSDK_NGX_ENSURE_VK_IMAGEVIEW(pInDlssEvalParams->Feature.pInColor); + NVSDK_NGX_ENSURE_VK_IMAGEVIEW(pInDlssEvalParams->pInMotionVectors); + NVSDK_NGX_ENSURE_VK_IMAGEVIEW(pInDlssEvalParams->Feature.pInOutput); + NVSDK_NGX_ENSURE_VK_IMAGEVIEW(pInDlssEvalParams->pInDepth); + NVSDK_NGX_ENSURE_VK_IMAGEVIEW(pInDlssEvalParams->pInTransparencyMask); + NVSDK_NGX_ENSURE_VK_IMAGEVIEW(pInDlssEvalParams->pInExposureTexture); + NVSDK_NGX_ENSURE_VK_IMAGEVIEW(pInDlssEvalParams->pInBiasCurrentColorMask); + for (size_t i = 0; i <= 15; i++) + { + NVSDK_NGX_ENSURE_VK_IMAGEVIEW(pInDlssEvalParams->GBufferSurface.pInAttrib[i]); + } + NVSDK_NGX_ENSURE_VK_IMAGEVIEW(pInDlssEvalParams->pInMotionVectors3D); + NVSDK_NGX_ENSURE_VK_IMAGEVIEW(pInDlssEvalParams->pInIsParticleMask); + NVSDK_NGX_ENSURE_VK_IMAGEVIEW(pInDlssEvalParams->pInAnimatedTextureMask); + NVSDK_NGX_ENSURE_VK_IMAGEVIEW(pInDlssEvalParams->pInDepthHighRes); + NVSDK_NGX_ENSURE_VK_IMAGEVIEW(pInDlssEvalParams->pInPositionViewSpace); + NVSDK_NGX_ENSURE_VK_IMAGEVIEW(pInDlssEvalParams->pInRayTracingHitDistance); + NVSDK_NGX_ENSURE_VK_IMAGEVIEW(pInDlssEvalParams->pInMotionVectorsReflections); + + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_Color, pInDlssEvalParams->Feature.pInColor); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_Output, pInDlssEvalParams->Feature.pInOutput); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_Depth, pInDlssEvalParams->pInDepth); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_MotionVectors, pInDlssEvalParams->pInMotionVectors); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_Jitter_Offset_X, pInDlssEvalParams->InJitterOffsetX); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_Jitter_Offset_Y, pInDlssEvalParams->InJitterOffsetY); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_Sharpness, pInDlssEvalParams->Feature.InSharpness); + NVSDK_NGX_Parameter_SetI(pInParams, NVSDK_NGX_Parameter_Reset, pInDlssEvalParams->InReset); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_MV_Scale_X, pInDlssEvalParams->InMVScaleX == 0.0f ? 1.0f : pInDlssEvalParams->InMVScaleX); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_MV_Scale_Y, pInDlssEvalParams->InMVScaleY == 0.0f ? 1.0f : pInDlssEvalParams->InMVScaleY); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_TransparencyMask, pInDlssEvalParams->pInTransparencyMask); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_ExposureTexture, pInDlssEvalParams->pInExposureTexture); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_Mask, pInDlssEvalParams->pInBiasCurrentColorMask); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_GBuffer_Albedo, pInDlssEvalParams->GBufferSurface.pInAttrib[NVSDK_NGX_GBUFFER_ALBEDO]); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_GBuffer_Roughness, pInDlssEvalParams->GBufferSurface.pInAttrib[NVSDK_NGX_GBUFFER_ROUGHNESS]); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_GBuffer_Metallic, pInDlssEvalParams->GBufferSurface.pInAttrib[NVSDK_NGX_GBUFFER_METALLIC]); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_GBuffer_Specular, pInDlssEvalParams->GBufferSurface.pInAttrib[NVSDK_NGX_GBUFFER_SPECULAR]); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_GBuffer_Subsurface, pInDlssEvalParams->GBufferSurface.pInAttrib[NVSDK_NGX_GBUFFER_SUBSURFACE]); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_GBuffer_Normals, pInDlssEvalParams->GBufferSurface.pInAttrib[NVSDK_NGX_GBUFFER_NORMALS]); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_GBuffer_ShadingModelId, pInDlssEvalParams->GBufferSurface.pInAttrib[NVSDK_NGX_GBUFFER_SHADINGMODELID]); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_GBuffer_MaterialId, pInDlssEvalParams->GBufferSurface.pInAttrib[NVSDK_NGX_GBUFFER_MATERIALID]); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_GBuffer_Atrrib_8, pInDlssEvalParams->GBufferSurface.pInAttrib[8]); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_GBuffer_Atrrib_9, pInDlssEvalParams->GBufferSurface.pInAttrib[9]); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_GBuffer_Atrrib_10, pInDlssEvalParams->GBufferSurface.pInAttrib[10]); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_GBuffer_Atrrib_11, pInDlssEvalParams->GBufferSurface.pInAttrib[11]); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_GBuffer_Atrrib_12, pInDlssEvalParams->GBufferSurface.pInAttrib[12]); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_GBuffer_Atrrib_13, pInDlssEvalParams->GBufferSurface.pInAttrib[13]); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_GBuffer_Atrrib_14, pInDlssEvalParams->GBufferSurface.pInAttrib[14]); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_GBuffer_Atrrib_15, pInDlssEvalParams->GBufferSurface.pInAttrib[15]); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_TonemapperType, pInDlssEvalParams->InToneMapperType); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_MotionVectors3D, pInDlssEvalParams->pInMotionVectors3D); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_IsParticleMask, pInDlssEvalParams->pInIsParticleMask); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_AnimatedTextureMask, pInDlssEvalParams->pInAnimatedTextureMask); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_DepthHighRes, pInDlssEvalParams->pInDepthHighRes); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_Position_ViewSpace, pInDlssEvalParams->pInPositionViewSpace); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_FrameTimeDeltaInMsec, pInDlssEvalParams->InFrameTimeDeltaInMsec); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_RayTracingHitDistance, pInDlssEvalParams->pInRayTracingHitDistance); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_MotionVectorsReflection, pInDlssEvalParams->pInMotionVectorsReflections); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Color_Subrect_Base_X, pInDlssEvalParams->InColorSubrectBase.X); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Color_Subrect_Base_Y, pInDlssEvalParams->InColorSubrectBase.Y); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Depth_Subrect_Base_X, pInDlssEvalParams->InDepthSubrectBase.X); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Depth_Subrect_Base_Y, pInDlssEvalParams->InDepthSubrectBase.Y); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_MV_SubrectBase_X, pInDlssEvalParams->InMVSubrectBase.X); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_MV_SubrectBase_Y, pInDlssEvalParams->InMVSubrectBase.Y); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Translucency_SubrectBase_X, pInDlssEvalParams->InTranslucencySubrectBase.X); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Translucency_SubrectBase_Y, pInDlssEvalParams->InTranslucencySubrectBase.Y); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_SubrectBase_X, pInDlssEvalParams->InBiasCurrentColorSubrectBase.X); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_SubrectBase_Y, pInDlssEvalParams->InBiasCurrentColorSubrectBase.Y); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Output_Subrect_Base_X, pInDlssEvalParams->InOutputSubrectBase.X); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Output_Subrect_Base_Y, pInDlssEvalParams->InOutputSubrectBase.Y); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Render_Subrect_Dimensions_Width , pInDlssEvalParams->InRenderSubrectDimensions.Width); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_DLSS_Render_Subrect_Dimensions_Height, pInDlssEvalParams->InRenderSubrectDimensions.Height); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_DLSS_Pre_Exposure, pInDlssEvalParams->InPreExposure == 0.0f ? 1.0f : pInDlssEvalParams->InPreExposure); + NVSDK_NGX_Parameter_SetI(pInParams, NVSDK_NGX_Parameter_DLSS_Indicator_Invert_X_Axis, pInDlssEvalParams->InIndicatorInvertXAxis); + NVSDK_NGX_Parameter_SetI(pInParams, NVSDK_NGX_Parameter_DLSS_Indicator_Invert_Y_Axis, pInDlssEvalParams->InIndicatorInvertYAxis); + + return NVSDK_NGX_VULKAN_EvaluateFeature_C(InCmdList, pInHandle, pInParams, NULL); +} + + +static inline NVSDK_NGX_Result NGX_VULKAN_CREATE_DLISP_EXT( + VkCommandBuffer InCmdList, + unsigned int InCreationNodeMask, + unsigned int InVisibilityNodeMask, + NVSDK_NGX_Handle **ppOutHandle, + NVSDK_NGX_Parameter *pInParams, + NVSDK_NGX_Feature_Create_Params *pInDlispCreateParams) +{ + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_CreationNodeMask, InCreationNodeMask); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_VisibilityNodeMask, InVisibilityNodeMask); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Width, pInDlispCreateParams->InWidth); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Height, pInDlispCreateParams->InHeight); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_OutWidth, pInDlispCreateParams->InTargetWidth); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_OutHeight, pInDlispCreateParams->InTargetHeight); + NVSDK_NGX_Parameter_SetI(pInParams, NVSDK_NGX_Parameter_PerfQualityValue, pInDlispCreateParams->InPerfQualityValue); + + return NVSDK_NGX_VULKAN_CreateFeature(InCmdList, NVSDK_NGX_Feature_ImageSignalProcessing, pInParams, ppOutHandle); +} + +static inline NVSDK_NGX_Result NGX_VULKAN_EVALUATE_DLISP_EXT( + VkCommandBuffer InCmdList, + NVSDK_NGX_Handle *InHandle, + NVSDK_NGX_Parameter *pInParams, + NVSDK_NGX_VK_DLISP_Eval_Params *pInDlispEvalParams) +{ + NVSDK_NGX_ENSURE_VK_IMAGEVIEW(pInDlispEvalParams->Feature.pInColor); + NVSDK_NGX_ENSURE_VK_IMAGEVIEW(pInDlispEvalParams->Feature.pInOutput); + + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_Color, pInDlispEvalParams->Feature.pInColor); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_Output, pInDlispEvalParams->Feature.pInOutput); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_Sharpness, pInDlispEvalParams->Feature.InSharpness); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_Denoise, pInDlispEvalParams->InDenoise); + // If input is atlas - use RECT to upscale only the required area + if (pInDlispEvalParams->InRectW) + { + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Rect_X, pInDlispEvalParams->InRectX); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Rect_Y, pInDlispEvalParams->InRectY); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Rect_W, pInDlispEvalParams->InRectW); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Rect_H, pInDlispEvalParams->InRectH); + } + + return NVSDK_NGX_VULKAN_EvaluateFeature_C(InCmdList, InHandle, pInParams, NULL); +} + + +static inline NVSDK_NGX_Result NGX_VULKAN_CREATE_DLRESOLVE_EXT( + VkCommandBuffer InCmdList, + unsigned int InCreationNodeMask, + unsigned int InVisibilityNodeMask, + NVSDK_NGX_Handle **ppOutHandle, + NVSDK_NGX_Parameter *pInParams, + NVSDK_NGX_Feature_Create_Params *pInDlresolveCreateParams) +{ + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_CreationNodeMask, InCreationNodeMask); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_VisibilityNodeMask, InVisibilityNodeMask); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Width, pInDlresolveCreateParams->InWidth); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_Height, pInDlresolveCreateParams->InHeight); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_OutWidth, pInDlresolveCreateParams->InTargetWidth); + NVSDK_NGX_Parameter_SetUI(pInParams, NVSDK_NGX_Parameter_OutHeight, pInDlresolveCreateParams->InTargetHeight); + + return NVSDK_NGX_VULKAN_CreateFeature(InCmdList, NVSDK_NGX_Feature_DeepResolve, pInParams, ppOutHandle); +} + +static inline NVSDK_NGX_Result NGX_VULKAN_EVALUATE_DLRESOLVE_EXT( + VkCommandBuffer InCmdList, + NVSDK_NGX_Handle *pInHandle, + NVSDK_NGX_Parameter *pInParams, + NVSDK_NGX_VK_Feature_Eval_Params *pInDlresolveEvalParams) +{ + NVSDK_NGX_ENSURE_VK_IMAGEVIEW(pInDlresolveEvalParams->pInColor); + NVSDK_NGX_ENSURE_VK_IMAGEVIEW(pInDlresolveEvalParams->pInOutput); + + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_Color, pInDlresolveEvalParams->pInColor); + NVSDK_NGX_Parameter_SetVoidPointer(pInParams, NVSDK_NGX_Parameter_Output, pInDlresolveEvalParams->pInOutput); + NVSDK_NGX_Parameter_SetF(pInParams, NVSDK_NGX_Parameter_Sharpness, pInDlresolveEvalParams->InSharpness); + + return NVSDK_NGX_VULKAN_EvaluateFeature_C(InCmdList, pInHandle, pInParams, NULL); +} + +#endif // NVSDK_NGX_HELPERS_VK_H diff --git a/plugins/DLSS/Source/ThirdParty/NGX/Include/nvsdk_ngx_params.h b/plugins/DLSS/Source/ThirdParty/NGX/Include/nvsdk_ngx_params.h new file mode 100644 index 00000000..8e0696e7 --- /dev/null +++ b/plugins/DLSS/Source/ThirdParty/NGX/Include/nvsdk_ngx_params.h @@ -0,0 +1,117 @@ +/* +* Copyright (c) 2018 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + + +#ifndef NVSDK_NGX_PARAMS_H +#define NVSDK_NGX_PARAMS_H + +#include "nvsdk_ngx_defs.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +typedef struct ID3D11Resource ID3D11Resource; +typedef struct ID3D12Resource ID3D12Resource; + +typedef struct NVSDK_NGX_Feature_Create_Params +{ + unsigned int InWidth; + unsigned int InHeight; + unsigned int InTargetWidth; + unsigned int InTargetHeight; + /*** OPTIONAL ***/ + NVSDK_NGX_PerfQuality_Value InPerfQualityValue; +} NVSDK_NGX_Feature_Create_Params; + +typedef struct NVSDK_NGX_DLSS_Create_Params +{ + NVSDK_NGX_Feature_Create_Params Feature; + /*** OPTIONAL ***/ + int InFeatureCreateFlags; + bool InEnableOutputSubrects; +} NVSDK_NGX_DLSS_Create_Params; + +#ifdef __cplusplus +typedef struct NVSDK_NGX_Parameter +{ + virtual void Set(const char * InName, unsigned long long InValue) = 0; + virtual void Set(const char * InName, float InValue) = 0; + virtual void Set(const char * InName, double InValue) = 0; + virtual void Set(const char * InName, unsigned int InValue) = 0; + virtual void Set(const char * InName, int InValue) = 0; + virtual void Set(const char * InName, ID3D11Resource *InValue) = 0; + virtual void Set(const char * InName, ID3D12Resource *InValue) = 0; + virtual void Set(const char * InName, void *InValue) = 0; + + virtual NVSDK_NGX_Result Get(const char * InName, unsigned long long *OutValue) const = 0; + virtual NVSDK_NGX_Result Get(const char * InName, float *OutValue) const = 0; + virtual NVSDK_NGX_Result Get(const char * InName, double *OutValue) const = 0; + virtual NVSDK_NGX_Result Get(const char * InName, unsigned int *OutValue) const = 0; + virtual NVSDK_NGX_Result Get(const char * InName, int *OutValue) const = 0; + virtual NVSDK_NGX_Result Get(const char * InName, ID3D11Resource **OutValue) const = 0; + virtual NVSDK_NGX_Result Get(const char * InName, ID3D12Resource **OutValue) const = 0; + virtual NVSDK_NGX_Result Get(const char * InName, void **OutValue) const = 0; + + virtual void Reset() = 0; +} NVSDK_NGX_Parameter; +#else +typedef struct NVSDK_NGX_Parameter NVSDK_NGX_Parameter; +#endif // _cplusplus + +typedef void (NVSDK_CONV *PFN_NVSDK_NGX_Parameter_SetULL)(NVSDK_NGX_Parameter *InParameter, const char * InName, unsigned long long InValue); +NVSDK_NGX_API void NVSDK_CONV NVSDK_NGX_Parameter_SetULL(NVSDK_NGX_Parameter *InParameter, const char * InName, unsigned long long InValue); +typedef void (NVSDK_CONV *PFN_NVSDK_NGX_Parameter_SetF)(NVSDK_NGX_Parameter *InParameter, const char * InName, float InValue); +NVSDK_NGX_API void NVSDK_CONV NVSDK_NGX_Parameter_SetF(NVSDK_NGX_Parameter *InParameter, const char * InName, float InValue); +typedef void (NVSDK_CONV *PFN_NVSDK_NGX_Parameter_SetD)(NVSDK_NGX_Parameter *InParameter, const char * InName, double InValue); +NVSDK_NGX_API void NVSDK_CONV NVSDK_NGX_Parameter_SetD(NVSDK_NGX_Parameter *InParameter, const char * InName, double InValue); +typedef void (NVSDK_CONV *PFN_NVSDK_NGX_Parameter_SetUI)(NVSDK_NGX_Parameter *InParameter, const char * InName, unsigned int InValue); +NVSDK_NGX_API void NVSDK_CONV NVSDK_NGX_Parameter_SetUI(NVSDK_NGX_Parameter *InParameter, const char * InName, unsigned int InValue); +typedef void (NVSDK_CONV *PFN_NVSDK_NGX_Parameter_SetI)(NVSDK_NGX_Parameter *InParameter, const char * InName, int InValue); +NVSDK_NGX_API void NVSDK_CONV NVSDK_NGX_Parameter_SetI(NVSDK_NGX_Parameter *InParameter, const char * InName, int InValue); +typedef void (NVSDK_CONV *PFN_NVSDK_NGX_Parameter_SetD3d11Resource)(NVSDK_NGX_Parameter *InParameter, const char * InName, ID3D11Resource *InValue); +NVSDK_NGX_API void NVSDK_CONV NVSDK_NGX_Parameter_SetD3d11Resource(NVSDK_NGX_Parameter *InParameter, const char * InName, ID3D11Resource *InValue); +typedef void (NVSDK_CONV *PFN_NVSDK_NGX_Parameter_SetD3d12Resource)(NVSDK_NGX_Parameter *InParameter, const char * InName, ID3D12Resource *InValue); +NVSDK_NGX_API void NVSDK_CONV NVSDK_NGX_Parameter_SetD3d12Resource(NVSDK_NGX_Parameter *InParameter, const char * InName, ID3D12Resource *InValue); +typedef void (NVSDK_CONV *PFN_NVSDK_NGX_Parameter_SetVoidPointer)(NVSDK_NGX_Parameter *InParameter, const char * InName, void *InValue); +NVSDK_NGX_API void NVSDK_CONV NVSDK_NGX_Parameter_SetVoidPointer(NVSDK_NGX_Parameter *InParameter, const char * InName, void *InValue); +typedef NVSDK_NGX_Result (NVSDK_CONV *PFN_NVSDK_NGX_Parameter_GetULL)(NVSDK_NGX_Parameter *InParameter, const char * InName, unsigned long long *OutValue); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_Parameter_GetULL(NVSDK_NGX_Parameter *InParameter, const char * InName, unsigned long long *OutValue); +typedef NVSDK_NGX_Result (NVSDK_CONV *PFN_NVSDK_NGX_Parameter_GetF)(NVSDK_NGX_Parameter *InParameter, const char * InName, float *OutValue); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_Parameter_GetF(NVSDK_NGX_Parameter *InParameter, const char * InName, float *OutValue); +typedef NVSDK_NGX_Result (NVSDK_CONV *PFN_NVSDK_NGX_Parameter_GetD)(NVSDK_NGX_Parameter *InParameter, const char * InName, double *OutValue); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_Parameter_GetD(NVSDK_NGX_Parameter *InParameter, const char * InName, double *OutValue); +typedef NVSDK_NGX_Result (NVSDK_CONV *PFN_NVSDK_NGX_Parameter_GetUI)(NVSDK_NGX_Parameter *InParameter, const char * InName, unsigned int *OutValue); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_Parameter_GetUI(NVSDK_NGX_Parameter *InParameter, const char * InName, unsigned int *OutValue); +typedef NVSDK_NGX_Result (NVSDK_CONV *PFN_NVSDK_NGX_Parameter_GetI)(NVSDK_NGX_Parameter *InParameter, const char * InName, int *OutValue); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_Parameter_GetI(NVSDK_NGX_Parameter *InParameter, const char * InName, int *OutValue); +typedef NVSDK_NGX_Result (NVSDK_CONV *PFN_NVSDK_NGX_Parameter_GetD3d11Resource)(NVSDK_NGX_Parameter *InParameter, const char * InName, ID3D11Resource **OutValue); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_Parameter_GetD3d11Resource(NVSDK_NGX_Parameter *InParameter, const char * InName, ID3D11Resource **OutValue); +typedef NVSDK_NGX_Result (NVSDK_CONV *PFN_NVSDK_NGX_Parameter_GetD3d12Resource)(NVSDK_NGX_Parameter *InParameter, const char * InName, ID3D12Resource **OutValue); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_Parameter_GetD3d12Resource(NVSDK_NGX_Parameter *InParameter, const char * InName, ID3D12Resource **OutValue); +typedef NVSDK_NGX_Result (NVSDK_CONV *PFN_NVSDK_NGX_Parameter_GetVoidPointer)(NVSDK_NGX_Parameter *InParameter, const char * InName, void **OutValue); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_Parameter_GetVoidPointer(NVSDK_NGX_Parameter *InParameter, const char * InName, void **OutValue); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // #define NVSDK_NGX_PARAMS_H diff --git a/plugins/DLSS/Source/ThirdParty/NGX/Include/nvsdk_ngx_vk.h b/plugins/DLSS/Source/ThirdParty/NGX/Include/nvsdk_ngx_vk.h new file mode 100644 index 00000000..0c6b69b9 --- /dev/null +++ b/plugins/DLSS/Source/ThirdParty/NGX/Include/nvsdk_ngx_vk.h @@ -0,0 +1,462 @@ +/* +* Copyright (c) 2018 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +/* +* HOW TO USE: +* +* IMPORTANT: Methods in this library are NOT thread safe. It is up to the +* client to ensure that thread safety is enforced as needed. +* +* 1) Call NVSDK_CONV NVSDK_NGX_D3D11/D3D12/CUDA_Init and pass your app Id +* and other parameters. This will initialize SDK or return an error code +* if SDK cannot run on target machine. Depending on error user might +* need to update drivers. Please note that application Id is provided +* by NVIDIA so if you do not have one please contact us. +* +* 2) Call NVSDK_NGX_D3D11/D3D12/CUDA_GetParameters to obtain pointer to +* interface used to pass parameters to SDK. Interface instance is +* allocated and released by SDK so there is no need to do any memory +* management on client side. +* +* 3) Set key parameters for the feature you want to use. For example, +* width and height are required for all features and they can be +* set like this: +* Params->Set(NVSDK_NGX_Parameter_Width,MY_WIDTH); +* Params->Set(NVSDK_NGX_Parameter_Height,MY_HEIGHT); +* +* You can also provide hints like NVSDK_NGX_Parameter_Hint_HDR to tell +* SDK that it should expect HDR color space is needed. Please refer to +* samples since different features need different parameters and hints. +* +* 4) Call NVSDK_NGX_D3D11/D3D12/CUDA_GetScratchBufferSize to obtain size of +* the scratch buffer needed by specific feature. This D3D or CUDA buffer +* should be allocated by client and passed as: +* Params->Set(NVSDK_NGX_Parameter_Scratch,MY_SCRATCH_POINTER) +* Params->Set(NVSDK_NGX_Parameter_Scratch_SizeInBytes,MY_SCRATCH_SIZE_IN_BYTES) +* NOTE: Returned size can be 0 if feature does not use any scratch buffer. +* It is OK to use bigger buffer or reuse buffers across features as long +* as minimum size requirement is met. +* +* 5) Call NVSDK_NGX_D3D11/D3D12/CUDA_CreateFeature to create feature you need. +* On success SDK will return a handle which must be used in any successive +* calls to SDK which require feature handle. SDK will use all parameters +* and hints provided by client to generate feature. If feature with the same +* parameters already exists and error code will be returned. +* +* 6) Call NVSDK_NGX_D3D11/D3D12/CUDA_EvaluateFeature to invoke execution of +* specific feature. Before feature can be evaluated input parameters must +* be specified (like for example color/albedo buffer, motion vectors etc) +* +* 6) Call NVSDK_NGX_D3D11/D3D12/CUDA_ReleaseFeature when feature is no longer +* needed. After this call feature handle becomes invalid and cannot be used. +* +* 7) Call NVSDK_NGX_D3D11/D3D12/CUDA_Shutdown when SDK is no longer needed to +* release all resources. + +* Contact: ngxsupport@nvidia.com +*/ + + +#ifndef NVSDK_NGX_VK_H +#define NVSDK_NGX_VK_H + +#include "nvsdk_ngx_defs.h" +#include "nvsdk_ngx_params.h" +#ifndef __cplusplus +#include +#include +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + +/////////////////////////////////////////////////////////////////////////////////////////////////// +// NVSDK_NGX_ImageViewInfo_VK [Vulkan only] +// Contains ImageView-specific metadata. +// ImageView: +// The VkImageView resource. +// +// Image: +// The VkImage associated to this VkImageView. +// +// SubresourceRange: +// The VkImageSubresourceRange associated to this VkImageView. +// +// Format: +// The format of the resource. +// +// Width: +// The width of the resource. +// +// Height: +// The height of the resource. +// +typedef struct NVSDK_NGX_ImageViewInfo_VK { + VkImageView ImageView; + VkImage Image; + VkImageSubresourceRange SubresourceRange; + VkFormat Format; + unsigned int Width; + unsigned int Height; +} NVSDK_NGX_ImageViewInfo_VK; + +/////////////////////////////////////////////////////////////////////////////////////////////////// +// NVSDK_NGX_BufferInfo_VK [Vulkan only] +// Contains Buffer-specific metadata. +// Buffer +// The VkBuffer resource. +// +// SizeInBytes: +// The size of the resource (in bytes). +// +typedef struct NVSDK_NGX_BufferInfo_VK { + VkBuffer Buffer; + unsigned int SizeInBytes; +} NVSDK_NGX_BufferInfo_VK; + +/////////////////////////////////////////////////////////////////////////////////////////////////// +// NVSDK_NGX_Resource_VK [Vulkan only] +// +// ImageViewInfo: +// The VkImageView resource, and VkImageView-specific metadata. A NVSDK_NGX_Resource_VK can only have one of ImageViewInfo or BufferInfo. +// +// BufferInfo: +// The VkBuffer Resource, and VkBuffer-specific metadata. A NVSDK_NGX_Resource_VK can only have one of ImageViewInfo or BufferInfo. +// +// Type: +// Whether or this resource is a VkImageView or a VkBuffer. +// +// ReadWrite: +// True if the resource is available for read and write access. +// For VkBuffer resources: VkBufferUsageFlags includes VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT or VK_BUFFER_USAGE_STORAGE_BUFFER_BIT +// For VkImage resources: VkImageUsageFlags for associated VkImage includes VK_IMAGE_USAGE_STORAGE_BIT +// +typedef struct NVSDK_NGX_Resource_VK { + union { + NVSDK_NGX_ImageViewInfo_VK ImageViewInfo; + NVSDK_NGX_BufferInfo_VK BufferInfo; + } Resource; + NVSDK_NGX_Resource_VK_Type Type; + bool ReadWrite; +} NVSDK_NGX_Resource_VK; + +/////////////////////////////////////////////////////////////////////////////////////////////////// +// NVSDK_NGX_RequiredExtensions [Vulkan only] +// +// OutInstanceExtCount: +// Returns the number of instance extensions NGX requires +// +// OutInstanceExts: +// Returns a pointer to *OutInstanceExtCount strings of instance extensions +// +// OutDeviceExtCount: +// Returns the number of device extensions NGX requires +// +// OutDeviceExts: +// Returns a pointer to *OutDeviceExtCount strings of device extensions +// +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_RequiredExtensions(unsigned int *OutInstanceExtCount, const char *** OutInstanceExts, unsigned int *OutDeviceExtCount, const char *** OutDeviceExts); + +/////////////////////////////////////////////////////////////////////////////////////////////////// +// NVSDK_NGX_Init +// ------------------------------------- +// +// InApplicationId: +// Unique Id provided by NVIDIA +// +// InApplicationDataPath: +// Folder to store logs and other temporary files (write access required), +// Normally this would be a location in Documents or ProgramData. +// +// InDevice: [d3d11/12 only] +// DirectX device to use +// +// DESCRIPTION: +// Initializes new SDK instance. +// +#ifdef __cplusplus +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_Init(unsigned long long InApplicationId, const wchar_t *InApplicationDataPath, VkInstance InInstance, VkPhysicalDevice InPD, VkDevice InDevice, const NVSDK_NGX_FeatureCommonInfo *InFeatureInfo = nullptr, NVSDK_NGX_Version InSDKVersion = NVSDK_NGX_Version_API); +#else +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_Init(unsigned long long InApplicationId, const wchar_t *InApplicationDataPath, VkInstance InInstance, VkPhysicalDevice InPD, VkDevice InDevice, const NVSDK_NGX_FeatureCommonInfo *InFeatureInfo, NVSDK_NGX_Version InSDKVersion); +#endif + +/////////////////////////////////////////////////////////////////////////////////////////////////// +// NVSDK_NGX_Init_with_ProjectID +// ------------------------------------- +// +// InParojectId: +// Unique Id provided by the rendering engine used +// +// InEngineType: +// Rendering engine used by the application / plugin. +// Use NVSDK_NGX_ENGINE_TYPE_CUSTOM if the specific engine type is not supported explicitly +// +// InEngineVersion: +// Version number of the rendering engine used by the application / plugin. +// +// InApplicationDataPath: +// Folder to store logs and other temporary files (write access required), +// Normally this would be a location in Documents or ProgramData. +// +// InDevice: [d3d11/12 only] +// DirectX device to use +// +// InFeatureInfo: +// Contains information common to all features, presently only a list of all paths +// feature dlls can be located in, other than the default path - application directory. +// +// DESCRIPTION: +// Initializes new SDK instance. +// +#ifdef __cplusplus +NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_Init_with_ProjectID(const char *InProjectId, NVSDK_NGX_EngineType InEngineType, const char *InEngineVersion, const wchar_t *InApplicationDataPath, VkInstance InInstance, VkPhysicalDevice InPD, VkDevice InDevice, const NVSDK_NGX_FeatureCommonInfo *InFeatureInfo = nullptr, NVSDK_NGX_Version InSDKVersion = NVSDK_NGX_Version_API); +#else +NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_Init_with_ProjectID(const char *InProjectId, NVSDK_NGX_EngineType InEngineType, const char *InEngineVersion, const wchar_t *InApplicationDataPath, VkInstance InInstance, VkPhysicalDevice InPD, VkDevice InDevice, const NVSDK_NGX_FeatureCommonInfo *InFeatureInfo, NVSDK_NGX_Version InSDKVersion); +#endif + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// NVSDK_NGX_Shutdown +// ------------------------------------- +// +// DESCRIPTION: +// Shuts down the current SDK instance and releases all resources. +// Shutdown1(Device) only affects specified device +// Shutdown1(nullptr) = Shutdown() and shuts down all devices +// +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_Shutdown(void); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_Shutdown1(VkDevice InDevice); + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// NVSDK_NGX_GetParameters +// ---------------------------------------------------------- +// +// OutParameters: +// Parameters interface used to set any parameter needed by the SDK +// +// DESCRIPTION: +// This interface allows simple parameter setup using named fields. +// For example one can set width by calling Set(NVSDK_NGX_Parameter_Denoiser_Width,100) or +// provide CUDA buffer pointer by calling Set(NVSDK_NGX_Parameter_Denoiser_Color,cudaBuffer) +// For more details please see sample code. Please note that allocated memory +// will be freed by NGX so free/delete operator should NOT be called. +// Parameter maps output by NVSDK_NGX_GetParameters are also pre-populated +// with NGX capabilities and available features. +// Unlike with NVSDK_NGX_AllocateParameters, parameter maps output by NVSDK_NGX_GetParameters +// have their lifetimes managed by NGX, and must not +// be destroyed by the app using NVSDK_NGX_DestroyParameters. +// NVSDK_NGX_GetParameters is soon to be deprecated and apps should move to using +// NVSDK_NGX_AllocateParameters and NVSDK_NGX_GetCapabilityParameters when possible. +// Nevertheless, due to the possibility that the user will be using an older driver version, +// NVSDK_NGX_GetParameters should still be used as a fallback if NVSDK_NGX_AllocateParameters +// or NVSDK_NGX_GetCapabilityParameters return NVSDK_NGX_Result_FAIL_OutOfDate. +// +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_GetParameters(NVSDK_NGX_Parameter **OutParameters); + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// NVSDK_NGX_AllocateParameters +// ---------------------------------------------------------- +// +// OutParameters: +// Parameters interface used to set any parameter needed by the SDK +// +// DESCRIPTION: +// This interface allows allocating a simple parameter setup using named fields, whose +// lifetime the app must manage. +// For example one can set width by calling Set(NVSDK_NGX_Parameter_Denoiser_Width,100) or +// provide CUDA buffer pointer by calling Set(NVSDK_NGX_Parameter_Denoiser_Color,cudaBuffer) +// For more details please see sample code. +// Parameter maps output by NVSDK_NGX_AllocateParameters must NOT be freed using +// the free/delete operator; to free a parameter map +// output by NVSDK_NGX_AllocateParameters, NVSDK_NGX_DestroyParameters should be used. +// Unlike with NVSDK_NGX_GetParameters, parameter maps allocated with NVSDK_NGX_AllocateParameters +// must be destroyed by the app using NVSDK_NGX_DestroyParameters. +// Also unlike with NVSDK_NGX_GetParameters, parameter maps output by NVSDK_NGX_AllocateParameters +// do not come pre-populated with NGX capabilities and available features. +// To create a new parameter map pre-populated with such information, NVSDK_NGX_GetCapabilityParameters +// should be used. +// This function may return NVSDK_NGX_Result_FAIL_OutOfDate if an older driver, which +// does not support this API call is being used. In such a case, NVSDK_NGX_GetParameters +// may be used as a fallback. +// This function may only be called after a successful call into NVSDK_NGX_Init. +// +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_AllocateParameters(NVSDK_NGX_Parameter** OutParameters); + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// NVSDK_NGX_GetCapabilityParameters +// ---------------------------------------------------------- +// +// OutParameters: +// The parameters interface populated with NGX and feature capabilities +// +// DESCRIPTION: +// This interface allows the app to create a new parameter map +// pre-populated with NGX capabilities and available features. +// The output parameter map can also be used for any purpose +// parameter maps output by NVSDK_NGX_AllocateParameters can be used for +// but it is not recommended to use NVSDK_NGX_GetCapabilityParameters +// unless querying NGX capabilities and available features +// due to the overhead associated with pre-populating the parameter map. +// Parameter maps output by NVSDK_NGX_GetCapabilityParameters must NOT be freed using +// the free/delete operator; to free a parameter map +// output by NVSDK_NGX_GetCapabilityParameters, NVSDK_NGX_DestroyParameters should be used. +// Unlike with NVSDK_NGX_GetParameters, parameter maps allocated with NVSDK_NGX_GetCapabilityParameters +// must be destroyed by the app using NVSDK_NGX_DestroyParameters. +// This function may return NVSDK_NGX_Result_FAIL_OutOfDate if an older driver, which +// does not support this API call is being used. This function may only be called +// after a successful call into NVSDK_NGX_Init. +// If NVSDK_NGX_GetCapabilityParameters fails with NVSDK_NGX_Result_FAIL_OutOfDate, +// NVSDK_NGX_GetParameters may be used as a fallback, to get a parameter map pre-populated +// with NGX capabilities and available features. +// +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_GetCapabilityParameters(NVSDK_NGX_Parameter** OutParameters); + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// NVSDK_NGX_DestroyParameters +// ---------------------------------------------------------- +// +// InParameters: +// The parameters interface to be destroyed +// +// DESCRIPTION: +// This interface allows the app to destroy the parameter map passed in. Once +// NVSDK_NGX_DestroyParameters is called on a parameter map, it +// must not be used again. +// NVSDK_NGX_DestroyParameters must not be called on any parameter map returned +// by NVSDK_NGX_GetParameters; NGX will manage the lifetime of those +// parameter maps. +// This function may return NVSDK_NGX_Result_FAIL_OutOfDate if an older driver, which +// does not support this API call is being used. This function may only be called +// after a successful call into NVSDK_NGX_Init. +// +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_DestroyParameters(NVSDK_NGX_Parameter* InParameters); + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// NVSDK_NGX_GetScratchBufferSize +// ---------------------------------------------------------- +// +// InFeatureId: +// AI feature in question +// +// InParameters: +// Parameters used by the feature to help estimate scratch buffer size +// +// OutSizeInBytes: +// Number of bytes needed for the scratch buffer for the specified feature. +// +// DESCRIPTION: +// SDK needs a buffer of a certain size provided by the client in +// order to initialize AI feature. Once feature is no longer +// needed buffer can be released. It is safe to reuse the same +// scratch buffer for different features as long as minimum size +// requirement is met for all features. Please note that some +// features might not need a scratch buffer so return size of 0 +// is completely valid. +// +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_GetScratchBufferSize(NVSDK_NGX_Feature InFeatureId, const NVSDK_NGX_Parameter *InParameters, size_t *OutSizeInBytes); + +///////////////////////////////////////////////////////////////////////// +// NVSDK_NGX_CreateFeature +// ------------------------------------- +// +// InCmdBuffer: +// Command buffer to use to execute GPU commands. Must be: +// - Open and recording + +// InFeatureID: +// AI feature to initialize +// +// InParameters: +// List of parameters +// +// OutHandle: +// Handle which uniquely identifies the feature. If feature with +// provided parameters already exists the "already exists" error code is returned. +// +// DESCRIPTION: +// Each feature needs to be created before it can be used. +// Refer to the sample code to find out which input parameters +// are needed to create specific feature. +// CreateFeature() creates feature on single existing Device +// CreateFeature1() creates feature on the specified Device +// +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_CreateFeature(VkCommandBuffer InCmdBuffer, NVSDK_NGX_Feature InFeatureID, const NVSDK_NGX_Parameter *InParameters, NVSDK_NGX_Handle **OutHandle); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_CreateFeature1(VkDevice InDevice, VkCommandBuffer InCmdList, NVSDK_NGX_Feature InFeatureID, const NVSDK_NGX_Parameter *InParameters, NVSDK_NGX_Handle **OutHandle); + +///////////////////////////////////////////////////////////////////////// +// NVSDK_NGX_Release +// ------------------------------------- +// +// InHandle: +// Handle to feature to be released +// +// DESCRIPTION: +// Releases feature with a given handle. +// Handles are not reference counted so +// after this call it is invalid to use provided handle. +// +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_ReleaseFeature(NVSDK_NGX_Handle *InHandle); + +///////////////////////////////////////////////////////////////////////// +// NVSDK_NGX_EvaluateFeature +// ------------------------------------- +// +// InCmdList:[d3d12 only] +// Command list to use to execute GPU commands. Must be: +// - Open and recording +// - With node mask including the device provided in NVSDK_NGX_D3D12_Init +// - Execute on non-copy command queue. +// InDevCtx: [d3d11 only] +// Device context to use to execute GPU commands +// +// InFeatureHandle: +// Handle representing feature to be evaluated +// +// InParameters: +// List of parameters required to evaluate feature +// +// InCallback: +// Optional callback for features which might take longer +// to execture. If specified SDK will call it with progress +// values in range 0.0f - 1.0f +// +// DESCRIPTION: +// Evaluates given feature using the provided parameters and +// pre-trained NN. Please note that for most features +// it can be benefitials to pass as many input buffers and parameters +// as possible (for example provide all render targets like color, albedo, normals, depth etc) +// + +#ifdef __cplusplus +typedef void (NVSDK_CONV *PFN_NVSDK_NGX_ProgressCallback)(float InCurrentProgress, bool &OutShouldCancel); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_EvaluateFeature(VkCommandBuffer InCmdList, const NVSDK_NGX_Handle *InFeatureHandle, const NVSDK_NGX_Parameter *InParameters, PFN_NVSDK_NGX_ProgressCallback InCallback = NULL); +#endif +typedef void (NVSDK_CONV *PFN_NVSDK_NGX_ProgressCallback_C)(float InCurrentProgress, bool *OutShouldCancel); +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_EvaluateFeature_C(VkCommandBuffer InCmdList, const NVSDK_NGX_Handle *InFeatureHandle, const NVSDK_NGX_Parameter *InParameters, PFN_NVSDK_NGX_ProgressCallback_C InCallback); + +// NGX return-code conversion-to-string utility only as a helper for debugging/logging - not for official use. +const wchar_t* NVSDK_CONV GetNGXResultAsString(NVSDK_NGX_Result InNGXResult); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // #define NVSDK_NGX_VK_H diff --git a/plugins/DLSS/Source/ThirdParty/NGX/LICENSE.txt b/plugins/DLSS/Source/ThirdParty/NGX/LICENSE.txt new file mode 100644 index 00000000..94965d73 --- /dev/null +++ b/plugins/DLSS/Source/ThirdParty/NGX/LICENSE.txt @@ -0,0 +1,408 @@ +NVIDIA RTX SDKs LICENSE + +This license is a legal agreement between you and NVIDIA Corporation ("NVIDIA") +and governs the use of the NVIDIA RTX software development kits, including the +DLSS SDK, NGX SDK, RTXGI SDK, RTXDI SDK and/or NRD SDK, if and when made +available to you under this license (in each case, the "SDK"). This license can +be accepted only by an adult of legal age of majority in the country in which +the SDK is used. If you are under the legal age of majority, you must ask your +parent or legal guardian to consent to this license. If you are entering this +license on behalf of a company or other legal entity, you represent that you +have legal authority and "you" will mean the entity you represent. By using the +SDK, you affirm that you have reached the legal age of majority, you accept the +terms of this license, and you take legal and financial responsibility for the +actions of your permitted users. + +You agree to use the SDK only for purposes that are permitted by (a) this +license, and (b) any applicable law, regulation or generally accepted practices +or guidelines in the relevant jurisdictions. + +1. LICENSE. Subject to the terms of this license and the terms in the supplement +attached, NVIDIA hereby grants you a non-exclusive, non-transferable license, +without the right to sublicense (except as expressly provided in this license) +to: + +(a) Install and use the SDK, + +(b) Modify and create derivative works of sample source code delivered in the +SDK, and + +(c) Distribute any software and materials within the SDK, other than developer +tools provided for your internal use, as incorporated in object code format into +a software application subject to the distribution requirements indicated in +this license. + +2. DISTRIBUTION REQUIREMENTS. These are the distribution requirements for you to +exercise the grants above: + +(a) An application must have material additional functionality, beyond the +included portions of the SDK. + +(b) The following notice shall be included in modifications and derivative works +of source code distributed: "This software contains source code provided by +NVIDIA Corporation." + +(c) You agree to distribute the SDK subject to the terms at least as protective +as the terms of this license, including (without limitation) terms relating to +the license grant, license restrictions and protection of NVIDIA's intellectual +property rights. Additionally, you agree that you will protect the privacy, +security and legal rights of your application users. + +(d) You agree to notify NVIDIA in writing of any known or suspected distribution +or use of the SDK not in compliance with the requirements of this license, and +to enforce the terms of your agreements with respect to the distributed portions +of the SDK. + +3. AUTHORIZED USERS. You may allow employees and contractors of your entity or +of your subsidiary(ies) to access and use the SDK from your secure network to +perform work on your behalf. If you are an academic institution you may allow +users enrolled or employed by the academic institution to access and use the SDK +from your secure network. You are responsible for the compliance with the terms +of this license by your authorized users. + +4. LIMITATIONS. Your license to use the SDK is restricted as follows: + +(a) You may not reverse engineer, decompile or disassemble, or remove copyright +or other proprietary notices from any portion of the SDK or copies of the SDK. + +(b) Except as expressly provided in this license, you may not copy, sell, rent, +sublicense, transfer, distribute, modify, or create derivative works of any +portion of the SDK. For clarity, you may not distribute or sublicense the SDK as +a stand-alone product. + +(c) Unless you have an agreement with NVIDIA for this purpose, you may not +indicate that an application created with the SDK is sponsored or endorsed by +NVIDIA. + +(d) You may not bypass, disable, or circumvent any technical limitation, +encryption, security, digital rights management or authentication mechanism in +the SDK. + +(e) You may not use the SDK in any manner that would cause it to become subject +to an open source software license. As examples, licenses that require as a +condition of use, modification, and/or distribution that the SDK be: (i) +disclosed or distributed in source code form; (ii) licensed for the purpose of +making derivative works; or (iii) redistributable at no charge. + +(f) Unless you have an agreement with NVIDIA for this purpose, you may not use +the SDK with any system or application where the use or failure of the system or +application can reasonably be expected to threaten or result in personal injury, +death, or catastrophic loss. Examples include use in avionics, navigation, +military, medical, life support or other life critical applications. NVIDIA does +not design, test or manufacture the SDK for these critical uses and NVIDIA shall +not be liable to you or any third party, in whole or in part, for any claims or +damages arising from such uses. + +(g) You agree to defend, indemnify and hold harmless NVIDIA and its affiliates, +and their respective employees, contractors, agents, officers and directors, +from and against any and all claims, damages, obligations, losses, liabilities, +costs or debt, fines, restitutions and expenses (including but not limited to +attorney's fees and costs incident to establishing the right of indemnification) +arising out of or related to your use of the SDK outside of the scope of this +license, or not in compliance with its terms. + +5. UPDATES. NVIDIA may, at its option, make available patches, workarounds or +other updates to this SDK. Unless the updates are provided with their separate +governing terms, they are deemed part of the SDK licensed to you as provided in +this license. You agree that the form and content of the SDK that NVIDIA +provides may change without prior notice to you. While NVIDIA generally +maintains compatibility between versions, NVIDIA may in some cases make changes +that introduce incompatibilities in future versions of the SDK. + +6. PRE-RELEASE VERSIONS. SDK versions identified as alpha, beta, preview, early +access or otherwise as pre-release may not be fully functional, may contain +errors or design flaws, and may have reduced or different security, privacy, +availability, and reliability standards relative to commercial versions of +NVIDIA software and materials. You may use a pre-release SDK version at your own +risk, understanding that these versions are not intended for use in production +or business-critical systems. NVIDIA may choose not to make available a +commercial version of any pre-release SDK. NVIDIA may also choose to abandon +development and terminate the availability of a pre-release SDK at any time +without liability. + +7. THIRD-PARTY COMPONENTS. The SDK may include third-party components with +separate legal notices or terms as may be described in proprietary notices +accompanying the SDK. If and to the extent there is a conflict between the terms +in this license and the third-party license terms, the third-party terms control +only to the extent necessary to resolve the conflict. + +8. OWNERSHIP. + +8.1 NVIDIA reserves all rights, title and interest in and to the SDK not +expressly granted to you under this license. NVIDIA and its suppliers hold all +rights, title and interest in and to the SDK, including their respective +intellectual property rights. The SDK is copyrighted and protected by the laws +of the United States and other countries, and international treaty provisions. + +8.2 Subject to the rights of NVIDIA and its suppliers in the SDK, you hold all +rights, title and interest in and to your applications and your derivative works +of the sample source code delivered in the SDK including their respective +intellectual property rights. + +9. FEEDBACK. You may, but are not obligated to, provide Feedback to NVIDIA. +"Feedback" means all suggestions, fixes, modifications, feature requests or +other feedback regarding the SDK. Feedback, even if designated as confidential +by you, shall not create any confidentiality obligation for NVIDIA. NVIDIA and +its designees have a perpetual, non-exclusive, worldwide, irrevocable license to +use, reproduce, publicly display, modify, create derivative works of, license, +sublicense, and otherwise distribute and exploit Feedback as NVIDIA sees fit +without payment and without obligation or restriction of any kind on account of +intellectual property rights or otherwise. + +10. NO WARRANTIES. THE SDK IS PROVIDED AS-IS. TO THE MAXIMUM EXTENT PERMITTED BY +APPLICABLE LAW NVIDIA AND ITS AFFILIATES EXPRESSLY DISCLAIM ALL WARRANTIES OF +ANY KIND OR NATURE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT +LIMITED TO, WARRANTIES OF MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR A +PARTICULAR PURPOSE. NVIDIA DOES NOT WARRANT THAT THE SDK WILL MEET YOUR +REQUIREMENTS OR THAT THE OPERATION THEREOF WILL BE UNINTERRUPTED OR ERROR-FREE, +OR THAT ALL ERRORS WILL BE CORRECTED. + +11. LIMITATIONS OF LIABILITY. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW +NVIDIA AND ITS AFFILIATES SHALL NOT BE LIABLE FOR ANY SPECIAL, INCIDENTAL, +PUNITIVE OR CONSEQUENTIAL DAMAGES, OR FOR ANY LOST PROFITS, PROJECT DELAYS, LOSS +OF USE, LOSS OF DATA OR LOSS OF GOODWILL, OR THE COSTS OF PROCURING SUBSTITUTE +PRODUCTS, ARISING OUT OF OR IN CONNECTION WITH THIS LICENSE OR THE USE OR +PERFORMANCE OF THE SDK, WHETHER SUCH LIABILITY ARISES FROM ANY CLAIM BASED UPON +BREACH OF CONTRACT, BREACH OF WARRANTY, TORT (INCLUDING NEGLIGENCE), PRODUCT +LIABILITY OR ANY OTHER CAUSE OF ACTION OR THEORY OF LIABILITY, EVEN IF NVIDIA +HAS PREVIOUSLY BEEN ADVISED OF, OR COULD REASONABLY HAVE FORESEEN, THE +POSSIBILITY OF SUCH DAMAGES. IN NO EVENT WILL NVIDIA'S AND ITS AFFILIATES TOTAL +CUMULATIVE LIABILITY UNDER OR ARISING OUT OF THIS LICENSE EXCEED US$10.00. THE +NATURE OF THE LIABILITY OR THE NUMBER OF CLAIMS OR SUITS SHALL NOT ENLARGE OR +EXTEND THIS LIMIT. + +12. TERMINATION. Your rights under this license will terminate automatically +without notice from NVIDIA if you fail to comply with any term and condition of +this license or if you commence or participate in any legal proceeding against +NVIDIA with respect to the SDK. NVIDIA may terminate this license with advance +written notice to you, if NVIDIA decides to no longer provide the SDK in a +country or, in NVIDIA's sole discretion, the continued use of it is no longer +commercially viable. Upon any termination of this license, you agree to promptly +discontinue use of the SDK and destroy all copies in your possession or control. +Your prior distributions in accordance with this license are not affected by the +termination of this license. All provisions of this license will survive +termination, except for the license granted to you. + +13. APPLICABLE LAW. This license will be governed in all respects by the laws of +the United States and of the State of Delaware, without regard to the conflicts +of laws principles. The United Nations Convention on Contracts for the +International Sale of Goods is specifically disclaimed. You agree to all terms +of this license in the English language. The state or federal courts residing in +Santa Clara County, California shall have exclusive jurisdiction over any +dispute or claim arising out of this license. Notwithstanding this, you agree +that NVIDIA shall still be allowed to apply for injunctive remedies or urgent +legal relief in any jurisdiction. + +14. NO ASSIGNMENT. This license and your rights and obligations thereunder may +not be assigned by you by any means or operation of law without NVIDIA's +permission. Any attempted assignment not approved by NVIDIA in writing shall be +void and of no effect. NVIDIA may assign, delegate or transfer this license and +its rights and obligations, and if to a non-affiliate you will be notified. + +15. EXPORT. The SDK is subject to United States export laws and regulations. You +agree to comply with all applicable U.S. and international export laws, +including the Export Administration Regulations (EAR) administered by the U.S. +Department of Commerce and economic sanctions administered by the U.S. +Department of Treasury's Office of Foreign Assets Control (OFAC). These laws +include restrictions on destinations, end-users and end-use. By accepting this +license, you confirm that you are not currently residing in a country or region +currently embargoed by the U.S. and that you are not otherwise prohibited from +receiving the SDK. + +16. GOVERNMENT USE. The SDK is, and shall be treated as being, "Commercial +Items" as that term is defined at 48 CFR § 2.101, consisting of "commercial +computer software" and "commercial computer software documentation", +respectively, as such terms are used in, respectively, 48 CFR § 12.212 and 48 +CFR §§ 227.7202 & 252.227-7014(a)(1). Use, duplication or disclosure by the U.S. +Government or a U.S. Government subcontractor is subject to the restrictions in +this license pursuant to 48 CFR § 12.212 or 48 CFR § 227.7202. In no event shall +the US Government user acquire rights in the SDK beyond those specified in 48 +C.F.R. 52.227-19(b)(1)-(2). + +17. NOTICES. You agree that any notices that NVIDIA sends you electronically, +such as via email, will satisfy any legal communication requirements. Please +direct your legal notices or other correspondence to NVIDIA Corporation, 2788 +San Tomas Expressway, Santa Clara, California 95051, United States of America, +Attention: Legal Department. + +18. ENTIRE AGREEMENT. This license is the final, complete and exclusive +agreement between the parties relating to the subject matter of this license and +supersedes all prior or contemporaneous understandings and agreements relating +to this subject matter, whether oral or written. If any court of competent +jurisdiction determines that any provision of this license is illegal, invalid +or unenforceable, the remaining provisions will remain in full force and effect. +Any amendment or waiver under this license shall be in writing and signed by +representatives of both parties. + +19. LICENSING. If the distribution terms in this license are not suitable for +your organization, or for any questions regarding this license, please contact +NVIDIA at nvidia-rtx-license-questions@nvidia.com. + +(v. April 12, 2021) + + + +NVIDIA RTX SUPPLEMENT TO SOFTWARE LICENSE AGREEMENT FOR NVIDIA SOFTWARE +DEVELOPMENT KITS + +The terms in this supplement govern your use of the NVIDIA RTX SDKs, including +the DLSS SDK, NGX SDK, RTXGI SDK, RTXDI SDK and/or NRD SDK, if and when made +available to you (in each case, the "SDK") under the terms of your license +agreement ("Agreement") as modified by this supplement. Capitalized terms used +but not defined below have the meaning assigned to them in the Agreement. + +This supplement is an exhibit to the Agreement and is incorporated as an +integral part of the Agreement. In the event of conflict between the terms in +this supplement and the terms in the Agreement, the terms in this supplement +govern. + +1. Interoperability. Your applications that incorporate, or are based on, the +SDK must be fully interoperable with compatible GPU hardware products designed +by NVIDIA or its affiliates. Further, the DLSS SDK and NGX SDK are licensed for +you to develop applications only for their use in systems with NVIDIA GPUs. + +2. Limitations for the DLSS SDK and NGX SDK. Your applications that incorporate, +or are based on, the DLSS SDK or NGX SDK may be deployed in a cloud service that +runs on systems that consume NVIDIA vGPU software, and any other cloud service +use of such SDKs or their functionality is outside of the scope of the +Agreement. For the purpose of this section, cloud services include application +service providers or service bureaus, operators of hosted/virtual system +environments, or hosting, time sharing or providing any other type of service to +others. + +3. Notification for the DLSS SDK and NGX SDK. You are required to notify NVIDIA +prior to commercial release of an application (including a plug-in to a +commercial application) that incorporates, or is based on, the DLSS SDK or NGX +SDK. Please send notifications to: https://developer.nvidia.com/sw-notification +and provide the following information in the email: company name, publisher and +developer name, NVIDIA SDK used, application name, platform (i.e. PC, Linux), +scheduled ship date, and weblink to product/video. + +4. Audio and Video Encoders and Decoders. You acknowledge and agree that it is +your sole responsibility to obtain any additional third-party licenses required +to make, have made, use, have used, sell, import, and offer for sale your +products or services that include or incorporate any third-party software and +content relating to audio and/or video encoders and decoders from, including but +not limited to, Microsoft, Thomson, Fraunhofer IIS, Sisvel S.p.A., MPEG-LA, and +Coding Technologies. NVIDIA does not grant to you under this Agreement any +necessary patent or other rights with respect to any audio and/or video encoders +and decoders. + +5. DLSS SDK Terms. By installing or using the DLSS SDK you agree that NVIDIA can +make over-the-air updates of DLSS in systems that have DLSS installed, including +(without limitation) for quality, stability or performance improvements or to +support new hardware. If you publicly release a DLSS integration in an end user +game or application that presents material stability, performance, image +quality, or other technical issues impacting the user experience, you will work +to quickly address the integration issues. In the case issues are not addressed, +NVIDIA reserves the right, as a last resort, to temporarily disable the DLSS +integration until the issues can be fixed. + +6. Marketing. + +6.1 Marketing Activities. Your license to the SDK(s) under the Agreement is +subject to your compliance with the following marketing terms: + +(a) Identification by You in the DLSS SDK or NGX SDK. During the term of the +Agreement, NVIDIA agrees that you may identify NVIDIA on your websites, printed +collateral, trade-show displays and other retail packaging materials, as the +supplier of the DLSS SDK or NGX SDK for the applications that were developed +with use of such SDKs, provided that all such references to NVIDIA will be +subject to NVIDIA's prior review and written approval, which will not be +unreasonably withheld or delayed. + +(b) NVIDIA Trademark Placement in Applications with the DLSS SDK or NGX SDK. +For applications that incorporate the DLSS SDK or NGX SDK or portions thereof, +you must attribute the use of the applicable SDK and include the NVIDIA Marks +on splash screens, in the about box of the application (if present), and in +credits for game applications. + +(c) NVIDIA Trademark Placement in Applications with a licensed SDK, other than +the DLSS SDK or NGX SDK. For applications that incorporates and/or makes use of +a licensed SDK, other than the DLSS SDK or NGX SDK, you must attribute the use +of the applicable SDK and include the NVIDIA Marks on the credit screen for +applications that have such credit screen, or where a credit screen is not +present prominently in end user documentation for the application. d) +Identification by NVIDIA in the DLSS SDK or NGX SDK. You agree that NVIDIA may +identify you on NVIDIA's websites, printed collateral, trade-show displays, and +other retail packaging materials as an individual or entity that produces +products and services which incorporate the DLSS SDK or NGX SDK as applicable. +To the extent that you provide NVIDIA with input or usage requests with regard +to the use of your logo or materials, NVIDIA will use commercially reasonable +efforts to comply with such requests. For the avoidance of doubt, NVIDIA's +rights pursuant to this section shall survive any expiration or termination of +the Agreement with respect to existing applications which incorporate the DLSS +SDK or NGX SDK. + +(e) Applications Marketing Material in the DLSS SDK or NGX SDK. You may provide +NVIDIA with screenshots, imagery, and video footage of applications +representative of your use of the NVIDIA DLSS SDK or NGX SDKs in your +application (collectively, "Assets"). You hereby grant to NVIDIA the right to +create and display self-promotional demo materials using the Assets, and after +release of the application to the public to distribute, sub-license, and use +the Assets to promote and market the NVIDIA RTX SDKs. To the extent you +provide NVIDIA with input or usage requests with regard to the use of your logo +or materials, NVIDIA will use commercially reasonable efforts to comply with +such requests. For the avoidance of doubt, NVIDIA's rights pursuant to this +section shall survive any termination of the Agreement with respect to +applications which incorporate the NVIDIA RTX SDK. + +6.2 Trademark Ownership and Licenses. Trademarks are owned and licenses as +follows: + +(a) Ownership of Trademarks. Each party owns the trademarks, logos, and trade +names (collectively "Marks") for their respective products or services, +including without limitation in applications, and the NVIDIA RTX SDKs. Each +party agrees to use the Marks of the other only as permitted in this exhibit. + +(b) Trademark License to NVIDIA. You grant to NVIDIA a non-exclusive, non-sub +licensable, non-transferable (except as set forth in the assignment provision +of the Agreement), worldwide license to refer to you and your applications, and +to use your Marks on NVIDIA's marketing materials and on NVIDIA's website +(subject to any reasonable conditions of you) solely for NVIDIA's marketing +activities set forth in this exhibit Sections (d)-(e) above. NVIDIA will +follow your specifications for your Marks as to style, color, and typeface as +reasonably provided to NVIDIA. + +(c) Trademark License to You. NVIDIA grants to you a non-exclusive, non-sub +licensable, non-transferable (except as set forth in the assignment provision +of the Agreement), worldwide license, subject to the terms of this exhibit and +the Agreement, to use NVIDIA RTX™, NVIDIA GeForce RTX™ in combination with +GeForce products, and/or NVIDIA Quadro RTX™ in combination with Quadro +products (collectively, the "NVIDIA Marks") on your marketing materials and on +your website (subject to any reasonable conditions of NVIDIA) solely for your +marketing activities set forth in this exhibit Sections 6.1 (a)-(c) above. For +the avoidance of doubt, you will not and will not permit others to use any +NVIDIA Mark for any other goods or services, or in a way that tarnishes, +degrades, disparages or reflects adversely any of the NVIDIA Marks or NVIDIA's +business or reputation, or that dilutes or otherwise harms the value, +reputation or distinctiveness of or NVIDIA's goodwill in any NVIDIA Mark. In +addition to the termination rights set forth in the Agreement, NVIDIA may +terminate this trademark license at any time upon written notice to you. You +will follow NVIDIA's use guidelines and specifications for NVIDIA's Marks as to +style, color and typeface as provided in NVIDIA Marks and submit a sample of +each proposed use of NVIDIA's Marks at least ten (10) business days prior to +the desired implementation of such use to obtain NVIDIA's prior written +approval (which approval will not be unreasonably withheld or delayed. Use of +NVIDIA marks is not authorized until NVIDIA provides written approval. All +goodwill associated with use of NVIDIA Marks will inure to the sole benefit of +NVIDIA. + +6.3 Use Guidelines. Use of the NVIDIA Marks is subject to the following +guidelines: + +(a) Business Practices. You covenant that you will: (a) conduct business with +respect to NVIDIA's products in a manner that reflects favorably at all times +on the good name, goodwill and reputation of such products; (b) avoid +deceptive, misleading or unethical practices that are detrimental to NVIDIA, +its customers, or end users; (c) make no false or misleading representations +with regard to NVIDIA or its products; and (d) not publish or employ or +cooperate in the publication or employment of any misleading or deceptive +advertising or promotional materials. + +(b) No Combination Marks or Similar Marks. You agree not to (a) combine NVIDIA +Marks with any other content without NVIDIA's prior written approval, or (b) +use any other trademark, trade name, or other designation of source which +creates a likelihood of confusion with NVIDIA Marks. + +(v. April 12, 2021) diff --git a/plugins/DLSS/Source/ThirdParty/NGX/NGX.Build.cs b/plugins/DLSS/Source/ThirdParty/NGX/NGX.Build.cs new file mode 100644 index 00000000..59690f81 --- /dev/null +++ b/plugins/DLSS/Source/ThirdParty/NGX/NGX.Build.cs @@ -0,0 +1,109 @@ +/* +* Copyright (c) 2020-2021 NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA Corporation and its licensors retain all intellectual property and proprietary +* rights in and to this software, related documentation and any modifications thereto. +* Any use, reproduction, disclosure or distribution of this software and related +* documentation without an express license agreement from NVIDIA Corporation is strictly +* prohibited. +* +* TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* +* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, +* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +* PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY +* SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT +* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF +* BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR +* INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGES. +*/ + +#if UE_5_0_OR_LATER +using EpicGames.Core; +#else +using Tools.DotNETCommon; +#endif + +using UnrealBuildTool; +using System.IO; + +public class NGX : ModuleRules +{ + + protected virtual bool IsSupportedWindowsPlatform(ReadOnlyTargetRules Target) + { + return Target.Platform == UnrealTargetPlatform.Win64; + } + + public NGX (ReadOnlyTargetRules Target) : base(Target) + { + Type = ModuleType.External; + + if (IsSupportedWindowsPlatform(Target)) + { + string NGXPath = ModuleDirectory + "/"; + + PublicSystemIncludePaths.Add(NGXPath + "Include/"); + + PublicIncludePaths.Add(NGXPath + "Include/"); + + if ((Target.Configuration == UnrealTargetConfiguration.Debug) && Target.bDebugBuildsActuallyUseDebugCRT) + { + if (Target.bUseStaticCRT) + { + PublicAdditionalLibraries.Add(NGXPath + "Lib/x64/" + "nvsdk_ngx_s_dbg.lib"); + } + else + { + PublicAdditionalLibraries.Add(NGXPath + "Lib/x64/" + "nvsdk_ngx_d_dbg.lib"); + } + } + else + { + if (Target.bUseStaticCRT) + { + PublicAdditionalLibraries.Add(NGXPath + "Lib/x64/" + "nvsdk_ngx_s.lib"); + } + else + { + PublicAdditionalLibraries.Add(NGXPath + "Lib/x64/" + "nvsdk_ngx_d.lib"); + } + } + + string[] NGXSnippetDLLs = + { + "nvngx_dlss.dll", + }; + + PublicDefinitions.Add("NGX_DLSS_BINARY_NAME=TEXT(\"" + NGXSnippetDLLs[0] + "\")"); + + foreach (string NGXSnippetDLL in NGXSnippetDLLs) + { + bool bHasProjectBinary = false; + if (Target.ProjectFile != null) + { + string ProjectDLLPath = DirectoryReference.Combine(Target.ProjectFile.Directory, "Binaries/ThirdParty/NVIDIA/NGX/Win64", NGXSnippetDLL).FullName; + if (File.Exists(ProjectDLLPath)) + { + bHasProjectBinary = true; + //Log.TraceInformation("NGX project specific production DLSS binary found at {0}.", ProjectDLLPath); + RuntimeDependencies.Add(ProjectDLLPath, StagedFileType.NonUFS); + } + } + + // useful to have both plugin and project specific binary during testing, but if we have a project specific binary, then we want to ship with only that + if (!bHasProjectBinary || Target.Configuration != UnrealTargetConfiguration.Shipping) + { + RuntimeDependencies.Add("$(PluginDir)/Binaries/ThirdParty/Win64/" + NGXSnippetDLL, StagedFileType.NonUFS); + } + + // useful to have debug overlay during testing, but we don't want to ship with that + if (Target.Configuration != UnrealTargetConfiguration.Shipping) + { + RuntimeDependencies.Add("$(PluginDir)/Binaries/ThirdParty/Win64/Development/" + NGXSnippetDLL, StagedFileType.DebugNonUFS); + } + } + } + } +} + diff --git a/plugins/DLSS/Source/ThirdParty/NGX/NGX.tps b/plugins/DLSS/Source/ThirdParty/NGX/NGX.tps new file mode 100644 index 00000000..64aea65a --- /dev/null +++ b/plugins/DLSS/Source/ThirdParty/NGX/NGX.tps @@ -0,0 +1,7 @@ + + + NGX + /Engine/Source/ThirdParty/NVIDIA/NGX + NGX + SDK for DLSS and other NVIDIA DeepLearning technologies + \ No newline at end of file diff --git a/plugins/DLSS/Source/ThirdParty/NGX/Utils/DLSS_Debug_Jitter_Configs.txt b/plugins/DLSS/Source/ThirdParty/NGX/Utils/DLSS_Debug_Jitter_Configs.txt new file mode 100644 index 00000000..587f39c5 --- /dev/null +++ b/plugins/DLSS/Source/ThirdParty/NGX/Utils/DLSS_Debug_Jitter_Configs.txt @@ -0,0 +1,87 @@ +Jitter Offset Configurations + +To assist in debugging issues with sub-pixel jitter, the DLSS SDK library can optionally adjust the jitter offset components using the CTRL+ALT+F9 hotkey. The configurations are listed below and pressing the hotkey cycles through them in order. + +To exchange (ie swap) the X and Y offsets, use the CTRL+ALT+F10 hotkey. + + +// By default, jitter offsets are used as sent from the engine +Config 0: OFF + + +// Combinations halving and negating both vector components +Config 1: + JitterOffsetX *= 0.5f; + JitterOffsetY *= 0.5f; + +Config 2: + JitterOffsetX *= 0.5f; + JitterOffsetY *= -0.5f; + +Config 3: + JitterOffsetX *= -0.5f; + JitterOffsetY *= 0.5f; + +Config 4: + JitterOffsetX *= -0.5f; + JitterOffsetY *= -0.5f; + + +// Combinations doubling and negating both vector components +Config 5: + JitterOffsetX *= 2.0f; + JitterOffsetY *= 2.0f; + +Config 6: + JitterOffsetX *= 2.0f; + JitterOffsetY *= -2.0f; + +Config 7: + JitterOffsetX *= -2.0f; + JitterOffsetY *= 2.0f; + +Config 8: + JitterOffsetX *= -2.0f; + JitterOffsetY *= -2.0f; + + +// Combinations negating one or both vector components +Config 9: + JitterOffsetX *= 1.0f; + JitterOffsetY *= -1.0f; + +Config 10: + JitterOffsetX *= -1.0f; + JitterOffsetY *= 1.0f; + +Config 11: + JitterOffsetX *= -1.0f; + JitterOffsetY *= -1.0f; + + +// Combinations halving and negating individual vector components +Config 12: + JitterOffsetX *= 0.5f; + +Config 13: + JitterOffsetY *= 0.5f; + +Config 14: + JitterOffsetX *= -0.5f; + +Config 15: + JitterOffsetY *= -0.5f; + + +// Combinations doubling and negating individual vector components +Config 16: + JitterOffsetX *= 2.0f; + +Config 17: + JitterOffsetY *= 2.0f; + +Config 18: + JitterOffsetX *= -2.0f; + +Config 19: + JitterOffsetY *= -2.0f; diff --git a/plugins/DLSS/Source/ThirdParty/NGX/Utils/ngx_driver_onscreenindicator.reg b/plugins/DLSS/Source/ThirdParty/NGX/Utils/ngx_driver_onscreenindicator.reg new file mode 100644 index 00000000..8d5d0b1a Binary files /dev/null and b/plugins/DLSS/Source/ThirdParty/NGX/Utils/ngx_driver_onscreenindicator.reg differ diff --git a/plugins/DLSS/Source/ThirdParty/NGX/Utils/ngx_driver_onscreenindicator_off.reg b/plugins/DLSS/Source/ThirdParty/NGX/Utils/ngx_driver_onscreenindicator_off.reg new file mode 100644 index 00000000..1a8c1262 Binary files /dev/null and b/plugins/DLSS/Source/ThirdParty/NGX/Utils/ngx_driver_onscreenindicator_off.reg differ diff --git a/plugins/DLSS/Source/ThirdParty/NGX/Utils/ngx_log_off.reg b/plugins/DLSS/Source/ThirdParty/NGX/Utils/ngx_log_off.reg new file mode 100644 index 00000000..21ab19ff Binary files /dev/null and b/plugins/DLSS/Source/ThirdParty/NGX/Utils/ngx_log_off.reg differ diff --git a/plugins/DLSS/Source/ThirdParty/NGX/Utils/ngx_log_on.reg b/plugins/DLSS/Source/ThirdParty/NGX/Utils/ngx_log_on.reg new file mode 100644 index 00000000..b99fb96f Binary files /dev/null and b/plugins/DLSS/Source/ThirdParty/NGX/Utils/ngx_log_on.reg differ diff --git a/plugins/DLSS/Source/ThirdParty/NGX/Utils/ngx_log_verbose.reg b/plugins/DLSS/Source/ThirdParty/NGX/Utils/ngx_log_verbose.reg new file mode 100644 index 00000000..2d779298 Binary files /dev/null and b/plugins/DLSS/Source/ThirdParty/NGX/Utils/ngx_log_verbose.reg differ diff --git a/plugins/DLSS/Source/ThirdParty/NGX/Utils/ngx_log_window_off.reg b/plugins/DLSS/Source/ThirdParty/NGX/Utils/ngx_log_window_off.reg new file mode 100644 index 00000000..6e9666e6 Binary files /dev/null and b/plugins/DLSS/Source/ThirdParty/NGX/Utils/ngx_log_window_off.reg differ diff --git a/plugins/DLSS/Source/ThirdParty/NGX/Utils/ngx_log_window_on.reg b/plugins/DLSS/Source/ThirdParty/NGX/Utils/ngx_log_window_on.reg new file mode 100644 index 00000000..85f352ed Binary files /dev/null and b/plugins/DLSS/Source/ThirdParty/NGX/Utils/ngx_log_window_on.reg differ diff --git a/plugins/JPrinter/Binaries/Win64/UE4Editor-JPrinter.dll b/plugins/JPrinter/Binaries/Win64/UE4Editor-JPrinter.dll index 464c905b..d0ef1c3d 100644 Binary files a/plugins/JPrinter/Binaries/Win64/UE4Editor-JPrinter.dll and b/plugins/JPrinter/Binaries/Win64/UE4Editor-JPrinter.dll differ diff --git a/plugins/JPrinter/Binaries/Win64/UE4Editor-JPrinter.pdb b/plugins/JPrinter/Binaries/Win64/UE4Editor-JPrinter.pdb index cae083cc..29db8c12 100644 Binary files a/plugins/JPrinter/Binaries/Win64/UE4Editor-JPrinter.pdb and b/plugins/JPrinter/Binaries/Win64/UE4Editor-JPrinter.pdb differ diff --git a/plugins/JPrinter/Intermediate/Build/Win64/UE4/Development/JPrinter/Module.JPrinter.cpp.obj b/plugins/JPrinter/Intermediate/Build/Win64/UE4/Development/JPrinter/Module.JPrinter.cpp.obj index 84f6c203..006e5e31 100644 Binary files a/plugins/JPrinter/Intermediate/Build/Win64/UE4/Development/JPrinter/Module.JPrinter.cpp.obj and b/plugins/JPrinter/Intermediate/Build/Win64/UE4/Development/JPrinter/Module.JPrinter.cpp.obj differ diff --git a/plugins/JPrinter/Intermediate/Build/Win64/UE4/Development/JPrinter/Module.JPrinter.gen.cpp.obj b/plugins/JPrinter/Intermediate/Build/Win64/UE4/Development/JPrinter/Module.JPrinter.gen.cpp.obj index f389d207..5adffc32 100644 Binary files a/plugins/JPrinter/Intermediate/Build/Win64/UE4/Development/JPrinter/Module.JPrinter.gen.cpp.obj and b/plugins/JPrinter/Intermediate/Build/Win64/UE4/Development/JPrinter/Module.JPrinter.gen.cpp.obj differ diff --git a/plugins/JPrinter/Intermediate/Build/Win64/UE4/Inc/JPrinter/JPrinterBPLibrary.generated.h b/plugins/JPrinter/Intermediate/Build/Win64/UE4/Inc/JPrinter/JPrinterBPLibrary.generated.h index be35eab1..857f7258 100644 --- a/plugins/JPrinter/Intermediate/Build/Win64/UE4/Inc/JPrinter/JPrinterBPLibrary.generated.h +++ b/plugins/JPrinter/Intermediate/Build/Win64/UE4/Inc/JPrinter/JPrinterBPLibrary.generated.h @@ -15,8 +15,8 @@ enum class EPaperSize : uint8; #endif #define JPRINTER_JPrinterBPLibrary_generated_h -#define HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_SPARSE_DATA -#define HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_RPC_WRAPPERS \ +#define Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_SPARSE_DATA +#define Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_RPC_WRAPPERS \ \ DECLARE_FUNCTION(execprintTexture2D); \ DECLARE_FUNCTION(execprintImage); \ @@ -24,7 +24,7 @@ enum class EPaperSize : uint8; DECLARE_FUNCTION(execgetPrinterList); -#define HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_RPC_WRAPPERS_NO_PURE_DECLS \ +#define Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_RPC_WRAPPERS_NO_PURE_DECLS \ \ DECLARE_FUNCTION(execprintTexture2D); \ DECLARE_FUNCTION(execprintImage); \ @@ -32,7 +32,7 @@ enum class EPaperSize : uint8; DECLARE_FUNCTION(execgetPrinterList); -#define HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_INCLASS_NO_PURE_DECLS \ +#define Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_INCLASS_NO_PURE_DECLS \ private: \ static void StaticRegisterNativesUJPrinterBPLibrary(); \ friend struct Z_Construct_UClass_UJPrinterBPLibrary_Statics; \ @@ -41,7 +41,7 @@ public: \ DECLARE_SERIALIZER(UJPrinterBPLibrary) -#define HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_INCLASS \ +#define Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_INCLASS \ private: \ static void StaticRegisterNativesUJPrinterBPLibrary(); \ friend struct Z_Construct_UClass_UJPrinterBPLibrary_Statics; \ @@ -50,7 +50,7 @@ public: \ DECLARE_SERIALIZER(UJPrinterBPLibrary) -#define HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_STANDARD_CONSTRUCTORS \ +#define Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_STANDARD_CONSTRUCTORS \ /** Standard constructor, called after all reflected properties have been initialized */ \ NO_API UJPrinterBPLibrary(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get()); \ DEFINE_DEFAULT_OBJECT_INITIALIZER_CONSTRUCTOR_CALL(UJPrinterBPLibrary) \ @@ -63,7 +63,7 @@ private: \ public: -#define HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_ENHANCED_CONSTRUCTORS \ +#define Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_ENHANCED_CONSTRUCTORS \ /** Standard constructor, called after all reflected properties have been initialized */ \ NO_API UJPrinterBPLibrary(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get()) : Super(ObjectInitializer) { }; \ private: \ @@ -76,28 +76,28 @@ public: \ DEFINE_DEFAULT_OBJECT_INITIALIZER_CONSTRUCTOR_CALL(UJPrinterBPLibrary) -#define HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_PRIVATE_PROPERTY_OFFSET -#define HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_43_PROLOG -#define HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_GENERATED_BODY_LEGACY \ +#define Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_PRIVATE_PROPERTY_OFFSET +#define Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_43_PROLOG +#define Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_GENERATED_BODY_LEGACY \ PRAGMA_DISABLE_DEPRECATION_WARNINGS \ public: \ - HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_PRIVATE_PROPERTY_OFFSET \ - HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_SPARSE_DATA \ - HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_RPC_WRAPPERS \ - HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_INCLASS \ - HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_STANDARD_CONSTRUCTORS \ + Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_PRIVATE_PROPERTY_OFFSET \ + Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_SPARSE_DATA \ + Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_RPC_WRAPPERS \ + Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_INCLASS \ + Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_STANDARD_CONSTRUCTORS \ public: \ PRAGMA_ENABLE_DEPRECATION_WARNINGS -#define HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_GENERATED_BODY \ +#define Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_GENERATED_BODY \ PRAGMA_DISABLE_DEPRECATION_WARNINGS \ public: \ - HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_PRIVATE_PROPERTY_OFFSET \ - HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_SPARSE_DATA \ - HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_RPC_WRAPPERS_NO_PURE_DECLS \ - HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_INCLASS_NO_PURE_DECLS \ - HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_ENHANCED_CONSTRUCTORS \ + Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_PRIVATE_PROPERTY_OFFSET \ + Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_SPARSE_DATA \ + Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_RPC_WRAPPERS_NO_PURE_DECLS \ + Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_INCLASS_NO_PURE_DECLS \ + Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_ENHANCED_CONSTRUCTORS \ static_assert(false, "Unknown access specifier for GENERATED_BODY() macro in class JPrinterBPLibrary."); \ PRAGMA_ENABLE_DEPRECATION_WARNINGS @@ -105,7 +105,7 @@ PRAGMA_ENABLE_DEPRECATION_WARNINGS template<> JPRINTER_API UClass* StaticClass(); #undef CURRENT_FILE_ID -#define CURRENT_FILE_ID HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h +#define CURRENT_FILE_ID Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h #define FOREACH_ENUM_EPAPERSIZE(op) \ diff --git a/plugins/JPrinter/Intermediate/Build/Win64/UE4/Inc/JPrinter/Timestamp b/plugins/JPrinter/Intermediate/Build/Win64/UE4/Inc/JPrinter/Timestamp index 5630c382..ad1d15de 100644 --- a/plugins/JPrinter/Intermediate/Build/Win64/UE4/Inc/JPrinter/Timestamp +++ b/plugins/JPrinter/Intermediate/Build/Win64/UE4/Inc/JPrinter/Timestamp @@ -1 +1 @@ -E:\Projects\das\JPrinter\HostProject\Plugins\JPrinter\Source\JPrinter\Public\JPrinterBPLibrary.h +E:\Projects\Ivazowsky\Plugins\JPrinter\Source\JPrinter\Public\JPrinterBPLibrary.h diff --git a/plugins/JPrinter/Intermediate/Build/Win64/UE4/Shipping/JPrinter/Module.JPrinter.cpp.obj b/plugins/JPrinter/Intermediate/Build/Win64/UE4/Shipping/JPrinter/Module.JPrinter.cpp.obj index f75ee6b0..c26cc6a2 100644 Binary files a/plugins/JPrinter/Intermediate/Build/Win64/UE4/Shipping/JPrinter/Module.JPrinter.cpp.obj and b/plugins/JPrinter/Intermediate/Build/Win64/UE4/Shipping/JPrinter/Module.JPrinter.cpp.obj differ diff --git a/plugins/JPrinter/Intermediate/Build/Win64/UE4/Shipping/JPrinter/Module.JPrinter.gen.cpp.obj b/plugins/JPrinter/Intermediate/Build/Win64/UE4/Shipping/JPrinter/Module.JPrinter.gen.cpp.obj index 60f11e8a..92d0b424 100644 Binary files a/plugins/JPrinter/Intermediate/Build/Win64/UE4/Shipping/JPrinter/Module.JPrinter.gen.cpp.obj and b/plugins/JPrinter/Intermediate/Build/Win64/UE4/Shipping/JPrinter/Module.JPrinter.gen.cpp.obj differ diff --git a/plugins/JPrinter/Intermediate/Build/Win64/UE4Editor/Development/JPrinter/UE4Editor-JPrinter.lib b/plugins/JPrinter/Intermediate/Build/Win64/UE4Editor/Development/JPrinter/UE4Editor-JPrinter.lib index a100eb43..3221bace 100644 Binary files a/plugins/JPrinter/Intermediate/Build/Win64/UE4Editor/Development/JPrinter/UE4Editor-JPrinter.lib and b/plugins/JPrinter/Intermediate/Build/Win64/UE4Editor/Development/JPrinter/UE4Editor-JPrinter.lib differ diff --git a/plugins/JPrinter/Intermediate/Build/Win64/UE4Editor/Inc/JPrinter/JPrinterBPLibrary.generated.h b/plugins/JPrinter/Intermediate/Build/Win64/UE4Editor/Inc/JPrinter/JPrinterBPLibrary.generated.h index be35eab1..857f7258 100644 --- a/plugins/JPrinter/Intermediate/Build/Win64/UE4Editor/Inc/JPrinter/JPrinterBPLibrary.generated.h +++ b/plugins/JPrinter/Intermediate/Build/Win64/UE4Editor/Inc/JPrinter/JPrinterBPLibrary.generated.h @@ -15,8 +15,8 @@ enum class EPaperSize : uint8; #endif #define JPRINTER_JPrinterBPLibrary_generated_h -#define HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_SPARSE_DATA -#define HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_RPC_WRAPPERS \ +#define Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_SPARSE_DATA +#define Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_RPC_WRAPPERS \ \ DECLARE_FUNCTION(execprintTexture2D); \ DECLARE_FUNCTION(execprintImage); \ @@ -24,7 +24,7 @@ enum class EPaperSize : uint8; DECLARE_FUNCTION(execgetPrinterList); -#define HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_RPC_WRAPPERS_NO_PURE_DECLS \ +#define Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_RPC_WRAPPERS_NO_PURE_DECLS \ \ DECLARE_FUNCTION(execprintTexture2D); \ DECLARE_FUNCTION(execprintImage); \ @@ -32,7 +32,7 @@ enum class EPaperSize : uint8; DECLARE_FUNCTION(execgetPrinterList); -#define HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_INCLASS_NO_PURE_DECLS \ +#define Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_INCLASS_NO_PURE_DECLS \ private: \ static void StaticRegisterNativesUJPrinterBPLibrary(); \ friend struct Z_Construct_UClass_UJPrinterBPLibrary_Statics; \ @@ -41,7 +41,7 @@ public: \ DECLARE_SERIALIZER(UJPrinterBPLibrary) -#define HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_INCLASS \ +#define Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_INCLASS \ private: \ static void StaticRegisterNativesUJPrinterBPLibrary(); \ friend struct Z_Construct_UClass_UJPrinterBPLibrary_Statics; \ @@ -50,7 +50,7 @@ public: \ DECLARE_SERIALIZER(UJPrinterBPLibrary) -#define HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_STANDARD_CONSTRUCTORS \ +#define Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_STANDARD_CONSTRUCTORS \ /** Standard constructor, called after all reflected properties have been initialized */ \ NO_API UJPrinterBPLibrary(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get()); \ DEFINE_DEFAULT_OBJECT_INITIALIZER_CONSTRUCTOR_CALL(UJPrinterBPLibrary) \ @@ -63,7 +63,7 @@ private: \ public: -#define HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_ENHANCED_CONSTRUCTORS \ +#define Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_ENHANCED_CONSTRUCTORS \ /** Standard constructor, called after all reflected properties have been initialized */ \ NO_API UJPrinterBPLibrary(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get()) : Super(ObjectInitializer) { }; \ private: \ @@ -76,28 +76,28 @@ public: \ DEFINE_DEFAULT_OBJECT_INITIALIZER_CONSTRUCTOR_CALL(UJPrinterBPLibrary) -#define HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_PRIVATE_PROPERTY_OFFSET -#define HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_43_PROLOG -#define HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_GENERATED_BODY_LEGACY \ +#define Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_PRIVATE_PROPERTY_OFFSET +#define Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_43_PROLOG +#define Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_GENERATED_BODY_LEGACY \ PRAGMA_DISABLE_DEPRECATION_WARNINGS \ public: \ - HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_PRIVATE_PROPERTY_OFFSET \ - HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_SPARSE_DATA \ - HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_RPC_WRAPPERS \ - HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_INCLASS \ - HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_STANDARD_CONSTRUCTORS \ + Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_PRIVATE_PROPERTY_OFFSET \ + Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_SPARSE_DATA \ + Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_RPC_WRAPPERS \ + Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_INCLASS \ + Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_STANDARD_CONSTRUCTORS \ public: \ PRAGMA_ENABLE_DEPRECATION_WARNINGS -#define HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_GENERATED_BODY \ +#define Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_GENERATED_BODY \ PRAGMA_DISABLE_DEPRECATION_WARNINGS \ public: \ - HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_PRIVATE_PROPERTY_OFFSET \ - HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_SPARSE_DATA \ - HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_RPC_WRAPPERS_NO_PURE_DECLS \ - HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_INCLASS_NO_PURE_DECLS \ - HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_ENHANCED_CONSTRUCTORS \ + Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_PRIVATE_PROPERTY_OFFSET \ + Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_SPARSE_DATA \ + Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_RPC_WRAPPERS_NO_PURE_DECLS \ + Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_INCLASS_NO_PURE_DECLS \ + Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h_46_ENHANCED_CONSTRUCTORS \ static_assert(false, "Unknown access specifier for GENERATED_BODY() macro in class JPrinterBPLibrary."); \ PRAGMA_ENABLE_DEPRECATION_WARNINGS @@ -105,7 +105,7 @@ PRAGMA_ENABLE_DEPRECATION_WARNINGS template<> JPRINTER_API UClass* StaticClass(); #undef CURRENT_FILE_ID -#define CURRENT_FILE_ID HostProject_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h +#define CURRENT_FILE_ID Ivazowsky_Plugins_JPrinter_Source_JPrinter_Public_JPrinterBPLibrary_h #define FOREACH_ENUM_EPAPERSIZE(op) \ diff --git a/plugins/JPrinter/Intermediate/Build/Win64/UE4Editor/Inc/JPrinter/Timestamp b/plugins/JPrinter/Intermediate/Build/Win64/UE4Editor/Inc/JPrinter/Timestamp index 5630c382..ad1d15de 100644 --- a/plugins/JPrinter/Intermediate/Build/Win64/UE4Editor/Inc/JPrinter/Timestamp +++ b/plugins/JPrinter/Intermediate/Build/Win64/UE4Editor/Inc/JPrinter/Timestamp @@ -1 +1 @@ -E:\Projects\das\JPrinter\HostProject\Plugins\JPrinter\Source\JPrinter\Public\JPrinterBPLibrary.h +E:\Projects\Ivazowsky\Plugins\JPrinter\Source\JPrinter\Public\JPrinterBPLibrary.h diff --git a/plugins/UnrealCLR/Managed/UnrealEngine.Plugins.pdb b/plugins/UnrealCLR/Managed/UnrealEngine.Plugins.pdb new file mode 100644 index 00000000..d6ed6328 Binary files /dev/null and b/plugins/UnrealCLR/Managed/UnrealEngine.Plugins.pdb differ diff --git a/plugins/UnrealCLR/Managed/UnrealEngine.Runtime.deps.json b/plugins/UnrealCLR/Managed/UnrealEngine.Runtime.deps.json new file mode 100644 index 00000000..c1cf0890 --- /dev/null +++ b/plugins/UnrealCLR/Managed/UnrealEngine.Runtime.deps.json @@ -0,0 +1,74 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v5.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v5.0": { + "UnrealEngine.Runtime/1.0.0": { + "dependencies": { + "Microsoft.CodeAnalysis.NetAnalyzers": "5.0.3", + "UnrealEngine.Plugins": "1.0.0.0" + }, + "runtime": { + "UnrealEngine.Runtime.dll": {} + } + }, + "Microsoft.CodeAnalysis.NetAnalyzers/5.0.3": {}, + "UnrealEngine.Plugins/1.0.0.0": { + "runtime": { + "UnrealEngine.Plugins.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.0" + } + } + }, + "Microsoft.Extensions.DependencyModel/5.0.0.0": { + "runtime": { + "Microsoft.Extensions.DependencyModel.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.20.51904" + } + } + }, + "Microsoft.DotNet.PlatformAbstractions/3.1.6.0": { + "runtime": { + "Microsoft.DotNet.PlatformAbstractions.dll": { + "assemblyVersion": "3.1.6.0", + "fileVersion": "3.100.620.31604" + } + } + } + } + }, + "libraries": { + "UnrealEngine.Runtime/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "Microsoft.CodeAnalysis.NetAnalyzers/5.0.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7rw0JUPSAVGR0HPekQiQvwGPor44p/Ek21+wZABraG4bVYNrSkx98ZZsxSxG5jJ4oqjACJxea8E62UO0dsKDBw==", + "path": "microsoft.codeanalysis.netanalyzers/5.0.3", + "hashPath": "microsoft.codeanalysis.netanalyzers.5.0.3.nupkg.sha512" + }, + "UnrealEngine.Plugins/1.0.0.0": { + "type": "reference", + "serviceable": false, + "sha512": "" + }, + "Microsoft.Extensions.DependencyModel/5.0.0.0": { + "type": "reference", + "serviceable": false, + "sha512": "" + }, + "Microsoft.DotNet.PlatformAbstractions/3.1.6.0": { + "type": "reference", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/plugins/UnrealCLR/Managed/UnrealEngine.Runtime.pdb b/plugins/UnrealCLR/Managed/UnrealEngine.Runtime.pdb new file mode 100644 index 00000000..889d5b7b Binary files /dev/null and b/plugins/UnrealCLR/Managed/UnrealEngine.Runtime.pdb differ diff --git a/plugins/UnrealCLR/Managed/UnrealEngine.Runtime.runtimeconfig.json b/plugins/UnrealCLR/Managed/UnrealEngine.Runtime.runtimeconfig.json new file mode 100644 index 00000000..ebf64f4d --- /dev/null +++ b/plugins/UnrealCLR/Managed/UnrealEngine.Runtime.runtimeconfig.json @@ -0,0 +1,14 @@ +{ + "runtimeOptions": { + "tfm": "net5.0", + "rollForward": "LatestMinor", + "framework": { + "name": "Microsoft.NETCore.App", + "version": "5.0.0" + }, + "configProperties": { + "System.GC.Server": false, + "System.Runtime.TieredCompilation": false + } + } +} \ No newline at end of file diff --git a/plugins/UnrealCLR/Resources/Icon128.png b/plugins/UnrealCLR/Resources/Icon128.png new file mode 100644 index 00000000..d409f7d7 Binary files /dev/null and b/plugins/UnrealCLR/Resources/Icon128.png differ diff --git a/plugins/UnrealCLR/Runtime/Linux/LICENSE.txt b/plugins/UnrealCLR/Runtime/Linux/LICENSE.txt new file mode 100644 index 00000000..984713a4 --- /dev/null +++ b/plugins/UnrealCLR/Runtime/Linux/LICENSE.txt @@ -0,0 +1,23 @@ +The MIT License (MIT) + +Copyright (c) .NET Foundation and Contributors + +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/plugins/UnrealCLR/Runtime/Linux/ThirdPartyNotices.txt b/plugins/UnrealCLR/Runtime/Linux/ThirdPartyNotices.txt new file mode 100644 index 00000000..b8d644c4 --- /dev/null +++ b/plugins/UnrealCLR/Runtime/Linux/ThirdPartyNotices.txt @@ -0,0 +1,1219 @@ +.NET Runtime uses third-party libraries or other resources that may be +distributed under licenses different than the .NET Runtime software. + +In the event that we accidentally failed to list a required notice, please +bring it to our attention. Post an issue or email us: + + dotnet@microsoft.com + +The attached notices are provided for information only. + +License notice for ASP.NET +------------------------------- + +Copyright (c) .NET Foundation. All rights reserved. +Licensed under the Apache License, Version 2.0. + +Available at +https://github.com/aspnet/AspNetCore/blob/master/LICENSE.txt + +License notice for Slicing-by-8 +------------------------------- + +http://sourceforge.net/projects/slicing-by-8/ + +Copyright (c) 2004-2006 Intel Corporation - All Rights Reserved + + +This software program is licensed subject to the BSD License, available at +http://www.opensource.org/licenses/bsd-license.html. + +License notice for Unicode data +------------------------------- + +https://www.unicode.org/license.html + +Copyright © 1991-2020 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in https://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. + +License notice for Zlib +----------------------- + +https://github.com/madler/zlib +http://zlib.net/zlib_license.html + +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.11, January 15th, 2017 + + Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +*/ + +License notice for Mono +------------------------------- + +http://www.mono-project.com/docs/about-mono/ + +Copyright (c) .NET Foundation Contributors + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License notice for International Organization for Standardization +----------------------------------------------------------------- + +Portions (C) International Organization for Standardization 1986: + Permission to copy in any form is granted for use with + conforming SGML systems and applications as defined in + ISO 8879, provided this notice is included in all copies. + +License notice for Intel +------------------------ + +"Copyright (c) 2004-2006 Intel Corporation - All Rights Reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License notice for Xamarin and Novell +------------------------------------- + +Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Copyright (c) 2011 Novell, Inc (http://www.novell.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Third party notice for W3C +-------------------------- + +"W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE +Status: This license takes effect 13 May, 2015. +This work is being provided by the copyright holders under the following license. +License +By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions. +Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the work or portions thereof, including modifications: +The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. +Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included. +Notice of any changes or modifications, through a copyright statement on the new code or document such as "This software or document includes material copied from or derived from [title and URI of the W3C document]. Copyright © [YEAR] W3C® (MIT, ERCIM, Keio, Beihang)." +Disclaimers +THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT. +The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. Title to copyright in this work will at all times remain with copyright holders." + +License notice for Bit Twiddling Hacks +-------------------------------------- + +Bit Twiddling Hacks + +By Sean Eron Anderson +seander@cs.stanford.edu + +Individually, the code snippets here are in the public domain (unless otherwise +noted) — feel free to use them however you please. The aggregate collection and +descriptions are © 1997-2005 Sean Eron Anderson. The code and descriptions are +distributed in the hope that they will be useful, but WITHOUT ANY WARRANTY and +without even the implied warranty of merchantability or fitness for a particular +purpose. + +License notice for Brotli +-------------------------------------- + +Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +compress_fragment.c: +Copyright (c) 2011, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +""AS IS"" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +decode_fuzzer.c: +Copyright (c) 2015 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +""AS IS"" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." + +License notice for Json.NET +------------------------------- + +https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md + +The MIT License (MIT) + +Copyright (c) 2007 James Newton-King + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License notice for vectorized base64 encoding / decoding +-------------------------------------------------------- + +Copyright (c) 2005-2007, Nick Galbreath +Copyright (c) 2013-2017, Alfred Klomp +Copyright (c) 2015-2017, Wojciech Mula +Copyright (c) 2016-2017, Matthieu Darbois +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +- Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License notice for RFC 3492 +--------------------------- + +The punycode implementation is based on the sample code in RFC 3492 + +Copyright (C) The Internet Society (2003). All Rights Reserved. + +This document and translations of it may be copied and furnished to +others, and derivative works that comment on or otherwise explain it +or assist in its implementation may be prepared, copied, published +and distributed, in whole or in part, without restriction of any +kind, provided that the above copyright notice and this paragraph are +included on all such copies and derivative works. However, this +document itself may not be modified in any way, such as by removing +the copyright notice or references to the Internet Society or other +Internet organizations, except as needed for the purpose of +developing Internet standards in which case the procedures for +copyrights defined in the Internet Standards process must be +followed, or as required to translate it into languages other than +English. + +The limited permissions granted above are perpetual and will not be +revoked by the Internet Society or its successors or assigns. + +This document and the information contained herein is provided on an +"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING +TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING +BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION +HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF +MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + +License notice for Algorithm from Internet Draft document "UUIDs and GUIDs" +--------------------------------------------------------------------------- + +Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc. +Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & +Digital Equipment Corporation, Maynard, Mass. +To anyone who acknowledges that this file is provided "AS IS" +without any express or implied warranty: permission to use, copy, +modify, and distribute this file for any purpose is hereby +granted without fee, provided that the above copyright notices and +this notice appears in all source code copies, and that none of +the names of Open Software Foundation, Inc., Hewlett-Packard +Company, or Digital Equipment Corporation be used in advertising +or publicity pertaining to distribution of the software without +specific, written prior permission. Neither Open Software +Foundation, Inc., Hewlett-Packard Company, Microsoft, nor Digital Equipment +Corporation makes any representations about the suitability of +this software for any purpose. + +Copyright(C) The Internet Society 1997. All Rights Reserved. + +This document and translations of it may be copied and furnished to others, +and derivative works that comment on or otherwise explain it or assist in +its implementation may be prepared, copied, published and distributed, in +whole or in part, without restriction of any kind, provided that the above +copyright notice and this paragraph are included on all such copies and +derivative works.However, this document itself may not be modified in any +way, such as by removing the copyright notice or references to the Internet +Society or other Internet organizations, except as needed for the purpose of +developing Internet standards in which case the procedures for copyrights +defined in the Internet Standards process must be followed, or as required +to translate it into languages other than English. + +The limited permissions granted above are perpetual and will not be revoked +by the Internet Society or its successors or assigns. + +This document and the information contained herein is provided on an "AS IS" +basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE +DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY +RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A +PARTICULAR PURPOSE. + +License notice for Algorithm from RFC 4122 - +A Universally Unique IDentifier (UUID) URN Namespace +---------------------------------------------------- + +Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc. +Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & +Digital Equipment Corporation, Maynard, Mass. +Copyright (c) 1998 Microsoft. +To anyone who acknowledges that this file is provided "AS IS" +without any express or implied warranty: permission to use, copy, +modify, and distribute this file for any purpose is hereby +granted without fee, provided that the above copyright notices and +this notice appears in all source code copies, and that none of +the names of Open Software Foundation, Inc., Hewlett-Packard +Company, Microsoft, or Digital Equipment Corporation be used in +advertising or publicity pertaining to distribution of the software +without specific, written prior permission. Neither Open Software +Foundation, Inc., Hewlett-Packard Company, Microsoft, nor Digital +Equipment Corporation makes any representations about the +suitability of this software for any purpose." + +License notice for The LLVM Compiler Infrastructure +--------------------------------------------------- + +Developed by: + + LLVM Team + + University of Illinois at Urbana-Champaign + + http://llvm.org + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal with +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimers. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimers in the + documentation and/or other materials provided with the distribution. + + * Neither the names of the LLVM Team, University of Illinois at + Urbana-Champaign, nor the names of its contributors may be used to + endorse or promote products derived from this Software without specific + prior written permission. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +SOFTWARE. + +License notice for Bob Jenkins +------------------------------ + +By Bob Jenkins, 1996. bob_jenkins@burtleburtle.net. You may use this +code any way you wish, private, educational, or commercial. It's free. + +License notice for Greg Parker +------------------------------ + +Greg Parker gparker@cs.stanford.edu December 2000 +This code is in the public domain and may be copied or modified without +permission. + +License notice for libunwind based code +---------------------------------------- + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License notice for Printing Floating-Point Numbers (Dragon4) +------------------------------------------------------------ + +/****************************************************************************** + Copyright (c) 2014 Ryan Juckett + http://www.ryanjuckett.com/ + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +******************************************************************************/ + +License notice for Printing Floating-point Numbers (Grisu3) +----------------------------------------------------------- + +Copyright 2012 the V8 project authors. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License notice for xxHash +------------------------- + +xxHash Library +Copyright (c) 2012-2014, Yann Collet +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License notice for Berkeley SoftFloat Release 3e +------------------------------------------------ + +https://github.com/ucb-bar/berkeley-softfloat-3 +https://github.com/ucb-bar/berkeley-softfloat-3/blob/master/COPYING.txt + +License for Berkeley SoftFloat Release 3e + +John R. Hauser +2018 January 20 + +The following applies to the whole of SoftFloat Release 3e as well as to +each source file individually. + +Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the +University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions, and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions, and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE +DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License notice for Xorshift RNGs +-------------------------------- + +George Marsaglia +2003-07-04 +Journal of Statistical Software +License: http://creativecommons.org/licenses/by/3.0/ + +https://www.jstatsoft.org/article/view/v008i14 +https://www.jstatsoft.org/index.php/jss/article/view/v008i14/xorshift.pdf + +License notice for Xorshift (Wikipedia) +--------------------------------------- + +https://en.wikipedia.org/wiki/Xorshift +License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License + +License for fastmod (https://github.com/lemire/fastmod) +-------------------------------------- + + Copyright 2018 Daniel Lemire + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +License notice for The C++ REST SDK +----------------------------------- + +C++ REST SDK + +The MIT License (MIT) + +Copyright (c) Microsoft Corporation + +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +License notice for MessagePack-CSharp +------------------------------------- + +MessagePack for C# + +MIT License + +Copyright (c) 2017 Yoshifumi Kawai + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +License notice for lz4net +------------------------------------- + +lz4net + +Copyright (c) 2013-2017, Milosz Krajewski + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License notice for Nerdbank.Streams +----------------------------------- + +The MIT License (MIT) + +Copyright (c) Andrew Arnott + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +License notice for RapidJSON +---------------------------- + +Tencent is pleased to support the open source community by making RapidJSON available. + +Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. + +Licensed under the MIT License (the "License"); you may not use this file except +in compliance with the License. You may obtain a copy of the License at + +http://opensource.org/licenses/MIT + +Unless required by applicable law or agreed to in writing, software distributed +under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +CONDITIONS OF ANY KIND, either express or implied. See the License for the +specific language governing permissions and limitations under the License. + +License notice for DirectX Math Library +--------------------------------------- + +https://github.com/microsoft/DirectXMath/blob/master/LICENSE + + The MIT License (MIT) + +Copyright (c) 2011-2020 Microsoft Corp + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be included in all copies +or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License notice for ldap4net +--------------------------- + +The MIT License (MIT) + +Copyright (c) 2018 Alexander Chermyanin + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License notice for vectorized sorting code +------------------------------------------ + +MIT License + +Copyright (c) 2020 Dan Shechter + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +License notice for Angular v8.0 +-------------------------------------------- +The MIT License (MIT) +===================== + +Copyright (c) 2010-2019 Google LLC. http://angular.io/license + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +License notice for corefx + +License notice for BedrockFramework +=================================== + +MIT License + +Copyright (c) 2019 David Fowler + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +License notice for Swashbuckle +=================================== + +The MIT License (MIT) + +Copyright (c) 2016 Richard Morris + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +License notice for cli-spinners +============================================= + +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +License notice for dotnet-deb-tool +------------------------------------ + +The MIT License (MIT) + +Copyright (c) .NET Foundation and Contributors + +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +License notice for IIS-Common +------------------------------------ + +MIT License + +Copyright (c) Microsoft Corporation. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE + +License notice for IIS-Setup +------------------------------------ + +MIT License + +Copyright (c) Microsoft Corporation. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE + +License notice for LZMA SDK +--------------------------- + +http://7-zip.org/sdk.html + +LZMA SDK is placed in the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or distribute the +original LZMA SDK code, either in source code form or as a compiled binary, +for any purpose, commercial or non-commercial, and by any means. + +License notice for MonoDevelop +------------------------------ + +Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Copyright (c) 2011 Novell, Inc (http://www.novell.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +License notice for Nuget.Client +------------------------------- + +Copyright (c) .NET Foundation. All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +these files except in compliance with the License. You may obtain a copy of the +License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed +under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +CONDITIONS OF ANY KIND, either express or implied. See the License for the +specific language governing permissions and limitations under the License. + +License notice for Ookie.Dialogs +-------------------------------- + +http://www.ookii.org/software/dialogs/ + +Copyright © Sven Groot (Ookii.org) 2009 +All rights reserved. + + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1) Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +2) Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +3) Neither the name of the ORGANIZATION nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. + +License notice for viz.js +------------------------------------ + +Copyright (c) 2014-2018 Michael Daines + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License notice for West Wind Live Reload ASP.NET Core Middleware +============================================= + + + +--- + +lz4net + +Copyright (c) 2013-2017, Milosz Krajewski + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +MIT License +----------- + +Copyright (c) 2019-2020 West Wind Technologies + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/plugins/UnrealCLR/Runtime/Mac/LICENSE.txt b/plugins/UnrealCLR/Runtime/Mac/LICENSE.txt new file mode 100644 index 00000000..984713a4 --- /dev/null +++ b/plugins/UnrealCLR/Runtime/Mac/LICENSE.txt @@ -0,0 +1,23 @@ +The MIT License (MIT) + +Copyright (c) .NET Foundation and Contributors + +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/plugins/UnrealCLR/Runtime/Mac/ThirdPartyNotices.txt b/plugins/UnrealCLR/Runtime/Mac/ThirdPartyNotices.txt new file mode 100644 index 00000000..b8d644c4 --- /dev/null +++ b/plugins/UnrealCLR/Runtime/Mac/ThirdPartyNotices.txt @@ -0,0 +1,1219 @@ +.NET Runtime uses third-party libraries or other resources that may be +distributed under licenses different than the .NET Runtime software. + +In the event that we accidentally failed to list a required notice, please +bring it to our attention. Post an issue or email us: + + dotnet@microsoft.com + +The attached notices are provided for information only. + +License notice for ASP.NET +------------------------------- + +Copyright (c) .NET Foundation. All rights reserved. +Licensed under the Apache License, Version 2.0. + +Available at +https://github.com/aspnet/AspNetCore/blob/master/LICENSE.txt + +License notice for Slicing-by-8 +------------------------------- + +http://sourceforge.net/projects/slicing-by-8/ + +Copyright (c) 2004-2006 Intel Corporation - All Rights Reserved + + +This software program is licensed subject to the BSD License, available at +http://www.opensource.org/licenses/bsd-license.html. + +License notice for Unicode data +------------------------------- + +https://www.unicode.org/license.html + +Copyright © 1991-2020 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in https://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. + +License notice for Zlib +----------------------- + +https://github.com/madler/zlib +http://zlib.net/zlib_license.html + +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.11, January 15th, 2017 + + Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +*/ + +License notice for Mono +------------------------------- + +http://www.mono-project.com/docs/about-mono/ + +Copyright (c) .NET Foundation Contributors + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License notice for International Organization for Standardization +----------------------------------------------------------------- + +Portions (C) International Organization for Standardization 1986: + Permission to copy in any form is granted for use with + conforming SGML systems and applications as defined in + ISO 8879, provided this notice is included in all copies. + +License notice for Intel +------------------------ + +"Copyright (c) 2004-2006 Intel Corporation - All Rights Reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License notice for Xamarin and Novell +------------------------------------- + +Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Copyright (c) 2011 Novell, Inc (http://www.novell.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Third party notice for W3C +-------------------------- + +"W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE +Status: This license takes effect 13 May, 2015. +This work is being provided by the copyright holders under the following license. +License +By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions. +Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the work or portions thereof, including modifications: +The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. +Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included. +Notice of any changes or modifications, through a copyright statement on the new code or document such as "This software or document includes material copied from or derived from [title and URI of the W3C document]. Copyright © [YEAR] W3C® (MIT, ERCIM, Keio, Beihang)." +Disclaimers +THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT. +The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. Title to copyright in this work will at all times remain with copyright holders." + +License notice for Bit Twiddling Hacks +-------------------------------------- + +Bit Twiddling Hacks + +By Sean Eron Anderson +seander@cs.stanford.edu + +Individually, the code snippets here are in the public domain (unless otherwise +noted) — feel free to use them however you please. The aggregate collection and +descriptions are © 1997-2005 Sean Eron Anderson. The code and descriptions are +distributed in the hope that they will be useful, but WITHOUT ANY WARRANTY and +without even the implied warranty of merchantability or fitness for a particular +purpose. + +License notice for Brotli +-------------------------------------- + +Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +compress_fragment.c: +Copyright (c) 2011, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +""AS IS"" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +decode_fuzzer.c: +Copyright (c) 2015 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +""AS IS"" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." + +License notice for Json.NET +------------------------------- + +https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md + +The MIT License (MIT) + +Copyright (c) 2007 James Newton-King + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License notice for vectorized base64 encoding / decoding +-------------------------------------------------------- + +Copyright (c) 2005-2007, Nick Galbreath +Copyright (c) 2013-2017, Alfred Klomp +Copyright (c) 2015-2017, Wojciech Mula +Copyright (c) 2016-2017, Matthieu Darbois +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +- Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License notice for RFC 3492 +--------------------------- + +The punycode implementation is based on the sample code in RFC 3492 + +Copyright (C) The Internet Society (2003). All Rights Reserved. + +This document and translations of it may be copied and furnished to +others, and derivative works that comment on or otherwise explain it +or assist in its implementation may be prepared, copied, published +and distributed, in whole or in part, without restriction of any +kind, provided that the above copyright notice and this paragraph are +included on all such copies and derivative works. However, this +document itself may not be modified in any way, such as by removing +the copyright notice or references to the Internet Society or other +Internet organizations, except as needed for the purpose of +developing Internet standards in which case the procedures for +copyrights defined in the Internet Standards process must be +followed, or as required to translate it into languages other than +English. + +The limited permissions granted above are perpetual and will not be +revoked by the Internet Society or its successors or assigns. + +This document and the information contained herein is provided on an +"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING +TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING +BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION +HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF +MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + +License notice for Algorithm from Internet Draft document "UUIDs and GUIDs" +--------------------------------------------------------------------------- + +Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc. +Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & +Digital Equipment Corporation, Maynard, Mass. +To anyone who acknowledges that this file is provided "AS IS" +without any express or implied warranty: permission to use, copy, +modify, and distribute this file for any purpose is hereby +granted without fee, provided that the above copyright notices and +this notice appears in all source code copies, and that none of +the names of Open Software Foundation, Inc., Hewlett-Packard +Company, or Digital Equipment Corporation be used in advertising +or publicity pertaining to distribution of the software without +specific, written prior permission. Neither Open Software +Foundation, Inc., Hewlett-Packard Company, Microsoft, nor Digital Equipment +Corporation makes any representations about the suitability of +this software for any purpose. + +Copyright(C) The Internet Society 1997. All Rights Reserved. + +This document and translations of it may be copied and furnished to others, +and derivative works that comment on or otherwise explain it or assist in +its implementation may be prepared, copied, published and distributed, in +whole or in part, without restriction of any kind, provided that the above +copyright notice and this paragraph are included on all such copies and +derivative works.However, this document itself may not be modified in any +way, such as by removing the copyright notice or references to the Internet +Society or other Internet organizations, except as needed for the purpose of +developing Internet standards in which case the procedures for copyrights +defined in the Internet Standards process must be followed, or as required +to translate it into languages other than English. + +The limited permissions granted above are perpetual and will not be revoked +by the Internet Society or its successors or assigns. + +This document and the information contained herein is provided on an "AS IS" +basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE +DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY +RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A +PARTICULAR PURPOSE. + +License notice for Algorithm from RFC 4122 - +A Universally Unique IDentifier (UUID) URN Namespace +---------------------------------------------------- + +Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc. +Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & +Digital Equipment Corporation, Maynard, Mass. +Copyright (c) 1998 Microsoft. +To anyone who acknowledges that this file is provided "AS IS" +without any express or implied warranty: permission to use, copy, +modify, and distribute this file for any purpose is hereby +granted without fee, provided that the above copyright notices and +this notice appears in all source code copies, and that none of +the names of Open Software Foundation, Inc., Hewlett-Packard +Company, Microsoft, or Digital Equipment Corporation be used in +advertising or publicity pertaining to distribution of the software +without specific, written prior permission. Neither Open Software +Foundation, Inc., Hewlett-Packard Company, Microsoft, nor Digital +Equipment Corporation makes any representations about the +suitability of this software for any purpose." + +License notice for The LLVM Compiler Infrastructure +--------------------------------------------------- + +Developed by: + + LLVM Team + + University of Illinois at Urbana-Champaign + + http://llvm.org + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal with +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimers. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimers in the + documentation and/or other materials provided with the distribution. + + * Neither the names of the LLVM Team, University of Illinois at + Urbana-Champaign, nor the names of its contributors may be used to + endorse or promote products derived from this Software without specific + prior written permission. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +SOFTWARE. + +License notice for Bob Jenkins +------------------------------ + +By Bob Jenkins, 1996. bob_jenkins@burtleburtle.net. You may use this +code any way you wish, private, educational, or commercial. It's free. + +License notice for Greg Parker +------------------------------ + +Greg Parker gparker@cs.stanford.edu December 2000 +This code is in the public domain and may be copied or modified without +permission. + +License notice for libunwind based code +---------------------------------------- + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License notice for Printing Floating-Point Numbers (Dragon4) +------------------------------------------------------------ + +/****************************************************************************** + Copyright (c) 2014 Ryan Juckett + http://www.ryanjuckett.com/ + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +******************************************************************************/ + +License notice for Printing Floating-point Numbers (Grisu3) +----------------------------------------------------------- + +Copyright 2012 the V8 project authors. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License notice for xxHash +------------------------- + +xxHash Library +Copyright (c) 2012-2014, Yann Collet +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License notice for Berkeley SoftFloat Release 3e +------------------------------------------------ + +https://github.com/ucb-bar/berkeley-softfloat-3 +https://github.com/ucb-bar/berkeley-softfloat-3/blob/master/COPYING.txt + +License for Berkeley SoftFloat Release 3e + +John R. Hauser +2018 January 20 + +The following applies to the whole of SoftFloat Release 3e as well as to +each source file individually. + +Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the +University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions, and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions, and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE +DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License notice for Xorshift RNGs +-------------------------------- + +George Marsaglia +2003-07-04 +Journal of Statistical Software +License: http://creativecommons.org/licenses/by/3.0/ + +https://www.jstatsoft.org/article/view/v008i14 +https://www.jstatsoft.org/index.php/jss/article/view/v008i14/xorshift.pdf + +License notice for Xorshift (Wikipedia) +--------------------------------------- + +https://en.wikipedia.org/wiki/Xorshift +License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License + +License for fastmod (https://github.com/lemire/fastmod) +-------------------------------------- + + Copyright 2018 Daniel Lemire + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +License notice for The C++ REST SDK +----------------------------------- + +C++ REST SDK + +The MIT License (MIT) + +Copyright (c) Microsoft Corporation + +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +License notice for MessagePack-CSharp +------------------------------------- + +MessagePack for C# + +MIT License + +Copyright (c) 2017 Yoshifumi Kawai + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +License notice for lz4net +------------------------------------- + +lz4net + +Copyright (c) 2013-2017, Milosz Krajewski + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License notice for Nerdbank.Streams +----------------------------------- + +The MIT License (MIT) + +Copyright (c) Andrew Arnott + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +License notice for RapidJSON +---------------------------- + +Tencent is pleased to support the open source community by making RapidJSON available. + +Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. + +Licensed under the MIT License (the "License"); you may not use this file except +in compliance with the License. You may obtain a copy of the License at + +http://opensource.org/licenses/MIT + +Unless required by applicable law or agreed to in writing, software distributed +under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +CONDITIONS OF ANY KIND, either express or implied. See the License for the +specific language governing permissions and limitations under the License. + +License notice for DirectX Math Library +--------------------------------------- + +https://github.com/microsoft/DirectXMath/blob/master/LICENSE + + The MIT License (MIT) + +Copyright (c) 2011-2020 Microsoft Corp + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be included in all copies +or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License notice for ldap4net +--------------------------- + +The MIT License (MIT) + +Copyright (c) 2018 Alexander Chermyanin + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License notice for vectorized sorting code +------------------------------------------ + +MIT License + +Copyright (c) 2020 Dan Shechter + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +License notice for Angular v8.0 +-------------------------------------------- +The MIT License (MIT) +===================== + +Copyright (c) 2010-2019 Google LLC. http://angular.io/license + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +License notice for corefx + +License notice for BedrockFramework +=================================== + +MIT License + +Copyright (c) 2019 David Fowler + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +License notice for Swashbuckle +=================================== + +The MIT License (MIT) + +Copyright (c) 2016 Richard Morris + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +License notice for cli-spinners +============================================= + +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +License notice for dotnet-deb-tool +------------------------------------ + +The MIT License (MIT) + +Copyright (c) .NET Foundation and Contributors + +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +License notice for IIS-Common +------------------------------------ + +MIT License + +Copyright (c) Microsoft Corporation. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE + +License notice for IIS-Setup +------------------------------------ + +MIT License + +Copyright (c) Microsoft Corporation. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE + +License notice for LZMA SDK +--------------------------- + +http://7-zip.org/sdk.html + +LZMA SDK is placed in the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or distribute the +original LZMA SDK code, either in source code form or as a compiled binary, +for any purpose, commercial or non-commercial, and by any means. + +License notice for MonoDevelop +------------------------------ + +Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Copyright (c) 2011 Novell, Inc (http://www.novell.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +License notice for Nuget.Client +------------------------------- + +Copyright (c) .NET Foundation. All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +these files except in compliance with the License. You may obtain a copy of the +License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed +under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +CONDITIONS OF ANY KIND, either express or implied. See the License for the +specific language governing permissions and limitations under the License. + +License notice for Ookie.Dialogs +-------------------------------- + +http://www.ookii.org/software/dialogs/ + +Copyright © Sven Groot (Ookii.org) 2009 +All rights reserved. + + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1) Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +2) Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +3) Neither the name of the ORGANIZATION nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. + +License notice for viz.js +------------------------------------ + +Copyright (c) 2014-2018 Michael Daines + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License notice for West Wind Live Reload ASP.NET Core Middleware +============================================= + + + +--- + +lz4net + +Copyright (c) 2013-2017, Milosz Krajewski + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +MIT License +----------- + +Copyright (c) 2019-2020 West Wind Technologies + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/plugins/UnrealCLR/Runtime/Win64/LICENSE.txt b/plugins/UnrealCLR/Runtime/Win64/LICENSE.txt new file mode 100644 index 00000000..c69e3631 --- /dev/null +++ b/plugins/UnrealCLR/Runtime/Win64/LICENSE.txt @@ -0,0 +1,64 @@ +MICROSOFT SOFTWARE LICENSE TERMS +MICROSOFT .NET LIBRARY +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft + * updates, + * supplements, + * Internet-based services, and + * support services +for this software, unless other terms accompany those items. If so, those terms apply. +BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE. +IF YOU COMPLY WITH THESE LICENSE TERMS, YOU HAVE THE PERPETUAL RIGHTS BELOW. +1. INSTALLATION AND USE RIGHTS. + a. Installation and Use. You may install and use any number of copies of the software to design, develop and test your programs. + b. Third Party Programs. The software may include third party programs that Microsoft, not the third party, licenses to you under this agreement. Notices, if any, for the third party program are included for your information only. +2. DATA. The software may collect information about you and your use of the software, and send that to Microsoft. Microsoft may use this information to improve our products and services. You can learn more about data collection and use in the help documentation and the privacy statement at https://go.microsoft.com/fwlink/?LinkId=528096. Your use of the software operates as your consent to these practices. +3. ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS. + a. DISTRIBUTABLE CODE. The software is comprised of Distributable Code. "Distributable Code" is code that you are permitted to distribute in programs you develop if you comply with the terms below. + i. Right to Use and Distribute. + * You may copy and distribute the object code form of the software. + * Third Party Distribution. You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. + ii. Distribution Requirements. For any Distributable Code you distribute, you must + * add significant primary functionality to it in your programs; + * require distributors and external end users to agree to terms that protect it at least as much as this agreement; + * display your valid copyright notice on your programs; and + * indemnify, defend, and hold harmless Microsoft from any claims, including attorneys' fees, related to the distribution or use of your programs. + iii. Distribution Restrictions. You may not + * alter any copyright, trademark or patent notice in the Distributable Code; + * use Microsoft's trademarks in your programs' names or in a way that suggests your programs come from or are endorsed by Microsoft; + * include Distributable Code in malicious, deceptive or unlawful programs; or + * modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + * the code be disclosed or distributed in source code form; or + * others have the right to modify it. +4. SCOPE OF LICENSE. The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not + * work around any technical limitations in the software; + * reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation; + * publish the software for others to copy; + * rent, lease or lend the software; + * transfer the software or this agreement to any third party; or + * use the software for commercial software hosting services. +5. BACKUP COPY. You may make one backup copy of the software. You may use it only to reinstall the software. +6. DOCUMENTATION. Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. +7. EXPORT RESTRICTIONS. The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see www.microsoft.com/exporting. +8. SUPPORT SERVICES. Because this software is "as is," we may not provide support services for it. +9. ENTIRE AGREEMENT. This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. +10. APPLICABLE LAW. + a. United States. If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. + b. Outside the United States. If you acquired the software in any other country, the laws of that country apply. +11. LEGAL EFFECT. This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. +12. DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED "AS-IS." YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER RIGHTS OR STATUTORY GUARANTEES UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +FOR AUSTRALIA - YOU HAVE STATUTORY GUARANTEES UNDER THE AUSTRALIAN CONSUMER LAW AND NOTHING IN THESE TERMS IS INTENDED TO AFFECT THOSE RIGHTS. +13. LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES. YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. +This limitation applies to + * anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and + * claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. +It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. +Please note: As this software is distributed in Quebec, Canada, some of the clauses in this agreement are provided below in French. +Remarque : Ce logiciel étant distribué au Québec, Canada, certaines des clauses dans ce contrat sont fournies ci-dessous en français. +EXONÉRATION DE GARANTIE. Le logiciel visé par une licence est offert « tel quel ». Toute utilisation de ce logiciel est à votre seule risque et péril. Microsoft n'accorde aucune autre garantie expresse. Vous pouvez bénéficier de droits additionnels en vertu du droit local sur la protection des consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualité marchande, d'adéquation à un usage particulier et d'absence de contrefaçon sont exclues. +LIMITATION DES DOMMAGES-INTÉRÊTS ET EXCLUSION DE RESPONSABILITÉ POUR LES DOMMAGES. Vous pouvez obtenir de Microsoft et de ses fournisseurs une indemnisation en cas de dommages directs uniquement à hauteur de 5,00 $ US. Vous ne pouvez prétendre à aucune indemnisation pour les autres dommages, y compris les dommages spéciaux, indirects ou accessoires et pertes de bénéfices. +Cette limitation concerne : + * tout ce qui est relié au logiciel, aux services ou au contenu (y compris le code) figurant sur des sites Internet tiers ou dans des programmes tiers ; et + * les réclamations au titre de violation de contrat ou de garantie, ou au titre de responsabilité stricte, de négligence ou d'une autre faute dans la limite autorisée par la loi en vigueur. +Elle s'applique également, même si Microsoft connaissait ou devrait connaître l'éventualité d'un tel dommage. Si votre pays n'autorise pas l'exclusion ou la limitation de responsabilité pour les dommages indirects, accessoires ou de quelque nature que ce soit, il se peut que la limitation ou l'exclusion ci-dessus ne s'appliquera pas à votre égard. +EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous pourriez avoir d'autres droits prévus par les lois de votre pays. Le présent contrat ne modifie pas les droits que vous confèrent les lois de votre pays si celles-ci ne le permettent pas. + diff --git a/plugins/UnrealCLR/Runtime/Win64/ThirdPartyNotices.txt b/plugins/UnrealCLR/Runtime/Win64/ThirdPartyNotices.txt new file mode 100644 index 00000000..b8d644c4 --- /dev/null +++ b/plugins/UnrealCLR/Runtime/Win64/ThirdPartyNotices.txt @@ -0,0 +1,1219 @@ +.NET Runtime uses third-party libraries or other resources that may be +distributed under licenses different than the .NET Runtime software. + +In the event that we accidentally failed to list a required notice, please +bring it to our attention. Post an issue or email us: + + dotnet@microsoft.com + +The attached notices are provided for information only. + +License notice for ASP.NET +------------------------------- + +Copyright (c) .NET Foundation. All rights reserved. +Licensed under the Apache License, Version 2.0. + +Available at +https://github.com/aspnet/AspNetCore/blob/master/LICENSE.txt + +License notice for Slicing-by-8 +------------------------------- + +http://sourceforge.net/projects/slicing-by-8/ + +Copyright (c) 2004-2006 Intel Corporation - All Rights Reserved + + +This software program is licensed subject to the BSD License, available at +http://www.opensource.org/licenses/bsd-license.html. + +License notice for Unicode data +------------------------------- + +https://www.unicode.org/license.html + +Copyright © 1991-2020 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in https://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. + +License notice for Zlib +----------------------- + +https://github.com/madler/zlib +http://zlib.net/zlib_license.html + +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.11, January 15th, 2017 + + Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +*/ + +License notice for Mono +------------------------------- + +http://www.mono-project.com/docs/about-mono/ + +Copyright (c) .NET Foundation Contributors + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License notice for International Organization for Standardization +----------------------------------------------------------------- + +Portions (C) International Organization for Standardization 1986: + Permission to copy in any form is granted for use with + conforming SGML systems and applications as defined in + ISO 8879, provided this notice is included in all copies. + +License notice for Intel +------------------------ + +"Copyright (c) 2004-2006 Intel Corporation - All Rights Reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License notice for Xamarin and Novell +------------------------------------- + +Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Copyright (c) 2011 Novell, Inc (http://www.novell.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Third party notice for W3C +-------------------------- + +"W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE +Status: This license takes effect 13 May, 2015. +This work is being provided by the copyright holders under the following license. +License +By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions. +Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the work or portions thereof, including modifications: +The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. +Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included. +Notice of any changes or modifications, through a copyright statement on the new code or document such as "This software or document includes material copied from or derived from [title and URI of the W3C document]. Copyright © [YEAR] W3C® (MIT, ERCIM, Keio, Beihang)." +Disclaimers +THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT. +The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. Title to copyright in this work will at all times remain with copyright holders." + +License notice for Bit Twiddling Hacks +-------------------------------------- + +Bit Twiddling Hacks + +By Sean Eron Anderson +seander@cs.stanford.edu + +Individually, the code snippets here are in the public domain (unless otherwise +noted) — feel free to use them however you please. The aggregate collection and +descriptions are © 1997-2005 Sean Eron Anderson. The code and descriptions are +distributed in the hope that they will be useful, but WITHOUT ANY WARRANTY and +without even the implied warranty of merchantability or fitness for a particular +purpose. + +License notice for Brotli +-------------------------------------- + +Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +compress_fragment.c: +Copyright (c) 2011, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +""AS IS"" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +decode_fuzzer.c: +Copyright (c) 2015 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +""AS IS"" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." + +License notice for Json.NET +------------------------------- + +https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md + +The MIT License (MIT) + +Copyright (c) 2007 James Newton-King + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License notice for vectorized base64 encoding / decoding +-------------------------------------------------------- + +Copyright (c) 2005-2007, Nick Galbreath +Copyright (c) 2013-2017, Alfred Klomp +Copyright (c) 2015-2017, Wojciech Mula +Copyright (c) 2016-2017, Matthieu Darbois +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +- Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License notice for RFC 3492 +--------------------------- + +The punycode implementation is based on the sample code in RFC 3492 + +Copyright (C) The Internet Society (2003). All Rights Reserved. + +This document and translations of it may be copied and furnished to +others, and derivative works that comment on or otherwise explain it +or assist in its implementation may be prepared, copied, published +and distributed, in whole or in part, without restriction of any +kind, provided that the above copyright notice and this paragraph are +included on all such copies and derivative works. However, this +document itself may not be modified in any way, such as by removing +the copyright notice or references to the Internet Society or other +Internet organizations, except as needed for the purpose of +developing Internet standards in which case the procedures for +copyrights defined in the Internet Standards process must be +followed, or as required to translate it into languages other than +English. + +The limited permissions granted above are perpetual and will not be +revoked by the Internet Society or its successors or assigns. + +This document and the information contained herein is provided on an +"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING +TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING +BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION +HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF +MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + +License notice for Algorithm from Internet Draft document "UUIDs and GUIDs" +--------------------------------------------------------------------------- + +Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc. +Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & +Digital Equipment Corporation, Maynard, Mass. +To anyone who acknowledges that this file is provided "AS IS" +without any express or implied warranty: permission to use, copy, +modify, and distribute this file for any purpose is hereby +granted without fee, provided that the above copyright notices and +this notice appears in all source code copies, and that none of +the names of Open Software Foundation, Inc., Hewlett-Packard +Company, or Digital Equipment Corporation be used in advertising +or publicity pertaining to distribution of the software without +specific, written prior permission. Neither Open Software +Foundation, Inc., Hewlett-Packard Company, Microsoft, nor Digital Equipment +Corporation makes any representations about the suitability of +this software for any purpose. + +Copyright(C) The Internet Society 1997. All Rights Reserved. + +This document and translations of it may be copied and furnished to others, +and derivative works that comment on or otherwise explain it or assist in +its implementation may be prepared, copied, published and distributed, in +whole or in part, without restriction of any kind, provided that the above +copyright notice and this paragraph are included on all such copies and +derivative works.However, this document itself may not be modified in any +way, such as by removing the copyright notice or references to the Internet +Society or other Internet organizations, except as needed for the purpose of +developing Internet standards in which case the procedures for copyrights +defined in the Internet Standards process must be followed, or as required +to translate it into languages other than English. + +The limited permissions granted above are perpetual and will not be revoked +by the Internet Society or its successors or assigns. + +This document and the information contained herein is provided on an "AS IS" +basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE +DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY +RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A +PARTICULAR PURPOSE. + +License notice for Algorithm from RFC 4122 - +A Universally Unique IDentifier (UUID) URN Namespace +---------------------------------------------------- + +Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc. +Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & +Digital Equipment Corporation, Maynard, Mass. +Copyright (c) 1998 Microsoft. +To anyone who acknowledges that this file is provided "AS IS" +without any express or implied warranty: permission to use, copy, +modify, and distribute this file for any purpose is hereby +granted without fee, provided that the above copyright notices and +this notice appears in all source code copies, and that none of +the names of Open Software Foundation, Inc., Hewlett-Packard +Company, Microsoft, or Digital Equipment Corporation be used in +advertising or publicity pertaining to distribution of the software +without specific, written prior permission. Neither Open Software +Foundation, Inc., Hewlett-Packard Company, Microsoft, nor Digital +Equipment Corporation makes any representations about the +suitability of this software for any purpose." + +License notice for The LLVM Compiler Infrastructure +--------------------------------------------------- + +Developed by: + + LLVM Team + + University of Illinois at Urbana-Champaign + + http://llvm.org + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal with +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimers. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimers in the + documentation and/or other materials provided with the distribution. + + * Neither the names of the LLVM Team, University of Illinois at + Urbana-Champaign, nor the names of its contributors may be used to + endorse or promote products derived from this Software without specific + prior written permission. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +SOFTWARE. + +License notice for Bob Jenkins +------------------------------ + +By Bob Jenkins, 1996. bob_jenkins@burtleburtle.net. You may use this +code any way you wish, private, educational, or commercial. It's free. + +License notice for Greg Parker +------------------------------ + +Greg Parker gparker@cs.stanford.edu December 2000 +This code is in the public domain and may be copied or modified without +permission. + +License notice for libunwind based code +---------------------------------------- + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License notice for Printing Floating-Point Numbers (Dragon4) +------------------------------------------------------------ + +/****************************************************************************** + Copyright (c) 2014 Ryan Juckett + http://www.ryanjuckett.com/ + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +******************************************************************************/ + +License notice for Printing Floating-point Numbers (Grisu3) +----------------------------------------------------------- + +Copyright 2012 the V8 project authors. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License notice for xxHash +------------------------- + +xxHash Library +Copyright (c) 2012-2014, Yann Collet +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License notice for Berkeley SoftFloat Release 3e +------------------------------------------------ + +https://github.com/ucb-bar/berkeley-softfloat-3 +https://github.com/ucb-bar/berkeley-softfloat-3/blob/master/COPYING.txt + +License for Berkeley SoftFloat Release 3e + +John R. Hauser +2018 January 20 + +The following applies to the whole of SoftFloat Release 3e as well as to +each source file individually. + +Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the +University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions, and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions, and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE +DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License notice for Xorshift RNGs +-------------------------------- + +George Marsaglia +2003-07-04 +Journal of Statistical Software +License: http://creativecommons.org/licenses/by/3.0/ + +https://www.jstatsoft.org/article/view/v008i14 +https://www.jstatsoft.org/index.php/jss/article/view/v008i14/xorshift.pdf + +License notice for Xorshift (Wikipedia) +--------------------------------------- + +https://en.wikipedia.org/wiki/Xorshift +License: https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License + +License for fastmod (https://github.com/lemire/fastmod) +-------------------------------------- + + Copyright 2018 Daniel Lemire + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +License notice for The C++ REST SDK +----------------------------------- + +C++ REST SDK + +The MIT License (MIT) + +Copyright (c) Microsoft Corporation + +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +License notice for MessagePack-CSharp +------------------------------------- + +MessagePack for C# + +MIT License + +Copyright (c) 2017 Yoshifumi Kawai + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +License notice for lz4net +------------------------------------- + +lz4net + +Copyright (c) 2013-2017, Milosz Krajewski + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License notice for Nerdbank.Streams +----------------------------------- + +The MIT License (MIT) + +Copyright (c) Andrew Arnott + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +License notice for RapidJSON +---------------------------- + +Tencent is pleased to support the open source community by making RapidJSON available. + +Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. + +Licensed under the MIT License (the "License"); you may not use this file except +in compliance with the License. You may obtain a copy of the License at + +http://opensource.org/licenses/MIT + +Unless required by applicable law or agreed to in writing, software distributed +under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +CONDITIONS OF ANY KIND, either express or implied. See the License for the +specific language governing permissions and limitations under the License. + +License notice for DirectX Math Library +--------------------------------------- + +https://github.com/microsoft/DirectXMath/blob/master/LICENSE + + The MIT License (MIT) + +Copyright (c) 2011-2020 Microsoft Corp + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be included in all copies +or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License notice for ldap4net +--------------------------- + +The MIT License (MIT) + +Copyright (c) 2018 Alexander Chermyanin + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License notice for vectorized sorting code +------------------------------------------ + +MIT License + +Copyright (c) 2020 Dan Shechter + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +License notice for Angular v8.0 +-------------------------------------------- +The MIT License (MIT) +===================== + +Copyright (c) 2010-2019 Google LLC. http://angular.io/license + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +License notice for corefx + +License notice for BedrockFramework +=================================== + +MIT License + +Copyright (c) 2019 David Fowler + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +License notice for Swashbuckle +=================================== + +The MIT License (MIT) + +Copyright (c) 2016 Richard Morris + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +License notice for cli-spinners +============================================= + +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +License notice for dotnet-deb-tool +------------------------------------ + +The MIT License (MIT) + +Copyright (c) .NET Foundation and Contributors + +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +License notice for IIS-Common +------------------------------------ + +MIT License + +Copyright (c) Microsoft Corporation. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE + +License notice for IIS-Setup +------------------------------------ + +MIT License + +Copyright (c) Microsoft Corporation. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE + +License notice for LZMA SDK +--------------------------- + +http://7-zip.org/sdk.html + +LZMA SDK is placed in the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or distribute the +original LZMA SDK code, either in source code form or as a compiled binary, +for any purpose, commercial or non-commercial, and by any means. + +License notice for MonoDevelop +------------------------------ + +Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Copyright (c) 2011 Novell, Inc (http://www.novell.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +License notice for Nuget.Client +------------------------------- + +Copyright (c) .NET Foundation. All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +these files except in compliance with the License. You may obtain a copy of the +License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed +under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +CONDITIONS OF ANY KIND, either express or implied. See the License for the +specific language governing permissions and limitations under the License. + +License notice for Ookie.Dialogs +-------------------------------- + +http://www.ookii.org/software/dialogs/ + +Copyright © Sven Groot (Ookii.org) 2009 +All rights reserved. + + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1) Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +2) Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +3) Neither the name of the ORGANIZATION nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. + +License notice for viz.js +------------------------------------ + +Copyright (c) 2014-2018 Michael Daines + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License notice for West Wind Live Reload ASP.NET Core Middleware +============================================= + + + +--- + +lz4net + +Copyright (c) 2013-2017, Milosz Krajewski + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +MIT License +----------- + +Copyright (c) 2019-2020 West Wind Technologies + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/plugins/UnrealCLR/Source/Dependencies/CoreCLR/includes/coreclr_delegates.h b/plugins/UnrealCLR/Source/Dependencies/CoreCLR/includes/coreclr_delegates.h new file mode 100644 index 00000000..914ab592 --- /dev/null +++ b/plugins/UnrealCLR/Source/Dependencies/CoreCLR/includes/coreclr_delegates.h @@ -0,0 +1,47 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +#ifndef __CORECLR_DELEGATES_H__ +#define __CORECLR_DELEGATES_H__ + +#include + +#if defined(_WIN32) + #define CORECLR_DELEGATE_CALLTYPE __stdcall + #ifdef _WCHAR_T_DEFINED + typedef wchar_t char_t; + #else + typedef unsigned short char_t; + #endif +#else + #define CORECLR_DELEGATE_CALLTYPE + typedef char char_t; +#endif + +#define UNMANAGEDCALLERSONLY_METHOD ((const char_t*)-1) + +// Signature of delegate returned by coreclr_delegate_type::load_assembly_and_get_function_pointer +typedef int (CORECLR_DELEGATE_CALLTYPE *load_assembly_and_get_function_pointer_fn)( + const char_t *assembly_path /* Fully qualified path to assembly */, + const char_t *type_name /* Assembly qualified type name */, + const char_t *method_name /* Public static method name compatible with delegateType */, + const char_t *delegate_type_name /* Assembly qualified delegate type name or null + or UNMANAGEDCALLERSONLY_METHOD if the method is marked with + the UnmanagedCallersOnlyAttribute. */, + void *reserved /* Extensibility parameter (currently unused and must be 0) */, + /*out*/ void **delegate /* Pointer where to store the function pointer result */); + +// Signature of delegate returned by load_assembly_and_get_function_pointer_fn when delegate_type_name == null (default) +typedef int (CORECLR_DELEGATE_CALLTYPE *component_entry_point_fn)(void *arg, int32_t arg_size_in_bytes); + +typedef int (CORECLR_DELEGATE_CALLTYPE *get_function_pointer_fn)( + const char_t *type_name /* Assembly qualified type name */, + const char_t *method_name /* Public static method name compatible with delegateType */, + const char_t *delegate_type_name /* Assembly qualified delegate type name or null, + or UNMANAGEDCALLERSONLY_METHOD if the method is marked with + the UnmanagedCallersOnlyAttribute. */, + void *load_context /* Extensibility parameter (currently unused and must be 0) */, + void *reserved /* Extensibility parameter (currently unused and must be 0) */, + /*out*/ void **delegate /* Pointer where to store the function pointer result */); + +#endif // __CORECLR_DELEGATES_H__ diff --git a/plugins/UnrealCLR/Source/Dependencies/CoreCLR/includes/hostfxr.h b/plugins/UnrealCLR/Source/Dependencies/CoreCLR/includes/hostfxr.h new file mode 100644 index 00000000..e062193c --- /dev/null +++ b/plugins/UnrealCLR/Source/Dependencies/CoreCLR/includes/hostfxr.h @@ -0,0 +1,288 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +#ifndef __HOSTFXR_H__ +#define __HOSTFXR_H__ + +#include +#include + +#if defined(_WIN32) + #define HOSTFXR_CALLTYPE __cdecl + #ifdef _WCHAR_T_DEFINED + typedef wchar_t char_t; + #else + typedef unsigned short char_t; + #endif +#else + #define HOSTFXR_CALLTYPE + typedef char char_t; +#endif + +enum hostfxr_delegate_type +{ + hdt_com_activation, + hdt_load_in_memory_assembly, + hdt_winrt_activation, + hdt_com_register, + hdt_com_unregister, + hdt_load_assembly_and_get_function_pointer, + hdt_get_function_pointer, +}; + +typedef int32_t(HOSTFXR_CALLTYPE *hostfxr_main_fn)(const int argc, const char_t **argv); +typedef int32_t(HOSTFXR_CALLTYPE *hostfxr_main_startupinfo_fn)( + const int argc, + const char_t **argv, + const char_t *host_path, + const char_t *dotnet_root, + const char_t *app_path); +typedef int32_t(HOSTFXR_CALLTYPE* hostfxr_main_bundle_startupinfo_fn)( + const int argc, + const char_t** argv, + const char_t* host_path, + const char_t* dotnet_root, + const char_t* app_path, + int64_t bundle_header_offset); + +typedef void(HOSTFXR_CALLTYPE *hostfxr_error_writer_fn)(const char_t *message); + +// +// Sets a callback which is to be used to write errors to. +// +// Parameters: +// error_writer +// A callback function which will be invoked every time an error is to be reported. +// Or nullptr to unregister previously registered callback and return to the default behavior. +// Return value: +// The previously registered callback (which is now unregistered), or nullptr if no previous callback +// was registered +// +// The error writer is registered per-thread, so the registration is thread-local. On each thread +// only one callback can be registered. Subsequent registrations overwrite the previous ones. +// +// By default no callback is registered in which case the errors are written to stderr. +// +// Each call to the error writer is sort of like writing a single line (the EOL character is omitted). +// Multiple calls to the error writer may occure for one failure. +// +// If the hostfxr invokes functions in hostpolicy as part of its operation, the error writer +// will be propagated to hostpolicy for the duration of the call. This means that errors from +// both hostfxr and hostpolicy will be reporter through the same error writer. +// +typedef hostfxr_error_writer_fn(HOSTFXR_CALLTYPE *hostfxr_set_error_writer_fn)(hostfxr_error_writer_fn error_writer); + +typedef void* hostfxr_handle; +struct hostfxr_initialize_parameters +{ + size_t size; + const char_t *host_path; + const char_t *dotnet_root; +}; + +// +// Initializes the hosting components for a dotnet command line running an application +// +// Parameters: +// argc +// Number of argv arguments +// argv +// Command-line arguments for running an application (as if through the dotnet executable). +// parameters +// Optional. Additional parameters for initialization +// host_context_handle +// On success, this will be populated with an opaque value representing the initialized host context +// +// Return value: +// Success - Hosting components were successfully initialized +// HostInvalidState - Hosting components are already initialized +// +// This function parses the specified command-line arguments to determine the application to run. It will +// then find the corresponding .runtimeconfig.json and .deps.json with which to resolve frameworks and +// dependencies and prepare everything needed to load the runtime. +// +// This function only supports arguments for running an application. It does not support SDK commands. +// +// This function does not load the runtime. +// +typedef int32_t(HOSTFXR_CALLTYPE *hostfxr_initialize_for_dotnet_command_line_fn)( + int argc, + const char_t **argv, + const struct hostfxr_initialize_parameters *parameters, + /*out*/ hostfxr_handle *host_context_handle); + +// +// Initializes the hosting components using a .runtimeconfig.json file +// +// Parameters: +// runtime_config_path +// Path to the .runtimeconfig.json file +// parameters +// Optional. Additional parameters for initialization +// host_context_handle +// On success, this will be populated with an opaque value representing the initialized host context +// +// Return value: +// Success - Hosting components were successfully initialized +// Success_HostAlreadyInitialized - Config is compatible with already initialized hosting components +// Success_DifferentRuntimeProperties - Config has runtime properties that differ from already initialized hosting components +// CoreHostIncompatibleConfig - Config is incompatible with already initialized hosting components +// +// This function will process the .runtimeconfig.json to resolve frameworks and prepare everything needed +// to load the runtime. It will only process the .deps.json from frameworks (not any app/component that +// may be next to the .runtimeconfig.json). +// +// This function does not load the runtime. +// +// If called when the runtime has already been loaded, this function will check if the specified runtime +// config is compatible with the existing runtime. +// +// Both Success_HostAlreadyInitialized and Success_DifferentRuntimeProperties codes are considered successful +// initializations. In the case of Success_DifferentRuntimeProperties, it is left to the consumer to verify that +// the difference in properties is acceptable. +// +typedef int32_t(HOSTFXR_CALLTYPE *hostfxr_initialize_for_runtime_config_fn)( + const char_t *runtime_config_path, + const struct hostfxr_initialize_parameters *parameters, + /*out*/ hostfxr_handle *host_context_handle); + +// +// Gets the runtime property value for an initialized host context +// +// Parameters: +// host_context_handle +// Handle to the initialized host context +// name +// Runtime property name +// value +// Out parameter. Pointer to a buffer with the property value. +// +// Return value: +// The error code result. +// +// The buffer pointed to by value is owned by the host context. The lifetime of the buffer is only +// guaranteed until any of the below occur: +// - a 'run' method is called for the host context +// - properties are changed via hostfxr_set_runtime_property_value +// - the host context is closed via 'hostfxr_close' +// +// If host_context_handle is nullptr and an active host context exists, this function will get the +// property value for the active host context. +// +typedef int32_t(HOSTFXR_CALLTYPE *hostfxr_get_runtime_property_value_fn)( + const hostfxr_handle host_context_handle, + const char_t *name, + /*out*/ const char_t **value); + +// +// Sets the value of a runtime property for an initialized host context +// +// Parameters: +// host_context_handle +// Handle to the initialized host context +// name +// Runtime property name +// value +// Value to set +// +// Return value: +// The error code result. +// +// Setting properties is only supported for the first host context, before the runtime has been loaded. +// +// If the property already exists in the host context, it will be overwritten. If value is nullptr, the +// property will be removed. +// +typedef int32_t(HOSTFXR_CALLTYPE *hostfxr_set_runtime_property_value_fn)( + const hostfxr_handle host_context_handle, + const char_t *name, + const char_t *value); + +// +// Gets all the runtime properties for an initialized host context +// +// Parameters: +// host_context_handle +// Handle to the initialized host context +// count +// [in] Size of the keys and values buffers +// [out] Number of properties returned (size of keys/values buffers used). If the input value is too +// small or keys/values is nullptr, this is populated with the number of available properties +// keys +// Array of pointers to buffers with runtime property keys +// values +// Array of pointers to buffers with runtime property values +// +// Return value: +// The error code result. +// +// The buffers pointed to by keys and values are owned by the host context. The lifetime of the buffers is only +// guaranteed until any of the below occur: +// - a 'run' method is called for the host context +// - properties are changed via hostfxr_set_runtime_property_value +// - the host context is closed via 'hostfxr_close' +// +// If host_context_handle is nullptr and an active host context exists, this function will get the +// properties for the active host context. +// +typedef int32_t(HOSTFXR_CALLTYPE *hostfxr_get_runtime_properties_fn)( + const hostfxr_handle host_context_handle, + /*inout*/ size_t * count, + /*out*/ const char_t **keys, + /*out*/ const char_t **values); + +// +// Load CoreCLR and run the application for an initialized host context +// +// Parameters: +// host_context_handle +// Handle to the initialized host context +// +// Return value: +// If the app was successfully run, the exit code of the application. Otherwise, the error code result. +// +// The host_context_handle must have been initialized using hostfxr_initialize_for_dotnet_command_line. +// +// This function will not return until the managed application exits. +// +typedef int32_t(HOSTFXR_CALLTYPE *hostfxr_run_app_fn)(const hostfxr_handle host_context_handle); + +// +// Gets a typed delegate from the currently loaded CoreCLR or from a newly created one. +// +// Parameters: +// host_context_handle +// Handle to the initialized host context +// type +// Type of runtime delegate requested +// delegate +// An out parameter that will be assigned the delegate. +// +// Return value: +// The error code result. +// +// If the host_context_handle was initialized using hostfxr_initialize_for_runtime_config, +// then all delegate types are supported. +// If the host_context_handle was initialized using hostfxr_initialize_for_dotnet_command_line, +// then only the following delegate types are currently supported: +// hdt_load_assembly_and_get_function_pointer +// hdt_get_function_pointer +// +typedef int32_t(HOSTFXR_CALLTYPE *hostfxr_get_runtime_delegate_fn)( + const hostfxr_handle host_context_handle, + enum hostfxr_delegate_type type, + /*out*/ void **delegate); + +// +// Closes an initialized host context +// +// Parameters: +// host_context_handle +// Handle to the initialized host context +// +// Return value: +// The error code result. +// +typedef int32_t(HOSTFXR_CALLTYPE *hostfxr_close_fn)(const hostfxr_handle host_context_handle); + +#endif //__HOSTFXR_H__ diff --git a/plugins/UnrealCLR/Source/UnrealCLR/Private/UnrealCLR.cpp b/plugins/UnrealCLR/Source/UnrealCLR/Private/UnrealCLR.cpp new file mode 100644 index 00000000..d451ba5e --- /dev/null +++ b/plugins/UnrealCLR/Source/UnrealCLR/Private/UnrealCLR.cpp @@ -0,0 +1,1512 @@ +/* + * Unreal Engine .NET 5 integration + * Copyright (c) 2021 Stanislav Denisov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "UnrealCLR.h" + +#define LOCTEXT_NAMESPACE "UnrealCLR" + +DEFINE_LOG_CATEGORY(LogUnrealCLR); + +void UnrealCLR::Module::StartupModule() { + #define HOSTFXR_VERSION "5.0.9" + #define HOSTFXR_WINDOWS "/hostfxr.dll" + #define HOSTFXR_MAC "/libhostfxr.dylib" + #define HOSTFXR_LINUX "/libhostfxr.so" + + #ifdef UNREALCLR_WINDOWS + #define HOSTFXR_PATH "Plugins/UnrealCLR/Runtime/Win64/host/fxr/" HOSTFXR_VERSION HOSTFXR_WINDOWS + #define UNREALCLR_PLATFORM_STRING(string) string + #elif defined(UNREALCLR_MAC) + #define HOSTFXR_PATH "Plugins/UnrealCLR/Runtime/Mac/host/fxr/" HOSTFXR_VERSION HOSTFXR_MAC + #define UNREALCLR_PLATFORM_STRING(string) TCHAR_TO_ANSI(string) + #elif defined(UNREALCLR_UNIX) + #define HOSTFXR_PATH "Plugins/UnrealCLR/Runtime/Linux/host/fxr/" HOSTFXR_VERSION HOSTFXR_LINUX + #define UNREALCLR_PLATFORM_STRING(string) TCHAR_TO_ANSI(string) + #else + #error "Unknown platform" + #endif + + UnrealCLR::Status = UnrealCLR::StatusType::Stopped; + UnrealCLR::ProjectPath = FPaths::ConvertRelativePathToFull(FPaths::ProjectDir()); + UnrealCLR::UserAssembliesPath = UnrealCLR::ProjectPath + TEXT("Managed/"); + + OnWorldPostInitializationHandle = FWorldDelegates::OnPostWorldInitialization.AddRaw(this, &UnrealCLR::Module::OnWorldPostInitialization); + OnWorldCleanupHandle = FWorldDelegates::OnWorldCleanup.AddRaw(this, &UnrealCLR::Module::OnWorldCleanup); + + const FString hostfxrPath = UnrealCLR::ProjectPath + TEXT(HOSTFXR_PATH); + const FString assembliesPath = UnrealCLR::ProjectPath + TEXT("Plugins/UnrealCLR/Managed/"); + const FString runtimeConfigPath = assembliesPath + TEXT("UnrealEngine.Runtime.runtimeconfig.json"); + const FString runtimeAssemblyPath = assembliesPath + TEXT("UnrealEngine.Runtime.dll"); + const FString runtimeTypeName = TEXT("UnrealEngine.Runtime.Core, UnrealEngine.Runtime"); + const FString runtimeMethodName = TEXT("ManagedCommand"); + + UE_LOG(LogUnrealCLR, Display, TEXT("%s: Host path set to \"%s\""), ANSI_TO_TCHAR(__FUNCTION__), *hostfxrPath); + + HostfxrLibrary = FPlatformProcess::GetDllHandle(*hostfxrPath); + + if (HostfxrLibrary) { + UE_LOG(LogUnrealCLR, Display, TEXT("%s: Host library loaded successfuly!"), ANSI_TO_TCHAR(__FUNCTION__)); + + hostfxr_set_error_writer_fn HostfxrSetErrorWriter = (hostfxr_set_error_writer_fn)FPlatformProcess::GetDllExport(HostfxrLibrary, TEXT("hostfxr_set_error_writer")); + + if (!HostfxrSetErrorWriter) { + UE_LOG(LogUnrealCLR, Error, TEXT("%s: Unable to locate hostfxr_set_error_writer entry point!"), ANSI_TO_TCHAR(__FUNCTION__)); + + return; + } + + hostfxr_initialize_for_runtime_config_fn HostfxrInitializeForRuntimeConfig = (hostfxr_initialize_for_runtime_config_fn)FPlatformProcess::GetDllExport(HostfxrLibrary, TEXT("hostfxr_initialize_for_runtime_config")); + + if (!HostfxrInitializeForRuntimeConfig) { + UE_LOG(LogUnrealCLR, Error, TEXT("%s: Unable to locate hostfxr_initialize_for_runtime_config entry point!"), ANSI_TO_TCHAR(__FUNCTION__)); + + return; + } + + hostfxr_get_runtime_delegate_fn HostfxrGetRuntimeDelegate = (hostfxr_get_runtime_delegate_fn)FPlatformProcess::GetDllExport(HostfxrLibrary, TEXT("hostfxr_get_runtime_delegate")); + + if (!HostfxrGetRuntimeDelegate) { + UE_LOG(LogUnrealCLR, Error, TEXT("%s: Unable to locate hostfxr_get_runtime_delegate entry point!"), ANSI_TO_TCHAR(__FUNCTION__)); + + return; + } + + hostfxr_close_fn HostfxrClose = (hostfxr_close_fn)FPlatformProcess::GetDllExport(HostfxrLibrary, TEXT("hostfxr_close")); + + if (!HostfxrClose) { + UE_LOG(LogUnrealCLR, Error, TEXT("%s: Unable to locate hostfxr_close entry point!"), ANSI_TO_TCHAR(__FUNCTION__)); + + return; + } + + HostfxrSetErrorWriter(HostError); + + hostfxr_handle HostfxrContext = nullptr; + + if (HostfxrInitializeForRuntimeConfig(UNREALCLR_PLATFORM_STRING(*runtimeConfigPath), nullptr, &HostfxrContext) != 0 || !HostfxrContext) { + UE_LOG(LogUnrealCLR, Error, TEXT("%s: Unable to initialize the host! Please, try to restart the engine."), ANSI_TO_TCHAR(__FUNCTION__)); + + HostfxrClose(HostfxrContext); + + return; + } + + void* hostfxrLoadAssemblyAndGetFunctionPointer = nullptr; + + if (HostfxrGetRuntimeDelegate(HostfxrContext, hdt_load_assembly_and_get_function_pointer, &hostfxrLoadAssemblyAndGetFunctionPointer) != 0 || !HostfxrGetRuntimeDelegate) { + UE_LOG(LogUnrealCLR, Error, TEXT("%s: Unable to get hdt_load_assembly_and_get_function_pointer runtime delegate!"), ANSI_TO_TCHAR(__FUNCTION__)); + + HostfxrClose(HostfxrContext); + + return; + } + + HostfxrClose(HostfxrContext); + + UE_LOG(LogUnrealCLR, Display, TEXT("%s: Host functions loaded successfuly!"), ANSI_TO_TCHAR(__FUNCTION__)); + + load_assembly_and_get_function_pointer_fn HostfxrLoadAssemblyAndGetFunctionPointer = (load_assembly_and_get_function_pointer_fn)hostfxrLoadAssemblyAndGetFunctionPointer; + + if (HostfxrLoadAssemblyAndGetFunctionPointer && HostfxrLoadAssemblyAndGetFunctionPointer(UNREALCLR_PLATFORM_STRING(*runtimeAssemblyPath), UNREALCLR_PLATFORM_STRING(*runtimeTypeName), UNREALCLR_PLATFORM_STRING(*runtimeMethodName), UNMANAGEDCALLERSONLY_METHOD, nullptr, (void**)&UnrealCLR::ManagedCommand) == 0) { + UE_LOG(LogUnrealCLR, Display, TEXT("%s: Host runtime assembly loaded succesfuly!"), ANSI_TO_TCHAR(__FUNCTION__)); + } else { + UE_LOG(LogUnrealCLR, Error, TEXT("%s: Host runtime assembly loading failed!"), ANSI_TO_TCHAR(__FUNCTION__)); + + return; + } + + #if WITH_EDITOR + IPlatformFile& platformFile = FPlatformFileManager::Get().GetPlatformFile(); + + if (!platformFile.DirectoryExists(*UnrealCLR::UserAssembliesPath)) { + platformFile.CreateDirectory(*UnrealCLR::UserAssembliesPath); + + if (!platformFile.DirectoryExists(*UnrealCLR::UserAssembliesPath)) + UE_LOG(LogUnrealCLR, Warning, TEXT("%s: Unable to create a folder for managed assemblies at %s."), ANSI_TO_TCHAR(__FUNCTION__), *UnrealCLR::UserAssembliesPath); + } + #endif + + if (UnrealCLR::ManagedCommand) { + // Framework pointers + + int32 position = 0; + int32 checksum = 0; + + { + int32 head = 0; + Shared::Functions[position++] = Shared::AssertFunctions; + + Shared::AssertFunctions[head++] = (void*)&UnrealCLRFramework::Assert::OutputMessage; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::CommandLineFunctions; + + Shared::CommandLineFunctions[head++] = (void*)&UnrealCLRFramework::CommandLine::Get; + Shared::CommandLineFunctions[head++] = (void*)&UnrealCLRFramework::CommandLine::Set; + Shared::CommandLineFunctions[head++] = (void*)&UnrealCLRFramework::CommandLine::Append; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::DebugFunctions; + + Shared::DebugFunctions[head++] = (void*)&UnrealCLRFramework::Debug::Log; + Shared::DebugFunctions[head++] = (void*)&UnrealCLRFramework::Debug::Exception; + Shared::DebugFunctions[head++] = (void*)&UnrealCLRFramework::Debug::AddOnScreenMessage; + Shared::DebugFunctions[head++] = (void*)&UnrealCLRFramework::Debug::ClearOnScreenMessages; + Shared::DebugFunctions[head++] = (void*)&UnrealCLRFramework::Debug::DrawBox; + Shared::DebugFunctions[head++] = (void*)&UnrealCLRFramework::Debug::DrawCapsule; + Shared::DebugFunctions[head++] = (void*)&UnrealCLRFramework::Debug::DrawCone; + Shared::DebugFunctions[head++] = (void*)&UnrealCLRFramework::Debug::DrawCylinder; + Shared::DebugFunctions[head++] = (void*)&UnrealCLRFramework::Debug::DrawSphere; + Shared::DebugFunctions[head++] = (void*)&UnrealCLRFramework::Debug::DrawLine; + Shared::DebugFunctions[head++] = (void*)&UnrealCLRFramework::Debug::DrawPoint; + Shared::DebugFunctions[head++] = (void*)&UnrealCLRFramework::Debug::FlushPersistentLines; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::ObjectFunctions; + + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::IsPendingKill; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::IsValid; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::Load; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::Rename; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::Invoke; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::ToActor; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::ToComponent; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::GetID; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::GetName; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::GetBool; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::GetByte; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::GetShort; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::GetInt; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::GetLong; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::GetUShort; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::GetUInt; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::GetULong; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::GetFloat; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::GetDouble; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::GetEnum; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::GetString; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::GetText; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::SetBool; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::SetByte; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::SetShort; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::SetInt; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::SetLong; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::SetUShort; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::SetUInt; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::SetULong; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::SetFloat; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::SetDouble; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::SetEnum; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::SetString; + Shared::ObjectFunctions[head++] = (void*)&UnrealCLRFramework::Object::SetText; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::ApplicationFunctions; + + Shared::ApplicationFunctions[head++] = (void*)&UnrealCLRFramework::Application::IsCanEverRender; + Shared::ApplicationFunctions[head++] = (void*)&UnrealCLRFramework::Application::IsPackagedForDistribution; + Shared::ApplicationFunctions[head++] = (void*)&UnrealCLRFramework::Application::IsPackagedForShipping; + Shared::ApplicationFunctions[head++] = (void*)&UnrealCLRFramework::Application::GetProjectDirectory; + Shared::ApplicationFunctions[head++] = (void*)&UnrealCLRFramework::Application::GetDefaultLanguage; + Shared::ApplicationFunctions[head++] = (void*)&UnrealCLRFramework::Application::GetProjectName; + Shared::ApplicationFunctions[head++] = (void*)&UnrealCLRFramework::Application::GetVolumeMultiplier; + Shared::ApplicationFunctions[head++] = (void*)&UnrealCLRFramework::Application::SetProjectName; + Shared::ApplicationFunctions[head++] = (void*)&UnrealCLRFramework::Application::SetVolumeMultiplier; + Shared::ApplicationFunctions[head++] = (void*)&UnrealCLRFramework::Application::RequestExit; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::ConsoleManagerFunctions; + + Shared::ConsoleManagerFunctions[head++] = (void*)&UnrealCLRFramework::ConsoleManager::IsRegisteredVariable; + Shared::ConsoleManagerFunctions[head++] = (void*)&UnrealCLRFramework::ConsoleManager::FindVariable; + Shared::ConsoleManagerFunctions[head++] = (void*)&UnrealCLRFramework::ConsoleManager::RegisterVariableBool; + Shared::ConsoleManagerFunctions[head++] = (void*)&UnrealCLRFramework::ConsoleManager::RegisterVariableInt; + Shared::ConsoleManagerFunctions[head++] = (void*)&UnrealCLRFramework::ConsoleManager::RegisterVariableFloat; + Shared::ConsoleManagerFunctions[head++] = (void*)&UnrealCLRFramework::ConsoleManager::RegisterVariableString; + Shared::ConsoleManagerFunctions[head++] = (void*)&UnrealCLRFramework::ConsoleManager::RegisterCommand; + Shared::ConsoleManagerFunctions[head++] = (void*)&UnrealCLRFramework::ConsoleManager::UnregisterObject; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::EngineFunctions; + + Shared::EngineFunctions[head++] = (void*)&UnrealCLRFramework::Engine::IsSplitScreen; + Shared::EngineFunctions[head++] = (void*)&UnrealCLRFramework::Engine::IsEditor; + Shared::EngineFunctions[head++] = (void*)&UnrealCLRFramework::Engine::IsForegroundWindow; + Shared::EngineFunctions[head++] = (void*)&UnrealCLRFramework::Engine::IsExitRequested; + Shared::EngineFunctions[head++] = (void*)&UnrealCLRFramework::Engine::GetNetMode; + Shared::EngineFunctions[head++] = (void*)&UnrealCLRFramework::Engine::GetFrameNumber; + Shared::EngineFunctions[head++] = (void*)&UnrealCLRFramework::Engine::GetViewportSize; + Shared::EngineFunctions[head++] = (void*)&UnrealCLRFramework::Engine::GetScreenResolution; + Shared::EngineFunctions[head++] = (void*)&UnrealCLRFramework::Engine::GetWindowMode; + Shared::EngineFunctions[head++] = (void*)&UnrealCLRFramework::Engine::GetVersion; + Shared::EngineFunctions[head++] = (void*)&UnrealCLRFramework::Engine::GetMaxFPS; + Shared::EngineFunctions[head++] = (void*)&UnrealCLRFramework::Engine::SetMaxFPS; + Shared::EngineFunctions[head++] = (void*)&UnrealCLRFramework::Engine::SetTitle; + Shared::EngineFunctions[head++] = (void*)&UnrealCLRFramework::Engine::AddActionMapping; + Shared::EngineFunctions[head++] = (void*)&UnrealCLRFramework::Engine::AddAxisMapping; + Shared::EngineFunctions[head++] = (void*)&UnrealCLRFramework::Engine::ForceGarbageCollection; + Shared::EngineFunctions[head++] = (void*)&UnrealCLRFramework::Engine::DelayGarbageCollection; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::HeadMountedDisplayFunctions; + + Shared::HeadMountedDisplayFunctions[head++] = (void*)&UnrealCLRFramework::HeadMountedDisplay::IsConnected; + Shared::HeadMountedDisplayFunctions[head++] = (void*)&UnrealCLRFramework::HeadMountedDisplay::GetEnabled; + Shared::HeadMountedDisplayFunctions[head++] = (void*)&UnrealCLRFramework::HeadMountedDisplay::GetLowPersistenceMode; + Shared::HeadMountedDisplayFunctions[head++] = (void*)&UnrealCLRFramework::HeadMountedDisplay::GetDeviceName; + Shared::HeadMountedDisplayFunctions[head++] = (void*)&UnrealCLRFramework::HeadMountedDisplay::SetEnable; + Shared::HeadMountedDisplayFunctions[head++] = (void*)&UnrealCLRFramework::HeadMountedDisplay::SetLowPersistenceMode; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::WorldFunctions; + + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::ForEachActor; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::GetActorCount; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::GetDeltaSeconds; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::GetRealTimeSeconds; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::GetTimeSeconds; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::GetCurrentLevelName; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::GetSimulatePhysics; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::GetWorldOrigin; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::GetActor; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::GetActorByTag; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::GetActorByID; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::GetFirstPlayerController; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::GetGameMode; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::SetOnActorBeginOverlapCallback; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::SetOnActorBeginCursorOverCallback; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::SetOnActorEndCursorOverCallback; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::SetOnActorClickedCallback; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::SetOnActorReleasedCallback; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::SetOnActorEndOverlapCallback; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::SetOnActorHitCallback; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::SetOnComponentBeginOverlapCallback; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::SetOnComponentEndOverlapCallback; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::SetOnComponentHitCallback; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::SetOnComponentBeginCursorOverCallback; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::SetOnComponentEndCursorOverCallback; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::SetOnComponentClickedCallback; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::SetOnComponentReleasedCallback; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::SetSimulatePhysics; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::SetGravity; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::SetWorldOrigin; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::OpenLevel; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::LineTraceTestByChannel; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::LineTraceTestByProfile; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::LineTraceSingleByChannel; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::LineTraceSingleByProfile; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::SweepTestByChannel; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::SweepTestByProfile; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::SweepSingleByChannel; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::SweepSingleByProfile; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::OverlapAnyTestByChannel; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::OverlapAnyTestByProfile; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::OverlapBlockingTestByChannel; + Shared::WorldFunctions[head++] = (void*)&UnrealCLRFramework::World::OverlapBlockingTestByProfile; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::AssetFunctions; + + Shared::AssetFunctions[head++] = (void*)&UnrealCLRFramework::Asset::IsValid; + Shared::AssetFunctions[head++] = (void*)&UnrealCLRFramework::Asset::GetName; + Shared::AssetFunctions[head++] = (void*)&UnrealCLRFramework::Asset::GetPath; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::AssetRegistryFunctions; + + Shared::AssetRegistryFunctions[head++] = (void*)&UnrealCLRFramework::AssetRegistry::Get; + Shared::AssetRegistryFunctions[head++] = (void*)&UnrealCLRFramework::AssetRegistry::HasAssets; + Shared::AssetRegistryFunctions[head++] = (void*)&UnrealCLRFramework::AssetRegistry::ForEachAsset; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::BlueprintFunctions; + + Shared::BlueprintFunctions[head++] = (void*)&UnrealCLRFramework::Blueprint::IsValidActorClass; + Shared::BlueprintFunctions[head++] = (void*)&UnrealCLRFramework::Blueprint::IsValidComponentClass; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::ConsoleObjectFunctions; + + Shared::ConsoleObjectFunctions[head++] = (void*)&UnrealCLRFramework::ConsoleObject::IsBool; + Shared::ConsoleObjectFunctions[head++] = (void*)&UnrealCLRFramework::ConsoleObject::IsInt; + Shared::ConsoleObjectFunctions[head++] = (void*)&UnrealCLRFramework::ConsoleObject::IsFloat; + Shared::ConsoleObjectFunctions[head++] = (void*)&UnrealCLRFramework::ConsoleObject::IsString; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::ConsoleVariableFunctions; + + Shared::ConsoleVariableFunctions[head++] = (void*)&UnrealCLRFramework::ConsoleVariable::GetBool; + Shared::ConsoleVariableFunctions[head++] = (void*)&UnrealCLRFramework::ConsoleVariable::GetInt; + Shared::ConsoleVariableFunctions[head++] = (void*)&UnrealCLRFramework::ConsoleVariable::GetFloat; + Shared::ConsoleVariableFunctions[head++] = (void*)&UnrealCLRFramework::ConsoleVariable::GetString; + Shared::ConsoleVariableFunctions[head++] = (void*)&UnrealCLRFramework::ConsoleVariable::SetBool; + Shared::ConsoleVariableFunctions[head++] = (void*)&UnrealCLRFramework::ConsoleVariable::SetInt; + Shared::ConsoleVariableFunctions[head++] = (void*)&UnrealCLRFramework::ConsoleVariable::SetFloat; + Shared::ConsoleVariableFunctions[head++] = (void*)&UnrealCLRFramework::ConsoleVariable::SetString; + Shared::ConsoleVariableFunctions[head++] = (void*)&UnrealCLRFramework::ConsoleVariable::SetOnChangedCallback; + Shared::ConsoleVariableFunctions[head++] = (void*)&UnrealCLRFramework::ConsoleVariable::ClearOnChangedCallback; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::ActorFunctions; + + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::IsPendingKill; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::IsRootComponentMovable; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::IsOverlappingActor; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::ForEachComponent; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::ForEachAttachedActor; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::ForEachChildActor; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::ForEachOverlappingActor; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::Spawn; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::Destroy; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::Rename; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::Hide; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::TeleportTo; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::GetComponent; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::GetComponentByTag; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::GetComponentByID; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::GetRootComponent; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::GetInputComponent; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::GetCreationTime; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::GetBlockInput; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::GetDistanceTo; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::GetHorizontalDistanceTo; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::GetBounds; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::GetEyesViewPoint; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::SetRootComponent; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::SetInputComponent; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::SetBlockInput; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::SetLifeSpan; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::SetEnableInput; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::SetEnableCollision; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::AddTag; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::RemoveTag; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::HasTag; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::RegisterEvent; + Shared::ActorFunctions[head++] = (void*)&UnrealCLRFramework::Actor::UnregisterEvent; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::GameModeBaseFunctions; + + Shared::GameModeBaseFunctions[head++] = (void*)&UnrealCLRFramework::GameModeBase::GetUseSeamlessTravel; + Shared::GameModeBaseFunctions[head++] = (void*)&UnrealCLRFramework::GameModeBase::SetUseSeamlessTravel; + Shared::GameModeBaseFunctions[head++] = (void*)&UnrealCLRFramework::GameModeBase::SwapPlayerControllers; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::PawnFunctions; + + Shared::PawnFunctions[head++] = (void*)&UnrealCLRFramework::Pawn::IsControlled; + Shared::PawnFunctions[head++] = (void*)&UnrealCLRFramework::Pawn::IsPlayerControlled; + Shared::PawnFunctions[head++] = (void*)&UnrealCLRFramework::Pawn::GetAutoPossessAI; + Shared::PawnFunctions[head++] = (void*)&UnrealCLRFramework::Pawn::GetAutoPossessPlayer; + Shared::PawnFunctions[head++] = (void*)&UnrealCLRFramework::Pawn::GetUseControllerRotationYaw; + Shared::PawnFunctions[head++] = (void*)&UnrealCLRFramework::Pawn::GetUseControllerRotationPitch; + Shared::PawnFunctions[head++] = (void*)&UnrealCLRFramework::Pawn::GetUseControllerRotationRoll; + Shared::PawnFunctions[head++] = (void*)&UnrealCLRFramework::Pawn::GetGravityDirection; + Shared::PawnFunctions[head++] = (void*)&UnrealCLRFramework::Pawn::GetAIController; + Shared::PawnFunctions[head++] = (void*)&UnrealCLRFramework::Pawn::GetPlayerController; + Shared::PawnFunctions[head++] = (void*)&UnrealCLRFramework::Pawn::SetAutoPossessAI; + Shared::PawnFunctions[head++] = (void*)&UnrealCLRFramework::Pawn::SetAutoPossessPlayer; + Shared::PawnFunctions[head++] = (void*)&UnrealCLRFramework::Pawn::SetUseControllerRotationYaw; + Shared::PawnFunctions[head++] = (void*)&UnrealCLRFramework::Pawn::SetUseControllerRotationPitch; + Shared::PawnFunctions[head++] = (void*)&UnrealCLRFramework::Pawn::SetUseControllerRotationRoll; + Shared::PawnFunctions[head++] = (void*)&UnrealCLRFramework::Pawn::AddControllerYawInput; + Shared::PawnFunctions[head++] = (void*)&UnrealCLRFramework::Pawn::AddControllerPitchInput; + Shared::PawnFunctions[head++] = (void*)&UnrealCLRFramework::Pawn::AddControllerRollInput; + Shared::PawnFunctions[head++] = (void*)&UnrealCLRFramework::Pawn::AddMovementInput; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::CharacterFunctions; + + Shared::CharacterFunctions[head++] = (void*)&UnrealCLRFramework::Character::IsCrouched; + Shared::CharacterFunctions[head++] = (void*)&UnrealCLRFramework::Character::CanCrouch; + Shared::CharacterFunctions[head++] = (void*)&UnrealCLRFramework::Character::CanJump; + Shared::CharacterFunctions[head++] = (void*)&UnrealCLRFramework::Character::CheckJumpInput; + Shared::CharacterFunctions[head++] = (void*)&UnrealCLRFramework::Character::ClearJumpInput; + Shared::CharacterFunctions[head++] = (void*)&UnrealCLRFramework::Character::Launch; + Shared::CharacterFunctions[head++] = (void*)&UnrealCLRFramework::Character::Crouch; + Shared::CharacterFunctions[head++] = (void*)&UnrealCLRFramework::Character::StopCrouching; + Shared::CharacterFunctions[head++] = (void*)&UnrealCLRFramework::Character::Jump; + Shared::CharacterFunctions[head++] = (void*)&UnrealCLRFramework::Character::StopJumping; + Shared::CharacterFunctions[head++] = (void*)&UnrealCLRFramework::Character::SetOnLandedCallback; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::ControllerFunctions; + + Shared::ControllerFunctions[head++] = (void*)&UnrealCLRFramework::Controller::IsLookInputIgnored; + Shared::ControllerFunctions[head++] = (void*)&UnrealCLRFramework::Controller::IsMoveInputIgnored; + Shared::ControllerFunctions[head++] = (void*)&UnrealCLRFramework::Controller::IsPlayerController; + Shared::ControllerFunctions[head++] = (void*)&UnrealCLRFramework::Controller::GetPawn; + Shared::ControllerFunctions[head++] = (void*)&UnrealCLRFramework::Controller::GetCharacter; + Shared::ControllerFunctions[head++] = (void*)&UnrealCLRFramework::Controller::GetViewTarget; + Shared::ControllerFunctions[head++] = (void*)&UnrealCLRFramework::Controller::GetControlRotation; + Shared::ControllerFunctions[head++] = (void*)&UnrealCLRFramework::Controller::GetDesiredRotation; + Shared::ControllerFunctions[head++] = (void*)&UnrealCLRFramework::Controller::LineOfSightTo; + Shared::ControllerFunctions[head++] = (void*)&UnrealCLRFramework::Controller::SetControlRotation; + Shared::ControllerFunctions[head++] = (void*)&UnrealCLRFramework::Controller::SetInitialLocationAndRotation; + Shared::ControllerFunctions[head++] = (void*)&UnrealCLRFramework::Controller::SetIgnoreLookInput; + Shared::ControllerFunctions[head++] = (void*)&UnrealCLRFramework::Controller::SetIgnoreMoveInput; + Shared::ControllerFunctions[head++] = (void*)&UnrealCLRFramework::Controller::ResetIgnoreLookInput; + Shared::ControllerFunctions[head++] = (void*)&UnrealCLRFramework::Controller::ResetIgnoreMoveInput; + Shared::ControllerFunctions[head++] = (void*)&UnrealCLRFramework::Controller::Possess; + Shared::ControllerFunctions[head++] = (void*)&UnrealCLRFramework::Controller::Unpossess; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::AIControllerFunctions; + + Shared::AIControllerFunctions[head++] = (void*)&UnrealCLRFramework::AIController::ClearFocus; + Shared::AIControllerFunctions[head++] = (void*)&UnrealCLRFramework::AIController::GetFocalPoint; + Shared::AIControllerFunctions[head++] = (void*)&UnrealCLRFramework::AIController::SetFocalPoint; + Shared::AIControllerFunctions[head++] = (void*)&UnrealCLRFramework::AIController::GetFocusActor; + Shared::AIControllerFunctions[head++] = (void*)&UnrealCLRFramework::AIController::GetAllowStrafe; + Shared::AIControllerFunctions[head++] = (void*)&UnrealCLRFramework::AIController::SetAllowStrafe; + Shared::AIControllerFunctions[head++] = (void*)&UnrealCLRFramework::AIController::SetFocus; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::PlayerControllerFunctions; + + Shared::PlayerControllerFunctions[head++] = (void*)&UnrealCLRFramework::PlayerController::IsPaused; + Shared::PlayerControllerFunctions[head++] = (void*)&UnrealCLRFramework::PlayerController::GetShowMouseCursor; + Shared::PlayerControllerFunctions[head++] = (void*)&UnrealCLRFramework::PlayerController::GetEnableClickEvents; + Shared::PlayerControllerFunctions[head++] = (void*)&UnrealCLRFramework::PlayerController::GetEnableMouseOverEvents; + Shared::PlayerControllerFunctions[head++] = (void*)&UnrealCLRFramework::PlayerController::GetMousePosition; + Shared::PlayerControllerFunctions[head++] = (void*)&UnrealCLRFramework::PlayerController::GetPlayer; + Shared::PlayerControllerFunctions[head++] = (void*)&UnrealCLRFramework::PlayerController::GetPlayerInput; + Shared::PlayerControllerFunctions[head++] = (void*)&UnrealCLRFramework::PlayerController::GetHitResultAtScreenPosition; + Shared::PlayerControllerFunctions[head++] = (void*)&UnrealCLRFramework::PlayerController::GetHitResultUnderCursor; + Shared::PlayerControllerFunctions[head++] = (void*)&UnrealCLRFramework::PlayerController::SetShowMouseCursor; + Shared::PlayerControllerFunctions[head++] = (void*)&UnrealCLRFramework::PlayerController::SetEnableClickEvents; + Shared::PlayerControllerFunctions[head++] = (void*)&UnrealCLRFramework::PlayerController::SetEnableMouseOverEvents; + Shared::PlayerControllerFunctions[head++] = (void*)&UnrealCLRFramework::PlayerController::SetMousePosition; + Shared::PlayerControllerFunctions[head++] = (void*)&UnrealCLRFramework::PlayerController::ConsoleCommand; + Shared::PlayerControllerFunctions[head++] = (void*)&UnrealCLRFramework::PlayerController::SetPause; + Shared::PlayerControllerFunctions[head++] = (void*)&UnrealCLRFramework::PlayerController::SetViewTarget; + Shared::PlayerControllerFunctions[head++] = (void*)&UnrealCLRFramework::PlayerController::SetViewTargetWithBlend; + Shared::PlayerControllerFunctions[head++] = (void*)&UnrealCLRFramework::PlayerController::AddYawInput; + Shared::PlayerControllerFunctions[head++] = (void*)&UnrealCLRFramework::PlayerController::AddPitchInput; + Shared::PlayerControllerFunctions[head++] = (void*)&UnrealCLRFramework::PlayerController::AddRollInput; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::VolumeFunctions; + + Shared::VolumeFunctions[head++] = (void*)&UnrealCLRFramework::Volume::EncompassesPoint; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::PostProcessVolumeFunctions; + + Shared::PostProcessVolumeFunctions[head++] = (void*)&UnrealCLRFramework::PostProcessVolume::GetEnabled; + Shared::PostProcessVolumeFunctions[head++] = (void*)&UnrealCLRFramework::PostProcessVolume::GetBlendRadius; + Shared::PostProcessVolumeFunctions[head++] = (void*)&UnrealCLRFramework::PostProcessVolume::GetBlendWeight; + Shared::PostProcessVolumeFunctions[head++] = (void*)&UnrealCLRFramework::PostProcessVolume::GetUnbound; + Shared::PostProcessVolumeFunctions[head++] = (void*)&UnrealCLRFramework::PostProcessVolume::GetPriority; + Shared::PostProcessVolumeFunctions[head++] = (void*)&UnrealCLRFramework::PostProcessVolume::SetEnabled; + Shared::PostProcessVolumeFunctions[head++] = (void*)&UnrealCLRFramework::PostProcessVolume::SetBlendRadius; + Shared::PostProcessVolumeFunctions[head++] = (void*)&UnrealCLRFramework::PostProcessVolume::SetBlendWeight; + Shared::PostProcessVolumeFunctions[head++] = (void*)&UnrealCLRFramework::PostProcessVolume::SetUnbound; + Shared::PostProcessVolumeFunctions[head++] = (void*)&UnrealCLRFramework::PostProcessVolume::SetPriority; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::SoundBaseFunctions; + + Shared::SoundBaseFunctions[head++] = (void*)&UnrealCLRFramework::SoundBase::GetDuration; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::SoundWaveFunctions; + + Shared::SoundWaveFunctions[head++] = (void*)&UnrealCLRFramework::SoundWave::GetLoop; + Shared::SoundWaveFunctions[head++] = (void*)&UnrealCLRFramework::SoundWave::SetLoop; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::AnimationInstanceFunctions; + + Shared::AnimationInstanceFunctions[head++] = (void*)&UnrealCLRFramework::AnimationInstance::GetCurrentActiveMontage; + Shared::AnimationInstanceFunctions[head++] = (void*)&UnrealCLRFramework::AnimationInstance::IsPlaying; + Shared::AnimationInstanceFunctions[head++] = (void*)&UnrealCLRFramework::AnimationInstance::GetPlayRate; + Shared::AnimationInstanceFunctions[head++] = (void*)&UnrealCLRFramework::AnimationInstance::GetPosition; + Shared::AnimationInstanceFunctions[head++] = (void*)&UnrealCLRFramework::AnimationInstance::GetBlendTime; + Shared::AnimationInstanceFunctions[head++] = (void*)&UnrealCLRFramework::AnimationInstance::GetCurrentSection; + Shared::AnimationInstanceFunctions[head++] = (void*)&UnrealCLRFramework::AnimationInstance::SetPlayRate; + Shared::AnimationInstanceFunctions[head++] = (void*)&UnrealCLRFramework::AnimationInstance::SetPosition; + Shared::AnimationInstanceFunctions[head++] = (void*)&UnrealCLRFramework::AnimationInstance::SetNextSection; + Shared::AnimationInstanceFunctions[head++] = (void*)&UnrealCLRFramework::AnimationInstance::PlayMontage; + Shared::AnimationInstanceFunctions[head++] = (void*)&UnrealCLRFramework::AnimationInstance::PauseMontage; + Shared::AnimationInstanceFunctions[head++] = (void*)&UnrealCLRFramework::AnimationInstance::ResumeMontage; + Shared::AnimationInstanceFunctions[head++] = (void*)&UnrealCLRFramework::AnimationInstance::StopMontage; + Shared::AnimationInstanceFunctions[head++] = (void*)&UnrealCLRFramework::AnimationInstance::JumpToSection; + Shared::AnimationInstanceFunctions[head++] = (void*)&UnrealCLRFramework::AnimationInstance::JumpToSectionsEnd; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::PlayerFunctions; + + Shared::PlayerFunctions[head++] = (void*)&UnrealCLRFramework::Player::GetPlayerController; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::PlayerInputFunctions; + + Shared::PlayerInputFunctions[head++] = (void*)&UnrealCLRFramework::PlayerInput::IsKeyPressed; + Shared::PlayerInputFunctions[head++] = (void*)&UnrealCLRFramework::PlayerInput::GetTimeKeyPressed; + Shared::PlayerInputFunctions[head++] = (void*)&UnrealCLRFramework::PlayerInput::GetMouseSensitivity; + Shared::PlayerInputFunctions[head++] = (void*)&UnrealCLRFramework::PlayerInput::SetMouseSensitivity; + Shared::PlayerInputFunctions[head++] = (void*)&UnrealCLRFramework::PlayerInput::AddActionMapping; + Shared::PlayerInputFunctions[head++] = (void*)&UnrealCLRFramework::PlayerInput::AddAxisMapping; + Shared::PlayerInputFunctions[head++] = (void*)&UnrealCLRFramework::PlayerInput::RemoveActionMapping; + Shared::PlayerInputFunctions[head++] = (void*)&UnrealCLRFramework::PlayerInput::RemoveAxisMapping; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::FontFunctions; + + Shared::FontFunctions[head++] = (void*)&UnrealCLRFramework::Font::GetStringSize; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::Texture2DFunctions; + + Shared::Texture2DFunctions[head++] = (void*)&UnrealCLRFramework::Texture2D::CreateFromFile; + Shared::Texture2DFunctions[head++] = (void*)&UnrealCLRFramework::Texture2D::CreateFromBuffer; + Shared::Texture2DFunctions[head++] = (void*)&UnrealCLRFramework::Texture2D::HasAlphaChannel; + Shared::Texture2DFunctions[head++] = (void*)&UnrealCLRFramework::Texture2D::GetSize; + Shared::Texture2DFunctions[head++] = (void*)&UnrealCLRFramework::Texture2D::GetPixelFormat; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::ActorComponentFunctions; + + Shared::ActorComponentFunctions[head++] = (void*)&UnrealCLRFramework::ActorComponent::IsOwnerSelected; + Shared::ActorComponentFunctions[head++] = (void*)&UnrealCLRFramework::ActorComponent::GetOwner; + Shared::ActorComponentFunctions[head++] = (void*)&UnrealCLRFramework::ActorComponent::Destroy; + Shared::ActorComponentFunctions[head++] = (void*)&UnrealCLRFramework::ActorComponent::AddTag; + Shared::ActorComponentFunctions[head++] = (void*)&UnrealCLRFramework::ActorComponent::RemoveTag; + Shared::ActorComponentFunctions[head++] = (void*)&UnrealCLRFramework::ActorComponent::HasTag; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::InputComponentFunctions; + + Shared::InputComponentFunctions[head++] = (void*)&UnrealCLRFramework::InputComponent::HasBindings; + Shared::InputComponentFunctions[head++] = (void*)&UnrealCLRFramework::InputComponent::GetActionBindingsNumber; + Shared::InputComponentFunctions[head++] = (void*)&UnrealCLRFramework::InputComponent::ClearActionBindings; + Shared::InputComponentFunctions[head++] = (void*)&UnrealCLRFramework::InputComponent::BindAction; + Shared::InputComponentFunctions[head++] = (void*)&UnrealCLRFramework::InputComponent::BindAxis; + Shared::InputComponentFunctions[head++] = (void*)&UnrealCLRFramework::InputComponent::RemoveActionBinding; + Shared::InputComponentFunctions[head++] = (void*)&UnrealCLRFramework::InputComponent::GetBlockInput; + Shared::InputComponentFunctions[head++] = (void*)&UnrealCLRFramework::InputComponent::SetBlockInput; + Shared::InputComponentFunctions[head++] = (void*)&UnrealCLRFramework::InputComponent::GetPriority; + Shared::InputComponentFunctions[head++] = (void*)&UnrealCLRFramework::InputComponent::SetPriority; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::SceneComponentFunctions; + + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::IsAttachedToComponent; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::IsAttachedToActor; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::IsVisible; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::IsSocketExists; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::HasAnySockets; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::CanAttachAsChild; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::ForEachAttachedChild; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::Create; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::AttachToComponent; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::DetachFromComponent; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::Activate; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::Deactivate; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::UpdateToWorld; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::AddLocalOffset; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::AddLocalRotation; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::AddRelativeLocation; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::AddRelativeRotation; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::AddLocalTransform; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::AddWorldOffset; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::AddWorldRotation; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::AddWorldTransform; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::GetAttachedSocketName; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::GetBounds; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::GetSocketLocation; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::GetSocketRotation; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::GetComponentVelocity; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::GetComponentLocation; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::GetComponentRotation; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::GetComponentScale; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::GetComponentTransform; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::GetForwardVector; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::GetRightVector; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::GetUpVector; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::SetMobility; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::SetVisibility; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::SetRelativeLocation; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::SetRelativeRotation; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::SetRelativeTransform; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::SetWorldLocation; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::SetWorldRotation; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::SetWorldScale; + Shared::SceneComponentFunctions[head++] = (void*)&UnrealCLRFramework::SceneComponent::SetWorldTransform; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::AudioComponentFunctions; + + Shared::AudioComponentFunctions[head++] = (void*)&UnrealCLRFramework::AudioComponent::IsPlaying; + Shared::AudioComponentFunctions[head++] = (void*)&UnrealCLRFramework::AudioComponent::GetPaused; + Shared::AudioComponentFunctions[head++] = (void*)&UnrealCLRFramework::AudioComponent::SetSound; + Shared::AudioComponentFunctions[head++] = (void*)&UnrealCLRFramework::AudioComponent::SetPaused; + Shared::AudioComponentFunctions[head++] = (void*)&UnrealCLRFramework::AudioComponent::Play; + Shared::AudioComponentFunctions[head++] = (void*)&UnrealCLRFramework::AudioComponent::Stop; + Shared::AudioComponentFunctions[head++] = (void*)&UnrealCLRFramework::AudioComponent::FadeIn; + Shared::AudioComponentFunctions[head++] = (void*)&UnrealCLRFramework::AudioComponent::FadeOut; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::CameraComponentFunctions; + + Shared::CameraComponentFunctions[head++] = (void*)&UnrealCLRFramework::CameraComponent::GetConstrainAspectRatio; + Shared::CameraComponentFunctions[head++] = (void*)&UnrealCLRFramework::CameraComponent::GetAspectRatio; + Shared::CameraComponentFunctions[head++] = (void*)&UnrealCLRFramework::CameraComponent::GetFieldOfView; + Shared::CameraComponentFunctions[head++] = (void*)&UnrealCLRFramework::CameraComponent::GetOrthoFarClipPlane; + Shared::CameraComponentFunctions[head++] = (void*)&UnrealCLRFramework::CameraComponent::GetOrthoNearClipPlane; + Shared::CameraComponentFunctions[head++] = (void*)&UnrealCLRFramework::CameraComponent::GetOrthoWidth; + Shared::CameraComponentFunctions[head++] = (void*)&UnrealCLRFramework::CameraComponent::GetLockToHeadMountedDisplay; + Shared::CameraComponentFunctions[head++] = (void*)&UnrealCLRFramework::CameraComponent::SetProjectionMode; + Shared::CameraComponentFunctions[head++] = (void*)&UnrealCLRFramework::CameraComponent::SetConstrainAspectRatio; + Shared::CameraComponentFunctions[head++] = (void*)&UnrealCLRFramework::CameraComponent::SetAspectRatio; + Shared::CameraComponentFunctions[head++] = (void*)&UnrealCLRFramework::CameraComponent::SetFieldOfView; + Shared::CameraComponentFunctions[head++] = (void*)&UnrealCLRFramework::CameraComponent::SetOrthoFarClipPlane; + Shared::CameraComponentFunctions[head++] = (void*)&UnrealCLRFramework::CameraComponent::SetOrthoNearClipPlane; + Shared::CameraComponentFunctions[head++] = (void*)&UnrealCLRFramework::CameraComponent::SetOrthoWidth; + Shared::CameraComponentFunctions[head++] = (void*)&UnrealCLRFramework::CameraComponent::SetLockToHeadMountedDisplay; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::ChildActorComponentFunctions; + + Shared::ChildActorComponentFunctions[head++] = (void*)&UnrealCLRFramework::ChildActorComponent::GetChildActor; + Shared::ChildActorComponentFunctions[head++] = (void*)&UnrealCLRFramework::ChildActorComponent::SetChildActor; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::SpringArmComponentFunctions; + + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::IsCollisionFixApplied; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::GetDrawDebugLagMarkers; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::GetCollisionTest; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::GetCameraPositionLag; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::GetCameraRotationLag; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::GetCameraLagSubstepping; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::GetInheritPitch; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::GetInheritRoll; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::GetInheritYaw; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::GetCameraLagMaxDistance; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::GetCameraLagMaxTimeStep; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::GetCameraPositionLagSpeed; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::GetCameraRotationLagSpeed; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::GetProbeChannel; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::GetProbeSize; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::GetSocketOffset; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::GetTargetArmLength; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::GetTargetOffset; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::GetUnfixedCameraPosition; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::GetDesiredRotation; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::GetTargetRotation; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::GetUsePawnControlRotation; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::SetDrawDebugLagMarkers; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::SetCollisionTest; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::SetCameraPositionLag; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::SetCameraRotationLag; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::SetCameraLagSubstepping; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::SetInheritPitch; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::SetInheritRoll; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::SetInheritYaw; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::SetCameraLagMaxDistance; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::SetCameraLagMaxTimeStep; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::SetCameraPositionLagSpeed; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::SetCameraRotationLagSpeed; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::SetProbeChannel; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::SetProbeSize; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::SetSocketOffset; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::SetTargetArmLength; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::SetTargetOffset; + Shared::SpringArmComponentFunctions[head++] = (void*)&UnrealCLRFramework::SpringArmComponent::SetUsePawnControlRotation; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::PostProcessComponentFunctions; + + Shared::PostProcessComponentFunctions[head++] = (void*)&UnrealCLRFramework::PostProcessComponent::GetEnabled; + Shared::PostProcessComponentFunctions[head++] = (void*)&UnrealCLRFramework::PostProcessComponent::GetBlendRadius; + Shared::PostProcessComponentFunctions[head++] = (void*)&UnrealCLRFramework::PostProcessComponent::GetBlendWeight; + Shared::PostProcessComponentFunctions[head++] = (void*)&UnrealCLRFramework::PostProcessComponent::GetUnbound; + Shared::PostProcessComponentFunctions[head++] = (void*)&UnrealCLRFramework::PostProcessComponent::GetPriority; + Shared::PostProcessComponentFunctions[head++] = (void*)&UnrealCLRFramework::PostProcessComponent::SetEnabled; + Shared::PostProcessComponentFunctions[head++] = (void*)&UnrealCLRFramework::PostProcessComponent::SetBlendRadius; + Shared::PostProcessComponentFunctions[head++] = (void*)&UnrealCLRFramework::PostProcessComponent::SetBlendWeight; + Shared::PostProcessComponentFunctions[head++] = (void*)&UnrealCLRFramework::PostProcessComponent::SetUnbound; + Shared::PostProcessComponentFunctions[head++] = (void*)&UnrealCLRFramework::PostProcessComponent::SetPriority; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::PrimitiveComponentFunctions; + + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::IsGravityEnabled; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::IsOverlappingComponent; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::ForEachOverlappingComponent; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::AddAngularImpulseInDegrees; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::AddAngularImpulseInRadians; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::AddForce; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::AddForceAtLocation; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::AddImpulse; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::AddImpulseAtLocation; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::AddRadialForce; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::AddRadialImpulse; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::AddTorqueInDegrees; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::AddTorqueInRadians; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::GetMass; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::GetPhysicsLinearVelocity; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::GetPhysicsLinearVelocityAtPoint; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::GetPhysicsAngularVelocityInDegrees; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::GetPhysicsAngularVelocityInRadians; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::GetCastShadow; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::GetOnlyOwnerSee; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::GetOwnerNoSee; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::GetIgnoreRadialForce; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::GetIgnoreRadialImpulse; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::GetMaterial; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::GetMaterialsNumber; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::GetDistanceToCollision; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::GetSquaredDistanceToCollision; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::GetAngularDamping; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::GetLinearDamping; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::SetGenerateOverlapEvents; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::SetGenerateHitEvents; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::SetMass; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::SetCenterOfMass; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::SetPhysicsLinearVelocity; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::SetPhysicsAngularVelocityInDegrees; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::SetPhysicsAngularVelocityInRadians; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::SetPhysicsMaxAngularVelocityInDegrees; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::SetPhysicsMaxAngularVelocityInRadians; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::SetCastShadow; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::SetOnlyOwnerSee; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::SetOwnerNoSee; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::SetIgnoreRadialForce; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::SetIgnoreRadialImpulse; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::SetMaterial; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::SetSimulatePhysics; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::SetAngularDamping; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::SetLinearDamping; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::SetEnableGravity; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::SetCollisionMode; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::SetCollisionChannel; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::SetCollisionProfileName; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::SetCollisionResponseToChannel; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::SetCollisionResponseToAllChannels; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::SetIgnoreActorWhenMoving; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::SetIgnoreComponentWhenMoving; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::ClearMoveIgnoreActors; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::ClearMoveIgnoreComponents; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::CreateAndSetMaterialInstanceDynamic; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::RegisterEvent; + Shared::PrimitiveComponentFunctions[head++] = (void*)&UnrealCLRFramework::PrimitiveComponent::UnregisterEvent; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::ShapeComponentFunctions; + + Shared::ShapeComponentFunctions[head++] = (void*)&UnrealCLRFramework::ShapeComponent::GetDynamicObstacle; + Shared::ShapeComponentFunctions[head++] = (void*)&UnrealCLRFramework::ShapeComponent::GetShapeColor; + Shared::ShapeComponentFunctions[head++] = (void*)&UnrealCLRFramework::ShapeComponent::SetDynamicObstacle; + Shared::ShapeComponentFunctions[head++] = (void*)&UnrealCLRFramework::ShapeComponent::SetShapeColor; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::BoxComponentFunctions; + + Shared::BoxComponentFunctions[head++] = (void*)&UnrealCLRFramework::BoxComponent::GetScaledBoxExtent; + Shared::BoxComponentFunctions[head++] = (void*)&UnrealCLRFramework::BoxComponent::GetUnscaledBoxExtent; + Shared::BoxComponentFunctions[head++] = (void*)&UnrealCLRFramework::BoxComponent::SetBoxExtent; + Shared::BoxComponentFunctions[head++] = (void*)&UnrealCLRFramework::BoxComponent::InitBoxExtent; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::SphereComponentFunctions; + + Shared::SphereComponentFunctions[head++] = (void*)&UnrealCLRFramework::SphereComponent::GetScaledSphereRadius; + Shared::SphereComponentFunctions[head++] = (void*)&UnrealCLRFramework::SphereComponent::GetUnscaledSphereRadius; + Shared::SphereComponentFunctions[head++] = (void*)&UnrealCLRFramework::SphereComponent::GetShapeScale; + Shared::SphereComponentFunctions[head++] = (void*)&UnrealCLRFramework::SphereComponent::SetSphereRadius; + Shared::SphereComponentFunctions[head++] = (void*)&UnrealCLRFramework::SphereComponent::InitSphereRadius; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::CapsuleComponentFunctions; + + Shared::CapsuleComponentFunctions[head++] = (void*)&UnrealCLRFramework::CapsuleComponent::GetScaledCapsuleRadius; + Shared::CapsuleComponentFunctions[head++] = (void*)&UnrealCLRFramework::CapsuleComponent::GetUnscaledCapsuleRadius; + Shared::CapsuleComponentFunctions[head++] = (void*)&UnrealCLRFramework::CapsuleComponent::GetShapeScale; + Shared::CapsuleComponentFunctions[head++] = (void*)&UnrealCLRFramework::CapsuleComponent::GetScaledCapsuleSize; + Shared::CapsuleComponentFunctions[head++] = (void*)&UnrealCLRFramework::CapsuleComponent::GetUnscaledCapsuleSize; + Shared::CapsuleComponentFunctions[head++] = (void*)&UnrealCLRFramework::CapsuleComponent::SetCapsuleRadius; + Shared::CapsuleComponentFunctions[head++] = (void*)&UnrealCLRFramework::CapsuleComponent::SetCapsuleSize; + Shared::CapsuleComponentFunctions[head++] = (void*)&UnrealCLRFramework::CapsuleComponent::InitCapsuleSize; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::MeshComponentFunctions; + + Shared::MeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::MeshComponent::IsValidMaterialSlotName; + Shared::MeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::MeshComponent::GetMaterialIndex; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::TextRenderComponentFunctions; + + Shared::TextRenderComponentFunctions[head++] = (void*)&UnrealCLRFramework::TextRenderComponent::SetFont; + Shared::TextRenderComponentFunctions[head++] = (void*)&UnrealCLRFramework::TextRenderComponent::SetText; + Shared::TextRenderComponentFunctions[head++] = (void*)&UnrealCLRFramework::TextRenderComponent::SetTextMaterial; + Shared::TextRenderComponentFunctions[head++] = (void*)&UnrealCLRFramework::TextRenderComponent::SetTextRenderColor; + Shared::TextRenderComponentFunctions[head++] = (void*)&UnrealCLRFramework::TextRenderComponent::SetHorizontalAlignment; + Shared::TextRenderComponentFunctions[head++] = (void*)&UnrealCLRFramework::TextRenderComponent::SetHorizontalSpacingAdjustment; + Shared::TextRenderComponentFunctions[head++] = (void*)&UnrealCLRFramework::TextRenderComponent::SetVerticalAlignment; + Shared::TextRenderComponentFunctions[head++] = (void*)&UnrealCLRFramework::TextRenderComponent::SetVerticalSpacingAdjustment; + Shared::TextRenderComponentFunctions[head++] = (void*)&UnrealCLRFramework::TextRenderComponent::SetScale; + Shared::TextRenderComponentFunctions[head++] = (void*)&UnrealCLRFramework::TextRenderComponent::SetWorldSize; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::LightComponentBaseFunctions; + + Shared::LightComponentBaseFunctions[head++] = (void*)&UnrealCLRFramework::LightComponentBase::GetIntensity; + Shared::LightComponentBaseFunctions[head++] = (void*)&UnrealCLRFramework::LightComponentBase::GetCastShadows; + Shared::LightComponentBaseFunctions[head++] = (void*)&UnrealCLRFramework::LightComponentBase::SetCastShadows; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::LightComponentFunctions; + + Shared::LightComponentFunctions[head++] = (void*)&UnrealCLRFramework::LightComponent::SetIntensity; + Shared::LightComponentFunctions[head++] = (void*)&UnrealCLRFramework::LightComponent::SetLightColor; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::MotionControllerComponentFunctions; + + Shared::MotionControllerComponentFunctions[head++] = (void*)&UnrealCLRFramework::MotionControllerComponent::IsTracked; + Shared::MotionControllerComponentFunctions[head++] = (void*)&UnrealCLRFramework::MotionControllerComponent::GetDisplayDeviceModel; + Shared::MotionControllerComponentFunctions[head++] = (void*)&UnrealCLRFramework::MotionControllerComponent::GetDisableLowLatencyUpdate; + Shared::MotionControllerComponentFunctions[head++] = (void*)&UnrealCLRFramework::MotionControllerComponent::GetTrackingSource; + Shared::MotionControllerComponentFunctions[head++] = (void*)&UnrealCLRFramework::MotionControllerComponent::SetDisplayDeviceModel; + Shared::MotionControllerComponentFunctions[head++] = (void*)&UnrealCLRFramework::MotionControllerComponent::SetDisableLowLatencyUpdate; + Shared::MotionControllerComponentFunctions[head++] = (void*)&UnrealCLRFramework::MotionControllerComponent::SetTrackingSource; + Shared::MotionControllerComponentFunctions[head++] = (void*)&UnrealCLRFramework::MotionControllerComponent::SetTrackingMotionSource; + Shared::MotionControllerComponentFunctions[head++] = (void*)&UnrealCLRFramework::MotionControllerComponent::SetAssociatedPlayerIndex; + Shared::MotionControllerComponentFunctions[head++] = (void*)&UnrealCLRFramework::MotionControllerComponent::SetCustomDisplayMesh; + Shared::MotionControllerComponentFunctions[head++] = (void*)&UnrealCLRFramework::MotionControllerComponent::SetDisplayModelSource; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::StaticMeshComponentFunctions; + + Shared::StaticMeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::StaticMeshComponent::GetLocalBounds; + Shared::StaticMeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::StaticMeshComponent::GetStaticMesh; + Shared::StaticMeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::StaticMeshComponent::SetStaticMesh; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::InstancedStaticMeshComponentFunctions; + + Shared::InstancedStaticMeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::InstancedStaticMeshComponent::GetInstanceCount; + Shared::InstancedStaticMeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::InstancedStaticMeshComponent::GetInstanceTransform; + Shared::InstancedStaticMeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::InstancedStaticMeshComponent::AddInstance; + Shared::InstancedStaticMeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::InstancedStaticMeshComponent::AddInstances; + Shared::InstancedStaticMeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::InstancedStaticMeshComponent::UpdateInstanceTransform; + Shared::InstancedStaticMeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::InstancedStaticMeshComponent::BatchUpdateInstanceTransforms; + Shared::InstancedStaticMeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::InstancedStaticMeshComponent::RemoveInstance; + Shared::InstancedStaticMeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::InstancedStaticMeshComponent::ClearInstances; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::HierarchicalInstancedStaticMeshComponentFunctions; + + Shared::HierarchicalInstancedStaticMeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::HierarchicalInstancedStaticMeshComponent::GetDisableCollision; + Shared::HierarchicalInstancedStaticMeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::HierarchicalInstancedStaticMeshComponent::SetDisableCollision; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::SkinnedMeshComponentFunctions; + + Shared::SkinnedMeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::SkinnedMeshComponent::GetBonesNumber; + Shared::SkinnedMeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::SkinnedMeshComponent::GetBoneIndex; + Shared::SkinnedMeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::SkinnedMeshComponent::GetBoneName; + Shared::SkinnedMeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::SkinnedMeshComponent::GetBoneTransform; + Shared::SkinnedMeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::SkinnedMeshComponent::SetSkeletalMesh; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::SkeletalMeshComponentFunctions; + + Shared::SkeletalMeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::SkeletalMeshComponent::IsPlaying; + Shared::SkeletalMeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::SkeletalMeshComponent::GetAnimationInstance; + Shared::SkeletalMeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::SkeletalMeshComponent::SetAnimation; + Shared::SkeletalMeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::SkeletalMeshComponent::SetAnimationMode; + Shared::SkeletalMeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::SkeletalMeshComponent::SetAnimationBlueprint; + Shared::SkeletalMeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::SkeletalMeshComponent::Play; + Shared::SkeletalMeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::SkeletalMeshComponent::PlayAnimation; + Shared::SkeletalMeshComponentFunctions[head++] = (void*)&UnrealCLRFramework::SkeletalMeshComponent::Stop; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::SplineComponentFunctions; + + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::IsClosedLoop; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetDuration; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetSplinePointType; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetSplinePointsNumber; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetSplineSegmentsNumber; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetTangentAtDistanceAlongSpline; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetTangentAtSplinePoint; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetTangentAtTime; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetTransformAtDistanceAlongSpline; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetTransformAtSplinePoint; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetArriveTangentAtSplinePoint; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetDefaultUpVector; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetDirectionAtDistanceAlongSpline; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetDirectionAtSplinePoint; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetDirectionAtTime; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetDistanceAlongSplineAtSplinePoint; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetLeaveTangentAtSplinePoint; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetLocationAndTangentAtSplinePoint; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetLocationAtDistanceAlongSpline; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetLocationAtSplinePoint; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetLocationAtTime; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetRightVectorAtDistanceAlongSpline; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetRightVectorAtSplinePoint; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetRightVectorAtTime; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetRollAtDistanceAlongSpline; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetRollAtSplinePoint; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetRollAtTime; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetRotationAtDistanceAlongSpline; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetRotationAtSplinePoint; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetRotationAtTime; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetScaleAtDistanceAlongSpline; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetScaleAtSplinePoint; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetScaleAtTime; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetSplineLength; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetTransformAtTime; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetUpVectorAtDistanceAlongSpline; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetUpVectorAtSplinePoint; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::GetUpVectorAtTime; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::SetDuration; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::SetSplinePointType; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::SetClosedLoop; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::SetDefaultUpVector; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::SetLocationAtSplinePoint; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::SetTangentAtSplinePoint; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::SetTangentsAtSplinePoint; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::SetUpVectorAtSplinePoint; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::AddSplinePoint; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::AddSplinePointAtIndex; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::ClearSplinePoints; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::FindDirectionClosestToWorldLocation; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::FindLocationClosestToWorldLocation; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::FindUpVectorClosestToWorldLocation; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::FindRightVectorClosestToWorldLocation; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::FindRollClosestToWorldLocation; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::FindScaleClosestToWorldLocation; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::FindTangentClosestToWorldLocation; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::FindTransformClosestToWorldLocation; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::RemoveSplinePoint; + Shared::SplineComponentFunctions[head++] = (void*)&UnrealCLRFramework::SplineComponent::UpdateSpline; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::RadialForceComponentFunctions; + + Shared::RadialForceComponentFunctions[head++] = (void*)&UnrealCLRFramework::RadialForceComponent::GetIgnoreOwningActor; + Shared::RadialForceComponentFunctions[head++] = (void*)&UnrealCLRFramework::RadialForceComponent::GetImpulseVelocityChange; + Shared::RadialForceComponentFunctions[head++] = (void*)&UnrealCLRFramework::RadialForceComponent::GetLinearFalloff; + Shared::RadialForceComponentFunctions[head++] = (void*)&UnrealCLRFramework::RadialForceComponent::GetForceStrength; + Shared::RadialForceComponentFunctions[head++] = (void*)&UnrealCLRFramework::RadialForceComponent::GetImpulseStrength; + Shared::RadialForceComponentFunctions[head++] = (void*)&UnrealCLRFramework::RadialForceComponent::GetRadius; + Shared::RadialForceComponentFunctions[head++] = (void*)&UnrealCLRFramework::RadialForceComponent::SetIgnoreOwningActor; + Shared::RadialForceComponentFunctions[head++] = (void*)&UnrealCLRFramework::RadialForceComponent::SetImpulseVelocityChange; + Shared::RadialForceComponentFunctions[head++] = (void*)&UnrealCLRFramework::RadialForceComponent::SetLinearFalloff; + Shared::RadialForceComponentFunctions[head++] = (void*)&UnrealCLRFramework::RadialForceComponent::SetForceStrength; + Shared::RadialForceComponentFunctions[head++] = (void*)&UnrealCLRFramework::RadialForceComponent::SetImpulseStrength; + Shared::RadialForceComponentFunctions[head++] = (void*)&UnrealCLRFramework::RadialForceComponent::SetRadius; + Shared::RadialForceComponentFunctions[head++] = (void*)&UnrealCLRFramework::RadialForceComponent::AddCollisionChannelToAffect; + Shared::RadialForceComponentFunctions[head++] = (void*)&UnrealCLRFramework::RadialForceComponent::FireImpulse; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::MaterialInterfaceFunctions; + + Shared::MaterialInterfaceFunctions[head++] = (void*)&UnrealCLRFramework::MaterialInterface::IsTwoSided; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::MaterialFunctions; + + Shared::MaterialFunctions[head++] = (void*)&UnrealCLRFramework::Material::IsDefaultMaterial; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::MaterialInstanceFunctions; + + Shared::MaterialInstanceFunctions[head++] = (void*)&UnrealCLRFramework::MaterialInstance::IsChildOf; + Shared::MaterialInstanceFunctions[head++] = (void*)&UnrealCLRFramework::MaterialInstance::GetParent; + + checksum += head; + } + + { + int32 head = 0; + Shared::Functions[position++] = Shared::MaterialInstanceDynamicFunctions; + + Shared::MaterialInstanceDynamicFunctions[head++] = (void*)&UnrealCLRFramework::MaterialInstanceDynamic::ClearParameterValues; + Shared::MaterialInstanceDynamicFunctions[head++] = (void*)&UnrealCLRFramework::MaterialInstanceDynamic::SetTextureParameterValue; + Shared::MaterialInstanceDynamicFunctions[head++] = (void*)&UnrealCLRFramework::MaterialInstanceDynamic::SetVectorParameterValue; + Shared::MaterialInstanceDynamicFunctions[head++] = (void*)&UnrealCLRFramework::MaterialInstanceDynamic::SetScalarParameterValue; + + checksum += head; + } + + checksum += position; + + // Runtime pointers + + Shared::RuntimeFunctions[0] = (void*)&UnrealCLR::Module::Exception; + Shared::RuntimeFunctions[1] = (void*)&UnrealCLR::Module::Log; + + constexpr void* functions[3] = { + Shared::RuntimeFunctions, + Shared::Events, + Shared::Functions + }; + + if (reinterpret_cast(UnrealCLR::ManagedCommand(UnrealCLR::Command(functions, checksum))) == 0xF) { + UE_LOG(LogUnrealCLR, Display, TEXT("%s: Host runtime assembly initialized succesfuly!"), ANSI_TO_TCHAR(__FUNCTION__)); + } else { + UE_LOG(LogUnrealCLR, Error, TEXT("%s: Host runtime assembly initialization failed!"), ANSI_TO_TCHAR(__FUNCTION__)); + + return; + } + + UnrealCLR::Engine::Manager = NewObject(); + UnrealCLR::Engine::Manager->AddToRoot(); + UnrealCLR::Status = UnrealCLR::StatusType::Idle; + + UE_LOG(LogUnrealCLR, Display, TEXT("%s: Host loaded succesfuly!"), ANSI_TO_TCHAR(__FUNCTION__)); + } else { + UE_LOG(LogUnrealCLR, Error, TEXT("%s: Host runtime assembly unable to load the initialization function!"), ANSI_TO_TCHAR(__FUNCTION__)); + + return; + } + } else { + UE_LOG(LogUnrealCLR, Error, TEXT("%s: Host loading failed!"), ANSI_TO_TCHAR(__FUNCTION__)); + } +} + +void UnrealCLR::Module::ShutdownModule() { + if (UnrealCLR::Engine::Manager) { + UnrealCLR::Engine::Manager->RemoveFromRoot(); + UnrealCLR::Engine::Manager = nullptr; + } + + FWorldDelegates::OnPostWorldInitialization.Remove(OnWorldPostInitializationHandle); + FWorldDelegates::OnWorldCleanup.Remove(OnWorldCleanupHandle); + + FPlatformProcess::FreeDllHandle(HostfxrLibrary); +} + +void UnrealCLR::Module::OnWorldPostInitialization(UWorld* World, const UWorld::InitializationValues InitializationValues) { + if (World->IsGameWorld()) { + if (UnrealCLR::WorldTickState == TickState::Stopped) { + UnrealCLR::Engine::World = World; + + if (UnrealCLR::Status != UnrealCLR::StatusType::Stopped) { + UnrealCLR::ManagedCommand(UnrealCLR::Command(CommandType::LoadAssemblies)); + UnrealCLR::Status = UnrealCLR::StatusType::Running; + + for (TActorIterator currentActor(UnrealCLR::Engine::World); currentActor; ++currentActor) { + RegisterTickFunction(OnPrePhysicsTickFunction, TG_PrePhysics, *currentActor); + RegisterTickFunction(OnDuringPhysicsTickFunction, TG_DuringPhysics, *currentActor); + RegisterTickFunction(OnPostPhysicsTickFunction, TG_PostPhysics, *currentActor); + RegisterTickFunction(OnPostUpdateTickFunction, TG_PostUpdateWork, *currentActor); + + UnrealCLR::WorldTickState = UnrealCLR::TickState::Registered; + + if (UnrealCLR::Shared::Events[OnWorldBegin]) + UnrealCLR::ManagedCommand(UnrealCLR::Command(UnrealCLR::Shared::Events[OnWorldBegin])); + + break; + } + } else { + #if WITH_EDITOR + FNotificationInfo notificationInfo(FText::FromString(TEXT("UnrealCLR host is not initialized! Please, check logs and try to restart the engine."))); + + notificationInfo.ExpireDuration = 5.0f; + + FSlateNotificationManager::Get().AddNotification(notificationInfo); + #endif + } + } + } +} + +void UnrealCLR::Module::OnWorldCleanup(UWorld* World, bool SessionEnded, bool CleanupResources) { + if (World->IsGameWorld() && World == UnrealCLR::Engine::World && UnrealCLR::WorldTickState != UnrealCLR::TickState::Stopped) { + if (UnrealCLR::Status != UnrealCLR::StatusType::Stopped) { + if (UnrealCLR::Shared::Events[OnWorldEnd]) + UnrealCLR::ManagedCommand(UnrealCLR::Command(UnrealCLR::Shared::Events[OnWorldEnd])); + + OnPrePhysicsTickFunction.UnRegisterTickFunction(); + OnDuringPhysicsTickFunction.UnRegisterTickFunction(); + OnPostPhysicsTickFunction.UnRegisterTickFunction(); + OnPostUpdateTickFunction.UnRegisterTickFunction(); + + UnrealCLR::ManagedCommand(UnrealCLR::Command(CommandType::UnloadAssemblies)); + UnrealCLR::Status = UnrealCLR::StatusType::Idle; + } + + UnrealCLR::Engine::World = nullptr; + UnrealCLR::WorldTickState = UnrealCLR::TickState::Stopped; + + FMemory::Memset(UnrealCLR::Shared::Events, 0, sizeof(UnrealCLR::Shared::Events)); + } +} + +void UnrealCLR::Module::RegisterTickFunction(FTickFunction& TickFunction, ETickingGroup TickGroup, AWorldSettings* LevelActor) { + TickFunction.bCanEverTick = true; + TickFunction.bTickEvenWhenPaused = false; + TickFunction.bStartWithTickEnabled = true; + TickFunction.bHighPriority = true; + TickFunction.bAllowTickOnDedicatedServer = true; + TickFunction.bRunOnAnyThread = false; + TickFunction.TickGroup = TickGroup; + TickFunction.RegisterTickFunction(UnrealCLR::Engine::World->PersistentLevel); + LevelActor->PrimaryActorTick.AddPrerequisite(UnrealCLR::Engine::Manager, TickFunction); +} + +void UnrealCLR::Module::HostError(const char_t* Message) { + UE_LOG(LogUnrealCLR, Error, TEXT("%s: %s"), ANSI_TO_TCHAR(__FUNCTION__), *FString(Message)); +} + +void UnrealCLR::Module::Exception(const char* Message) { + FString message(ANSI_TO_TCHAR(Message)); + + UE_LOG(LogUnrealCLR, Error, TEXT("%s: %s"), ANSI_TO_TCHAR(__FUNCTION__), *message); + + GEngine->AddOnScreenDebugMessage((uint64)-1, 10.0f, FColor::Red, *message); +} + +void UnrealCLR::Module::Log(UnrealCLR::LogLevel Level, const char* Message) { + #define UNREALCLR_LOG(Verbosity) UE_LOG(LogUnrealCLR, Verbosity, TEXT("%s: %s"), ANSI_TO_TCHAR(__FUNCTION__), *message); + + FString message(ANSI_TO_TCHAR(Message)); + + if (Level == UnrealCLR::LogLevel::Display) { + UNREALCLR_LOG(Display); + } else if (Level == UnrealCLR::LogLevel::Warning) { + UNREALCLR_LOG(Warning); + + GEngine->AddOnScreenDebugMessage((uint64)-1, 60.0f, FColor::Yellow, *message); + } else if (Level == UnrealCLR::LogLevel::Error) { + UNREALCLR_LOG(Error); + + GEngine->AddOnScreenDebugMessage((uint64)-1, 60.0f, FColor::Red, *message); + } else if (Level == UnrealCLR::LogLevel::Fatal) { + UNREALCLR_LOG(Error); + + GEngine->AddOnScreenDebugMessage((uint64)-1, 60.0f, FColor::Red, *message); + + UnrealCLR::Status = UnrealCLR::StatusType::Idle; + } +} + +void UnrealCLR::PrePhysicsTickFunction::ExecuteTick(float DeltaTime, enum ELevelTick TickType, ENamedThreads::Type CurrentThread, const FGraphEventRef& MyCompletionGraphEvent) { + if (UnrealCLR::WorldTickState != UnrealCLR::TickState::Started && UnrealCLR::Shared::Events[OnWorldPostBegin]) { + UnrealCLR::ManagedCommand(UnrealCLR::Command(UnrealCLR::Shared::Events[OnWorldPostBegin])); + UnrealCLR::WorldTickState = UnrealCLR::TickState::Started; + } + + if (UnrealCLR::Shared::Events[OnWorldPrePhysicsTick]) + UnrealCLR::ManagedCommand(UnrealCLR::Command(UnrealCLR::Shared::Events[OnWorldPrePhysicsTick], DeltaTime)); +} + +void UnrealCLR::DuringPhysicsTickFunction::ExecuteTick(float DeltaTime, enum ELevelTick TickType, ENamedThreads::Type CurrentThread, const FGraphEventRef& MyCompletionGraphEvent) { + if (UnrealCLR::Shared::Events[OnWorldDuringPhysicsTick]) + UnrealCLR::ManagedCommand(UnrealCLR::Command(UnrealCLR::Shared::Events[OnWorldDuringPhysicsTick], DeltaTime)); +} + +void UnrealCLR::PostPhysicsTickFunction::ExecuteTick(float DeltaTime, enum ELevelTick TickType, ENamedThreads::Type CurrentThread, const FGraphEventRef& MyCompletionGraphEvent) { + if (UnrealCLR::Shared::Events[OnWorldPostPhysicsTick]) + UnrealCLR::ManagedCommand(UnrealCLR::Command(UnrealCLR::Shared::Events[OnWorldPostPhysicsTick], DeltaTime)); +} + +void UnrealCLR::PostUpdateTickFunction::ExecuteTick(float DeltaTime, enum ELevelTick TickType, ENamedThreads::Type CurrentThread, const FGraphEventRef& MyCompletionGraphEvent) { + if (UnrealCLR::Shared::Events[OnWorldPostUpdateTick]) + UnrealCLR::ManagedCommand(UnrealCLR::Command(UnrealCLR::Shared::Events[OnWorldPostUpdateTick], DeltaTime)); +} + +FString UnrealCLR::PrePhysicsTickFunction::DiagnosticMessage() { + return TEXT("PrePhysicsTickFunction"); +} + +FString UnrealCLR::DuringPhysicsTickFunction::DiagnosticMessage() { + return TEXT("DuringPhysicsTickFunction"); +} + +FString UnrealCLR::PostPhysicsTickFunction::DiagnosticMessage() { + return TEXT("PostPhysicsTickFunction"); +} + +FString UnrealCLR::PostUpdateTickFunction::DiagnosticMessage() { + return TEXT("PostUpdateTickFunction"); +} + +size_t UnrealCLR::Utility::Strcpy(char* Destination, const char* Source, size_t Length) { + char* destination = Destination; + const char* source = Source; + size_t length = Length; + + if (length != 0 && --length != 0) { + do { + if ((*destination++ = *source++) == 0) + break; + } + + while (--length != 0); + } + + if (length == 0) { + if (Length != 0) + *destination = '\0'; + + while (*source++); + } + + return (source - Source - 1); +} + +size_t UnrealCLR::Utility::Strlen(const char* Source) { + return strlen(Source) + 1; +} + +#undef LOCTEXT_NAMESPACE + +IMPLEMENT_MODULE(UnrealCLR::Module, UnrealCLR) diff --git a/plugins/UnrealCLR/Source/UnrealCLR/Private/UnrealCLRFramework.cpp b/plugins/UnrealCLR/Source/UnrealCLR/Private/UnrealCLRFramework.cpp new file mode 100644 index 00000000..402b9890 --- /dev/null +++ b/plugins/UnrealCLR/Source/UnrealCLR/Private/UnrealCLRFramework.cpp @@ -0,0 +1,3920 @@ +/* + * Unreal Engine .NET 5 integration + * Copyright (c) 2021 Stanislav Denisov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "UnrealCLRFramework.h" + +DEFINE_LOG_CATEGORY(LogUnrealManaged); + +namespace UnrealCLRFramework { + #define UNREALCLR_GET_ATTACHMENT_RULE(Rule, Result) {\ + switch (Rule) {\ + case AttachmentTransformRule::KeepRelativeTransform:\ + Result = FAttachmentTransformRules::KeepRelativeTransform;\ + break;\ + case AttachmentTransformRule::KeepWorldTransform:\ + Result = FAttachmentTransformRules::KeepWorldTransform;\ + break;\ + case AttachmentTransformRule::SnapToTargetIncludingScale:\ + Result = FAttachmentTransformRules::SnapToTargetIncludingScale;\ + break;\ + case AttachmentTransformRule::SnapToTargetNotIncludingScale:\ + Result = FAttachmentTransformRules::SnapToTargetNotIncludingScale;\ + break;\ + default:\ + break;\ + }\ + } + + #define UNREALCLR_GET_DETACHMENT_RULE(Rule, Result) {\ + switch (Rule) {\ + case DetachmentTransformRule::KeepRelativeTransform:\ + Result = FDetachmentTransformRules::KeepRelativeTransform;\ + break;\ + case DetachmentTransformRule::KeepWorldTransform:\ + Result = FDetachmentTransformRules::KeepWorldTransform;\ + break;\ + default:\ + break;\ + }\ + } + + #define UNREALCLR_GET_ACTOR_TYPE(Type, Head, Tail, Result) {\ + switch (Type) {\ + case ActorType::Base:\ + Result = Head AActor Tail;\ + break;\ + case ActorType::Camera:\ + Result = Head ACameraActor Tail;\ + break;\ + case ActorType::TriggerBox:\ + Result = Head ATriggerBox Tail;\ + break;\ + case ActorType::TriggerSphere:\ + Result = Head ATriggerSphere Tail;\ + break;\ + case ActorType::TriggerCapsule:\ + Result = Head ATriggerCapsule Tail;\ + break;\ + case ActorType::Pawn:\ + Result = Head APawn Tail;\ + break;\ + case ActorType::Character:\ + Result = Head ACharacter Tail;\ + break;\ + case ActorType::AIController:\ + Result = Head AAIController Tail;\ + break;\ + case ActorType::PlayerController:\ + Result = Head APlayerController Tail;\ + break;\ + case ActorType::Brush:\ + Result = Head ABrush Tail;\ + break;\ + case ActorType::AmbientSound:\ + Result = Head AAmbientSound Tail;\ + break;\ + case ActorType::DirectionalLight:\ + Result = Head ADirectionalLight Tail;\ + break;\ + case ActorType::PointLight:\ + Result = Head APointLight Tail;\ + break;\ + case ActorType::RectLight:\ + Result = Head ARectLight Tail;\ + break;\ + case ActorType::SpotLight:\ + Result = Head ASpotLight Tail;\ + break;\ + case ActorType::TriggerVolume:\ + Result = Head ATriggerVolume Tail;\ + break;\ + case ActorType::PostProcessVolume:\ + Result = Head APostProcessVolume Tail;\ + break;\ + case ActorType::LevelScript:\ + Result = Head ALevelScriptActor Tail;\ + break;\ + case ActorType::GameModeBase:\ + Result = Head AGameModeBase Tail;\ + break;\ + default:\ + break;\ + }\ + } + + #define UNREALCLR_GET_COMPONENT_TYPE(Type, Head, Tail, Result) {\ + switch (Type) {\ + case ComponentType::Actor:\ + Result = Head UActorComponent Tail;\ + break;\ + case ComponentType::Input:\ + Result = Head UInputComponent Tail;\ + break;\ + case ComponentType::Scene:\ + Result = Head USceneComponent Tail;\ + break;\ + case ComponentType::Audio:\ + Result = Head UAudioComponent Tail;\ + break;\ + case ComponentType::Camera:\ + Result = Head UCameraComponent Tail;\ + break;\ + case ComponentType::Light:\ + Result = Head ULightComponent Tail;\ + break;\ + case ComponentType::DirectionalLight:\ + Result = Head UDirectionalLightComponent Tail;\ + break;\ + case ComponentType::MotionController:\ + Result = Head UMotionControllerComponent Tail;\ + break;\ + case ComponentType::StaticMesh:\ + Result = Head UStaticMeshComponent Tail;\ + break;\ + case ComponentType::InstancedStaticMesh:\ + Result = Head UInstancedStaticMeshComponent Tail;\ + break;\ + case ComponentType::HierarchicalInstancedStaticMesh:\ + Result = Head UHierarchicalInstancedStaticMeshComponent Tail;\ + break;\ + case ComponentType::ChildActor:\ + Result = Head UChildActorComponent Tail;\ + break;\ + case ComponentType::SpringArm:\ + Result = Head USpringArmComponent Tail;\ + break;\ + case ComponentType::PostProcess:\ + Result = Head UPostProcessComponent Tail;\ + break;\ + case ComponentType::Box:\ + Result = Head UBoxComponent Tail;\ + break;\ + case ComponentType::Sphere:\ + Result = Head USphereComponent Tail;\ + break;\ + case ComponentType::Capsule:\ + Result = Head UCapsuleComponent Tail;\ + break;\ + case ComponentType::SkeletalMesh:\ + Result = Head USkeletalMeshComponent Tail;\ + break;\ + case ComponentType::TextRender:\ + Result = Head UTextRenderComponent Tail;\ + break;\ + case ComponentType::Spline:\ + Result = Head USplineComponent Tail;\ + break;\ + case ComponentType::RadialForce:\ + Result = Head URadialForceComponent Tail;\ + break;\ + default:\ + break;\ + }\ + } + + #define UNREALCLR_GET_ATTACHABLE_COMPONENT_TYPE(Type, Head, Tail, Result) {\ + switch (Type) {\ + case ComponentType::Scene:\ + Result = Head USceneComponent Tail;\ + break;\ + case ComponentType::Audio:\ + Result = Head UAudioComponent Tail;\ + break;\ + case ComponentType::Camera:\ + Result = Head UCameraComponent Tail;\ + break;\ + case ComponentType::Light:\ + Result = Head ULightComponent Tail;\ + break;\ + case ComponentType::DirectionalLight:\ + Result = Head UDirectionalLightComponent Tail;\ + break;\ + case ComponentType::MotionController:\ + Result = Head UMotionControllerComponent Tail;\ + break;\ + case ComponentType::StaticMesh:\ + Result = Head UStaticMeshComponent Tail;\ + break;\ + case ComponentType::InstancedStaticMesh:\ + Result = Head UInstancedStaticMeshComponent Tail;\ + break;\ + case ComponentType::HierarchicalInstancedStaticMesh:\ + Result = Head UHierarchicalInstancedStaticMeshComponent Tail;\ + break;\ + case ComponentType::ChildActor:\ + Result = Head UChildActorComponent Tail;\ + break;\ + case ComponentType::SpringArm:\ + Result = Head USpringArmComponent Tail;\ + break;\ + case ComponentType::PostProcess:\ + Result = Head UPostProcessComponent Tail;\ + break;\ + case ComponentType::Box:\ + Result = Head UBoxComponent Tail;\ + break;\ + case ComponentType::Sphere:\ + Result = Head USphereComponent Tail;\ + break;\ + case ComponentType::Capsule:\ + Result = Head UCapsuleComponent Tail;\ + break;\ + case ComponentType::SkeletalMesh:\ + Result = Head USkeletalMeshComponent Tail;\ + break;\ + case ComponentType::TextRender:\ + Result = Head UTextRenderComponent Tail;\ + break;\ + case ComponentType::Spline:\ + Result = Head USplineComponent Tail;\ + break;\ + case ComponentType::RadialForce:\ + Result = Head URadialForceComponent Tail;\ + break;\ + default:\ + break;\ + }\ + } + + #define UNREALCLR_GET_PROPERTY_VALUE(Type, Object, Name, Value)\ + FName name(ANSI_TO_TCHAR(Name));\ + for (TFieldIterator currentProperty(Object->GetClass()); currentProperty; ++currentProperty) {\ + Type* property = *currentProperty;\ + if (property->GetFName() == name) {\ + *Value = property->GetPropertyValue_InContainer(Object);\ + return true;\ + }\ + }\ + return false; + + #define UNREALCLR_SET_PROPERTY_VALUE(Type, Object, Name, Value)\ + FName name(ANSI_TO_TCHAR(Name));\ + for (TFieldIterator currentProperty(Object->GetClass()); currentProperty; ++currentProperty) {\ + Type* property = *currentProperty;\ + if (property->GetFName() == name) {\ + property->SetPropertyValue_InContainer(Object, Value);\ + return true;\ + }\ + }\ + return false; + + #define UNREALCLR_GET_BONE_NAME(Hit, Name)\ + if (Name && Hit.BoneName.GetStringLength() > 0) {\ + const char* boneName = TCHAR_TO_ANSI(*Hit.BoneName.ToString());\ + UnrealCLR::Utility::Strcpy(Name, boneName, UnrealCLR::Utility::Strlen(boneName));\ + } + + #define UNREALCLR_SET_BONE_NAME(Name)\ + FName boneName;\ + if (!Name)\ + boneName = NAME_None;\ + else\ + boneName = FName(ANSI_TO_TCHAR(Name)); + + #define UNREALCLR_SET_COLLISION_QUERY_PARAMS(IgnoredActor, IgnoredComponent)\ + FCollisionQueryParams queryParams;\ + if (IgnoredActor)\ + queryParams.AddIgnoredActor(IgnoredActor);\ + if (IgnoredComponent)\ + queryParams.AddIgnoredComponent(IgnoredComponent); + + #define UNREALCLR_SET_ACTOR_EVENT(Type, Condition, Method) {\ + switch (Type) {\ + case ActorEventType::OnActorBeginOverlap:\ + if (Condition Actor->OnActorBeginOverlap.IsAlreadyBound(UnrealCLR::Engine::Manager, &UUnrealCLRManager::ActorBeginOverlap))\ + Actor->OnActorBeginOverlap. Method (UnrealCLR::Engine::Manager, &UUnrealCLRManager::ActorBeginOverlap);\ + break;\ + case ActorEventType::OnActorEndOverlap:\ + if (Condition Actor->OnActorEndOverlap.IsAlreadyBound(UnrealCLR::Engine::Manager, &UUnrealCLRManager::ActorEndOverlap))\ + Actor->OnActorEndOverlap. Method (UnrealCLR::Engine::Manager, &UUnrealCLRManager::ActorEndOverlap);\ + break;\ + case ActorEventType::OnActorHit:\ + if (Condition Actor->OnActorHit.IsAlreadyBound(UnrealCLR::Engine::Manager, &UUnrealCLRManager::ActorHit))\ + Actor->OnActorHit. Method (UnrealCLR::Engine::Manager, &UUnrealCLRManager::ActorHit);\ + break;\ + case ActorEventType::OnActorBeginCursorOver:\ + if (Condition Actor->OnBeginCursorOver.IsAlreadyBound(UnrealCLR::Engine::Manager, &UUnrealCLRManager::ActorBeginCursorOver))\ + Actor->OnBeginCursorOver. Method (UnrealCLR::Engine::Manager, &UUnrealCLRManager::ActorBeginCursorOver);\ + break;\ + case ActorEventType::OnActorEndCursorOver:\ + if (Condition Actor->OnEndCursorOver.IsAlreadyBound(UnrealCLR::Engine::Manager, &UUnrealCLRManager::ActorEndCursorOver))\ + Actor->OnEndCursorOver. Method (UnrealCLR::Engine::Manager, &UUnrealCLRManager::ActorEndCursorOver);\ + break;\ + case ActorEventType::OnActorClicked:\ + if (Condition Actor->OnClicked.IsAlreadyBound(UnrealCLR::Engine::Manager, &UUnrealCLRManager::ActorClicked))\ + Actor->OnClicked. Method (UnrealCLR::Engine::Manager, &UUnrealCLRManager::ActorClicked);\ + break;\ + case ActorEventType::OnActorReleased:\ + if (Condition Actor->OnReleased.IsAlreadyBound(UnrealCLR::Engine::Manager, &UUnrealCLRManager::ActorReleased))\ + Actor->OnReleased. Method (UnrealCLR::Engine::Manager, &UUnrealCLRManager::ActorReleased);\ + break;\ + default:\ + break;\ + }\ + } + + #define UNREALCLR_SET_COMPONENT_EVENT(Type, Condition, Method) {\ + switch (Type) {\ + case ComponentEventType::OnComponentBeginOverlap:\ + if (Condition PrimitiveComponent->OnComponentBeginOverlap.IsAlreadyBound(UnrealCLR::Engine::Manager, &UUnrealCLRManager::ComponentBeginOverlap))\ + PrimitiveComponent->OnComponentBeginOverlap. Method (UnrealCLR::Engine::Manager, &UUnrealCLRManager::ComponentBeginOverlap);\ + break;\ + case ComponentEventType::OnComponentEndOverlap:\ + if (Condition PrimitiveComponent->OnComponentEndOverlap.IsAlreadyBound(UnrealCLR::Engine::Manager, &UUnrealCLRManager::ComponentEndOverlap))\ + PrimitiveComponent->OnComponentEndOverlap. Method (UnrealCLR::Engine::Manager, &UUnrealCLRManager::ComponentEndOverlap);\ + break;\ + case ComponentEventType::OnComponentHit:\ + if (Condition PrimitiveComponent->OnComponentHit.IsAlreadyBound(UnrealCLR::Engine::Manager, &UUnrealCLRManager::ComponentHit))\ + PrimitiveComponent->OnComponentHit. Method (UnrealCLR::Engine::Manager, &UUnrealCLRManager::ComponentHit);\ + break;\ + case ComponentEventType::OnComponentBeginCursorOver:\ + if (Condition PrimitiveComponent->OnBeginCursorOver.IsAlreadyBound(UnrealCLR::Engine::Manager, &UUnrealCLRManager::ComponentBeginCursorOver))\ + PrimitiveComponent->OnBeginCursorOver. Method (UnrealCLR::Engine::Manager, &UUnrealCLRManager::ComponentBeginCursorOver);\ + break;\ + case ComponentEventType::OnComponentEndCursorOver:\ + if (Condition PrimitiveComponent->OnEndCursorOver.IsAlreadyBound(UnrealCLR::Engine::Manager, &UUnrealCLRManager::ComponentEndCursorOver))\ + PrimitiveComponent->OnEndCursorOver. Method (UnrealCLR::Engine::Manager, &UUnrealCLRManager::ComponentEndCursorOver);\ + break;\ + case ComponentEventType::OnComponentClicked:\ + if (Condition PrimitiveComponent->OnClicked.IsAlreadyBound(UnrealCLR::Engine::Manager, &UUnrealCLRManager::ComponentClicked))\ + PrimitiveComponent->OnClicked. Method (UnrealCLR::Engine::Manager, &UUnrealCLRManager::ComponentClicked);\ + break;\ + case ComponentEventType::OnComponentReleased:\ + if (Condition PrimitiveComponent->OnReleased.IsAlreadyBound(UnrealCLR::Engine::Manager, &UUnrealCLRManager::ComponentReleased))\ + PrimitiveComponent->OnReleased. Method (UnrealCLR::Engine::Manager, &UUnrealCLRManager::ComponentReleased);\ + break;\ + default:\ + break;\ + }\ + } + + #define UNREALCLR_COLOR_TO_INTEGER(Color) (Color.A << 24) + (Color.R << 16) + (Color.G << 8) + Color.B + + #if ENGINE_MAJOR_VERSION == 4 + #if ENGINE_MINOR_VERSION <= 26 + #define UNREALCLR_BLEND_TYPE 5 + #elif ENGINE_MINOR_VERSION >= 27 + #define UNREALCLR_BLEND_TYPE 6 + #endif + + #if ENGINE_MINOR_VERSION <= 25 + #define UNREALCLR_PIXEL_FORMAT 71 + #elif ENGINE_MINOR_VERSION >= 26 + #define UNREALCLR_PIXEL_FORMAT 72 + #endif + #elif ENGINE_MAJOR_VERSION == 5 + #define UNREALCLR_PIXEL_FORMAT 72 + #define UNREALCLR_BLEND_TYPE 6 + #endif + + static_assert(AudioFadeCurve::Count == AudioFadeCurve(4), "Invalid elements count of the [AudioFadeCurve] enumeration"); + static_assert(BlendType::VTBlend_MAX == BlendType(UNREALCLR_BLEND_TYPE), "Invalid elements count of the [BlendType] enumeration"); + static_assert(CollisionChannel::ECC_MAX == CollisionChannel(33), "Invalid elements count of the [CollisionChannel] enumeration"); + static_assert(CollisionResponse::ECR_MAX == CollisionResponse(3), "Invalid elements count of the [CollisionResponse] enumeration"); + static_assert(ControllerHand::ControllerHand_Count == ControllerHand(17), "Invalid elements count of the [ControllerHand] enumeration"); + static_assert(InputEvent::IE_MAX == InputEvent(5), "Invalid elements count of the [InputEvent] enumeration"); + static_assert(NetMode::NM_MAX == NetMode(4), "Invalid elements count of the [NetMode] enumeration"); + static_assert(PixelFormat::PF_MAX == PixelFormat(UNREALCLR_PIXEL_FORMAT), "Invalid elements count of the [PixelFormat] enumeration"); + + static_assert(sizeof(Bounds) == 28, "Invalid size of the [Bounds] structure"); + static_assert(sizeof(CollisionShape) == 16, "Invalid size of the [CollisionShape] structure"); + + namespace Assert { + void OutputMessage(const uint8* Message) { + FString message(UTF8_TO_TCHAR(Message)); + + UE_LOG(LogUnrealManaged, Error, TEXT("%s: %s"), ANSI_TO_TCHAR(__FUNCTION__), *message); + + GEngine->AddOnScreenDebugMessage((uint64)-1, 60.0f, FColor::Red, *message); + } + } + + namespace CommandLine { + void Get(char* Arguments) { + const char* arguments = TCHAR_TO_ANSI(FCommandLine::Get()); + + UnrealCLR::Utility::Strcpy(Arguments, arguments, UnrealCLR::Utility::Strlen(arguments)); + } + + void Set(const char* Arguments) { + FCommandLine::Set(ANSI_TO_TCHAR(Arguments)); + } + + void Append(const char* Arguments) { + FCommandLine::Append(ANSI_TO_TCHAR(Arguments)); + } + } + + namespace Debug { + void Log(LogLevel Level, const uint8* Message) { + #define UNREALCLR_FRAMEWORK_LOG(Verbosity) UE_LOG(LogUnrealManaged, Verbosity, TEXT("%s: %s"), ANSI_TO_TCHAR(__FUNCTION__), *FString(UTF8_TO_TCHAR(Message))); + + if (Level == LogLevel::Display) { + UNREALCLR_FRAMEWORK_LOG(Display); + } else if (Level == LogLevel::Warning) { + UNREALCLR_FRAMEWORK_LOG(Warning); + } else if (Level == LogLevel::Error) { + UNREALCLR_FRAMEWORK_LOG(Error); + } else if (Level == LogLevel::Fatal) { + UNREALCLR_FRAMEWORK_LOG(Fatal); + } + } + + void Exception(const uint8* Message) { + GEngine->AddOnScreenDebugMessage((uint64)-1, 10.0f, FColor::Red, *FString(UTF8_TO_TCHAR(Message))); + } + + void AddOnScreenMessage(int32 Key, float TimeToDisplay, Color DisplayColor, const uint8* Message) { + GEngine->AddOnScreenDebugMessage((uint64)Key, TimeToDisplay, DisplayColor, *FString(UTF8_TO_TCHAR(Message))); + } + + void ClearOnScreenMessages() { + GEngine->ClearOnScreenDebugMessages(); + } + + void DrawBox(const Vector3* Center, const Vector3* Extent, const Quaternion* Rotation, Color Color, bool PersistentLines, float LifeTime, uint8 DepthPriority, float Thickness) { + DrawDebugBox(UnrealCLR::Engine::World, *Center, *Extent, *Rotation, Color, PersistentLines, LifeTime, DepthPriority, Thickness); + } + + void DrawCapsule(const Vector3* Center, float HalfHeight, float Radius, const Quaternion* Rotation, Color Color, bool PersistentLines, float LifeTime, uint8 DepthPriority, float Thickness) { + DrawDebugCapsule(UnrealCLR::Engine::World, *Center, HalfHeight, Radius, *Rotation, Color, PersistentLines, LifeTime, DepthPriority, Thickness); + } + + void DrawCone(const Vector3* Origin, const Vector3* Direction, float Length, float AngleWidth, float AngleHeight, int32 Sides, Color Color, bool PersistentLines, float LifeTime, uint8 DepthPriority, float Thickness) { + DrawDebugCone(UnrealCLR::Engine::World, *Origin, *Direction, Length, AngleWidth, AngleHeight, Sides, Color, PersistentLines, LifeTime, DepthPriority, Thickness); + } + + void DrawCylinder(const Vector3* Start, const Vector3* End, float Radius, int32 Segments, Color Color, bool PersistentLines, float LifeTime, uint8 DepthPriority, float Thickness) { + DrawDebugCylinder(UnrealCLR::Engine::World, *Start, *End, Radius, Segments, Color, PersistentLines, LifeTime, DepthPriority, Thickness); + } + + void DrawSphere(const Vector3* Center, float Radius, int32 Segments, Color Color, bool PersistentLines, float LifeTime, uint8 DepthPriority, float Thickness) { + DrawDebugSphere(UnrealCLR::Engine::World, *Center, Radius, Segments, Color, PersistentLines, LifeTime, DepthPriority, Thickness); + } + + void DrawLine(const Vector3* Start, const Vector3* End, Color Color, bool PersistentLines, float LifeTime, uint8 DepthPriority, float Thickness) { + DrawDebugLine(UnrealCLR::Engine::World, *Start, *End, Color, PersistentLines, LifeTime, DepthPriority, Thickness); + } + + void DrawPoint(const Vector3* Location, float Size, Color Color, bool PersistentLines, float LifeTime, uint8 DepthPriority) { + DrawDebugPoint(UnrealCLR::Engine::World, *Location, Size, Color, PersistentLines, LifeTime, DepthPriority); + } + + void FlushPersistentLines() { + FlushPersistentDebugLines(UnrealCLR::Engine::World); + } + } + + namespace Object { + bool IsPendingKill(UObject* Object) { + return Object->IsPendingKill(); + } + + bool IsValid(UObject* Object) { + return Object->IsValidLowLevel(); + } + + UObject* Load(ObjectType Type, const char* Name) { + UObject* object = nullptr; + + switch (Type) { + case ObjectType::Blueprint: { + #if WITH_EDITOR + object = StaticLoadObject(UBlueprint::StaticClass(), nullptr, *FString(ANSI_TO_TCHAR(Name))); + #else + FString name(ANSI_TO_TCHAR(Name)); + int32 index = INDEX_NONE; + + if (name.FindLastChar(TCHAR('/'), index)) { + name.AppendChar(TCHAR('.')); + name.Append(name.Mid(index + 1, name.Len() - index - 2)); + } + + name.Append(TEXT("_C")); + + object = StaticLoadObject(UClass::StaticClass(), nullptr, *name); + #endif + break; + } + + case ObjectType::SoundWave: { + object = StaticLoadObject(USoundWave::StaticClass(), nullptr, *FString(ANSI_TO_TCHAR(Name))); + break; + } + + case ObjectType::AnimationSequence: { + object = StaticLoadObject(UAnimSequence::StaticClass(), nullptr, *FString(ANSI_TO_TCHAR(Name))); + break; + } + + case ObjectType::AnimationMontage: { + object = StaticLoadObject(UAnimMontage::StaticClass(), nullptr, *FString(ANSI_TO_TCHAR(Name))); + break; + } + + case ObjectType::StaticMesh: { + object = StaticLoadObject(UStaticMesh::StaticClass(), nullptr, *FString(ANSI_TO_TCHAR(Name))); + break; + } + + case ObjectType::SkeletalMesh: { + object = StaticLoadObject(USkeletalMesh::StaticClass(), nullptr, *FString(ANSI_TO_TCHAR(Name))); + break; + } + + case ObjectType::Material: { + object = StaticLoadObject(UMaterial::StaticClass(), nullptr, *FString(ANSI_TO_TCHAR(Name))); + break; + } + + case ObjectType::Font: { + object = StaticLoadObject(UFont::StaticClass(), nullptr, *FString(ANSI_TO_TCHAR(Name))); + break; + } + + case ObjectType::Texture2D: { + object = StaticLoadObject(UTexture2D::StaticClass(), nullptr, *FString(ANSI_TO_TCHAR(Name))); + break; + } + + default: + break; + } + + return object; + } + + void Rename(UObject* Object, const char* Name) { + FString name(ANSI_TO_TCHAR(Name)); + + Object->Rename(*name); + } + + bool Invoke(UObject* Object, const uint8* Command) { + static FOutputDeviceNull outputDevice; + + return Object->CallFunctionByNameWithArguments(UTF8_TO_TCHAR(Command), outputDevice, nullptr, true); + } + + AActor* ToActor(UObject* Object, ActorType Type) { + AActor* actor = nullptr; + + UNREALCLR_GET_ACTOR_TYPE(Type, Cast<, >(Object), actor); + + return actor; + } + + UActorComponent* ToComponent(UObject* Object, ComponentType Type) { + UActorComponent* component = nullptr; + + UNREALCLR_GET_COMPONENT_TYPE(Type, Cast<, >(Object), component); + + return component; + } + + uint32 GetID(UObject* Object) { + return Object->GetUniqueID(); + } + + void GetName(UObject* Object, char* Name) { + const char* name = TCHAR_TO_ANSI(*Object->GetName()); + + UnrealCLR::Utility::Strcpy(Name, name, UnrealCLR::Utility::Strlen(name)); + } + + bool GetBool(UObject* Object, const char* Name, bool* Value) { + UNREALCLR_GET_PROPERTY_VALUE(FBoolProperty, Object, Name, Value); + } + + bool GetByte(UObject* Object, const char* Name, uint8* Value) { + UNREALCLR_GET_PROPERTY_VALUE(FByteProperty, Object, Name, Value); + } + + bool GetShort(UObject* Object, const char* Name, int16* Value) { + UNREALCLR_GET_PROPERTY_VALUE(FInt16Property, Object, Name, Value); + } + + bool GetInt(UObject* Object, const char* Name, int32* Value) { + UNREALCLR_GET_PROPERTY_VALUE(FIntProperty, Object, Name, Value); + } + + bool GetLong(UObject* Object, const char* Name, int64* Value) { + UNREALCLR_GET_PROPERTY_VALUE(FInt64Property, Object, Name, Value); + } + + bool GetUShort(UObject* Object, const char* Name, uint16* Value) { + UNREALCLR_GET_PROPERTY_VALUE(FUInt16Property, Object, Name, Value); + } + + bool GetUInt(UObject* Object, const char* Name, uint32* Value) { + UNREALCLR_GET_PROPERTY_VALUE(FUInt32Property, Object, Name, Value); + } + + bool GetULong(UObject* Object, const char* Name, uint64* Value) { + UNREALCLR_GET_PROPERTY_VALUE(FUInt64Property, Object, Name, Value); + } + + bool GetFloat(UObject* Object, const char* Name, float* Value) { + UNREALCLR_GET_PROPERTY_VALUE(FFloatProperty, Object, Name, Value); + } + + bool GetDouble(UObject* Object, const char* Name, double* Value) { + UNREALCLR_GET_PROPERTY_VALUE(FDoubleProperty, Object, Name, Value); + } + + bool GetEnum(UObject* Object, const char* Name, int32* Value) { + FName name(ANSI_TO_TCHAR(Name)); + + for (TFieldIterator currentProperty(Object->GetClass()); currentProperty; ++currentProperty) { + FNumericProperty* property = *currentProperty; + + if (property->GetFName() == name) { + *Value = static_cast(property->GetSignedIntPropertyValue(property->ContainerPtrToValuePtr(Object))); + + return true; + } + } + + return false; + } + + bool GetString(UObject* Object, const char* Name, char* Value) { + FName name(ANSI_TO_TCHAR(Name)); + + for (TFieldIterator currentProperty(Object->GetClass()); currentProperty; ++currentProperty) { + FStrProperty* property = *currentProperty; + + if (property->GetFName() == name) { + const char* string = TCHAR_TO_ANSI(*property->GetPropertyValue_InContainer(Object)); + + UnrealCLR::Utility::Strcpy(Value, string, UnrealCLR::Utility::Strlen(string)); + + return true; + } + } + + return false; + } + + bool GetText(UObject* Object, const char* Name, char* Value) { + FName name(ANSI_TO_TCHAR(Name)); + + for (TFieldIterator currentProperty(Object->GetClass()); currentProperty; ++currentProperty) { + FTextProperty* property = *currentProperty; + + if (property->GetFName() == name) { + const char* string = TCHAR_TO_ANSI(*property->GetPropertyValue_InContainer(Object).ToString()); + + UnrealCLR::Utility::Strcpy(Value, string, UnrealCLR::Utility::Strlen(string)); + + return true; + } + } + + return false; + } + + bool SetBool(UObject* Object, const char* Name, bool Value) { + UNREALCLR_SET_PROPERTY_VALUE(FBoolProperty, Object, Name, Value); + } + + bool SetByte(UObject* Object, const char* Name, uint8 Value) { + UNREALCLR_SET_PROPERTY_VALUE(FByteProperty, Object, Name, Value); + } + + bool SetShort(UObject* Object, const char* Name, int16 Value) { + UNREALCLR_SET_PROPERTY_VALUE(FInt16Property, Object, Name, Value); + } + + bool SetInt(UObject* Object, const char* Name, int32 Value) { + UNREALCLR_SET_PROPERTY_VALUE(FIntProperty, Object, Name, Value); + } + + bool SetLong(UObject* Object, const char* Name, int64 Value) { + UNREALCLR_SET_PROPERTY_VALUE(FInt64Property, Object, Name, Value); + } + + bool SetUShort(UObject* Object, const char* Name, uint16 Value) { + UNREALCLR_SET_PROPERTY_VALUE(FUInt16Property, Object, Name, Value); + } + + bool SetUInt(UObject* Object, const char* Name, uint32 Value) { + UNREALCLR_SET_PROPERTY_VALUE(FUInt32Property, Object, Name, Value); + } + + bool SetULong(UObject* Object, const char* Name, uint64 Value) { + UNREALCLR_SET_PROPERTY_VALUE(FUInt64Property, Object, Name, Value); + } + + bool SetFloat(UObject* Object, const char* Name, float Value) { + UNREALCLR_SET_PROPERTY_VALUE(FFloatProperty, Object, Name, Value); + } + + bool SetDouble(UObject* Object, const char* Name, double Value) { + UNREALCLR_SET_PROPERTY_VALUE(FDoubleProperty, Object, Name, Value); + } + + bool SetEnum(UObject* Object, const char* Name, int32 Value) { + FName name(ANSI_TO_TCHAR(Name)); + + for (TFieldIterator currentProperty(Object->GetClass()); currentProperty; ++currentProperty) { + FNumericProperty* property = *currentProperty; + + if (property->GetFName() == name) { + property->SetIntPropertyValue(property->ContainerPtrToValuePtr(Object), static_cast(Value)); + + return true; + } + } + + return false; + } + + bool SetString(UObject* Object, const char* Name, const char* Value) { + FName name(ANSI_TO_TCHAR(Name)); + + for (TFieldIterator currentProperty(Object->GetClass()); currentProperty; ++currentProperty) { + FStrProperty* property = *currentProperty; + + if (property->GetFName() == name) { + property->SetPropertyValue_InContainer(Object, FString(ANSI_TO_TCHAR(Value))); + + return true; + } + } + + return false; + } + + bool SetText(UObject* Object, const char* Name, const char* Value) { + FName name(ANSI_TO_TCHAR(Name)); + + for (TFieldIterator currentProperty(Object->GetClass()); currentProperty; ++currentProperty) { + FTextProperty* property = *currentProperty; + + if (property->GetFName() == name) { + property->SetPropertyValue_InContainer(Object, FText::FromString(FString(ANSI_TO_TCHAR(Value)))); + + return true; + } + } + + return false; + } + } + + namespace Asset { + bool IsValid(FAssetData* Asset) { + return Asset->IsValid(); + } + + void GetName(FAssetData* Asset, char* Name) { + const char* name = TCHAR_TO_ANSI(*Asset->AssetName.ToString()); + + UnrealCLR::Utility::Strcpy(Name, name, UnrealCLR::Utility::Strlen(name)); + } + + void GetPath(FAssetData* Asset, char* Path) { + FString objectPath = Asset->ObjectPath.ToString(); + + int32 index = INDEX_NONE; + + if (objectPath.FindLastChar(TCHAR('.'), index)) + objectPath = FString(index, *objectPath); + + const char* path = TCHAR_TO_ANSI(*objectPath); + + UnrealCLR::Utility::Strcpy(Path, path, UnrealCLR::Utility::Strlen(path)); + } + } + + namespace AssetRegistry { + IAssetRegistry* Get() { + static IAssetRegistry* assetRegistry; + + if (!assetRegistry) + assetRegistry = &FModuleManager::Get().LoadModuleChecked(TEXT("AssetRegistry")).Get(); + + return assetRegistry; + } + + bool HasAssets(IAssetRegistry* AssetRegistry, const char* Path, bool Recursive) { + return AssetRegistry->HasAssets(FName(ANSI_TO_TCHAR(Path)), Recursive); + } + + void ForEachAsset(IAssetRegistry* AssetRegistry, const char* Path, bool Recursive, bool IncludeOnlyOnDiskAssets, FAssetData** Array, int32* Elements) { + static TArray assets; + static TArray references; + + assets.Reset(); + references.Reset(); + + AssetRegistry->GetAssetsByPath(FName(ANSI_TO_TCHAR(Path)), assets, Recursive, IncludeOnlyOnDiskAssets); + + int32 elements = assets.Num(); + + if (elements > 0) { + for (int32 i = 0; i < elements; i++) { + references.Add(&assets[i]); + } + + *Array = reinterpret_cast(references.GetData()); + *Elements = references.Num(); + } + } + } + + namespace Blueprint { + bool IsValidActorClass(UBlueprint* Blueprint, ActorType Type) { + #if WITH_EDITOR + TSubclassOf type; + + UNREALCLR_GET_ACTOR_TYPE(Type, UNREALCLR_NONE, ::StaticClass(), type); + + return Blueprint->ParentClass == type; + #else + return true; + #endif + } + + bool IsValidComponentClass(UBlueprint* Blueprint, ComponentType Type) { + #if WITH_EDITOR + TSubclassOf type; + + UNREALCLR_GET_ATTACHABLE_COMPONENT_TYPE(Type, UNREALCLR_NONE, ::StaticClass(), type); + + return Blueprint->ParentClass == type; + #else + return true; + #endif + } + } + + namespace Application { + bool IsCanEverRender() { + return FApp::CanEverRender(); + } + + bool IsPackagedForDistribution() { + return FGenericPlatformMisc::IsPackagedForDistribution(); + } + + bool IsPackagedForShipping() { + #if UE_BUILD_SHIPPING + return true; + #else + return false; + #endif + } + + void GetProjectDirectory(char* Directory) { + const char* directory = TCHAR_TO_ANSI(*FPaths::ConvertRelativePathToFull(FPaths::ProjectDir())); + + UnrealCLR::Utility::Strcpy(Directory, directory, UnrealCLR::Utility::Strlen(directory)); + } + + void GetDefaultLanguage(char* Language) { + const char* language = TCHAR_TO_ANSI(*FGenericPlatformMisc::GetDefaultLanguage()); + + UnrealCLR::Utility::Strcpy(Language, language, UnrealCLR::Utility::Strlen(language)); + } + + void GetProjectName(char* ProjectName) { + const char* projectName = TCHAR_TO_ANSI(FApp::GetProjectName()); + + UnrealCLR::Utility::Strcpy(ProjectName, projectName, UnrealCLR::Utility::Strlen(projectName)); + } + + float GetVolumeMultiplier() { + return FApp::GetVolumeMultiplier(); + } + + void SetProjectName(const char* ProjectName) { + FApp::SetProjectName(ANSI_TO_TCHAR(ProjectName)); + } + + void SetVolumeMultiplier(float Value) { + FApp::SetVolumeMultiplier(Value); + } + + void RequestExit(bool Force) { + FGenericPlatformMisc::RequestExit(Force); + } + } + + namespace ConsoleManager { + bool IsRegisteredVariable(const char* Name) { + return IConsoleManager::Get().IsNameRegistered(ANSI_TO_TCHAR(Name)); + } + + IConsoleVariable* FindVariable(const char* Name) { + return IConsoleManager::Get().FindConsoleVariable(ANSI_TO_TCHAR(Name)); + } + + IConsoleVariable* RegisterVariableBool(const char* Name, const char* Help, bool DefaultValue, bool ReadOnly) { + return IConsoleManager::Get().RegisterConsoleVariable(ANSI_TO_TCHAR(Name), DefaultValue, ANSI_TO_TCHAR(Help), !ReadOnly ? ECVF_Default : ECVF_ReadOnly); + } + + IConsoleVariable* RegisterVariableInt(const char* Name, const char* Help, int32 DefaultValue, bool ReadOnly) { + return IConsoleManager::Get().RegisterConsoleVariable(ANSI_TO_TCHAR(Name), DefaultValue, ANSI_TO_TCHAR(Help), !ReadOnly ? ECVF_Default : ECVF_ReadOnly); + } + + IConsoleVariable* RegisterVariableFloat(const char* Name, const char* Help, float DefaultValue, bool ReadOnly) { + return IConsoleManager::Get().RegisterConsoleVariable(ANSI_TO_TCHAR(Name), DefaultValue, ANSI_TO_TCHAR(Help), !ReadOnly ? ECVF_Default : ECVF_ReadOnly); + } + + IConsoleVariable* RegisterVariableString(const char* Name, const char* Help, const char* DefaultValue, bool ReadOnly) { + return IConsoleManager::Get().RegisterConsoleVariable(ANSI_TO_TCHAR(Name), ANSI_TO_TCHAR(DefaultValue), ANSI_TO_TCHAR(Help), !ReadOnly ? ECVF_Default : ECVF_ReadOnly); + } + + void RegisterCommand(const char* Name, const char* Help, ConsoleCommandDelegate Callback, bool ReadOnly) { + auto callback = [Callback](const TArray& Arguments) { + if (UnrealCLR::Status == UnrealCLR::StatusType::Running) { + float value = 0.0f; + + if (Arguments.Num() > 0) + FDefaultValueHelper::ParseFloat(Arguments[0], value); + + UnrealCLR::ManagedCommand(UnrealCLR::Command((void*)Callback, value)); + } + }; + + IConsoleManager::Get().RegisterConsoleCommand(ANSI_TO_TCHAR(Name), ANSI_TO_TCHAR(Help), FConsoleCommandWithArgsDelegate::CreateLambda(callback), !ReadOnly ? ECVF_Default : ECVF_ReadOnly); + } + + void UnregisterObject(const char* Name) { + IConsoleManager::Get().UnregisterConsoleObject(ANSI_TO_TCHAR(Name), false); + } + } + + namespace Engine { + bool IsSplitScreen() { + return GEngine->IsSplitScreen(UnrealCLR::Engine::World); + } + + bool IsEditor() { + return UnrealCLR::Engine::World->IsPlayInEditor(); + } + + bool IsForegroundWindow() { + return UnrealCLR::Engine::World->GetGameViewport()->Viewport->IsForegroundWindow(); + } + + bool IsExitRequested() { + return IsEngineExitRequested(); + } + + NetMode GetNetMode() { + return UnrealCLR::Engine::World->GetNetMode(); + } + + uint32 GetFrameNumber() { + return GFrameNumber; + } + + void GetViewportSize(Vector2* Value) { + *Value = FVector2D(GEngine->GameViewport->Viewport->GetSizeXY()); + } + + void GetScreenResolution(Vector2* Value) { + *Value = FVector2D(static_cast(GSystemResolution.ResX), static_cast(GSystemResolution.ResY)); + } + + WindowMode GetWindowMode() { + return UnrealCLR::Engine::World->GetGameViewport()->Viewport->GetWindowMode(); + } + + void GetVersion(char* Version) { + const char* version = TCHAR_TO_ANSI(*FEngineVersion::Current().ToString()); + + UnrealCLR::Utility::Strcpy(Version, version, UnrealCLR::Utility::Strlen(version)); + } + + float GetMaxFPS() { + return GEngine->GetMaxFPS(); + } + + void SetMaxFPS(float MaxFPS) { + GEngine->SetMaxFPS(MaxFPS); + } + + void SetTitle(const char* Title) { + UGameEngine* gameEngine = Cast(GEngine); + + if (gameEngine) { + TSharedPtr gameViewportWindow = gameEngine->GameViewportWindow.Pin(); + + if (gameViewportWindow.IsValid()) + gameViewportWindow->SetTitle(FText::FromString(FString(ANSI_TO_TCHAR(Title)))); + } + } + + void AddActionMapping(const char* ActionName, const char* Key, bool Shift, bool Ctrl, bool Alt, bool Cmd) { + UPlayerInput::AddEngineDefinedActionMapping(FInputActionKeyMapping(FName(ANSI_TO_TCHAR(ActionName)), FKey(ANSI_TO_TCHAR(Key)), Shift, Ctrl, Alt, Cmd)); + } + + void AddAxisMapping(const char* AxisName, const char* Key, float Scale) { + UPlayerInput::AddEngineDefinedAxisMapping(FInputAxisKeyMapping(FName(ANSI_TO_TCHAR(AxisName)), FKey(ANSI_TO_TCHAR(Key)), Scale)); + } + + void ForceGarbageCollection(bool FullPurge) { + GEngine->ForceGarbageCollection(FullPurge); + } + + void DelayGarbageCollection() { + GEngine->DelayGarbageCollection(); + } + } + + namespace HeadMountedDisplay { + bool IsConnected() { + return UHeadMountedDisplayFunctionLibrary::IsHeadMountedDisplayConnected(); + } + + bool GetEnabled() { + return UHeadMountedDisplayFunctionLibrary::IsHeadMountedDisplayEnabled(); + } + + bool GetLowPersistenceMode() { + return UHeadMountedDisplayFunctionLibrary::IsInLowPersistenceMode(); + } + + void GetDeviceName(char* Name) { + FName deviceName = UHeadMountedDisplayFunctionLibrary::GetHMDDeviceName(); + + const char* name = TCHAR_TO_ANSI(*deviceName.ToString()); + + UnrealCLR::Utility::Strcpy(Name, name, UnrealCLR::Utility::Strlen(name)); + } + + void SetEnable(bool Value) { + UHeadMountedDisplayFunctionLibrary::EnableHMD(Value); + } + + void SetLowPersistenceMode(bool Value) { + UHeadMountedDisplayFunctionLibrary::EnableLowPersistenceMode(Value); + } + } + + namespace World { + void ForEachActor(AActor** Array, int32* Elements) { + static TArray actors; + + actors.Reset(); + + for (TActorIterator currentActor(UnrealCLR::Engine::World); currentActor; ++currentActor) { + actors.Add(*currentActor); + } + + int32 elements = actors.Num(); + + if (elements > 0) { + *Array = reinterpret_cast(actors.GetData()); + *Elements = elements; + } + } + + int32 GetActorCount() { + return UnrealCLR::Engine::World->GetActorCount(); + } + + float GetDeltaSeconds() { + return UnrealCLR::Engine::World->GetDeltaSeconds(); + } + + float GetRealTimeSeconds() { + return UnrealCLR::Engine::World->GetRealTimeSeconds(); + } + + float GetTimeSeconds() { + return UnrealCLR::Engine::World->GetTimeSeconds(); + } + + void GetCurrentLevelName(char* LevelName) { + FString mapName = UnrealCLR::Engine::World->GetMapName(); + + mapName.RemoveFromStart(UnrealCLR::Engine::World->StreamingLevelsPrefix); + + const char* levelName = TCHAR_TO_ANSI(*mapName); + + UnrealCLR::Utility::Strcpy(LevelName, levelName, UnrealCLR::Utility::Strlen(levelName)); + } + + bool GetSimulatePhysics() { + return UnrealCLR::Engine::World->bShouldSimulatePhysics; + } + + void GetWorldOrigin(Vector3* Value) { + *Value = FVector(UnrealCLR::Engine::World->OriginLocation); + } + + AActor* GetActor(const char* Name, ActorType Type) { + FString name; + AActor* actor = nullptr; + TSubclassOf type; + + if (Name) + name = FString(ANSI_TO_TCHAR(Name)); + + UNREALCLR_GET_ACTOR_TYPE(Type, UNREALCLR_NONE, ::StaticClass(), type); + + for (TActorIterator currentActor(UnrealCLR::Engine::World, type); currentActor; ++currentActor) { + if (!Name || (Name && *currentActor->GetName() == name)) { + actor = *currentActor; + break; + } + } + + return actor; + } + + AActor* GetActorByTag(const char* Tag, ActorType Type) { + AActor* actor = nullptr; + TSubclassOf type; + FName tag(ANSI_TO_TCHAR(Tag)); + + UNREALCLR_GET_ACTOR_TYPE(Type, UNREALCLR_NONE, ::StaticClass(), type); + + for (TActorIterator currentActor(UnrealCLR::Engine::World, type); currentActor; ++currentActor) { + if (currentActor->ActorHasTag(tag)) { + actor = *currentActor; + break; + } + } + + return actor; + } + + AActor* GetActorByID(uint32 ID, ActorType Type) { + AActor* actor = nullptr; + TSubclassOf type; + + UNREALCLR_GET_ACTOR_TYPE(Type, UNREALCLR_NONE, ::StaticClass(), type); + + for (TActorIterator currentActor(UnrealCLR::Engine::World, type); currentActor; ++currentActor) { + if (currentActor->GetUniqueID() == ID) { + actor = *currentActor; + break; + } + } + + return actor; + } + + APlayerController* GetFirstPlayerController() { + return UnrealCLR::Engine::World->GetFirstPlayerController(); + } + + AGameModeBase* GetGameMode() { + return UnrealCLR::Engine::World->GetAuthGameMode(); + } + + void SetOnActorBeginOverlapCallback(ActorOverlapDelegate Callback) { + UnrealCLR::Shared::Events[UnrealCLR::OnActorBeginOverlap] = (void*)Callback; + } + + void SetOnActorEndOverlapCallback(ActorOverlapDelegate Callback) { + UnrealCLR::Shared::Events[UnrealCLR::OnActorEndOverlap] = (void*)Callback; + } + + void SetOnActorHitCallback(ActorHitDelegate Callback) { + UnrealCLR::Shared::Events[UnrealCLR::OnActorHit] = (void*)Callback; + } + + void SetOnActorBeginCursorOverCallback(ActorCursorDelegate Callback) { + UnrealCLR::Shared::Events[UnrealCLR::OnActorBeginCursorOver] = (void*)Callback; + } + + void SetOnActorEndCursorOverCallback(ActorCursorDelegate Callback) { + UnrealCLR::Shared::Events[UnrealCLR::OnActorEndCursorOver] = (void*)Callback; + } + + void SetOnActorClickedCallback(ActorKeyDelegate Callback) { + UnrealCLR::Shared::Events[UnrealCLR::OnActorClicked] = (void*)Callback; + } + + void SetOnActorReleasedCallback(ActorKeyDelegate Callback) { + UnrealCLR::Shared::Events[UnrealCLR::OnActorReleased] = (void*)Callback; + } + + void SetOnComponentBeginOverlapCallback(ComponentOverlapDelegate Callback) { + UnrealCLR::Shared::Events[UnrealCLR::OnComponentBeginOverlap] = (void*)Callback; + } + + void SetOnComponentEndOverlapCallback(ComponentOverlapDelegate Callback) { + UnrealCLR::Shared::Events[UnrealCLR::OnComponentEndOverlap] = (void*)Callback; + } + + void SetOnComponentHitCallback(ComponentHitDelegate Callback) { + UnrealCLR::Shared::Events[UnrealCLR::OnComponentHit] = (void*)Callback; + } + + void SetOnComponentBeginCursorOverCallback(ComponentCursorDelegate Callback) { + UnrealCLR::Shared::Events[UnrealCLR::OnComponentBeginCursorOver] = (void*)Callback; + } + + void SetOnComponentEndCursorOverCallback(ComponentCursorDelegate Callback) { + UnrealCLR::Shared::Events[UnrealCLR::OnComponentEndCursorOver] = (void*)Callback; + } + + void SetOnComponentClickedCallback(ComponentKeyDelegate Callback) { + UnrealCLR::Shared::Events[UnrealCLR::OnComponentClicked] = (void*)Callback; + } + + void SetOnComponentReleasedCallback(ComponentKeyDelegate Callback) { + UnrealCLR::Shared::Events[UnrealCLR::OnComponentReleased] = (void*)Callback; + } + + void SetSimulatePhysics(bool Value) { + UnrealCLR::Engine::World->bShouldSimulatePhysics = Value; + } + + void SetGravity(float Value) { + AWorldSettings* worldSettings = UnrealCLR::Engine::World->GetWorldSettings(); + + worldSettings->bGlobalGravitySet = true; + worldSettings->GlobalGravityZ = Value; + } + + bool SetWorldOrigin(const Vector3* Value) { + return UnrealCLR::Engine::World->SetNewWorldOrigin(FIntVector(*Value)); + } + + void OpenLevel(const char* LevelName) { + GEngine->SetClientTravel(UnrealCLR::Engine::World, ANSI_TO_TCHAR(LevelName), TRAVEL_Absolute); + } + + bool LineTraceTestByChannel(const Vector3* Start, const Vector3* End, CollisionChannel Channel, bool TraceComplex, AActor* IgnoredActor, UPrimitiveComponent* IgnoredComponent) { + UNREALCLR_SET_COLLISION_QUERY_PARAMS(IgnoredActor, IgnoredComponent); + + queryParams.bTraceComplex = TraceComplex; + + return UnrealCLR::Engine::World->LineTraceTestByChannel(*Start, *End, Channel, queryParams); + } + + bool LineTraceTestByProfile(const Vector3* Start, const Vector3* End, const char* ProfileName, bool TraceComplex, AActor* IgnoredActor, UPrimitiveComponent* IgnoredComponent) { + UNREALCLR_SET_COLLISION_QUERY_PARAMS(IgnoredActor, IgnoredComponent); + + queryParams.bTraceComplex = TraceComplex; + + return UnrealCLR::Engine::World->LineTraceTestByProfile(*Start, *End, FName(ANSI_TO_TCHAR(ProfileName)), queryParams); + } + + bool LineTraceSingleByChannel(const Vector3* Start, const Vector3* End, CollisionChannel Channel, Hit* Hit, char* BoneName, bool TraceComplex, AActor* IgnoredActor, UPrimitiveComponent* IgnoredComponent) { + FHitResult hit; + + UNREALCLR_SET_COLLISION_QUERY_PARAMS(IgnoredActor, IgnoredComponent); + + queryParams.bTraceComplex = TraceComplex; + + bool result = UnrealCLR::Engine::World->LineTraceSingleByChannel(hit, *Start, *End, Channel, queryParams); + + UNREALCLR_GET_BONE_NAME(hit, BoneName); + + *Hit = hit; + + return result; + } + + bool LineTraceSingleByProfile(const Vector3* Start, const Vector3* End, const char* ProfileName, Hit* Hit, char* BoneName, bool TraceComplex, AActor* IgnoredActor, UPrimitiveComponent* IgnoredComponent) { + FHitResult hit; + + UNREALCLR_SET_COLLISION_QUERY_PARAMS(IgnoredActor, IgnoredComponent); + + queryParams.bTraceComplex = TraceComplex; + + bool result = UnrealCLR::Engine::World->LineTraceSingleByProfile(hit, *Start, *End, FName(ANSI_TO_TCHAR(ProfileName)), queryParams); + + UNREALCLR_GET_BONE_NAME(hit, BoneName); + + *Hit = hit; + + return result; + } + + bool SweepTestByChannel(const Vector3* Start, const Vector3* End, const Quaternion* Rotation, CollisionChannel Channel, const CollisionShape* Shape, bool TraceComplex, AActor* IgnoredActor, UPrimitiveComponent* IgnoredComponent) { + UNREALCLR_SET_COLLISION_QUERY_PARAMS(IgnoredActor, IgnoredComponent); + + queryParams.bTraceComplex = TraceComplex; + + return UnrealCLR::Engine::World->SweepTestByChannel(*Start, *End, *Rotation, Channel, *Shape, queryParams); + } + + bool SweepTestByProfile(const Vector3* Start, const Vector3* End, const Quaternion* Rotation, const char* ProfileName, const CollisionShape* Shape, bool TraceComplex, AActor* IgnoredActor, UPrimitiveComponent* IgnoredComponent) { + UNREALCLR_SET_COLLISION_QUERY_PARAMS(IgnoredActor, IgnoredComponent); + + queryParams.bTraceComplex = TraceComplex; + + return UnrealCLR::Engine::World->SweepTestByProfile( *Start, *End, *Rotation, FName(ANSI_TO_TCHAR(ProfileName)), *Shape, queryParams); + } + + bool SweepSingleByChannel(const Vector3* Start, const Vector3* End, const Quaternion* Rotation, CollisionChannel Channel, const CollisionShape* Shape, Hit* Hit, char* BoneName, bool TraceComplex, AActor* IgnoredActor, UPrimitiveComponent* IgnoredComponent) { + FHitResult hit; + + UNREALCLR_SET_COLLISION_QUERY_PARAMS(IgnoredActor, IgnoredComponent); + + queryParams.bTraceComplex = TraceComplex; + + bool result = UnrealCLR::Engine::World->SweepSingleByChannel(hit, *Start, *End, *Rotation, Channel, *Shape, queryParams); + + UNREALCLR_GET_BONE_NAME(hit, BoneName); + + *Hit = hit; + + return result; + } + + bool SweepSingleByProfile(const Vector3* Start, const Vector3* End, const Quaternion* Rotation, const char* ProfileName, const CollisionShape* Shape, Hit* Hit, char* BoneName, bool TraceComplex, AActor* IgnoredActor, UPrimitiveComponent* IgnoredComponent) { + FHitResult hit; + + UNREALCLR_SET_COLLISION_QUERY_PARAMS(IgnoredActor, IgnoredComponent); + + queryParams.bTraceComplex = TraceComplex; + + bool result = UnrealCLR::Engine::World->SweepSingleByProfile(hit, *Start, *End, *Rotation, FName(ANSI_TO_TCHAR(ProfileName)), *Shape, queryParams); + + UNREALCLR_GET_BONE_NAME(hit, BoneName); + + *Hit = hit; + + return result; + } + + bool OverlapAnyTestByChannel(const Vector3* Location, const Quaternion* Rotation, CollisionChannel Channel, const CollisionShape* Shape, AActor* IgnoredActor, UPrimitiveComponent* IgnoredComponent) { + UNREALCLR_SET_COLLISION_QUERY_PARAMS(IgnoredActor, IgnoredComponent); + + return UnrealCLR::Engine::World->OverlapAnyTestByChannel(*Location, *Rotation, Channel, *Shape, queryParams); + } + + bool OverlapAnyTestByProfile(const Vector3* Location, const Quaternion* Rotation, const char* ProfileName, const CollisionShape* Shape, AActor* IgnoredActor, UPrimitiveComponent* IgnoredComponent) { + UNREALCLR_SET_COLLISION_QUERY_PARAMS(IgnoredActor, IgnoredComponent); + + return UnrealCLR::Engine::World->OverlapAnyTestByProfile(*Location, *Rotation, FName(ANSI_TO_TCHAR(ProfileName)), *Shape, queryParams); + } + + bool OverlapBlockingTestByChannel(const Vector3* Location, const Quaternion* Rotation, CollisionChannel Channel, const CollisionShape* Shape, AActor* IgnoredActor, UPrimitiveComponent* IgnoredComponent) { + UNREALCLR_SET_COLLISION_QUERY_PARAMS(IgnoredActor, IgnoredComponent); + + return UnrealCLR::Engine::World->OverlapBlockingTestByChannel(*Location, *Rotation, Channel, *Shape, queryParams); + } + + bool OverlapBlockingTestByProfile(const Vector3* Location, const Quaternion* Rotation, const char* ProfileName, const CollisionShape* Shape, AActor* IgnoredActor, UPrimitiveComponent* IgnoredComponent) { + UNREALCLR_SET_COLLISION_QUERY_PARAMS(IgnoredActor, IgnoredComponent); + + return UnrealCLR::Engine::World->OverlapBlockingTestByProfile(*Location, *Rotation, FName(ANSI_TO_TCHAR(ProfileName)), *Shape, queryParams); + } + } + + namespace ConsoleObject { + bool IsBool(IConsoleObject* ConsoleObject) { + return ConsoleObject->IsVariableBool(); + } + + bool IsInt(IConsoleObject* ConsoleObject) { + return ConsoleObject->IsVariableInt(); + } + + bool IsFloat(IConsoleObject* ConsoleObject) { + return ConsoleObject->IsVariableFloat(); + } + + bool IsString(IConsoleObject* ConsoleObject) { + return ConsoleObject->IsVariableString(); + } + } + + namespace ConsoleVariable { + bool GetBool(IConsoleVariable* ConsoleVariable) { + return ConsoleVariable->GetBool(); + } + + int32 GetInt(IConsoleVariable* ConsoleVariable) { + return ConsoleVariable->GetInt(); + } + + float GetFloat(IConsoleVariable* ConsoleVariable) { + return ConsoleVariable->GetFloat(); + } + + void GetString(IConsoleVariable* ConsoleVariable, char* Value) { + const char* value = TCHAR_TO_ANSI(*ConsoleVariable->GetString()); + + UnrealCLR::Utility::Strcpy(Value, value, UnrealCLR::Utility::Strlen(value)); + } + + void SetBool(IConsoleVariable* ConsoleVariable, bool Value) { + ConsoleVariable->Set(Value); + } + + void SetInt(IConsoleVariable* ConsoleVariable, int32 Value) { + ConsoleVariable->Set(Value); + } + + void SetFloat(IConsoleVariable* ConsoleVariable, float Value) { + ConsoleVariable->Set(Value); + } + + void SetString(IConsoleVariable* ConsoleVariable, const char* Value) { + ConsoleVariable->Set(ANSI_TO_TCHAR(Value)); + } + + void SetOnChangedCallback(IConsoleVariable* ConsoleVariable, ConsoleVariableDelegate Callback) { + auto callback = [Callback](IConsoleVariable* ConsoleVariable) { + UnrealCLR::ManagedCommand(UnrealCLR::Command((void*)Callback)); + }; + + ConsoleVariable->SetOnChangedCallback(FConsoleVariableDelegate::CreateLambda(callback)); + } + + void ClearOnChangedCallback(IConsoleVariable* ConsoleVariable) { + FConsoleVariableDelegate emptyDelegate; + + ConsoleVariable->SetOnChangedCallback(emptyDelegate); + } + } + + namespace Actor { + bool IsPendingKill(AActor* Actor) { + return Actor->IsPendingKillPending(); + } + + bool IsRootComponentMovable(AActor* Actor) { + return Actor->IsRootComponentMovable(); + } + + bool IsOverlappingActor(AActor* Actor, AActor* Other) { + return Actor->IsOverlappingActor(Other); + } + + void ForEachComponent(AActor* Actor, UActorComponent** Array, int32* Elements) { + static TArray components; + + components.Reset(); + + Actor->GetComponents(components); + + int32 elements = components.Num(); + + if (elements > 0) { + *Array = reinterpret_cast(components.GetData()); + *Elements = elements; + } + } + + void ForEachAttachedActor(AActor* Actor, AActor** Array, int32* Elements) { + static TArray actors; + + actors.Reset(); + + Actor->GetAttachedActors(actors); + + int32 elements = actors.Num(); + + if (elements > 0) { + *Array = reinterpret_cast(actors.GetData()); + *Elements = elements; + } + } + + void ForEachChildActor(AActor* Actor, AActor** Array, int32* Elements) { + static TArray actors; + + actors.Reset(); + + Actor->GetAllChildActors(actors); + + int32 elements = actors.Num(); + + if (elements > 0) { + *Array = reinterpret_cast(actors.GetData()); + *Elements = elements; + } + } + + void ForEachOverlappingActor(AActor* Actor, AActor** Array, int32* Elements) { + static TArray overlappingActors; + + overlappingActors.Reset(); + + Actor->GetOverlappingActors(overlappingActors); + + int32 elements = overlappingActors.Num(); + + if (elements > 0) { + *Array = reinterpret_cast(overlappingActors.GetData()); + *Elements = elements; + } + } + + AActor* Spawn(const char* Name, ActorType Type, UObject* Blueprint) { + AActor* actor = nullptr; + + if (!Blueprint) { + UNREALCLR_GET_ACTOR_TYPE(Type, UnrealCLR::Engine::World->SpawnActor UNREALCLR_BRACKET_LEFT, ::StaticClass() UNREALCLR_BRACKET_RIGHT, actor); + } else { + #if !WITH_EDITOR + UNREALCLR_GET_ACTOR_TYPE(Type, UnrealCLR::Engine::World->SpawnActor<, >(Cast(Blueprint)), actor); + #else + UNREALCLR_GET_ACTOR_TYPE(Type, UnrealCLR::Engine::World->SpawnActor<, >(Cast(Blueprint)->GeneratedClass), actor); + #endif + } + + if (actor && Name) { + FString name(ANSI_TO_TCHAR(Name)); + + actor->Rename(*name); + + #if WITH_EDITOR + actor->SetActorLabel(*name); + #endif + } + + return actor; + } + + bool Destroy(AActor* Actor) { + return UnrealCLR::Engine::World->DestroyActor(Actor); + } + + void Rename(AActor* Actor, const char* Name) { + FString name(ANSI_TO_TCHAR(Name)); + + Actor->Rename(*name); + + #if WITH_EDITOR + Actor->SetActorLabel(*name); + #endif + } + + void Hide(AActor* Actor, bool Value) { + Actor->SetActorHiddenInGame(Value); + } + + bool TeleportTo(AActor* Actor, const Vector3* DestinationLocation, const Quaternion* DestinationRotation, bool IsATest, bool NoCheck) { + return Actor->TeleportTo(*DestinationLocation, FRotator(*DestinationRotation), IsATest, NoCheck); + } + + UActorComponent* GetComponent(AActor* Actor, const char* Name, ComponentType Type) { + FString name; + UActorComponent* component = nullptr; + TSubclassOf type; + + if (Name) + name = FString(ANSI_TO_TCHAR(Name)); + + UNREALCLR_GET_COMPONENT_TYPE(Type, UNREALCLR_NONE, ::StaticClass(), type); + + for (UActorComponent* currentComponent : Actor->GetComponents()) { + if (currentComponent && currentComponent->IsA(type) && (!Name || (Name && *currentComponent->GetName() == name))) { + component = currentComponent; + break; + } + } + + return component; + } + + UActorComponent* GetComponentByTag(AActor* Actor, const char* Tag, ComponentType Type) { + UActorComponent* component = nullptr; + TSubclassOf type; + FName tag(ANSI_TO_TCHAR(Tag)); + + UNREALCLR_GET_COMPONENT_TYPE(Type, UNREALCLR_NONE, ::StaticClass(), type); + + for (UActorComponent* currentComponent : Actor->GetComponents()) { + if (currentComponent->ComponentHasTag(tag)) { + component = currentComponent; + break; + } + } + + return component; + } + + UActorComponent* GetComponentByID(AActor* Actor, uint32 ID, ComponentType Type) { + UActorComponent* component = nullptr; + TSubclassOf type; + + UNREALCLR_GET_COMPONENT_TYPE(Type, UNREALCLR_NONE, ::StaticClass(), type); + + for (UActorComponent* currentComponent : Actor->GetComponents()) { + if (currentComponent->GetUniqueID() == ID) { + component = currentComponent; + break; + } + } + + return component; + } + + USceneComponent* GetRootComponent(AActor* Actor, ComponentType Type) { + USceneComponent* component = nullptr; + USceneComponent* rootComponent = Actor->GetRootComponent(); + TSubclassOf type; + + UNREALCLR_GET_ATTACHABLE_COMPONENT_TYPE(Type, UNREALCLR_NONE, ::StaticClass(), type); + + if (rootComponent->IsA(type)) + component = rootComponent; + + return component; + } + + UInputComponent* GetInputComponent(AActor* Actor) { + return Actor->InputComponent; + } + + float GetCreationTime(AActor* Actor) { + return Actor->CreationTime; + } + + bool GetBlockInput(AActor* Actor) { + return Actor->bBlockInput; + } + + float GetDistanceTo(AActor* Actor, AActor* Other) { + return Actor->GetDistanceTo(Other); + } + + float GetHorizontalDistanceTo(AActor* Actor, AActor* Other) { + return Actor->GetDistanceTo(Other); + } + + void GetBounds(AActor* Actor, bool OnlyCollidingComponents, Vector3* Origin, Vector3* Extent) { + FVector origin, extent; + + Actor->GetActorBounds(OnlyCollidingComponents, origin, extent); + + *Origin = origin; + *Extent = extent; + } + + void GetEyesViewPoint(AActor* Actor, Vector3* Location, Quaternion* Rotation) { + FVector location; + FRotator rotation; + + Actor->GetActorEyesViewPoint(location, rotation); + + *Location = location; + *Rotation = rotation.Quaternion(); + } + + bool SetRootComponent(AActor* Actor, USceneComponent* RootComponent) { + return Actor->SetRootComponent(RootComponent); + } + + void SetInputComponent(AActor* Actor, UInputComponent* InputComponent) { + Actor->InputComponent = InputComponent; + } + + void SetBlockInput(AActor* Actor, bool Value) { + Actor->bBlockInput = Value; + } + + void SetLifeSpan(AActor* Actor, float LifeSpan) { + Actor->SetLifeSpan(LifeSpan); + } + + void SetEnableInput(AActor* Actor, APlayerController* PlayerController, bool Value) { + if (Value) + Actor->EnableInput(PlayerController); + else + Actor->DisableInput(PlayerController); + } + + void SetEnableCollision(AActor* Actor, bool Value) { + Actor->SetActorEnableCollision(Value); + } + + void AddTag(AActor* Actor, const char* Tag) { + Actor->Tags.AddUnique(FName(ANSI_TO_TCHAR(Tag))); + } + + void RemoveTag(AActor* Actor, const char* Tag) { + Actor->Tags.Remove(FName(ANSI_TO_TCHAR(Tag))); + } + + bool HasTag(AActor* Actor, const char* Tag) { + return Actor->ActorHasTag(FName(ANSI_TO_TCHAR(Tag))); + } + + void RegisterEvent(AActor* Actor, ActorEventType Type) { + UNREALCLR_SET_ACTOR_EVENT(Type, !, AddDynamic); + } + + void UnregisterEvent(AActor* Actor, ActorEventType Type) { + UNREALCLR_SET_ACTOR_EVENT(Type, UNREALCLR_NONE, RemoveDynamic); + } + } + + namespace GameModeBase { + bool GetUseSeamlessTravel(AGameModeBase* GameModeBase) { + return GameModeBase->bUseSeamlessTravel; + } + + void SetUseSeamlessTravel(AGameModeBase* GameModeBase, bool Value) { + GameModeBase->bUseSeamlessTravel = Value; + } + + void SwapPlayerControllers(AGameModeBase* GameModeBase, APlayerController* PlayerController, APlayerController* NewPlayerController) { + GameModeBase->SwapPlayerControllers(PlayerController, NewPlayerController); + } + } + + namespace Pawn { + bool IsControlled(APawn* Pawn) { + return Pawn->IsPawnControlled(); + } + + bool IsPlayerControlled(APawn* Pawn) { + return Pawn->IsPlayerControlled(); + } + + AutoPossessAI GetAutoPossessAI(APawn* Pawn) { + return Pawn->AutoPossessAI; + } + + AutoReceiveInput GetAutoPossessPlayer(APawn* Pawn) { + return Pawn->AutoPossessPlayer; + } + + bool GetUseControllerRotationYaw(APawn* Pawn) { + return Pawn->bUseControllerRotationYaw; + } + + bool GetUseControllerRotationPitch(APawn* Pawn) { + return Pawn->bUseControllerRotationPitch; + } + + bool GetUseControllerRotationRoll(APawn* Pawn) { + return Pawn->bUseControllerRotationRoll; + } + + void GetGravityDirection(APawn* Pawn, Vector3* Value) { + *Value = Pawn->GetGravityDirection(); + } + + AAIController* GetAIController(APawn* Pawn) { + return Cast(Pawn->GetController()); + } + + APlayerController* GetPlayerController(APawn* Pawn) { + return Cast(Pawn->GetController()); + } + + void SetAutoPossessAI(APawn* Pawn, AutoPossessAI Value) { + Pawn->AutoPossessAI = Value; + } + + void SetAutoPossessPlayer(APawn* Pawn, AutoReceiveInput Value) { + Pawn->AutoPossessPlayer = Value; + } + + void SetUseControllerRotationYaw(APawn* Pawn, bool Value) { + Pawn->bUseControllerRotationYaw = Value; + } + + void SetUseControllerRotationPitch(APawn* Pawn, bool Value) { + Pawn->bUseControllerRotationPitch = Value; + } + + void SetUseControllerRotationRoll(APawn* Pawn, bool Value) { + Pawn->bUseControllerRotationRoll = Value; + } + + void AddControllerYawInput(APawn* Pawn, float Value) { + Pawn->AddControllerYawInput(Value); + } + + void AddControllerPitchInput(APawn* Pawn, float Value) { + Pawn->AddControllerPitchInput(Value); + } + + void AddControllerRollInput(APawn* Pawn, float Value) { + Pawn->AddControllerRollInput(Value); + } + + void AddMovementInput(APawn* Pawn, const Vector3* WorldDirection, float ScaleValue, bool Force) { + Pawn->AddMovementInput(*WorldDirection, ScaleValue, Force); + } + } + + namespace Character { + bool IsCrouched(ACharacter* Character) { + return Character->bIsCrouched; + } + + bool CanCrouch(ACharacter* Character) { + return Character->CanCrouch(); + } + + bool CanJump(ACharacter* Character) { + return Character->CanJump(); + } + + void CheckJumpInput(ACharacter* Character, float DeltaTime) { + Character->CheckJumpInput(DeltaTime); + } + + void ClearJumpInput(ACharacter* Character, float DeltaTime) { + Character->ClearJumpInput(DeltaTime); + } + + void Launch(ACharacter* Character, const Vector3* Velocity, bool OverrideXY, bool OverrideZ) { + Character->LaunchCharacter(*Velocity, OverrideXY, OverrideZ); + } + + void Crouch(ACharacter* Character) { + Character->Crouch(); + } + + void StopCrouching(ACharacter* Character) { + Character->UnCrouch(); + } + + void Jump(ACharacter* Character) { + Character->Jump(); + } + + void StopJumping(ACharacter* Character) { + Character->StopJumping(); + } + + void SetOnLandedCallback(ACharacter* Character, CharacterLandedDelegate Callback) { + UUnrealCLRCharacter* character = NewObject(Character); + + character->LandedCallback = (void*)Callback; + + Character->LandedDelegate.AddDynamic(character, &UUnrealCLRCharacter::Landed); + } + } + + namespace Controller { + bool IsLookInputIgnored(AController* Controller) { + return Controller->IsLookInputIgnored(); + } + + bool IsMoveInputIgnored(AController* Controller) { + return Controller->IsMoveInputIgnored(); + } + + bool IsPlayerController(AController* Controller) { + return Controller->IsPlayerController(); + } + + APawn* GetPawn(AController* Controller) { + return Controller->GetPawn(); + } + + ACharacter* GetCharacter(AController* Controller) { + return Controller->GetCharacter(); + } + + AActor* GetViewTarget(AController* Controller) { + return Controller->GetViewTarget(); + } + + void GetControlRotation(AController* Controller, Quaternion* Value) { + *Value = Controller->GetControlRotation().Quaternion(); + } + + void GetDesiredRotation(AController* Controller, Quaternion* Value) { + *Value = Controller->GetDesiredRotation().Quaternion(); + } + + bool LineOfSightTo(AController* Controller, AActor* Actor, const Vector3* ViewPoint, bool AlternateChecks) { + return Controller->LineOfSightTo(Actor, *ViewPoint, AlternateChecks); + } + + void SetControlRotation(AController* Controller, const Quaternion* Value) { + Controller->SetControlRotation(FRotator(*Value)); + } + + void SetInitialLocationAndRotation(AController* Controller, const Vector3* NewLocation, const Quaternion* NewRotation) { + Controller->SetInitialLocationAndRotation(*NewLocation, FRotator(*NewRotation)); + } + + void SetIgnoreLookInput(AController* Controller, bool Value) { + Controller->SetIgnoreLookInput(Value); + } + + void SetIgnoreMoveInput(AController* Controller, bool Value) { + Controller->SetIgnoreMoveInput(Value); + } + + void ResetIgnoreLookInput(AController* Controller) { + Controller->ResetIgnoreLookInput(); + } + + void ResetIgnoreMoveInput(AController* Controller) { + Controller->ResetIgnoreMoveInput(); + } + + void Possess(AController* Controller, APawn* Pawn) { + Controller->Possess(Pawn); + } + + void Unpossess(AController* Controller) { + Controller->UnPossess(); + } + } + + namespace AIController { + void ClearFocus(AAIController* AIController, AIFocusPriority Priority) { + AIController->ClearFocus(static_cast(Priority)); + } + + void GetFocalPoint(AAIController* AIController, Vector3* Value) { + *Value = AIController->GetFocalPoint(); + } + + void SetFocalPoint(AAIController* AIController, const Vector3* NewFocus, AIFocusPriority Priority) { + AIController->SetFocalPoint(*NewFocus, static_cast(Priority)); + } + + AActor* GetFocusActor(AAIController* AIController) { + return AIController->GetFocusActor(); + } + + bool GetAllowStrafe(AAIController* AIController) { + return AIController->bAllowStrafe; + } + + void SetAllowStrafe(AAIController* AIController, bool Value) { + AIController->bAllowStrafe = Value; + } + + void SetFocus(AAIController* AIController, AActor* NewFocus, AIFocusPriority Priority) { + AIController->SetFocus(NewFocus, static_cast(Priority)); + } + } + + namespace PlayerController { + bool IsPaused(APlayerController* PlayerController) { + return PlayerController->IsPaused(); + } + + bool GetShowMouseCursor(APlayerController* PlayerController) { + return PlayerController->bShowMouseCursor; + } + + bool GetEnableClickEvents(APlayerController* PlayerController) { + return PlayerController->bEnableClickEvents; + } + + bool GetEnableMouseOverEvents(APlayerController* PlayerController) { + return PlayerController->bEnableMouseOverEvents; + } + + bool GetMousePosition(APlayerController* PlayerController, float* X, float* Y) { + return PlayerController->GetMousePosition(*X, *Y); + } + + UPlayer* GetPlayer(APlayerController* PlayerController) { + return PlayerController->Player; + } + + UPlayerInput* GetPlayerInput(APlayerController* PlayerController) { + return PlayerController->PlayerInput; + } + + bool GetHitResultAtScreenPosition(APlayerController* PlayerController, const Vector2* ScreenPosition, CollisionChannel TraceChannel, Hit* Hit, bool TraceComplex) { + FHitResult hit; + + bool result = PlayerController->GetHitResultAtScreenPosition(*ScreenPosition, TraceChannel, TraceComplex, hit); + + *Hit = hit; + + return result; + } + + bool GetHitResultUnderCursor(APlayerController* PlayerController, CollisionChannel TraceChannel, Hit* Hit, bool TraceComplex) { + FHitResult hit; + + bool result = PlayerController->GetHitResultUnderCursor(TraceChannel, TraceComplex, hit); + + *Hit = hit; + + return result; + } + + void SetShowMouseCursor(APlayerController* PlayerController, bool Value) { + PlayerController->bShowMouseCursor = Value; + } + + void SetEnableClickEvents(APlayerController* PlayerController, bool Value) { + PlayerController->bEnableClickEvents = Value; + } + + void SetEnableMouseOverEvents(APlayerController* PlayerController, bool Value) { + PlayerController->bEnableMouseOverEvents = Value; + } + + void SetMousePosition(APlayerController* PlayerController, float X, float Y) { + PlayerController->SetMouseLocation(static_cast(X), static_cast(Y)); + } + + void ConsoleCommand(APlayerController* PlayerController, const char* Command, bool WriteToLog) { + PlayerController->ConsoleCommand(FString(ANSI_TO_TCHAR(Command)), WriteToLog); + } + + bool SetPause(APlayerController* PlayerController, bool Value) { + return PlayerController->SetPause(Value); + } + + void SetViewTarget(APlayerController* PlayerController, AActor* NewViewTarget) { + PlayerController->SetViewTarget(NewViewTarget); + } + + void SetViewTargetWithBlend(APlayerController* PlayerController, AActor* NewViewTarget, float Time, float Exponent, BlendType Type, bool LockOutgoing) { + PlayerController->SetViewTargetWithBlend(NewViewTarget, Time, Type, Exponent, LockOutgoing); + } + + void AddYawInput(APlayerController* PlayerController, float Value) { + PlayerController->AddYawInput(Value); + } + + void AddPitchInput(APlayerController* PlayerController, float Value) { + PlayerController->AddPitchInput(Value); + } + + void AddRollInput(APlayerController* PlayerController, float Value) { + PlayerController->AddRollInput(Value); + } + } + + namespace Volume { + bool EncompassesPoint(AVolume* Volume, const Vector3* Point, float SphereRadius, float* DistanceToPoint) { + return Volume->EncompassesPoint(*Point, SphereRadius, DistanceToPoint); + } + } + + namespace PostProcessVolume { + bool GetEnabled(APostProcessVolume* PostProcessVolume) { + return PostProcessVolume->bEnabled; + } + + float GetBlendRadius(APostProcessVolume* PostProcessVolume) { + return PostProcessVolume->BlendRadius; + } + + float GetBlendWeight(APostProcessVolume* PostProcessVolume) { + return PostProcessVolume->BlendWeight; + } + + bool GetUnbound(APostProcessVolume* PostProcessVolume) { + return PostProcessVolume->bUnbound; + } + + float GetPriority(APostProcessVolume* PostProcessVolume) { + return PostProcessVolume->Priority; + } + + void SetEnabled(APostProcessVolume* PostProcessVolume, bool Value) { + PostProcessVolume->bEnabled = Value; + } + + void SetBlendRadius(APostProcessVolume* PostProcessVolume, float Value) { + PostProcessVolume->BlendRadius = Value; + } + + void SetBlendWeight(APostProcessVolume* PostProcessVolume, float Value) { + PostProcessVolume->BlendWeight = Value; + } + + void SetUnbound(APostProcessVolume* PostProcessVolume, bool Value) { + PostProcessVolume->bUnbound = Value; + } + + void SetPriority(APostProcessVolume* PostProcessVolume, float Priority) { + PostProcessVolume->Priority = Priority; + } + } + + namespace SoundBase { + float GetDuration(USoundBase* SoundBase) { + return SoundBase->Duration; + } + } + + namespace SoundWave { + bool GetLoop(USoundWave* SoundWave) { + return SoundWave->bLooping; + } + + void SetLoop(USoundWave* SoundWave, bool Value) { + SoundWave->bLooping = Value; + } + } + + namespace AnimationInstance { + UAnimMontage* GetCurrentActiveMontage(UAnimInstance* AnimationInstance) { + return AnimationInstance->GetCurrentActiveMontage(); + } + + bool IsPlaying(UAnimInstance* AnimationInstance, UAnimMontage* Montage) { + return AnimationInstance->Montage_IsPlaying(Montage); + } + + float GetPlayRate(UAnimInstance* AnimationInstance, UAnimMontage* Montage) { + return AnimationInstance->Montage_GetPlayRate(Montage); + } + + float GetPosition(UAnimInstance* AnimationInstance, UAnimMontage* Montage) { + return AnimationInstance->Montage_GetPosition(Montage); + } + + float GetBlendTime(UAnimInstance* AnimationInstance, UAnimMontage* Montage) { + return AnimationInstance->Montage_GetBlendTime(Montage); + } + + void GetCurrentSection(UAnimInstance* AnimationInstance, UAnimMontage* Montage, char* SectionName) { + const char* sectionName = TCHAR_TO_ANSI(*AnimationInstance->Montage_GetCurrentSection(Montage).ToString()); + + UnrealCLR::Utility::Strcpy(SectionName, sectionName, UnrealCLR::Utility::Strlen(sectionName)); + } + + void SetPlayRate(UAnimInstance* AnimationInstance, UAnimMontage* Montage, float Value) { + AnimationInstance->Montage_SetPlayRate(Montage, Value); + } + + void SetPosition(UAnimInstance* AnimationInstance, UAnimMontage* Montage, float Position) { + AnimationInstance->Montage_SetPosition(Montage, Position); + } + + void SetNextSection(UAnimInstance* AnimationInstance, UAnimMontage* Montage, const char* SectionToChange, const char* NextSection) { + AnimationInstance->Montage_SetNextSection(FName(ANSI_TO_TCHAR(SectionToChange)), FName(ANSI_TO_TCHAR(NextSection)), Montage); + } + + float PlayMontage(UAnimInstance* AnimationInstance, UAnimMontage* Montage, float PlayRate, float TimeToStartMontageAt, bool StopAllMontages) { + return AnimationInstance->Montage_Play(Montage, PlayRate, EMontagePlayReturnType::MontageLength, TimeToStartMontageAt, StopAllMontages); + } + + void PauseMontage(UAnimInstance* AnimationInstance, UAnimMontage* Montage) { + AnimationInstance->Montage_Pause(Montage); + } + + void ResumeMontage(UAnimInstance* AnimationInstance, UAnimMontage* Montage) { + AnimationInstance->Montage_Resume(Montage); + } + + void StopMontage(UAnimInstance* AnimationInstance, UAnimMontage* Montage, float BlendOutTime) { + AnimationInstance->Montage_Stop(BlendOutTime, Montage); + } + + void JumpToSection(UAnimInstance* AnimationInstance, UAnimMontage* Montage, const char* SectionName) { + AnimationInstance->Montage_JumpToSection(FName(ANSI_TO_TCHAR(SectionName)), Montage); + } + + void JumpToSectionsEnd(UAnimInstance* AnimationInstance, UAnimMontage* Montage, const char* SectionName) { + AnimationInstance->Montage_JumpToSectionsEnd(FName(ANSI_TO_TCHAR(SectionName)), Montage); + } + } + + namespace Player { + APlayerController* GetPlayerController(UPlayer* Player) { + return Player->GetPlayerController(UnrealCLR::Engine::World); + } + } + + namespace PlayerInput { + bool IsKeyPressed(UPlayerInput* PlayerInput, const char* Key) { + return PlayerInput->IsPressed(FKey(ANSI_TO_TCHAR(Key))); + } + + float GetTimeKeyPressed(UPlayerInput* PlayerInput, const char* Key) { + return PlayerInput->GetTimeDown(FKey(ANSI_TO_TCHAR(Key))); + } + + void GetMouseSensitivity(UPlayerInput* PlayerInput, Vector2* Value) { + Value->X = PlayerInput->GetMouseSensitivityX(); + Value->Y = PlayerInput->GetMouseSensitivityY(); + } + + void SetMouseSensitivity(UPlayerInput* PlayerInput, const Vector2* Value) { + PlayerInput->SetMouseSensitivity(Value->X, Value->Y); + } + + void AddActionMapping(UPlayerInput* PlayerInput, const char* ActionName, const char* Key, bool Shift, bool Ctrl, bool Alt, bool Cmd) { + PlayerInput->AddActionMapping(FInputActionKeyMapping(FName(ANSI_TO_TCHAR(ActionName)), FKey(ANSI_TO_TCHAR(Key)), Shift, Ctrl, Alt, Cmd)); + } + + void AddAxisMapping(UPlayerInput* PlayerInput, const char* AxisName, const char* Key, float Scale) { + PlayerInput->AddAxisMapping(FInputAxisKeyMapping(FName(ANSI_TO_TCHAR(AxisName)), FKey(ANSI_TO_TCHAR(Key)), Scale)); + } + + void RemoveActionMapping(UPlayerInput* PlayerInput, const char* ActionName, const char* Key) { + PlayerInput->RemoveActionMapping(FInputActionKeyMapping(FName(ANSI_TO_TCHAR(ActionName)), FKey(ANSI_TO_TCHAR(Key)))); + } + + void RemoveAxisMapping(UPlayerInput* PlayerInput, const char* AxisName, const char* Key) { + PlayerInput->RemoveAxisMapping(FInputAxisKeyMapping(FName(ANSI_TO_TCHAR(AxisName)), FKey(ANSI_TO_TCHAR(Key)))); + } + } + + namespace Font { + void GetStringSize(UFont* Font, const char* Text, int32* Height, int32* Width) { + int32 height, width; + + Font->GetStringHeightAndWidth(ANSI_TO_TCHAR(Text), height, width); + + *Height = height; + *Width = width; + } + } + + namespace Texture2D { + UTexture2D* CreateFromFile(const char* FilePath) { + return FImageUtils::ImportFileAsTexture2D(FString(ANSI_TO_TCHAR(FilePath))); + } + + UTexture2D* CreateFromBuffer(const uint8* Buffer, int32 Length) { + return FImageUtils::ImportBufferAsTexture2D(TArray(Buffer, Length)); + } + + bool HasAlphaChannel(UTexture2D* Texture2D) { + return Texture2D->HasAlphaChannel(); + } + + void GetSize(UTexture2D* Texture2D, Vector2* Value) { + Value->X = Texture2D->GetSizeX(); + Value->Y = Texture2D->GetSizeY(); + } + + PixelFormat GetPixelFormat(UTexture2D* Texture2D) { + return Texture2D->GetPixelFormat(); + } + } + + namespace ActorComponent { + bool IsOwnerSelected(UActorComponent* ActorComponent) { + return ActorComponent->IsOwnerSelected(); + } + + AActor* GetOwner(UActorComponent* ActorComponent, ActorType Type) { + AActor* actor = nullptr; + + UNREALCLR_GET_ACTOR_TYPE(Type, Cast<, >(ActorComponent->GetOwner()), actor); + + return actor; + } + + void Destroy(UActorComponent* ActorComponent, bool PromoteChild) { + ActorComponent->DestroyComponent(PromoteChild); + } + + void AddTag(UActorComponent* ActorComponent, const char* Tag) { + ActorComponent->ComponentTags.AddUnique(FName(ANSI_TO_TCHAR(Tag))); + } + + void RemoveTag(UActorComponent* ActorComponent, const char* Tag) { + ActorComponent->ComponentTags.Remove(FName(ANSI_TO_TCHAR(Tag))); + } + + bool HasTag(UActorComponent* ActorComponent, const char* Tag) { + return ActorComponent->ComponentHasTag(FName(ANSI_TO_TCHAR(Tag))); + } + } + + namespace InputComponent { + bool HasBindings(UInputComponent* InputComponent) { + return InputComponent->HasBindings(); + } + + int32 GetActionBindingsNumber(UInputComponent* InputComponent) { + return InputComponent->GetNumActionBindings(); + } + + void ClearActionBindings(UInputComponent* InputComponent) { + InputComponent->ClearActionBindings(); + } + + void BindAction(UInputComponent* InputComponent, const char* ActionName, InputEvent KeyEvent, bool ExecutedWhenPaused, InputDelegate Callback) { + FInputActionBinding actionBinding(FName(ANSI_TO_TCHAR(ActionName)), KeyEvent); + + actionBinding.bExecuteWhenPaused = ExecutedWhenPaused; + actionBinding.ActionDelegate.GetDelegateForManualSet().BindLambda([Callback]() { + UnrealCLR::ManagedCommand(UnrealCLR::Command((void*)Callback)); + }); + + InputComponent->AddActionBinding(actionBinding); + } + + void BindAxis(UInputComponent* InputComponent, const char* AxisName, bool ExecutedWhenPaused, InputAxisDelegate Callback) { + FInputAxisBinding axisBinding(FName(ANSI_TO_TCHAR(AxisName))); + + axisBinding.bExecuteWhenPaused = ExecutedWhenPaused; + axisBinding.AxisDelegate.GetDelegateForManualSet().BindLambda([Callback](float AxisValue) { + UnrealCLR::ManagedCommand(UnrealCLR::Command((void*)Callback, AxisValue)); + }); + + InputComponent->AxisBindings.Emplace(axisBinding); + } + + void RemoveActionBinding(UInputComponent* InputComponent, const char* ActionName, InputEvent KeyEvent) { + InputComponent->RemoveActionBinding(FName(ANSI_TO_TCHAR(ActionName)), KeyEvent); + } + + bool GetBlockInput(UInputComponent* InputComponent) { + return InputComponent->bBlockInput; + } + + void SetBlockInput(UInputComponent* InputComponent, bool Value) { + InputComponent->bBlockInput = Value; + } + + int32 GetPriority(UInputComponent* InputComponent) { + return InputComponent->Priority; + } + + void SetPriority(UInputComponent* InputComponent, int32 Value) { + InputComponent->Priority = Value; + } + } + + namespace SceneComponent { + bool IsAttachedToComponent(USceneComponent* SceneComponent, USceneComponent* Component) { + return SceneComponent->IsAttachedTo(Component); + } + + bool IsAttachedToActor(USceneComponent* SceneComponent, AActor* Actor) { + USceneComponent* Component = SceneComponent; + + while (Component) { + if (Component->GetOwner() == Actor) + return true; + + Component = Component->GetAttachParent(); + } + + return false; + } + + bool IsVisible(USceneComponent* SceneComponent) { + return SceneComponent->IsVisible(); + } + + bool IsSocketExists(USceneComponent* SceneComponent, const char* SocketName) { + return SceneComponent->DoesSocketExist(FName(ANSI_TO_TCHAR(SocketName))); + } + + bool HasAnySockets(USceneComponent* SceneComponent) { + return SceneComponent->HasAnySockets(); + } + + bool CanAttachAsChild(USceneComponent* SceneComponent, USceneComponent* ChildComponent, const char* SocketName) { + return SceneComponent->CanAttachAsChild(ChildComponent, FName(ANSI_TO_TCHAR(SocketName))); + } + + void ForEachAttachedChild(USceneComponent* SceneComponent, USceneComponent** Array, int32* Elements) { + static TArray attachedComponents; + + attachedComponents.Reset(); + + attachedComponents = SceneComponent->GetAttachChildren(); + + int32 elements = attachedComponents.Num(); + + if (elements > 0) { + *Array = reinterpret_cast(attachedComponents.GetData()); + *Elements = elements; + } + } + + USceneComponent* Create(AActor* Actor, ComponentType Type, const char* Name, bool SetAsRoot, UObject* Blueprint) { + USceneComponent* component = nullptr; + + if (!Blueprint) { + UNREALCLR_GET_ATTACHABLE_COMPONENT_TYPE(Type, NewObject<, >(Actor), component); + } else { + #if !WITH_EDITOR + UNREALCLR_GET_ATTACHABLE_COMPONENT_TYPE(Type, NewObject<, >(Actor, Cast(Blueprint)), component); + #else + UNREALCLR_GET_ATTACHABLE_COMPONENT_TYPE(Type, NewObject<, >(Actor, Cast(Blueprint)->GeneratedClass), component); + #endif + } + + if (component) { + USceneComponent* rootComponent = Actor->GetRootComponent(); + + if (!rootComponent || SetAsRoot) + Actor->SetRootComponent(component); + else + component->AttachToComponent(rootComponent, FAttachmentTransformRules::KeepRelativeTransform); + + Actor->AddInstanceComponent(component); + component->OnComponentCreated(); + component->RegisterComponent(); + + if (Name) + component->Rename(*FString(ANSI_TO_TCHAR(Name))); + } + + return component; + } + + bool AttachToComponent(USceneComponent* SceneComponent, USceneComponent* Parent, AttachmentTransformRule AttachmentRule, const char* SocketName) { + FAttachmentTransformRules attachmentRules = FAttachmentTransformRules::KeepRelativeTransform; + FName socketName; + + UNREALCLR_GET_ATTACHMENT_RULE(AttachmentRule, attachmentRules); + + if (SocketName) + socketName = FName(ANSI_TO_TCHAR(SocketName)); + + return SceneComponent->AttachToComponent(Parent, attachmentRules, socketName); + } + + void DetachFromComponent(USceneComponent* SceneComponent, DetachmentTransformRule DetachmentRule) { + FDetachmentTransformRules detachmentRules = FDetachmentTransformRules::KeepRelativeTransform; + + UNREALCLR_GET_DETACHMENT_RULE(DetachmentRule, detachmentRules); + + SceneComponent->DetachFromComponent(detachmentRules); + } + + void Activate(USceneComponent* SceneComponent) { + SceneComponent->Activate(); + } + + void Deactivate(USceneComponent* SceneComponent) { + SceneComponent->Deactivate(); + } + + void UpdateToWorld(USceneComponent* SceneComponent, TeleportType Type, UpdateTransformFlags Flags) { + SceneComponent->UpdateComponentToWorld(static_cast(Flags), Type); + } + + void AddLocalOffset(USceneComponent* SceneComponent, const Vector3* DeltaLocation) { + SceneComponent->AddLocalOffset(*DeltaLocation); + } + + void AddLocalRotation(USceneComponent* SceneComponent, const Quaternion* DeltaRotation) { + SceneComponent->AddLocalRotation(*DeltaRotation); + } + + void AddRelativeLocation(USceneComponent* SceneComponent, const Vector3* DeltaLocation) { + SceneComponent->AddRelativeLocation(*DeltaLocation); + } + + void AddRelativeRotation(USceneComponent* SceneComponent, const Quaternion* DeltaRotation) { + SceneComponent->AddRelativeRotation(*DeltaRotation); + } + + void AddLocalTransform(USceneComponent* SceneComponent, const Transform* DeltaTransform) { + SceneComponent->AddLocalTransform(*DeltaTransform); + } + + void AddWorldOffset(USceneComponent* SceneComponent, const Vector3* DeltaLocation) { + SceneComponent->AddWorldOffset(*DeltaLocation); + } + + void AddWorldRotation(USceneComponent* SceneComponent, const Quaternion* DeltaRotation) { + SceneComponent->AddWorldRotation(*DeltaRotation); + } + + void AddWorldTransform(USceneComponent* SceneComponent, const Transform* DeltaTransform) { + SceneComponent->AddWorldTransform(*DeltaTransform); + } + + void GetAttachedSocketName(USceneComponent* SceneComponent, char* SocketName) { + const char* socketName = TCHAR_TO_ANSI(*SceneComponent->GetAttachSocketName().ToString()); + + UnrealCLR::Utility::Strcpy(SocketName, socketName, UnrealCLR::Utility::Strlen(socketName)); + } + + void GetBounds(USceneComponent* SceneComponent, const Transform* LocalToWorld, Bounds* Value) { + *Value = SceneComponent->CalcBounds(*LocalToWorld); + } + + void GetSocketLocation(USceneComponent* SceneComponent, const char* SocketName, Vector3* Value) { + *Value = SceneComponent->GetSocketLocation(FName(ANSI_TO_TCHAR(SocketName))); + } + + void GetSocketRotation(USceneComponent* SceneComponent, const char* SocketName, Quaternion* Value) { + *Value = SceneComponent->GetSocketQuaternion(FName(ANSI_TO_TCHAR(SocketName))); + } + + void GetComponentVelocity(USceneComponent* SceneComponent, Vector3* Value) { + *Value = SceneComponent->GetComponentVelocity(); + } + + void GetComponentLocation(USceneComponent* SceneComponent, Vector3* Value) { + *Value = SceneComponent->GetComponentLocation(); + } + + void GetComponentRotation(USceneComponent* SceneComponent, Quaternion* Value) { + *Value = SceneComponent->GetComponentQuat(); + } + + void GetComponentScale(USceneComponent* SceneComponent, Vector3* Value) { + *Value = SceneComponent->GetComponentScale(); + } + + void GetComponentTransform(USceneComponent* SceneComponent, Transform* Value) { + *Value = SceneComponent->GetComponentTransform(); + } + + void GetForwardVector(USceneComponent* SceneComponent, Vector3* Value) { + *Value = SceneComponent->GetForwardVector(); + } + + void GetRightVector(USceneComponent* SceneComponent, Vector3* Value) { + *Value = SceneComponent->GetRightVector(); + } + + void GetUpVector(USceneComponent* SceneComponent, Vector3* Value) { + *Value = SceneComponent->GetUpVector(); + } + + void SetMobility(USceneComponent* SceneComponent, ComponentMobility Mobility) { + SceneComponent->SetMobility(Mobility); + } + + void SetVisibility(USceneComponent* SceneComponent, bool NewVisibility, bool PropagateToChildren) { + SceneComponent->SetVisibility(NewVisibility, PropagateToChildren); + } + + void SetRelativeLocation(USceneComponent* SceneComponent, const Vector3* Location) { + SceneComponent->SetRelativeLocation(*Location); + } + + void SetRelativeRotation(USceneComponent* SceneComponent, const Quaternion* Rotation) { + SceneComponent->SetRelativeRotation(*Rotation); + } + + void SetRelativeTransform(USceneComponent* SceneComponent, const Transform* Transform) { + SceneComponent->SetRelativeTransform(*Transform); + } + + void SetWorldLocation(USceneComponent* SceneComponent, const Vector3* Location) { + SceneComponent->SetWorldLocation(*Location); + } + + void SetWorldRotation(USceneComponent* SceneComponent, const Quaternion* Rotation) { + SceneComponent->SetWorldRotation(*Rotation); + } + + void SetWorldScale(USceneComponent* SceneComponent, const Vector3* Scale) { + SceneComponent->SetWorldScale3D(*Scale); + } + + void SetWorldTransform(USceneComponent* SceneComponent, const Transform* Transform) { + SceneComponent->SetWorldTransform(*Transform); + } + } + + namespace AudioComponent { + bool IsPlaying(UAudioComponent* AudioComponent) { + return AudioComponent->IsPlaying(); + } + + bool GetPaused(UAudioComponent* AudioComponent) { + return AudioComponent->bIsPaused; + } + + void SetSound(UAudioComponent* AudioComponent, USoundBase* Sound) { + AudioComponent->SetSound(Sound); + } + + void SetPaused(UAudioComponent* AudioComponent, bool Value) { + AudioComponent->SetPaused(Value); + } + + void Play(UAudioComponent* AudioComponent) { + AudioComponent->Play(); + } + + void Stop(UAudioComponent* AudioComponent) { + AudioComponent->Stop(); + } + + void FadeIn(UAudioComponent* AudioComponent, float Duration, float VolumeLevel, float StartTime, AudioFadeCurve FadeCurve) { + AudioComponent->FadeIn(Duration, VolumeLevel, StartTime, FadeCurve); + } + + void FadeOut(UAudioComponent* AudioComponent, float Duration, float VolumeLevel, AudioFadeCurve FadeCurve) { + AudioComponent->FadeOut(Duration, VolumeLevel, FadeCurve); + } + } + + namespace CameraComponent { + bool GetConstrainAspectRatio(UCameraComponent* CameraComponent) { + return CameraComponent->bConstrainAspectRatio; + } + + float GetAspectRatio(UCameraComponent* CameraComponent) { + return CameraComponent->AspectRatio; + } + + float GetFieldOfView(UCameraComponent* CameraComponent) { + return CameraComponent->FieldOfView; + } + + float GetOrthoFarClipPlane(UCameraComponent* CameraComponent) { + return CameraComponent->OrthoFarClipPlane; + } + + float GetOrthoNearClipPlane(UCameraComponent* CameraComponent) { + return CameraComponent->OrthoNearClipPlane; + } + + float GetOrthoWidth(UCameraComponent* CameraComponent) { + return CameraComponent->OrthoWidth; + } + + bool GetLockToHeadMountedDisplay(UCameraComponent* CameraComponent) { + return CameraComponent->bLockToHmd; + } + + void SetProjectionMode(UCameraComponent* CameraComponent, CameraProjectionMode Mode) { + CameraComponent->SetProjectionMode(Mode); + } + + void SetConstrainAspectRatio(UCameraComponent* CameraComponent, bool Value) { + CameraComponent->bConstrainAspectRatio = Value; + } + + void SetAspectRatio(UCameraComponent* CameraComponent, float Value) { + CameraComponent->AspectRatio = Value; + } + + void SetFieldOfView(UCameraComponent* CameraComponent, float Value) { + CameraComponent->FieldOfView = Value; + } + + void SetOrthoFarClipPlane(UCameraComponent* CameraComponent, float Value) { + CameraComponent->OrthoFarClipPlane = Value; + } + + void SetOrthoNearClipPlane(UCameraComponent* CameraComponent, float Value) { + CameraComponent->OrthoNearClipPlane = Value; + } + + void SetOrthoWidth(UCameraComponent* CameraComponent, float Value) { + CameraComponent->OrthoWidth = Value; + } + + void SetLockToHeadMountedDisplay(UCameraComponent* CameraComponent, bool Value) { + CameraComponent->bLockToHmd = Value; + } + } + + namespace ChildActorComponent { + AActor* GetChildActor(UChildActorComponent* ChildActorComponent, ActorType Type) { + AActor* actor = nullptr; + + UNREALCLR_GET_ACTOR_TYPE(Type, Cast<, >(ChildActorComponent->GetChildActor()), actor); + + return actor; + } + + AActor* SetChildActor(UChildActorComponent* ChildActorComponent, ActorType Type) { + TSubclassOf type; + + UNREALCLR_GET_ACTOR_TYPE(Type, UNREALCLR_NONE, ::StaticClass(), type); + + ChildActorComponent->SetChildActorClass(type); + + return ChildActorComponent->GetChildActor(); + } + } + + namespace SpringArmComponent { + bool IsCollisionFixApplied(USpringArmComponent* SpringArmComponent) { + return SpringArmComponent->IsCollisionFixApplied(); + } + + bool GetDrawDebugLagMarkers(USpringArmComponent* SpringArmComponent) { + return SpringArmComponent->bDrawDebugLagMarkers; + } + + bool GetCollisionTest(USpringArmComponent* SpringArmComponent) { + return SpringArmComponent->bDoCollisionTest; + } + + bool GetCameraPositionLag(USpringArmComponent* SpringArmComponent) { + return SpringArmComponent->bEnableCameraLag; + } + + bool GetCameraRotationLag(USpringArmComponent* SpringArmComponent) { + return SpringArmComponent->bEnableCameraRotationLag; + } + + bool GetCameraLagSubstepping(USpringArmComponent* SpringArmComponent) { + return SpringArmComponent->bUseCameraLagSubstepping; + } + + bool GetInheritPitch(USpringArmComponent* SpringArmComponent) { + return SpringArmComponent->bInheritPitch; + } + + bool GetInheritRoll(USpringArmComponent* SpringArmComponent) { + return SpringArmComponent->bInheritRoll; + } + + bool GetInheritYaw(USpringArmComponent* SpringArmComponent) { + return SpringArmComponent->bInheritYaw; + } + + float GetCameraLagMaxDistance(USpringArmComponent* SpringArmComponent) { + return SpringArmComponent->CameraLagMaxDistance; + } + + float GetCameraLagMaxTimeStep(USpringArmComponent* SpringArmComponent) { + return SpringArmComponent->CameraLagMaxTimeStep; + } + + float GetCameraPositionLagSpeed(USpringArmComponent* SpringArmComponent) { + return SpringArmComponent->CameraLagSpeed; + } + + float GetCameraRotationLagSpeed(USpringArmComponent* SpringArmComponent) { + return SpringArmComponent->CameraRotationLagSpeed; + } + + CollisionChannel GetProbeChannel(USpringArmComponent* SpringArmComponent) { + return SpringArmComponent->ProbeChannel; + } + + float GetProbeSize(USpringArmComponent* SpringArmComponent) { + return SpringArmComponent->ProbeSize; + } + + void GetSocketOffset(USpringArmComponent* SpringArmComponent, Vector3* Value) { + *Value = SpringArmComponent->SocketOffset; + } + + float GetTargetArmLength(USpringArmComponent* SpringArmComponent) { + return SpringArmComponent->TargetArmLength; + } + + void GetTargetOffset(USpringArmComponent* SpringArmComponent, Vector3* Value) { + *Value = SpringArmComponent->TargetOffset; + } + + void GetUnfixedCameraPosition(USpringArmComponent* SpringArmComponent, Vector3* Value) { + *Value = SpringArmComponent->GetUnfixedCameraPosition(); + } + + void GetDesiredRotation(USpringArmComponent* SpringArmComponent, Quaternion* Value) { + *Value = SpringArmComponent->GetDesiredRotation().Quaternion(); + } + + void GetTargetRotation(USpringArmComponent* SpringArmComponent, Quaternion* Value) { + *Value = SpringArmComponent->GetTargetRotation().Quaternion(); + } + + bool GetUsePawnControlRotation(USpringArmComponent* SpringArmComponent) { + return SpringArmComponent->bUsePawnControlRotation; + } + + void SetDrawDebugLagMarkers(USpringArmComponent* SpringArmComponent, bool Value) { + SpringArmComponent->bDrawDebugLagMarkers = Value; + } + + void SetCollisionTest(USpringArmComponent* SpringArmComponent, bool Value) { + SpringArmComponent->bDoCollisionTest = Value; + } + + void SetCameraPositionLag(USpringArmComponent* SpringArmComponent, bool Value) { + SpringArmComponent->bEnableCameraLag = Value; + } + + void SetCameraRotationLag(USpringArmComponent* SpringArmComponent, bool Value) { + SpringArmComponent->bEnableCameraRotationLag = Value; + } + + void SetCameraLagSubstepping(USpringArmComponent* SpringArmComponent, bool Value) { + SpringArmComponent->bUseCameraLagSubstepping = Value; + } + + void SetInheritPitch(USpringArmComponent* SpringArmComponent, bool Value) { + SpringArmComponent->bInheritPitch = Value; + } + + void SetInheritRoll(USpringArmComponent* SpringArmComponent, bool Value) { + SpringArmComponent->bInheritRoll = Value; + } + + void SetInheritYaw(USpringArmComponent* SpringArmComponent, bool Value) { + SpringArmComponent->bInheritYaw = Value; + } + + void SetCameraLagMaxDistance(USpringArmComponent* SpringArmComponent, float Value) { + SpringArmComponent->CameraLagMaxDistance = Value; + } + + void SetCameraLagMaxTimeStep(USpringArmComponent* SpringArmComponent, float Value) { + SpringArmComponent->CameraLagMaxTimeStep = Value; + } + + void SetCameraPositionLagSpeed(USpringArmComponent* SpringArmComponent, float Value) { + SpringArmComponent->CameraLagSpeed = Value; + } + + void SetCameraRotationLagSpeed(USpringArmComponent* SpringArmComponent, float Value) { + SpringArmComponent->CameraRotationLagSpeed = Value; + } + + void SetProbeChannel(USpringArmComponent* SpringArmComponent, CollisionChannel Value) { + SpringArmComponent->ProbeChannel = Value; + } + + void SetProbeSize(USpringArmComponent* SpringArmComponent, float Value) { + SpringArmComponent->ProbeSize = Value; + } + + void SetSocketOffset(USpringArmComponent* SpringArmComponent, const Vector3* Value) { + SpringArmComponent->SocketOffset = *Value; + } + + void SetTargetArmLength(USpringArmComponent* SpringArmComponent, float Value) { + SpringArmComponent->TargetArmLength = Value; + } + + void SetTargetOffset(USpringArmComponent* SpringArmComponent, const Vector3* Value) { + SpringArmComponent->TargetOffset = *Value; + } + + void SetUsePawnControlRotation(USpringArmComponent* SpringArmComponent, bool value) { + SpringArmComponent->bUsePawnControlRotation = value; + } + } + + namespace PostProcessComponent { + bool GetEnabled(UPostProcessComponent* PostProcessComponent) { + return PostProcessComponent->bEnabled; + } + + float GetBlendRadius(UPostProcessComponent* PostProcessComponent) { + return PostProcessComponent->BlendRadius; + } + + float GetBlendWeight(UPostProcessComponent* PostProcessComponent) { + return PostProcessComponent->BlendWeight; + } + + bool GetUnbound(UPostProcessComponent* PostProcessComponent) { + return PostProcessComponent->bUnbound; + } + + float GetPriority(UPostProcessComponent* PostProcessComponent) { + return PostProcessComponent->Priority; + } + + void SetEnabled(UPostProcessComponent* PostProcessComponent, bool Value) { + PostProcessComponent->bEnabled = Value; + } + + void SetBlendRadius(UPostProcessComponent* PostProcessComponent, float Value) { + PostProcessComponent->BlendRadius = Value; + } + + void SetBlendWeight(UPostProcessComponent* PostProcessComponent, float Value) { + PostProcessComponent->BlendWeight = Value; + } + + void SetUnbound(UPostProcessComponent* PostProcessComponent, bool Value) { + PostProcessComponent->bUnbound = Value; + } + + void SetPriority(UPostProcessComponent* PostProcessComponent, float Priority) { + PostProcessComponent->Priority = Priority; + } + } + + namespace PrimitiveComponent { + bool IsGravityEnabled(UPrimitiveComponent* PrimitiveComponent) { + return PrimitiveComponent->IsGravityEnabled(); + } + + bool IsOverlappingComponent(UPrimitiveComponent* PrimitiveComponent, UPrimitiveComponent* Other) { + return PrimitiveComponent->IsOverlappingComponent(Other); + } + + void ForEachOverlappingComponent(UPrimitiveComponent* PrimitiveComponent, UPrimitiveComponent** Array, int32* Elements) { + static TArray overlappingComponents; + + overlappingComponents.Reset(); + + PrimitiveComponent->GetOverlappingComponents(overlappingComponents); + + int32 elements = overlappingComponents.Num(); + + if (elements > 0) { + *Array = reinterpret_cast(overlappingComponents.GetData()); + *Elements = elements; + } + } + + void AddAngularImpulseInDegrees(UPrimitiveComponent* PrimitiveComponent, const Vector3* Impulse, const char* BoneName, bool VelocityChange) { + UNREALCLR_SET_BONE_NAME(BoneName); + + PrimitiveComponent->AddAngularImpulseInDegrees(*Impulse, boneName, VelocityChange); + } + + void AddAngularImpulseInRadians(UPrimitiveComponent* PrimitiveComponent, const Vector3* Impulse, const char* BoneName, bool VelocityChange) { + UNREALCLR_SET_BONE_NAME(BoneName); + + PrimitiveComponent->AddAngularImpulseInRadians(*Impulse, boneName, VelocityChange); + } + + void AddForce(UPrimitiveComponent* PrimitiveComponent, const Vector3* Force, const char* BoneName, bool AccelerationChange) { + UNREALCLR_SET_BONE_NAME(BoneName); + + PrimitiveComponent->AddForce(*Force, boneName, AccelerationChange); + } + + void AddForceAtLocation(UPrimitiveComponent* PrimitiveComponent, const Vector3* Force, const Vector3* Location, const char* BoneName, bool LocalSpace) { + UNREALCLR_SET_BONE_NAME(BoneName); + + if (!LocalSpace) + PrimitiveComponent->AddForceAtLocation(*Force, *Location, boneName); + else + PrimitiveComponent->AddForceAtLocationLocal(*Force, *Location, boneName); + } + + void AddImpulse(UPrimitiveComponent* PrimitiveComponent, const Vector3* Impulse, const char* BoneName, bool VelocityChange) { + UNREALCLR_SET_BONE_NAME(BoneName); + + PrimitiveComponent->AddImpulse(*Impulse, boneName, VelocityChange); + } + + void AddImpulseAtLocation(UPrimitiveComponent* PrimitiveComponent, const Vector3* Impulse, const Vector3* Location, const char* BoneName) { + UNREALCLR_SET_BONE_NAME(BoneName); + + PrimitiveComponent->AddImpulseAtLocation(*Impulse, *Location, boneName); + } + + void AddRadialForce(UPrimitiveComponent* PrimitiveComponent, const Vector3* Origin, float Radius, float Strength, bool LinearFalloff, bool AccelerationChange) { + PrimitiveComponent->AddRadialForce(*Origin, Radius, Strength, LinearFalloff ? ERadialImpulseFalloff::RIF_Linear : ERadialImpulseFalloff::RIF_Constant, AccelerationChange); + } + + void AddRadialImpulse(UPrimitiveComponent* PrimitiveComponent, const Vector3* Origin, float Radius, float Strength, bool LinearFalloff, bool AccelerationChange) { + PrimitiveComponent->AddRadialImpulse(*Origin, Radius, Strength, LinearFalloff ? ERadialImpulseFalloff::RIF_Linear : ERadialImpulseFalloff::RIF_Constant, AccelerationChange); + } + + void AddTorqueInDegrees(UPrimitiveComponent* PrimitiveComponent, const Vector3* Torque, const char* BoneName, bool AccelerationChange) { + UNREALCLR_SET_BONE_NAME(BoneName); + + PrimitiveComponent->AddTorqueInDegrees(*Torque, boneName, AccelerationChange); + } + + void AddTorqueInRadians(UPrimitiveComponent* PrimitiveComponent, const Vector3* Torque, const char* BoneName, bool AccelerationChange) { + UNREALCLR_SET_BONE_NAME(BoneName); + + PrimitiveComponent->AddTorqueInRadians(*Torque, boneName, AccelerationChange); + } + + float GetMass(UPrimitiveComponent* PrimitiveComponent) { + return PrimitiveComponent->GetMass(); + } + + void GetPhysicsLinearVelocity(UPrimitiveComponent* PrimitiveComponent, Vector3* Value, const char* BoneName) { + UNREALCLR_SET_BONE_NAME(BoneName); + + PrimitiveComponent->GetPhysicsLinearVelocity(boneName); + } + + void GetPhysicsLinearVelocityAtPoint(UPrimitiveComponent* PrimitiveComponent, Vector3* Value, const Vector3* Point, const char* BoneName) { + UNREALCLR_SET_BONE_NAME(BoneName); + + PrimitiveComponent->GetPhysicsLinearVelocityAtPoint(*Point, boneName); + } + + void GetPhysicsAngularVelocityInDegrees(UPrimitiveComponent* PrimitiveComponent, Vector3* Value, const char* BoneName) { + UNREALCLR_SET_BONE_NAME(BoneName); + + PrimitiveComponent->GetPhysicsAngularVelocityInDegrees(boneName); + } + + void GetPhysicsAngularVelocityInRadians(UPrimitiveComponent* PrimitiveComponent, Vector3* Value, const char* BoneName) { + UNREALCLR_SET_BONE_NAME(BoneName); + + PrimitiveComponent->GetPhysicsAngularVelocityInRadians(boneName); + } + + bool GetCastShadow(UPrimitiveComponent* PrimitiveComponent) { + return PrimitiveComponent->CastShadow; + } + + bool GetOnlyOwnerSee(UPrimitiveComponent* PrimitiveComponent) { + return PrimitiveComponent->bOnlyOwnerSee; + } + + bool GetOwnerNoSee(UPrimitiveComponent* PrimitiveComponent) { + return PrimitiveComponent->bOwnerNoSee; + } + + bool GetIgnoreRadialForce(UPrimitiveComponent* PrimitiveComponent) { + return PrimitiveComponent->bIgnoreRadialForce; + } + + bool GetIgnoreRadialImpulse(UPrimitiveComponent* PrimitiveComponent) { + return PrimitiveComponent->bIgnoreRadialImpulse; + } + + UMaterialInstanceDynamic* GetMaterial(UPrimitiveComponent* PrimitiveComponent, int32 ElementIndex) { + return Cast(PrimitiveComponent->GetMaterial(ElementIndex)); + } + + int32 GetMaterialsNumber(UPrimitiveComponent* PrimitiveComponent) { + return PrimitiveComponent->GetNumMaterials(); + } + + float GetDistanceToCollision(UPrimitiveComponent* PrimitiveComponent, const Vector3* Point, Vector3* ClosestPointOnCollision) { + FVector closestPointOnCollision; + + float result = PrimitiveComponent->GetDistanceToCollision(*Point, closestPointOnCollision); + + *ClosestPointOnCollision = closestPointOnCollision; + + return result; + } + + bool GetSquaredDistanceToCollision(UPrimitiveComponent* PrimitiveComponent, const Vector3* Point, float* SquaredDistance, Vector3* ClosestPointOnCollision) { + FVector closestPointOnCollision; + float squaredDistance = 0.0f; + + bool result = PrimitiveComponent->GetSquaredDistanceToCollision(*Point, squaredDistance, closestPointOnCollision); + + *SquaredDistance = squaredDistance; + *ClosestPointOnCollision = closestPointOnCollision; + + return result; + } + + float GetAngularDamping(UPrimitiveComponent* PrimitiveComponent) { + return PrimitiveComponent->GetAngularDamping(); + } + + float GetLinearDamping(UPrimitiveComponent* PrimitiveComponent) { + return PrimitiveComponent->GetLinearDamping(); + } + + void SetGenerateOverlapEvents(UPrimitiveComponent* PrimitiveComponent, bool Value) { + PrimitiveComponent->SetGenerateOverlapEvents(Value); + } + + void SetGenerateHitEvents(UPrimitiveComponent* PrimitiveComponent, bool Value) { + PrimitiveComponent->SetNotifyRigidBodyCollision(Value); + } + + void SetMass(UPrimitiveComponent* PrimitiveComponent, float Mass, const char* BoneName) { + UNREALCLR_SET_BONE_NAME(BoneName); + + PrimitiveComponent->SetMassOverrideInKg(boneName, Mass); + } + + void SetCenterOfMass(UPrimitiveComponent* PrimitiveComponent, const Vector3* Offset, const char* BoneName) { + UNREALCLR_SET_BONE_NAME(BoneName); + + PrimitiveComponent->SetCenterOfMass(*Offset, boneName); + } + + void SetPhysicsLinearVelocity(UPrimitiveComponent* PrimitiveComponent, const Vector3* Velocity, bool AddToCurrent, const char* BoneName) { + UNREALCLR_SET_BONE_NAME(BoneName); + + PrimitiveComponent->SetPhysicsLinearVelocity(*Velocity, AddToCurrent, boneName); + } + + void SetPhysicsAngularVelocityInDegrees(UPrimitiveComponent* PrimitiveComponent, const Vector3* AngularVelocity, bool AddToCurrent, const char* BoneName) { + UNREALCLR_SET_BONE_NAME(BoneName); + + PrimitiveComponent->SetPhysicsAngularVelocityInDegrees(*AngularVelocity, AddToCurrent, boneName); + } + + void SetPhysicsAngularVelocityInRadians(UPrimitiveComponent* PrimitiveComponent, const Vector3* AngularVelocity, bool AddToCurrent, const char* BoneName) { + UNREALCLR_SET_BONE_NAME(BoneName); + + PrimitiveComponent->SetPhysicsAngularVelocityInRadians(*AngularVelocity, AddToCurrent, boneName); + } + + void SetPhysicsMaxAngularVelocityInDegrees(UPrimitiveComponent* PrimitiveComponent, float MaxAngularVelocity, bool AddToCurrent, const char* BoneName) { + UNREALCLR_SET_BONE_NAME(BoneName); + + PrimitiveComponent->SetPhysicsMaxAngularVelocityInDegrees(MaxAngularVelocity, AddToCurrent, boneName); + } + + void SetPhysicsMaxAngularVelocityInRadians(UPrimitiveComponent* PrimitiveComponent, float MaxAngularVelocity, bool AddToCurrent, const char* BoneName) { + UNREALCLR_SET_BONE_NAME(BoneName); + + PrimitiveComponent->SetPhysicsMaxAngularVelocityInRadians(MaxAngularVelocity, AddToCurrent, boneName); + } + + void SetCastShadow(UPrimitiveComponent* PrimitiveComponent, bool Value) { + PrimitiveComponent->CastShadow = Value; + } + + void SetOnlyOwnerSee(UPrimitiveComponent* PrimitiveComponent, bool Value) { + PrimitiveComponent->bOnlyOwnerSee = Value; + } + + void SetOwnerNoSee(UPrimitiveComponent* PrimitiveComponent, bool Value) { + PrimitiveComponent->bOwnerNoSee = Value; + } + + void SetIgnoreRadialForce(UPrimitiveComponent* PrimitiveComponent, bool Value) { + PrimitiveComponent->bIgnoreRadialForce = Value; + } + + void SetIgnoreRadialImpulse(UPrimitiveComponent* PrimitiveComponent, bool Value) { + PrimitiveComponent->bIgnoreRadialImpulse = Value; + } + + void SetMaterial(UPrimitiveComponent* PrimitiveComponent, int32 ElementIndex, UMaterialInterface* Material) { + PrimitiveComponent->SetMaterial(ElementIndex, Material); + } + + void SetSimulatePhysics(UPrimitiveComponent* PrimitiveComponent, bool Value) { + PrimitiveComponent->SetSimulatePhysics(Value); + } + + void SetAngularDamping(UPrimitiveComponent* PrimitiveComponent, float Value) { + PrimitiveComponent->SetAngularDamping(Value); + } + + void SetLinearDamping(UPrimitiveComponent* PrimitiveComponent, float Value) { + PrimitiveComponent->SetLinearDamping(Value); + } + + void SetEnableGravity(UPrimitiveComponent* PrimitiveComponent, bool Value) { + PrimitiveComponent->SetEnableGravity(Value); + } + + void SetCollisionMode(UPrimitiveComponent* PrimitiveComponent, CollisionMode Mode) { + PrimitiveComponent->SetCollisionEnabled(Mode); + } + + void SetCollisionChannel(UPrimitiveComponent* PrimitiveComponent, CollisionChannel Channel) { + PrimitiveComponent->SetCollisionObjectType(Channel); + } + + void SetCollisionProfileName(UPrimitiveComponent* PrimitiveComponent, const char* ProfileName, bool UpdateOverlaps) { + PrimitiveComponent->SetCollisionProfileName(FName(ANSI_TO_TCHAR(ProfileName)), UpdateOverlaps); + } + + void SetCollisionResponseToChannel(UPrimitiveComponent* PrimitiveComponent, CollisionChannel Channel, CollisionResponse Response) { + PrimitiveComponent->SetCollisionResponseToChannel(Channel, Response); + } + + void SetCollisionResponseToAllChannels(UPrimitiveComponent* PrimitiveComponent, CollisionResponse Response) { + PrimitiveComponent->SetCollisionResponseToAllChannels(Response); + } + + void SetIgnoreActorWhenMoving(UPrimitiveComponent* PrimitiveComponent, AActor* Actor, bool Value) { + PrimitiveComponent->IgnoreActorWhenMoving(Actor, Value); + } + + void SetIgnoreComponentWhenMoving(UPrimitiveComponent* PrimitiveComponent, UPrimitiveComponent* Component, bool Value) { + PrimitiveComponent->IgnoreComponentWhenMoving(Component, Value); + } + + void ClearMoveIgnoreActors(UPrimitiveComponent* PrimitiveComponent) { + PrimitiveComponent->ClearMoveIgnoreActors(); + } + + void ClearMoveIgnoreComponents(UPrimitiveComponent* PrimitiveComponent) { + PrimitiveComponent->ClearMoveIgnoreComponents(); + } + + UMaterialInstanceDynamic* CreateAndSetMaterialInstanceDynamic(UPrimitiveComponent* PrimitiveComponent, int32 ElementIndex) { + return PrimitiveComponent->CreateAndSetMaterialInstanceDynamic(ElementIndex); + } + + void RegisterEvent(UPrimitiveComponent* PrimitiveComponent, ComponentEventType Type) { + UNREALCLR_SET_COMPONENT_EVENT(Type, !, AddDynamic); + } + + void UnregisterEvent(UPrimitiveComponent* PrimitiveComponent, ComponentEventType Type) { + UNREALCLR_SET_COMPONENT_EVENT(Type, UNREALCLR_NONE, RemoveDynamic); + } + } + + namespace ShapeComponent { + bool GetDynamicObstacle(UShapeComponent* ShapeComponent) { + return ShapeComponent->bDynamicObstacle; + } + + int32 GetShapeColor(UShapeComponent* ShapeComponent) { + return UNREALCLR_COLOR_TO_INTEGER(ShapeComponent->ShapeColor); + } + + void SetDynamicObstacle(UShapeComponent* ShapeComponent, bool Value) { + ShapeComponent->bDynamicObstacle = Value; + } + + void SetShapeColor(UShapeComponent* ShapeComponent, Color Value) { + ShapeComponent->ShapeColor = Value; + } + } + + namespace BoxComponent { + void GetScaledBoxExtent(UBoxComponent* BoxComponent, Vector3* Value) { + *Value = BoxComponent->GetScaledBoxExtent(); + } + + void GetUnscaledBoxExtent(UBoxComponent* BoxComponent, Vector3* Value) { + *Value = BoxComponent->GetUnscaledBoxExtent(); + } + + void SetBoxExtent(UBoxComponent* BoxComponent, const Vector3* Extent, bool UpdateOverlaps) { + BoxComponent->SetBoxExtent(*Extent, UpdateOverlaps); + } + + void InitBoxExtent(UBoxComponent* BoxComponent, const Vector3* Extent) { + BoxComponent->InitBoxExtent(*Extent); + } + } + + namespace SphereComponent { + float GetScaledSphereRadius(USphereComponent* SphereComponent) { + return SphereComponent->GetScaledSphereRadius(); + } + + float GetUnscaledSphereRadius(USphereComponent* SphereComponent) { + return SphereComponent->GetUnscaledSphereRadius(); + } + + float GetShapeScale(USphereComponent* SphereComponent) { + return SphereComponent->GetShapeScale(); + } + + void SetSphereRadius(USphereComponent* SphereComponent, float SphereRadius, bool UpdateOverlaps) { + SphereComponent->SetSphereRadius(SphereRadius, UpdateOverlaps); + } + + void InitSphereRadius(USphereComponent* SphereComponent, float SphereRadius) { + SphereComponent->InitSphereRadius(SphereRadius); + } + } + + namespace CapsuleComponent { + float GetScaledCapsuleRadius(UCapsuleComponent* CapsuleComponent) { + return CapsuleComponent->GetScaledCapsuleRadius(); + } + + float GetUnscaledCapsuleRadius(UCapsuleComponent* CapsuleComponent) { + return CapsuleComponent->GetUnscaledCapsuleRadius(); + } + + float GetShapeScale(UCapsuleComponent* CapsuleComponent) { + return CapsuleComponent->GetShapeScale(); + } + + void GetScaledCapsuleSize(UCapsuleComponent* CapsuleComponent, float* Radius, float* HalfHeight) { + CapsuleComponent->GetScaledCapsuleSize(*Radius, *HalfHeight); + } + + void GetUnscaledCapsuleSize(UCapsuleComponent* CapsuleComponent, float* Radius, float* HalfHeight) { + CapsuleComponent->GetUnscaledCapsuleSize(*Radius, *HalfHeight); + } + + void SetCapsuleRadius(UCapsuleComponent* CapsuleComponent, float Radius, bool UpdateOverlaps) { + CapsuleComponent->SetCapsuleRadius(Radius, UpdateOverlaps); + } + + void SetCapsuleSize(UCapsuleComponent* CapsuleComponent, float Radius, float HalfHeight, bool UpdateOverlaps) { + CapsuleComponent->SetCapsuleSize(Radius, HalfHeight, UpdateOverlaps); + } + + void InitCapsuleSize(UCapsuleComponent* CapsuleComponent, float Radius, float HalfHeight) { + CapsuleComponent->InitCapsuleSize(Radius, HalfHeight); + } + } + + namespace MeshComponent { + bool IsValidMaterialSlotName(UMeshComponent* MeshComponent, const char* MaterialSlotName) { + return MeshComponent->IsMaterialSlotNameValid(FName(ANSI_TO_TCHAR(MaterialSlotName))); + } + + int32 GetMaterialIndex(UMeshComponent* MeshComponent, const char* MaterialSlotName) { + return MeshComponent->GetMaterialIndex(FName(ANSI_TO_TCHAR(MaterialSlotName))); + } + } + + namespace TextRenderComponent { + void SetFont(UTextRenderComponent* TextRenderComponent, UFont* Value) { + TextRenderComponent->SetFont(Value); + } + + void SetText(UTextRenderComponent* TextRenderComponent, const char* Value) { + TextRenderComponent->SetText(FText::FromString(FString(ANSI_TO_TCHAR(Value)))); + } + + void SetTextMaterial(UTextRenderComponent* TextRenderComponent, UMaterialInterface* Material) { + TextRenderComponent->SetTextMaterial(Material); + } + + void SetTextRenderColor(UTextRenderComponent* TextRenderComponent, Color Value) { + TextRenderComponent->SetTextRenderColor(Value); + } + + void SetHorizontalAlignment(UTextRenderComponent* TextRenderComponent, HorizontalTextAligment Value) { + TextRenderComponent->SetHorizontalAlignment(Value); + } + + void SetHorizontalSpacingAdjustment(UTextRenderComponent* TextRenderComponent, float Value) { + TextRenderComponent->SetHorizSpacingAdjust(Value); + } + + void SetVerticalAlignment(UTextRenderComponent* TextRenderComponent, VerticalTextAligment Value) { + TextRenderComponent->SetVerticalAlignment(Value); + } + + void SetVerticalSpacingAdjustment(UTextRenderComponent* TextRenderComponent, float Value) { + TextRenderComponent->SetVertSpacingAdjust(Value); + } + + void SetScale(UTextRenderComponent* TextRenderComponent, const Vector2* Value) { + TextRenderComponent->SetXScale(Value->X); + TextRenderComponent->SetYScale(Value->Y); + } + + void SetWorldSize(UTextRenderComponent* TextRenderComponent, float Value) { + TextRenderComponent->SetWorldSize(Value); + } + } + + namespace LightComponentBase { + float GetIntensity(ULightComponentBase* LightComponentBase) { + return LightComponentBase->Intensity; + } + + bool GetCastShadows(ULightComponentBase* LightComponentBase) { + return LightComponentBase->CastShadows; + } + + void SetCastShadows(ULightComponentBase* LightComponentBase, bool Value) { + LightComponentBase->SetCastShadows(Value); + } + } + + namespace LightComponent { + void SetIntensity(ULightComponent* LightComponent, float Value) { + LightComponent->SetIntensity(Value); + } + + void SetLightColor(ULightComponent* LightComponent, const LinearColor* Value) { + LightComponent->SetLightColor(*Value); + } + } + + namespace MotionControllerComponent { + bool IsTracked(UMotionControllerComponent* MotionControllerComponent) { + return MotionControllerComponent->IsTracked(); + } + + bool GetDisplayDeviceModel(UMotionControllerComponent* MotionControllerComponent) { + return MotionControllerComponent->bDisplayDeviceModel; + } + + bool GetDisableLowLatencyUpdate(UMotionControllerComponent* MotionControllerComponent) { + return MotionControllerComponent->bDisableLowLatencyUpdate; + } + + ControllerHand GetTrackingSource(UMotionControllerComponent* MotionControllerComponent) { + return MotionControllerComponent->GetTrackingSource(); + } + + void SetDisplayDeviceModel(UMotionControllerComponent* MotionControllerComponent, bool Value) { + MotionControllerComponent->bDisplayDeviceModel = true; + } + + void SetDisableLowLatencyUpdate(UMotionControllerComponent* MotionControllerComponent, bool Value) { + MotionControllerComponent->bDisableLowLatencyUpdate = Value; + } + + void SetTrackingSource(UMotionControllerComponent* MotionControllerComponent, ControllerHand Value) { + MotionControllerComponent->SetTrackingSource(Value); + } + + void SetTrackingMotionSource(UMotionControllerComponent* MotionControllerComponent, const char* Source) { + MotionControllerComponent->SetTrackingMotionSource(FName(ANSI_TO_TCHAR(Source))); + } + + void SetAssociatedPlayerIndex(UMotionControllerComponent* MotionControllerComponent, int32 PlayerIndex) { + MotionControllerComponent->SetAssociatedPlayerIndex(PlayerIndex); + } + + void SetCustomDisplayMesh(UMotionControllerComponent* MotionControllerComponent, UStaticMesh* StaticMesh) { + MotionControllerComponent->SetCustomDisplayMesh(StaticMesh); + } + + void SetDisplayModelSource(UMotionControllerComponent* MotionControllerComponent, const char* Source) { + MotionControllerComponent->SetDisplayModelSource(FName(ANSI_TO_TCHAR(Source))); + } + } + + namespace StaticMeshComponent { + void GetLocalBounds(UStaticMeshComponent* StaticMeshComponent, Vector3* Min, Vector3* Max) { + FVector min, max; + + StaticMeshComponent->GetLocalBounds(min, max); + + *Min = min; + *Max = max; + } + + UStaticMesh* GetStaticMesh(UStaticMeshComponent* StaticMeshComponent) { + return StaticMeshComponent->GetStaticMesh(); + } + + bool SetStaticMesh(UStaticMeshComponent* StaticMeshComponent, UStaticMesh* StaticMesh) { + return StaticMeshComponent->SetStaticMesh(StaticMesh); + } + } + + namespace InstancedStaticMeshComponent { + int32 GetInstanceCount(UInstancedStaticMeshComponent* InstancedStaticMeshComponent) { + return InstancedStaticMeshComponent->GetInstanceCount(); + } + + bool GetInstanceTransform(UInstancedStaticMeshComponent* InstancedStaticMeshComponent, int32 InstanceIndex, Transform* Value, bool WorldSpace) { + FTransform transform; + + bool result = InstancedStaticMeshComponent->GetInstanceTransform(InstanceIndex, transform, WorldSpace); + + if (result) + *Value = transform; + + return result; + } + + void AddInstance(UInstancedStaticMeshComponent* InstancedStaticMeshComponent, const Transform* InstanceTransform) { + InstancedStaticMeshComponent->AddInstance(*InstanceTransform); + } + + void AddInstances(UInstancedStaticMeshComponent* InstancedStaticMeshComponent, int32 EndInstanceIndex, const Transform InstanceTransforms[]) { + static TArray instanceTransforms; + + instanceTransforms.Reserve(EndInstanceIndex + 1); + instanceTransforms.Reset(); + + for (int32 i = 0; i < EndInstanceIndex; i++) { + instanceTransforms.Add(InstanceTransforms[i]); + } + + InstancedStaticMeshComponent->AddInstances(instanceTransforms, false); + } + + bool UpdateInstanceTransform(UInstancedStaticMeshComponent* InstancedStaticMeshComponent, int32 InstanceIndex, const Transform* InstanceTransform, bool WorldSpace, bool MarkRenderStateDirty, bool Teleport) { + return InstancedStaticMeshComponent->UpdateInstanceTransform(InstanceIndex, *InstanceTransform, WorldSpace, MarkRenderStateDirty, Teleport); + } + + bool BatchUpdateInstanceTransforms(UInstancedStaticMeshComponent* InstancedStaticMeshComponent, int32 StartInstanceIndex, int32 EndInstanceIndex, const Transform InstanceTransforms[], bool WorldSpace, bool MarkRenderStateDirty, bool Teleport) { + static TArray instanceTransforms; + + instanceTransforms.Reserve(EndInstanceIndex + 1); + instanceTransforms.Reset(); + + for (int32 i = 0; i < EndInstanceIndex; i++) { + instanceTransforms.Add(InstanceTransforms[i]); + } + + return InstancedStaticMeshComponent->BatchUpdateInstancesTransforms(StartInstanceIndex, instanceTransforms, WorldSpace, MarkRenderStateDirty, Teleport); + } + + bool RemoveInstance(UInstancedStaticMeshComponent* InstancedStaticMeshComponent, int32 InstanceIndex) { + return InstancedStaticMeshComponent->RemoveInstance(InstanceIndex); + } + + void ClearInstances(UInstancedStaticMeshComponent* InstancedStaticMeshComponent) { + InstancedStaticMeshComponent->ClearInstances(); + } + } + + namespace HierarchicalInstancedStaticMeshComponent { + bool GetDisableCollision(UHierarchicalInstancedStaticMeshComponent* HierarchicalInstancedStaticMeshComponent) { + return HierarchicalInstancedStaticMeshComponent->bDisableCollision; + } + + void SetDisableCollision(UHierarchicalInstancedStaticMeshComponent* HierarchicalInstancedStaticMeshComponent, bool Value) { + HierarchicalInstancedStaticMeshComponent->bDisableCollision = Value; + } + } + + namespace SkinnedMeshComponent { + int32 GetBonesNumber(USkinnedMeshComponent* SkinnedMeshComponent) { + return SkinnedMeshComponent->GetNumBones(); + } + + int32 GetBoneIndex(USkinnedMeshComponent* SkinnedMeshComponent, const char* BoneName) { + return SkinnedMeshComponent->GetBoneIndex(FName(ANSI_TO_TCHAR(BoneName))); + } + + void GetBoneName(USkinnedMeshComponent* SkinnedMeshComponent, int32 BoneIndex, char* BoneName) { + const char* boneName = TCHAR_TO_ANSI(*SkinnedMeshComponent->GetBoneName(BoneIndex).ToString()); + + UnrealCLR::Utility::Strcpy(BoneName, boneName, UnrealCLR::Utility::Strlen(boneName)); + } + + void GetBoneTransform(USkinnedMeshComponent* SkinnedMeshComponent, int32 BoneIndex, Transform* Value) { + *Value = SkinnedMeshComponent->GetBoneTransform(BoneIndex); + } + + void SetSkeletalMesh(USkinnedMeshComponent* SkinnedMeshComponent, USkeletalMesh* SkeletalMesh, bool ReinitializePose) { + SkinnedMeshComponent->SetSkeletalMesh(SkeletalMesh, ReinitializePose); + } + } + + namespace SkeletalMeshComponent { + bool IsPlaying(USkeletalMeshComponent* SkeletalMeshComponent) { + return SkeletalMeshComponent->IsPlaying(); + } + + UAnimInstance* GetAnimationInstance(USkeletalMeshComponent* SkeletalMeshComponent) { + return SkeletalMeshComponent->GetAnimInstance(); + } + + void SetAnimation(USkeletalMeshComponent* SkeletalMeshComponent, UAnimationAsset* Asset) { + SkeletalMeshComponent->SetAnimation(Asset); + } + + void SetAnimationMode(USkeletalMeshComponent* SkeletalMeshComponent, AnimationMode Mode) { + SkeletalMeshComponent->SetAnimationMode(Mode); + } + + void SetAnimationBlueprint(USkeletalMeshComponent* SkeletalMeshComponent, UObject* Blueprint) { + #if !WITH_EDITOR + SkeletalMeshComponent->SetAnimInstanceClass(Cast(Blueprint)); + #else + SkeletalMeshComponent->SetAnimInstanceClass(Cast(Blueprint)->GeneratedClass); + #endif + } + + void Play(USkeletalMeshComponent* SkeletalMeshComponent, bool Loop) { + SkeletalMeshComponent->Play(Loop); + } + + void PlayAnimation(USkeletalMeshComponent* SkeletalMeshComponent, UAnimationAsset* Asset, bool Loop) { + SkeletalMeshComponent->PlayAnimation(Asset, Loop); + } + + void Stop(USkeletalMeshComponent* SkeletalMeshComponent) { + SkeletalMeshComponent->Stop(); + } + } + + namespace SplineComponent { + bool IsClosedLoop(USplineComponent* SplineComponent) { + return SplineComponent->IsClosedLoop(); + } + + float GetDuration(USplineComponent* SplineComponent) { + return SplineComponent->Duration; + } + + SplinePointType GetSplinePointType(USplineComponent* SplineComponent, int32 PointIndex) { + return SplineComponent->GetSplinePointType(PointIndex); + } + + int32 GetSplinePointsNumber(USplineComponent* SplineComponent) { + return SplineComponent->GetNumberOfSplinePoints(); + } + + int32 GetSplineSegmentsNumber(USplineComponent* SplineComponent) { + return SplineComponent->GetNumberOfSplineSegments(); + } + + void GetTangentAtDistanceAlongSpline(USplineComponent* SplineComponent, float Distance, SplineCoordinateSpace CoordinateSpace, Vector3* Value) { + *Value = SplineComponent->GetTangentAtDistanceAlongSpline(Distance, CoordinateSpace); + } + + void GetTangentAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, SplineCoordinateSpace CoordinateSpace, Vector3* Value) { + *Value = SplineComponent->GetTangentAtSplinePoint(PointIndex, CoordinateSpace); + } + + void GetTangentAtTime(USplineComponent* SplineComponent, float Time, SplineCoordinateSpace CoordinateSpace, bool UseConstantVelocity, Vector3* Value) { + *Value = SplineComponent->GetTangentAtTime(Time, CoordinateSpace, UseConstantVelocity); + } + + void GetTransformAtDistanceAlongSpline(USplineComponent* SplineComponent, float Distance, SplineCoordinateSpace CoordinateSpace, Transform* Value) { + *Value = SplineComponent->GetTransformAtDistanceAlongSpline(Distance, CoordinateSpace); + } + + void GetTransformAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, SplineCoordinateSpace CoordinateSpace, bool UseScale, Transform* Value) { + *Value = SplineComponent->GetTransformAtSplinePoint(PointIndex, CoordinateSpace, UseScale); + } + + void GetArriveTangentAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, SplineCoordinateSpace CoordinateSpace, Vector3* Value) { + *Value = SplineComponent->GetArriveTangentAtSplinePoint(PointIndex, CoordinateSpace); + } + + void GetDefaultUpVector(USplineComponent* SplineComponent, SplineCoordinateSpace CoordinateSpace, Vector3* Value) { + *Value = SplineComponent->GetDefaultUpVector(CoordinateSpace); + } + + void GetDirectionAtDistanceAlongSpline(USplineComponent* SplineComponent, float Distance, SplineCoordinateSpace CoordinateSpace, Vector3* Value) { + *Value = SplineComponent->GetDirectionAtDistanceAlongSpline(Distance, CoordinateSpace); + } + + void GetDirectionAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, SplineCoordinateSpace CoordinateSpace, Vector3* Value) { + *Value = SplineComponent->GetDirectionAtSplinePoint(PointIndex, CoordinateSpace); + } + + void GetDirectionAtTime(USplineComponent* SplineComponent, float Time, SplineCoordinateSpace CoordinateSpace, bool UseConstantVelocity, Vector3* Value) { + *Value = SplineComponent->GetDirectionAtTime(Time, CoordinateSpace, UseConstantVelocity); + } + + float GetDistanceAlongSplineAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex) { + return SplineComponent->GetDistanceAlongSplineAtSplinePoint(PointIndex); + } + + void GetLeaveTangentAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, SplineCoordinateSpace CoordinateSpace, Vector3* Value) { + *Value = SplineComponent->GetLeaveTangentAtSplinePoint(PointIndex, CoordinateSpace); + } + + void GetLocationAndTangentAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, SplineCoordinateSpace CoordinateSpace, Vector3* Location, Vector3* Tangent) { + FVector location, tangent; + + SplineComponent->GetLocationAndTangentAtSplinePoint(PointIndex, location, tangent, CoordinateSpace); + + *Location = location; + *Tangent = tangent; + } + + void GetLocationAtDistanceAlongSpline(USplineComponent* SplineComponent, float Distance, SplineCoordinateSpace CoordinateSpace, Vector3* Value) { + *Value = SplineComponent->GetLocationAtDistanceAlongSpline(Distance, CoordinateSpace); + } + + void GetLocationAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, SplineCoordinateSpace CoordinateSpace, Vector3* Value) { + *Value = SplineComponent->GetLocationAtSplinePoint(PointIndex, CoordinateSpace); + } + + void GetLocationAtTime(USplineComponent* SplineComponent, float Time, SplineCoordinateSpace CoordinateSpace, Vector3* Value) { + *Value = SplineComponent->GetLocationAtTime(Time, CoordinateSpace); + } + + void GetRightVectorAtDistanceAlongSpline(USplineComponent* SplineComponent, float Distance, SplineCoordinateSpace CoordinateSpace, Vector3* Value) { + *Value = SplineComponent->GetRightVectorAtDistanceAlongSpline(Distance, CoordinateSpace); + } + + void GetRightVectorAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, SplineCoordinateSpace CoordinateSpace, Vector3* Value) { + *Value = SplineComponent->GetRightVectorAtSplinePoint(PointIndex, CoordinateSpace); + } + + void GetRightVectorAtTime(USplineComponent* SplineComponent, float Time, SplineCoordinateSpace CoordinateSpace, bool UseConstantVelocity, Vector3* Value) { + *Value = SplineComponent->GetRightVectorAtTime(Time, CoordinateSpace, UseConstantVelocity); + } + + float GetRollAtDistanceAlongSpline(USplineComponent* SplineComponent, float Distance, SplineCoordinateSpace CoordinateSpace) { + return SplineComponent->GetRollAtDistanceAlongSpline(Distance, CoordinateSpace); + } + + float GetRollAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, SplineCoordinateSpace CoordinateSpace) { + return SplineComponent->GetRollAtSplinePoint(PointIndex, CoordinateSpace); + } + + float GetRollAtTime(USplineComponent* SplineComponent, float Time, SplineCoordinateSpace CoordinateSpace, bool UseConstantVelocity) { + return SplineComponent->GetRollAtTime(Time, CoordinateSpace, UseConstantVelocity); + } + + void GetRotationAtDistanceAlongSpline(USplineComponent* SplineComponent, float Distance, SplineCoordinateSpace CoordinateSpace, Quaternion* Value) { + *Value = SplineComponent->GetRotationAtDistanceAlongSpline(Distance, CoordinateSpace).Quaternion(); + } + + void GetRotationAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, SplineCoordinateSpace CoordinateSpace, Quaternion* Value) { + *Value = SplineComponent->GetRotationAtSplinePoint(PointIndex, CoordinateSpace).Quaternion(); + } + + void GetRotationAtTime(USplineComponent* SplineComponent, float Time, SplineCoordinateSpace CoordinateSpace, bool UseConstantVelocity, Quaternion* Value) { + *Value = SplineComponent->GetRotationAtTime(Time, CoordinateSpace, UseConstantVelocity).Quaternion(); + } + + void GetScaleAtDistanceAlongSpline(USplineComponent* SplineComponent, float Distance, Vector3* Value) { + *Value = SplineComponent->GetScaleAtDistanceAlongSpline(Distance); + } + + void GetScaleAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, Vector3* Value) { + *Value = SplineComponent->GetScaleAtSplinePoint(PointIndex); + } + + void GetScaleAtTime(USplineComponent* SplineComponent, float Time, bool UseConstantVelocity, Vector3* Value) { + *Value = SplineComponent->GetScaleAtTime(Time, UseConstantVelocity); + } + + float GetSplineLength(USplineComponent* SplineComponent) { + return SplineComponent->GetSplineLength(); + } + + void GetTransformAtTime(USplineComponent* SplineComponent, float Time, SplineCoordinateSpace CoordinateSpace, bool UseConstantVelocity, bool UseScale, Transform* Value) { + *Value = SplineComponent->GetTransformAtTime(Time, CoordinateSpace, UseConstantVelocity, UseScale); + } + + void GetUpVectorAtDistanceAlongSpline(USplineComponent* SplineComponent, float Distance, SplineCoordinateSpace CoordinateSpace, Vector3* Value) { + *Value = SplineComponent->GetUpVectorAtDistanceAlongSpline(Distance, CoordinateSpace); + } + + void GetUpVectorAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, SplineCoordinateSpace CoordinateSpace, Vector3* Value) { + *Value = SplineComponent->GetUpVectorAtSplinePoint(PointIndex, CoordinateSpace); + } + + void GetUpVectorAtTime(USplineComponent* SplineComponent, float Time, SplineCoordinateSpace CoordinateSpace, bool UseConstantVelocity, Vector3* Value) { + *Value = SplineComponent->GetUpVectorAtTime(Time, CoordinateSpace, UseConstantVelocity); + } + + void SetDuration(USplineComponent* SplineComponent, float Value) { + SplineComponent->Duration = Value; + } + + void SetSplinePointType(USplineComponent* SplineComponent, int32 PointIndex, SplinePointType Type, bool UpdateSpline) { + SplineComponent->SetSplinePointType(PointIndex, Type, UpdateSpline); + } + + void SetClosedLoop(USplineComponent* SplineComponent, bool Value, bool UpdateSpline) { + SplineComponent->SetClosedLoop(Value, UpdateSpline); + } + + void SetDefaultUpVector(USplineComponent* SplineComponent, const Vector3* Value, SplineCoordinateSpace CoordinateSpace) { + SplineComponent->SetDefaultUpVector(*Value, CoordinateSpace); + } + + void SetLocationAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, const Vector3* Value, SplineCoordinateSpace CoordinateSpace, bool UpdateSpline) { + SplineComponent->SetLocationAtSplinePoint(PointIndex, *Value, CoordinateSpace, UpdateSpline); + } + + void SetTangentAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, const Vector3* Tangent, SplineCoordinateSpace CoordinateSpace, bool UpdateSpline) { + SplineComponent->SetTangentAtSplinePoint(PointIndex, *Tangent, CoordinateSpace, UpdateSpline); + } + + void SetTangentsAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, const Vector3* ArriveTangent, const Vector3* LeaveTangent, SplineCoordinateSpace CoordinateSpace, bool UpdateSpline) { + SplineComponent->SetTangentsAtSplinePoint(PointIndex, *ArriveTangent, *LeaveTangent, CoordinateSpace, UpdateSpline); + } + + void SetUpVectorAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, const Vector3* UpVector, SplineCoordinateSpace CoordinateSpace, bool UpdateSpline) { + SplineComponent->SetUpVectorAtSplinePoint(PointIndex, *UpVector, CoordinateSpace, UpdateSpline); + } + + void AddSplinePoint(USplineComponent* SplineComponent, const Vector3* Location, SplineCoordinateSpace CoordinateSpace, bool UpdateSpline) { + SplineComponent->AddSplinePoint(*Location, CoordinateSpace, UpdateSpline); + } + + void AddSplinePointAtIndex(USplineComponent* SplineComponent, const Vector3* Location, int32 PointIndex, SplineCoordinateSpace CoordinateSpace, bool UpdateSpline) { + SplineComponent->AddSplinePointAtIndex(*Location, PointIndex, CoordinateSpace, UpdateSpline); + } + + void ClearSplinePoints(USplineComponent* SplineComponent, bool UpdateSpline) { + SplineComponent->ClearSplinePoints(UpdateSpline); + } + + void FindDirectionClosestToWorldLocation(USplineComponent* SplineComponent, const Vector3* Location, SplineCoordinateSpace CoordinateSpace, Vector3* Value) { + *Value = SplineComponent->FindDirectionClosestToWorldLocation(*Location, CoordinateSpace); + } + + void FindLocationClosestToWorldLocation(USplineComponent* SplineComponent, const Vector3* Location, SplineCoordinateSpace CoordinateSpace, Vector3* Value) { + *Value = SplineComponent->FindLocationClosestToWorldLocation(*Location, CoordinateSpace); + } + + void FindUpVectorClosestToWorldLocation(USplineComponent* SplineComponent, const Vector3* Location, SplineCoordinateSpace CoordinateSpace, Vector3* Value) { + *Value = SplineComponent->FindUpVectorClosestToWorldLocation(*Location, CoordinateSpace); + } + + void FindRightVectorClosestToWorldLocation(USplineComponent* SplineComponent, const Vector3* Location, SplineCoordinateSpace CoordinateSpace, Vector3* Value) { + *Value = SplineComponent->FindRightVectorClosestToWorldLocation(*Location, CoordinateSpace); + } + + float FindRollClosestToWorldLocation(USplineComponent* SplineComponent, const Vector3* Location, SplineCoordinateSpace CoordinateSpace) { + return SplineComponent->FindRollClosestToWorldLocation(*Location, CoordinateSpace); + } + + void FindScaleClosestToWorldLocation(USplineComponent* SplineComponent, const Vector3* Location, Vector3* Value) { + *Value = SplineComponent->FindScaleClosestToWorldLocation(*Location); + } + + void FindTangentClosestToWorldLocation(USplineComponent* SplineComponent, const Vector3* Location, SplineCoordinateSpace CoordinateSpace, Vector3* Value) { + *Value = SplineComponent->FindTangentClosestToWorldLocation(*Location, CoordinateSpace); + } + + void FindTransformClosestToWorldLocation(USplineComponent* SplineComponent, const Vector3* Location, SplineCoordinateSpace CoordinateSpace, bool UseScale, Transform* Value) { + *Value = SplineComponent->FindTransformClosestToWorldLocation(*Location, CoordinateSpace, UseScale); + } + + void RemoveSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, bool UpdateSpline) { + SplineComponent->RemoveSplinePoint(PointIndex, UpdateSpline); + } + + void UpdateSpline(USplineComponent* SplineComponent) { + SplineComponent->UpdateSpline(); + } + } + + namespace RadialForceComponent { + bool GetIgnoreOwningActor(URadialForceComponent* RadialForceComponent) { + return RadialForceComponent->bIgnoreOwningActor; + } + + bool GetImpulseVelocityChange(URadialForceComponent* RadialForceComponent) { + return RadialForceComponent->bImpulseVelChange; + } + + bool GetLinearFalloff(URadialForceComponent* RadialForceComponent) { + return RadialForceComponent->Falloff == ERadialImpulseFalloff::RIF_Linear; + } + + float GetForceStrength(URadialForceComponent* RadialForceComponent) { + return RadialForceComponent->ForceStrength; + } + + float GetImpulseStrength(URadialForceComponent* RadialForceComponent) { + return RadialForceComponent->ImpulseStrength; + } + + float GetRadius(URadialForceComponent* RadialForceComponent) { + return RadialForceComponent->Radius; + } + + void SetIgnoreOwningActor(URadialForceComponent* RadialForceComponent, bool Value) { + RadialForceComponent->bIgnoreOwningActor = Value; + } + + void SetImpulseVelocityChange(URadialForceComponent* RadialForceComponent, bool Value) { + RadialForceComponent->bImpulseVelChange = Value; + } + + void SetLinearFalloff(URadialForceComponent* RadialForceComponent, bool Value) { + RadialForceComponent->Falloff = Value ? ERadialImpulseFalloff::RIF_Linear : ERadialImpulseFalloff::RIF_Constant; + } + + void SetForceStrength(URadialForceComponent* RadialForceComponent, float Value) { + RadialForceComponent->ForceStrength = Value; + } + + void SetImpulseStrength(URadialForceComponent* RadialForceComponent, float Value) { + RadialForceComponent->ImpulseStrength = Value; + } + + void SetRadius(URadialForceComponent* RadialForceComponent, float Value) { + RadialForceComponent->Radius = Value; + } + + void AddCollisionChannelToAffect(URadialForceComponent* RadialForceComponent, CollisionChannel Channel) { + RadialForceComponent->AddCollisionChannelToAffect(Channel); + } + + void FireImpulse(URadialForceComponent* RadialForceComponent) { + RadialForceComponent->FireImpulse(); + } + } + + namespace MaterialInterface { + bool IsTwoSided(UMaterialInterface* MaterialInterface) { + return MaterialInterface->IsTwoSided(); + } + } + + namespace Material { + bool IsDefaultMaterial(UMaterial* Material) { + return Material->IsDefaultMaterial(); + } + } + + namespace MaterialInstance { + bool IsChildOf(UMaterialInstance* MaterialInstance, UMaterialInterface* Material) { + return MaterialInstance->IsChildOf(Material); + } + + UMaterialInstanceDynamic* GetParent(UMaterialInstance* MaterialInstance) { + return UMaterialInstanceDynamic::Create(MaterialInstance->Parent, MaterialInstance); + } + } + + namespace MaterialInstanceDynamic { + void ClearParameterValues(UMaterialInstanceDynamic* MaterialInstanceDynamic) { + MaterialInstanceDynamic->ClearParameterValues(); + } + + void SetTextureParameterValue(UMaterialInstanceDynamic* MaterialInstanceDynamic, const char* ParameterName, UTexture* Value) { + MaterialInstanceDynamic->SetTextureParameterValue(FName(ANSI_TO_TCHAR(ParameterName)), Value); + } + + void SetVectorParameterValue(UMaterialInstanceDynamic* MaterialInstanceDynamic, const char* ParameterName, const LinearColor* Value) { + MaterialInstanceDynamic->SetVectorParameterValue(FName(ANSI_TO_TCHAR(ParameterName)), *Value); + } + + void SetScalarParameterValue(UMaterialInstanceDynamic* MaterialInstanceDynamic, const char* ParameterName, float Value) { + MaterialInstanceDynamic->SetScalarParameterValue(FName(ANSI_TO_TCHAR(ParameterName)), Value); + } + } +} diff --git a/plugins/UnrealCLR/Source/UnrealCLR/Private/UnrealCLRLibrary.cpp b/plugins/UnrealCLR/Source/UnrealCLR/Private/UnrealCLRLibrary.cpp new file mode 100644 index 00000000..b2985dfd --- /dev/null +++ b/plugins/UnrealCLR/Source/UnrealCLR/Private/UnrealCLRLibrary.cpp @@ -0,0 +1,56 @@ +/* + * Unreal Engine .NET 5 integration + * Copyright (c) 2021 Stanislav Denisov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "UnrealCLRLibrary.h" + +FManagedFunction::FManagedFunction() : Pointer() { } + +UUnrealCLRLibrary::UUnrealCLRLibrary(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { } + +void UUnrealCLRLibrary::ExecuteManagedFunction(FManagedFunction ManagedFunction, UObject* Object = nullptr) { + if (UnrealCLR::Status == UnrealCLR::StatusType::Running && ManagedFunction.Pointer) + UnrealCLR::ManagedCommand(UnrealCLR::Command(ManagedFunction.Pointer, Object)); +} + +FManagedFunction UUnrealCLRLibrary::FindManagedFunction(FString Method, bool Optional, bool& Result) { + FManagedFunction managedFunction; + + if (UnrealCLR::Status == UnrealCLR::StatusType::Running && !Method.IsEmpty()) + managedFunction.Pointer = UnrealCLR::ManagedCommand(UnrealCLR::Command(TCHAR_TO_ANSI(*Method), Optional)); + + Result = managedFunction.Pointer != nullptr; + + return managedFunction; +} + +UUnrealCLRCharacter::UUnrealCLRCharacter(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { } + +void UUnrealCLRCharacter::Landed(const FHitResult& Hit) { + UnrealCLRFramework::Hit hit(Hit); + + void* parameters[1] = { + &hit + }; + + UnrealCLR::ManagedCommand(UnrealCLR::Command(LandedCallback, UnrealCLR::Callback(parameters, UnrealCLR::CallbackType::CharacterLandedDelegate))); +} \ No newline at end of file diff --git a/plugins/UnrealCLR/Source/UnrealCLR/Private/UnrealCLRManager.cpp b/plugins/UnrealCLR/Source/UnrealCLR/Private/UnrealCLRManager.cpp new file mode 100644 index 00000000..b2000c03 --- /dev/null +++ b/plugins/UnrealCLR/Source/UnrealCLR/Private/UnrealCLRManager.cpp @@ -0,0 +1,192 @@ +/* + * Unreal Engine .NET 5 integration + * Copyright (c) 2021 Stanislav Denisov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "UnrealCLRManager.h" + +void UUnrealCLRManager::ActorBeginOverlap(AActor* OverlapActor, AActor* OtherActor) { + if (UnrealCLR::Shared::Events[UnrealCLR::OnActorBeginOverlap]) { + void* parameters[2] = { + OverlapActor, + OtherActor + }; + + UnrealCLR::ManagedCommand(UnrealCLR::Command(UnrealCLR::Shared::Events[UnrealCLR::OnActorBeginOverlap], UnrealCLR::Callback(parameters, UnrealCLR::CallbackType::ActorOverlapDelegate))); + } +} + +void UUnrealCLRManager::ActorEndOverlap(AActor* OverlapActor, AActor* OtherActor) { + if (UnrealCLR::Shared::Events[UnrealCLR::OnActorEndOverlap]) { + void* parameters[2] = { + OverlapActor, + OtherActor + }; + + UnrealCLR::ManagedCommand(UnrealCLR::Command(UnrealCLR::Shared::Events[UnrealCLR::OnActorEndOverlap], UnrealCLR::Callback(parameters, UnrealCLR::CallbackType::ActorOverlapDelegate))); + } +} + +void UUnrealCLRManager::ActorHit(AActor* HitActor, AActor* OtherActor, FVector NormalImpulse, const FHitResult& Hit) { + if (UnrealCLR::Shared::Events[UnrealCLR::OnActorHit]) { + UnrealCLRFramework::Vector3 normalImpulse(NormalImpulse); + UnrealCLRFramework::Hit hit(Hit); + + void* parameters[4] = { + HitActor, + OtherActor, + &normalImpulse, + &hit + }; + + UnrealCLR::ManagedCommand(UnrealCLR::Command(UnrealCLR::Shared::Events[UnrealCLR::OnActorHit], UnrealCLR::Callback(parameters, UnrealCLR::CallbackType::ActorHitDelegate))); + } +} + +void UUnrealCLRManager::ActorBeginCursorOver(AActor* Actor) { + if (UnrealCLR::Shared::Events[UnrealCLR::OnActorBeginCursorOver]) { + void* parameters[1] = { + Actor + }; + + UnrealCLR::ManagedCommand(UnrealCLR::Command(UnrealCLR::Shared::Events[UnrealCLR::OnActorBeginCursorOver], UnrealCLR::Callback(parameters, UnrealCLR::CallbackType::ActorCursorDelegate))); + } +} + +void UUnrealCLRManager::ActorEndCursorOver(AActor* Actor) { + if (UnrealCLR::Shared::Events[UnrealCLR::OnActorEndCursorOver]) { + void* parameters[1] = { + Actor + }; + + UnrealCLR::ManagedCommand(UnrealCLR::Command(UnrealCLR::Shared::Events[UnrealCLR::OnActorEndCursorOver], UnrealCLR::Callback(parameters, UnrealCLR::CallbackType::ActorCursorDelegate))); + } +} + +void UUnrealCLRManager::ActorClicked(AActor* Actor, FKey Key) { + if (UnrealCLR::Shared::Events[UnrealCLR::OnActorClicked]) { + FString key = Key.ToString(); + + void* parameters[2] = { + Actor, + TCHAR_TO_ANSI(*key) + }; + + UnrealCLR::ManagedCommand(UnrealCLR::Command(UnrealCLR::Shared::Events[UnrealCLR::OnActorClicked], UnrealCLR::Callback(parameters, UnrealCLR::CallbackType::ActorKeyDelegate))); + } +} + +void UUnrealCLRManager::ActorReleased(AActor* Actor, FKey Key) { + if (UnrealCLR::Shared::Events[UnrealCLR::OnActorReleased]) { + FString key = Key.ToString(); + + void* parameters[2] = { + Actor, + TCHAR_TO_ANSI(*key) + }; + + UnrealCLR::ManagedCommand(UnrealCLR::Command(UnrealCLR::Shared::Events[UnrealCLR::OnActorReleased], UnrealCLR::Callback(parameters, UnrealCLR::CallbackType::ActorKeyDelegate))); + } +} + +void UUnrealCLRManager::ComponentBeginOverlap(UPrimitiveComponent* OverlapComponent, AActor* OtherActor, UPrimitiveComponent* OtherComponent, int32 OtherBodyIndex, bool FromSweep, const FHitResult& SweepResult) { + if (UnrealCLR::Shared::Events[UnrealCLR::OnComponentBeginOverlap]) { + void* parameters[2] = { + OverlapComponent, + OtherComponent + }; + + UnrealCLR::ManagedCommand(UnrealCLR::Command(UnrealCLR::Shared::Events[UnrealCLR::OnComponentBeginOverlap], UnrealCLR::Callback(parameters, UnrealCLR::CallbackType::ComponentOverlapDelegate))); + } +} + +void UUnrealCLRManager::ComponentEndOverlap(UPrimitiveComponent* OverlapComponent, AActor* OtherActor, UPrimitiveComponent* OtherComponent, int32 OtherBodyIndex) { + if (UnrealCLR::Shared::Events[UnrealCLR::OnComponentEndOverlap]) { + void* parameters[2] = { + OverlapComponent, + OtherComponent + }; + + UnrealCLR::ManagedCommand(UnrealCLR::Command(UnrealCLR::Shared::Events[UnrealCLR::OnComponentEndOverlap], UnrealCLR::Callback(parameters, UnrealCLR::CallbackType::ComponentOverlapDelegate))); + } +} + +void UUnrealCLRManager::ComponentHit(UPrimitiveComponent* HitComponent, AActor* OtherActor, UPrimitiveComponent* OtherComponent, FVector NormalImpulse, const FHitResult& Hit) { + if (UnrealCLR::Shared::Events[UnrealCLR::OnComponentHit]) { + UnrealCLRFramework::Vector3 normalImpulse(NormalImpulse); + UnrealCLRFramework::Hit hit(Hit); + + void* parameters[4] = { + HitComponent, + OtherComponent, + &normalImpulse, + &hit + }; + + UnrealCLR::ManagedCommand(UnrealCLR::Command(UnrealCLR::Shared::Events[UnrealCLR::OnComponentHit], UnrealCLR::Callback(parameters, UnrealCLR::CallbackType::ComponentHitDelegate))); + } +} + +void UUnrealCLRManager::ComponentBeginCursorOver(UPrimitiveComponent* Component) { + if (UnrealCLR::Shared::Events[UnrealCLR::OnActorBeginCursorOver]) { + void* parameters[1] = { + Component + }; + + UnrealCLR::ManagedCommand(UnrealCLR::Command(UnrealCLR::Shared::Events[UnrealCLR::OnComponentBeginCursorOver], UnrealCLR::Callback(parameters, UnrealCLR::CallbackType::ComponentCursorDelegate))); + } +} + +void UUnrealCLRManager::ComponentEndCursorOver(UPrimitiveComponent* Component) { + if (UnrealCLR::Shared::Events[UnrealCLR::OnComponentEndCursorOver]) { + void* parameters[1] = { + Component + }; + + UnrealCLR::ManagedCommand(UnrealCLR::Command(UnrealCLR::Shared::Events[UnrealCLR::OnComponentEndCursorOver], UnrealCLR::Callback(parameters, UnrealCLR::CallbackType::ComponentCursorDelegate))); + } +} + +void UUnrealCLRManager::ComponentClicked(UPrimitiveComponent* Component, FKey Key) { + if (UnrealCLR::Shared::Events[UnrealCLR::OnComponentClicked]) { + FString key = Key.ToString(); + + void* parameters[2] = { + Component, + TCHAR_TO_ANSI(*key) + }; + + UnrealCLR::ManagedCommand(UnrealCLR::Command(UnrealCLR::Shared::Events[UnrealCLR::OnComponentClicked], UnrealCLR::Callback(parameters, UnrealCLR::CallbackType::ComponentKeyDelegate))); + } +} + +void UUnrealCLRManager::ComponentReleased(UPrimitiveComponent* Component, FKey Key) { + if (UnrealCLR::Shared::Events[UnrealCLR::OnComponentReleased]) { + FString key = Key.ToString(); + + void* parameters[2] = { + Component, + TCHAR_TO_ANSI(*key) + }; + + UnrealCLR::ManagedCommand(UnrealCLR::Command(UnrealCLR::Shared::Events[UnrealCLR::OnComponentReleased], UnrealCLR::Callback(parameters, UnrealCLR::CallbackType::ComponentKeyDelegate))); + } +} \ No newline at end of file diff --git a/plugins/UnrealCLR/Source/UnrealCLR/Public/UnrealCLR.h b/plugins/UnrealCLR/Source/UnrealCLR/Public/UnrealCLR.h new file mode 100644 index 00000000..a9029ee2 --- /dev/null +++ b/plugins/UnrealCLR/Source/UnrealCLR/Public/UnrealCLR.h @@ -0,0 +1,406 @@ +/* + * Unreal Engine .NET 5 integration + * Copyright (c) 2021 Stanislav Denisov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#pragma once + +// @third party code - BEGIN CoreCLR +#include "../../Dependencies/CoreCLR/includes/coreclr_delegates.h" +#include "../../Dependencies/CoreCLR/includes/hostfxr.h" +// @third party code - END CoreCLR + +#include "AIController.h" +#include "Animation/AnimInstance.h" +#include "AssetRegistryModule.h" +#include "Camera/CameraActor.h" +#include "Camera/CameraComponent.h" +#include "Components/AudioComponent.h" +#include "Components/BoxComponent.h" +#include "Components/CapsuleComponent.h" +#include "Components/DirectionalLightComponent.h" +#include "Components/HierarchicalInstancedStaticMeshComponent.h" +#include "Components/InputComponent.h" +#include "Components/LightComponent.h" +#include "Components/LightComponentBase.h" +#include "Components/PostProcessComponent.h" +#include "Components/ShapeComponent.h" +#include "Components/SphereComponent.h" +#include "Components/SplineComponent.h" +#include "Components/TextRenderComponent.h" +#include "DrawDebugHelpers.h" +#include "Engine/DirectionalLight.h" +#include "Engine/Font.h" +#include "Engine/GameEngine.h" +#include "Engine/LevelScriptActor.h" +#include "Engine/Light.h" +#include "Engine/Player.h" +#include "Engine/PointLight.h" +#include "Engine/PostProcessVolume.h" +#include "Engine/RectLight.h" +#include "Engine/SpotLight.h" +#include "Engine/TriggerBox.h" +#include "Engine/TriggerCapsule.h" +#include "Engine/TriggerSphere.h" +#include "Engine/TriggerVolume.h" +#include "EngineUtils.h" +#include "GameFramework/Actor.h" +#include "GameFramework/Character.h" +#include "GameFramework/GameModeBase.h" +#include "GameFramework/PlayerController.h" +#include "GameFramework/PlayerInput.h" +#include "GameFramework/SpringArmComponent.h" +#include "HeadMountedDisplayFunctionLibrary.h" +#include "IAssetRegistry.h" +#include "ImageUtils.h" +#include "Materials/MaterialInstanceDynamic.h" +#include "Misc/DefaultValueHelper.h" +#include "Misc/OutputDeviceNull.h" +#include "Modules/ModuleManager.h" +#include "MotionControllerComponent.h" +#include "PhysicsEngine/RadialForceComponent.h" +#include "Sound/AmbientSound.h" +#include "UnrealEngine.h" + +#include "UnrealCLRFramework.h" +#include "UnrealCLRLibrary.h" +#include "UnrealCLRManager.h" + +#if WITH_EDITOR + #include "Editor.h" + #include "Framework/Notifications/NotificationManager.h" + #include "Widgets/Notifications/SNotificationList.h" +#endif + +#ifdef _WIN32 + #define UNREALCLR_WINDOWS 1 +#elif defined(__unix__) + #define UNREALCLR_UNIX 2 +#elif defined(__APPLE__) + #define UNREALCLR_MAC 3 +#endif + +#define UNREALCLR_NONE +#define UNREALCLR_BRACKET_LEFT ( +#define UNREALCLR_BRACKET_RIGHT ) + +UNREALCLR_API DECLARE_LOG_CATEGORY_EXTERN(LogUnrealCLR, Log, All); + +namespace UnrealCLR { + enum struct StatusType : int32 { + Stopped, + Idle, + Running + }; + + enum struct TickState : int32 { + Stopped, + Registered, + Started + }; + + enum struct LogLevel : int32 { + Display, + Warning, + Error, + Fatal + }; + + enum struct CallbackType : int32 { + ActorOverlapDelegate, + ActorHitDelegate, + ActorCursorDelegate, + ActorKeyDelegate, + ComponentOverlapDelegate, + ComponentHitDelegate, + ComponentCursorDelegate, + ComponentKeyDelegate, + CharacterLandedDelegate + }; + + enum struct ArgumentType : int32 { + None, + Single, + Integer, + Pointer, + Callback + }; + + enum struct CommandType : int32 { + Initialize = 1, + LoadAssemblies = 2, + UnloadAssemblies = 3, + Find = 4, + Execute = 5 + }; + + enum { + OnWorldBegin, + OnWorldPostBegin, + OnWorldPrePhysicsTick, + OnWorldDuringPhysicsTick, + OnWorldPostPhysicsTick, + OnWorldPostUpdateTick, + OnWorldEnd, + OnActorBeginOverlap, + OnActorEndOverlap, + OnActorHit, + OnActorBeginCursorOver, + OnActorEndCursorOver, + OnActorClicked, + OnActorReleased, + OnComponentBeginOverlap, + OnComponentEndOverlap, + OnComponentHit, + OnComponentBeginCursorOver, + OnComponentEndCursorOver, + OnComponentClicked, + OnComponentReleased + }; + + struct Callback { + void** Parameters; + CallbackType Type; + + FORCEINLINE Callback(void** Parameters, CallbackType Type) { + this->Parameters = Parameters; + this->Type = Type; + } + }; + + struct Argument { + union { + float Single; + uint32_t Integer; + void* Pointer; + Callback Callback; + }; + ArgumentType Type; + + FORCEINLINE Argument(float Value) { + this->Single = Value; + this->Type = ArgumentType::Single; + } + + FORCEINLINE Argument(uint32_t Value) { + this->Integer = Value; + this->Type = ArgumentType::Integer; + } + + FORCEINLINE Argument(void* Value) { + this->Pointer = Value; + this->Type = !Value ? ArgumentType::None : ArgumentType::Pointer; + } + + FORCEINLINE Argument(UnrealCLR::Callback Value) { + this->Callback = Value; + this->Type = ArgumentType::Callback; + } + }; + + struct Command { + union { + struct { + void* Buffer; + int32 Checksum; + }; + struct { + char* Method; + int32 Optional; + }; + struct { + void* Function; + Argument Value; + }; + }; + CommandType Type; + + FORCEINLINE Command(void* const Functions[3], int32 Checksum) { + this->Buffer = (void*)Functions; + this->Checksum = Checksum; + this->Type = CommandType::Initialize; + } + + FORCEINLINE Command(CommandType Type) { + this->Type = Type; + } + + FORCEINLINE Command(const char* Method, bool Optional) { + this->Method = (char*)Method; + this->Optional = Optional; + this->Type = CommandType::Find; + } + + FORCEINLINE Command(void* Function) { + this->Function = Function; + this->Value = nullptr; + this->Type = CommandType::Execute; + } + + FORCEINLINE Command(void* Function, Argument Value) { + this->Function = Function; + this->Value = Value; + this->Type = CommandType::Execute; + } + }; + + static_assert(sizeof(Callback) == 16, "Invalid size of the [Callback] structure"); + static_assert(sizeof(Argument) == 24, "Invalid size of the [Argument] structure"); + static_assert(sizeof(Command) == 40, "Invalid size of the [Command] structure"); + + static void* (*ManagedCommand)(Command); + + static FString ProjectPath; + static FString UserAssembliesPath; + + static StatusType Status = StatusType::Stopped; + static TickState WorldTickState = TickState::Stopped; + + struct PrePhysicsTickFunction : public FTickFunction { + virtual void ExecuteTick(float DeltaTime, enum ELevelTick TickType, ENamedThreads::Type CurrentThread, const FGraphEventRef& MyCompletionGraphEvent) override; + virtual FString DiagnosticMessage() override; + }; + + struct DuringPhysicsTickFunction : public FTickFunction { + virtual void ExecuteTick(float DeltaTime, enum ELevelTick TickType, ENamedThreads::Type CurrentThread, const FGraphEventRef& MyCompletionGraphEvent) override; + virtual FString DiagnosticMessage() override; + }; + + struct PostPhysicsTickFunction : public FTickFunction { + virtual void ExecuteTick(float DeltaTime, enum ELevelTick TickType, ENamedThreads::Type CurrentThread, const FGraphEventRef& MyCompletionGraphEvent) override; + virtual FString DiagnosticMessage() override; + }; + + struct PostUpdateTickFunction : public FTickFunction { + virtual void ExecuteTick(float DeltaTime, enum ELevelTick TickType, ENamedThreads::Type CurrentThread, const FGraphEventRef& MyCompletionGraphEvent) override; + virtual FString DiagnosticMessage() override; + }; + + class Module : public IModuleInterface { + protected: + + virtual void StartupModule() override; + virtual void ShutdownModule() override; + + private: + + void OnWorldPostInitialization(UWorld* World, const UWorld::InitializationValues InitializationValues); + void OnWorldCleanup(UWorld* World, bool SessionEnded, bool CleanupResources); + + static void RegisterTickFunction(FTickFunction& TickFunction, ETickingGroup TickGroup, AWorldSettings* LevelActor); + static void HostError(const char_t* Message); + static void Exception(const char* Message); + static void Log(UnrealCLR::LogLevel Level, const char* Message); + + FDelegateHandle OnWorldPostInitializationHandle; + FDelegateHandle OnWorldCleanupHandle; + + PrePhysicsTickFunction OnPrePhysicsTickFunction; + DuringPhysicsTickFunction OnDuringPhysicsTickFunction; + PostPhysicsTickFunction OnPostPhysicsTickFunction; + PostUpdateTickFunction OnPostUpdateTickFunction; + + void* HostfxrLibrary; + }; + + namespace Engine { + static UUnrealCLRManager* Manager; + static UWorld* World; + } + + namespace Shared { + constexpr static int32 storageSize = 128; + + // Non-instantiable + + static void* AssertFunctions[storageSize]; + static void* CommandLineFunctions[storageSize]; + static void* DebugFunctions[storageSize]; + static void* ObjectFunctions[storageSize]; + static void* ApplicationFunctions[storageSize]; + static void* ConsoleManagerFunctions[storageSize]; + static void* EngineFunctions[storageSize]; + static void* WorldFunctions[storageSize]; + + // Instantiable + + static void* AssetFunctions[storageSize]; + static void* AssetRegistryFunctions[storageSize]; + static void* BlueprintFunctions[storageSize]; + static void* ConsoleObjectFunctions[storageSize]; + static void* ConsoleVariableFunctions[storageSize]; + static void* ActorFunctions[storageSize]; + static void* GameModeBaseFunctions[storageSize]; + static void* PawnFunctions[storageSize]; + static void* CharacterFunctions[storageSize]; + static void* ControllerFunctions[storageSize]; + static void* AIControllerFunctions[storageSize]; + static void* PlayerControllerFunctions[storageSize]; + static void* VolumeFunctions[storageSize]; + static void* PostProcessVolumeFunctions[storageSize]; + static void* SoundBaseFunctions[storageSize]; + static void* SoundWaveFunctions[storageSize]; + static void* AnimationInstanceFunctions[storageSize]; + static void* PlayerFunctions[storageSize]; + static void* PlayerInputFunctions[storageSize]; + static void* FontFunctions[storageSize]; + static void* Texture2DFunctions[storageSize]; + static void* ActorComponentFunctions[storageSize]; + static void* InputComponentFunctions[storageSize]; + static void* SceneComponentFunctions[storageSize]; + static void* AudioComponentFunctions[storageSize]; + static void* CameraComponentFunctions[storageSize]; + static void* ChildActorComponentFunctions[storageSize]; + static void* SpringArmComponentFunctions[storageSize]; + static void* PostProcessComponentFunctions[storageSize]; + static void* PrimitiveComponentFunctions[storageSize]; + static void* ShapeComponentFunctions[storageSize]; + static void* BoxComponentFunctions[storageSize]; + static void* SphereComponentFunctions[storageSize]; + static void* CapsuleComponentFunctions[storageSize]; + static void* MeshComponentFunctions[storageSize]; + static void* TextRenderComponentFunctions[storageSize]; + static void* LightComponentBaseFunctions[storageSize]; + static void* LightComponentFunctions[storageSize]; + static void* MotionControllerComponentFunctions[storageSize]; + static void* StaticMeshComponentFunctions[storageSize]; + static void* InstancedStaticMeshComponentFunctions[storageSize]; + static void* HierarchicalInstancedStaticMeshComponentFunctions[storageSize]; + static void* SkinnedMeshComponentFunctions[storageSize]; + static void* SkeletalMeshComponentFunctions[storageSize]; + static void* SplineComponentFunctions[storageSize]; + static void* RadialForceComponentFunctions[storageSize]; + static void* MaterialInterfaceFunctions[storageSize]; + static void* MaterialFunctions[storageSize]; + static void* MaterialInstanceFunctions[storageSize]; + static void* MaterialInstanceDynamicFunctions[storageSize]; + static void* HeadMountedDisplayFunctions[storageSize]; + + static void* RuntimeFunctions[2]; + static void* Events[128]; + static void* Functions[128]; + } + + namespace Utility { + FORCEINLINE static size_t Strcpy(char* Destination, const char* Source, size_t Length); + FORCEINLINE static size_t Strlen(const char* Source); + } +} \ No newline at end of file diff --git a/plugins/UnrealCLR/Source/UnrealCLR/Public/UnrealCLRFramework.h b/plugins/UnrealCLR/Source/UnrealCLR/Public/UnrealCLRFramework.h new file mode 100644 index 00000000..8d3ca065 --- /dev/null +++ b/plugins/UnrealCLR/Source/UnrealCLR/Public/UnrealCLRFramework.h @@ -0,0 +1,1216 @@ +/* + * Unreal Engine .NET 5 integration + * Copyright (c) 2021 Stanislav Denisov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#pragma once + +UNREALCLR_API DECLARE_LOG_CATEGORY_EXTERN(LogUnrealManaged, Log, All); + +namespace UnrealCLRFramework { + using AnimationMode = EAnimationMode::Type; + using AutoReceiveInput = EAutoReceiveInput::Type; + using CameraProjectionMode = ECameraProjectionMode::Type; + using CollisionMode = ECollisionEnabled::Type; + using CollisionShapeType = ECollisionShape::Type; + using ComponentMobility = EComponentMobility::Type; + using SplineCoordinateSpace = ESplineCoordinateSpace::Type; + using SplinePointType = ESplinePointType::Type; + using WindowMode = EWindowMode::Type; + + using AudioFadeCurve = EAudioFaderCurve; + using AutoPossessAI = EAutoPossessAI; + using BlendType = EViewTargetBlendFunction; + using CollisionChannel = ECollisionChannel; + using CollisionResponse = ECollisionResponse; + using ControllerHand = EControllerHand; + using HorizontalTextAligment = EHorizTextAligment; + using InputEvent = EInputEvent; + using NetMode = ENetMode; + using PixelFormat = EPixelFormat; + using TeleportType = ETeleportType; + using VerticalTextAligment = EVerticalTextAligment; + + using Bounds = FBoxSphereBounds; + using CollisionShape = FCollisionShape; + + enum struct LogLevel : int32 { + Display, + Warning, + Error, + Fatal + }; + + enum struct AttachmentTransformRule : int32 { + KeepRelativeTransform, + KeepWorldTransform, + SnapToTargetIncludingScale, + SnapToTargetNotIncludingScale + }; + + enum struct DetachmentTransformRule : int32 { + KeepRelativeTransform, + KeepWorldTransform + }; + + enum struct UpdateTransformFlags : int32 { + None = 0, + SkipPhysicsUpdate = 1 << 0, + PropagateFromParent = 1 << 1, + OnlyUpdateIfUsingSocket = 1 << 2 + }; + + enum struct AIFocusPriority : int32 { + Default = 0, + Move = 1, + Gameplay = 2 + }; + + enum struct ActorEventType : int32 { + OnActorBeginOverlap, + OnActorEndOverlap, + OnActorHit, + OnActorBeginCursorOver, + OnActorEndCursorOver, + OnActorClicked, + OnActorReleased + }; + + enum struct ComponentEventType : int32 { + OnComponentBeginOverlap, + OnComponentEndOverlap, + OnComponentHit, + OnComponentBeginCursorOver, + OnComponentEndCursorOver, + OnComponentClicked, + OnComponentReleased + }; + + struct Color { + uint8 B; + uint8 G; + uint8 R; + uint8 A; + + FORCEINLINE Color(FColor Value) { + this->R = Value.R; + this->G = Value.G; + this->B = Value.B; + this->A = Value.A; + } + + FORCEINLINE operator FColor() const { return FColor(R, G, B, A); } + }; + + struct Vector2 { + float X; + float Y; + + FORCEINLINE Vector2(FVector2D Value) { + this->X = Value.X; + this->Y = Value.Y; + } + + FORCEINLINE operator FVector2D() const { return FVector2D(X, Y); } + }; + + struct Vector3 { + float X; + float Y; + float Z; + + FORCEINLINE Vector3(FVector Value) { + this->X = Value.X; + this->Y = Value.Y; + this->Z = Value.Z; + } + + FORCEINLINE operator FVector() const { return FVector(X, Y, Z); } + }; + + struct Quaternion { + float X; + float Y; + float Z; + float W; + + FORCEINLINE Quaternion(FQuat Value) { + this->X = Value.X; + this->Y = Value.Y; + this->Z = Value.Z; + this->W = Value.W; + } + + FORCEINLINE operator FQuat() const { return FQuat(X, Y, Z, W); } + }; + + struct Transform { + Vector3 Location; + Quaternion Rotation; + Vector3 Scale; + + FORCEINLINE Transform(const FTransform& Value) : + Location(Value.GetTranslation()), + Rotation(Value.GetRotation()), + Scale(Value.GetScale3D()) { } + + FORCEINLINE operator FTransform() const { return FTransform(Rotation, Location, Scale); } + }; + + struct LinearColor { + float R; + float G; + float B; + float A; + + FORCEINLINE LinearColor(FLinearColor Value) { + this->R = Value.R; + this->G = Value.G; + this->B = Value.B; + this->A = Value.A; + } + + FORCEINLINE operator FLinearColor() const { return FLinearColor(R, G, B, A); } + }; + + struct Hit { + Vector3 Location; + Vector3 ImpactLocation; + Vector3 Normal; + Vector3 ImpactNormal; + Vector3 TraceStart; + Vector3 TraceEnd; + AActor* Actor; + float Time; + float Distance; + float PenetrationDepth; + bool BlockingHit; + bool StartPenetrating; + + FORCEINLINE Hit(const FHitResult& Value) : + Location(FVector(Value.Location.X, Value.Location.Y, Value.Location.Z)), + ImpactLocation(FVector(Value.ImpactPoint.X, Value.ImpactPoint.Y, Value.ImpactPoint.Z)), + Normal(FVector(Value.Normal.X, Value.Normal.Y, Value.Normal.Z)), + ImpactNormal(FVector(Value.ImpactNormal.X, Value.ImpactNormal.Y, Value.ImpactNormal.Z)), + TraceStart(FVector(Value.TraceStart.X, Value.TraceStart.Y, Value.TraceStart.Z)), + TraceEnd(FVector(Value.TraceEnd.X, Value.TraceEnd.Y, Value.TraceEnd.Z)), + Actor(Value.GetActor()), + Time(Value.Time), + Distance(Value.Distance), + PenetrationDepth(Value.PenetrationDepth), + BlockingHit(Value.bBlockingHit), + StartPenetrating(Value.bStartPenetrating) { } + }; + + typedef void (*InputDelegate)(); + + typedef void (*InputAxisDelegate)(float); + + typedef void (*ConsoleVariableDelegate)(); + + typedef void (*ConsoleCommandDelegate)(float); + + typedef void (*ActorOverlapDelegate)(AActor*, AActor*); + + typedef void (*ActorHitDelegate)(AActor* HitActor, AActor* OtherActor, const Vector3* NormalImpulse, const Hit* Hit); + + typedef void (*ActorCursorDelegate)(AActor* Actor); + + typedef void (*ActorKeyDelegate)(AActor* Actor, const char* Key); + + typedef void (*ComponentOverlapDelegate)(UPrimitiveComponent*, UPrimitiveComponent*); + + typedef void (*ComponentHitDelegate)(UPrimitiveComponent* HitComponent, UPrimitiveComponent* OtherComponent, const Vector3* NormalImpulse, const Hit* Hit); + + typedef void (*ComponentCursorDelegate)(UPrimitiveComponent* Component); + + typedef void (*ComponentKeyDelegate)(UPrimitiveComponent* Component, const char* Key); + + typedef void (*CharacterLandedDelegate)(const Hit* Hit); + + // Enumerable + + enum struct ObjectType : int32 { + Blueprint, + SoundWave, + AnimationSequence, + AnimationMontage, + StaticMesh, + SkeletalMesh, + Material, + Font, + Texture2D + }; + + enum struct ActorType : int32 { + Base, + Camera, + TriggerBox, + TriggerSphere, + TriggerCapsule, + Pawn, + Character, + AIController, + PlayerController, + Brush, + AmbientSound, + DirectionalLight, + PointLight, + RectLight, + SpotLight, + TriggerVolume, + PostProcessVolume, + LevelScript, + GameModeBase + }; + + enum struct ComponentType : int32 { + // Non-attachable + Actor, + Input, + // Attachable + Scene, + Audio, + Camera, + Light, + DirectionalLight, + MotionController, + StaticMesh, + InstancedStaticMesh, + HierarchicalInstancedStaticMesh, + ChildActor, + SpringArm, + PostProcess, + Box, + Sphere, + Capsule, + TextRender, + SkeletalMesh, + Spline, + RadialForce + }; + + // Non-instantiable + + namespace Assert { + static void OutputMessage(const uint8* Message); + } + + namespace CommandLine { + static void Get(char* Arguments); + static void Set(const char* Arguments); + static void Append(const char* Arguments); + } + + namespace Debug { + static void Log(LogLevel Level, const uint8* Message); + static void Exception(const uint8* Exception); + static void AddOnScreenMessage(int32 Key, float TimeToDisplay, Color DisplayColor, const uint8* Message); + static void ClearOnScreenMessages(); + static void DrawBox(const Vector3* Center, const Vector3* Extent, const Quaternion* Rotation, Color Color, bool PersistentLines, float LifeTime, uint8 DepthPriority, float Thickness); + static void DrawCapsule(const Vector3* Center, float HalfHeight, float Radius, const Quaternion* Rotation, Color Color, bool PersistentLines, float LifeTime, uint8 DepthPriority, float Thickness); + static void DrawCone(const Vector3* Origin, const Vector3* Direction, float Length, float AngleWidth, float AngleHeight, int32 Sides, Color Color, bool PersistentLines, float LifeTime, uint8 DepthPriority, float Thickness); + static void DrawCylinder(const Vector3* Start, const Vector3* End, float Radius, int32 Segments, Color Color, bool PersistentLines, float LifeTime, uint8 DepthPriority, float Thickness); + static void DrawSphere(const Vector3* Center, float Radius, int32 Segments, Color Color, bool PersistentLines, float LifeTime, uint8 DepthPriority, float Thickness); + static void DrawLine(const Vector3* Start, const Vector3* End, Color Color, bool PersistentLines, float LifeTime, uint8 DepthPriority, float Thickness); + static void DrawPoint(const Vector3* Location, float Size, Color Color, bool PersistentLines, float LifeTime, uint8 DepthPriority); + static void FlushPersistentLines(); + } + + namespace Object { + static bool IsPendingKill(UObject* Object); + static bool IsValid(UObject* Object); + static UObject* Load(ObjectType Type, const char* Name); + static void Rename(UObject* Object, const char* Name); + static bool Invoke(UObject* Object, const uint8* Command); + static AActor* ToActor(UObject* Object, ActorType Type); + static UActorComponent* ToComponent(UObject* Object, ComponentType Type); + static uint32 GetID(UObject* Object); + static void GetName(UObject* Object, char* Name); + static bool GetBool(UObject* Object, const char* Name, bool* value); + static bool GetByte(UObject* Object, const char* Name, uint8* Value); + static bool GetShort(UObject* Object, const char* Name, int16* Value); + static bool GetInt(UObject* Object, const char* Name, int32* Value); + static bool GetLong(UObject* Object, const char* Name, int64* Value); + static bool GetUShort(UObject* Object, const char* Name, uint16* Value); + static bool GetUInt(UObject* Object, const char* Name, uint32* Value); + static bool GetULong(UObject* Object, const char* Name, uint64* Value); + static bool GetFloat(UObject* Object, const char* Name, float* Value); + static bool GetDouble(UObject* Object, const char* Name, double* Value); + static bool GetEnum(UObject* Object, const char* Name, int32* Value); + static bool GetString(UObject* Object, const char* Name, char* Value); + static bool GetText(UObject* Object, const char* Name, char* Value); + static bool SetBool(UObject* Object, const char* Name, bool value); + static bool SetByte(UObject* Object, const char* Name, uint8 Value); + static bool SetShort(UObject* Object, const char* Name, int16 Value); + static bool SetInt(UObject* Object, const char* Name, int32 Value); + static bool SetLong(UObject* Object, const char* Name, int64 Value); + static bool SetUShort(UObject* Object, const char* Name, uint16 Value); + static bool SetUInt(UObject* Object, const char* Name, uint32 Value); + static bool SetULong(UObject* Object, const char* Name, uint64 Value); + static bool SetFloat(UObject* Object, const char* Name, float Value); + static bool SetDouble(UObject* Object, const char* Name, double Value); + static bool SetEnum(UObject* Object, const char* Name, int32 Value); + static bool SetString(UObject* Object, const char* Name, const char* Value); + static bool SetText(UObject* Object, const char* Name, const char* Value); + } + + namespace Application { + static bool IsCanEverRender(); + static bool IsPackagedForDistribution(); + static bool IsPackagedForShipping(); + static void GetProjectDirectory(char* Directory); + static void GetDefaultLanguage(char* Language); + static void GetProjectName(char* ProjectName); + static float GetVolumeMultiplier(); + static void SetProjectName(const char* ProjectName); + static void SetVolumeMultiplier(float Value); + static void RequestExit(bool Force); + } + + namespace ConsoleManager { + static bool IsRegisteredVariable(const char* Name); + static IConsoleVariable* FindVariable(const char* Name); + static IConsoleVariable* RegisterVariableBool(const char* Name, const char* Help, bool DefaultValue, bool ReadOnly); + static IConsoleVariable* RegisterVariableInt(const char* Name, const char* Help, int32 DefaultValue, bool ReadOnly); + static IConsoleVariable* RegisterVariableFloat(const char* Name, const char* Help, float DefaultValue, bool ReadOnly); + static IConsoleVariable* RegisterVariableString(const char* Name, const char* Help, const char* DefaultValue, bool ReadOnly); + static void RegisterCommand(const char* Name, const char* Help, ConsoleCommandDelegate Callback, bool ReadOnly); + static void UnregisterObject(const char* Name); + } + + namespace Engine { + static bool IsSplitScreen(); + static bool IsEditor(); + static bool IsForegroundWindow(); + static bool IsExitRequested(); + static NetMode GetNetMode(); + static uint32 GetFrameNumber(); + static void GetViewportSize(Vector2* Value); + static void GetScreenResolution(Vector2* Value); + static WindowMode GetWindowMode(); + static void GetVersion(char* Version); + static float GetMaxFPS(); + static void SetMaxFPS(float MaxFPS); + static void SetTitle(const char* Title); + static void AddActionMapping(const char* ActionName, const char* Key, bool Shift, bool Ctrl, bool Alt, bool Cmd); + static void AddAxisMapping(const char* AxisName, const char* Key, float Scale); + static void ForceGarbageCollection(bool FullPurge); + static void DelayGarbageCollection(); + } + + namespace HeadMountedDisplay { + static bool IsConnected(); + static bool GetEnabled(); + static bool GetLowPersistenceMode(); + static void GetDeviceName(char* Name); + static void SetEnable(bool Value); + static void SetLowPersistenceMode(bool Value); + } + + namespace World { + static void ForEachActor(AActor** Array, int32* Elements); + static int32 GetActorCount(); + static float GetDeltaSeconds(); + static float GetRealTimeSeconds(); + static float GetTimeSeconds(); + static void GetCurrentLevelName(char* LevelName); + static bool GetSimulatePhysics(); + static void GetWorldOrigin(Vector3* Value); + static AActor* GetActor(const char* Name, ActorType Type); + static AActor* GetActorByTag(const char* Tag, ActorType Type); + static AActor* GetActorByID(uint32 ID, ActorType Type); + static APlayerController* GetFirstPlayerController(); + static AGameModeBase* GetGameMode(); + static void SetOnActorBeginOverlapCallback(ActorOverlapDelegate Callback); + static void SetOnActorEndOverlapCallback(ActorOverlapDelegate Callback); + static void SetOnActorHitCallback(ActorHitDelegate Callback); + static void SetOnActorBeginCursorOverCallback(ActorCursorDelegate Callback); + static void SetOnActorEndCursorOverCallback(ActorCursorDelegate Callback); + static void SetOnActorClickedCallback(ActorKeyDelegate Callback); + static void SetOnActorReleasedCallback(ActorKeyDelegate Callback); + static void SetOnComponentBeginOverlapCallback(ComponentOverlapDelegate Callback); + static void SetOnComponentEndOverlapCallback(ComponentOverlapDelegate Callback); + static void SetOnComponentHitCallback(ComponentHitDelegate Callback); + static void SetOnComponentBeginCursorOverCallback(ComponentCursorDelegate Callback); + static void SetOnComponentEndCursorOverCallback(ComponentCursorDelegate Callback); + static void SetOnComponentClickedCallback(ComponentKeyDelegate Callback); + static void SetOnComponentReleasedCallback(ComponentKeyDelegate Callback); + static void SetSimulatePhysics(bool Value); + static void SetGravity(float Value); + static bool SetWorldOrigin(const Vector3* Value); + static void OpenLevel(const char* LevelName); + static bool LineTraceTestByChannel(const Vector3* Start, const Vector3* End, CollisionChannel Channel, bool TraceComplex, AActor* IgnoredActor, UPrimitiveComponent* IgnoredComponent); + static bool LineTraceTestByProfile(const Vector3* Start, const Vector3* End, const char* ProfileName, bool TraceComplex, AActor* IgnoredActor, UPrimitiveComponent* IgnoredComponent); + static bool LineTraceSingleByChannel(const Vector3* Start, const Vector3* End, CollisionChannel Channel, Hit* Hit, char* BoneName, bool TraceComplex, AActor* IgnoredActor, UPrimitiveComponent* IgnoredComponent); + static bool LineTraceSingleByProfile(const Vector3* Start, const Vector3* End, const char* ProfileName, Hit* Hit, char* BoneName, bool TraceComplex, AActor* IgnoredActor, UPrimitiveComponent* IgnoredComponent); + static bool SweepTestByChannel(const Vector3* Start, const Vector3* End, const Quaternion* Rotation, CollisionChannel Channel, const CollisionShape* Shape, bool TraceComplex, AActor* IgnoredActor, UPrimitiveComponent* IgnoredComponent); + static bool SweepTestByProfile(const Vector3* Start, const Vector3* End, const Quaternion* Rotation, const char* ProfileName, const CollisionShape* Shape, bool TraceComplex, AActor* IgnoredActor, UPrimitiveComponent* IgnoredComponent); + static bool SweepSingleByChannel(const Vector3* Start, const Vector3* End, const Quaternion* Rotation, CollisionChannel Channel, const CollisionShape* Shape, Hit* Hit, char* BoneName, bool TraceComplex, AActor* IgnoredActor, UPrimitiveComponent* IgnoredComponent); + static bool SweepSingleByProfile(const Vector3* Start, const Vector3* End, const Quaternion* Rotation, const char* ProfileName, const CollisionShape* Shape, Hit* Hit, char* BoneName, bool TraceComplex, AActor* IgnoredActor, UPrimitiveComponent* IgnoredComponent); + static bool OverlapAnyTestByChannel(const Vector3* Location, const Quaternion* Rotation, CollisionChannel Channel, const CollisionShape* Shape, AActor* IgnoredActor, UPrimitiveComponent* IgnoredComponent); + static bool OverlapAnyTestByProfile(const Vector3* Location, const Quaternion* Rotation, const char* ProfileName, const CollisionShape* Shape, AActor* IgnoredActor, UPrimitiveComponent* IgnoredComponent); + static bool OverlapBlockingTestByChannel(const Vector3* Location, const Quaternion* Rotation, CollisionChannel Channel, const CollisionShape* Shape, AActor* IgnoredActor, UPrimitiveComponent* IgnoredComponent); + static bool OverlapBlockingTestByProfile(const Vector3* Location, const Quaternion* Rotation, const char* ProfileName, const CollisionShape* Shape, AActor* IgnoredActor, UPrimitiveComponent* IgnoredComponent); + } + + // Instantiable + + namespace Asset { + static bool IsValid(FAssetData* Asset); + static void GetName(FAssetData* Asset, char* Name); + static void GetPath(FAssetData* Asset, char* Path); + } + + namespace AssetRegistry { + static IAssetRegistry* Get(); + static bool HasAssets(IAssetRegistry* AssetRegistry, const char* Path, bool Recursive); + static void ForEachAsset(IAssetRegistry* AssetRegistry, const char* Path, bool Recursive, bool IncludeOnlyOnDiskAssets, FAssetData** Array, int32* Elements); + } + + namespace Blueprint { + static bool IsValidActorClass(UBlueprint* Blueprint, ActorType Type); + static bool IsValidComponentClass(UBlueprint* Blueprint, ComponentType Type); + } + + namespace ConsoleObject { + static bool IsBool(IConsoleObject* ConsoleObject); + static bool IsInt(IConsoleObject* ConsoleObject); + static bool IsFloat(IConsoleObject* ConsoleObject); + static bool IsString(IConsoleObject* ConsoleObject); + } + + namespace ConsoleVariable { + static bool GetBool(IConsoleVariable* ConsoleVariable); + static int32 GetInt(IConsoleVariable* ConsoleVariable); + static float GetFloat(IConsoleVariable* ConsoleVariable); + static void GetString(IConsoleVariable* ConsoleVariable, char* Value); + static void SetBool(IConsoleVariable* ConsoleVariable, bool Value); + static void SetInt(IConsoleVariable* ConsoleVariable, int32 Value); + static void SetFloat(IConsoleVariable* ConsoleVariable, float Value); + static void SetString(IConsoleVariable* ConsoleVariable, const char* Value); + static void SetOnChangedCallback(IConsoleVariable* ConsoleVariable, ConsoleVariableDelegate Callback); + static void ClearOnChangedCallback(IConsoleVariable* ConsoleVariable); + } + + namespace Actor { + static bool IsPendingKill(AActor* Actor); + static bool IsRootComponentMovable(AActor* Actor); + static bool IsOverlappingActor(AActor* Actor, AActor* Other); + static void ForEachComponent(AActor* Actor, UActorComponent** Array, int32* Elements); + static void ForEachAttachedActor(AActor* Actor, AActor** Array, int32* Elements); + static void ForEachChildActor(AActor* Actor, AActor** Array, int32* Elements); + static void ForEachOverlappingActor(AActor* Actor, AActor** Array, int32* Elements); + static AActor* Spawn(const char* Name, ActorType Type, UObject* Blueprint); + static bool Destroy(AActor* Actor); + static void Rename(AActor* Actor, const char* Name); + static void Hide(AActor* Actor, bool Value); + static bool TeleportTo(AActor* Actor, const Vector3* DestinationLocation, const Quaternion* DestinationRotation, bool IsATest, bool NoCheck); + static UActorComponent* GetComponent(AActor* Actor, const char* Name, ComponentType Type); + static UActorComponent* GetComponentByTag(AActor* Actor, const char* Tag, ComponentType Type); + static UActorComponent* GetComponentByID(AActor* Actor, uint32 ID, ComponentType Type); + static USceneComponent* GetRootComponent(AActor* Actor, ComponentType Type); + static UInputComponent* GetInputComponent(AActor* Actor); + static float GetCreationTime(AActor* Actor); + static bool GetBlockInput(AActor* Actor); + static float GetDistanceTo(AActor* Actor, AActor* Other); + static float GetHorizontalDistanceTo(AActor* Actor, AActor* Other); + static void GetBounds(AActor* Actor, bool OnlyCollidingComponents, Vector3* Origin, Vector3* Extent); + static void GetEyesViewPoint(AActor* Actor, Vector3* Location, Quaternion* Rotation); + static bool SetRootComponent(AActor* Actor, USceneComponent* RootComponent); + static void SetInputComponent(AActor* Actor, UInputComponent* InputComponent); + static void SetBlockInput(AActor* Actor, bool Value); + static void SetLifeSpan(AActor* Actor, float LifeSpan); + static void SetEnableInput(AActor* Actor, APlayerController* PlayerController, bool Value); + static void SetEnableCollision(AActor* Actor, bool Value); + static void AddTag(AActor* Actor, const char* Tag); + static void RemoveTag(AActor* Actor, const char* Tag); + static bool HasTag(AActor* Actor, const char* Tag); + static void RegisterEvent(AActor* Actor, ActorEventType Type); + static void UnregisterEvent(AActor* Actor, ActorEventType Type); + } + + namespace GameModeBase { + static bool GetUseSeamlessTravel(AGameModeBase* GameModeBase); + static void SetUseSeamlessTravel(AGameModeBase* GameModeBase, bool Value); + static void SwapPlayerControllers(AGameModeBase* GameModeBase, APlayerController* PlayerController, APlayerController* NewPlayerController); + } + + namespace TriggerBase { } + + namespace TriggerBox { } + + namespace TriggerCapsule { } + + namespace TriggerSphere { } + + namespace Pawn { + static bool IsControlled(APawn* Pawn); + static bool IsPlayerControlled(APawn* Pawn); + static AutoPossessAI GetAutoPossessAI(APawn* Pawn); + static AutoReceiveInput GetAutoPossessPlayer(APawn* Pawn); + static bool GetUseControllerRotationYaw(APawn* Pawn); + static bool GetUseControllerRotationPitch(APawn* Pawn); + static bool GetUseControllerRotationRoll(APawn* Pawn); + static void GetGravityDirection(APawn* Pawn, Vector3* Value); + static AAIController* GetAIController(APawn* Pawn); + static APlayerController* GetPlayerController(APawn* Pawn); + static void SetAutoPossessAI(APawn* Pawn, AutoPossessAI Value); + static void SetAutoPossessPlayer(APawn* Pawn, AutoReceiveInput Value); + static void SetUseControllerRotationYaw(APawn* Pawn, bool Value); + static void SetUseControllerRotationPitch(APawn* Pawn, bool Value); + static void SetUseControllerRotationRoll(APawn* Pawn, bool Value); + static void AddControllerYawInput(APawn* Pawn, float Value); + static void AddControllerPitchInput(APawn* Pawn, float Value); + static void AddControllerRollInput(APawn* Pawn, float Value); + static void AddMovementInput(APawn* Pawn, const Vector3* WorldDirection, float ScaleValue, bool Force); + } + + namespace Character { + static bool IsCrouched(ACharacter* Character); + static bool CanCrouch(ACharacter* Character); + static bool CanJump(ACharacter* Character); + static void CheckJumpInput(ACharacter* Character, float DeltaTime); + static void ClearJumpInput(ACharacter* Character, float DeltaTime); + static void Launch(ACharacter* Character, const Vector3* Velocity, bool OverrideXY, bool OverrideZ); + static void Crouch(ACharacter* Character); + static void StopCrouching(ACharacter* Character); + static void Jump(ACharacter* Character); + static void StopJumping(ACharacter* Character); + static void SetOnLandedCallback(ACharacter* Character, CharacterLandedDelegate Callback); + } + + namespace Controller { + static bool IsLookInputIgnored(AController* Controller); + static bool IsMoveInputIgnored(AController* Controller); + static bool IsPlayerController(AController* Controller); + static APawn* GetPawn(AController* Controller); + static ACharacter* GetCharacter(AController* Controller); + static AActor* GetViewTarget(AController* Controller); + static void GetControlRotation(AController* Controller, Quaternion* Value); + static void GetDesiredRotation(AController* Controller, Quaternion* Value); + static bool LineOfSightTo(AController* Controller, AActor* Actor, const Vector3* ViewPoint, bool AlternateChecks); + static void SetControlRotation(AController* Controller, const Quaternion* Value); + static void SetInitialLocationAndRotation(AController* Controller, const Vector3* NewLocation, const Quaternion* NewRotation); + static void SetIgnoreLookInput(AController* Controller, bool Value); + static void SetIgnoreMoveInput(AController* Controller, bool Value); + static void ResetIgnoreLookInput(AController* Controller); + static void ResetIgnoreMoveInput(AController* Controller); + static void Possess(AController* Controller, APawn* Pawn); + static void Unpossess(AController* Controller); + } + + namespace AIController { + static void ClearFocus(AAIController* AIController, AIFocusPriority Priority); + static void GetFocalPoint(AAIController* AIController, Vector3* Value); + static void SetFocalPoint(AAIController* AIController, const Vector3* NewFocus, AIFocusPriority Priority); + static AActor* GetFocusActor(AAIController* AIController); + static bool GetAllowStrafe(AAIController* AIController); + static void SetAllowStrafe(AAIController* AIController, bool Value); + static void SetFocus(AAIController* AIController, AActor* NewFocus, AIFocusPriority Priority); + } + + namespace PlayerController { + static bool IsPaused(APlayerController* PlayerController); + static bool GetShowMouseCursor(APlayerController* PlayerController); + static bool GetEnableClickEvents(APlayerController* PlayerController); + static bool GetEnableMouseOverEvents(APlayerController* PlayerController); + static bool GetMousePosition(APlayerController* PlayerController, float* X, float* Y); + static UPlayer* GetPlayer(APlayerController* PlayerController); + static UPlayerInput* GetPlayerInput(APlayerController* PlayerController); + static bool GetHitResultAtScreenPosition(APlayerController* PlayerController, const Vector2* ScreenPosition, CollisionChannel TraceChannel, Hit* Hit, bool TraceComplex); + static bool GetHitResultUnderCursor(APlayerController* PlayerController, CollisionChannel TraceChannel, Hit* Hit, bool TraceComplex); + static void SetShowMouseCursor(APlayerController* PlayerController, bool Value); + static void SetEnableClickEvents(APlayerController* PlayerController, bool Value); + static void SetEnableMouseOverEvents(APlayerController* PlayerController, bool Value); + static void SetMousePosition(APlayerController* PlayerController, float X, float Y); + static void ConsoleCommand(APlayerController* PlayerController, const char* Command, bool WriteToLog); + static bool SetPause(APlayerController* PlayerController, bool Value); + static void SetViewTarget(APlayerController* PlayerController, AActor* NewViewTarget); + static void SetViewTargetWithBlend(APlayerController* PlayerController, AActor* NewViewTarget, float Time, float Exponent, BlendType Type, bool LockOutgoing); + static void AddYawInput(APlayerController* PlayerController, float Value); + static void AddPitchInput(APlayerController* PlayerController, float Value); + static void AddRollInput(APlayerController* PlayerController, float Value); + } + + namespace Volume { + static bool EncompassesPoint(AVolume* Volume, const Vector3* Point, float SphereRadius, float* OutDistanceToPoint); + } + + namespace TriggerVolume { } + + namespace PostProcessVolume { + static bool GetEnabled(APostProcessVolume* PostProcessVolume); + static float GetBlendRadius(APostProcessVolume* PostProcessVolume); + static float GetBlendWeight(APostProcessVolume* PostProcessVolume); + static bool GetUnbound(APostProcessVolume* PostProcessVolume); + static float GetPriority(APostProcessVolume* PostProcessVolume); + static void SetEnabled(APostProcessVolume* PostProcessVolume, bool Value); + static void SetBlendRadius(APostProcessVolume* PostProcessVolume, float Value); + static void SetBlendWeight(APostProcessVolume* PostProcessVolume, float Value); + static void SetUnbound(APostProcessVolume* PostProcessVolume, bool Value); + static void SetPriority(APostProcessVolume* PostProcessVolume, float Priority); + } + + namespace LevelScript { } + + namespace AmbientSound { } + + namespace Light { } + + namespace DirectionalLight { } + + namespace PointLight { } + + namespace RectLight { } + + namespace SpotLight { } + + namespace SoundBase { + static float GetDuration(USoundBase* SoundBase); + } + + namespace SoundWave { + static bool GetLoop(USoundWave* SoundWave); + static void SetLoop(USoundWave* SoundWave, bool Value); + } + + namespace AnimationAsset { + + } + + namespace AnimationSequenceBase { + + } + + namespace AnimationSequence { + + } + + namespace AnimationCompositeBase { + + } + + namespace AnimationMontage { + + } + + namespace AnimationInstance { + static UAnimMontage* GetCurrentActiveMontage(UAnimInstance* AnimationInstance); + static bool IsPlaying(UAnimInstance* AnimationInstance, UAnimMontage* Montage); + static float GetPlayRate(UAnimInstance* AnimationInstance, UAnimMontage* Montage); + static float GetPosition(UAnimInstance* AnimationInstance, UAnimMontage* Montage); + static float GetBlendTime(UAnimInstance* AnimationInstance, UAnimMontage* Montage); + static void GetCurrentSection(UAnimInstance* AnimationInstance, UAnimMontage* Montage, char* SectionName); + static void SetPlayRate(UAnimInstance* AnimationInstance, UAnimMontage* Montage, float Value); + static void SetPosition(UAnimInstance* AnimationInstance, UAnimMontage* Montage, float Position); + static void SetNextSection(UAnimInstance* AnimationInstance, UAnimMontage* Montage, const char* SectionToChange, const char* NextSection); + static float PlayMontage(UAnimInstance* AnimationInstance, UAnimMontage* Montage, float PlayRate, float TimeToStartMontageAt, bool StopAllMontages); + static void PauseMontage(UAnimInstance* AnimationInstance, UAnimMontage* Montage); + static void ResumeMontage(UAnimInstance* AnimationInstance, UAnimMontage* Montage); + static void StopMontage(UAnimInstance* AnimationInstance, UAnimMontage* Montage, float BlendOutTime); + static void JumpToSection(UAnimInstance* AnimationInstance, UAnimMontage* Montage, const char* SectionName); + static void JumpToSectionsEnd(UAnimInstance* AnimationInstance, UAnimMontage* Montage, const char* SectionName); + } + + namespace Player { + static APlayerController* GetPlayerController(UPlayer* Player); + } + + namespace PlayerInput { + static bool IsKeyPressed(UPlayerInput* PlayerInput, const char* Key); + static float GetTimeKeyPressed(UPlayerInput* PlayerInput, const char* Key); + static void GetMouseSensitivity(UPlayerInput* PlayerInput, Vector2* Value); + static void SetMouseSensitivity(UPlayerInput* PlayerInput, const Vector2* Value); + static void AddActionMapping(UPlayerInput* PlayerInput, const char* ActionName, const char* Key, bool Shift, bool Ctrl, bool Alt, bool Cmd); + static void AddAxisMapping(UPlayerInput* PlayerInput, const char* AxisName, const char* Key, float Scale); + static void RemoveActionMapping(UPlayerInput* PlayerInput, const char* ActionName, const char* Key); + static void RemoveAxisMapping(UPlayerInput* PlayerInput, const char* AxisName, const char* Key); + } + + namespace Font { + static void GetStringSize(UFont* Font, const char* Text, int32* Height, int32* Width); + } + + namespace StreamableRenderAsset { + + } + + namespace StaticMesh { + + } + + namespace SkeletalMesh { + + } + + namespace Texture { + + } + + namespace Texture2D { + static UTexture2D* CreateFromFile(const char* FilePath); + static UTexture2D* CreateFromBuffer(const uint8* Buffer, int32 Length); + static bool HasAlphaChannel(UTexture2D* Texture2D); + static void GetSize(UTexture2D* Texture2D, Vector2* Value); + static PixelFormat GetPixelFormat(UTexture2D* Texture2D); + } + + namespace ActorComponent { + static bool IsOwnerSelected(UActorComponent* ActorComponent); + static AActor* GetOwner(UActorComponent* ActorComponent, ActorType Type); + static void Destroy(UActorComponent* ActorComponent, bool PromoteChild); + static void AddTag(UActorComponent* ActorComponent, const char* Tag); + static void RemoveTag(UActorComponent* ActorComponent, const char* Tag); + static bool HasTag(UActorComponent* ActorComponent, const char* Tag); + } + + namespace InputComponent { + static bool HasBindings(UInputComponent* InputComponent); + static int32 GetActionBindingsNumber(UInputComponent* InputComponent); + static void ClearActionBindings(UInputComponent* InputComponent); + static void BindAction(UInputComponent* InputComponent, const char* ActionName, InputEvent KeyEvent, bool ExecutedWhenPaused, InputDelegate Callback); + static void BindAxis(UInputComponent* InputComponent, const char* AxisName, bool ExecutedWhenPaused, InputAxisDelegate Callback); + static void RemoveActionBinding(UInputComponent* InputComponent, const char* ActionName, InputEvent KeyEvent); + static bool GetBlockInput(UInputComponent* InputComponent); + static void SetBlockInput(UInputComponent* InputComponent, bool Value); + static int32 GetPriority(UInputComponent* InputComponent); + static void SetPriority(UInputComponent* InputComponent, int32 Value); + } + + namespace SceneComponent { + static bool IsAttachedToComponent(USceneComponent* SceneComponent, USceneComponent* Component); + static bool IsAttachedToActor(USceneComponent* SceneComponent, AActor* Actor); + static bool IsVisible(USceneComponent* SceneComponent); + static bool IsSocketExists(USceneComponent* SceneComponent, const char* SocketName); + static bool HasAnySockets(USceneComponent* SceneComponent); + static bool CanAttachAsChild(USceneComponent* SceneComponent, USceneComponent* ChildComponent, const char* SocketName); + static void ForEachAttachedChild(USceneComponent* SceneComponent, USceneComponent** Array, int32* Elements); + static USceneComponent* Create(AActor* Actor, ComponentType Type, const char* Name, bool SetAsRoot, UObject* Blueprint); + static bool AttachToComponent(USceneComponent* SceneComponent, USceneComponent* Parent, AttachmentTransformRule AttachmentRule, const char* SocketName); + static void DetachFromComponent(USceneComponent* SceneComponent, DetachmentTransformRule DetachmentRule); + static void Activate(USceneComponent* SceneComponent); + static void Deactivate(USceneComponent* SceneComponent); + static void UpdateToWorld(USceneComponent* SceneComponent, TeleportType Type, UpdateTransformFlags Flags); + static void AddLocalOffset(USceneComponent* SceneComponent, const Vector3* DeltaLocation); + static void AddLocalRotation(USceneComponent* SceneComponent, const Quaternion* DeltaRotation); + static void AddRelativeLocation(USceneComponent* SceneComponent, const Vector3* DeltaLocation); + static void AddRelativeRotation(USceneComponent* SceneComponent, const Quaternion* DeltaRotation); + static void AddLocalTransform(USceneComponent* SceneComponent, const Transform* DeltaTransform); + static void AddWorldOffset(USceneComponent* SceneComponent, const Vector3* DeltaLocation); + static void AddWorldRotation(USceneComponent* SceneComponent, const Quaternion* DeltaRotation); + static void AddWorldTransform(USceneComponent* SceneComponent, const Transform* DeltaTransform); + static void GetAttachedSocketName(USceneComponent* SceneComponent, char* SocketName); + static void GetBounds(USceneComponent* SceneComponent, const Transform* LocalToWorld, Bounds* Value); + static void GetSocketLocation(USceneComponent* SceneComponent, const char* SocketName, Vector3* Value); + static void GetSocketRotation(USceneComponent* SceneComponent, const char* SocketName, Quaternion* Value); + static void GetComponentVelocity(USceneComponent* SceneComponent, Vector3* Value); + static void GetComponentLocation(USceneComponent* SceneComponent, Vector3* Value); + static void GetComponentRotation(USceneComponent* SceneComponent, Quaternion* Value); + static void GetComponentScale(USceneComponent* SceneComponent, Vector3* Value); + static void GetComponentTransform(USceneComponent* SceneComponent, Transform* Value); + static void GetForwardVector(USceneComponent* SceneComponent, Vector3* Value); + static void GetRightVector(USceneComponent* SceneComponent, Vector3* Value); + static void GetUpVector(USceneComponent* SceneComponent, Vector3* Value); + static void SetMobility(USceneComponent* SceneComponent, ComponentMobility Mobility); + static void SetVisibility(USceneComponent* SceneComponent, bool NewVisibility, bool PropagateToChildren); + static void SetRelativeLocation(USceneComponent* SceneComponent, const Vector3* Location); + static void SetRelativeRotation(USceneComponent* SceneComponent, const Quaternion* Rotation); + static void SetRelativeTransform(USceneComponent* SceneComponent, const Transform* Transform); + static void SetWorldLocation(USceneComponent* SceneComponent, const Vector3* Location); + static void SetWorldRotation(USceneComponent* SceneComponent, const Quaternion* Rotation); + static void SetWorldScale(USceneComponent* SceneComponent, const Vector3* Scale); + static void SetWorldTransform(USceneComponent* SceneComponent, const Transform* Transform); + } + + namespace AudioComponent { + static bool IsPlaying(UAudioComponent* AudioComponent); + static bool GetPaused(UAudioComponent* AudioComponent); + static void SetSound(UAudioComponent* AudioComponent, USoundBase* Sound); + static void SetPaused(UAudioComponent* AudioComponent, bool Value); + static void Play(UAudioComponent* AudioComponent); + static void Stop(UAudioComponent* AudioComponent); + static void FadeIn(UAudioComponent* AudioComponent, float Duration, float VolumeLevel, float StartTime, AudioFadeCurve FadeCurve); + static void FadeOut(UAudioComponent* AudioComponent, float Duration, float VolumeLevel, AudioFadeCurve FadeCurve); + } + + namespace CameraComponent { + static bool GetConstrainAspectRatio(UCameraComponent* CameraComponent); + static float GetAspectRatio(UCameraComponent* CameraComponent); + static float GetFieldOfView(UCameraComponent* CameraComponent); + static float GetOrthoFarClipPlane(UCameraComponent* CameraComponent); + static float GetOrthoNearClipPlane(UCameraComponent* CameraComponent); + static float GetOrthoWidth(UCameraComponent* CameraComponent); + static bool GetLockToHeadMountedDisplay(UCameraComponent* CameraComponent); + static void SetProjectionMode(UCameraComponent* CameraComponent, CameraProjectionMode Mode); + static void SetConstrainAspectRatio(UCameraComponent* CameraComponent, bool Value); + static void SetAspectRatio(UCameraComponent* CameraComponent, float Value); + static void SetFieldOfView(UCameraComponent* CameraComponent, float Value); + static void SetOrthoFarClipPlane(UCameraComponent* CameraComponent, float Value); + static void SetOrthoNearClipPlane(UCameraComponent* CameraComponent, float Value); + static void SetOrthoWidth(UCameraComponent* CameraComponent, float Value); + static void SetLockToHeadMountedDisplay(UCameraComponent* CameraComponent, bool Value); + } + + namespace ChildActorComponent { + static AActor* GetChildActor(UChildActorComponent* ChildActorComponent, ActorType Type); + static AActor* SetChildActor(UChildActorComponent* ChildActorComponent, ActorType Type); + } + + namespace SpringArmComponent { + static bool IsCollisionFixApplied(USpringArmComponent* SpringArmComponent); + static bool GetDrawDebugLagMarkers(USpringArmComponent* SpringArmComponent); + static bool GetCollisionTest(USpringArmComponent* SpringArmComponent); + static bool GetCameraPositionLag(USpringArmComponent* SpringArmComponent); + static bool GetCameraRotationLag(USpringArmComponent* SpringArmComponent); + static bool GetCameraLagSubstepping(USpringArmComponent* SpringArmComponent); + static bool GetInheritPitch(USpringArmComponent* SpringArmComponent); + static bool GetInheritRoll(USpringArmComponent* SpringArmComponent); + static bool GetInheritYaw(USpringArmComponent* SpringArmComponent); + static float GetCameraLagMaxDistance(USpringArmComponent* SpringArmComponent); + static float GetCameraLagMaxTimeStep(USpringArmComponent* SpringArmComponent); + static float GetCameraPositionLagSpeed(USpringArmComponent* SpringArmComponent); + static float GetCameraRotationLagSpeed(USpringArmComponent* SpringArmComponent); + static CollisionChannel GetProbeChannel(USpringArmComponent* SpringArmComponent); + static float GetProbeSize(USpringArmComponent* SpringArmComponent); + static void GetSocketOffset(USpringArmComponent* SpringArmComponent, Vector3* Value); + static float GetTargetArmLength(USpringArmComponent* SpringArmComponent); + static void GetTargetOffset(USpringArmComponent* SpringArmComponent, Vector3* Value); + static void GetUnfixedCameraPosition(USpringArmComponent* SpringArmComponent, Vector3* Value); + static void GetDesiredRotation(USpringArmComponent* SpringArmComponent, Quaternion* Value); + static void GetTargetRotation(USpringArmComponent* SpringArmComponent, Quaternion* Value); + static bool GetUsePawnControlRotation(USpringArmComponent* SpringArmComponent); + static void SetDrawDebugLagMarkers(USpringArmComponent* SpringArmComponent, bool Value); + static void SetCollisionTest(USpringArmComponent* SpringArmComponent, bool Value); + static void SetCameraPositionLag(USpringArmComponent* SpringArmComponent, bool Value); + static void SetCameraRotationLag(USpringArmComponent* SpringArmComponent, bool Value); + static void SetCameraLagSubstepping(USpringArmComponent* SpringArmComponent, bool Value); + static void SetInheritPitch(USpringArmComponent* SpringArmComponent, bool Value); + static void SetInheritRoll(USpringArmComponent* SpringArmComponent, bool Value); + static void SetInheritYaw(USpringArmComponent* SpringArmComponent, bool Value); + static void SetCameraLagMaxDistance(USpringArmComponent* SpringArmComponent, float Value); + static void SetCameraLagMaxTimeStep(USpringArmComponent* SpringArmComponent, float Value); + static void SetCameraPositionLagSpeed(USpringArmComponent* SpringArmComponent, float Value); + static void SetCameraRotationLagSpeed(USpringArmComponent* SpringArmComponent, float Value); + static void SetProbeChannel(USpringArmComponent* SpringArmComponent, CollisionChannel Value); + static void SetProbeSize(USpringArmComponent* SpringArmComponent, float Value); + static void SetSocketOffset(USpringArmComponent* SpringArmComponent, const Vector3* Value); + static void SetTargetArmLength(USpringArmComponent* SpringArmComponent, float Value); + static void SetTargetOffset(USpringArmComponent* SpringArmComponent, const Vector3* Value); + static void SetUsePawnControlRotation(USpringArmComponent* SpringArmComponent, bool value); + } + + namespace PostProcessComponent { + static bool GetEnabled(UPostProcessComponent* PostProcessComponent); + static float GetBlendRadius(UPostProcessComponent* PostProcessComponent); + static float GetBlendWeight(UPostProcessComponent* PostProcessComponent); + static bool GetUnbound(UPostProcessComponent* PostProcessComponent); + static float GetPriority(UPostProcessComponent* PostProcessComponent); + static void SetEnabled(UPostProcessComponent* PostProcessComponent, bool Value); + static void SetBlendRadius(UPostProcessComponent* PostProcessComponent, float Value); + static void SetBlendWeight(UPostProcessComponent* PostProcessComponent, float Value); + static void SetUnbound(UPostProcessComponent* PostProcessComponent, bool Value); + static void SetPriority(UPostProcessComponent* PostProcessComponent, float Priority); + } + + namespace PrimitiveComponent { + static bool IsGravityEnabled(UPrimitiveComponent* PrimitiveComponent); + static bool IsOverlappingComponent(UPrimitiveComponent* PrimitiveComponent, UPrimitiveComponent* Other); + static void ForEachOverlappingComponent(UPrimitiveComponent* PrimitiveComponent, UPrimitiveComponent** Array, int32* Elements); + static void AddAngularImpulseInDegrees(UPrimitiveComponent* PrimitiveComponent, const Vector3* Impulse, const char* BoneName, bool VelocityChange); + static void AddAngularImpulseInRadians(UPrimitiveComponent* PrimitiveComponent, const Vector3* Impulse, const char* BoneName, bool VelocityChange); + static void AddForce(UPrimitiveComponent* PrimitiveComponent, const Vector3* Force, const char* BoneName, bool AccelerationChange); + static void AddForceAtLocation(UPrimitiveComponent* PrimitiveComponent, const Vector3* Force, const Vector3* Location, const char* BoneName, bool LocalSpace); + static void AddImpulse(UPrimitiveComponent* PrimitiveComponent, const Vector3* Impulse, const char* BoneName, bool VelocityChange); + static void AddImpulseAtLocation(UPrimitiveComponent* PrimitiveComponent, const Vector3* Impulse, const Vector3* Location, const char* BoneName); + static void AddRadialForce(UPrimitiveComponent* PrimitiveComponent, const Vector3* Origin, float Radius, float Strength, bool LinearFalloff, bool AccelerationChange); + static void AddRadialImpulse(UPrimitiveComponent* PrimitiveComponent, const Vector3* Origin, float Radius, float Strength, bool LinearFalloff, bool AccelerationChange); + static void AddTorqueInDegrees(UPrimitiveComponent* PrimitiveComponent, const Vector3* Torque, const char* BoneName, bool AccelerationChange); + static void AddTorqueInRadians(UPrimitiveComponent* PrimitiveComponent, const Vector3* Torque, const char* BoneName, bool AccelerationChange); + static float GetMass(UPrimitiveComponent* PrimitiveComponent); + static void GetPhysicsLinearVelocity(UPrimitiveComponent* PrimitiveComponent, Vector3* Value, const char* BoneName); + static void GetPhysicsLinearVelocityAtPoint(UPrimitiveComponent* PrimitiveComponent, Vector3* Value, const Vector3* Point, const char* BoneName); + static void GetPhysicsAngularVelocityInDegrees(UPrimitiveComponent* PrimitiveComponent, Vector3* Value, const char* BoneName); + static void GetPhysicsAngularVelocityInRadians(UPrimitiveComponent* PrimitiveComponent, Vector3* Value, const char* BoneName); + static bool GetCastShadow(UPrimitiveComponent* PrimitiveComponent); + static bool GetOnlyOwnerSee(UPrimitiveComponent* PrimitiveComponent); + static bool GetOwnerNoSee(UPrimitiveComponent* PrimitiveComponent); + static bool GetIgnoreRadialForce(UPrimitiveComponent* PrimitiveComponent); + static bool GetIgnoreRadialImpulse(UPrimitiveComponent* PrimitiveComponent); + static UMaterialInstanceDynamic* GetMaterial(UPrimitiveComponent* PrimitiveComponent, int32 ElementIndex); + static int32 GetMaterialsNumber(UPrimitiveComponent* PrimitiveComponent); + static float GetDistanceToCollision(UPrimitiveComponent* PrimitiveComponent, const Vector3* Point, Vector3* ClosestPointOnCollision); + static bool GetSquaredDistanceToCollision(UPrimitiveComponent* PrimitiveComponent, const Vector3* Point, float* SquaredDistance, Vector3* ClosestPointOnCollision); + static float GetAngularDamping(UPrimitiveComponent* PrimitiveComponent); + static float GetLinearDamping(UPrimitiveComponent* PrimitiveComponent); + static void SetGenerateOverlapEvents(UPrimitiveComponent* PrimitiveComponent, bool Value); + static void SetGenerateHitEvents(UPrimitiveComponent* PrimitiveComponent, bool Value); + static void SetMass(UPrimitiveComponent* PrimitiveComponent, float Mass, const char* BoneName); + static void SetCenterOfMass(UPrimitiveComponent* PrimitiveComponent, const Vector3* Offset, const char* BoneName); + static void SetPhysicsLinearVelocity(UPrimitiveComponent* PrimitiveComponent, const Vector3* Velocity, bool AddToCurrent, const char* BoneName); + static void SetPhysicsAngularVelocityInDegrees(UPrimitiveComponent* PrimitiveComponent, const Vector3* AngularVelocity, bool AddToCurrent, const char* BoneName); + static void SetPhysicsAngularVelocityInRadians(UPrimitiveComponent* PrimitiveComponent, const Vector3* AngularVelocity, bool AddToCurrent, const char* BoneName); + static void SetPhysicsMaxAngularVelocityInDegrees(UPrimitiveComponent* PrimitiveComponent, float MaxAngularVelocity, bool AddToCurrent, const char* BoneName); + static void SetPhysicsMaxAngularVelocityInRadians(UPrimitiveComponent* PrimitiveComponent, float MaxAngularVelocity, bool AddToCurrent, const char* BoneName); + static void SetCastShadow(UPrimitiveComponent* PrimitiveComponent, bool Value); + static void SetOnlyOwnerSee(UPrimitiveComponent* PrimitiveComponent, bool Value); + static void SetOwnerNoSee(UPrimitiveComponent* PrimitiveComponent, bool Value); + static void SetIgnoreRadialForce(UPrimitiveComponent* PrimitiveComponent, bool Value); + static void SetIgnoreRadialImpulse(UPrimitiveComponent* PrimitiveComponent, bool Value); + static void SetMaterial(UPrimitiveComponent* PrimitiveComponent, int32 ElementIndex, UMaterialInterface* Material); + static void SetSimulatePhysics(UPrimitiveComponent* PrimitiveComponent, bool Value); + static void SetAngularDamping(UPrimitiveComponent* PrimitiveComponent, float Value); + static void SetLinearDamping(UPrimitiveComponent* PrimitiveComponent, float Value); + static void SetEnableGravity(UPrimitiveComponent* PrimitiveComponent, bool Value); + static void SetCollisionMode(UPrimitiveComponent* PrimitiveComponent, CollisionMode Mode); + static void SetCollisionChannel(UPrimitiveComponent* PrimitiveComponent, CollisionChannel Channel); + static void SetCollisionProfileName(UPrimitiveComponent* PrimitiveComponent, const char* ProfileName, bool UpdateOverlaps); + static void SetCollisionResponseToChannel(UPrimitiveComponent* PrimitiveComponent, CollisionChannel Channel, CollisionResponse Response); + static void SetCollisionResponseToAllChannels(UPrimitiveComponent* PrimitiveComponent, CollisionResponse Response); + static void SetIgnoreActorWhenMoving(UPrimitiveComponent* PrimitiveComponent, AActor* Actor, bool Value); + static void SetIgnoreComponentWhenMoving(UPrimitiveComponent* PrimitiveComponent, UPrimitiveComponent* Component, bool Value); + static void ClearMoveIgnoreActors(UPrimitiveComponent* PrimitiveComponent); + static void ClearMoveIgnoreComponents(UPrimitiveComponent* PrimitiveComponent); + static UMaterialInstanceDynamic* CreateAndSetMaterialInstanceDynamic(UPrimitiveComponent* PrimitiveComponent, int32 ElementIndex); + static void RegisterEvent(UPrimitiveComponent* PrimitiveComponent, ComponentEventType Type); + static void UnregisterEvent(UPrimitiveComponent* PrimitiveComponent, ComponentEventType Type); + } + + namespace ShapeComponent { + static bool GetDynamicObstacle(UShapeComponent* ShapeComponent); + static int32 GetShapeColor(UShapeComponent* ShapeComponent); + static void SetDynamicObstacle(UShapeComponent* ShapeComponent, bool Value); + static void SetShapeColor(UShapeComponent* ShapeComponent, Color Value); + } + + namespace BoxComponent { + static void GetScaledBoxExtent(UBoxComponent* BoxComponent, Vector3* Value); + static void GetUnscaledBoxExtent(UBoxComponent* BoxComponent, Vector3* Value); + static void SetBoxExtent(UBoxComponent* BoxComponent, const Vector3* Extent, bool UpdateOverlaps); + static void InitBoxExtent(UBoxComponent* BoxComponent, const Vector3* Extent); + } + + namespace SphereComponent { + static float GetScaledSphereRadius(USphereComponent* SphereComponent); + static float GetUnscaledSphereRadius(USphereComponent* SphereComponent); + static float GetShapeScale(USphereComponent* SphereComponent); + static void SetSphereRadius(USphereComponent* SphereComponent, float SphereRadius, bool UpdateOverlaps); + static void InitSphereRadius(USphereComponent* SphereComponent, float SphereRadius); + } + + namespace CapsuleComponent { + static float GetScaledCapsuleRadius(UCapsuleComponent* CapsuleComponent); + static float GetUnscaledCapsuleRadius(UCapsuleComponent* CapsuleComponent); + static float GetShapeScale(UCapsuleComponent* CapsuleComponent); + static void GetScaledCapsuleSize(UCapsuleComponent* CapsuleComponent, float* Radius, float* HalfHeight); + static void GetUnscaledCapsuleSize(UCapsuleComponent* CapsuleComponent, float* Radius, float* HalfHeight); + static void SetCapsuleRadius(UCapsuleComponent* CapsuleComponent, float Radius, bool UpdateOverlaps); + static void SetCapsuleSize(UCapsuleComponent* CapsuleComponent, float Radius, float HalfHeight, bool UpdateOverlaps); + static void InitCapsuleSize(UCapsuleComponent* CapsuleComponent, float Radius, float HalfHeight); + } + + namespace MeshComponent { + static bool IsValidMaterialSlotName(UMeshComponent* MeshComponent, const char* MaterialSlotName); + static int32 GetMaterialIndex(UMeshComponent* MeshComponent, const char* MaterialSlotName); + } + + namespace TextRenderComponent { + static void SetFont(UTextRenderComponent* TextRenderComponent, UFont* Value); + static void SetText(UTextRenderComponent* TextRenderComponent, const char* Value); + static void SetTextMaterial(UTextRenderComponent* TextRenderComponent, UMaterialInterface* Material); + static void SetTextRenderColor(UTextRenderComponent* TextRenderComponent, Color Value); + static void SetHorizontalAlignment(UTextRenderComponent* TextRenderComponent, HorizontalTextAligment Value); + static void SetHorizontalSpacingAdjustment(UTextRenderComponent* TextRenderComponent, float Value); + static void SetVerticalAlignment(UTextRenderComponent* TextRenderComponent, VerticalTextAligment Value); + static void SetVerticalSpacingAdjustment(UTextRenderComponent* TextRenderComponent, float Value); + static void SetScale(UTextRenderComponent* TextRenderComponent, const Vector2* Value); + static void SetWorldSize(UTextRenderComponent* TextRenderComponent, float Value); + } + + namespace LightComponentBase { + static float GetIntensity(ULightComponentBase* LightComponentBase); + static bool GetCastShadows(ULightComponentBase* LightComponentBase); + static void SetCastShadows(ULightComponentBase* LightComponentBase, bool Value); + } + + namespace LightComponent { + static void SetIntensity(ULightComponent* LightComponent, float Value); + static void SetLightColor(ULightComponent* LightComponent, const LinearColor* Value); + } + + namespace DirectionalLightComponent { + + } + + namespace MotionControllerComponent { + static bool IsTracked(UMotionControllerComponent* MotionControllerComponent); + static bool GetDisplayDeviceModel(UMotionControllerComponent* MotionControllerComponent); + static bool GetDisableLowLatencyUpdate(UMotionControllerComponent* MotionControllerComponent); + static ControllerHand GetTrackingSource(UMotionControllerComponent* MotionControllerComponent); + static void SetDisplayDeviceModel(UMotionControllerComponent* MotionControllerComponent, bool Value); + static void SetDisableLowLatencyUpdate(UMotionControllerComponent* MotionControllerComponent, bool Value); + static void SetTrackingSource(UMotionControllerComponent* MotionControllerComponent, ControllerHand Value); + static void SetTrackingMotionSource(UMotionControllerComponent* MotionControllerComponent, const char* Source); + static void SetAssociatedPlayerIndex(UMotionControllerComponent* MotionControllerComponent, int32 PlayerIndex); + static void SetCustomDisplayMesh(UMotionControllerComponent* MotionControllerComponent, UStaticMesh* StaticMesh); + static void SetDisplayModelSource(UMotionControllerComponent* MotionControllerComponent, const char* Source); + } + + namespace StaticMeshComponent { + static void GetLocalBounds(UStaticMeshComponent* StaticMeshComponent, Vector3* Min, Vector3* Max); + static UStaticMesh* GetStaticMesh(UStaticMeshComponent* StaticMeshComponent); + static bool SetStaticMesh(UStaticMeshComponent* StaticMeshComponent, UStaticMesh* StaticMesh); + } + + namespace InstancedStaticMeshComponent { + static int32 GetInstanceCount(UInstancedStaticMeshComponent* InstancedStaticMeshComponent); + static bool GetInstanceTransform(UInstancedStaticMeshComponent* InstancedStaticMeshComponent, int32 InstanceIndex, Transform* Value, bool WorldSpace); + static void AddInstance(UInstancedStaticMeshComponent* InstancedStaticMeshComponent, const Transform* InstanceTransform); + static void AddInstances(UInstancedStaticMeshComponent* InstancedStaticMeshComponent, int32 EndInstanceIndex, const Transform InstanceTransforms[]); + static bool UpdateInstanceTransform(UInstancedStaticMeshComponent* InstancedStaticMeshComponent, int32 InstanceIndex, const Transform* InstanceTransform, bool WorldSpace, bool MarkRenderStateDirty, bool Teleport); + static bool BatchUpdateInstanceTransforms(UInstancedStaticMeshComponent* InstancedStaticMeshComponent, int32 StartInstanceIndex, int32 EndInstanceIndex, const Transform InstanceTransforms[], bool WorldSpace, bool MarkRenderStateDirty, bool Teleport); + static bool RemoveInstance(UInstancedStaticMeshComponent* InstancedStaticMeshComponent, int32 InstanceIndex); + static void ClearInstances(UInstancedStaticMeshComponent* InstancedStaticMeshComponent); + } + + namespace HierarchicalInstancedStaticMeshComponent { + static bool GetDisableCollision(UHierarchicalInstancedStaticMeshComponent* HierarchicalInstancedStaticMeshComponent); + static void SetDisableCollision(UHierarchicalInstancedStaticMeshComponent* HierarchicalInstancedStaticMeshComponent, bool Value); + } + + namespace SkinnedMeshComponent { + static int32 GetBonesNumber(USkinnedMeshComponent* SkinnedMeshComponent); + static int32 GetBoneIndex(USkinnedMeshComponent* SkinnedMeshComponent, const char* BoneName); + static void GetBoneName(USkinnedMeshComponent* SkinnedMeshComponent, int32 BoneIndex, char* BoneName); + static void GetBoneTransform(USkinnedMeshComponent* SkinnedMeshComponent, int32 BoneIndex, Transform* Value); + static void SetSkeletalMesh(USkinnedMeshComponent* SkinnedMeshComponent, USkeletalMesh* SkeletalMesh, bool ReinitializePose); + } + + namespace SkeletalMeshComponent { + static bool IsPlaying(USkeletalMeshComponent* SkeletalMeshComponent); + static UAnimInstance* GetAnimationInstance(USkeletalMeshComponent* SkeletalMeshComponent); + static void SetAnimation(USkeletalMeshComponent* SkeletalMeshComponent, UAnimationAsset* Asset); + static void SetAnimationMode(USkeletalMeshComponent* SkeletalMeshComponent, AnimationMode Mode); + static void SetAnimationBlueprint(USkeletalMeshComponent* SkeletalMeshComponent, UObject* Blueprint); + static void Play(USkeletalMeshComponent* SkeletalMeshComponent, bool Loop); + static void PlayAnimation(USkeletalMeshComponent* SkeletalMeshComponent, UAnimationAsset* Asset, bool Loop); + static void Stop(USkeletalMeshComponent* SkeletalMeshComponent); + } + + namespace SplineComponent { + static bool IsClosedLoop(USplineComponent* SplineComponent); + static float GetDuration(USplineComponent* SplineComponent); + static SplinePointType GetSplinePointType(USplineComponent* SplineComponent, int32 PointIndex); + static int32 GetSplinePointsNumber(USplineComponent* SplineComponent); + static int32 GetSplineSegmentsNumber(USplineComponent* SplineComponent); + static void GetTangentAtDistanceAlongSpline(USplineComponent* SplineComponent, float Distance, SplineCoordinateSpace CoordinateSpace, Vector3* Value); + static void GetTangentAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, SplineCoordinateSpace CoordinateSpace, Vector3* Value); + static void GetTangentAtTime(USplineComponent* SplineComponent, float Time, SplineCoordinateSpace CoordinateSpace, bool UseConstantVelocity, Vector3* Value); + static void GetTransformAtDistanceAlongSpline(USplineComponent* SplineComponent, float Distance, SplineCoordinateSpace CoordinateSpace, Transform* Value); + static void GetTransformAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, SplineCoordinateSpace CoordinateSpace, bool UseScale, Transform* Value); + static void GetArriveTangentAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, SplineCoordinateSpace CoordinateSpace, Vector3* Value); + static void GetDefaultUpVector(USplineComponent* SplineComponent, SplineCoordinateSpace CoordinateSpace, Vector3* Value); + static void GetDirectionAtDistanceAlongSpline(USplineComponent* SplineComponent, float Distance, SplineCoordinateSpace CoordinateSpace, Vector3* Value); + static void GetDirectionAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, SplineCoordinateSpace CoordinateSpace, Vector3* Value); + static void GetDirectionAtTime(USplineComponent* SplineComponent, float Time, SplineCoordinateSpace CoordinateSpace, bool UseConstantVelocity, Vector3* Value); + static float GetDistanceAlongSplineAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex); + static void GetLeaveTangentAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, SplineCoordinateSpace CoordinateSpace, Vector3* Value); + static void GetLocationAndTangentAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, SplineCoordinateSpace CoordinateSpace, Vector3* Location, Vector3* Tangent); + static void GetLocationAtDistanceAlongSpline(USplineComponent* SplineComponent, float Distance, SplineCoordinateSpace CoordinateSpace, Vector3* Value); + static void GetLocationAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, SplineCoordinateSpace CoordinateSpace, Vector3* Value); + static void GetLocationAtTime(USplineComponent* SplineComponent, float Time, SplineCoordinateSpace CoordinateSpace, Vector3* Value); + static void GetRightVectorAtDistanceAlongSpline(USplineComponent* SplineComponent, float Distance, SplineCoordinateSpace CoordinateSpace, Vector3* Value); + static void GetRightVectorAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, SplineCoordinateSpace CoordinateSpace, Vector3* Value); + static void GetRightVectorAtTime(USplineComponent* SplineComponent, float Time, SplineCoordinateSpace CoordinateSpace, bool UseConstantVelocity, Vector3* Value); + static float GetRollAtDistanceAlongSpline(USplineComponent* SplineComponent, float Distance, SplineCoordinateSpace CoordinateSpace); + static float GetRollAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, SplineCoordinateSpace CoordinateSpace); + static float GetRollAtTime(USplineComponent* SplineComponent, float Time, SplineCoordinateSpace CoordinateSpace, bool UseConstantVelocity); + static void GetRotationAtDistanceAlongSpline(USplineComponent* SplineComponent, float Distance, SplineCoordinateSpace CoordinateSpace, Quaternion* Value); + static void GetRotationAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, SplineCoordinateSpace CoordinateSpace, Quaternion* Value); + static void GetRotationAtTime(USplineComponent* SplineComponent, float Time, SplineCoordinateSpace CoordinateSpace, bool UseConstantVelocity, Quaternion* Value); + static void GetScaleAtDistanceAlongSpline(USplineComponent* SplineComponent, float Distance, Vector3* Value); + static void GetScaleAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, Vector3* Value); + static void GetScaleAtTime(USplineComponent* SplineComponent, float Time, bool UseConstantVelocity, Vector3* Value); + static float GetSplineLength(USplineComponent* SplineComponent); + static void GetTransformAtTime(USplineComponent* SplineComponent, float Time, SplineCoordinateSpace CoordinateSpace, bool UseConstantVelocity, bool UseScale, Transform* Value); + static void GetUpVectorAtDistanceAlongSpline(USplineComponent* SplineComponent, float Distance, SplineCoordinateSpace CoordinateSpace, Vector3* Value); + static void GetUpVectorAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, SplineCoordinateSpace CoordinateSpace, Vector3* Value); + static void GetUpVectorAtTime(USplineComponent* SplineComponent, float Time, SplineCoordinateSpace CoordinateSpace, bool UseConstantVelocity, Vector3* Value); + static void SetDuration(USplineComponent* SplineComponent, float Value); + static void SetSplinePointType(USplineComponent* SplineComponent, int32 PointIndex, SplinePointType Type, bool UpdateSpline); + static void SetClosedLoop(USplineComponent* SplineComponent, bool Value, bool UpdateSpline); + static void SetDefaultUpVector(USplineComponent* SplineComponent, const Vector3* Value, SplineCoordinateSpace CoordinateSpace); + static void SetLocationAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, const Vector3* Value, SplineCoordinateSpace CoordinateSpace, bool UpdateSpline); + static void SetTangentAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, const Vector3* Tangent, SplineCoordinateSpace CoordinateSpace, bool UpdateSpline); + static void SetTangentsAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, const Vector3* ArriveTangent, const Vector3* LeaveTangent, SplineCoordinateSpace CoordinateSpace, bool UpdateSpline); + static void SetUpVectorAtSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, const Vector3* UpVector, SplineCoordinateSpace CoordinateSpace, bool UpdateSpline); + static void AddSplinePoint(USplineComponent* SplineComponent, const Vector3* Location, SplineCoordinateSpace CoordinateSpace, bool UpdateSpline); + static void AddSplinePointAtIndex(USplineComponent* SplineComponent, const Vector3* Location, int32 PointIndex, SplineCoordinateSpace CoordinateSpace, bool UpdateSpline); + static void ClearSplinePoints(USplineComponent* SplineComponent, bool UpdateSpline); + static void FindDirectionClosestToWorldLocation(USplineComponent* SplineComponent, const Vector3* Location, SplineCoordinateSpace CoordinateSpace, Vector3* Value); + static void FindLocationClosestToWorldLocation(USplineComponent* SplineComponent, const Vector3* Location, SplineCoordinateSpace CoordinateSpace, Vector3* Value); + static void FindUpVectorClosestToWorldLocation(USplineComponent* SplineComponent, const Vector3* Location, SplineCoordinateSpace CoordinateSpace, Vector3* Value); + static void FindRightVectorClosestToWorldLocation(USplineComponent* SplineComponent, const Vector3* Location, SplineCoordinateSpace CoordinateSpace, Vector3* Value); + static float FindRollClosestToWorldLocation(USplineComponent* SplineComponent, const Vector3* Location, SplineCoordinateSpace CoordinateSpace); + static void FindScaleClosestToWorldLocation(USplineComponent* SplineComponent, const Vector3* Location, Vector3* Value); + static void FindTangentClosestToWorldLocation(USplineComponent* SplineComponent, const Vector3* Location, SplineCoordinateSpace CoordinateSpace, Vector3* Value); + static void FindTransformClosestToWorldLocation(USplineComponent* SplineComponent, const Vector3* Location, SplineCoordinateSpace CoordinateSpace, bool UseScale, Transform* Value); + static void RemoveSplinePoint(USplineComponent* SplineComponent, int32 PointIndex, bool UpdateSpline); + static void UpdateSpline(USplineComponent* SplineComponent); + } + + namespace RadialForceComponent { + static bool GetIgnoreOwningActor(URadialForceComponent* RadialForceComponent); + static bool GetImpulseVelocityChange(URadialForceComponent* RadialForceComponent); + static bool GetLinearFalloff(URadialForceComponent* RadialForceComponent); + static float GetForceStrength(URadialForceComponent* RadialForceComponent); + static float GetImpulseStrength(URadialForceComponent* RadialForceComponent); + static float GetRadius(URadialForceComponent* RadialForceComponent); + static void SetIgnoreOwningActor(URadialForceComponent* RadialForceComponent, bool Value); + static void SetImpulseVelocityChange(URadialForceComponent* RadialForceComponent, bool Value); + static void SetLinearFalloff(URadialForceComponent* RadialForceComponent, bool Value); + static void SetForceStrength(URadialForceComponent* RadialForceComponent, float Value); + static void SetImpulseStrength(URadialForceComponent* RadialForceComponent, float Value); + static void SetRadius(URadialForceComponent* RadialForceComponent, float Value); + static void AddCollisionChannelToAffect(URadialForceComponent* RadialForceComponent, CollisionChannel Channel); + static void FireImpulse(URadialForceComponent* RadialForceComponent); + } + + namespace MaterialInterface { + static bool IsTwoSided(UMaterialInterface* MaterialInterface); + } + + namespace Material { + static bool IsDefaultMaterial(UMaterial* Material); + } + + namespace MaterialInstance { + static bool IsChildOf(UMaterialInstance* MaterialInstance, UMaterialInterface* Material); + static UMaterialInstanceDynamic* GetParent(UMaterialInstance* MaterialInstance); + } + + namespace MaterialInstanceDynamic { + static void ClearParameterValues(UMaterialInstanceDynamic* MaterialInstanceDynamic); + static void SetTextureParameterValue(UMaterialInstanceDynamic* MaterialInstanceDynamic, const char* ParameterName, UTexture* Value); + static void SetVectorParameterValue(UMaterialInstanceDynamic* MaterialInstanceDynamic, const char* ParameterName, const LinearColor* Value); + static void SetScalarParameterValue(UMaterialInstanceDynamic* MaterialInstanceDynamic, const char* ParameterName, float Value); + } +} \ No newline at end of file diff --git a/plugins/UnrealCLR/Source/UnrealCLR/Public/UnrealCLRLibrary.h b/plugins/UnrealCLR/Source/UnrealCLR/Public/UnrealCLRLibrary.h new file mode 100644 index 00000000..eee60a75 --- /dev/null +++ b/plugins/UnrealCLR/Source/UnrealCLR/Public/UnrealCLRLibrary.h @@ -0,0 +1,63 @@ +/* + * Unreal Engine .NET 5 integration + * Copyright (c) 2021 Stanislav Denisov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#pragma once + +#include "Kismet/BlueprintFunctionLibrary.h" +#include "UnrealCLRLibrary.generated.h" + +USTRUCT(BlueprintType) +struct UNREALCLR_API FManagedFunction { + GENERATED_BODY() + + public: + + void* Pointer; + + FManagedFunction(); +}; + +UCLASS() +class UNREALCLR_API UUnrealCLRLibrary : public UBlueprintFunctionLibrary { + GENERATED_UCLASS_BODY() + + public: + + UFUNCTION(BlueprintCallable, BlueprintPure = false, Category = ".NET", meta = (ToolTip = "Executes the managed function with optional object reference argument")) + static void ExecuteManagedFunction(FManagedFunction ManagedFunction, UObject* Object); + + UFUNCTION(BlueprintCallable, BlueprintPure = false, Category = ".NET", meta = (ToolTip = "Finds the managed function from loaded assembly, optional parameter suppresses errors if the function was not found")) + static FManagedFunction FindManagedFunction(FString Method, bool Optional, bool& Result); +}; + +UCLASS() +class UNREALCLR_API UUnrealCLRCharacter : public UObject { + GENERATED_UCLASS_BODY() + + public: + + void* LandedCallback; + + UFUNCTION() + void Landed(const FHitResult& Hit); +}; \ No newline at end of file diff --git a/plugins/UnrealCLR/Source/UnrealCLR/Public/UnrealCLRManager.h b/plugins/UnrealCLR/Source/UnrealCLR/Public/UnrealCLRManager.h new file mode 100644 index 00000000..7c160b72 --- /dev/null +++ b/plugins/UnrealCLR/Source/UnrealCLR/Public/UnrealCLRManager.h @@ -0,0 +1,77 @@ +/* + * Unreal Engine .NET 5 integration + * Copyright (c) 2021 Stanislav Denisov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/Actor.h" +#include "UnrealCLRManager.generated.h" + +UCLASS() +class UNREALCLR_API UUnrealCLRManager : public UObject { + GENERATED_BODY() + + public: + + UFUNCTION() + void ActorBeginOverlap(AActor* OverlapActor, AActor* OtherActor); + + UFUNCTION() + void ActorEndOverlap(AActor* OverlapActor, AActor* OtherActor); + + UFUNCTION() + void ActorHit(AActor* HitActor, AActor* OtherActor, FVector NormalImpulse, const FHitResult& Hit); + + UFUNCTION() + void ActorBeginCursorOver(AActor* Actor); + + UFUNCTION() + void ActorEndCursorOver(AActor* Actor); + + UFUNCTION() + void ActorClicked(AActor* Actor, FKey Button); + + UFUNCTION() + void ActorReleased(AActor* Actor, FKey Button); + + UFUNCTION() + void ComponentBeginOverlap(UPrimitiveComponent* OverlapComponent, AActor* OtherActor, UPrimitiveComponent* OtherComponent, int32 OtherBodyIndex, bool FromSweep, const FHitResult& SweepResult); + + UFUNCTION() + void ComponentEndOverlap(UPrimitiveComponent* OverlapComponent, AActor* OtherActor, UPrimitiveComponent* OtherComponent, int32 OtherBodyIndex); + + UFUNCTION() + void ComponentHit(UPrimitiveComponent* HitComponent, AActor* OtherActor, UPrimitiveComponent* OtherComponent, FVector NormalImpulse, const FHitResult& Hit); + + UFUNCTION() + void ComponentBeginCursorOver(UPrimitiveComponent* Component); + + UFUNCTION() + void ComponentEndCursorOver(UPrimitiveComponent* Component); + + UFUNCTION() + void ComponentClicked(UPrimitiveComponent* Component, FKey Key); + + UFUNCTION() + void ComponentReleased(UPrimitiveComponent* Component, FKey Key); +}; \ No newline at end of file diff --git a/plugins/UnrealCLR/Source/UnrealCLR/UnrealCLR.Build.cs b/plugins/UnrealCLR/Source/UnrealCLR/UnrealCLR.Build.cs new file mode 100644 index 00000000..991c7ddc --- /dev/null +++ b/plugins/UnrealCLR/Source/UnrealCLR/UnrealCLR.Build.cs @@ -0,0 +1,97 @@ +/* + * Unreal Engine .NET 5 integration + * Copyright (c) 2021 Stanislav Denisov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +using System; +using System.IO; +using UnrealBuildTool; + +public class UnrealCLR : ModuleRules { + public UnrealCLR(ReadOnlyTargetRules Target) : base(Target) { + #if UE_4_24_OR_LATER + bLegacyPublicIncludePaths = false; + DefaultBuildSettings = BuildSettingsVersion.V2; + #else + PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; + #endif + + PublicIncludePaths.AddRange(new string[] { }); + + PrivateIncludePaths.AddRange(new string[] { }); + + PublicDependencyModuleNames.AddRange(new string[] { + "Core" + }); + + PrivateDependencyModuleNames.AddRange(new string[] { + "AIModule", + "AssetRegistry", + "CoreUObject", + "Engine", + "HeadMountedDisplay", + "InputCore", + "Slate", + "SlateCore" + }); + + DynamicallyLoadedModuleNames.AddRange(new string[] { }); + + if (Target.bBuildEditor) { + PrivateDependencyModuleNames.AddRange(new string[] { + "UnrealEd" + }); + } else { + string runtimePath = null; + + if (Target.Platform == UnrealTargetPlatform.Win64) + runtimePath = Path.Combine(ModuleDirectory, "../../Runtime/Win64"); + else if (Target.Platform == UnrealTargetPlatform.Linux) + runtimePath = Path.Combine(ModuleDirectory, "../../Runtime/Linux"); + else if (Target.Platform == UnrealTargetPlatform.Mac) + runtimePath = Path.Combine(ModuleDirectory, "../../Runtime/Mac"); + else + throw new Exception("Unknown platform"); + + string[] files = Directory.GetFiles(runtimePath, "*.*", SearchOption.AllDirectories); + + foreach (string file in files) { + RuntimeDependencies.Add(file); + } + + files = Directory.GetFiles(Path.Combine(ModuleDirectory, "../../Managed"), "*.*", SearchOption.AllDirectories); + + foreach (string file in files) { + RuntimeDependencies.Add(file); + } + + string userAssemblies = Path.Combine(PluginDirectory , "../../Managed"); + + if (Directory.Exists(userAssemblies)) { + files = Directory.GetFiles(userAssemblies, "*.*", SearchOption.AllDirectories); + + foreach (string file in files) { + RuntimeDependencies.Add(file); + } + } + } + } +} \ No newline at end of file diff --git a/plugins/UnrealCLR/UnrealCLR.uplugin b/plugins/UnrealCLR/UnrealCLR.uplugin new file mode 100644 index 00000000..6e80d507 --- /dev/null +++ b/plugins/UnrealCLR/UnrealCLR.uplugin @@ -0,0 +1,30 @@ +{ + "FileVersion": 3, + "Version": 1, + "VersionName": "1.30", + "FriendlyName": "UnrealCLR", + "Description": ".NET 5 integration", + "Category": "Scripting", + "CreatedBy": "nxrighthere", + "CreatedByURL": "https://github.com/nxrighthere", + "DocsURL": "https://github.com/nxrighthere/UnrealCLR", + "MarketplaceURL": "", + "SupportURL": "https://github.com/nxrighthere/UnrealCLR/discussions", + "EnabledByDefault": true, + "CanContainContent": false, + "IsBetaVersion": false, + "IsExperimentalVersion": false, + "Installed": false, + "Modules": [ + { + "Name": "UnrealCLR", + "Type": "Runtime", + "LoadingPhase": "PreLoadingScreen", + "WhitelistPlatforms": [ + "Win64", + "Linux", + "Mac" + ] + } + ] +} \ No newline at end of file diff --git a/plugins/createProcess/Intermediate/Build/Win64/UE4/Development/createProcess/Module.createProcess.cpp.obj b/plugins/createProcess/Intermediate/Build/Win64/UE4/Development/createProcess/Module.createProcess.cpp.obj index b37fbb95..2bb866eb 100644 Binary files a/plugins/createProcess/Intermediate/Build/Win64/UE4/Development/createProcess/Module.createProcess.cpp.obj and b/plugins/createProcess/Intermediate/Build/Win64/UE4/Development/createProcess/Module.createProcess.cpp.obj differ diff --git a/plugins/createProcess/Intermediate/Build/Win64/UE4/Development/createProcess/Module.createProcess.gen.cpp.obj b/plugins/createProcess/Intermediate/Build/Win64/UE4/Development/createProcess/Module.createProcess.gen.cpp.obj index 1f4e7237..aaab1212 100644 Binary files a/plugins/createProcess/Intermediate/Build/Win64/UE4/Development/createProcess/Module.createProcess.gen.cpp.obj and b/plugins/createProcess/Intermediate/Build/Win64/UE4/Development/createProcess/Module.createProcess.gen.cpp.obj differ diff --git a/plugins/createProcess/Intermediate/Build/Win64/UE4/Inc/createProcess/Timestamp b/plugins/createProcess/Intermediate/Build/Win64/UE4/Inc/createProcess/Timestamp index 83a5cc7f..91f8335e 100644 --- a/plugins/createProcess/Intermediate/Build/Win64/UE4/Inc/createProcess/Timestamp +++ b/plugins/createProcess/Intermediate/Build/Win64/UE4/Inc/createProcess/Timestamp @@ -1 +1 @@ -E:\Projects\das\createProcess\HostProject\Plugins\createProcess\Source\createProcess\Public\createProcessBPLibrary.h +E:\Projects\Ivazowsky\Plugins\createProcess\Source\createProcess\Public\createProcessBPLibrary.h diff --git a/plugins/createProcess/Intermediate/Build/Win64/UE4/Inc/createProcess/createProcessBPLibrary.generated.h b/plugins/createProcess/Intermediate/Build/Win64/UE4/Inc/createProcess/createProcessBPLibrary.generated.h index d8bf626a..cc270f37 100644 --- a/plugins/createProcess/Intermediate/Build/Win64/UE4/Inc/createProcess/createProcessBPLibrary.generated.h +++ b/plugins/createProcess/Intermediate/Build/Win64/UE4/Inc/createProcess/createProcessBPLibrary.generated.h @@ -13,20 +13,20 @@ PRAGMA_DISABLE_DEPRECATION_WARNINGS #endif #define CREATEPROCESS_createProcessBPLibrary_generated_h -#define HostProject_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_SPARSE_DATA -#define HostProject_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_RPC_WRAPPERS \ +#define Ivazowsky_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_SPARSE_DATA +#define Ivazowsky_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_RPC_WRAPPERS \ \ DECLARE_FUNCTION(execRunSystemCommand); \ DECLARE_FUNCTION(execcreateProc); -#define HostProject_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_RPC_WRAPPERS_NO_PURE_DECLS \ +#define Ivazowsky_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_RPC_WRAPPERS_NO_PURE_DECLS \ \ DECLARE_FUNCTION(execRunSystemCommand); \ DECLARE_FUNCTION(execcreateProc); -#define HostProject_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_INCLASS_NO_PURE_DECLS \ +#define Ivazowsky_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_INCLASS_NO_PURE_DECLS \ private: \ static void StaticRegisterNativesUcreateProcessBPLibrary(); \ friend struct Z_Construct_UClass_UcreateProcessBPLibrary_Statics; \ @@ -35,7 +35,7 @@ public: \ DECLARE_SERIALIZER(UcreateProcessBPLibrary) -#define HostProject_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_INCLASS \ +#define Ivazowsky_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_INCLASS \ private: \ static void StaticRegisterNativesUcreateProcessBPLibrary(); \ friend struct Z_Construct_UClass_UcreateProcessBPLibrary_Statics; \ @@ -44,7 +44,7 @@ public: \ DECLARE_SERIALIZER(UcreateProcessBPLibrary) -#define HostProject_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_STANDARD_CONSTRUCTORS \ +#define Ivazowsky_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_STANDARD_CONSTRUCTORS \ /** Standard constructor, called after all reflected properties have been initialized */ \ NO_API UcreateProcessBPLibrary(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get()); \ DEFINE_DEFAULT_OBJECT_INITIALIZER_CONSTRUCTOR_CALL(UcreateProcessBPLibrary) \ @@ -57,7 +57,7 @@ private: \ public: -#define HostProject_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_ENHANCED_CONSTRUCTORS \ +#define Ivazowsky_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_ENHANCED_CONSTRUCTORS \ /** Standard constructor, called after all reflected properties have been initialized */ \ NO_API UcreateProcessBPLibrary(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get()) : Super(ObjectInitializer) { }; \ private: \ @@ -70,28 +70,28 @@ public: \ DEFINE_DEFAULT_OBJECT_INITIALIZER_CONSTRUCTOR_CALL(UcreateProcessBPLibrary) -#define HostProject_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_PRIVATE_PROPERTY_OFFSET -#define HostProject_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_26_PROLOG -#define HostProject_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_GENERATED_BODY_LEGACY \ +#define Ivazowsky_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_PRIVATE_PROPERTY_OFFSET +#define Ivazowsky_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_26_PROLOG +#define Ivazowsky_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_GENERATED_BODY_LEGACY \ PRAGMA_DISABLE_DEPRECATION_WARNINGS \ public: \ - HostProject_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_PRIVATE_PROPERTY_OFFSET \ - HostProject_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_SPARSE_DATA \ - HostProject_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_RPC_WRAPPERS \ - HostProject_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_INCLASS \ - HostProject_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_STANDARD_CONSTRUCTORS \ + Ivazowsky_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_PRIVATE_PROPERTY_OFFSET \ + Ivazowsky_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_SPARSE_DATA \ + Ivazowsky_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_RPC_WRAPPERS \ + Ivazowsky_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_INCLASS \ + Ivazowsky_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_STANDARD_CONSTRUCTORS \ public: \ PRAGMA_ENABLE_DEPRECATION_WARNINGS -#define HostProject_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_GENERATED_BODY \ +#define Ivazowsky_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_GENERATED_BODY \ PRAGMA_DISABLE_DEPRECATION_WARNINGS \ public: \ - HostProject_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_PRIVATE_PROPERTY_OFFSET \ - HostProject_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_SPARSE_DATA \ - HostProject_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_RPC_WRAPPERS_NO_PURE_DECLS \ - HostProject_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_INCLASS_NO_PURE_DECLS \ - HostProject_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_ENHANCED_CONSTRUCTORS \ + Ivazowsky_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_PRIVATE_PROPERTY_OFFSET \ + Ivazowsky_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_SPARSE_DATA \ + Ivazowsky_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_RPC_WRAPPERS_NO_PURE_DECLS \ + Ivazowsky_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_INCLASS_NO_PURE_DECLS \ + Ivazowsky_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h_29_ENHANCED_CONSTRUCTORS \ static_assert(false, "Unknown access specifier for GENERATED_BODY() macro in class createProcessBPLibrary."); \ PRAGMA_ENABLE_DEPRECATION_WARNINGS @@ -99,7 +99,7 @@ PRAGMA_ENABLE_DEPRECATION_WARNINGS template<> CREATEPROCESS_API UClass* StaticClass(); #undef CURRENT_FILE_ID -#define CURRENT_FILE_ID HostProject_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h +#define CURRENT_FILE_ID Ivazowsky_Plugins_createProcess_Source_createProcess_Public_createProcessBPLibrary_h PRAGMA_ENABLE_DEPRECATION_WARNINGS diff --git a/plugins/createProcess/Intermediate/Build/Win64/UE4/Shipping/createProcess/Module.createProcess.cpp.obj b/plugins/createProcess/Intermediate/Build/Win64/UE4/Shipping/createProcess/Module.createProcess.cpp.obj index 484af940..07137091 100644 Binary files a/plugins/createProcess/Intermediate/Build/Win64/UE4/Shipping/createProcess/Module.createProcess.cpp.obj and b/plugins/createProcess/Intermediate/Build/Win64/UE4/Shipping/createProcess/Module.createProcess.cpp.obj differ diff --git a/plugins/createProcess/Intermediate/Build/Win64/UE4/Shipping/createProcess/Module.createProcess.gen.cpp.obj b/plugins/createProcess/Intermediate/Build/Win64/UE4/Shipping/createProcess/Module.createProcess.gen.cpp.obj index 4c3c3376..ea45ed85 100644 Binary files a/plugins/createProcess/Intermediate/Build/Win64/UE4/Shipping/createProcess/Module.createProcess.gen.cpp.obj and b/plugins/createProcess/Intermediate/Build/Win64/UE4/Shipping/createProcess/Module.createProcess.gen.cpp.obj differ diff --git a/plugins/manageTextFile/Intermediate/Build/Win64/UE4/Development/manageTextFile/Module.manageTextFile.cpp.obj b/plugins/manageTextFile/Intermediate/Build/Win64/UE4/Development/manageTextFile/Module.manageTextFile.cpp.obj index 44c29e63..597e5828 100644 Binary files a/plugins/manageTextFile/Intermediate/Build/Win64/UE4/Development/manageTextFile/Module.manageTextFile.cpp.obj and b/plugins/manageTextFile/Intermediate/Build/Win64/UE4/Development/manageTextFile/Module.manageTextFile.cpp.obj differ diff --git a/plugins/manageTextFile/Intermediate/Build/Win64/UE4/Development/manageTextFile/Module.manageTextFile.gen.cpp.obj b/plugins/manageTextFile/Intermediate/Build/Win64/UE4/Development/manageTextFile/Module.manageTextFile.gen.cpp.obj index 62b6656f..53d2a4a2 100644 Binary files a/plugins/manageTextFile/Intermediate/Build/Win64/UE4/Development/manageTextFile/Module.manageTextFile.gen.cpp.obj and b/plugins/manageTextFile/Intermediate/Build/Win64/UE4/Development/manageTextFile/Module.manageTextFile.gen.cpp.obj differ diff --git a/plugins/manageTextFile/Intermediate/Build/Win64/UE4/Inc/manageTextFile/Timestamp b/plugins/manageTextFile/Intermediate/Build/Win64/UE4/Inc/manageTextFile/Timestamp index 2e7f9188..160cd2e4 100644 --- a/plugins/manageTextFile/Intermediate/Build/Win64/UE4/Inc/manageTextFile/Timestamp +++ b/plugins/manageTextFile/Intermediate/Build/Win64/UE4/Inc/manageTextFile/Timestamp @@ -1 +1 @@ -E:\Projects\das\manageTextFile\HostProject\Plugins\manageTextFile\Source\manageTextFile\Public\manageTextFileBPLibrary.h +E:\Projects\Ivazowsky\Plugins\manageTextFile\Source\manageTextFile\Public\manageTextFileBPLibrary.h diff --git a/plugins/manageTextFile/Intermediate/Build/Win64/UE4/Inc/manageTextFile/manageTextFileBPLibrary.generated.h b/plugins/manageTextFile/Intermediate/Build/Win64/UE4/Inc/manageTextFile/manageTextFileBPLibrary.generated.h index d1f6fb1f..e12d0b1a 100644 --- a/plugins/manageTextFile/Intermediate/Build/Win64/UE4/Inc/manageTextFile/manageTextFileBPLibrary.generated.h +++ b/plugins/manageTextFile/Intermediate/Build/Win64/UE4/Inc/manageTextFile/manageTextFileBPLibrary.generated.h @@ -13,8 +13,8 @@ PRAGMA_DISABLE_DEPRECATION_WARNINGS #endif #define MANAGETEXTFILE_manageTextFileBPLibrary_generated_h -#define HostProject_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_SPARSE_DATA -#define HostProject_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_RPC_WRAPPERS \ +#define Ivazowsky_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_SPARSE_DATA +#define Ivazowsky_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_RPC_WRAPPERS \ \ DECLARE_FUNCTION(execreadFile); \ DECLARE_FUNCTION(execDeleteFile); \ @@ -23,7 +23,7 @@ PRAGMA_DISABLE_DEPRECATION_WARNINGS DECLARE_FUNCTION(execCreateTextFile); -#define HostProject_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_RPC_WRAPPERS_NO_PURE_DECLS \ +#define Ivazowsky_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_RPC_WRAPPERS_NO_PURE_DECLS \ \ DECLARE_FUNCTION(execreadFile); \ DECLARE_FUNCTION(execDeleteFile); \ @@ -32,7 +32,7 @@ PRAGMA_DISABLE_DEPRECATION_WARNINGS DECLARE_FUNCTION(execCreateTextFile); -#define HostProject_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_INCLASS_NO_PURE_DECLS \ +#define Ivazowsky_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_INCLASS_NO_PURE_DECLS \ private: \ static void StaticRegisterNativesUmanageTextFileBPLibrary(); \ friend struct Z_Construct_UClass_UmanageTextFileBPLibrary_Statics; \ @@ -41,7 +41,7 @@ public: \ DECLARE_SERIALIZER(UmanageTextFileBPLibrary) -#define HostProject_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_INCLASS \ +#define Ivazowsky_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_INCLASS \ private: \ static void StaticRegisterNativesUmanageTextFileBPLibrary(); \ friend struct Z_Construct_UClass_UmanageTextFileBPLibrary_Statics; \ @@ -50,7 +50,7 @@ public: \ DECLARE_SERIALIZER(UmanageTextFileBPLibrary) -#define HostProject_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_STANDARD_CONSTRUCTORS \ +#define Ivazowsky_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_STANDARD_CONSTRUCTORS \ /** Standard constructor, called after all reflected properties have been initialized */ \ NO_API UmanageTextFileBPLibrary(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get()); \ DEFINE_DEFAULT_OBJECT_INITIALIZER_CONSTRUCTOR_CALL(UmanageTextFileBPLibrary) \ @@ -63,7 +63,7 @@ private: \ public: -#define HostProject_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_ENHANCED_CONSTRUCTORS \ +#define Ivazowsky_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_ENHANCED_CONSTRUCTORS \ /** Standard constructor, called after all reflected properties have been initialized */ \ NO_API UmanageTextFileBPLibrary(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get()) : Super(ObjectInitializer) { }; \ private: \ @@ -76,28 +76,28 @@ public: \ DEFINE_DEFAULT_OBJECT_INITIALIZER_CONSTRUCTOR_CALL(UmanageTextFileBPLibrary) -#define HostProject_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_PRIVATE_PROPERTY_OFFSET -#define HostProject_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_28_PROLOG -#define HostProject_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_GENERATED_BODY_LEGACY \ +#define Ivazowsky_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_PRIVATE_PROPERTY_OFFSET +#define Ivazowsky_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_28_PROLOG +#define Ivazowsky_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_GENERATED_BODY_LEGACY \ PRAGMA_DISABLE_DEPRECATION_WARNINGS \ public: \ - HostProject_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_PRIVATE_PROPERTY_OFFSET \ - HostProject_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_SPARSE_DATA \ - HostProject_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_RPC_WRAPPERS \ - HostProject_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_INCLASS \ - HostProject_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_STANDARD_CONSTRUCTORS \ + Ivazowsky_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_PRIVATE_PROPERTY_OFFSET \ + Ivazowsky_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_SPARSE_DATA \ + Ivazowsky_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_RPC_WRAPPERS \ + Ivazowsky_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_INCLASS \ + Ivazowsky_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_STANDARD_CONSTRUCTORS \ public: \ PRAGMA_ENABLE_DEPRECATION_WARNINGS -#define HostProject_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_GENERATED_BODY \ +#define Ivazowsky_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_GENERATED_BODY \ PRAGMA_DISABLE_DEPRECATION_WARNINGS \ public: \ - HostProject_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_PRIVATE_PROPERTY_OFFSET \ - HostProject_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_SPARSE_DATA \ - HostProject_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_RPC_WRAPPERS_NO_PURE_DECLS \ - HostProject_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_INCLASS_NO_PURE_DECLS \ - HostProject_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_ENHANCED_CONSTRUCTORS \ + Ivazowsky_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_PRIVATE_PROPERTY_OFFSET \ + Ivazowsky_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_SPARSE_DATA \ + Ivazowsky_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_RPC_WRAPPERS_NO_PURE_DECLS \ + Ivazowsky_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_INCLASS_NO_PURE_DECLS \ + Ivazowsky_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h_31_ENHANCED_CONSTRUCTORS \ static_assert(false, "Unknown access specifier for GENERATED_BODY() macro in class manageTextFileBPLibrary."); \ PRAGMA_ENABLE_DEPRECATION_WARNINGS @@ -105,7 +105,7 @@ PRAGMA_ENABLE_DEPRECATION_WARNINGS template<> MANAGETEXTFILE_API UClass* StaticClass(); #undef CURRENT_FILE_ID -#define CURRENT_FILE_ID HostProject_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h +#define CURRENT_FILE_ID Ivazowsky_Plugins_manageTextFile_Source_manageTextFile_Public_manageTextFileBPLibrary_h PRAGMA_ENABLE_DEPRECATION_WARNINGS diff --git a/plugins/manageTextFile/Intermediate/Build/Win64/UE4/Shipping/manageTextFile/Module.manageTextFile.cpp.obj b/plugins/manageTextFile/Intermediate/Build/Win64/UE4/Shipping/manageTextFile/Module.manageTextFile.cpp.obj index 7d270592..9c6ed2d1 100644 Binary files a/plugins/manageTextFile/Intermediate/Build/Win64/UE4/Shipping/manageTextFile/Module.manageTextFile.cpp.obj and b/plugins/manageTextFile/Intermediate/Build/Win64/UE4/Shipping/manageTextFile/Module.manageTextFile.cpp.obj differ diff --git a/plugins/manageTextFile/Intermediate/Build/Win64/UE4/Shipping/manageTextFile/Module.manageTextFile.gen.cpp.obj b/plugins/manageTextFile/Intermediate/Build/Win64/UE4/Shipping/manageTextFile/Module.manageTextFile.gen.cpp.obj index 3babf168..ada4a714 100644 Binary files a/plugins/manageTextFile/Intermediate/Build/Win64/UE4/Shipping/manageTextFile/Module.manageTextFile.gen.cpp.obj and b/plugins/manageTextFile/Intermediate/Build/Win64/UE4/Shipping/manageTextFile/Module.manageTextFile.gen.cpp.obj differ