Added
* Added type `ChannelAssignmentAttribute` for vertex attribute shader dependencies.
* Added method `attribute` to `ChannelAssignment`.
* Added fields `flags`, `render_flags`, `state_flags`, `work_values`, `shader_vars`, `work_callbacks`, `alpha_test_ref`, `m_unks1_1`, `m_unks1_2`, `m_unks1_3`, `m_unks1_4`, `technique_index`, `parameters`, `m_unks2_2`, and `m_unks3_1` to `Material`.
* Added shader database types in the `shader_database` module for querying the database information.
* Added type `ColorWriteMode` for material state flags.
Changed
* Renamed `Mesh.unk_mesh_index1` to `Mesh.index_buffer_index2` to better reflect in game data.
* Changed the behavior of `ModelRoot.to_mxmd_model` to also recreate materials.
* Changed the output of exceptions to include inner errors for easier debugging.
* Renamed `ChannelAssignmentTexture` to `TextureAssignment`.
* Changed field `TextureAssignment.channel_index` to `TextureAssignment.channels`.
* Changed field `TextureAssignment.texture_scale` to `TextureAssignment.texture_transforms`.
* Renamed `Shader` to `ShaderProgram`.
* Changed the `ShaderProgram.texture` method to `ShaderProgram.textures` method that returns an optional list of assigned textures.
* Changed `load_model` and `load_map` functions to take `xc3_model_py.shader_database.ShaderDatabase` instead of a path.
* Changed `load_model_legacy` to take an optional `xc3_model_py.shader_database.ShaderDatabase` argument.