Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
1.0.0:models [2023/02/23 11:52] – [The Better Loading] admin | 1.0.0:models [2023/02/23 12:20] – [Instanced Rendering] admin | ||
---|---|---|---|
Line 57: | Line 57: | ||
- All model data will be stored inside the *.fmx file of your form | - All model data will be stored inside the *.fmx file of your form | ||
- | The IDE will show up a loading window while it's setting up the model. | + | {{: |
+ | |||
+ | If the loading options dialog appears you can configure the import process. | ||
+ | But not all options are available for all formats. | ||
+ | |||
+ | * Ignore importing animations | ||
+ | * Animation caching settings | ||
+ | * Ignore importing lights or cameras | ||
+ | * Directly import additional animation files without an extra call | ||
+ | * Limit texture size, in case you have a memory-sensitive application | ||
+ | |||
+ | Afterwards the IDE will show up a loading window while importing. | ||
Because the data + textures are stored in the *.fmx of your form, it can become very large. | Because the data + textures are stored in the *.fmx of your form, it can become very large. | ||
This may slow down the performance of the IDE. | This may slow down the performance of the IDE. | ||
Line 325: | Line 337: | ||
To adopt the behaviour used in the IDE at design time, you can load model data from assets package | To adopt the behaviour used in the IDE at design time, you can load model data from assets package | ||
also at runtime by the following method. | also at runtime by the following method. | ||
+ | |||
+ | __NOTICE:__ This will trigger design time dialogs on loading data. If you don't want that dialogs to appear, please use LoadNewModelFromFile() or LoadFromFile(). | ||
<file pascal Form1.pas> | <file pascal Form1.pas> | ||
Line 455: | Line 469: | ||
==== TGorillaModel ==== | ==== TGorillaModel ==== | ||
- | A TGorillaModel is the head component for loaded models from file/asset. Even it's inherited from TGorillaMesh, | + | A TGorillaModel is the "head" |
sub-meshes, animations and materials. So a TGorillaModel needs to contain at least one TGorillaMesh in it's Meshes list. | sub-meshes, animations and materials. So a TGorillaModel needs to contain at least one TGorillaMesh in it's Meshes list. | ||
Line 530: | Line 544: | ||
- | ===== Instancing / Model duplication | + | ===== Instancing / Cloning |
==== Instanced Rendering ==== | ==== Instanced Rendering ==== | ||
Line 538: | Line 552: | ||
Use this method to render for example grass or trees. It is not recommended to use it for animated charaters, | Use this method to render for example grass or trees. It is not recommended to use it for animated charaters, | ||
because they would be rendered the same (with the same animation frame). | because they would be rendered the same (with the same animation frame). | ||
- | |||
- | You can simply setup instanced rendering in your TGorillaModel or TGorillaMesh object. | ||
{{youtube> | {{youtube> | ||
+ | |||
+ | |||
+ | |||
+ | === At DesignTime === | ||
+ | |||
+ | We offer a collection property called " | ||
+ | |||
+ | You can simply add instances at design time with their transformation information. | ||
+ | |||
+ | __NOTICE:__ The transformation information (position, rotation and scale) is absolute and not depending on the owner mesh. | ||
+ | |||
+ | |||
+ | === At Runtime === | ||
+ | |||
+ | For better usability TGorillaMesh/ | ||
+ | Internally it will be cached in buffer for fast GPU transmission. | ||
+ | |||
+ | This brings new opportunities, | ||
+ | |||
+ | In that case you want to ignore the collection and simply add those instances to the buffer. Therefore please use the AddInstance() method | ||
+ | |||
+ | <file pascal> | ||
+ | function AddInstance(const ATransform : TMatrix3D; const ACreateItem : Boolean; | ||
+ | AName : String = '' | ||
+ | </ | ||
<file pascal> | <file pascal> | ||
/// we create 4 instances in a row | /// we create 4 instances in a row | ||
- | GorillaModel1.AddInstance(TMatrix3D.CreateTranslation(Point3D(-10, | + | GorillaModel1.AddInstance(TMatrix3D.CreateTranslation(Point3D(-10, |
- | GorillaModel1.AddInstance(TMatrix3D.CreateTranslation(Point3D(-5, | + | GorillaModel1.AddInstance(TMatrix3D.CreateTranslation(Point3D(-5, |
- | GorillaModel1.AddInstance(TMatrix3D.CreateTranslation(Point3D(5, | + | GorillaModel1.AddInstance(TMatrix3D.CreateTranslation(Point3D(5, |
- | GorillaModel1.AddInstance(TMatrix3D.CreateTranslation(Point3D(10, | + | GorillaModel1.AddInstance(TMatrix3D.CreateTranslation(Point3D(10, |
/// afterwards we can modify a specific instance | /// afterwards we can modify a specific instance | ||
Line 559: | Line 596: | ||
</ | </ | ||
+ | __WARNING: | ||
+ | ==== Cloning ==== | ||
+ | |||
+ | Instancing can be done by GPU and providing different transformation matrices like above or by cloning the visual component with all of it's data. | ||
+ | Both ways have their advantages and disadvantages. | ||
- | ==== Instancing by template | + | * Use instancing if you want to re-render a mesh multiple times |
+ | * Use cloning if you need different visual feedback | ||
- | Since 0.8.3.1966+ we've refactored the way to instanciate models. The previous method was incomplete in handling animated models. | ||
In the following example we show how to load a complex animated model with multiple meshes and animations. | In the following example we show how to load a complex animated model with multiple meshes and animations. | ||
We will load up a template (TModelDef), | We will load up a template (TModelDef), |