AssimpNet An animation consists of keyframe data for a number of nodes. For each node affected by the animation, a separate series of data is given. Gets or sets the name of the animation. If the modeling package the data was exported from only supports a single animation channel, this name is usually empty. Gets or sets the duration of the animation in number of ticks. Gets or sets the number of ticks per second. It may be zero if it is not specified in the imported file. Gets if the animation has node animation channels. Gets the number of node animation channels where each channel affects a single node. Gets the node animation channels. Gets if the animation has mesh animations. Gets the number of mesh animation channels. Gets the number of mesh morph animation channels. Gets the mesh animation channels. Gets the mesh morph animation channels. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents an Assimp Import/Export context that load or save models using the unmanaged library. Additionally, conversion functionality is offered to bypass loading model data into managed memory. Gets if the context has been disposed. Gets or sets the uniform scale for the model. This is multiplied with the existing root node's transform. This is only used during import. Gets or sets the model's rotation about the X-Axis, in degrees. This is multiplied with the existing root node's transform. This is only used during import. Gets or sets the model's rotation abut the Y-Axis, in degrees. This is multiplied with the existing root node's transform. This is only used during import. Gets or sets the model's rotation about the Z-Axis, in degrees. This is multiplied with the existing root node's transform. This is only used during import. Gets whether this context is using a user-defined IO system for file handling. Gets the property configurations set to this context. This is only used during import. Constructs a new instance of the class. Imports a model from the stream without running any post-process steps. The importer sets configurations and loads the model into managed memory, releasing the unmanaged memory used by Assimp. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ImportFile" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful. The imported scene Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Imports a model from the stream. The importer sets configurations and loads the model into managed memory, releasing the unmanaged memory used by Assimp. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ImportFile" family of functions. Stream to read from Post processing flags, if any Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful. The imported scene Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Imports a model from the specified file without running any post-process steps. The importer sets configurations and loads the model into managed memory, releasing the unmanaged memory used by Assimp. Full path to the file The imported scene Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Imports a model from the specified file. The importer sets configurations and loads the model into managed memory, releasing the unmanaged memory used by Assimp. Full path to the file Post processing flags, if any The imported scene Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Exports a scene to the specified format and writes it to a file. Scene containing the model to export. Path to the file. FormatID representing the format to export to. True if the scene was exported successfully, false otherwise. Thrown if the scene is null. Thrown if the context has already been disposed of. Exports a scene to the specified format and writes it to a file. Scene containing the model to export. Path to the file. FormatID representing the format to export to. Preprocessing flags to apply to the model before it is exported. True if the scene was exported successfully, false otherwise. Thrown if the scene is null. Thrown if the context has already been disposed of. Exports a scene to the specified format and writes it to a data blob. Scene containing the model to export. FormatID representing the format to export to. The resulting data blob, or null if the export failed. Thrown if the scene is null. Thrown if the context has already been disposed of. Exports a scene to the specified format and writes it to a data blob. Scene containing the model to export. FormatID representing the format to export to. Preprocessing flags to apply to the model before it is exported. The resulting data blob, or null if the export failed. Thrown if the scene is null. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a file. Input file name to import Output file name to export to Format id that specifies what format to export to True if the conversion was successful or not, false otherwise. Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a file. Input file name to import Output file name to export to Format id that specifies what format to export to Pre processing steps used for the export True if the conversion was successful or not, false otherwise. Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a file. Input file name to import Post processing steps used for the import Output file name to export to Format id that specifies what format to export to Pre processing steps used for the export True if the conversion was successful or not, false otherwise. Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a data blob. Input file name to import Format id that specifies what format to export to Data blob containing the exported scene in a binary form Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a data blob. Input file name to import Format id that specifies what format to export to Pre processing steps used for the export Data blob containing the exported scene in a binary form Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the file to the specified format and save it to a data blob. Input file name to import Post processing steps used for the import Format id that specifies what format to export to Pre processing steps used for the export Data blob containing the exported scene in a binary form Thrown if there was a general error in importing the model. Thrown if the file could not be located. Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToFile" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Output file name to export to Format id that specifies what format to export to True if the conversion was successful or not, false otherwise. Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToFile" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Output file name to export to Format id that specifies what format to export to Pre processing steps used for the export True if the conversion was successful or not, false otherwise. Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a file. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToFile" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Post processing steps used for import Output file name to export to Format id that specifies what format to export to Pre processing steps used for the export True if the conversion was successful or not, false otherwise. Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToBlob" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Format id that specifies what format to export to Data blob containing the exported scene in a binary form Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToBlob" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Format id that specifies what format to export to Pre processing steps used for the export Data blob containing the exported scene in a binary form Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Converts the model contained in the stream to the specified format and save it to a data blob. It is up to the caller to dispose of the stream. If the format is distributed across multiple files/streams, set a custom and use the "ConvertFromFileToBlob" family of functions. Stream to read from Optional format extension to serve as a hint to Assimp to choose which importer to use. If null or empty, the system will try to detect what importer to use from the data which may or may not be successful Post processing steps used for import Format id that specifies what format to export to Pre processing steps used for the export Data blob containing the exported scene in a binary form Thrown if the stream is not valid (null or write-only). Thrown if the context has already been disposed of. Sets a custom file system implementation that is used by this importer. If it is null, then the default assimp file system is used instead. Custom file system implementation Removes the currently set custom file system implementation from the importer. Gets the model formats that are supported for export by Assimp. Export formats supported Gets the model formats that are supported for import by Assimp. Import formats supported Gets descriptions for each importer that assimp has registered. Descriptions of supported importers. Gets an importer description for the specified file extension. If no importers support it, null is returned. Multiple importers may support the file extension, they are called in the order that they were registered. File extension to query importer support for. Importer description or null if it does not exist. Checks if the format extension (e.g. ".dae" or ".obj") is supported for import. Model format True if the format is supported, false otherwise Checks if the format extension (e.g. ".dae" or ".obj") is supported for export. Model format True if the format is supported, false otherwise Sets a configuration property to the context. This is only used during import. Config to set Removes a set configuration property by name. Name of the config property Removes all configuration properties from the context. Checks if the context has a config set by the specified name. Name of the config property True if the config is present, false otherwise Disposes of resources held by the context. These include IO systems still attached. Releases unmanaged and - optionally - managed resources True to release both managed and unmanaged resources; False to release only unmanaged resources. AssimpNet general exception. Initializes a new instance of the class. Initializes a new instance of the class. The error message. Initializes a new instance of the class. Name of the param. The error message. Initializes a new instance of the class. The error message The inner exception. Represents a single bone of a mesh. A bone has a name which allows it to be found in the frame hierarchy and by which it can be addressed by animations. In addition it has a number of influences on vertices and a matrix relating the mesh position to the position of the bone at the time of binding. Gets or sets the name of the bone. Gets the number of vertex influences the bone contains. Gets if the bone has vertex weights - this should always be true. Gets the influence weights of this bone, by vertex index. Gets or sets the matrix that transforms from bone space to mesh space in bind pose. This matrix describes the position of the mesh in the local space of this bone when the skeleton was bound. Thus it can be used directly to determine a desired vertex position, given the world-space transform of the bone when animated, and the position of the vertex in mesh space. It is sometimes called an inverse-bind matrix or inverse-bind pose matrix. Constructs a new instance of the class. Constructs a new instance of the class. Name of the bone Bone's offset matrix Vertex weights Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents an axis-aligned bounding box Minimum point of the bounding box. Maximum point of the bounding box. Constructs a new BoundingBox. Minimum point. Maximum point. Tests equality between two Bounding Boxes. First BoundingBox Second BoundingBox True if the Bounding Boxes are equal, false otherwise Tests inequality between two Bounding Boxes. First BoundingBox Second BoundingBox True if the Bounding Boxes are not equal, false otherwise Tests equality between this BoundingBox and another BoundingBox. BoundingBox to test against True if components are equal Tests equality between this vector and another object. Object to test against True if the object is a vector and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Describes a right-handed camera in the scene. An important aspect is that the camera itself is also part of the scenegraph, meaning any values such as the direction vector are not *absolute*, they can be relative to the coordinate system defined by the node which corresponds to the camera. This allows for camera animations. Gets or sets the name of the camera. This corresponds to a node in the scenegraph with the same name. This node specifies the position of the camera in the scene hierarchy and can be animated. Gets or sets the position of the camera relative to the coordinate space defined by the corresponding node. THe default value is 0|0|0. Gets or sets the 'up' vector of the camera, relative to the coordinate space defined by the corresponding node. The 'right' vector of the camera is the cross product of the up and direction vectors. The default value is 0|1|0. Gets or sets the viewing direction of the camera, relative to the coordinate space defined by the corresponding node. The default value is 0|0|1. Gets or sets the half horizontal field of view angle, in radians. The FoV angle is the angle between the center line of the screen and the left or right border. The default value is 1/4PI. Gets or sets the distance of the near clipping plane from the camera. The value may not be 0.0f for arithmetic reasons to prevent a division through zero. The default value is 0.1f; Gets or sets the distance of the far clipping plane from the camera. The far clippling plane must be further than the near clippling plane. The default value is 1000.0f. The ratio between the near and far plane should not be too large (between 1000 - 10000 should be ok) to avoid floating-point inaccuracies which can lead to z-fighting. Gets or sets the screen aspect ratio. This is the ratio between the width and height of the screen. Typical values are 4/3, 1/2, or 1/1. This value is 0 if the aspect ratio is not defined in the source file. The default value is zero. Gets a right-handed view matrix. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents a RGB color. Red component. Green component. Blue component. Gets or sets the component value at the specified zero-based index in the order of RGBA (index 0 access R, 1 access G, etc). If the index is not in range, a value of zero is returned. Zero-based index. The component value Constructs a Color3D. Red component Green component Blue component Constructs a Color3D where each component is set to the same value. Value to set R, G, B components Determines if the color is black, or close to being black. True if the color is black/nearly block, false otherwise. Adds the two colors together. First color Second color Added color Adds the value to each of the components of the color. Source color Value to add to each component Added color Adds the value to each of the components of the color. Value to add to each component Source color Added color Subtracts the second color from the first color. First color Second color Resulting color Subtracts the value from each of the color's components. Source color Value to subtract from each component Resulting color Subtracts the color's components from the value, returning the result as a new color. Same as new Color4D(value) - color Value for each component of the first color Second color Resulting color Multiplies the two colors. First color Second color Multiplied color. Multiplies the color by a scalar value, component wise. Source color Scalar value Resulting color Multiplies the color by a scalar value, component wise. Scalar value Source color Resulting color Divides the first color by the second color, component wise. First color Second color Resulting color Divides the color by a divisor value. Source color Divisor Resulting color Tets equality between two colors. First color Second color True if the colors are equal, false otherwise Tets inequality between two colors. First color Second color True if the colors are not equal, false otherwise Tests equality between this color and another color Color to test against True if components are equal Tests equality between this color and another object. Object to test against True if the object is a color and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Represents a Red-Green-Blue-Alpha (RGBA) color. Color values range from 0 to 1. Red component. Green component. Blue component. Alpha component. Gets or sets the component value at the specified zero-based index in the order of RGBA (index 0 access R, 1 access G, etc). If the index is not in range, a value of zero is returned. Zero-based index. The component value Constructs a Color4D. Red component Green component Blue component Alpha component Constructs a Color4D. Alpha is set to 1.0. Red component Green component Blue component Constructs a Color4D where each component is set to the same value. Value to set R, G, B, A components Constructs a Color4D from a Color3D. Alpha is set to 1.0. RGB values Constructs a Color4D from a Color3D and alpha value. RGB values Alpha value Determines if the color is black, or close to being black. True if the color is black/nearly block, false otherwise. Adds the two colors together. First color Second color Added color Adds the value to each of the components of the color. Source color Value to add to each component Added color Adds the value to each of the components of the color. Value to add to each component Source color Added color Subtracts the second color from the first color. First color Second color Resulting color Subtracts the value from each of the color's components. Source color Value to subtract from each component Resulting color Subtracts the color's components from the value, returning the result as a new color. Same as new Color4D(value) - color Value for each component of the first color Second color Resulting color Multiplies the two colors. First color Second color Multiplied color. Multiplies the color by a scalar value, component wise. Source color Scalar value Resulting color Multiplies the color by a scalar value, component wise. Scalar value Source color Resulting color Divides the first color by the second color, component wise. First color Second color Resulting color Divides the color by a divisor value. Source color Divisor Resulting color Tets equality between two colors. First color Second color True if the colors are equal, false otherwise Tets inequality between two colors. First color Second color True if the colors are not equal, false otherwise Tests equality between this color and another color Color to test against True if components are equal Tests equality between this color and another object. Object to test against True if the object is a color and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Base property config. Gets the property name. Creates a new property config that has no active Assimp property store. Name of the property. Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Applies the property value to the given Assimp property store. Assimp property store Describes an integer configuration property. Gets the property value. Gets the default property value. Constructs a new IntengerPropertyConfig. Name of the property Property value constructs a new IntegerPropertyConfig with a default value. Name of the property Property value The default property value Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Describes a float configuration property. Gets the property value. Gets the default property value. Constructs a new FloatPropertyConfig. Name of the property Property value Constructs a new FloatPropertyConfig with a default value. Name of the property Property value The default property value Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Describes a configuration property. Gets the property value. Gets the default property value. Constructs a new MatrixPropertyConfig. Name of the property Property value Constructs a new MatrixPropertyConfig. Name of the property Property value The default property value Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Describes a boolean configuration property. Gets the property value. Gets the default property value. Constructs a new BooleanPropertyConfig. Name of the property Property value Constructs a new BooleanPropertyConfig with a default value. Name of the property Property value The default property value Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Describes a string configuration property. Gets the property value. Gets the default property value. Constructs a new StringPropertyConfig. Name of the property Property value Constructs a new StringPropertyConfig with a default value. Name of the property Property value The default property value Sets the current value to the default value. Applies the property value to the given Assimp property store. Assimp property store Convience method for constructing a whitespace delimited name list. Array of names White-space delimited list as a string Configuration to enable time measurements. If enabled, each part of the loading process is timed and logged. Default value is false. Gets the string name used by MeasureTimeConfig. Constructs a new MeasureTimeConfig. True if the loading process should be timed or not. Configuration to set Assimp's multithreading policy. Possible values are -1 to let Assimp decide, 0 to disable multithreading, or any number larger than zero to force a specific number of threads. This is only a hint and may be ignored by Assimp. Default value is -1. Gets the string name used by MultithreadingConfig. Constructs a new MultithreadingConfig. A value of -1 will let Assimp decide, a value of zero to disable multithreading, and a value greater than zero to force a specific number of threads. Global setting to disable generation of skeleton dummy meshes. These are generated as a visualization aid in cases which the input data contains no geometry, but only animation data. So the geometry are visualizing the bones. Default value is false. Gets the string name used by NoSkeletonMeshConfig. Constructs a new NoSkeletonMeshConfig. True if dummy skeleton mesh generation should be disabled, false otherwise. Configuration to set the maximum angle that may be between two vertex tangents/bitangents when they are smoothed during the step to calculate the tangent basis. The default value is 45 degrees. Gets the string name used by TangentSmoothingAngleConfig. Constructs a new TangentSmoothingAngleConfig. Smoothing angle, in degrees. Configuration to set the maximum angle between two face normals at a vertex when they are smoothed during the step to calculate smooth normals. This is frequently called the "crease angle". The maximum and default value is 175 degrees. Gets the string name used by NormalSmoothingAngleConfig. Constructs a new NormalSmoothingAngleConfig. Smoothing angle, in degrees. Configuration to set the colormap (palette) to be used to decode embedded textures in MDL (Quake or 3DG5) files. This must be a valid path to a file. The file is 768 (256 * 3) bytes alrge and contains RGB triplets for each of the 256 palette entries. If the file is not found, a default palette (from Quake 1) is used. The default value is "colormap.lmp". Gets the string name used by MDLColorMapConfig. Constructs a new MDLColorMapConfig. Colormap filename Configuration for the the step to determine what materials to keep. If a material matches one of these names it will not be modified or removed by the post processing step. Default is an empty string. Gets the string name used by MaterialExcludeListConfig. Constructs a new MaterialExcludeListConfig. Material names containing whitespace must be enclosed in single quotation marks. List of material names that will not be modified or replaced by the remove redundant materials post process step. Configuration for the step to keep the scene hierarchy. Meshes are moved to worldspace, but no optimization is performed where meshes with the same materials are not joined. This option can be useful if you have a scene hierarchy that contains important additional information which you intend to parse. The default value is false. Gets the string name used by KeepSceneHierarchyConfig. Constructs a new KeepHierarchyConfig. True to keep the hierarchy, false otherwise. Configuration for the step to normalize all vertex components into the -1...1 range. The default value is false. Gets the string name used by NormalizeVertexComponentsConfig. Constructs a new NormalizeVertexComponentsConfig. True if the post process step should normalize vertex components, false otherwise. Configuration for the step to remove degenerted primitives from the import immediately. The default value is false, where degenerated triangles are converted to lines, and degenerated lines to points. Gets the string name used by RemoveDegeneratePrimitivesConfig. Constructs a new RemoveDegeneratePrimitivesConfig. True if the post process step should remove degenerate primitives, false otherwise. Configuration for the step. If true, the area of the triangles are checked to see if they are greater than 1e-6. If so, the triangle is removed if is set to true. Gets the string name used by RemoveDegeneratePrimitivesCheckAreaConfig. Constructs a new RemoveDegeneratePrimitivesCheckAreaConfig. True if the post process step should check the area of triangles when finding degenerate primitives, false otherwise. Configuration for the step to preserve nodes matching a name in the given list. Nodes that match the names in the list will not be modified or removed. Identifiers containing whitespaces must be enclosed in single quotation marks. The default value is an empty string. Gets the string name used by NodeExcludeListConfig. Constructs a new NodeExcludeListConfig. List of node names Configuration for the step that specifies the maximum number of triangles a mesh can contain. The default value is MeshTriangleLimitConfigDefaultValue. Gets the string name used by MeshTriangleLimitConfig. Gets the defined default limit value, this corresponds to the constant. Constructs a new MeshTriangleLimitConfig. Max number of triangles a mesh can contain. Configuration for the step that specifies the maximum number of vertices a mesh can contain. The default value is MeshVertexLimitConfigDefaultValue. Gets the string name used by MeshVertexLimitConfig. Gets the defined default limit value, this corresponds to the constant. Constructs a new MeshVertexLimitConfig. Max number of vertices a mesh can contain. Configuration for the step that specifies the maximum number of bone weights per vertex. The default value is VertexBoneWeightLimitConfigDefaultValue. gets the string name used by VertexBoneWeightLimitConfig. Gets the defined default limit value, this corresponds to the constant. Constructs a new VertexBoneWeightLimitConfig. Max number of bone weights per vertex. Configuration for the step that specifies the size of the post-transform vertex cache. The size is given in number of vertices and the default value is VertexCacheSizeConfigDefaultValue. Gets the string name used by VertexCacheConfig. Gets the defined default vertex cache size, this corresponds to the . Constructs a new VertexCacheSizeConfig. Size of the post-transform vertex cache, in number of vertices. Configuration for the step that specifies which parts of the data structure is to be removed. If no valid mesh remains after the step, the import fails. The default value i . Gets the string name used by RemoveComponentConfig. Constructs a new RemoveComponentConfig. Bit-wise combination of components to exclude. Configuration for the step that specifies which primitive types are to be removed by the step. Specifying all primitive types is illegal. The default value is zero specifying none. Gets the string name used by SortByPrimitiveTypeConfig. Constructs a new SortByPrimitiveTypeConfig. Bit-wise combination of primitive types to remove Configuration for the step that specifies the floating point accuracy for animation values, specifically the episilon during comparisons. The default value is 0.0f. Gets the string name used by AnimationAccuracyConfig. Constructs a new AnimationAccuracyConfig. Episilon for animation value comparisons. Configuration for the step. Set to true to ignore texture coordinates. This may be useful if you have to assign different kinds of textures, like seasonally variable ones - one for summer and one for winter. Default is false. Gets the string name used by IgnoreTextureCoordinatesConfig. Constructs a new IgnoreTextureCoordinatesConfig. True if texture coordinates should be ignored, false otherwise. Configuration for the step that specifies which UV transformations are to be evaluated. The default value is for all combinations (scaling, rotation, translation). Gets the string name used by TransformUVConfig. Constructs a new TransformUVConfig. Bit-wise combination specifying which UV transforms that should be evaluated. Configuration that is a hint to Assimp to favor speed against import quality. Enabling this option may result in faster loading, or it may not. It is just a hint to loaders and post-process steps to use faster code paths if possible. The default value is false. Gets the string name used by FavorSpeedConfig. Constructs a new FavorSpeedConfig. True if Assimp should favor speed at the expense of quality, false otherwise. Configures the maximum bone count per mesh for the step. Meshes are split until the maximum number of bones is reached. Gets the string name used by MaxBoneCountConfig. Constructs a new MaxBoneCountConfig. The maximum bone count. Configures which texture channel is used for tangent space computations. The channel must exist or an error will be raised. Gets the string name used by TangentTextureChannelIndexConfig. Constructs a new TangentTextureChannelIndexConfig. The zero-based texture channel index. Configures the threshold that is used to determine what bones are removed. Gets the string name used by DeboneThresholdConfig. Constructs a new DeboneThresholdConfig. The debone threshold. Configuration that requires all bones to qualify for deboning before any are removed. Gets the string name used by DeboneAllOrNoneConfig. Constructs a new DeboneAllOrNoneConfig. True if all are required, false if none need to qualify. Configuration for that sets a user defined matrix as the scene root node transformation before transforming vertices. Default value is the identity matrix. Gets the string name used by RootTransformationConfig. Constructs a new RootTransformationConfig. Root transformation matrix to be set to the root scene node during the pretransform post process step. Applies the property value to the given Assimp property store. Assimp property store Configures the step to scale the entire scene by a certain amount. Some importers provide a mechanism to define a scaling unit for the model, which this processing step can utilize. Default is 1.0. Gets the string name used by GlobalScaleConfig. Constructs a new GlobalScaleConfig. Value to scale the entire scene by. Applies an application-specific scaling to the to allow for backwards compatibility. Default is 1.0. Gets the string name used by AppScaleConfig. Constructs a new AppScaleConfig. Value to scale the global scale by. Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the "global" keyframe that will be imported. There are other configs for specific importers that will override the global setting. Gets the string name used by GlobalKeyFrameImportConfig. Constructs a new GlobalKeyFrameImportConfig. Keyframe index Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the global override for the MD3 format. Gets the string name used by MD3KeyFrameImportConfig. Constructs a new MD3KeyFrameImportConfig. Keyframe index Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the global override for the MD2 format. Gets the string name used by MD2KeyFrameImportConfig. Constructs a new MD2KeyFrameImportConfig. Keyframe index Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the global override for the MDL format. Gets the string name used by MDLKeyFrameImportConfig. Constructs a new MDLKeyFrameImportConfig. Keyframe index Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the global override for the SMD format. Gets the string name used by SMDKeyFrameImportConfig. Constructs a new SMDKeyFrameImportConfig. Keyframe index Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). the library reads only one keyframe with vertex animations. By default this is the first frame. This config sets the global override for the Unreal format. Gets the string name used by UnrealKeyFrameImportConfig. Constructs a new UnrealKeyFrameImportConfig. Keyframe index Configures the AC loader to collect all surfaces which have the "Backface cull" flag set in separate meshes. The default value is true. Gets the string name used by ACSeparateBackfaceCullConfig. Constructs a new ACSeparateBackfaceCullConfig. True if all surfaces that have the "backface cull" flag set should be collected in separate meshes, false otherwise. Configures whether the AC loader evaluates subdivision surfaces (indicated by the presence of the 'subdiv' attribute in the file). By default, Assimp performs the subdivision using the standard Catmull-Clark algorithm. The default value is true. Gets the string name used by ACEvaluateSubdivisionConfig. Constructs a new ACEvaluateSubdivisionConfig. True if the AC loader should evaluate subdivisions, false otherwise. Configures the UNREAL 3D loader to separate faces with different surface flags (e.g. two-sided vs single-sided). The default value is true. Gets the string name used by UnrealHandleFlagsConfig. Constructs a new UnrealHandleFlagsConfig. True if the unreal loader should separate faces with different surface flags, false otherwise. Configures the terragen import plugin to compute UV's for terrains, if they are not given. Furthermore, a default texture is assigned. The default value is false. UV coordinates for terrains are so simple to compute that you'll usually want to compute them on your own, if you need them. This option is intended for model viewers which want to offer an easy way to apply textures to terrains. Gets the string name used by TerragenComputeTexCoordsConfig. Constructs a new TerragenComputeTexCoordsConfig. True if terran UV coordinates should be computed, false otherwise. Configures the ASE loader to always reconstruct normal vectors basing on the smoothing groups loaded from the file. Some ASE files carry invalid normals, others don't. The default value is true. Gets the string name used by ASEReconstructNormalsConfig. Constructs a new ASEReconstructNormalsConfig. True if normals should be re-computed, false otherwise. Configures the M3D loader to detect and process multi-part Quake player models. These models usually consit of three files, lower.md3, upper.md3 and head.md3. If this propery is set to true, Assimp will try to load and combine all three files if one of them is loaded. The default value is true. Gets the string name used by MD3HandleMultiPartConfig. Constructs a new MD3HandleMultiPartConfig. True if the split files should be loaded and combined, false otherwise. Tells the MD3 loader which skin files to load. When loading MD3 files, Assimp checks whether a file named "md3_file_name"_"skin_name".skin exists. These files are used by Quake III to be able to assign different skins (e.g. red and blue team) to models. 'default', 'red', 'blue' are typical skin names. The default string value is "default". Gets the string name used by MD3SkinNameConfig. Constructs a new MD3SkinNameConfig. The skin name. Specifies the Quake 3 shader file to be used for a particular MD3 file. This can be a full path or relative to where all MD3 shaders reside. the default string value is an empty string. Gets the string name used by MD3ShaderSourceConfig. Constructs a new MD3ShaderSourceConfig. The shader file. Configures the LWO loader to load just one layer from the model. LWO files consist of layers and in some cases it could be useful to load only one of them. This property can be either a string - which specifies the name of the layer - or an integer - the index of the layer. If the property is not set then the whole LWO model is loaded. Loading fails if the requested layer is not vailable. The layer index is zero-based and the layer name may not be empty The default value is false (all layers are loaded). Gets the string name used by LWOImportOneLayerConfig. Constructs a new LWOImportOneLayerConfig. True if only one layer should be imported, false if all layers should be imported. Configures the MD5 loader to not load the MD5ANIM file for a MD5MESH file automatically. The default value is false. The default strategy is to look for a file with the same name but with the MD5ANIm extension in the same directory. If it is found it is loaded and combined with the MD5MESH file. This configuration option can be used to disable this behavior. Gets the string name used by MD5NoAnimationAutoLoadConfig. Constructs a new MD5NoAnimationAutoLoadConfig. True if animations should not be automatically loaded, false if they should be. Defines the beginning of the time range for which the LWS loader evaluates animations and computes AiNodeAnim's. The default value is the one taken from the file. Assimp provides full conversion of Lightwave's envelope system, including pre and post conditions. The loader computes linearly subsampled animation channels with the frame rate given in the LWS file. This property defines the start time. Animation channels are only generated if a node has at least one envelope with more than one key assigned. This property is given in frames where '0' is the first. By default, if this property is not set, the importer takes the animation start from the input LWS file ('FirstFrame' line) Gets the string name used by LWSAnimationStartConfig. Constructs a new LWSAnimationStartConfig. Beginning of the time range Defines the ending of the time range for which the LWS loader evaluates animations and computes AiNodeAnim's. The default value is the one taken from the file Assimp provides full conversion of Lightwave's envelope system, including pre and post conditions. The loader computes linearly subsampled animation channels with the frame rate given in the LWS file. This property defines the end time. Animation channels are only generated if a node has at least one envelope with more than one key assigned. This property is given in frames where '0' is the first. By default, if this property is not set, the importer takes the animation end from the input LWS file. Gets the string name used by LWSAnimationEndConfig. Constructs a new LWSAnimationEndConfig. Ending of the time range Defines the output frame rate of the IRR loader. IRR animations are difficult to convert for Assimp and there will always be a loss of quality. This setting defines how many keys per second are returned by the converter. The default value is 100 frames per second. Gets the string name used by IRRAnimationFrameRateConfig. Constructs a new IRRAnimationFramerateConfig. Number of frames per second to output. The Ogre importer will try to load this MaterialFile. Ogre meshes reference with material names, this does not tell Assimp where the file is located. Assimp will try to find the source file in the following order: [material-name].material, [mesh-filename-base].material, and lastly the material name defined by this config property. The default value is "Scene.Material". Gets the string name used by OgreMaterialFileConfig. Constructs a new OgreMaterialFileConfig. Material file name to load. The Ogre importer will detect the texture usage from the filename. Normally a texture is loaded as a color map, if no target is specified in the material file. If this is enabled, then Assimp will try to detect the type from the texture filename postfix: Normal Maps: _n, _nrm, _nrml, _normal, _normals, _normalmap Specular Maps: _s, _spec, _specular, _specularmap Light Maps: _l, _light, _lightmap, _occ, _occlusion Displacement Maps: _dis, _displacement The matching is case insensitive. Postfix is taken between the last "_" and last ".". The default behavior is to detect type from lower cased texture unit name by matching against: normalmap, specularmap, lightmap, and displacementmap. For both cases if no match is found then, is used. The default value is false. Gets the string name used by OgreTextureTypeFromFilenameConfig. Constructs a new OgreTextureTypeFromFilenameConfig. True if the filename defines texture usage, false otherwise. Specifies whether the IFC loader skips over IfcSpace elements. IfcSpace elements (and their geometric representations) are used to represent free space in a building story. Gets the string name used by IFCSkipSpaceRepresentationsConfig. Constructs a new IFCSkipSpaceRepresentationsConfig. True if the IfcSpace elements are skipped, false if otherwise. Specifies whether the IFC loader will use its own, custom triangulation algorithm to triangulate wall and floor meshes. If this is set to false, walls will be either triangulated by the post process triangulation or will be passed through as huge polygons with faked holes (e.g. holes that are connected with the outer boundary using a dummy edge). It is highly recommended to leave this property set to true as the default post process has some known issues with these kind of polygons. Gets the string name used by IFCUseCustomTriangulationConfig. Constructs a new IFCUseCustomTriangulationConfig. True if the loader should use its own triangulation routine for walls/floors, false otherwise. Specifies the tessellation conic angle for IFC smoothing curves. Accepted range of values is between [5, 120] Gets the string name used by IFCSmoothingAngleConfig. Constructs a new IFCSmoothingAngleConfig. Smoothing angle when tessellating curves. Needs to be in the range of [5, 120]. Specifies the tessellation for IFC cylindrical shapes. E.g. the number of segments used to approximate a circle. Accepted range of values is between [3, 180]. Gets the string name used by IFCCylindricalTessellationConfig. Constructs a new IFCCylindricalTessellationConfig. Tessellation of cylindrical shapes (e.g. the number of segments used to approximate a circle). Needs to be in the range of [3, 180]. Specifies whether the collada loader will ignore the up direction. Default is false. Gets the string name used by ColladaIgnoreUpDirectionConfig. Constructs a new ColladaIgnoreUpDirectionConfig. True if the loader should ignore the up direction, false otherwise. Specifies whether the Collada loader should use Collada names as node names. If this property is set to true, the Collada names will be used as the node name. The behavior is to use the id tag (resp. sid tag, if no id tag is present) instead. Default is false. Gets the string name used by ColladaUseColladaNamesConfig. Constructs a new ColladaUseColladaNamesConfig. True if collada names should be used as node names, false otherwise. Specifies whether the FBX importer will merge all geometry layers present in the source file or import only the first. Default is true. Gets the string name used by FBXImportAllGeometryLayersConfig. Constructs a new FBXImportAllGeometryLayersConfig. True if all geometry layers should be merged, false otherwise to take only the first layer. Specifies whether the FBX importer will import all materials present in the source file or take only the referenced materials, if the importer is configured to import materials at all. Otherwise this will have no effect. Default is false. Gets the string name used by FBXImportAllMaterialsConfig. Constructs a new FBXImportAllMaterialsConfig. True if the FBX importer should import ALL materials even if not referenced, false otherwise (take only the referenced materials). Specifies whether the FBX importer will import materials. Default is true. Gets the string name used by FBXImportMaterialsConfig. Constructs a new FBXImportMaterialsConfig. True if the FBX importer should import materials, false otherwise. Specifies whether the FBX importer will import embedded textures. Default is true. Gets the string name used by FBXImportEmbeddedTexturesConfig. Constructs a new FBXImportEmbeddedTexturesConfig. True if the FBX importer should import embedded textures, false otherwise. Specifies if the FBX importer should search for embedded loaded textures, where no embedded texture data is provided. Default is false. Gets the string name used by FBXImportSearchEmbeddedTexturesConfig. Constructs a new FBXImportSearchEmbeddedTexturesConfig. True if the FBX importer should search for embedded loaded textures, where no embedded texture data is provided. Specifies whether the FBX importer will import cameras. Default is true. Gets the string name used by FBXImportCamerasConfig. Constructs a new FBXImportCamerasConfig. True if the FBX importer should import cameras, false otherwise. Specifies whether the FBX importer will import lights. Default is true. Gets the string name used by FBXImportLightsConfig. Constructs a new FBXImportLightsConfig. True if the FBX importer should import lights, false otherwise. Specifies whether the FBX importer will import animations. Default is true. Gets the string name used by FBXImportAnimationsConfig. Constructs a new FBXImportAnimationsConfig. True if the FBX importer should import animations, false otherwise. Specifies whether the FBX importer will act in strict mode in which only the FBX 2013 format is supported and any other sub formats are rejected. FBX 2013 is the primary target for the importer, so this format is best supported and well-tested. Default is false. Gets the string name used by FBXStrictModeConfig. Constructs a new FBXStrictModeConfig. True if FBX strict mode should be used, false otherwise. Specifies whether the FBX importer will preserve pivot points for transformations (as extra nodes). If set to false, pivots and offsets will be evaluated whenever possible. Default value is true. Gets the string name used by FBXPreservePivotsConfig. Constructs a new FBXPreservePivotsConfig. True if pivots should be preserved, false otherwise. Specifies whether the importer will drop empty animation curves or animation curves which match the bind pose transformation over their entire defined range. Default value is true. Gets the string name used by FBXOptimizeEmptyAnimationCurvesConfig. Constructs a new FBXOptimizeEmptyAnimationCurvesConfig. True if empty animation curves should be dropped, false otherwise. Specifies whether the importer shall convert the unit from centimeter (cm) to meter (m). Default value is false. Gets the string name used by FBXConvertToMetersConfig. Constructs a new FBXConvertToMetersConfig. True if the importer converts the unit from cm to m, false if do not do a conversion. Specifies whether the importer will load multiple animations. Default value is true. Gets the string name used by SmdLoadAnimationListConfig. Constructs a new SmdLoadAnimationListConfig. True if the importer should load multiple animations, false if only one animation should be loaded. Specifies whether the importer removes empty bones or not. Empty bones are often used to define connections for other models (e.g. attachment points). Default value is true. Gets the string name used by RemoveEmptyBonesConfig. Constructs a new RemoveEmptyBonesConfig. True if the importer should remove empty bones, false if they should be kept. Specifies if the X-file exporter should use 64-bit doubles rather than 32-bit floats. Gets the string name used by XFileUseDoublesConfig. Constructs a new XFileUseDoublesConfig. True if the x file uses 64-bit double values rather than 32-bit float values. Specifies if the export process should disable a validation step that would remove data that does not contain faces. This will enable point cloud data to be exported, since the 3D data is a collection of vertices without face data. Gets the string name used by ExportPointCloudsConfig. Constructs a new ExportPointCloudConfig. True if the exporter should treat vertices not grouped in faces as point clouds, false otherwise. Represents an embedded texture. Some file formats directly embed texture assets. Embedded textures may be uncompressed, where the data is given in an uncompressed format. Or it may be compressed in a format like png or jpg. In the latter case, the raw file bytes are given so the application must utilize an image decoder (e.g. DevIL) to get access to the actual color data. This object represents both types, so some properties may or may not be valid depending if it is compressed or not. Gets or sets the texture's original filename. Gets if the texture is compressed or not. Gets the width of the texture in pixels. Only valid for non-compressed textures. Gets the height of the texture in pixels. Only valid for non-compressed textures. Gets if the texture has non-compressed texel data. Only valid for non-compressed textures. Gets the size of the non-compressed texel data. Only valid for non-compressed textures. Gets the non-compressed texel data, the array is of size Width * Height. Only valid for non-compressed textures. Gets if the embedded texture has compressed data. Only valid for compressed textures. Gets the size of the compressed data. Only valid for compressed textures. Gets the raw byte data representing the compressed texture. Only valid for compressed textures. Gets the format hint to determine the type of compressed data. This hint is a three-character lower-case hint like "dds", "jpg", "png". Constructs a new instance of the class. Should use only if reading from a native value. Constructs a new instance of the class. This creates a compressed embedded texture. The 3 character format hint. The compressed data. Optional file name for the texture. Constructs a new instance of the class. This creates an uncompressed embedded texture. Width of the texture Height of the texture Color data Optional file name for the texture. Thrown if the data size does not match width * height. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Enumerates metadata data types. Metadata is a boolean. Metadata is an integer. Metadata is an unsigned 64-bit integer. Metadata is a float. Metadata is a double. Metadata is a string. Metadata is a . Post processing flag options, specifying a number of steps that can be run on the data to either generate additional vertex data or optimize the imported data. No flags enabled. Calculates the tangents and binormals (bitangents) for the imported meshes. This does nothing if a mesh does not have normals. You might want this post processing step to be executed if you plan to use tangent space calculations such as normal mapping. There is a config setting AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE which allows you to specify a maximimum smoothing angle for the algorithm. However, usually you'll want to leave it at the default value. Identifies and joins identical vertex data sets within all imported meshes. After this step is run each mesh does contain only unique vertices anymore, so a vertex is possibly used by multiple faces. You usually want to use this post processing step. If your application deals with indexed geometry, this step is compulsory or you'll just waste rendering time. If this flag is not specified, no vertices are referenced by more than one face and no index buffer is required for rendering. Converts all imported data to a left handed coordinate space. By default the data is returned in a right-handed coordinate space, where +X points to the right, +Z towards the viewer, and +Y upwards. Triangulates all faces of all meshes. By default the imported mesh data might contain faces with more than three indices. For rendering you'll usually want all faces to be triangles. This post processing step splits up all higher faces to triangles. Line and point primitives are *not* modified. If you want 'triangles only' with no other kinds of primitives, try the following: Specify both and . Ignore all point and line meshes when you process Assimp's output Removes some parts of the data structure (animations, materials, light sources, cameras, textures, vertex components). The components to be removed are specified in a separate configuration option, AI_CONFIG_PP_RVC_FLAGS. This is quite useful if you don't need all parts of the output structure. Especially vertex colors are rarely used today...calling this step to remove unrequired stuff from the pipeline as early as possible results in an increased performance and a better optimized output data structure. This step is also useful if you want to force Assimp to recompute normals or tangents. the corresponding steps don't recompute them if they're already there (loaded from the source asset). By using this step you can make sure they are NOT there. Generates normals for all faces of all meshes. It may not be specified together with . This is ignored if normals are already there at the time where this flag is evaluated. Model importers try to load them from the source file, so they're usually already there. Face normals are shared between all points of a single face, so a single point can have multiple normals, which in other words, forces the library to duplicate vertices in some cases. This makes senseless then. Generates smooth normals for all vertices of all meshes. It may not be specified together with . This is ignored if normals are already there at the time where this flag is evaluated. Model importers try to load them from the source file, so they're usually already there. The configuration option AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE allows you to specify an angle maximum for the normal smoothing algorithm. Normals exceeding this limit are not smoothed, resulting in a 'hard' seam between two faces. using a decent angle here (e.g. 80 degrees) results in a very good visual appearance. Splits large meshes into smaller submeshes. This is useful for realtime rendering where the number of triangles which can be maximally processed in a single draw call is usually limited by the video driver/hardware. The maximum vertex buffer is usually limited, too. Both requirements can be met with this step: you may specify both a triangle and a vertex limit for a single mesh. The split limits can be set through the AI_CONFIG_PP_SLM_VERTEX_LIMIT and AI_CONFIG_PP_SLM_TRIANGLE_LIMIT config settings. The default values are 1,000,000. Warning: This can be a time consuming task. Removes the node graph and "bakes" (pre-transforms) all vertices with the local transformation matrices of their nodes. The output scene does still contain nodes, however, there is only a root node with children, each one referencing only one mesh. Each mesh referencing one material. For rendering, you can simply render all meshes in order, you don't need to pay attention to local transformations and the node hierarchy. Warning: Animations are removed during this step. Limits the number of bones simultaneously affecting a single vertex to a maximum value. If any vertex is affected by more than that number of bones, the least important vertex weights are removed and the remaining vertex weights are re-normalized so that the weights still sum up to 1. The default bone weight limit is 4 and uses the AI_LMW_MAX_WEIGHTS config. If you intend to perform the skinning in hardware, this post processing step might be of interest for you. Validates the imported scene data structure. This makes sure that all indices are valid, all animations and bones are linked correctly, all material references are correct, etc. It is recommended to capture Assimp's log output if you use this flag, so you can easily find out what's actually wrong if a file fails the validation. The validator is quite rude and will find *all* inconsistencies in the data structure. There are two types of failures: Error: There's something wrong with the imported data. Further postprocessing is not possible and the data is not usable at all. The import fails. Warning: There are some minor issues (e.g. 1000000 animation keyframes with the same time), but further postprocessing and use of the data structure is still safe. Warning details are written to the log file. Re-orders triangles for better vertex cache locality. This step tries to improve the ACMR (average post-transform vertex cache miss ratio) for all meshes. The implementation runs in O(n) time and is roughly based on the 'tipsify' algorithm. If you intend to render huge models in hardware, this step might be of interest for you. The AI_CONFIG_PP_ICL_PTCACHE_SIZE config setting can be used to fine tune the cache optimization. Searches for redundant/unreferenced materials and removes them. This is especially useful in combination with the PreTransformVertices and OptimizeMeshes flags. Both join small meshes with equal characteristics, but they can't do their work if two meshes have different materials. Because several material settings are always lost during Assimp's import filders and because many exporters don't check for redundant materials, huge models often have materials which are defined several times with exactly the same settings. Several material settings not contributing to the final appearance of a surface are ignored in all comparisons ... the material name is one of them. So, if you're passing additional information through the content pipeline (probably using *magic* material names), don't specify this flag. Alternatively, take a look at the AI_CONFIG_PP_RRM_EXCLUDE_LIST setting. This step tries to determine which meshes have normal vectors that are facing inwards. The algorithm is simple but effective: The bounding box of all vertices and their normals are compared against the volume of the bounding box of all vertices without their normals. This works well for most objects, problems might occur with planar surfaces. However, the step tries to filter such cases. The step inverts all in-facing normals. Generally, it is recommended to enable this step, although the result is not always correct. This step splits meshes with more than one primitive type in homogeneous submeshes. This step is executed after triangulation and after it returns, just one bit is set in aiMesh:mPrimitiveTypes. This is especially useful for real-time rendering where point and line primitives are often ignored or rendered separately. You can use AI_CONFIG_PP_SBP_REMOVE option to specify which primitive types you need. This can be used to easily exclude lines and points, which are rarely used, from the import. This step searches all meshes for degenerated primitives and converts them to proper lines or points. A face is 'degenerated' if one or more of its points are identical. To have degenerated primitives removed, specify the flag try one of the following procedures: To support lines and points: Set the AI_CONFIG_PP_FD_REMOVE option to one. This will cause the step to remove degenerated triangles as soon as they are detected. They won't pass any further pipeline steps. If you don't support lines and points: Specify flag, which will move line and point primitives to separate meshes. Then set the AI_CONFIG_PP_SBP_REMOVE option to and to cause step to reject point and line meshes from the scene. This step also removes very small triangles with a surface area smaller than 10^-6. If you rely on having these small triangles, or notice holes in your model, set the property to false. Degenerated polygons are not necessarily evil and that's why they are not removed by default. There are several file formats which do not support lines or points where exporters bypass the format specification and write them as degenerated triangles instead. This step searches all meshes for invalid data, such as zeroed normal vectors or invalid UV coordinates and removes or fixes them. This is intended to get rid of some common exporter rrors. This is especially useful for normals. If they are invalid, and the step recognizes this, they will be removed and can later be recomputed, e.g. by the GenerateSmoothNormals flag. The step will also remove meshes that are infinitely small and reduce animation tracks consisting of hundreds of redundant keys to a single key. The AI_CONFIG_PP_FID_ANIM_ACCURACY config property decides the accuracy of the check for duplicate animation tracks. This step converts non-UV mappings (such as spherical or cylindrical mapping) to proper texture coordinate channels. Most applications will support UV mapping only, so you will probably want to specify this step in every case. Note that Assimp is not always able to match the original mapping implementation of the 3D app which produced a model perfectly. It's always better to let the father app compute the UV channels, at least 3DS max, maya, blender, lightwave, modo, .... are able to achieve this. If this step is not requested, you'll need to process the MATKEY_MAPPING material property in order to display all assets properly. Applies per-texture UV transformations and bakes them to stand-alone vtexture coordinate channels. UV Transformations are specified per-texture - see the MATKEY_UVTRANSFORM material key for more information. This step processes all textures with transformed input UV coordinates and generates new (pretransformed) UV channel transformations, so you will probably want to specify this step. UV transformations are usually implemented in realtime apps by transforming texture coordinates in a vertex shader stage with a 3x3 (homogenous) transformation matrix. Searches for duplicated meshes and replaces them with a reference to the first mesh. This is time consuming, so don't use it if you have no time. Its main purpose is to work around the limitation with some file formats that don't support instanced meshes, so exporters duplicate meshes. Attempts to reduce the number of meshes (and draw calls). This is recommended to be used together with and is fully compatible with both and . Optimizes scene hierarchy. Nodes with no animations, bones, lights, or cameras assigned are collapsed and joined. Node names can be lost during this step, you can specify names of nodes that should'nt be touched or modified with AI_CONFIG_PP_OG_EXCLUDE_LIST. Use this flag with caution. Most simple files will be collapsed to a single node, complex hierarchies are usually completely lost. That's not the right choice for editor environments, but probably a very effective optimization if you just want to get the model data, convert it to your own format and render it as fast as possible. This flag is designed to be used with for best results. Scenes with thousands of extremely small meshes packed in deeply nested nodes exist for almost all file formats. Usage of this and usually fixes them all and makes them renderable. Flips all UV coordinates along the y-axis and adjusts material settings/bitangents accordingly. Flips face winding order from CCW (default) to CW. Splits meshes with many bones into submeshes so that each submesh has fewer or as many bones as a given limit. Removes bones losslessly or according to some threshold. In some cases (e.g. formats that require it) exporters are faced to assign dummy bone weights to otherwise static meshes assigned to animated meshes. Full, weight-based skinning is expensive while animating nodes is extremely cheap, so this step is offered to clean up the data in that regard. Usage of the configuration AI_CONFIG_PP_DB_THRESHOLD to control the threshold and AI_CONFIG_PP_DB_ALL_OR_NONE if you want bones removed if and only if all bones within the scene qualify for removal. This step will perform a global scale of the model. Some importers provide a mechanism to define a scaling unit for the model, which this processing step can utilize. Use AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY to setup the global scaling factor. A post processting step to embed textures. This will remove external data dependencies for textures. If a texture's file does not exist at the specified path (due, for instance, to an absolute path generate on another system), it will check if a file with the same name exists at the root folder of the imported model, and if so, embeds that. If the step to generate normals is set, it will not run if normals already exist. This flag will force that step to run even if normals are present. Drops normals for all faces of all meshes. This is ignored if no normals are present. Face normals are shared between all points of a single face, so a single point can have multiple normals, which forces the library to duplicate vertices in some cases. is *senseless* then. This process gives sense back to . Generate bounding boxes for each mesh. Enumerates components of the scene or mesh data that can be excluded from the import using the post process step RemoveComponent. No components to be excluded. Removes normal vectors Removes tangents/binormals Removes all color sets. Removes all texture UV sets. Remove all boneweights from all meshes. Scenegraph nodes corresponding to the bones are NOT removed. Use OptimizeGraph step to remove them. Removes all node animations. Coressponding scenegraph nodes are NOT removed. Use OptimizeGraph step to remove them. Removes all embedded textures. Removes all light sources. The corresponding scenegraph nodes are NOT removed. Use the OptimizeGraph step to do this. Removes all cameras. The corresponding scenegraph nodes are NOT removed. Use the OptimizeGraph step to do this. Removes all meshes. Removes all materials. One default material will be generated. Enumerates geometric primitive types. Point primitive. This is just a single vertex in the virtual world. A face has one index for such a primitive. Line primitive. This is a line defined through a start and an end position. A face contains exactly two indices for such a primitive. Triangle primitive, consisting of three indices. A n-Gon that has more than three edges (thus is not a triangle). Defines an animation channel behaves outside the defined time range. This corresponds to the prestate and poststates of the animation node. The value from the default node transformation is taken. The nearest key value is used without interpolation. The value of the nearest two keys is linearly extrapolated for the current time value. The animation is repeated. If the animation key goes from n to m and the current time is t, use the value at (t - n ) % (|m-n|). Defines the methods of mesh morphing supported. No morphing. Interpolation between morph targets. Normalized morphing between morph targets. Relative morphing between morph targets. Enumerates all supported light sources. Unknown light. Directional light source that has a well-defined direction but is infinitely far away, e.g. the sun. Point light source that has a well-defined position in space but is omni-directional, e.g. a light bulb. Spot light source emits light from a position in space, in a certain direction that is limited by an angle, like a cone. Generic light level of the world, including the bounces of all other light sources. Typically, there's at most one ambient light in a scene and is usually just a constant color. This light does not have a valid position, direction, or other properties - just the color. An area light is a rectangle with a predefined size that uniformly emits light from one of its sides. The position is center of the rectangle and the direction is its normal vector. Defines alpha blending flags, how the final color value of a pixel is computed, based on the following equation: sourceColor * sourceBlend + destColor * destBlend Where the destColor is the previous color in the frame buffer and sourceColor is the material color before the transparency calculation. This corresponds to the AI_MATKEY_BLEND_FUNC property. Default blending: sourceColor * sourceAlpha + destColor * (1 - sourceAlpha) Additive blending: sourcecolor * 1 + destColor * 1. Defines all shading models supported by the library. The list of shading modes has been taken from Blender. See Blender documentation for more information. No shading mode defined. Flat shading. Shading is done on a per-face basis and is diffuse only. Also known as 'faceted shading'. Simple Gouraud shading. Phong Shading. Phong-Blinn Shading. Toon-shading, also known as a 'comic' shader. OrenNayer shading model. Extension to standard Lambertian shading, taking the roughness of the material into account. Minnaert shading model. Extension to standard Lambertian shading, taking the "darkness" of the material into account. CookTorrance shading model. Special shader for metallic surfaces. No shading at all. Constant light influence of 1.0. Fresnel shading. Defines some mixed flags for a particular texture. This corresponds to the AI_MAT_KEY_TEXFLAGS property. The texture's color values have to be inverted (componentwise 1-n). Explicit request to the application to process the alpha channel of the texture. This is mutually exclusive with . These flags are set if the library can say for sure that the alpha channel is used/is not used. If the model format does not define this, iti s left to the application to decide whether the texture alpha channel - if any - is evaluated or not. Explicit request to the application to ignore the alpha channel of the texture. This is mutually exclusive with . Defines how UV coordinates outside the [0..1] range are handled. Commonly referred to as the 'wrapping mode' A texture coordinate u|v is translated to u % 1| v % 1. Texture coordinates outside [0...1] are clamped to the nearest valid value. A texture coordinate u|v becomes u1|v1 if (u - (u % 1)) % 2 is zero and 1 - (u % 1) | 1 - (v % 1) otherwise. If the texture coordinates for a pixel are outside [0...1] the texture is not applied to that pixel. Defines how texture coordinates are generated Real-time applications typically require full UV coordinates. So the use of step is highly recommended. It generates proper UV channels for non-UV mapped objects, as long as an accurate description of how the mapping should look like is given. Coordinates are taken from the an existing UV channel. The AI_MATKEY_UVWSRC key specifies from the UV channel the texture coordinates are to be taken from since meshes can have more than one UV channel. Spherical mapping Cylinder mapping Cubic mapping Planar mapping Unknown mapping that is not recognied. Defines how the Nth texture of a specific type is combined with the result of all previous layers. Example (left: key, right: value): DiffColor0 - gray DiffTextureOp0 - TextureOperation.Multiply DiffTexture0 - tex1.png DiffTextureOp0 - TextureOperation.Add DiffTexture1 - tex2.png Written as an equation, the final diffuse term for a specific pixel would be: diffFinal = DiffColor0 * sampleTex(DiffTexture0, UV0) + sampleTex(DiffTexture1, UV0) * diffContrib; T = T1 * T2 T = T1 + T2 T = T1 - T2 T = T1 / T2 T = (T1 + T2) - (T1 * T2) T = T1 + (T2 - 0.5) Defines the purpose of a texture. No texture, but the value can be used as a 'texture semantic'. A diffuse texture that is combined with the result of the diffuse lighting equation. A specular texture that is combined with the result of the specular lighting equation. An ambient texture that is combined with the ambient lighting equation. An emissive texture that is added to the result of the lighting calculation. It is not influenced by incoming light, instead it represents the light that the object is naturally emitting. A height map texture. by convention, higher gray-scale values stand for higher elevations from some base height. A tangent-space normal map. There are several conventions for normal maps and Assimp does (intentionally) not distinguish here. A texture that defines the glossiness of the material. This is the exponent of the specular (phong) lighting equation. Usually there is a conversion function defined to map the linear color values in the texture to a suitable exponent. The texture defines per-pixel opacity. usually 'white' means opaque and 'black' means 'transparency. Or quite the opposite. A displacement texture. The exact purpose and format is application-dependent. Higher color values stand for higher vertex displacements. A lightmap texture (aka Ambient occlusion). Both 'lightmaps' and dedicated 'ambient occlusion maps' are covered by this material property. The texture contains a scaling value for the final color value of a pixel. Its intensity is not affected by incoming light. A reflection texture. Contains the color of a perfect mirror reflection. This is rarely used, almost never for real-time applications. PBR texture property. Diffuse/albedo map containing base color regardless of the object surface type. PBR texture property. This is not documented in assimp native, but is a normal map in a PBR workflow. PBR texture property. Emissive color map, similar to . PBR texture property. Describes how reflective the object surface is. PBR texture property. Describes how rough or smooth the object surface is. Dedicated ambient occlusion map, some older formats may set this as a texture. An unknown texture that does not mention any of the defined texture type definitions. It is still imported, but is excluded from any further postprocessing. Defines the state of the imported scene data structure. Default state of the scene, it imported successfully. Specifies that the scene data structure that was imported is not complete. This flag bypasses some internal validations and allows the import of animation skeletons, material libaries, or camera animation paths using Assimp. Most applications won't support such data. This flag is set by the post process step if validation is successful. In a validated scene you can be sure that any cross references in the data structure (e.g. vertex indices) are valid. This flag is set by the post process step if validation is successful, but some issues have been found. This can for example mean that a texture that does not exist is referenced by a material or that the bone weights for a vertex do not sum to 1.0. In most cases you should still be able to use the import. This flag can be useful for applications which do not capture Assimp's log output. This flag is set by the post process step. It indicates that the vertices of the output mesh are not in the internal verbose format anymore. In the verbose format, all vertices are unique where no vertex is ever referenced by more than one face. Denotes the scene is pure height-map terrain data. Pure terrains usually consist of quads, sometimes triangles, in a regular grid. The x,y coordinates of all vertex positions refer to the x,y coordinates on the terrain height map, the z-axis stores the elevation at a specific point. TER (Terragen) and HMP (3D Game Studio) are height map formats. Specifies that the scene data can be shared between structures. For example: one vertex in a few faces. This differs from as that has internal meanings about postprocessing steps. Enumerates Assimp function result codes. Function returned successfully. There was an error. Assimp ran out of memory. Seek origins for Assimp's virtual file system API. Beginning of the file Current position of the file pointer. End of the file, offsets must be negative. Enumerates predefined log streaming destinations. Stream log to a file Stream log to the standard output Stream log to the standard error output. MSVC only: Stream the log to the debugger (this relies on OutputDebugString from the Win32 SDK). Defines material property types. Array of single-precision (32 bit) floats. Array of double-precision (64 bit) floats. Property is a string. Array of 32 bit integers. Byte buffer where the content is undefined. Enumerates how the native Assimp DLL was compiled Assimp compiled as a shared object (Windows: DLL); Assimp was compiled against STLport Assimp was compiled as a debug build Assimp was compiled with the boost work around. Assimp was compiled built to run single threaded. Defines how UV coordinates should be transformed. Scaling is evaluated. Rotation is evaluated. Translation is evaluated. Defines the desired file I/O mode is when opening a new file. Open the file for writing. Open the file for writing binary data to it. Open the file for writing text data to it. Open the file for reading. Open the file for reading binary data from it. Open the file for reading text data from it. Defines flags that indicate level of support for common features for a given importer. Indicates there is a textual encoding of the file format and it is supported. Indicates there is a binary encoding of the file format and it is supported. Indicates there is a compressed encoding of the file format and it is supported. Indicates that the importer reads only a very particular subset of the file format. This is common for formats that cannot easily be mapped to the Scene data structure. Indicates that the importer is experimental and used with caution - this is only reserved for importers still in development, and not typically yet in released production code. Describes a blob of exported scene data. Blobs can be nested - each blob may reference another blob, which in turn can reference another and so on. This is used to allow exporters to write more than one output for a given scene, such as material files. Existence of such files depends on the format. The stream representation of an ExportDataBlob is as follows: String: Name of the Blob int: Length of Binary Data byte[]: Binary Data bool: If has next data blob String: Name of nested blob int: Length of nested blob binary data byte[]: Nested blob binary data bool: If nested blob has next data blob .... Gets the name of the blob. The first and primary blob always has an empty string for a name. Auxillary files that are nested will have names. Get the blob data. Gets the next data blob. Gets if the blob data is valid. Creates a new ExportDataBlob. Unmanaged structure. Creates a new ExportDataBlob. Name Data Writes the data blob to the specified stream. Output stream Reads a data blob from the specified stream. Input stream Data blob Describes a file format which Assimp can export to. Gets a short string ID to uniquely identify the export format. E.g. "collada" or "obj". Gets a short description of the file format to present to users. Gets the recommended file extension for the exported file in lower case. Constructs a new ExportFormatDescription. Unmanaged structure A single face in a mesh, referring to multiple vertices. This can be a triangle if the index count is equal to three, or a polygon if the count is greater than three. Since multiple primitive types can be contained in a single mesh, this approach allows you to better examine how the mesh is constructed. If you use the post process step flag during import, then each mesh will be homogenous where primitive type is concerned. Gets the number of indices defined in the face. Gets if the face has faces (should always be true). Gets or sets the indices that refer to positions of vertex data in the mesh's vertex arrays. Constructs a new instance of the class. Constructs a new instance of the class. Face indices Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Simple implementation of an IOSystem that searches for files on the disk. This implementation can be given a number of search directories that it will attempt to locate the file in first, before using the file path given by Assimp. That way, you can load models that have files distributed in a number of other directories besides the root model's. Constructs a new FileIOSystem that does not have any search directories. Constructs a new FileIOSystem that uses the specified search directories. Search directories to search for files in Sets the search directories the FileIOSystem will use when searching for files. Directory paths Gets the search directories the FileIOSystem is using. Directory paths Opens a stream to a file. Path to the file Desired file access mode The IO stream Finds the first file that matches the file name (name + extension) in the search paths. File name (+ extension) to search for Found file path True if the file was found, false otherwise Wraps a FileStream. Metadata and feature support information for a given importer. Gets the name of the importer (e.g. Blender3D Importer) Gets the original author (blank if unknown or assimp team). Gets the name of the current maintainer, if empty then the author maintains. Gets any implementation comments. Gets the features supported by the importer. Gets the minimum version of the file format supported. If no version scheme, forwards compatible, or importer doesn't care, major/min will be zero. Gets the maximum version of the file format supported. If no version scheme, forwards compatible, or importer doesn't care, major/min will be zero. Gets the list of file extensions the importer can handle. All entries are lower case and do NOT have a leading dot. Represents an object that can be marshaled to and from a native representation. Managed object type Native value type Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Custom marshaler for usage with the for performing marshaling to-and-from unmanaged memory for non-blittable types. A type must be attributed with to automatically have an instance of its marshaler be utilized. Gets the native data size in bytes. Marshals the managed object to the unmanaged chunk of memory. Managed object to marshal. Unmanaged chunk of memory to write to. Marshals the managed object from the unmanaged chunk of memory. Unmanaged chunk of memory to read from. Managed object marshaled. Defines a stream to some file input or output source. This object is responsible for reading/writing data that is used by Assimp. Gets whether or not this IOStream has been disposed. Gets the original path to file given by Assimp. Gets the original desired file access mode. Gets whether the stream is in fact valid - that is, the input/output has been properly located and can be read/written. Constructs a new IOStream. Path to file given by Assimp Desired file access mode Finalizes an instance of the class. Disposes of resources held by the IOStream. Releases unmanaged and - optionally - managed resources. True to release both managed and unmanaged resources; False to release only unmanaged resources. Writes data to the stream. Data to write Number of bytes to write Number of bytes actually written. Should be equal to the specified count, unless if EoF was hit or an error occured. Reads data from the stream. Byte buffer to store the read data in Number of bytes to read Number of bytes actually read. Should be equal to the specified count, unless if EoF was hit or an error occured. Sets the current file position pointer. Offset in bytes from the origin Origin reference ReturnCode indicating success or failure. Gets the current file position pointer (in bytes). Current file position pointer (in bytes) Gets the total file size (in bytes). File size in bytes Flushes all data currently in the stream buffers. Closes the stream - flushing any data not yet read/written and disposes of resources. Defines a custom IO handler that can be registered to an importer that will handle I/O for assimp. This includes searching/opening files to read during import, and creating/writing to files during export. Gets whether or not this IOSystem has been disposed. Gets the number of currently opened streams. Constructs a new IOSystem. Finalizes an instance of the class. Opens a stream to a file. Path to the file Desired file access mode The IO stream Closes a stream that is owned by this IOSystem. Stream to close Closes all outstanding streams owned by this IOSystem. Disposes of all resources held by this object. Releases unmanaged and - optionally - managed resources. True to release both managed and unmanaged resources; False to release only unmanaged resources. Describes a light source in the scene. Assimp supports multiple light sources including spot, point, and directional lights. All are defined by a single structure and distinguished by their parameters. Lights have corresponding nodes in the scenegraph. Some file formats such as 3DS and ASE export a "target point", e.g. the point a spot light is looking at (it can even be animated). Assimp writes the target point as a subnode of a spotlight's main node called "spotName.Target". However, this is just additional information then, the transform tracks of the main node make the spot light already point in the right direction. Gets or sets the name of the light source. This corresponds to a node present in the scenegraph. Gets or sets the type of light source. This should never be undefined. Gets or sets the inner angle of a spot light's light cone. The spot light has maximum influence on objects inside this angle. The angle is given in radians, it is 2PI for point lights and defined for directional lights. Gets or sets the outer angle of a spot light's light cone. The spot light does not affect objects outside this angle. The angle is given in radians. It is 2PI for point lights and undefined for directional lights. The outer angle must be greater than or equal to the inner angle. Gets or sets the constant light attenuation factor. The intensity of the light source at a given distance 'd' from the light position is Atten = 1 / (att0 + att1 * d + att2 * d*d). This member corresponds to the att0 variable in the equation and is undefined for directional lights. Gets or sets the linear light attenuation factor. The intensity of the light source at a given distance 'd' from the light position is Atten = 1 / (att0 + att1 * d + att2 * d*d) This member corresponds to the att1 variable in the equation and is undefined for directional lights. Gets or sets the quadratic light attenuation factor. The intensity of the light source at a given distance 'd' from the light position is Atten = 1 / (att0 + att1 * d + att2 * d*d). This member corresponds to the att2 variable in the equation and is undefined for directional lights. Gets or sets the position of the light source in space, relative to the transformation of the node corresponding to the light. This is undefined for directional lights. Gets or sets the direction of the light source in space, relative to the transformation of the node corresponding to the light. This is undefined for point lights. Gets or sets the up vector of the light source in space, relative to the transformation of the node corresponding to the light. This is undefined for point lights. Gets or sets the diffuse color of the light source. The diffuse light color is multiplied with the diffuse material color to obtain the final color that contributes to the diffuse shading term. Gets or sets the specular color of the light source. The specular light color is multiplied with the specular material color to obtain the final color that contributes to the specular shading term. Gets or sets the ambient color of the light source. The ambient light color is multiplied with the ambient material color to obtain the final color that contributes to the ambient shading term. Gets or sets the Width (X) and Height (Y) of the area that represents an light. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Callback delegate for Assimp's LogStream. Log message Supplied user data Represents a log stream, which receives all log messages and streams them somewhere. Gets or sets, if verbose logging is enabled globally. Gets or sets the user data to be passed to the callback. Gets whether the logstream has been disposed or not. Gets whether or not the logstream is currently attached to the library. Static constructor. Constructs a new LogStream. Constructs a new LogStream. User-supplied data Constructs a new LogStream. Logging callback that is called when messages are received by the log stream. Constructs a new LogStream. Logging callback that is called when messages are received by the log stream. User-supplied data Finalizes an instance of the class. Detaches all active logstreams from the library. Gets all active logstreams that are currently attached to the library. Collection of active logstreams attached to the library. Attaches the logstream to the library. Detaches the logstream from the library. Logs a message. Message contents Releases unmanaged resources held by the LogStream. This should not be called by the user if the logstream is currently attached to an assimp importer. Releases unmanaged and - optionally - managed resources. True to release both managed and unmanaged resources; False to release only unmanaged resources. Override this method to log a message for a subclass of Logstream, if no callback was set. Message User data Called when the log stream has been attached to the assimp importer. At this point it may start receiving messages. Called when the log stream has been detatched from the assimp importer. After this point it will stop receiving messages until it is re-attached. Log stream that writes messages to the Console. Constructs a new console logstream. Constructs a new console logstream. User supplied data Log a message to the console. Message Userdata A material contains all the information that describes how to render a mesh. E.g. textures, colors, and render states. Internally all this information is stored as key-value pair properties. The class contains many convienence methods and properties for accessing non-texture/texture properties without having to know the Assimp material key names. Not all properties may be present, and if they aren't a default value will be returned. Gets the number of properties contained in the material. Checks if the material has a name property. Gets the material name value, if any. Default value is an empty string. Checks if the material has a two-sided property. Gets if the material should be rendered as two-sided. Default value is false. Checks if the material has a shading-mode property. Gets the shading mode. Default value is , meaning it is not defined. Checks if the material has a wireframe property. Gets if wireframe should be enabled. Default value is false. Checks if the material has a blend mode property. Gets the blending mode. Default value is . Checks if the material has an opacity property. Gets the opacity. Default value is 1.0f. Checks if the material has a transparency factor property. Gets the transparency factor. This is used to make a surface more or less opaque (0 = opaque, 1 = transparent). Default value is 0.0f. Checks if the material has a bump scaling property. Gets the bump scaling. Default value is 0.0f; Checks if the material has a shininess property. Gets the shininess. Default value is 0.0f; Checks if the material has a shininess strength property. Gets the shininess strength. Default vaulue is 1.0f. Checks if the material has a reflectivty property. Gets the reflectivity. Default value is 0.0f; Checks if the material has a color diffuse property. Gets the color diffuse. Default value is white. Checks if the material has a color ambient property. Gets the color ambient. Default value is (.2f, .2f, .2f, 1.0f). Checks if the material has a color specular property. Gets the color specular. Default value is black. Checks if the material has a color emissive property. Gets the color emissive. Default value is black. Checks if the material has a color transparent property. Gets the color transparent. Default value is black. Checks if the material has a color reflective property. Gets the color reflective. Default value is black. Gets if the material has a diffuse texture in the first texture index. Gets or sets diffuse texture properties in the first texture index. Gets if the material has a specular texture in the first texture index. Gets or sets specular texture properties in the first texture index. Gets if the material has a ambient texture in the first texture index. Gets or sets ambient texture properties in the first texture index. Gets if the material has a emissive texture in the first texture index. Gets or sets emissive texture properties in the first texture index. Gets if the material has a height texture in the first texture index. Gets or sets height texture properties in the first texture index. Gets if the material has a normal texture in the first texture index. Gets or sets normal texture properties in the first texture index. Gets if the material has an opacity texture in the first texture index. Gets or sets opacity texture properties in the first texture index. Gets if the material has a displacement texture in the first texture index. Gets or sets displacement texture properties in the first texture index. Gets if the material has a light map texture in the first texture index. Gets or sets light map texture properties in the first texture index. Gets if the material has an ambient occlusion map in in the first texture index. Gets or sets ambient occlusion texture properties in the first texture index. Gets if the material has a reflection texture in the first texture index. Gets or sets reflection texture properties in the first texture index. Determines if the material is part of a PBR workflow or not. Gets a group accessor for any PBR properties in the material. Gets if the material has embedded shader source code. Gets a group accessor for any embedded shader source code in the material. Constructs a new instance of the class. Helper method to construct a fully qualified name from the input parameters. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g. "$clr.diffuse,0,0" or "$tex.file,1,0". This is the name that is used as the material dictionary key. Key basename, this must not be null or empty Texture type; non-texture properties should leave this Texture index; non-texture properties should leave this zero. The fully qualified name Gets the non-texture properties contained in this Material. The name should be the "base name", as in it should not contain texture type/texture index information. E.g. "$clr.diffuse" rather than "$clr.diffuse,0,0". The extra data will be filled in automatically. Key basename The material property, if it exists Gets the material property. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g. "$clr.diffuse,0,0" or "$tex.file,1,0". Key basename Texture type; non-texture properties should leave this Texture index; non-texture properties should leave this zero. The material property, if it exists Gets the material property by its fully qualified name. The format is: {baseName},{texType},{texIndex}. E.g. "$clr.diffuse,0,0" or "$tex.file,1,0". Fully qualified name of the property The material property, if it exists Checks if the material has the specified non-texture property. The name should be the "base name", as in it should not contain texture type/texture index information. E.g. "$clr.diffuse" rather than "$clr.diffuse,0,0". The extra data will be filled in automatically. Key basename True if the property exists, false otherwise. Checks if the material has the specified property. All the input parameters are combined into the fully qualified name: {baseName},{texType},{texIndex}. E.g. "$clr.diffuse,0,0" or "$tex.file,1,0". Key basename Texture type; non-texture properties should leave this Texture index; non-texture properties should leave this zero. True if the property exists, false otherwise. Checks if the material has the specified property by looking up its fully qualified name. The format is: {baseName},{texType},{texIndex}. E.g. "$clr.diffuse,0,0" or "$tex.file,1,0". Fully qualified name of the property True if the property exists, false otherwise. Adds a property to this material. Material property True if the property was successfully added, false otherwise (e.g. null or key already present). Removes a non-texture property from the material. Property name True if the property was removed, false otherwise Removes a property from the material. Name of the property Property texture type Property texture index True if the property was removed, false otherwise Removes a property from the material. Fully qualified name of the property ({basename},{texType},{texIndex}) True if the property was removed, false otherwise Removes all properties from the material; Gets -all- properties contained in the Material. All properties in the material property map. Gets all the number of textures that are of the specified texture type. Texture type Texture count Adds a texture to the material - this bulk creates a property for each field. This will either create properties or overwrite existing properties. If the texture has no file path, nothing is added. Texture to add True if the texture properties were added or modified Adds a texture to the material - this bulk creates a property for each field. This will either create properties or overwrite existing properties. If the texture has no file path, nothing is added. Texture to add True to only set the texture's file path, false otherwise True if the texture properties were added or modified Removes a texture from the material - this bulk removes a property for each field. If the texture has no file path, nothing is removed Texture to remove True if the texture was removed, false otherwise. Gets a texture that corresponds to the type/index. Texture type Texture index Texture description True if the texture was found in the material Gets all textures that correspond to the type. Texture type The array of textures Gets all textures in the material. The array of textures Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Groups all PBR workflow properties into a single accessor. Gets if the material has a base color map (albedo/diffuse) texture in the first texture index. Gets or sets the base color map (albedo/diffuse) texture properties in the first texture index. Gets if the material has a normal map texture in the first texture index. Gets or sets the normal map texture properties in the first texture index. Gets if the material has an emission color map texture in the first texture index. Gets or sets the emission color map texture properties in the first texture index. Gets if the material has a metalness map texture in the first texture index. Gets or sets the metalness map texture properties in the first texture index. Gets if the material has a roughness map texture in the first texture index. Gets or sets the roughness map texture properties in the first texture index. Constructs new property group accessor. Material Groups all the properties for shader sources in a single accessor. Gets if the material has a property for shader language type. Gets or sets what language (HLSL, GLSL, etc) any shader source code in this material is of. Gets if the material has a property for vertex shader source code. Gets or sets vertex shader source code. Gets if the material has a property for fragment (pixel) shader source code. Gets or sets fragment (pixel) shader source code. Gets if the material has a property for geometry shader source code. Gets or sets geometry shader source code. Gets if the material has a property for tesselation shader source code. Gets or sets tesselation shader source code. Gets if the material has a property for primitive (domain) shader source code. Gets or sets primitive (domain) shader source code. Gets if the material has a property for compute shader source code. Gets or sets compute shader source code. Constructs new property group accessor. Material A key-value pairing that represents some material property. Gets or sets the property key name. E.g. $tex.file. This corresponds to the "AiMatKeys" base name constants. Gets or sets the type of property. Gets the raw byte data count. Checks if the property has data. Gets the raw byte data. To modify/read this data, see the Get/SetXXXValue methods. Gets or sets the texture type semantic, for non-texture properties this is always . Gets or sets the texture index, for non-texture properties this is always zero. Gets the property's fully qualified name. Format: "{base name},{texture type semantic},{texture index}". E.g. "$clr.diffuse,0,0". This is the key that is used to index the property in the material property map. Constructs a new instance of the class. Constructs a new instance of the class. Constructs a buffer property. Base name of the property Property value Constructs a new instance of the class. Constructs a float property. Base name of the property Property value Constructs a new instance of the class. Constructs an integer property. Base name of the property Property value Constructs a new instance of the class. Constructs a boolean property. Name of the property Property value Constructs a new instance of the class. Creates a string property. Base name of the property Property value Constructs a new instance of the class. Creates a texture property. Base name of the property Property value Texture type Texture index Constructs a new instance of the class. Creates a float array property. Base name of the property Property values Constructs a new instance of the class. Creates a int array property. Base name of the property Property values Constructs a new instance of the class. Creates a Color3D property. Base name of the property Property value Constructs a new instance of the class. Creates a Color4D property. Base name of the property Property value Gets the property raw data as a float. Float Sets the property raw data with a float. Float. True if successful, false otherwise Gets the property raw data as a double. Double Sets the property raw data with a double. Double. True if successful, false otherwise. Gets the property raw data as an integer. Integer Sets the property raw data as an integer. Integer True if successful, false otherwise Gets the property raw data as a string. String Sets the property raw data as string. String True if successful, false otherwise Gets the property raw data as a float array. Number of elements to get Float array Gets the property raw data as a float array. Float array Sets the property raw data as a float array. Values to set True if successful, otherwise false Gets the property raw data as a double array. Double array Sets the property raw data as a double array. Values to set True if successful, otherwise false Gets the property raw data as an integer array. Number of elements to get Integer array Gets the property raw data as an integer array. Integer array Sets the property raw data as an integer array. Values to set True if successful, otherwise false Gets the property raw data as a boolean. Boolean Sets the property raw data as a boolean. Boolean value True if successful, false otherwise Gets the property raw data as a Color3D. Color3D Sets the property raw data as a Color3D. Color3D True if successful, false otherwise Gets the property raw data as a Color4D. Color4D Sets the property raw data as a Color4D. Color4D True if successful, false otherwise Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents a 3x3 matrix. Assimp docs say their matrices are always row-major, and it looks like they're only describing the memory layout. Matrices are treated as column vectors however (X base in the first column, Y base the second, and Z base the third) Value at row 1, column 1 of the matrix Value at row 1, column 2 of the matrix Value at row 1, column 3 of the matrix Value at row 2, column 1 of the matrix Value at row 2, column 2 of the matrix Value at row 2, column 3 of the matrix Value at row 3, column 1 of the matrix Value at row 3, column 2 of the matrix Value at row 3, column 3 of the matrix Gets the identity matrix. Gets if this matrix is an identity matrix. Gets or sets the value at the specific one-based row, column index. E.g. i = 1, j = 2 gets the value in row 1, column 2 (MA2). Indices out of range return a value of zero. One-based Row index One-based Column index Matrix value Constructs a new Matrix3x3. Element at row 1, column 1 Element at row 1, column 2 Element at row 1, column 3 Element at row 2, column 1 Element at row 2, column 2 Element at row 2, column 3 Element at row 3, column 1 Element at row 3, column 2 Element at row 3, column 3 Constructs a new Matrix3x3. A 4x4 matrix to construct from, only taking the rotation/scaling part. Transposes this matrix (rows become columns, vice versa). Inverts the matrix. If the matrix is *not* invertible all elements are set to . Compute the determinant of this matrix. The determinant Creates a rotation matrix from a set of euler angles. Rotation angle about the x-axis, in radians. Rotation angle about the y-axis, in radians. Rotation angle about the z-axis, in radians. The rotation matrix Creates a rotation matrix from a set of euler angles. Vector containing the rotation angles about the x, y, z axes, in radians. The rotation matrix Creates a rotation matrix for a rotation about the x-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about the y-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about the z-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about an arbitrary axis. Rotation angle, in radians Rotation axis, which should be a normalized vector. The rotation matrix Creates a scaling matrix. Scaling vector The scaling vector Creates a rotation matrix that rotates a vector called "from" into another vector called "to". Based on an algorithm by Tomas Moller and John Hudges: "Efficiently Building a Matrix to Rotate One Vector to Another" Journal of Graphics Tools, 4(4):1-4, 1999 Starting vector Ending vector Rotation matrix to rotate from the start to end. Tests equality between two matrices. First matrix Second matrix True if the matrices are equal, false otherwise Tests inequality between two matrices. First matrix Second matrix True if the matrices are not equal, false otherwise Performs matrix multiplication.Multiplication order is B x A. That way, SRT concatenations are left to right. First matrix Second matrix Multiplied matrix Implicit conversion from a 4x4 matrix to a 3x3 matrix. 4x4 matrix 3x3 matrix Tests equality between this matrix and another. Other matrix to test True if the matrices are equal, false otherwise Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Represents a 4x4 column-vector matrix (X base is the first column, Y base is the second, Z base the third, and translation the fourth). Memory layout is row major. Right handed conventions are used by default. Value at row 1, column 1 of the matrix Value at row 1, column 2 of the matrix Value at row 1, column 3 of the matrix Value at row 1, column 4 of the matrix Value at row 2, column 1 of the matrix Value at row 2, column 2 of the matrix Value at row 2, column 3 of the matrix Value at row 2, column 4 of the matrix Value at row 3, column 1 of the matrix Value at row 3, column 2 of the matrix Value at row 3, column 3 of the matrix Value at row 3, column 4 of the matrix Value at row 4, column 1 of the matrix Value at row 4, column 2 of the matrix Value at row 4, column 3 of the matrix Value at row 4, column 4 of the matrix Gets the identity matrix. Gets if this matrix is an identity matrix. Gets or sets the value at the specific one-based row, column index. E.g. i = 1, j = 2 gets the value in row 1, column 2 (MA2). Indices out of range return a value of zero. One-based Row index One-based Column index Matrix value Constructs a new Matrix4x4. Element at row 1, column 1 Element at row 1, column 2 Element at row 1, column 3 Element at row 1, column 4 Element at row 2, column 1 Element at row 2, column 2 Element at row 2, column 3 Element at row 2, column 4 Element at row 3, column 1 Element at row 3, column 2 Element at row 3, column 3 Element at row 3, column 4 Element at row 4, column 1 Element at row 4, column 2 Element at row 4, column 3 Element at row 4, column 4 Constructs a new Matrix4x4. Rotation matrix to copy values from. Transposes this matrix (rows become columns, vice versa). Inverts the matrix. If the matrix is *not* invertible all elements are set to . Compute the determinant of this matrix. The determinant Decomposes a transformation matrix into its original scale, rotation, and translation components. The scaling vector receives the scaling for the x, y, z axes. The rotation is returned as a hamilton quaternion. And the translation is the output position for the x, y, z axes. Vector to hold the scaling component Quaternion to hold the rotation component Vector to hold the translation component Decomposes a transformation matrix with no scaling. The rotation is returned as a hamilton quaternion. The translation receives the output position for the x, y, z axes. Quaternion to hold the rotation component Vector to hold the translation component Creates a rotation matrix from a set of euler angles. Rotation angle about the x-axis, in radians. Rotation angle about the y-axis, in radians. Rotation angle about the z-axis, in radians. The rotation matrix Creates a rotation matrix from a set of euler angles. Vector containing the rotation angles about the x, y, z axes, in radians. The rotation matrix Creates a rotation matrix for a rotation about the x-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about the y-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about the z-axis. Rotation angle in radians. The rotation matrix Creates a rotation matrix for a rotation about an arbitrary axis. Rotation angle, in radians Rotation axis, which should be a normalized vector. The rotation matrix Creates a translation matrix. Translation vector The translation matrix Creates a scaling matrix. Scaling vector The scaling vector Creates a rotation matrix that rotates a vector called "from" into another vector called "to". Based on an algorithm by Tomas Moller and John Hudges: "Efficiently Building a Matrix to Rotate One Vector to Another" Journal of Graphics Tools, 4(4):1-4, 1999 Starting vector Ending vector Rotation matrix to rotate from the start to end. Tests equality between two matrices. First matrix Second matrix True if the matrices are equal, false otherwise Tests inequality between two matrices. First matrix Second matrix True if the matrices are not equal, false otherwise Performs matrix multiplication. Multiplication order is B x A. That way, SRT concatenations are left to right. First matrix Second matrix Multiplied matrix Implicit conversion from a 3x3 matrix to a 4x4 matrix. 3x3 matrix 4x4 matrix Tests equality between this matrix and another. Other matrix to test True if the matrices are equal, false otherwise Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Delegate for performing unmanaged memory cleanup. Location in unmanaged memory of the value to cleanup True if the unmanaged memory should be freed, false otherwise Helper static class containing functions that aid dealing with unmanaged memory to managed memory conversions. Marshals an array of managed values to a c-style unmanaged array (void*). Managed type Native type Array of managed values Pointer to unmanaged memory Marshals an array of managed values to a c-style unmanaged array (void*). This also can optionally marshal to an unmanaged array of pointers (void**). Managed type Native type Array of managed values True if the pointer is an array of pointers, false otherwise. Pointer to unmanaged memory Marshals an array of managed values from a c-style unmanaged array (void*). Managed type Native type Pointer to unmanaged memory Number of elements to marshal Marshaled managed values Marshals an array of managed values from a c-style unmanaged array (void*). This also can optionally marshal from an unmanaged array of pointers (void**). Managed type Native type Pointer to unmanaged memory Number of elements to marshal True if the pointer is an array of pointers, false otherwise. Marshaled managed values Marshals an array of blittable structs to a c-style unmanaged array (void*). This should not be used on non-blittable types that require marshaling by the runtime (e.g. has MarshalAs attributes). Struct type Managed array of structs Pointer to unmanaged memory Marshals an array of blittable structs from a c-style unmanaged array (void*). This should not be used on non-blittable types that require marshaling by the runtime (e.g. has MarshalAs attributes). Struct type Pointer to unmanaged memory Number of elements to read Managed array Frees an unmanaged array and performs cleanup for each value. This can be used on any type that can be marshaled into unmanaged memory. Struct type Pointer to unmanaged memory Number of elements to free Delegate that performs the necessary cleanup Frees an unmanaged array and performs cleanup for each value. Optionally can free an array of pointers. This can be used on any type that can be marshaled into unmanaged memory. Struct type Pointer to unmanaged memory Number of elements to free Delegate that performs the necessary cleanup True if the pointer is an array of pointers, false otherwise. Marshals a managed value to unmanaged memory. Managed type Unmanaged type Managed value to marshal Pointer to unmanaged memory Marshals a managed value from unmanaged memory. Managed type Unmanaged type Pointer to unmanaged memory The marshaled managed value Convienence method for marshaling a pointer to a structure. Only use if the type is not blittable, otherwise use the read methods for blittable types. Struct type Pointer to marshal The marshaled structure Convienence method for marshaling a pointer to a structure. Only use if the type is not blittable, otherwise use the read methods for blittable types. Struct type Pointer to marshal The marshaled structure Convienence method for marshaling a structure to a pointer. Only use if the type is not blittable, otherwise use the write methods for blittable types. Struct type Struct to marshal Pointer to unmanaged chunk of memory which must be allocated prior to this call Computes the size of the struct type using Marshal SizeOf. Only use if the type is not blittable, thus requiring marshaling by the runtime, (e.g. has MarshalAs attributes), otherwise use the SizeOf methods for blittable types. Struct type Size of the struct in bytes. Computes the size of the struct array using Marshal SizeOf. Only use if the type is not blittable, thus requiring marshaling by the runtime, (e.g. has MarshalAs attributes), otherwise use the SizeOf methods for blittable types. Struct type Array of structs Total size, in bytes, of the array's contents. Pins an object in memory, which allows a pointer to it to be returned. While the object remains pinned the runtime cannot move the object around in memory, which may degrade performance. Object to pin. Pointer to pinned object's memory location. Unpins an object in memory, allowing it to once again freely be moved around by the runtime. Object to unpin. Convienence method to dispose all items in the collection IDisposable type Collection of disposables Casts an underlying value type to an enum type, WITHOUT first casting the value to an Object. So this avoid boxing the value. Underlying value type. Enum type. Value to cast. Enum value. Allocates unmanaged memory. This memory should only be freed by this helper. Size to allocate Alignment of the memory, by default aligned along 16-byte boundary. Pointer to the allocated unmanaged memory. Allocates unmanaged memory that is cleared to a certain value. This memory should only be freed by this helper. Size to allocate Value the memory will be cleared to, by default zero. Alignment of the memory, by default aligned along 16-byte boundary. Pointer to the allocated unmanaged memory. Frees unmanaged memory that was allocated by this helper. Pointer to unmanaged memory to free. Checks if the memory is aligned to the specified alignment. Pointer to the memory Alignment value, by defauly 16-byte True if is aligned, false otherwise. Swaps the value between two references. Type of data to swap. First reference Second reference Computes a hash code using the FNV modified algorithmm. Byte data to hash. Hash code for the data. Reads a stream until the end is reached into a byte array. Based on Jon Skeet's implementation. It is up to the caller to dispose of the stream. Stream to read all bytes from Initial buffer length, default is 32K The byte array containing all the bytes from the stream Compares two arrays of bytes for equivalence. First array of data. Second array of data. True if both arrays contain the same data, false otherwise. Clears the memory to the specified value. Pointer to the memory. Value the memory will be cleared to. Number of bytes, starting from the memory pointer, to clear. Computes the size of the struct type. Struct type Size of the struct in bytes. Casts the by-ref value into a pointer. Struct type. By-ref value. Pointer to the value. Casts the readonly by-ref value into a pointer. Struct type. By-ref value. Pointer to the value. Casts the pointer into a by-ref value of the specified type. Struct type. Memory location. By-ref value. Casts one by-ref type to another, unsafely. From struct type To struct type Source by-ref value. Reference as the from type. Casts one readonly by-ref type to another, unsafely. From struct type To struct type Source by-ref value. Reference as the from type. Computes the size of the struct array. Struct type Array of structs Total size, in bytes, of the array's contents. Adds an offset to the pointer. Pointer Offset Pointer plus the offset Performs a memcopy that copies data from the memory pointed to by the source pointer to the memory pointer by the destination pointer. Destination memory location Source memory location Number of bytes to copy Returns the number of elements in the enumerable. Type of element in collection. Enumerable collection The number of elements in the enumerable collection. Converts typed element array to a byte array. Struct type Element array Byte array copy or null if the source array was not valid. Converts a byte array to a typed element array. Struct type Byte array Typed element array or null if the source array was not valid. Copies bytes from a byte array to an element array. Struct type Source byte array Starting index in destination array Destination element array Starting index in destination array Number of elements to copy Copies bytes from an element array to a byte array. Struct type Source element array Starting index in source array Destination byte array Starting index in destination array Number of elements to copy Reads data from the memory location into the array. Struct type Pointer to memory location Array to store the copied data Zero-based element index to start writing data to in the element array. Number of elements to copy Reads a single element from the memory location. Struct type Pointer to memory location The read value Reads a single element from the memory location. Struct type Pointer to memory location The read value. Writes data from the array to the memory location. Struct type Pointer to memory location Array containing data to write Zero-based element index to start reading data from in the element array. Number of elements to copy Writes a single element to the memory location. Struct type Pointer to memory location The value to write A mesh represents geometry with a single material. Gets or sets the mesh name. This tends to be used when formats name nodes and meshes independently, vertex animations refer to meshes by their names, or importers split meshes up, each mesh will reference the same (dummy) name. Gets or sets the primitive type. This may contain more than one type unless if option is not set. Gets or sets the index of the material associated with this mesh. Gets the number of vertices in this mesh. This is the count that all per-vertex lists should be the size of. Gets if the mesh has a vertex array. This should always return true provided no special scene flags are set. Gets the vertex position list. Gets if the mesh as normals. If it does exist, the count should be the same as the vertex count. Gets the vertex normal list. Gets if the mesh has tangents and bitangents. It is not possible for one to be without the other. If it does exist, the count should be the same as the vertex count. Gets the vertex tangent list. Gets the vertex bitangent list. Gets the number of faces contained in the mesh. Gets if the mesh contains faces. If no special scene flags are set, this should always return true. Gets the mesh's faces. Each face will contain indices to the vertices. Gets the number of valid vertex color channels contained in the mesh (list is not empty/not null). This can be a value between zero and the maximum vertex color count. Each individual channel should be the size of . Gets the number of valid texture coordinate channels contained in the mesh (list is not empty/not null). This can be a value between zero and the maximum texture coordinate count. Each individual channel should be the size of . Gets the array that contains each vertex color channels, by default all are lists of zero (but can be set to null). Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum vertex color channel limit. Gets the array that contains each texture coordinate channel, by default all are lists of zero (but can be set to null). Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum UV channel limit. Gets the array that contains the count of UV(W) components for each texture coordinate channel, usually 2 (UV) or 3 (UVW). A component value of zero means the texture coordinate channel does not exist. The channel index (index in the array) corresponds to the texture coordinate channel index. Gets the number of bones that influence this mesh. Gets if this mesh has bones. Gets the bones that influence this mesh. Gets the number of mesh animation attachments that influence this mesh. Gets if this mesh has mesh animation attachments. Gets the mesh animation attachments that influence this mesh. Gets or sets the morph method used when animation attachments are used. Gets or sets the axis aligned bounding box that contains the extents of the mesh. Constructs a new instance of the class. Constructs a new instance of the class. Name of the mesh. Constructs a new instance of the class. Primitive types contained in the mesh. Constructs a new instance of the class. Name of the mesh Primitive types contained in the mesh. Checks if the mesh has vertex colors for the specified channel. This returns false if the list is null or empty. The channel, if it exists, should contain the same number of entries as . Channel index True if vertex colors are present in the channel. Checks if the mesh has texture coordinates for the specified channel. This returns false if the list is null or empty. The channel, if it exists, should contain the same number of entries as . Channel index True if texture coordinates are present in the channel. Convienence method for setting this meshe's face list from an index buffer. Index buffer Indices per face True if the operation succeeded, false otherwise (e.g. not enough data) Convienence method for accumulating all face indices into a single index array. int index array Convienence method for accumulating all face indices into a single index array as unsigned integers (the default from Assimp, if you need them). uint index array Convienence method for accumulating all face indices into a single index array. short index array Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. A mesh attachment store per-vertex animations for a particular frame. You may think of this as a 'patch' for the host mesh, since the mesh attachment replaces only certain vertex data streams at a particular time. Each mesh stores 'n' attached meshes. The actual relationship between the time line and mesh attachments is established by the mesh animation channel, which references singular mesh attachments by their ID and binds them to a time offset. Gets or sets the mesh animation name. Gets the number of vertices in this mesh. This is a replacement for the host mesh's vertex count. Likewise, a mesh attachment cannot add or remove per-vertex attributes, therefore the existance of vertex data will match the existance of data in the mesh. Checks whether the attachment mesh overrides the vertex positions of its host mesh. Gets the vertex position list. Checks whether the attachment mesh overrides the vertex normals of its host mesh. Gets the vertex normal list. Checks whether the attachment mesh overrides the vertex tangents and bitangents of its host mesh. Gets the vertex tangent list. Gets the vertex bitangent list. Gets the number of valid vertex color channels contained in the mesh (list is not empty/not null). This can be a value between zero and the maximum vertex color count. Each individual channel should be the size of . Gets the number of valid texture coordinate channels contained in the mesh (list is not empty/not null). This can be a value between zero and the maximum texture coordinate count. Each individual channel should be the size of . Gets the array that contains each vertex color channels that override a specific channel in the host mesh, by default all are lists of zero (but can be set to null). Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum vertex color channel limit. Gets the array that contains each texture coordinate channel that override a specific channel in the host mesh, by default all are lists of zero (but can be set to null). Each index in the array corresponds to the texture coordinate channel. The length of the array corresponds to Assimp's maximum UV channel limit. Gets or sets the weight of the mesh animation. Constructs a new instance of the class. Checks if the mesh attachment overrides a particular set of vertex colors on the host mesh. This returns false if the list is null or empty. The index is between zero and the maximumb number of vertex color channels. Channel index True if vertex colors are present in the channel. Checks if the mesh attachment overrides a particular set of texture coordinates on the host mesh. This returns false if the list is null or empty. The index is between zero and the maximum number of texture coordinate channels. Channel index True if texture coordinates are present in the channel. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Describes vertex-based animations for a single mesh or a group of meshes. Meshes carry the animation data for each frame. The purpose of this object is to define keyframes, linking each mesh attachment to a particular point in a time. Gets or sets the name of the mesh to be animated. Empty strings are not allowed, animation meshes need to be named (not necessarily uniquely, the name can basically serve as a wildcard to select a group of meshes with similar animation setup). Gets the number of meshkeys in this animation channel. There will always be at least one key. Gets if this animation channel has mesh keys - this should always be true. Gets the mesh keyframes of the animation. This should not be null. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Binds an anim mesh (referenced by an index) to a specific point in time. The time of this key. Index of the anim mesh that corresponds to this keyframe. Constructs a new MeshKey. The time of this key. Index of the anim mesh that corresponds to this keyframe. Tests equality between two keys. The first key The second key True if the key's indices are the same, false otherwise Tests inequality between two keys. The first key The second key True if the key's indices are not equal, false otherwise. Tests inequality between two keys. The first key The second key True if the first key's time is less than the second key's. Tests inequality between two keys. The first key The second key True if the first key's time is greater than the second key's. Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Tests equality between this key and another. Other key to test True if their indices are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Describes morph-based keyframe animations for a single mesh or a group of meshes. Gets or sets the name of the mesh to be animated. Empty strings are not allowed, animation meshes need to be named (not necessarily uniquely, the name can basically serve as a wildcard to select a group of meshes with similar animation setup). Gets the number of mesh morph keys in this animation channel. There will always be at least one key. Gets if this animation channel has mesh keys - this should always be true. Gets the mesh morph keyframes of the animation. This should not be null. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Reads the unmanaged data from the native value. Input native value Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Binds a morph animation mesh to a specific point in time. Gets or sets the time of this keyframe. Gets the values at the time of this keyframe. Number of values must equal number of weights. Gets the weights at the time of this keyframe. Number of weights must equal number of values. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents a container for holding metadata, representing as key-value pairs. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents an entry in a metadata container. Gets the type of metadata. Gets the metadata data stored in this entry. Constructs a new instance of the struct. Type of the data. The data. Tests equality between two entries. First entry Second entry True if the entries are equal, false otherwise Tests inequality between two entries. First entry Second entry True if the entries are not equal, false otherwise Gets the data as the specified type. If it cannot be casted to the type, then null is returned. Type to cast the data to. Casted data or null. Determines whether the specified is equal to this instance. The to compare with this instance. True if the specified is equal to this instance; otherwise, false. Indicates whether the current object is equal to another object of the same type. An object to compare with this object. True if the current object is equal to the parameter; otherwise, false. Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns the fully qualified type name of this instance. A containing a fully qualified type name. Attribute for assocating a type with an instance. Gets the associated marshaler. Constructs a new instance of the class. Type that implements Thrown if the type is null. Thrown if the type does not implement . A node in the imported model hierarchy. Gets or sets the name of the node. Gets or sets the transformation of the node relative to its parent. Gets the node's parent, if it exists. Gets the number of children that is owned by this node. Gets if the node contains children. Gets the node's children. Gets the number of meshes referenced by this node. Gets if the node contains mesh references. Gets the indices of the meshes referenced by this node. Meshes can be shared between nodes, so there is a mesh collection owned by the scene that each node can reference. Gets the node's metadata container. Constructs a new instance of the class. Constructs a new instance of the class. Name of the node Constructs a new instance of the class. Name of the node Parent of the node Finds a node with the specific name, which may be this node or any children or children's children, and so on, if it exists. Node name The node or null if it does not exist Gets a value indicating whether this instance is native blittable. Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Describes the animation of a single node. The name specifies the bone/node which is affected by this animation chanenl. The keyframes are given in three separate seties of values, one for each position, rotation, and scaling. The transformation matrix is computed from these values and replaces the node's original transformation matrix at a specific time. This means all keys are absolute and not relative to the bone default pose. The order which the transformations are to be applied is scaling, rotation, and translation (SRT). Keys are in chronological order and duplicate keys do not pass the validation step. There most likely will be no negative time values, but they are not forbidden. Gets or sets the name of the node affected by this animation. It must exist and it must be unique. Gets the number of position keys in the animation channel. Gets if this animation channel contains position keys. Gets the position keys of this animation channel. Positions are specified as a 3D vector. If there are position keys, there should also be -at least- one scaling and one rotation key. Gets the number of rotation keys in the animation channel. Gets if the animation channel contains rotation keys. Gets the rotation keys of this animation channel. Rotations are given as quaternions. If this exists, there should be -at least- one scaling and one position key. Gets the number of scaling keys in the animation channel. Gets if the animation channel contains scaling keys. Gets the scaling keys of this animation channel. Scalings are specified in a 3D vector. If there are scaling keys, there should also be -at least- one position and one rotation key. Gets or sets how the animation behaves before the first key is encountered. By default the original transformation matrix of the affected node is used. Gets or sets how the animation behaves after the last key was processed. By default the original transformation matrix of the affected node is taken. Constructs a new instance of the class. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. A collection of child nodes owned by a parent node. Manages access to the collection while maintaing parent-child linkage. Gets the number of elements contained in the . Gets or sets the element at the specified index. The child index Gets a value indicating whether the is read-only. true if the is read-only; otherwise, false. Constructs a new instance of the class. Parent node Adds an item to the . The object to add to the . Adds a range of items to the list. Item array Removes all items from the . Determines whether the contains a specific value. The object to locate in the . true if is found in the ; otherwise, false. Copies collection contents to the array The array to copy to. Index of the array to start copying. Determines the index of a specific item in the . The object to locate in the . The index of if found in the list; otherwise, -1. Inserts an item to the at the specified index. The zero-based index at which should be inserted. The object to insert into the . Removes the item at the specified index. The zero-based index of the item to remove. Removes the first occurrence of a specific object from the . The object to remove from the . true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . Copies elements in the collection to a new array. Array of copied elements Returns an enumerator that iterates through the collection. A that can be used to iterate through the collection. Returns an enumerator that iterates through a collection. An object that can be used to iterate through the collection. Represents a plane in three-dimensional euclidean space where A, B, C are components of the plane normal and D is the distance along the normal from the origin to the plane. X component of the normal vector. Y component of the normal vector. Z component of the normal vector. Distance from the origin to the plane along the normal vector. Constructs a new Plane. X component of the normal vector. Y component of the normal vector. Z component of the normal vector. Distance from the origin to the plane along the normal vector. Static class containing preset properties for post processing options. PostProcess configuration for (some) Direct3D conventions, left handed geometry, upper left origin for UV coordinates, and clockwise face order, suitable for CCW culling. PostProcess configuration for optimizing data for real-time. Does the following steps: , , , , , and PostProcess configuration for optimizing data for real-time rendering. Does the following steps: , , , , , , , , , and PostProcess configuration for heavily optimizing the data for real-time rendering. Includes all flags in as well as , , and A 4D vector that represents a rotation. Rotation component of the quaternion/ X component of the vector part of the quaternion. Y component of the vector part of the quaternion. Z component of the vector part of the quaternion. Constructs a new Quaternion. W component X component Y component Z component Constructs a new Quaternion from a rotation matrix. Rotation matrix to create the Quaternion from. Constructs a new Quaternion from three euler angles. Pitch Yaw Roll Constructs a new Quaternion from an axis-angle. Axis Angle about the axis Normalizes the quaternion. Transforms this quaternion into its conjugate. Returns a matrix representation of the quaternion. Rotation matrix representing the quaternion. Spherical interpolation between two quaternions. Start rotation when factor == 0 End rotation when factor == 1 Interpolation factor between 0 and 1, values beyond this range yield undefined values Interpolated quaternion. Rotates a point by this quaternion. Point to rotate Quaternion representing the rotation Rotated point. Multiplies two quaternions. First quaternion Second quaternion Resulting quaternion Tests equality between two quaternions. First quaternion Second quaternion True if the quaternions are equal, false otherwise. Tests inequality between two quaternions. First quaternion Second quaternion True if the quaternions are not equal, false otherwise. Tests equality between two quaternions. Quaternion to compare True if the quaternions are equal. Tests equality between this color and another object. Object to test against True if the object is a color and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Time-value pair specifying a rotation for a given time. The time of this key. The rotation of this key. Constructs a new QuaternionKey. Time of the key. Quaternion rotation at the time frame. Tests equality between two keys. The first key The second key True if the key's rotations are the same, false otherwise. Tests inequality between two keys. The first key The second key True if the key's rotations are not the same, false otherwise. Tests inequality between two keys. The first key The second key True if the first key's time is less than the second key's. Tests inequality between two keys. The first key The second key True if the first key's time is greater than the second key's. Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Tests equality between this key and another. Other key to test True if their rotations are equal. Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Defines a 3D ray with a point of origin and a direction. Origin of the ray in space. Direction of the ray. Constructs a new Ray. Origin of the ray. Direction of the ray. Represents a completely imported model or scene. Everything that was imported from the given file can be accessed from here. Once the scene is loaded from unmanaged memory, it resides solely in managed memory and Assimp's read only copy is released. Gets or sets the state of the imported scene. By default no flags are set, but issues can arise if the flag is set to incomplete. Gets or sets the root node of the scene graph. There will always be at least the root node if the import was successful and no special flags have been set. Presence of further nodes depends on the format and content of the imported file. Gets if the scene contains meshes. Unless if no special scene flags are set this should always be true. Gets the number of meshes in the scene. Gets the meshes contained in the scene, if any. Gets if the scene contains any lights. Gets the number of lights in the scene. Gets the lights in the scene, if any. Gets if the scene contains any cameras. Gets the number of cameras in the scene. Gets the cameras in the scene, if any. Gets if the scene contains embedded textures. Gets the number of embedded textures in the scene. Gets the embedded textures in the scene, if any. Gets if the scene contains any animations. Gets the number of animations in the scene. Gets the animations in the scene, if any. Gets if the scene contains any materials. There should always be at least the default Assimp material if no materials were loaded. Gets the number of materials in the scene. There should always be at least the default Assimp material if no materials were loaded. Gets the materials in the scene. Gets the metadata of the scene. This data contains global metadata which belongs to the scene like unit-conversions, versions, vendors or other model-specific data. This can be used to store format-specific metadata as well. Constructs a new instance of the class. Clears the scene of all components. Gets an embedded texture by a string. The string may be a texture ID in the format of "*1" or is the file name of the texture. Texture ID or original file name. Embedded texture or null if it could not be found. Marshals a managed scene to unmanaged memory. The unmanaged memory must be freed with a call to , the memory is owned by AssimpNet and cannot be freed by the native library. Scene data Unmanaged scene or NULL if the scene is null. Marshals an unmanaged scene to managed memory. This does not free the unmanaged memory. The unmanaged scene data The managed scene, or null if the pointer is NULL Frees unmanaged memory allocated -ONLY- in . To free an unmanaged scene allocated by the unmanaged Assimp library, call the appropiate function. Pointer to unmanaged scene data. Gets if the native value type is blittable (that is, does not require marshaling by the runtime, e.g. has MarshalAs attributes). Writes the managed data to the native value. Optional pointer to the memory that will hold the native value. Output native value Reads the unmanaged data from the native value. Input native value Frees unmanaged memory created by . Native value to free True if the unmanaged memory should be freed, false otherwise. Represents a texel in ARGB8888 format. Blue component. Green component. Red component. Alpha component. Constructs a new Texel. Blue component. Green component. Red component. Alpha component. Tests equality between two texels. First texel Second texel True if the texels are equal, false otherwise. Tests inequality between two texels. First texel Second texel True if the texels are not equal, false otherwise. Implicitly converts a texel to a Color4D. Texel to convert Converted Color4D Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Tests equality between this key and another. Other key to test True if their indices are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Describes all the values pertaining to a particular texture slot in a material. Gets the texture file path. Gets the texture type semantic. Gets the texture index in the material. Gets the texture mapping. Gets the UV channel index that corresponds to this texture from the mesh. Gets the blend factor. Gets the texture operation. Gets the texture wrap mode for the U coordinate. Gets the texture wrap mode for the V coordinate. Gets misc flags. Constructs a new TextureSlot. Texture filepath Texture type semantic Texture index in the material Texture mapping UV channel in mesh that corresponds to this texture Blend factor Texture operation Texture wrap mode for U coordinate Texture wrap mode for V coordinate Misc flags Defines configurable properties for importing models. All properties have default values. Setting config properties are done via the SetProperty* methods in AssimpMethods. Enables time measurements. If enabled the time needed for each part of the loading process is timed and logged. Type: bool. Default: false Sets Assimp's multithreading policy. This is ignored if Assimp is built without boost.thread support. Possible values are: -1 to let Assimp decide, 0 to disable multithreading, and nay number larger than 0 to force a specific number of threads. This is only a hint and may be ignored by Assimp. Type: integer. Default: -1 Global setting to disable generation of skeleton dummy meshes. These are generated as a visualization aid in cases which the input data contains no geometry, but only animation data. So the geometry are visualizing the bones. Type: Bool. Default: false. Specifies the maximum angle that may be between two vertex tangents that their tangents and bitangents are smoothed during the step to calculate the tangent basis. The angle specified is in degrees. The maximum value is 175 degrees. Type: float. Default: 45 degrees Specifies the maximum angle that may be between two face normals at the same vertex position that their normals will be smoothed together during the calculate smooth normals step. This is commonly called the "crease angle". The angle is specified in degrees. Maximum value is 175 degrees (all vertices smoothed). Type: float. Default: 175 degrees Sets the colormap(= palette) to be used to decode embedded textures in MDL (Quake or 3DG5) files. This must be a valid path to a file. The file is 768 (256 * 3) bytes large and contains RGB triplets for each of the 256 palette entries. If the file is not found, a default palette (from Quake 1) is used. Type: string. Default: "colormap.lmp" Configures the step to keep materials matching a name in a given list. This is a list of 1 to n strings where whitespace ' ' serves as a delimiter character. Identifiers containing whitespaces must be enclosed in *single* quotation marks. Tabs or carriage returns are treated as whitespace. If a material matches one of these names, it will not be modified or removed by the post processing step nor will other materials be replaced by a reference to it. Default: string. Default: "" Configures the step to keep the scene hierarchy. Meshes are moved to worldspace, but no optimization is performed where meshes with the same materials are not joined. This option could be of used if you have a scene hierarchy that contains important additional information which you intend to parse. Type: bool. Default: false Configures the step to normalize all vertex components into the -1...1 range. That is, a bounding box for the whole scene is computed where the maximum component is taken and all meshes are scaled uniformly. This is useful if you don't know the spatial dimension of the input data. Type: bool. Default: false Configures the step to remove degenerated primitives from the import immediately. The default behavior converts degenerated triangles to lines and degenerated lines to points. Type: bool. Default: false Configures the step to check the area of a triangle to be greater than 1e-6. If this is not the case, the triangle will be removed if is set to true. Type: bool. Default: false Configures the step to preserve nodes matching a name in a given list. This is a list of 1 to n strings, whitespace ' ' serves as a delimter character. Identifiers containing whitespaces must be enclosed in *single* quotation marks. Carriage returns and tabs are treated as white space. If a node matches one of these names, it will not be modified or removed by the postprocessing step. Type: string. Default: "" Sets the maximum number of triangles a mesh can contain. This is used by the step to determine whether a mesh must be split or not. Type: int. Default: AiDefines.AI_SLM_DEFAULT_MAX_TRIANGLES Sets the maximum number of vertices in a mesh. This is used by the step to determine whether a mesh must be split or not. Type: integer. Default: AiDefines.AI_SLM_DEFAULT_MAX_VERTICES Sets the maximum number of bones that can affect a single vertex. This is used by the step. Type: integer. Default: AiDefines.AI_LBW_MAX_WEIGHTS Sets the size of the post-transform vertex cache to optimize vertices for. This is for the step. The size is given in vertices. Of course you can't know how the vertex format will exactly look like after the import returns, but you can still guess what your meshes will probably have. The default value *has* resulted in slight performance improvements for most Nvidia/AMD cards since 2002. Type: integer. Default: AiDefines.PP_ICL_PTCACHE_SIZE Input parameter to the step. It specifies the parts of the data structure to be removed. This is a bitwise combination of the flag. If no valid mesh is remaining after the step is executed, the import FAILS. Type: integer. Default: 0 Input parameter to the step. It specifies which primitive types are to be removed by the step. This is a bitwise combination of the flag. Specifying ALL types is illegal. Type: integer. Default: 0 Input parameter to the step. It specifies the floating point accuracy for animation values, specifically the epislon during the comparison. The step checks for animation tracks where all frame values are absolutely equal and removes them. Two floats are considered equal if the invariant abs(n0-n1) > epislon holds true for all vector/quaternion components. Type: float. Default: 0.0f (comparisons are exact) Input parameter to the step. Set to true to ignore texture coordinates. This may be useful if you have to assign different kinds of textures, like seasonally variable ones - one for summer and one for winter. Type: Bool. Default: false. Input parameter to the step. It specifies which UV transformations are to be evaluated. This is bitwise combination of the flag. Type: integer. Default: AiDefines.AI_UV_TRAFO_ALL (All combinations) A hint to Assimp to favour speed against import quality. Enabling this option may result in faster loading, or it may not. It is just a hint to loaders and post-processing steps to use faster code paths if possible. A value not equal to zero stands for true. Type: integer. Default: 0 Maximum bone cone per mesh for the step. Meshes are split until the max number of bones is reached. Type: integer. Default: 60 Source UV channel for tangent space computation. The specified channel must exist or an error will be raised. Type: integer. Default: 0 Threshold used to determine if a bone is kept or removed during the step. Type: float. Default: 1.0f Require all bones to qualify for deboning before any are removed. Type: bool. Default: false Configures the step to use a user defined matrix as the scene root node transformation before transforming vertices. Type: bool. Default: false Configures the step to use a user defined matrix as the scene root node transformation before transforming vertices. Type: Matrix4x4. Default: Identity Matrix Configures the step to scale the entire scene by a certain amount. Some importers provide a mechanism to define a scaling unit for the model, which this processing step can utilize. Type: Float. Default: 1.0f. Applies application-specific scale to the global scale factor to allow for backwards compatibility. Type: Float. Default: 1.0f. Sets the vertex animation keyframe to be imported. Assimp does not support vertex keyframes (only bone animation is supported). The libary reads only one frame of models with vertex animations. By default this is the first frame. The default value is 0. This option applies to all importers. However, it is also possible to override the global setting for a specific loader. You can use the AI_CONFIG_IMPORT_XXX_KEYFRAME options where XXX is a placeholder for the file format which you want to override the global setting. Type: integer. Default: 0 See the documentation for . See the documentation for . See the documentation for . See the documentation for . See the documentation for . See the documentation for . Configures the AC loader to collect all surfaces which have the "Backface cull" flag set in separate meshes. Type: bool. Default: true Configures whether the AC loader evaluates subdivision surfaces (indicated by the presence of the 'subdiv' attribute in the file). By default, Assimp performs the subdivision using the standard Catmull-Clark algorithm. Type: bool. Default: true Configures the UNREAL 3D loader to separate faces with different surface flags (e.g. two-sided vs single-sided). Type: bool. Default: true Configures the terragen import plugin to compute UV's for terrains, if they are not given. Furthermore, a default texture is assigned. UV coordinates for terrains are so simple to compute that you'll usually want to compute them on your own, if you need them. This option is intended for model viewers which want to offer an easy way to apply textures to terrains. Type: bool. Default: false Configures the ASE loader to always reconstruct normal vectors basing on the smoothing groups loaded from the file. Some ASE files carry invalid normals, others don't. Type: bool. Default: true Configures the M3D loader to detect and process multi-part Quake player models. These models usually consit of three files, lower.md3, upper.md3 and head.md3. If this propery is set to true, Assimp will try to load and combine all three files if one of them is loaded. Type: bool. Default: true Tells the MD3 loader which skin files to load. When loading MD3 files, Assimp checks whether a file named "md3_file_name"_"skin_name".skin exists. These files are used by Quake III to be able to assign different skins (e.g. red and blue team) to models. 'default', 'red', 'blue' are typical skin names. Type: string. Default: "default" Specifies the Quake 3 shader file to be used for a particular MD3 file. This can be a full path or relative to where all MD3 shaders reside. Type: string. Default: "" Configures the LWO loader to load just one layer from the model. LWO files consist of layers and in some cases it could be useful to load only one of them. This property can be either a string - which specifies the name of the layer - or an integer - the index of the layer. If the property is not set then the whole LWO model is loaded. Loading fails if the requested layer is not vailable. The layer index is zero-based and the layer name may not be empty Type: bool. Default: false (All layers are loaded) Configures the MD5 loader to not load the MD5ANIM file for a MD5MESH file automatically. The default strategy is to look for a file with the same name but with the MD5ANIm extension in the same directory. If it is found it is loaded and combined with the MD5MESH file. This configuration option can be used to disable this behavior. Type: bool. Default: false Defines the beginning of the time range for which the LWS loader evaluates animations and computes AiNodeAnim's. Assimp provides full conversion of Lightwave's envelope system, including pre and post conditions. The loader computes linearly subsampled animation channels with the frame rate given in the LWS file. This property defines the start time. Animation channels are only generated if a node has at least one envelope with more than one key assigned. This property is given in frames where '0' is the first. By default, if this property is not set, the importer takes the animation start from the input LWS file ('FirstFrame' line) Type: integer. Default: taken from file Defines the ending of the time range for which the LWS loader evaluates animations and computes AiNodeAnim's. Assimp provides full conversion of Lightwave's envelope system, including pre and post conditions. The loader computes linearly subsampled animation channels with the frame rate given in the LWS file. This property defines the end time. Animation channels are only generated if a node has at least one envelope with more than one key assigned. This property is given in frames where '0' is the first. By default, if this property is not set, the importer takes the animation end from the input LWS file. Type: integer. Default: taken from file Defines the output frame rate of the IRR loader. IRR animations are difficult to convert for Assimp and there will always be a loss of quality. This setting defines how many keys per second are returned by the converter. Type: integer. Default: 100 The Ogre importer will try to load this MaterialFile. Ogre meshes reference with material names, this does not tell Assimp where the file is located. Assimp will try to find the source file in the following order: [material-name].material, [mesh-filename-base].material, and lastly the material name defined by this config property. Type: string. Default: "Scene.Material" The Ogre importer will detect the texture usage from the filename. Normally a texture is loaded as a color map, if no target is specified in the material file. If this is enabled, then Assimp will try to detect the type from the texture filename postfix: Normal Maps: _n, _nrm, _nrml, _normal, _normals, _normalmap Specular Maps: _s, _spec, _specular, _specularmap Light Maps: _l, _light, _lightmap, _occ, _occlusion Displacement Maps: _dis, _displacement The matching is case insensitive. Postfix is taken between the last "_" and last ".". The default behavior is to detect type from lower cased texture unit name by matching against: normalmap, specularmap, lightmap, and displacementmap. For both cases if no match is found then, is used. Type: Bool. Default: false. Specifies whether the IFC loader skips over IfcSpace elements. IfcSpace elements (and their geometric representations) are used to represent free space in a building story. Type: Bool. Default: true. Specifies whether the IFC loader will use its own, custom triangulation algorithm to triangulate wall and floor meshes. If this is set to false, walls will be either triangulated by the post process triangulation or will be passed through as huge polygons with faked holes (e.g. holes that are connected with the outer boundary using a dummy edge). It is highly recommended to leave this property set to true as the default post process has some known issues with these kind of polygons. Type: Bool. Default: true. Specifies the tessellation conic angle for IFC smoothing curves. Accepted range of values is between [5, 120] Type: Float. Default: 10.0f Specifies the tessellation for IFC cylindrical shapes. E.g. the number of segments used to approximate a circle. Accepted range of values is between [3, 180]. Type: Integer. Default: 32 Specifies whether the collada loader will ignore the up direction. Type: Bool. Default: false Specifies whether the Collada loader should use Collada names as node names. If this property is set to true, the Collada names will be used as the node name. The default is to use the id tag (resp. sid tag, if no id tag is present) instead. Type: Bool. Default: false. Specifies whether the FBX importer will merge all geometry layers present in the source file or take only the first. Type: bool. Default: true. Specifies whether the FBX importer will read all materials present in the source file or take only the referenced materials, if the importer will read materials, otherwise this has no effect. Type: Bool. Default: false. Specifies whether the FBX importer will read materials. Type: Bool. Default: true. Specifies whether the FBX importer will read embedded textures. Type: Bool. Default: true. Specifies whether the fbx importer will use the legacy embedded texture naming. Type: Bool. Default: false. Specifies whether the FBX importer will read cameras. Type: Bool. Default: true. Specifies whether the FBX importer will read light sources. Type: Bool. Default: true. Specifies whether the FBX importer will read animations. Type: Bool. default: true. Specifies whether the FBX importer will act in strict mode in which only the FBX 2013 format is supported and any other sub formats are rejected. FBX 2013 is the primary target for the importer, so this format is best supported and well-tested. Type: Bool. Default: false. Specifies whether the FBX importer will preserve pivot points for transformations (as extra nodes). If set to false, pivots and offsets will be evaluated whenever possible. Type: Bool. Default: true. Specifies whether the importer will drop empty animation curves or animation curves which match the bind pose transformation over their entire defined range. Type: Bool. Default: true. Specifies whether the importer shall convert the unit from centimeter (cm) to meter (m). Type: Bool. Default: false. Specifies whether the importer will load multiple animations. Type: Bool. Default: true. Specifies whether the importer removes empty bones or not. Empty bones are often used to define connections for other models (e.g. attachment points). Type: Bool. Default: true. Specifies if the X-file exporter should use 64-bit doubles rather than 32-bit floats. Type: Bool. Default: false. Specifies whether the export should be able to export point clouds. When this flag is not defined the render data has to contain valid faces. Point clouds are only a collection of vertices which have no spatial organization by a face and the validation process will remove them. Enabling this feature will switch off the flag and enable the functionality to export pure point clouds. Type: Bool. Default: false. Static class that has a number of constants that are found in Assimp. These can be limits to configuration property default values. The constants are grouped according to their usage or where they're found in the Assimp include files. Default value for . Default value for . Default value for . Default value for . Default value for Defines the maximum number of indices per face (polygon). Defines the maximum number of bone weights. Defines the maximum number of vertices per mesh. Defines the maximum number of faces per mesh. Defines the maximum number of vertex color sets per mesh. Defines the maximum number of texture coordinate sets (UV(W) channels) per mesh. Defines the default bone count limit. Defines the deboning threshold. Defines the maximum length of a string used in AiString. Defines the default color material. Defines the default textured material (if the meshes have UV coords). Static class containing material key constants. A fully qualified mat key name here means that it's a string that combines the mat key (base) name, its texture type semantic, and its texture index into a single string delimited by commas. For non-texture material properties, the texture type semantic and texture index are always zero. Material name (String) Material name (String) Two sided property (boolean) Two sided property (boolean) Shading mode property (ShadingMode) Shading mode property (ShadingMode) Enable wireframe property (boolean) Enable wireframe property (boolean) Blending function (BlendMode) Blending function (BlendMode) Opacity (float) Opacity (float) Transparency Factor (float) Transparency Factor (float) Bumpscaling (float) Bumpscaling (float) Shininess (float) Shininess (float) Reflectivity (float) Reflectivity (float) Shininess strength (float) Shininess strength (float) Refracti (float) Refracti (float) Diffuse color (Color4D) Diffuse color (Color4D) Ambient color (Color4D) Ambient color (Color4D) Specular color (Color4D) Specular color (Color4D) Emissive color (Color4D) Emissive color (Color4D) Transparent color (Color4D) Transparent color (Color4D) Reflective color (Color4D) Reflective color (Color4D) Background image (String) Background image (String) Texture base name UVWSRC base name Texture op base name Mapping base name Texture blend base name. Mapping mode U base name Mapping mode V base name Texture map axis base name UV transform base name Texture flags base name Shader language type (string) Shader language type (string) Vertex shader source code (string) Vertex shader source code (string) Fragment/Pixel shader source code (string) Fragment/Pixel shader source code (string) Geometry shader source code (string) Geometry shader source code (string) Tesselation shader source code (string) Tesselation shader source code (string) Primitive/Domain shader source code (string) Primitive/Domain shader source code (string) Compute shader source code (string) Compute shader source code (string) Helper function to get the fully qualified name of a texture property type name. Takes in a base name constant, a texture type, and a texture index and outputs the name in the format: "baseName,TextureType,texIndex" Base name Texture type Texture index Fully qualified texture name Helper function to get the base name from a fully qualified name of a material property type name. The format of such a string is: "baseName,TextureType,texIndex" Fully qualified material property name. Base name of the property type. Singleton that governs access to the unmanaged Assimp library functions. Default name of the unmanaged library. Based on runtime implementation the prefix ("lib" on non-windows) and extension (.dll, .so, .dylib) will be appended automatically. Gets the AssimpLibrary instance. Gets if the Assimp unmanaged library supports multithreading. If it was compiled for single threading only, then it will not utilize multiple threads during import. Imports a file. Valid filename Post process flags specifying what steps are to be run after the import. Property store containing config name-values, may be null. Pointer to the unmanaged data structure. Imports a file. Valid filename Post process flags specifying what steps are to be run after the import. Pointer to an instance of AiFileIO, a custom file IO system used to open the model and any associated file the loader needs to open, passing NULL uses the default implementation. Property store containing config name-values, may be null. Pointer to the unmanaged data structure. Imports a scene from a stream. This uses the "aiImportFileFromMemory" function. The stream can be from anyplace, not just a memory stream. It is up to the caller to dispose of the stream. Stream containing the scene data Post processing flags A hint to Assimp to decide which importer to use to process the data Property store containing the config name-values, may be null. Pointer to the unmanaged data structure. Releases the unmanaged scene data structure. This should NOT be used for unmanaged scenes that were marshaled from the managed scene structure - only for scenes whose memory was allocated by the native library! Pointer to the unmanaged scene data structure. Applies a post-processing step on an already imported scene. Pointer to the unmanaged scene data structure. Post processing steps to run. Pointer to the unmanaged scene data structure. Gets all supported export formats. Array of supported export formats. Exports the given scene to a chosen file format. Returns the exported data as a binary blob which you can embed into another data structure or file. Scene to export, it is the responsibility of the caller to free this when finished. Format id describing which format to export to. Pre processing flags to operate on the scene during the export. Exported binary blob, or null if there was an error. Exports the given scene to a chosen file format and writes the result file(s) to disk. The scene to export, which needs to be freed by the caller. The scene is expected to conform to Assimp's Importer output format. In short, this means the model data should use a right handed coordinate system, face winding should be counter clockwise, and the UV coordinate origin assumed to be upper left. If the input is different, specify the pre processing flags appropiately. Format id describing which format to export to. Output filename to write to Pre processing flags - accepts any post processing step flag. In reality only a small subset are actually supported, e.g. to ensure the input conforms to the standard Assimp output format. Some may be redundant, such as triangulation, which some exporters may have to enforce due to the export format. Return code specifying if the operation was a success. Exports the given scene to a chosen file format and writes the result file(s) to disk. The scene to export, which needs to be freed by the caller. The scene is expected to conform to Assimp's Importer output format. In short, this means the model data should use a right handed coordinate system, face winding should be counter clockwise, and the UV coordinate origin assumed to be upper left. If the input is different, specify the pre processing flags appropiately. Format id describing which format to export to. Output filename to write to Pointer to an instance of AiFileIO, a custom file IO system used to open the model and any associated file the loader needs to open, passing NULL uses the default implementation. Pre processing flags - accepts any post processing step flag. In reality only a small subset are actually supported, e.g. to ensure the input conforms to the standard Assimp output format. Some may be redundant, such as triangulation, which some exporters may have to enforce due to the export format. Return code specifying if the operation was a success. Creates a modifyable copy of a scene, useful for copying the scene that was imported so its topology can be modified and the scene be exported. Valid scene to be copied Modifyable copy of the scene Attaches a log stream callback to catch Assimp messages. Pointer to an instance of AiLogStream. Enables verbose logging. True if verbose logging is to be enabled or not. Gets if verbose logging is enabled. True if verbose logging is enabled, false otherwise. Detaches a logstream callback. Pointer to an instance of AiLogStream. A return code signifying if the function was successful or not. Detaches all logstream callbacks currently attached to Assimp. Create an empty property store. Property stores are used to collect import settings. Pointer to property store Deletes a property store. Pointer to property store Sets an integer property value. Pointer to property store Property name Property value Sets a float property value. Pointer to property store Property name Property value Sets a string property value. Pointer to property store Property name Property value Sets a matrix property value. Pointer to property store Property name Property value Retrieves a color value from the material property table. Material to retrieve the data from Ai mat key (base) name to search for Texture Type semantic, always zero for non-texture properties Texture index, always zero for non-texture properties The color if it exists. If not, the default Color4D value is returned. Retrieves an array of float values with the specific key from the material. Material to retrieve the data from Ai mat key (base) name to search for Texture Type semantic, always zero for non-texture properties Texture index, always zero for non-texture properties The maximum number of floats to read. This may not accurately describe the data returned, as it may not exist or be smaller. If this value is less than the available floats, then only the requested number is returned (e.g. 1 or 2 out of a 4 float array). The float array, if it exists Retrieves an array of integer values with the specific key from the material. Material to retrieve the data from Ai mat key (base) name to search for Texture Type semantic, always zero for non-texture properties Texture index, always zero for non-texture properties The maximum number of integers to read. This may not accurately describe the data returned, as it may not exist or be smaller. If this value is less than the available integers, then only the requested number is returned (e.g. 1 or 2 out of a 4 float array). The integer array, if it exists Retrieves a material property with the specific key from the material. Material to retrieve the property from Ai mat key (base) name to search for Texture Type semantic, always zero for non-texture properties Texture index, always zero for non-texture properties The material property, if found. Retrieves a string from the material property table. Material to retrieve the data from Ai mat key (base) name to search for Texture Type semantic, always zero for non-texture properties Texture index, always zero for non-texture properties The string, if it exists. If not, an empty string is returned. Gets the number of textures contained in the material for a particular texture type. Material to retrieve the data from Texture Type semantic The number of textures for the type. Gets the texture filepath contained in the material. Material to retrieve the data from Texture type semantic Texture index The texture filepath, if it exists. If not an empty string is returned. Gets all values pertaining to a particular texture from a material. Material to retrieve the data from Texture type semantic Texture index Returns the texture slot struct containing all the information. Gets the last error logged in Assimp. The last error message logged. Checks whether the model format extension is supported by Assimp. Model format extension, e.g. ".3ds" True if the format is supported, false otherwise. Gets all the model format extensions that are currently supported by Assimp. Array of supported format extensions Gets a collection of importer descriptions that detail metadata and feature support for each importer. Collection of importer descriptions Gets the memory requirements of the scene. Pointer to the unmanaged scene data structure. The memory information about the scene. Creates a quaternion from the 3x3 rotation matrix. Quaternion struct to fill Rotation matrix Decomposes a 4x4 matrix into its scaling, rotation, and translation parts. 4x4 Matrix to decompose Scaling vector Quaternion containing the rotation Translation vector Transposes the 4x4 matrix. Matrix to transpose Transposes the 3x3 matrix. Matrix to transpose Transforms the vector by the 3x3 rotation matrix. Vector to transform Rotation matrix Transforms the vector by the 4x4 matrix. Vector to transform Matrix transformation Multiplies two 4x4 matrices. The destination matrix receives the result. First input matrix and is also the Matrix to receive the result Second input matrix, to be multiplied with "dst". Multiplies two 3x3 matrices. The destination matrix receives the result. First input matrix and is also the Matrix to receive the result Second input matrix, to be multiplied with "dst". Creates a 3x3 identity matrix. Matrix to hold the identity Creates a 4x4 identity matrix. Matrix to hold the identity Gets the Assimp legal info. String containing Assimp legal info. Gets the native Assimp DLL's minor version number. Assimp minor version number Gets the native Assimp DLL's major version number. Assimp major version number Gets the native Assimp DLL's revision version number. Assimp revision version number Returns the branchname of the Assimp runtime. The current branch name. Gets the native Assimp DLL's current version number as "major.minor.revision" string. This is the version of Assimp that this wrapper is currently using. Unmanaged DLL version Gets the native Assimp DLL's current version number as a .NET version object. Unmanaged DLL version Get the compilation flags that describe how the native Assimp DLL was compiled. Compilation flags Defines all the unmanaged assimp C-function names. Defines all of the delegates that represent the unmanaged assimp functions. Enumerates supported platforms. Windows platform. Linux platform. Mac platform. An attribute that represents the name of an unmanaged function to import. Name of the unmanaged function. Constructs a new . Name of the function. Represents management and access to an unmanaged library. An unmanaged library can be loaded and unloaded dynamically. The library then searches for a list of exported functions to create managed delegates for, allowing callers to access the library. Each OS platform has its own implementation to determine how to load unmanaged libraries. Occurs when the unmanaged library is loaded. Occurs when the unmanaged library is freed. Queries if the unmanaged library has been loaded or not. Gets the default name of the unmanaged library DLL. This is dependent based on the platform extension and name prefix. Additional names can be set in the (e.g. to load versioned DLLs) Gets the path to the unmanaged library DLL that is currently loaded. Gets the resolver used to find the unmanaged library DLL when loading. Gets or sets whether an is thrown if the unmanaged DLL fails to load for whatever reason. By default this is true. Queries if the OS is 64-bit, if false then it is 32-bit. Constructs a new . Default name (NOT path) of the unmanaged library. Delegate types to instantiate and load. Gets an enum representing the current OS that is application is executing on. Platform enumeration. Loads the unmanaged library using the . True if the library was found and successfully loaded. Loads the unmanaged library using the supplied 32 and 64 bit paths, the one chosen is based on the OS bitness. Path to the 32-bit DLL Path to the 64-bit DLL True if the library was found and successfully loaded. Loads the unmanaged library using the supplied path. Path to the unmanaged DLL. True if the library was found and successfully loaded. Frees the unmanaged library that is currently loaded. True if the library was sucessfully freed. Gets a delegate based on the unmanaged function name. Type of delegate. Name of unmanaged function that is exported by the library. The delegate, or null if not found. If library is not explicitly loaded by user, call this when trying to call an unmanaged function to load the unmanaged library from the default path. This function is thread safe. Called when the library is loaded. Called when the library is freed. Resolves unmanaged DLLs for . The process is completely configurable, where the user can supply alternative library names (e.g. versioned libs), an override library name, and probing paths. These can be set for both 32/64 bit, or seperately for 32 or 64 bit. See for the search strategy. Gets the platform that the application is running on. Constructs a new instance of the class. Platform we're resolving binaries for. Sets the collection of fallback library names (e.g. versioned libs) for 32-bit probing. Null to clear, or set of fallback library names. Sets the collection of fallback library names (e.g. versioned libs) for 64-bit probing. Null to clear, or set of fallback library names. Sets the collection of fallback library names (e.g. versioned libs) for both 32-bit and 64-bit probing. Null to clear, or set of fallback library names. Sets the collection of file paths to probe for 32-bit libraries. These paths always are first to be searched, in the order that they are given. Null to clear, or set of paths to probe. Sets the collection of file paths to probe for 64-bit libraries. These paths always are first to be searched, in the order that they are given. Null to clear, or set of paths to probe. Sets the collection of file paths to probe for both 32-bit and 64-bit libraries. These paths always are first to be searched, in the order that they are given. Null to clear, or set of paths to probe. Sets an override 32-bit library name. By default, the implementations creates a default name for the library, which is passed into for resolving. If the override is non-null, it will be used instead. This is useful if the library to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where "lib" is the prefix and ".so" the extension). Null to clear, or override library name. Sets an override 64-bit library name. By default, the implementations creates a default name for the library, which is passed into for resolving. If the override is non-null, it will be used instead. This is useful if the library to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where "lib" is the prefix and ".so" the extension). Null to clear, or override library name. Sets an override 32-bit and 64-bit library name. By default, the implementations creates a default name for the library, which is passed into for resolving. If the override is non-null, it will be used instead. This is useful if the library to be loaded is not conforming to the platform's default prefix/extension scheme (e.g. libXYZ.so on linux where "lib" is the prefix and ".so" the extension). Null to clear, or override library name. Given a library name, this function attempts to resolve the file path from which it can be loaded. Each step of the search strategy uses the fallback library names if the given name was not found in the current step. If the search is unsuccessfully, the library name is returned which means the OS will try and do its own search strategy when attempting to load the library (this is dependent on the OS). The search strategy is the following, in order of execution: Search user-specified probing paths. Search {AppBaseDirectory}/runtimes/{RID}/native/. Search {AppBaseDirectory}/. Search nuget package path, e.g. {UserProfile}/.nuget/packages/{PackageId}/{PackageVersion}/runtimes/{RID}/native/. The search strategy gives priority to user-specified probing paths, then local paths to the application, then finally examining the global nuget cache. The RID is the Runtime Identifier based on the platform/architecture, see also Microsoft's RID Catalog. Name of the library to attempt to resolve. Full file path to the library, or the file name if not found (e.g. "libXYZ.so"). Represents an aiScene struct. unsigned int, flags about the state of the scene aiNode*, root node of the scenegraph. Number of meshes contained. aiMesh**, meshes in the scene. Number of materials contained. aiMaterial**, materials in the scene. Number of animations contained. aiAnimation**, animations in the scene. Number of embedded textures contained. aiTexture**, textures in the scene. Number of lights contained. aiLight**, lights in the scene. Number of cameras contained. aiCamera**, cameras in the scene. aiMetadata*, The global metadata assigned to the scene itself. This data contains global metadata which belongs to the scene like unit-conversions, versions, vendors or other model-specific data. This can be used to store format-specific metadata as well. void*, Private data do not touch! Represents an aiNode struct. Name of the node. Node's transform relative to its parent. aiNode*, node's parent. Number of children the node owns. aiNode**, array of nodes this node owns. Number of meshes referenced by this node. unsigned int*, array of mesh indices. aiMetadata*, pointer to a metadata container. May be NULL, if an importer doesn't document metadata then it doesn't write any. Represents an aiMetadataEntry struct. Type of metadata. Pointer to data. Represents an aiMetadata struct. Length of the Keys and Values arrays. aiString*, array of keys. May not be NULL. Each entry must exist. aiMetadataEntry*, array of values. May not be NULL. Entries may be NULL if the corresponding property key has no assigned value. Represents an aiMesh struct. Note: This structure requires marshaling, due to the arrays of IntPtrs. unsigned int, bitwise flag detailing types of primitives contained. Number of vertices in the mesh, denotes length of -all- per-vertex arrays. Number of faces in the mesh. aiVector3D*, array of positions. aiVector3D*, array of normals. aiVector3D*, array of tangents. aiVector3D*, array of bitangents. aiColor4D*[Max_Value], array of arrays of vertex colors. Max_Value is defined as . aiVector3D*[Max_Value], array of arrays of texture coordinates. Max_Value is defined as . unsigned int[Max_Value], array of ints denoting the number of components for each set of texture coordinates - UV (2), UVW (3) for example. Max_Value is defined as . aiFace*, array of faces. Number of bones in the mesh. aiBone**, array of bones. Material index referencing the material in the scene. Optional name of the mesh. Number of attachment meshes. NOT CURRENTLY IN USE. aiAnimMesh**, array of attachment meshes for vertex-based animation. NOT CURRENTLY IN USE. unsigned int, method of morphing when anim meshes are specified. Axis aligned bounding box. Represents an aiTexture struct. Width of the texture. Height of the texture. sbyte[9], format extension hint. Fixed size char is two bytes regardless of encoding. Unmanaged assimp uses a char that maps to one byte. 8 for string + 1 for terminator. aiTexel*, array of texel data. Texture original filename. Sets the format hint. Format hint - must be 3 characters or less Gets the format hint. The format hint Gets the format hint. Use this to avoid struct copy if the string was passed by read-only ref. AiTexture The format hint Represents an aiFace struct. Number of indices in the face. unsigned int*, array of indices. Represents an aiBone struct. Name of the bone. Number of weights. VertexWeight*, array of vertex weights. Matrix that transforms the vertex from mesh to bone space in bind pose Represents an aiMaterialProperty struct. Name of the property (key). Textures: Specifies texture usage. None texture properties have this zero (or None). Textures: Specifies the index of the texture. For non-texture properties this is always zero. Size of the buffer data in bytes. This value may not be zero. Type of value contained in the buffer. char*, byte buffer to hold the property's value. Represents an aiMaterial struct. aiMaterialProperty**, array of material properties. Number of key-value properties. Storage allocated for key-value properties. Represents an aiNodeAnim struct. Name of the node affected by the animation. The node must exist and be unique. Number of position keys. VectorKey*, position keys of this animation channel. Positions are 3D vectors and are accompanied by at least one scaling and one rotation key. The number of rotation keys. QuaternionKey*, rotation keys of this animation channel. Rotations are 4D vectors (quaternions). If there are rotation keys there will be at least one scaling and one position key. Number of scaling keys. VectorKey*, scaling keys of this animation channel. Scalings are specified as a 3D vector, and if there are scaling keys, there will at least be one position and one rotation key. Defines how the animation behaves before the first key is encountered. Defines how the animation behaves after the last key was processed. Represents an aiMeshAnim struct. Name of the mesh to be animated. Empty string not allowed. Number of keys, there is at least one. aiMeshkey*, the key frames of the animation. There must exist at least one. Represents an aiMeshMorphKey struct. The time of this key. unsigned int*, values at the time of this key. double*, weights at the time of this key. unsigned int, the number of values/weights. Represents an aiMeshMorphAnim struct. aiString, the name of the mesh to be animated. Empty strings are not allowed, animated meshes need to be named (not necessarily uniquely, the name can basically serve as a wildcard to select a group of meshes with similar animation setup). unsigned int, number of key frames. Must be at least one. aiMeshMorphKey*, key frames of the animation. Represents an aiAnimation struct. Name of the animation. Duration of the animation in ticks. Ticks per second, 0 if not specified in imported file. Number of bone animation channels, each channel affects a single node. aiNodeAnim**, node animation channels. Each channel affects a single node. Number of mesh animation channels. Each channel affects a single mesh and defines vertex-based animation. aiMeshAnim**, mesh animation channels. Each channel affects a single mesh. Number of mesh morph animation channels. Each channel affects a single mesh and defines morphing animation. aiMeshMorphAnim**, mesh morph animation channels. Each channel affects a single mesh. Represents an aiLight struct. Name of the light. Type of light. Position of the light. Direction of the spot/directional light. Up direction of the light source in space. Undefined for point lights. Attenuation constant value. Attenuation linear value. Attenuation quadratic value. Diffuse color. Specular color. Ambient color. Spot light inner angle. Spot light outer angle. Width (X) and Height (Y) of the area that represents an light. Represents an aiCamera struct. Name of the camera. Position of the camera. Up vector of the camera. Viewing direction of the camera. Field Of View of the camera. Near clip plane distance. Far clip plane distance. The Aspect ratio. Represents an aiString struct. Byte length of the UTF-8 string, NOT logical length. Actual string data. Constructs a new instance of the struct. The string data Convienence method for getting the AiString string - if the length is not greater than zero, it returns an empty string rather than garbage. Use this to avoid struct copy if the string was passed by read-only ref. AiString AiString string data Convienence method for getting the AiString string - if the length is not greater than zero, it returns an empty string rather than garbage. AiString string data Convienence method for setting the AiString string (and length). String data to set True if the operation was successful, false otherwise. Returns the fully qualified type name of this instance. A containing a fully qualified type name. Represents a log stream, which receives all log messages and streams them somewhere. Function pointer that gets called when a message is to be logged. char*, user defined opaque data. Represents the memory requirements for the different components of an imported scene. All sizes in in bytes. Size of the storage allocated for texture data, in bytes. Size of the storage allocated for material data, in bytes. Size of the storage allocated for mesh data, in bytes. Size of the storage allocated for node data, in bytes. Size of the storage allocated for animation data, in bytes. Size of the storage allocated for camera data, in bytes. Size of the storage allocated for light data, in bytes. Total storage allocated for the imported scene, in bytes. Represents an aiAnimMesh struct. Note: This structure requires marshaling, due to the array of IntPtrs. Anim Mesh name aiVector3D*, replacement position array. aiVector3D*, replacement normal array. aiVector3D*, replacement tangent array. aiVector3D*, replacement bitangent array. aiColor4D*[Max_Value], array of arrays of vertex colors. Max_Value is defined as . aiVector3D*[Max_Value], array of arrays of texture coordinates. Max_Value is defined as . unsigned int, number of vertices. float, weight of the AnimMesh. Describes a variety of information about an importer. char*, full name of the importer (e.g. Blender3D Importer) char*, original author (blank if unknown or assimp team) char*, current maintainer, left blank if the author maintains. char*, implementation comments. E.g. unimplemented features. unsigned int, features supported by the importer. unsigned int, max major version of format supported. If no version scheme or importer doesn't care, will be zero. unsigned int, min major version of format supported. If no version scheme or importer doesn't care, will be zero. unsigned int, max major version of format supported. If no version scheme, forwards compatible, or importer doesn't care, will be zero. unsigned int, min major version of format supported. If no version scheme, forwards compatible, or importer doesn't care, will be zero. char*, list of file extensions the importer can handle. Entries are separated by space characters, and all entries are lower case WITHOUT a leading dot. (e.g. "xml dae"). Multiple importers may respond to the same file extension, assim Describes a file format which Assimp can export to. char*, a short string ID to uniquely identify the export format. e.g. "collada" or "obj" char*, a short description of the file format to present to users. char*, a recommended file extension of the exported file in lower case. Describes a blob of exported scene data. Blobs can be nested, the first blob always has an empty name. Nested blobs represent auxillary files produced by the exporter (e.g. material files) and are named accordingly. size_t, size of the data in bytes. void*, the data. AiString, name of the blob. aiExportDataBlob*, pointer to the next blob in the chain. Contains callbacks to implement a custom file system to open and close files. Function pointer to open a new file. Function pointer used to close an existing file. Char*, user defined opaque data. Contains callbacks to read and write to a file opened by a custom file system. Function pointer to read from a file. Function pointer to write to a file. Function pointer to retrieve the current position of the file cursor. Function pointer to retrieve the size of the file. Function pointer to set the current position of the file cursor. Function pointer to flush the file contents. Char*, user defined opaque data. Callback delegate for Assimp's LogStream. Log message char* pointer to user data that is passed to the callback Callback delegate for a custom file system, to write to a file. Pointer to an AiFile instance Char* pointer to data to write (casted from a void*) Size of a single element in bytes to write Number of elements to write Number of elements successfully written. Should be zero if either size or numElements is zero. May be less than numElements if an error occured. Callback delegate for a custom file system, to read from a file. Pointer to an AiFile instance. Char* pointer that will store the data read (casted from a void*) Size of a single element in bytes to read Number of elements to read Number of elements succesfully read. Should be zero if either size or numElements is zero. May be less than numElements if end of file is encountered, or if an error occured. Callback delegate for a custom file system, to tell offset/size information about the file. Pointer to an AiFile instance. Returns the current file cursor or the file size in bytes. May be -1 if an error has occured. Callback delegate for a custom file system, to flush the contents of the file to the disk. Pointer to an AiFile instance. Callback delegate for a custom file system, to set the current position of the file cursor. Pointer to An AiFile instance. Offset from the origin. Position used as a reference Returns success, if successful Callback delegate for a custom file system, to open a given file and create a new AiFile instance. Pointer to an AiFileIO instance. Path to the target file Read-write permissions to request Pointer to an AiFile instance. Callback delegate for a custom file system, to close a given file and free its memory. Pointer to an AiFileIO instance. Pointer to an AiFile instance that will be closed. Fixed length array for representing the color channels of a mesh. Length is equal to . Gets the length of the array. Gets or sets an array value at the specified index. Zero-based index. Fixed length array for representing the texture coordinate channels of a mesh. Length is equal to . Gets the length of the array. Gets or sets an array value at the specified index. Zero-based index. Fixed length array for representing the number of UV components for each texture coordinate channel of a mesh. Length is equal to . Gets the length of the array. Gets or sets an array value at the specified index. Zero-based index. Defines how an UV channel is transformed. Translation on the U and V axes. Default is 0|0 Scaling on the U and V axes. Default is 1|1. Rotation in counter-clockwise direction, specfied in radians. The rotation center is 0.5f|0.5f and the default value is zero. Represents a two-dimensional vector. X component. Y component Gets or sets the component value at the specified zero-based index in the order of XY (index 0 access X, 1 access Y. If the index is not in range, a value of zero is returned. Zero-based index. The component value Constructs a new Vector2D. X component Y component Constructs a new Vector2D with both components set the same value. Value to set both X and Y to Sets the X and Y values. X component Y component Calculates the length of the vector. Vector's length Calculates the length of the vector squared. Vector's length squared Normalizes the vector where all components add to one (Unit Vector), but preserves the direction that the vector represents. Negates the vector. Adds two vectors together. First vector Second vector Added vector Subtracts the second vector from the first vector. First vector Second vector Resulting vector Multiplies two vectors together. First vector Second vector Multiplied vector Multiplies a vector by a scalar. Source vector Scalar value Scaled vector Multiplies a vector by a scalar. Scalar value Source vector Scaled vector Divides the first vector by the second vector. First vector Second vector Divided vector Divides the vector by a divisor value. Source vector Divisor Divided vector Negates the vector. Source vector Negated vector Tests equality between two vectors. First vector Second vector True if the vectors are equal, false otherwise Tests inequality between two vectors. First vector Second vector True if the vectors are not equal, false otherwise Tests equality between this vector and another vector. Vector to test against True if components are equal Tests equality between this vector and another object. Object to test against True if the object is a vector and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Represents a three-dimensional vector. X component. Y component. Z component. Gets or sets the component value at the specified zero-based index in the order of XYZ (index 0 access X, 1 access Y, etc). If the index is not in range, a value of zero is returned. Zero-based index. The component value Constructs a new Vector3D. X component Y component Z component Constructs a new Vector3D. Vector2D containing the X, Y values Z component Constructs a new Vector3D where each component is set to the same value. Value to set X, Y, and Z to Sets the X, Y, and Z values. X component Y component Z component Calculates the length of the vector. Vector's length Calculates the length of the vector squared. Vector's length squared Normalizes the vector where all components add to one (Unit Vector), but preserves the direction that the vector represents. Negates the vector. Calculates the cross product of two vectors. First vector Second vector Resulting vector Calculates the dot product of two vectors. First vector Second vector Resulting vector Adds two vectors together. First vector Second vector Added vector Subtracts the second vector from the first vector. First vector Second vector Resulting vector Multiplies two vectors together. First vector Second vector Multiplied vector Multiplies a vector by a scalar. Source vector Scalar value Scaled vector Multiplies a vector by a scalar. Scalar value Source vector Scaled vector Transforms this vector by a 3x3 matrix. This "post-multiplies" the two. Source matrix Source vector Transformed vector Transforms this vector by a 4x4 matrix. This "post-multiplies" the two. Source matrix Source vector Transformed vector Divides the first vector by the second vector. First vector Second vector Divided vector Divides the vector by a divisor value. Source vector Divisor Divided vector Negates the vector. Source vector Negated vector Tests equality between two vectors. First vector Second vector True if the vectors are equal, false otherwise Tests inequality between two vectors. First vector Second vector True if the vectors are not equal, false otherwise Tests equality between this vector and another vector. Vector to test against True if components are equal Tests equality between this vector and another object. Object to test against True if the object is a vector and the components are equal Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Time-value pair specifying a 3D vector for a given time. The time of this key. The 3D vector value of this key. Constructs a new VectorKey. The time of this key. The 3D vector value of this key. Tests equality between two keys. The first key The second key True if the key's 3D vectors are the same, false otherwise. Tests inequality between two keys. The first key The second key True if the key's 3D vectors are not the same, false otherwise. Tests inequality between two keys. The first key The second key True if the first key's time is less than the second key's. Tests inequality between two keys. The first key The second key True if the first key's time is greater than the second key's. Determines whether the specified is equal to this instance. The to compare with this instance. true if the specified is equal to this instance; otherwise, false. Tests equality between this key and another. Other key to test True if their 3D vectors are equal. Returns a hash code for this instance. A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. Returns a that represents this instance. A that represents this instance. Represents a single influence of a bone on a vertex. Index of the vertex which is influenced by the bone. Strength of the influence in range of (0...1). All influences from all bones at one vertex amounts to 1. Constructs a new VertexWeight. Index of the vertex. Weight of the influence. Returns a that represents this instance. A that represents this instance. Internal stub type used by MemoryInterop.ILPatcher to inject fast-interop code. Depending on the type of method, the IL injection is either inline (replacing the call) or replaces the entire method body. Recommended types to use are generally blittable structs. Casts the by-ref value from one type to another. Type to cast from. Type to cast to. By-ref value. Ref to the value, as the new type. Casts the readonly by-ref value from one type to another. Type to cast from. Type to cast to. By-ref value. Ref to the value, as the new type. Casts the pointer to a by-ref value of the specified type. Type to cast to. Pointer. Ref to the value, as the new type. Write data from the managed array to the memory location. This will temporarily pin the array and do a memcpy. Type of data. Pointer to memory location to receive the data. Array containing data to write. Zero-based index to start reading data from the array. Number of elements to copy. Write data from the managed array to the memory location. This will temporarily pin the array and do an unaligned memcpy. Type of data. Pointer to memory location to write the data. Array containing data to write. Zero-based index to start reading data from the array. Number of elements to copy. Read data from the memory location to the managed array. This will temporarily pin the array and do a memcpy. Type of data. Pointer to memory location to read the data. Array to store the copied data. Zero-based index to start writing data to in the array. Number of elements to copy. Read data from the memory location to the managed array. This will temporarily pin the array and do an unaligned memcpy. Type of data. Pointer to memory location to read the data. Array to store the copied data. Zero-based index to start writing data to in the array. Number of elements to copy. Computes the size of the type (inlined). Type of data. Size of the type in bytes. Casts the by-ref value to a pointer (inlined). Note: This does not do any sort of pinning. Type of data. Ref to a value. Pointer to the memory location. Casts the readonly by-ref value to a pointer (inlined). Note: This does not do any sort of pinning. Type of data. Ref to a value. Pointer to the memory location. Writes a single element to the memory location (inlined). Type of data. Pointer to memory location. Value to be written. Writes a single element to the memory location (inlined, unaligned copy). Type of data. Pointer to memory location. Value to be written. Reads a single element from the memory location (inlined). Type of data. Pointer to memory location. Value read. Reads a single element from the memory location (inlined, unaligned copy). Type of data. Pointer to memory location. Value read. Copies the number of bytes from one pointer to the other (inlined). Pointer to the destination memory location. Pointer to the source memory location Number of bytes to copy Copies the number of bytes from one pointer to the other (inlined, unaligned copy). Pointer to the destination memory location. Pointer to the source memory location Number of bytes to copy Clears the memory to a specified value (inlined). Pointer to the memory location. Value the memory will be cleared to. Number of bytes to to set. Clears the memory to a specified value (inlined, unaligned init). Pointer to the memory location. Value the memory will be cleared to. Number of bytes to to set.