RapyutaSimulationPlugins
RRObjectCommon.h
Go to the documentation of this file.
1 
15 #pragma once
16 
17 
18 
19 // UE
20 
21 #include "PhysicsEngine/BodySetup.h"
22 
23 #include "UObject/Object.h"
24 
25 
26 
27 // RapyutaSim
28 
30 
31 
32 
33 #include "RRObjectCommon.generated.h"
34 
35 
36 
37 // Note: For avoiding cyclic inclusion, only UE built-in source header files could be included herein.
38 
39 
40 
52 enum class ERRFileType : uint8
53 
54 {
55 
56  NONE,
57 
58  UASSET, // UE Asset file
59 
60  PAK,
61 
62  INI,
63 
64  YAML,
65 
66  ZIP,
67 
68 
69 
70  // Image
71 
72  IMAGE_JPG,
73 
75 
76  IMAGE_PNG,
77 
78  IMAGE_TGA,
79 
80  IMAGE_EXR,
81 
82  IMAGE_HDR,
83 
84 
85 
86  // Light Profile
87 
89 
90 
91 
92  // Meta Data
93 
94  JSON,
95 
96 
97 
98  // 3D Description Format
99 
100  URDF,
101 
102  SDF,
103 
104  GAZEBO_WORLD,
105 
106  MJCF, // MuJoCo
107 
108 
109 
110  // 3D CAD
111 
112  CAD_FBX,
113 
114  CAD_OBJ,
115 
116  CAD_STL,
117 
118  CAD_DAE,
119 
120  TOTAL
121 
122 };
123 
124 
125 
137 enum class ERRShapeType : uint8
138 
139 {
140 
141  NONE,
142 
143  PLANE,
144 
145  BOX,
146 
147  CYLINDER,
148 
149  SPHERE,
150 
151  CAPSULE,
152 
153  MESH,
154 
155  TOTAL
156 
157 };
158 
159 
160 
174 enum class ERRResourceDataType : uint8
175 
176 {
177 
178  NONE,
179 
180  // UASSET --
181 
182  UE_PAK,
183 
185 
187 
188  UE_SKELETON,
189 
191 
192  UE_MATERIAL,
193 
195 
196  UE_TEXTURE,
197 
199 
200 
201 
202  // UOBJECT --
203 
204  // Cooked collision data
205 
207 
208 
209 
210  TOTAL
211 
212 };
213 
214 
215 
231 struct RAPYUTASIMULATIONPLUGINS_API FRRResource
232 
233 {
234 
235 
236 
246 
247  {
248 
249  }
250 
251 
252 
267  FRRResource(const FString& InUniqueName, const FSoftObjectPath& InAssetPath, UObject* InAssetData)
268 
269  : UniqueName(InUniqueName), AssetPath(InAssetPath), AssetData(InAssetData)
270 
271  {
272 
273  }
274 
275 
276 
277 
282  FString UniqueName;
283 
284 
285 
286 
291  FSoftObjectPath AssetPath;
292 
293 
294 
305  FString GetAssetPath() const
306 
307  {
308 
309  return AssetPath.ToString();
310 
311  }
312 
313 
314 
315 
320  UObject* AssetData = nullptr;
321 
322 };
323 
324 
325 
341 struct RAPYUTASIMULATIONPLUGINS_API FRRResourceInfo
342 
343 {
344 
345 
346 
356 
357  {
358 
359  }
360 
361 
362 
373  FRRResourceInfo(const ERRResourceDataType InDataType) : DataType(InDataType)
374 
375  {
376 
377  }
378 
379 
380 
381 
387 
388 
389 
390 
395  int32 ToBeAsyncLoadedResourceNum = 0;
396 
397 
398 
399 
404  bool bHasBeenAllLoaded = false;
405 
406 
407 
408 
413  TMap<FString, FRRResource> Data;
414 
415 
416 
417  void AddResource(const FString& InUniqueName, const FSoftObjectPath& InAssetPath, UObject* InAssetData)
418 
419  {
420 
421  Data.Add(InUniqueName, FRRResource(InUniqueName, InAssetPath, InAssetData));
422 
423  }
424 
425 
426 
441  void Finalize()
442 
443  {
444 
445  DataType = ERRResourceDataType::NONE;
446 
447  ToBeAsyncLoadedResourceNum = 0;
448 
449  bHasBeenAllLoaded = false;
450 
451 
452 
453  // BodySetup's collision mesh data are manually created from the underlying Physics engine,
454 
455  // thus needs manual flush
456 
457  // Besides, body setup data is shared among proc mesh comps, thus could not be destroyed in a dtor or
458 
459  // OnComponentDestroyed()
460 
461  if (ERRResourceDataType::UE_BODY_SETUP == DataType)
462 
463  {
464 
465  for (auto& data : Data)
466 
467  {
468 
469  UBodySetup* bodySetup = Cast<UBodySetup>(data.Value.AssetData);
470 
471  if (IsValid(bodySetup))
472 
473  {
474 
475  bodySetup->ClearPhysicsMeshes();
476 
477  }
478 
479  }
480 
481  }
482 
483  else
484 
485  {
486 
487  for (auto& [_, resource] : Data)
488 
489  {
490 
491  if (resource.AssetData)
492 
493  {
494 
495  resource.AssetData->MarkAsGarbage();
496 
497  }
498 
499  }
500 
501  }
502 
503  Data.Reset();
504 
505  }
506 
507 };
508 
509 
510 
511 
516 struct RAPYUTASIMULATIONPLUGINS_API FRRMaterialProperty
517 
518 {
519 
520 
521 
522  // These property names are defined in master material by the artist
523 
524  static constexpr const TCHAR* PROP_NAME_ALBEDO = TEXT("AlbedoTexture");
525 
526  static constexpr const TCHAR* PROP_NAME_ORM = TEXT("MergeMapInput");
527 
528  static constexpr const TCHAR* PROP_NAME_NORMAL = TEXT("MainNormalInput");
529 
530  static constexpr const TCHAR* PROP_NAME_MASK = TEXT("MaskSelection");
531 
532  static constexpr const TCHAR* PROP_NAME_COLOR_ALBEDO = TEXT("ColorAlbedo");
533 
534  static constexpr const TCHAR* PROP_NAME_EMISSIVE_STRENGTH = TEXT("EmissiveStrength");
535 
536 
537 
538 
543  FString Name;
544 
545 
550  FLinearColor Color = FLinearColor::Transparent;
551 
552 
557  TArray<FString> AlbedoTextureNameList;
558 
559 
564  TArray<FLinearColor> AlbedoColorList;
565 
566 
572 
573 
578  FString ORMTextureName;
579 
580 
586 
587 
588 
589  void PrintSelf() const
590 
591  {
592 
593  UE_LOG(LogTemp, Warning, TEXT("Material: %s"), *Name);
594 
595  UE_LOG(LogTemp, Display, TEXT("- Color: %s"), *Color.ToString());
596 
597  UE_LOG(LogTemp, Display, TEXT("- AlbedoTextureNameList: %s"), *FString::Join(AlbedoTextureNameList, TEXT(",")));
598 
599  UE_LOG(LogTemp,
600 
601  Display,
602 
603  TEXT("- AlbedoColorList: %s"),
604 
605  *FString::JoinBy(AlbedoColorList, TEXT(","), [](const FLinearColor& InColor) { return InColor.ToString(); }));
606 
607  UE_LOG(LogTemp, Display, TEXT("- MaskTextureName: %s"), *MaskTextureName);
608 
609  UE_LOG(LogTemp, Display, TEXT("- ORMTextureName: %s"), *ORMTextureName);
610 
611  UE_LOG(LogTemp, Display, TEXT("- NormalTextureName: %s"), *NormalTextureName);
612 
613  }
614 
615 
616 
617  bool IsValid() const
618 
619  {
620 
621  return !Name.IsEmpty();
622 
623  }
624 
625 
626 
627  bool HasTexture(const FString& InTextureName) const
628 
629  {
630 
631  return AlbedoTextureNameList.Contains(InTextureName) || (InTextureName == MaskTextureName) ||
632 
633  (InTextureName == ORMTextureName) || (InTextureName == NormalTextureName);
634 
635  }
636 
637 };
638 
FRRResourceInfo::Finalize
void Finalize()
Finalize object by using UBodySetup::ClearPhysicsMeshes and MarkAsGarbage.
Definition: RRObjectCommon.h:441
FRRResourceInfo::FRRResourceInfo
FRRResourceInfo()
Construct a new FRRResourceInfo.
Definition: RRObjectCommon.h:355
RapyutaSimulationPlugins.h
Unreal Engine Mudule class.
ERREntityDescriptionType::URDF
@ URDF
FRRMaterialProperty::MaskTextureName
FString MaskTextureName
Definition: RRObjectCommon.h:571
ERRResourceDataType::UE_BODY_SETUP
@ UE_BODY_SETUP
ERRResourceDataType::UE_PHYSICAL_MATERIAL
@ UE_PHYSICAL_MATERIAL
FRRResource
The atomic Sim resouces(Uassets)
Definition: RRObjectCommon.h:231
FRRResourceInfo::FRRResourceInfo
FRRResourceInfo(const ERRResourceDataType InDataType)
Construct a new FRRResourceInfo.
Definition: RRObjectCommon.h:373
ERRFileType::ZIP
@ ZIP
ERRFileType::IMAGE_GRAYSCALE_JPG
@ IMAGE_GRAYSCALE_JPG
FRRMaterialProperty::ORMTextureName
FString ORMTextureName
Definition: RRObjectCommon.h:578
ERREntityDescriptionType::SDF
@ SDF
URDF
FRRResource::FRRResource
FRRResource()
Construct a new FRRResource object.
Definition: RRObjectCommon.h:245
FRRMaterialProperty::AlbedoColorList
TArray< FLinearColor > AlbedoColorList
Definition: RRObjectCommon.h:564
ERRShapeType::PLANE
@ PLANE
FRRMaterialProperty::NormalTextureName
FString NormalTextureName
Definition: RRObjectCommon.h:585
ERRFileType::MJCF
@ MJCF
ERRFileType::IMAGE_HDR
@ IMAGE_HDR
ERRFileType::CAD_DAE
@ CAD_DAE
ERRResourceDataType::UE_SKELETON
@ UE_SKELETON
ERRFileType::IMAGE_PNG
@ IMAGE_PNG
FRRMaterialProperty::HasTexture
bool HasTexture(const FString &InTextureName) const
Definition: RRObjectCommon.h:627
ERRFileType::UASSET
@ UASSET
ERRFileType::CAD_STL
@ CAD_STL
FRRMaterialProperty::Name
FString Name
Definition: RRObjectCommon.h:543
FRRResource::GetAssetPath
FString GetAssetPath() const
Get the Asset Path.
Definition: RRObjectCommon.h:305
ERRShapeType::BOX
@ BOX
ERRFileType::GAZEBO_WORLD
@ GAZEBO_WORLD
ERRFileType::JSON
@ JSON
ERRResourceDataType::UE_PHYSICS_ASSET
@ UE_PHYSICS_ASSET
ERRResourceDataType::NONE
@ NONE
ERRFileType::IMAGE_EXR
@ IMAGE_EXR
FRRResourceInfo
Structure to store resources(Uassets) information.
Definition: RRObjectCommon.h:341
FRRMaterialProperty
Definition: RRObjectCommon.h:516
ERREntityDescriptionType::TOTAL
@ TOTAL
Raw single CAD (FBX, COLLADA, etc.)
ERRFileType::IMAGE_JPG
@ IMAGE_JPG
ERRFileType::INI
@ INI
ERRResourceDataType::UE_STATIC_MESH
@ UE_STATIC_MESH
FRRMaterialProperty::PrintSelf
void PrintSelf() const
Definition: RRObjectCommon.h:589
FRRResource::UniqueName
FString UniqueName
Definition: RRObjectCommon.h:282
FRRResource::AssetPath
FSoftObjectPath AssetPath
Definition: RRObjectCommon.h:291
ERRResourceDataType::UE_MATERIAL
@ UE_MATERIAL
ERRFileType::YAML
@ YAML
ERRShapeType
ERRShapeType
Shape types.
Definition: RRObjectCommon.h:137
ERRFileType::LIGHT_PROFILE_IES
@ LIGHT_PROFILE_IES
ERRShapeType::CYLINDER
@ CYLINDER
FRRResourceInfo::AddResource
void AddResource(const FString &InUniqueName, const FSoftObjectPath &InAssetPath, UObject *InAssetData)
Definition: RRObjectCommon.h:417
FRRMaterialProperty::AlbedoTextureNameList
TArray< FString > AlbedoTextureNameList
Definition: RRObjectCommon.h:557
ERRFileType::CAD_OBJ
@ CAD_OBJ
ERRShapeType::CAPSULE
@ CAPSULE
ERRResourceDataType
ERRResourceDataType
Sim resource(Uassets) data types.
Definition: RRObjectCommon.h:174
FRRMaterialProperty::IsValid
bool IsValid() const
Definition: RRObjectCommon.h:617
ERREntityDescriptionType::UE_DATA_TABLE
@ UE_DATA_TABLE
SDF
ERRFileType
ERRFileType
File types.
Definition: RRObjectCommon.h:52
ERRFileType::IMAGE_TGA
@ IMAGE_TGA
ERRShapeType::MESH
@ MESH
ERRFileType::PAK
@ PAK
ERRShapeType::SPHERE
@ SPHERE
ERRFileType::CAD_FBX
@ CAD_FBX
ERRResourceDataType::UE_TEXTURE
@ UE_TEXTURE
ERRResourceDataType::UE_SKELETAL_MESH
@ UE_SKELETAL_MESH
ERRUEComponentType::NONE
@ NONE
ERRResourceDataType::UE_PAK
@ UE_PAK
FRRResourceInfo::Data
TMap< FString, FRRResource > Data
Definition: RRObjectCommon.h:413
FRRResource::FRRResource
FRRResource(const FString &InUniqueName, const FSoftObjectPath &InAssetPath, UObject *InAssetData)
Construct a new FRRResource object.
Definition: RRObjectCommon.h:267