postprocess.py 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577
  1. # <hr>Calculates the tangents and bitangents for the imported meshes.
  2. #
  3. # Does nothing if a mesh does not have normals. You might want this post
  4. # processing step to be executed if you plan to use tangent space calculations
  5. # such as normal mapping applied to the meshes. There's a config setting,
  6. # <tt>#AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE<tt>, which allows you to specify
  7. # a maximum smoothing angle for the algorithm. However, usually you'll
  8. # want to leave it at the default value.
  9. #
  10. aiProcess_CalcTangentSpace = 0x1
  11. ## <hr>Identifies and joins identical vertex data sets within all
  12. # imported meshes.
  13. #
  14. # After this step is run, each mesh contains unique vertices,
  15. # so a vertex may be used by multiple faces. You usually want
  16. # to use this post processing step. If your application deals with
  17. # indexed geometry, this step is compulsory or you'll just waste rendering
  18. # time. <b>If this flag is not specified<b>, no vertices are referenced by
  19. # more than one face and <b>no index buffer is required<b> for rendering.
  20. #
  21. aiProcess_JoinIdenticalVertices = 0x2
  22. ## <hr>Converts all the imported data to a left-handed coordinate space.
  23. #
  24. # By default the data is returned in a right-handed coordinate space (which
  25. # OpenGL prefers). In this space, +X points to the right,
  26. # +Z points towards the viewer, and +Y points upwards. In the DirectX
  27. # coordinate space +X points to the right, +Y points upwards, and +Z points
  28. # away from the viewer.
  29. #
  30. # You'll probably want to consider this flag if you use Direct3D for
  31. # rendering. The #aiProcess_ConvertToLeftHanded flag supersedes this
  32. # setting and bundles all conversions typically required for D3D-based
  33. # applications.
  34. #
  35. aiProcess_MakeLeftHanded = 0x4
  36. ## <hr>Triangulates all faces of all meshes.
  37. #
  38. # By default the imported mesh data might contain faces with more than 3
  39. # indices. For rendering you'll usually want all faces to be triangles.
  40. # This post processing step splits up faces with more than 3 indices into
  41. # triangles. Line and point primitives are *not* modified! If you want
  42. # 'triangles only' with no other kinds of primitives, try the following
  43. # solution:
  44. # - Specify both #aiProcess_Triangulate and #aiProcess_SortByPType
  45. # - Ignore all point and line meshes when you process assimp's output
  46. #
  47. aiProcess_Triangulate = 0x8
  48. # <hr>Removes some parts of the data structure (animations, materials,
  49. # light sources, cameras, textures, vertex components).
  50. #
  51. # The components to be removed are specified in a separate
  52. # configuration option, <tt>#AI_CONFIG_PP_RVC_FLAGS<tt>. This is quite useful
  53. # if you don't need all parts of the output structure. Vertex colors
  54. # are rarely used today for example... Calling this step to remove unneeded
  55. # data from the pipeline as early as possible results in increased
  56. # performance and a more optimized output data structure.
  57. # This step is also useful if you want to force Assimp to recompute
  58. # normals or tangents. The corresponding steps don't recompute them if
  59. # they're already there (loaded from the source asset). By using this
  60. # step you can make sure they are NOT there.
  61. #
  62. # This flag is a poor one, mainly because its purpose is usually
  63. # misunderstood. Consider the following case: a 3D model has been exported
  64. # from a CAD app, and it has per-face vertex colors. Vertex positions can't be
  65. # shared, thus the #aiProcess_JoinIdenticalVertices step fails to
  66. # optimize the data because of these nasty little vertex colors.
  67. # Most apps don't even process them, so it's all for nothing. By using
  68. # this step, unneeded components are excluded as early as possible
  69. # thus opening more room for internal optimizations.
  70. #
  71. aiProcess_RemoveComponent = 0x10
  72. ## <hr>Generates normals for all faces of all meshes.
  73. #
  74. # This is ignored if normals are already there at the time this flag
  75. # is evaluated. Model importers try to load them from the source file, so
  76. # they're usually already there. Face normals are shared between all points
  77. # of a single face, so a single point can have multiple normals, which
  78. # forces the library to duplicate vertices in some cases.
  79. # #aiProcess_JoinIdenticalVertices is #senseless# then.
  80. #
  81. # This flag may not be specified together with #aiProcess_GenSmoothNormals.
  82. #
  83. aiProcess_GenNormals = 0x20
  84. ## <hr>Generates smooth normals for all vertices in the mesh.
  85. #
  86. # This is ignored if normals are already there at the time this flag
  87. # is evaluated. Model importers try to load them from the source file, so
  88. # they're usually already there.
  89. #
  90. # This flag may not be specified together with
  91. # #aiProcess_GenNormals. There's a configuration option,
  92. # <tt>#AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE<tt> which allows you to specify
  93. # an angle maximum for the normal smoothing algorithm. Normals exceeding
  94. # this limit are not smoothed, resulting in a 'hard' seam between two faces.
  95. # Using a decent angle here (e.g. 80 degrees) results in very good visual
  96. # appearance.
  97. #
  98. aiProcess_GenSmoothNormals = 0x40
  99. ## <hr>Splits large meshes into smaller sub-meshes.
  100. #
  101. # This is quite useful for real-time rendering, where the number of triangles
  102. # which can be maximally processed in a single draw-call is limited
  103. # by the video driverhardware. The maximum vertex buffer is usually limited
  104. # too. Both requirements can be met with this step: you may specify both a
  105. # triangle and vertex limit for a single mesh.
  106. #
  107. # The split limits can (and should!) be set through the
  108. # <tt>#AI_CONFIG_PP_SLM_VERTEX_LIMIT<tt> and <tt>#AI_CONFIG_PP_SLM_TRIANGLE_LIMIT<tt>
  109. # settings. The default values are <tt>#AI_SLM_DEFAULT_MAX_VERTICES<tt> and
  110. # <tt>#AI_SLM_DEFAULT_MAX_TRIANGLES<tt>.
  111. #
  112. # Note that splitting is generally a time-consuming task, but only if there's
  113. # something to split. The use of this step is recommended for most users.
  114. #
  115. aiProcess_SplitLargeMeshes = 0x80
  116. ## <hr>Removes the node graph and pre-transforms all vertices with
  117. # the local transformation matrices of their nodes.
  118. #
  119. # The output scene still contains nodes, however there is only a
  120. # root node with children, each one referencing only one mesh,
  121. # and each mesh referencing one material. For rendering, you can
  122. # simply render all meshes in order - you don't need to pay
  123. # attention to local transformations and the node hierarchy.
  124. # Animations are removed during this step.
  125. # This step is intended for applications without a scenegraph.
  126. # The step CAN cause some problems: if e.g. a mesh of the asset
  127. # contains normals and another, using the same material index, does not,
  128. # they will be brought together, but the first meshes's part of
  129. # the normal list is zeroed. However, these artifacts are rare.
  130. # @note The <tt>#AI_CONFIG_PP_PTV_NORMALIZE<tt> configuration property
  131. # can be set to normalize the scene's spatial dimension to the -1...1
  132. # range.
  133. #
  134. aiProcess_PreTransformVertices = 0x100
  135. ## <hr>Limits the number of bones simultaneously affecting a single vertex
  136. # to a maximum value.
  137. #
  138. # If any vertex is affected by more than the maximum number of bones, the least
  139. # important vertex weights are removed and the remaining vertex weights are
  140. # renormalized so that the weights still sum up to 1.
  141. # The default bone weight limit is 4 (defined as <tt>#AI_LMW_MAX_WEIGHTS<tt> in
  142. # config.h), but you can use the <tt>#AI_CONFIG_PP_LBW_MAX_WEIGHTS<tt> setting to
  143. # supply your own limit to the post processing step.
  144. #
  145. # If you intend to perform the skinning in hardware, this post processing
  146. # step might be of interest to you.
  147. #
  148. aiProcess_LimitBoneWeights = 0x200
  149. ## <hr>Validates the imported scene data structure.
  150. # This makes sure that all indices are valid, all animations and
  151. # bones are linked correctly, all material references are correct .. etc.
  152. #
  153. # It is recommended that you capture Assimp's log output if you use this flag,
  154. # so you can easily find out what's wrong if a file fails the
  155. # validation. The validator is quite strict and will find #all#
  156. # inconsistencies in the data structure... It is recommended that plugin
  157. # developers use it to debug their loaders. There are two types of
  158. # validation failures:
  159. # <ul>
  160. # <li>Error: There's something wrong with the imported data. Further
  161. # postprocessing is not possible and the data is not usable at all.
  162. # The import fails. #Importer::GetErrorString() or #aiGetErrorString()
  163. # carry the error message around.<li>
  164. # <li>Warning: There are some minor issues (e.g. 1000000 animation
  165. # keyframes with the same time), but further postprocessing and use
  166. # of the data structure is still safe. Warning details are written
  167. # to the log file, <tt>#AI_SCENE_FLAGS_VALIDATION_WARNING<tt> is set
  168. # in #aiScene::mFlags<li>
  169. # <ul>
  170. #
  171. # This post-processing step is not time-consuming. Its use is not
  172. # compulsory, but recommended.
  173. #
  174. aiProcess_ValidateDataStructure = 0x400
  175. ## <hr>Reorders triangles for better vertex cache locality.
  176. #
  177. # The step tries to improve the ACMR (average post-transform vertex cache
  178. # miss ratio) for all meshes. The implementation runs in O(n) and is
  179. # roughly based on the 'tipsify' algorithm (see <a href="
  180. # http:www.cs.princeton.edugfxpubsSander_2007_%3ETRtipsy.pdf">this
  181. # paper<a>).
  182. #
  183. # If you intend to render huge models in hardware, this step might
  184. # be of interest to you. The <tt>#AI_CONFIG_PP_ICL_PTCACHE_SIZE<tt>config
  185. # setting can be used to fine-tune the cache optimization.
  186. #
  187. aiProcess_ImproveCacheLocality = 0x800
  188. ## <hr>Searches for redundantunreferenced materials and removes them.
  189. #
  190. # This is especially useful in combination with the
  191. # #aiProcess_PretransformVertices and #aiProcess_OptimizeMeshes flags.
  192. # Both join small meshes with equal characteristics, but they can't do
  193. # their work if two meshes have different materials. Because several
  194. # material settings are lost during Assimp's import filters,
  195. # (and because many exporters don't check for redundant materials), huge
  196. # models often have materials which are are defined several times with
  197. # exactly the same settings.
  198. #
  199. # Several material settings not contributing to the final appearance of
  200. # a surface are ignored in all comparisons (e.g. the material name).
  201. # So, if you're passing additional information through the
  202. # content pipeline (probably using #magic# material names), don't
  203. # specify this flag. Alternatively take a look at the
  204. # <tt>#AI_CONFIG_PP_RRM_EXCLUDE_LIST<tt> setting.
  205. #
  206. aiProcess_RemoveRedundantMaterials = 0x1000
  207. ## <hr>This step tries to determine which meshes have normal vectors
  208. # that are facing inwards and inverts them.
  209. #
  210. # The algorithm is simple but effective:
  211. # the bounding box of all vertices + their normals is compared against
  212. # the volume of the bounding box of all vertices without their normals.
  213. # This works well for most objects, problems might occur with planar
  214. # surfaces. However, the step tries to filter such cases.
  215. # The step inverts all in-facing normals. Generally it is recommended
  216. # to enable this step, although the result is not always correct.
  217. #
  218. aiProcess_FixInfacingNormals = 0x2000
  219. ## This step generically populates aiBone->mArmature and aiBone->mNode generically
  220. # The point of these is it saves you later having to calculate these elements
  221. # This is useful when handling rest information or skin information
  222. # If you have multiple armatures on your models we strongly recommend enabling this
  223. # Instead of writing your own multi-root, multi-armature lookups we have done the
  224. # hard work for you :)
  225. aiProcess_PopulateArmatureData = 0x4000
  226. ## <hr>This step splits meshes with more than one primitive type in
  227. # homogeneous sub-meshes.
  228. #
  229. # The step is executed after the triangulation step. After the step
  230. # returns, just one bit is set in aiMesh::mPrimitiveTypes. This is
  231. # especially useful for real-time rendering where point and line
  232. # primitives are often ignored or rendered separately.
  233. # You can use the <tt>#AI_CONFIG_PP_SBP_REMOVE<tt> option to specify which
  234. # primitive types you need. This can be used to easily exclude
  235. # lines and points, which are rarely used, from the import.
  236. #
  237. aiProcess_SortByPType = 0x8000
  238. ## <hr>This step searches all meshes for degenerate primitives and
  239. # converts them to proper lines or points.
  240. #
  241. # A face is 'degenerate' if one or more of its points are identical.
  242. # To have the degenerate stuff not only detected and collapsed but
  243. # removed, try one of the following procedures:
  244. # <br><b>1.<b> (if you support lines and points for rendering but don't
  245. # want the degenerates)<br>
  246. # <ul>
  247. # <li>Specify the #aiProcess_FindDegenerates flag.
  248. # <li>
  249. # <li>Set the <tt>AI_CONFIG_PP_FD_REMOVE<tt> option to 1. This will
  250. # cause the step to remove degenerate triangles from the import
  251. # as soon as they're detected. They won't pass any further
  252. # pipeline steps.
  253. # <li>
  254. # <ul>
  255. # <br><b>2.<b>(if you don't support lines and points at all)<br>
  256. # <ul>
  257. # <li>Specify the #aiProcess_FindDegenerates flag.
  258. # <li>
  259. # <li>Specify the #aiProcess_SortByPType flag. This moves line and
  260. # point primitives to separate meshes.
  261. # <li>
  262. # <li>Set the <tt>AI_CONFIG_PP_SBP_REMOVE<tt> option to
  263. # @code aiPrimitiveType_POINT | aiPrimitiveType_LINE
  264. # @endcode to cause SortByPType to reject point
  265. # and line meshes from the scene.
  266. # <li>
  267. # <ul>
  268. # @note Degenerate polygons are not necessarily evil and that's why
  269. # they're not removed by default. There are several file formats which
  270. # don't support lines or points, and some exporters bypass the
  271. # format specification and write them as degenerate triangles instead.
  272. #
  273. aiProcess_FindDegenerates = 0x10000
  274. ## <hr>This step searches all meshes for invalid data, such as zeroed
  275. # normal vectors or invalid UV coords and removesfixes them. This is
  276. # intended to get rid of some common exporter errors.
  277. #
  278. # This is especially useful for normals. If they are invalid, and
  279. # the step recognizes this, they will be removed and can later
  280. # be recomputed, i.e. by the #aiProcess_GenSmoothNormals flag.<br>
  281. # The step will also remove meshes that are infinitely small and reduce
  282. # animation tracks consisting of hundreds if redundant keys to a single
  283. # key. The <tt>AI_CONFIG_PP_FID_ANIM_ACCURACY<tt> config property decides
  284. # the accuracy of the check for duplicate animation tracks.
  285. #
  286. aiProcess_FindInvalidData = 0x20000
  287. ## <hr>This step converts non-UV mappings (such as spherical or
  288. # cylindrical mapping) to proper texture coordinate channels.
  289. #
  290. # Most applications will support UV mapping only, so you will
  291. # probably want to specify this step in every case. Note that Assimp is not
  292. # always able to match the original mapping implementation of the
  293. # 3D app which produced a model perfectly. It's always better to let the
  294. # modelling app compute the UV channels - 3ds max, Maya, Blender,
  295. # LightWave, and Modo do this for example.
  296. #
  297. # @note If this step is not requested, you'll need to process the
  298. # <tt>#AI_MATKEY_MAPPING<tt> material property in order to display all assets
  299. # properly.
  300. #
  301. aiProcess_GenUVCoords = 0x40000
  302. ## <hr>This step applies per-texture UV transformations and bakes
  303. # them into stand-alone vtexture coordinate channels.
  304. #
  305. # UV transformations are specified per-texture - see the
  306. # <tt>#AI_MATKEY_UVTRANSFORM<tt> material key for more information.
  307. # This step processes all textures with
  308. # transformed input UV coordinates and generates a new (pre-transformed) UV channel
  309. # which replaces the old channel. Most applications won't support UV
  310. # transformations, so you will probably want to specify this step.
  311. #
  312. # @note UV transformations are usually implemented in real-time apps by
  313. # transforming texture coordinates at vertex shader stage with a 3x3
  314. # (homogenous) transformation matrix.
  315. #
  316. aiProcess_TransformUVCoords = 0x80000
  317. ## <hr>This step searches for duplicate meshes and replaces them
  318. # with references to the first mesh.
  319. #
  320. # This step takes a while, so don't use it if speed is a concern.
  321. # Its main purpose is to workaround the fact that many export
  322. # file formats don't support instanced meshes, so exporters need to
  323. # duplicate meshes. This step removes the duplicates again. Please
  324. # note that Assimp does not currently support per-node material
  325. # assignment to meshes, which means that identical meshes with
  326. # different materials are currently #not# joined, although this is
  327. # planned for future versions.
  328. #
  329. aiProcess_FindInstances = 0x100000
  330. ## <hr>A postprocessing step to reduce the number of meshes.
  331. #
  332. # This will, in fact, reduce the number of draw calls.
  333. #
  334. # This is a very effective optimization and is recommended to be used
  335. # together with #aiProcess_OptimizeGraph, if possible. The flag is fully
  336. # compatible with both #aiProcess_SplitLargeMeshes and #aiProcess_SortByPType.
  337. #
  338. aiProcess_OptimizeMeshes = 0x200000
  339. ## <hr>A postprocessing step to optimize the scene hierarchy.
  340. #
  341. # Nodes without animations, bones, lights or cameras assigned are
  342. # collapsed and joined.
  343. #
  344. # Node names can be lost during this step. If you use special 'tag nodes'
  345. # to pass additional information through your content pipeline, use the
  346. # <tt>#AI_CONFIG_PP_OG_EXCLUDE_LIST<tt> setting to specify a list of node
  347. # names you want to be kept. Nodes matching one of the names in this list won't
  348. # be touched or modified.
  349. #
  350. # Use this flag with caution. Most simple files will be collapsed to a
  351. # single node, so complex hierarchies are usually completely lost. This is not
  352. # useful for editor environments, but probably a very effective
  353. # optimization if you just want to get the model data, convert it to your
  354. # own format, and render it as fast as possible.
  355. #
  356. # This flag is designed to be used with #aiProcess_OptimizeMeshes for best
  357. # results.
  358. #
  359. # @note 'Crappy' scenes with thousands of extremely small meshes packed
  360. # in deeply nested nodes exist for almost all file formats.
  361. # #aiProcess_OptimizeMeshes in combination with #aiProcess_OptimizeGraph
  362. # usually fixes them all and makes them renderable.
  363. #
  364. aiProcess_OptimizeGraph = 0x400000
  365. ## <hr>This step flips all UV coordinates along the y-axis and adjusts
  366. # material settings and bitangents accordingly.
  367. #
  368. # <b>Output UV coordinate system:<b>
  369. # @code
  370. # 0x|0y ---------- 1x|0y
  371. # | |
  372. # | |
  373. # | |
  374. # 0x|1y ---------- 1x|1y
  375. # @endcode
  376. #
  377. # You'll probably want to consider this flag if you use Direct3D for
  378. # rendering. The #aiProcess_ConvertToLeftHanded flag supersedes this
  379. # setting and bundles all conversions typically required for D3D-based
  380. # applications.
  381. #
  382. aiProcess_FlipUVs = 0x800000
  383. ## <hr>This step adjusts the output face winding order to be CW.
  384. #
  385. # The default face winding order is counter clockwise (CCW).
  386. #
  387. # <b>Output face order:<b>
  388. # @code
  389. # x2
  390. #
  391. # x0
  392. # x1
  393. # @endcode
  394. #
  395. aiProcess_FlipWindingOrder = 0x1000000
  396. ## <hr>This step splits meshes with many bones into sub-meshes so that each
  397. # su-bmesh has fewer or as many bones as a given limit.
  398. #
  399. aiProcess_SplitByBoneCount = 0x2000000
  400. ## <hr>This step removes bones losslessly or according to some threshold.
  401. #
  402. # In some cases (i.e. formats that require it) exporters are forced to
  403. # assign dummy bone weights to otherwise static meshes assigned to
  404. # animated meshes. Full, weight-based skinning is expensive while
  405. # animating nodes is extremely cheap, so this step is offered to clean up
  406. # the data in that regard.
  407. #
  408. # Use <tt>#AI_CONFIG_PP_DB_THRESHOLD<tt> to control this.
  409. # Use <tt>#AI_CONFIG_PP_DB_ALL_OR_NONE<tt> if you want bones removed if and
  410. # only if all bones within the scene qualify for removal.
  411. #
  412. aiProcess_Debone = 0x4000000
  413. ## <hr>This step will perform a global scale of the model.
  414. #
  415. # Some importers are providing a mechanism to define a scaling unit for the
  416. # model. This post processing step can be used to do so. You need to get the
  417. # global scaling from your importer settings like in FBX. Use the flag
  418. # AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY from the global property table to configure this.
  419. #
  420. # Use <tt>#AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY</tt> to setup the global scaling factor.
  421. #
  422. aiProcess_GlobalScale = 0x8000000
  423. ## <hr>A postprocessing step to embed of textures.
  424. #
  425. # This will remove external data dependencies for textures.
  426. # If a texture's file does not exist at the specified path
  427. # (due, for instance, to an absolute path generated on another system),
  428. # it will check if a file with the same name exists at the root folder
  429. # of the imported model. And if so, it uses that.
  430. #
  431. aiProcess_EmbedTextures = 0x10000000
  432. ##
  433. #
  434. aiProcess_ForceGenNormals = 0x20000000
  435. ## <hr>Drops normals for all faces of all meshes.
  436. #
  437. # This is ignored if no normals are present.
  438. # Face normals are shared between all points of a single face,
  439. # so a single point can have multiple normals, which
  440. # forces the library to duplicate vertices in some cases.
  441. # #aiProcess_JoinIdenticalVertices is *senseless* then.
  442. # This process gives sense back to aiProcess_JoinIdenticalVertices
  443. #
  444. aiProcess_DropNormals = 0x40000000,
  445. ##
  446. #
  447. aiProcess_GenBoundingBoxes = 0x80000000
  448. aiProcess_GenEntityMeshes = 0x100000
  449. aiProcess_OptimizeAnimations = 0x200000
  450. aiProcess_FixTexturePaths = 0x200000
  451. aiProcess_EmbedTextures = 0x10000000,
  452. ## @def aiProcess_ConvertToLeftHanded
  453. # @brief Shortcut flag for Direct3D-based applications.
  454. #
  455. # Supersedes the #aiProcess_MakeLeftHanded and #aiProcess_FlipUVs and
  456. # #aiProcess_FlipWindingOrder flags.
  457. # The output data matches Direct3D's conventions: left-handed geometry, upper-left
  458. # origin for UV coordinates and finally clockwise face order, suitable for CCW culling.
  459. #
  460. # @deprecated
  461. #
  462. aiProcess_ConvertToLeftHanded = ( \
  463. aiProcess_MakeLeftHanded | \
  464. aiProcess_FlipUVs | \
  465. aiProcess_FlipWindingOrder | \
  466. 0 )
  467. ## @def aiProcessPreset_TargetRealtimeUse_Fast
  468. # @brief Default postprocess configuration optimizing the data for real-time rendering.
  469. #
  470. # Applications would want to use this preset to load models on end-user PCs,
  471. # maybe for direct use in game.
  472. #
  473. # If you're using DirectX, don't forget to combine this value with
  474. # the #aiProcess_ConvertToLeftHanded step. If you don't support UV transformations
  475. # in your application apply the #aiProcess_TransformUVCoords step, too.
  476. # @note Please take the time to read the docs for the steps enabled by this preset.
  477. # Some of them offer further configurable properties, while some of them might not be of
  478. # use for you so it might be better to not specify them.
  479. #
  480. aiProcessPreset_TargetRealtime_Fast = ( \
  481. aiProcess_CalcTangentSpace | \
  482. aiProcess_GenNormals | \
  483. aiProcess_JoinIdenticalVertices | \
  484. aiProcess_Triangulate | \
  485. aiProcess_GenUVCoords | \
  486. aiProcess_SortByPType | \
  487. 0 )
  488. ## @def aiProcessPreset_TargetRealtime_Quality
  489. # @brief Default postprocess configuration optimizing the data for real-time rendering.
  490. #
  491. # Unlike #aiProcessPreset_TargetRealtime_Fast, this configuration
  492. # performs some extra optimizations to improve rendering speed and
  493. # to minimize memory usage. It could be a good choice for a level editor
  494. # environment where import speed is not so important.
  495. #
  496. # If you're using DirectX, don't forget to combine this value with
  497. # the #aiProcess_ConvertToLeftHanded step. If you don't support UV transformations
  498. # in your application apply the #aiProcess_TransformUVCoords step, too.
  499. # @note Please take the time to read the docs for the steps enabled by this preset.
  500. # Some of them offer further configurable properties, while some of them might not be
  501. # of use for you so it might be better to not specify them.
  502. #
  503. aiProcessPreset_TargetRealtime_Quality = ( \
  504. aiProcess_CalcTangentSpace | \
  505. aiProcess_GenSmoothNormals | \
  506. aiProcess_JoinIdenticalVertices | \
  507. aiProcess_ImproveCacheLocality | \
  508. aiProcess_LimitBoneWeights | \
  509. aiProcess_RemoveRedundantMaterials | \
  510. aiProcess_SplitLargeMeshes | \
  511. aiProcess_Triangulate | \
  512. aiProcess_GenUVCoords | \
  513. aiProcess_SortByPType | \
  514. aiProcess_FindDegenerates | \
  515. aiProcess_FindInvalidData | \
  516. 0 )
  517. ## @def aiProcessPreset_TargetRealtime_MaxQuality
  518. # @brief Default postprocess configuration optimizing the data for real-time rendering.
  519. #
  520. # This preset enables almost every optimization step to achieve perfectly
  521. # optimized data. It's your choice for level editor environments where import speed
  522. # is not important.
  523. #
  524. # If you're using DirectX, don't forget to combine this value with
  525. # the #aiProcess_ConvertToLeftHanded step. If you don't support UV transformations
  526. # in your application, apply the #aiProcess_TransformUVCoords step, too.
  527. # @note Please take the time to read the docs for the steps enabled by this preset.
  528. # Some of them offer further configurable properties, while some of them might not be
  529. # of use for you so it might be better to not specify them.
  530. #
  531. aiProcessPreset_TargetRealtime_MaxQuality = ( \
  532. aiProcessPreset_TargetRealtime_Quality | \
  533. aiProcess_FindInstances | \
  534. aiProcess_ValidateDataStructure | \
  535. aiProcess_OptimizeMeshes | \
  536. 0 )