DatasmithDefinitions.h
1 // Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.
2 #pragma once
3 
4 #include "CoreTypes.h"
5 #include "Misc/EnumClassFlags.h"
6 
7 #ifdef WITH_COREUOBJECT
8  #include "UObject/ObjectMacros.h"
9 #else
10  #define UENUM(...)
11 #endif // WITH_COREUOBJECT
12 
13 /** Element type is used to identify its class like Mesh, Actor, Light, etc. */
14 enum class EDatasmithElementType : uint64
15 {
16  None = 0,
17  StaticMesh = 1 << 0,
18  Actor = 1 << 1,
19  StaticMeshActor = 1 << 2,
20  Light = 1 << 3,
21  PointLight = 1 << 4,
22  SpotLight = 1 << 5,
23  DirectionalLight = 1 << 6,
24  AreaLight = 1 << 7,
25  LightmassPortal = 1 << 8,
26  EnvironmentLight = 1 << 9,
27  Camera = 1 << 10,
28  Shader = 1 << 11,
29  Material = 1 << 12,
30  MasterMaterial = 1 << 13,
31  KeyValueProperty = 1 << 14,
32  Texture = 1 << 15,
33  MaterialId = 1 << 16,
34  PostProcess = 1 << 17,
35  Scene = 1 << 18,
36  MetaData = 1 << 19,
37  CustomActor = 1 << 20,
38  BaseMaterial = 1 << 21,
39  Landscape = 1 << 22,
40  UEPbrMaterial = 1 << 23,
41  PostProcessVolume = 1 << 24,
42  LevelSequence = 1 << 25,
43  Animation = 1 << 26,
44  HierarchicalInstanceStaticMesh = 1 << 27,
45 };
46 
47 ENUM_CLASS_FLAGS( EDatasmithElementType ); // Define bitwise operators for EDatasmithElementType
48 
49 /** Subtype of the Animation EDatasmithElementType, containing base, transform, visibility animations and etc. */
50 enum class EDatasmithElementAnimationSubType : uint64
51 {
52  BaseAnimation = 0,
53  TransformAnimation = 1 << 0,
54  VisibilityAnimation = 1 << 1,
55  SubsequenceAnimation = 1 << 2,
56 };
57 
58 ENUM_CLASS_FLAGS( EDatasmithElementAnimationSubType ); // Define bitwise operators for EDatasmithElementAnimationSubtype
59 
60 /**
61  * Describes a set of channels from a transform animation. Used to enable/disable those channels on import/export.
62  * The values defined in EDatasmithTransformChannels should mirror the analogues in EMovieSceneTransformChannel
63  */
64 enum class EDatasmithTransformChannels : uint16
65 {
66  None = 0x000,
67 
68  TranslationX = 0x001,
69  TranslationY = 0x002,
70  TranslationZ = 0x004,
71  Translation = TranslationX | TranslationY | TranslationZ,
72 
73  RotationX = 0x008,
74  RotationY = 0x010,
75  RotationZ = 0x020,
76  Rotation = RotationX | RotationY | RotationZ,
77 
78  ScaleX = 0x040,
79  ScaleY = 0x080,
80  ScaleZ = 0x100,
81  Scale = ScaleX | ScaleY | ScaleZ,
82 
83  All = Translation | Rotation | Scale,
84 };
85 
86 ENUM_CLASS_FLAGS( EDatasmithTransformChannels ); // Define bitwise operators for EDatasmithTransformChannels
87 
88 /** Different supported light shapes */
89 UENUM(BlueprintType)
90 enum class EDatasmithLightShape : uint8
91 {
92  Rectangle,
93  Disc,
94  Sphere,
95  Cylinder,
96  None
97 };
98 
99 static const TCHAR* DatasmithAreaLightShapeStrings[] = { TEXT("Rectangle"), TEXT("Disc"), TEXT("Sphere"), TEXT("Cylinder"), TEXT("None") };
100 
101 enum class EDatasmithAreaLightType
102 {
103  Point,
104  Spot,
105  IES_DEPRECATED,
106  Rect
107 };
108 
109 static const TCHAR* DatasmithAreaLightTypeStrings[] = { TEXT("Point"), TEXT("Spot"), TEXT("IES"), TEXT("Rect") };
110 
111 /** Light intensity units */
112 enum class EDatasmithLightUnits
113 {
114  Unitless,
115  Candelas,
116  Lumens,
117 };
118 
119 /** Different usage for textures. Note: Preserve enum order. */
120 UENUM()
121 enum class EDatasmithTextureMode : uint8
122 {
123  Diffuse,
124  Specular,
125  Normal,
126  NormalGreenInv,
127  Displace,
128  Other,
129  Bump
130 };
131 
132 /** Texture filtering for textures. */
133 UENUM()
134 enum class EDatasmithTextureFilter : uint8
135 {
136  Nearest,
137  Bilinear,
138  Trilinear,
139  /** Use setting from the Texture Group. */
140  Default
141 };
142 
143 /** Texture address mode for textures. Note: Preserve enum order. */
144 UENUM()
145 enum class EDatasmithTextureAddress : uint8
146 {
147  Wrap,
148  Clamp,
149  Mirror
150 };
151 
152 /** Texture format for raw data importing. */
153 UENUM()
154 enum class EDatasmithTextureFormat
155 {
156  PNG,
157  JPEG
158 };
159 
160 /**
161  * Regular: lambertians, glossy materials and almost every type of material but glass, metal or highly reflective.
162  * Glass: glass material, it should have appropriate index of refraction and transparency
163  * Metal: to be considered a metal material it should have a proper reflective ior
164  * MixedMetal: highly reflective non-metallic materials
165  */
166 enum class EDatasmithMaterialMode
167 {
168  Regular,
169  Glass,
170  Metal,
171  MixedMetal
172 };
173 
174 enum class EDatasmithMasterMaterialType
175 {
176  /** Let Datasmith figure which master material to use */
177  Auto,
178  Opaque,
179  Transparent,
180  ClearCoat,
181  /** Instantiate a master material from a specified one */
182  Custom,
183  /** Material has a transparent cutout map */
184  CutOut,
185  /** Dummy element to count the number of types */
186  Count
187 };
188 
189 enum class EDatasmithMasterMaterialQuality
190 {
191  High,
192  Low,
193  /** Dummy element to count the number of qualities */
194  Count
195 };
196 
197 /**
198  * Different methods for mixing textures:
199  * Just one texture
200  * Mix blended by weight
201  * Fresnel using a fresnel weight expression
202  * Ior using a fresnel weight expression where its curve is defined by the ior value
203  * ColorCorrectGamma color correct over the texture
204  * ColorCorrectContrast color correct over the texture
205  * Multiply simple multiplication of textures
206  * Composite blending used common image editor modes
207  */
208 enum class EDatasmithCompMode
209 {
210  Regular,
211  Mix,
212  Fresnel,
213  Ior,
214  ColorCorrectGamma,
215  ColorCorrectContrast,
216  Multiply,
217  Composite
218 };
219 
220 /** classic blend modes used in image editors */
221 enum class EDatasmithCompositeCompMode
222 {
223  Alpha,
224  Average,
225  Add,
226  Sub,
227  Mult,
228  Burn,
229  Dodge,
230  Darken,
231  Difference,
232  Exclusion,
233  HardLight,
234  Lighten,
235  Screen,
236  LinearBurn,
237  LinearDodge,
238  LinearLight,
239  Overlay,
240  PinLight,
241  SoftLight,
242  Hue,
243  Saturation,
244  Color,
245  Value
246 };
247 
248 /** material blend modes */
249 enum class EDatasmithBlendMode
250 {
251  Alpha,
252  ClearCoat,
253  Screen,
254  Softlight
255 };
256 
257 /** Key-value property */
258 UENUM(BlueprintType)
259 enum class EDatasmithKeyValuePropertyType : uint8
260 {
261  String,
262  Color,
263  Float,
264  Bool,
265  Texture,
266  Vector
267 };
268 
269 /**
270  * Analog to UE material domain, besides UE has some other modes currently we only support Surface and LightFunction.
271  * since GUI, postproduction materials and so are out of the scope of Datasmith
272  */
273 enum class EDatasmithShaderUsage
274 {
275  Surface,
276  LightFunction
277 };
278 
279 UENUM()
280 enum class EDatasmithActorRemovalRule : uint8
281 {
282  /** Remove also the actors children */
283  RemoveChildren,
284 
285  /** Keeps current relative transform as the relative transform to the new parent. */
286  KeepChildrenAndKeepRelativeTransform,
287 
288  /** Automatically calculates the relative transform such that the attached component maintains the same world transform. */
289  //KeepChildrenAndKeepWorldTransform,
290 };
291 
292 UENUM()
293 enum class EDatasmithActorAttachmentRule : uint8
294 {
295  /** Keeps current relative transform as the relative transform to the new parent. */
296  KeepRelativeTransform,
297 
298  /** The attached actor or component will maintain the same world transform. */
299  KeepWorldTransform,
300 };
301 
302 /** Supported transform types for animations */
303 enum class EDatasmithTransformType : uint8
304 {
305  Translation,
306  Rotation,
307  Scale,
308  Count
309 };
310 
311 /**
312  * Describes how an animated node should behave after its animation has completed
313  * Mirrors EMovieSceneCompletionMode
314  */
315 UENUM()
316 enum class EDatasmithCompletionMode : uint8
317 {
318  KeepState,
319  RestoreState,
320  ProjectDefault,
321 };
322 
323 static const TCHAR* KeyValuePropertyTypeStrings[] = { TEXT("String"), TEXT("Color"), TEXT("Float"), TEXT("Bool"), TEXT("Texture"), TEXT("Vector") };
324 
325 // HOST NAME
326 #define DATASMITH_HOSTNAME TEXT("Host")
327 
328 // DATASMITH EXPORTER VERSION
329 #define DATASMITH_EXPORTERVERSION TEXT("Version")
330 #define DATASMITH_EXPORTERSDKVERSION TEXT("SDKVersion")
331 
332 // APPLICATION INFO
333 #define DATASMITH_APPLICATION TEXT("Application")
334 #define DATASMITH_VENDOR TEXT("Vendor")
335 #define DATASMITH_PRODUCTNAME TEXT("ProductName")
336 #define DATASMITH_PRODUCTVERSION TEXT("ProductVersion")
337 
338 // USER INFO
339 #define DATASMITH_USER TEXT("User")
340 #define DATASMITH_USERID TEXT("ID")
341 #define DATASMITH_USEROS TEXT("OS")
342 
343 // EXPORT INFO
344 #define DATASMITH_EXPORT TEXT("Export")
345 #define DATASMITH_EXPORTDURATION TEXT("Duration")
346 
347 //ELEMENTS
348 #define DATASMITH_HASH TEXT("Hash")
349 #define DATASMITH_ENABLED TEXT("Enabled")
350 
351 //STATIC MESHES
352 #define DATASMITH_STATICMESHNAME TEXT("StaticMesh")
353 #define DATASMITH_LIGHTMAPCOORDINATEINDEX TEXT("LightmapCoordinateIndex")
354 #define DATASMITH_LIGHTMAPUVSOURCE TEXT("LightmapUV")
355 #define DATASMITH_MATERIAL TEXT("Material")
356 
357 #define DATASMITH_ACTORNAME TEXT("Actor")
358 
359 //ACTOR MESHES
360 #define DATASMITH_ACTORMESHNAME TEXT("ActorMesh")
361 
362 //ACTOR HIERARCHICAL INSTANCED STATIC MESH
363 #define DATASMITH_ACTORHIERARCHICALINSTANCEDMESHNAME TEXT("ActorHierarchicalInstancedStaticMesh")
364 
365 //LEVEL SEQUENCES
366 #define DATASMITH_LEVELSEQUENCENAME TEXT("LevelSequence")
367 
368 //LIGHTS
369 #define DATASMITH_LIGHTNAME TEXT("Light")
370 #define DATASMITH_POINTLIGHTNAME TEXT("PointLight")
371 #define DATASMITH_SPOTLIGHTNAME TEXT("SpotLight")
372 #define DATASMITH_AREALIGHTNAME TEXT("AreaLight")
373 #define DATASMITH_PORTALLIGHTNAME TEXT("SkyPortalLight")
374 #define DATASMITH_DIRECTLIGHTNAME TEXT("DirectionalLight")
375 #define DATASMITH_PHYSICALSKYNAME TEXT("PhysicalSky")
376 
377 #define DATASMITH_LIGHTCOLORNAME TEXT("Color")
378 #define DATASMITH_LIGHTUSETEMPNAME TEXT("usetemp")
379 #define DATASMITH_LIGHTTEMPNAME TEXT("temperature")
380 #define DATASMITH_LIGHTIESNAME TEXT("IES")
381 #define DATASMITH_LIGHTIESBRIGHTNAME TEXT("IESbrightness")
382 #define DATASMITH_LIGHTIESROTATION TEXT("IESrotation")
383 #define DATASMITH_LIGHTINTENSITYNAME TEXT("Intensity")
384 #define DATASMITH_LIGHTINTENSITYUNITSNAME TEXT("IntensityUnits")
385 #define DATASMITH_LIGHTSOURCESIZENAME TEXT("SourceSize")
386 #define DATASMITH_LIGHTSOURCELENGTHNAME TEXT("SourceLength")
387 #define DATASMITH_LIGHTATTENUATIONRADIUSNAME TEXT("AttenuationRadius")
388 #define DATASMITH_LIGHTINNERRADIUSNAME TEXT("InnerConeAngle")
389 #define DATASMITH_LIGHTOUTERRADIUSNAME TEXT("OuterConeAngle")
390 #define DATASMITH_LIGHTMATERIAL TEXT("Material")
391 
392 #define DATASMITH_AREALIGHTSHAPE TEXT("Shape")
393 #define DATASMITH_AREALIGHTDISTRIBUTION TEXT("Distribution") // Deprecated
394 #define DATASMITH_AREALIGHTTYPE TEXT("LightType")
395 
396 //POSTPRODUCTION
397 #define DATASMITH_POSTPRODUCTIONNAME TEXT("Post")
398 #define DATASMITH_POSTPRODUCTIONTEMP TEXT("Temperature")
399 #define DATASMITH_POSTPRODUCTIONCOLOR TEXT("Color")
400 #define DATASMITH_POSTPRODUCTIONDISTANCE TEXT("Distance")
401 #define DATASMITH_POSTPRODUCTIONVIGNETTE TEXT("Vignette")
402 #define DATASMITH_POSTPRODUCTIONSATURATION TEXT("Saturation")
403 #define DATASMITH_POSTPRODUCTIONCAMERAISO TEXT("CameraISO")
404 #define DATASMITH_POSTPRODUCTIONSHUTTERSPEED TEXT("ShutterSpeed")
405 
406 //CAMERAS
407 #define DATASMITH_CAMERANAME TEXT("Camera")
408 #define DATASMITH_SENSORWIDTH TEXT("SensorWidth")
409 #define DATASMITH_SENSORASPECT TEXT("SensorAspectRatio")
410 #define DATASMITH_DEPTHOFFIELD TEXT("DepthOfField")
411 #define DATASMITH_FOCUSDISTANCE TEXT("FocusDistance")
412 #define DATASMITH_FSTOP TEXT("FStop")
413 #define DATASMITH_FOCALLENGTH TEXT("FocalLength")
414 #define DATASMITH_LOOKAT TEXT("LookAt")
415 #define DATASMITH_LOOKATROLL TEXT("LookAtRollAllowed")
416 
417 //CUSTOM ACTOR
418 #define DATASMITH_CUSTOMACTORNAME TEXT("CustomActor")
419 #define DATASMITH_CUSTOMACTORPATHNAME TEXT("PathName")
420 
421 // LANDSCAPE
422 #define DATASMITH_LANDSCAPENAME TEXT("Landscape")
423 #define DATASMITH_HEIGHTMAPNAME TEXT("Heightmap")
424 #define DATASMITH_PATHNAME TEXT("PathName")
425 
426 // POST PROCESS VOLUME
427 #define DATASMITH_POSTPROCESSVOLUME TEXT("PostProcessVolume")
428 #define DATASMITH_POSTPROCESSVOLUME_UNBOUND TEXT("Unbound")
429 
430 // METADATA
431 #define DATASMITH_METADATANAME TEXT("MetaData")
432 #define DATASMITH_REFERENCENAME TEXT("reference")
433 
434 //KEY-VALUE
435 #define DATASMITH_KEYVALUEPROPERTYNAME TEXT("KeyValueProperty")
436 
437 //TEXTURES
438 #define DATASMITH_TEXTUREMODE TEXT("TextureMode")
439 #define DATASMITH_TEXTURERESIZE TEXT("AllowResize")
440 
441 //MATERIALS
442 #define DATASMITH_SHADERNAME TEXT("Shader")
443 #define DATASMITH_MATERIALNAME TEXT("Material")
444 #define DATASMITH_PARENTMATERIALLABEL TEXT("ParentLabel")
445 #define DATASMITH_UEPBRMATERIALNAME TEXT("UEPbrMaterial")
446 
447 #define DATASMITH_MASTERMATERIALNAME TEXT("MasterMaterial")
448 #define DATASMITH_MASTERMATERIALTYPE TEXT("Type")
449 #define DATASMITH_MASTERMATERIALQUALITY TEXT("Quality")
450 #define DATASMITH_MASTERMATERIALPATHNAME TEXT("PathName")
451 
452 #define DATASMITH_TEXTURENAME TEXT("Texture")
453 #define DATASMITH_TEXTURECOMPNAME TEXT("Texturecomp")
454 #define DATASMITH_COLORNAME TEXT("Color")
455 #define DATASMITH_MASKNAME TEXT("Mask")
456 #define DATASMITH_MASKCOLOR TEXT("MaskColor")
457 #define DATASMITH_MASKCOMPNAME TEXT("Maskcomp")
458 #define DATASMITH_VALUE1NAME TEXT("Value1")
459 #define DATASMITH_VALUE2NAME TEXT("Value2")
460 #define DATASMITH_ENVIRONMENTNAME TEXT("Environment")
461 
462 #define DATASMITH_DIFFUSETEXNAME TEXT("Diffuse")
463 #define DATASMITH_DIFFUSECOLNAME TEXT("Diffusecolor")
464 #define DATASMITH_DIFFUSECOMPNAME TEXT("Diffusecomp")
465 
466 #define DATASMITH_REFLETEXNAME TEXT("Reflectance")
467 #define DATASMITH_REFLECOLNAME TEXT("Reflectancecolor")
468 #define DATASMITH_REFLECOMPNAME TEXT("Reflectancecomp")
469 
470 #define DATASMITH_ROUGHNESSTEXNAME TEXT("Roughness")
471 #define DATASMITH_ROUGHNESSVALUENAME TEXT("Roughnessval")
472 #define DATASMITH_ROUGHNESSCOMPNAME TEXT("Roughnesscomp")
473 
474 #define DATASMITH_CLIPTEXNAME TEXT("Clip")
475 #define DATASMITH_CLIPCOMPNAME TEXT("Clipcomp")
476 
477 #define DATASMITH_TRANSPTEXNAME TEXT("RefractionTransparency")
478 #define DATASMITH_TRANSPCOLNAME TEXT("RefractionTransparencycolor")
479 #define DATASMITH_TRANSPCOMPNAME TEXT("RefractionTransparencycomp")
480 
481 #define DATASMITH_NORMALTEXNAME TEXT("Normal")
482 #define DATASMITH_NORMALCOMPNAME TEXT("Normalcomp")
483 #define DATASMITH_BUMPTEXNAME TEXT("Bump")
484 #define DATASMITH_BUMPCOMPNAME TEXT("Bumpcomp")
485 
486 #define DATASMITH_USEMATERIALATTRIBUTESNAME TEXT("UseMaterialAttributes")
487 #define DATASMITH_FUNCTIONLYVALUENAME TEXT("FunctionOnly")
488 #define DATASMITH_TWOSIDEDVALUENAME TEXT("TwoSided")
489 #define DATASMITH_BUMPVALUENAME TEXT("Bumpval")
490 #define DATASMITH_IORVALUENAME TEXT("IOR")
491 #define DATASMITH_IORKVALUENAME TEXT("IORk")
492 #define DATASMITH_REFRAIORVALUENAME TEXT("IORRefraction")
493 
494 #define DATASMITH_DISPLACETEXNAME TEXT("Displace")
495 #define DATASMITH_DISPLACEVALNAME TEXT("Displaceval")
496 #define DATASMITH_DISPLACECOMPNAME TEXT("Displacecomp")
497 #define DATASMITH_DISPLACESUBNAME TEXT("DisplaceSubdivisionval")
498 
499 #define DATASMITH_METALTEXNAME TEXT("Metal")
500 #define DATASMITH_METALVALUENAME TEXT("Metalval")
501 #define DATASMITH_METALCOMPNAME TEXT("Metalcomp")
502 
503 #define DATASMITH_EMITTEXNAME TEXT("Emittance")
504 #define DATASMITH_EMITCOLNAME TEXT("Emittancecolor")
505 #define DATASMITH_EMITCOMPNAME TEXT("Emittancecomp")
506 #define DATASMITH_EMITTEMPNAME TEXT("Emittancetemp")
507 #define DATASMITH_EMITVALUENAME TEXT("Emittanceval")
508 #define DATASMITH_EMITONLYVALUENAME TEXT("EmitOnly")
509 #define DATASMITH_DYNAMICEMISSIVE TEXT("DynamicEmissive")
510 #define DATASMITH_SHADERUSAGE TEXT("ShaderUsage")
511 
512 #define DATASMITH_WEIGHTTEXNAME TEXT("Weight")
513 #define DATASMITH_WEIGHTCOLNAME TEXT("Weightcolor")
514 #define DATASMITH_WEIGHTCOMPNAME TEXT("Weightcomp")
515 #define DATASMITH_WEIGHTVALUENAME TEXT("Weightval")
516 
517 #define DATASMITH_STACKLAYER TEXT("Stacked")
518 #define DATASMITH_BLENDMODE TEXT("Blendmode")
519 
520 #define DATASMITH_ENVILLUMINATIONMAP TEXT("Illuminate")
521 
522 //LODS
523 #define DATASMITH_LODSCREENSIZE TEXT("LodScreenSize")