All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Added support for loading and previewing root motion translation for animations.
- Added
merge-databases
command to xc3_shader for creating combined databases. - Added support to xc3_gltf for loading
monolib/shader
images. - Added support for rendering
.wiidcm
and.idcm
collision files to xc3_viewer. - Added
xc3_model::load_collisions
for loading data from.wiidcm
and.idcm
files.
- Optimized shader database size.
- Changed shader database to store unique shader programs instead of all shaders for a model or map for reduced size and better flexibility.
- Changed arguments for xc3_gltf to support drag and drop conversions to
.glb
on Windows. The output defaults to the input path with.glb
extension if not specified. The database defaults toxc_combined.bin
in the executable directory if not specified. - Changed arguments for xc3_viewer to support drag and drop on Windows. The database defaults to
xc_combined.bin
in the executable directory if not specified. - Improved accuracy of file rebuilding.
- Changed xc3_viewer to support rendering mixed file types in the files list like
.wismhd
and.idcm
.
- Fixed an issue where wimdo skinning rebuilding for xc3_model would occasionally delete bone parenting information.
- Fixed an issue where model loading would load incorrect transforms for bones defined only in the wimdo skinning.
- Fixed an issue where xc3_model map loading would not assign the appropriate texture image data in some cases.
- Added support for exporting models and maps as a single
.glb
file with xc3_gltf. - Added support for exporting animations from a
.mot
file with xc3_gltf.
- Changed shader database to use a custom binary format for greatly reduced file sizes and loading times.
- Improved detection of texture layer blending for shader database.
- Adjusted PNG output for xc3_wgpu_batch to not export alpha for consistency with xc3_viewer.
- Improved error messages when loading camdo models with missing files.
- Improved framerates for model and map rendering.
- Optimized shader database creation.
- Adjusted wimdo model export for xc3_model to rebuild skinning information.
- Changed
xc3_model::monolib::ShaderTextures
to use a map of sampler names to textures instead of a field for each texture. - Improved the number of textures supported by
xc3_model::monolib::ShaderTextures
. - Changed arguments for xc3_gltf to require
--database
before the database path.
- Fixed an issue where some eyes would not render correctly due to incorrect handling of metalness.
- Fixed an issue where some shader database entries did not correctly multiply color by vertex color.
- Fixed an issue where some wimdo files would not rebuild correctly due to missing data.
- Removed the
pretty
option for xc3_shader database creation since it no longer applies to binary output.
- Added shader database and rendering support for layered temp maps and blending.
- Added shader database and rendering support for layered ambient occlusion maps and blending.
- Added shader database and rendering support for vertex color in layering.
- Added rendering support for layered fur shell rendering to xc3_wgpu.
- Added rendering support for selecting texture coordinate attributes to xc3_wgpu.
- Added support for morph target names to glTF export.
- Added support for isolating color channels in xc3_viewer with the RGBA or XYZW keys.
- Added support to xc3_tex for exporting cube maps with the
--cube
flag and 3D textures with the--depth
flags. - Added sampler support for camdo models.
- Changed shader database to store texture layering information for each output and channel.
- Improved detection of texture layer blending for shader database.
- Improved rendering accuracy for hair shading.
- Fixed an issue where texture layers would only assign the first channel.
- Fixed an issue where not all meshes would render in the color debug shading mode.
- Fixed an issue where
xc3_shader::graph::Graph
did not properly handle GLSL parameter syntax. - Fixed an issue where the
glsl-dependencies
command for xc3_shader did not work for variables without channels. - Fixed an issue where some Xenoblade 2 shader database entries did not contain the expected color layers.
- Fixed an issue where glTF model exports would not import correctly in some applications due to invalid node hierarchies.
- Fixed an issue where camdo materials would not always use the correct texture for alpha testing.
- Added shader database and rendering support for layered color maps and blending.
- Added shader database and rendering support for layered normal maps and blending.
- Added
latte-dependencies
command to xc3_shader for finding dependent lines from Wii U shaders as GLSL.
- Changed
xc3_model::ChannelAssignment::Textures
toxc3_model::ChannelAssignment::Texture
to simplify working with texture assignments. Access additional layers from thelayers
field onxc3_model::OutputAssignment
. - Improved appearance of textures for models saved by
xc3_model::ModelRoot::to_mxmd_model
when high quality textures have not been streamed in yet. - Improved accuracy of wilay rebuilding.
- Improved rendering accuracy of specular reflections for Xenoblade X camdo models.
- Fixed an issue where some Xenoblade 1 DE models would not render due to inaccurate shader database texture assignments.
- Fixed an issue where some Xenoblade X shader database entries incorrectly assigned color map channels.
- Removed
xc3_model::texture_layer_assignment
as it is no longer needed.
- Added support for constants and parameters to legacy shader database.
- Added support for different texture coordinates to glTF export.
- Improved rendering accuracy of outline meshes.
- Adjusted xc3_viewer window to show all loaded model file names.
- Moved image support for xc3_lib and xc3_model to an optional "image" feature.
- Improved accuracy of vertex data rebuilding.
- Improved the heuristic for color and normal map layer material texture assignments.
- Fixed an issue where
.camdo
and legacy.wimdo
models did not correctly remap indices for texture assignments. - Fixed an issue where xc3_tex would not accept formats like PNG or JPEG.
- Fixed an issue where some meshes would render as black due to incorrect deferred shader selection.
- Added rendering support for layered normal maps to xc3_wgpu.
- Added support for texture scale matrices to xc3_wgpu and the shader database.
- Added the
shader-database-legacy
command to xc3_shader for generating the Xenoblade X shader assignment database.
- Optimized the performance for loading the shader database JSON file for xc3_model.
- Adjusted decompiled shader annotation to replace constant buffer parameters with their values.
- Changed
xc3_model::shader_database::ShaderDatabase
to be an opaque wrapper. Get data using themodel
andmap
methods. - Changed
xc3_model::load_legacy
to also take an optional shader database parameter for improved material assignment accuracy. - Changed the behavior of
xc3_tex edit-wimdo
to support adding or deleting textures as long as indices form a valid range.
- Fixed an issue where some Xenoblade 3 shader database entries incorrectly assigned normal maps to glossiness.
- Fixed an issue where some UV scale and material parameter values would be incorrect due to incorrectly applying callbacks.
- Fixed an issue where some toon materials would render as black in the viewport due to incorrect specular rendering.
- Fixed an issue where material parameters would not always include all values.
- Added support for extracting textures from
.wimdo
only models to xc3_tex. - Added support for extracting textures from
.camdo
models to xc3_tex. - Added
LodData
,LodItem
, andLodGroup
to xc3_model for working with level of detail (LOD) data. - Added the
disassemble-legacy-shaders
command to xc3_shader for extracting Xenoblade X shader programs. - Added support for rebuilding materials in
ModelRoot::to_mxmd_model
for xc3_model. - Added support for extracting and editing font textures in
.wifnt
files to xc3_tex.
- Changed
Models.base_lod_indices
toModels.lod_data
for xc3_model to better reflect in game data. - Changed the behavior of
xc3_model::SkinWeights::to_influences
to skip unused influences.
- Fixed an issue loading mipmaps for some Xenoblade X textures.
- Fixed an issue where alpha meshes for Xenoblade X models did not render.
- Fixed an issue where some models did not load the correct meshes for the base level of detail (LOD).
- Fixed an issue where Xenoblade X models did not load the correct skeleton data with all bones.
- Fixed an issue where morph target attributes did not export correctly for xc3_model.
- Removed
xc3_model::should_render_lod
. Use the newLodData::is_base_lod
method instead.
- Added support to xc3_viewer for loading multiple
.wimdo
or.camdo
files. - Added
--bones
and--bounds
debug shading args to xc3_viewer. - Added support for emissive textures to glTF export.
- Added methods
xc3_model::skinning::Weights::update_weights
andxc3_model_skinning::SkinWeights::add_influences
for converting influences to the in game weight representation.
- Improved accuracy of render state and render pass assignments for Xenoblade X models.
- Adjusted generated glTF textures to include material parameters and constants for more accurate materials.
- Improved accuracy of rebuilding model and vertex data for
xc3_model::ModelRoot::to_mxmd_model
.
- Fixed an issue where some animation files failed to load with
load_animations
for xc3_model. - Fixed an issue where animations did not loop properly due to the final keyframe not extrapolating to the final frame.
- Fixed an issue where tangent and normal vertex attributes were not scaled properly.
- Fixed an issue loading Xenoblade X textures with odd dimensions.
- Fixed an issue where compressed sections in
.wismt
files did not save with the correct size.
- Added
Animation::skinning_transforms
andAnimation::model_space_transforms
to xc3_model. - Added field
texcoord_name
toChannelAssignment::Texture
for xc3_model. - Added support for
.camdo
models from Xenoblade X. - Added support for exporting
.camdo
models with xc3_gltf. - Added support for Xenoblade X
.catex
,.calut
,.caavp
, and.bmn
textures to xc3_tex. - Added support for uncompressed and zstd compressed
Xbc1
files. - Added rendering support for bone XYZ axes to xc3_wgpu.
- Renamed
Skeleton::world_transforms
toSkeleton::model_space_transforms
for xc3_model. - Optimized performance of
Msrd::from_extracted_files
using multithreading. - Changed the WeightIndex attribute to use
[u16; 2]
to better reflect in game data and avoid indexing errors. - Separated
xc3_model::ModelRoot
intoxc3_model::ModelRoot
andxc3_model::MapRoot
to better reflect in game data. - Changed the output of xc3_tex for LAPS wilay files to indicate that there are no images instead of an error.
- Fixed an issue where some glTF files exported by xc3_gltf would not load in glTF viewers or programs like Unreal Engine 5 due to validation errors.
- Fixed an issue where some BC entries failed to parse. This also caused
load_animations
for xc3_model to fail. - Fixed an issue where some LAGP .wilay files would not correctly rebuild all data.
- Added support for anisotropic filtering to xc3_wgpu.
- Added support for
monolib/shader
textures to xc3_wgpu. - Added options to set the mipmaps and quality when generating compressed files to xc3_tex.
- Improved accuracy of file rebuilding.
- Improved the readability and quality of displayed error messages for xc3_viewer, xc3_gltf, and xc3_tex.
- Renamed
GBuffer*
types and methods toOutput*
since not all shaders write to the G-Buffer textures. - Renamed
ShaderProgram
toMaterialTechnique
andShaderProgramInfo
toTechnique
to better match in game names. - Reworked render pass assignments in xc3_wgpu to better match in game. This improves rendering accuracy of transparent meshes.
- Optimized rendering performance for xc3_wgpu using frustum culling.
- Fixed an issue where compressed wilay files failed to extract or convert with xc3_tex.
- Fixed an issue where some
.wilay
LAGP files would not properly rebuild all data when saving.
- Added derives for
Clone
andPartialEq
for xc3_lib types. - Added derive for
Arbitrary
to xc3_lib and xc3_model types to facilitate fuzz testing. - Added
ModelRoot::to_mxmd_model
for applying edits to the original.wimdo
and.wismt
files. - Added
ModelBuffers::from_vertex_data
andModelBuffers::to_vertex_data
to xc3_model for converting to and from xc3_lib. - Added rendering support for stencil flags to xc3_wgpu, improving sorting accuracy of eyelashes and eyebrows.
- Added support for DLC models for Xenoblade 2 and Xenoblade 3 for the provided shader JSON databases.
- Added support for texcoord scale to glTF export via the
KHR_texture_transform
extension. This does not yet support normal and AO due to limitations in the gltf crate.
- Fixed an issue where not all morph targets were being read.
- Fixed various issues related to loading DLC models and maps for Xenoblade 2 and Xenoblade 3.
- Fixed an issue where unused alpha channels in glTF diffuse textures would cause black renders in some applications.
- Fixed an issue where the final field in a uniform buffer struct was not annotated correctly for xc3_shader.
- Improved rendering accuracy of toon shading pass.
- Improved accuracy of hair shading pass and added SNN blur kernel to Xenoblade 3 hair.
- Moved
Skeleton
field for xc3_model fromModels
toModelRoot
to better reflect in game data. - Moved
update_bone_transforms
method for xc3_wgpu toModelGroup
to better reflect in game data. - Adjusted
ModelBuffers
type for xc3_model to better reflect in game data. - Adjusted
Xc3Renderer
constructor to take a parameter for themonolib/shader
folder to load game specific global textures. - Increased resolution from 512x512 to 1024x1024 for xc3_wgpu_batch PNG files.
- Adjusted state flags for mxmd materials.
- Appended program name to file names of extracted shaders if present for xc3_shader decompile-shaders.
- Optimized the JSON representation of
ShaderDatabase
to reduce size and enable more features in the future. The types for the JSON representation are not public and should be treated as an implementation detail. See the private structs in the source code for xc3_model for details. - Improved accuracy of texture assignments for glTF export when not using a shader JSON database.
- Moved glTF export support to an optional "gltf" feature for xc3_model.
- Adjusted output file names for xc3_tex when extracting
.wimdo
textures to include the texture's name.
- Removed
read_index_buffers
,read_vertex_buffers
,read_vertex_attributes
, andread_index_buffers
from xc3_model. UseModelBuffers::from_vertex_data
instead. - Removed serialize/deserialize support from the shader database types in xc3_model. Use
ShaderDatabase::from_file
andShaderDatabase::save
instead.
- Fixed an issue where
Msrd::from_extracted_files
would sometimes incorrectly calculate streaming data offsets. - Fixed an issue where some
.wilay
files would not properly rebuild all data when saving.
- Improved accuracy of file rebuilding.
- Optimized glTF file sizes by only including referenced vertex buffers.
- Reduced memory usage and improved export times for glTF conversion.
- Changed loading functions to return an error instead of panic.
Msrd::from_extracted_files
now always packschr/tex/nx
textures into the model's.wismt
streams. This avoids conflicts for shared.wismt
texture files.- Adjusted handling of xc3_tex
chr/tex/nx
parameter to match repacking changes.
- Fixed an issue where texture dimensions were reported incorrectly for xc3_wgpu.
- Added support for Xenoblade 3
chr/tex/nx
textures for unpacking and packing Msrd files. - Added rendering support for culling to xc3_wgpu.
- Added rendering support for object outlines to xc3_wgpu.
- Added support to xc3_tex for extracting images from
.wimdo
files to a folder. - Added support to xc3_tex for replacing images in
.wimdo
files from a folder using theedit-wimdo
command.
- Fixed an issue where high resolution textures weren't read properly from legacy wismt files.
- Fixed an issue where map textures did not always correctly load the base mip level.
- Fixed an issue where generated JSON shader database entries had incorrect ordering for maps.
- Fixed an issue where meshes past the base level of detail (LOD) would not use correct skin weights.
- Renamed
write_to_file
methods tosave
for all relevant types. - Improved accuracy of file rebuilding.
- Adjusted output of xc3_tex commands to display elapsed time and converted file count.
- Adjusted wilay saving in xc3_tex to use xbc1 compression if present in the original file.
- Added
glsl-dependencies
command to xc3_shader for printing lines affecting a particular variable. - Added support for legacy streaming data used for some Xenoblade 2 models.
- Added support for PC files like
.pcmdo
and.pcsmt
. - Added support for
LAGP
in.wilay
files. - Added
TextureUsage
enum, enabling more accurate texture assignments when missing shader database information. - Added support to xc3_tex for extracting images from
.wilay
files to a folder. - Added support to xc3_tex for replacing images in
.wilay
files from a folder using theedit-wilay
command.
- Fixed an issue where material parameters were not annotated correctly in decompiled shaders.
- Fixed an issue where material parameters were not handled correctly in the shader JSON.
- Fixed an issue where some Xenoblade 3 models used incorrect vertex skinning weights.
- Fixed an issue where Xenoblade 1 DE and Xenoblade 2 models did not load the high resolution base mip level.
- Fixed an issue where map textures did not load the high resolution base mip level.
- Fixed an issue where some Xenoblade 3 DLC maps failed to load due to prop instance indexing issues.
- Fixed an issue where gltf export would fail if the destination folder did not exist.
- Improved accuracy for file rebuilding.
- Combined Msrd extract methods into a single
Msrd::extract_files
method for better performance.
- Added animation support to xc3_model.
- Added
xc3_lib::hash
module with useful in game hash and checksum implementations. - Added support for
R4G4B4A4
textures. - Added support for
BC6UFloat
textures. - Added helper functions for extracting from archives and creating archives from data.
- Added support for additional vertex data types used in Xenoblade 1 DE.
- Added support for morph targets to glTF export.
- Added support for texture samplers to glTF export.
- Added support for exporting GLSL shader code from Nvsp in Spch to xc3_lib.
- Fixed some cubic (type 1) animations not using the correct bone list during playback.
- Fixed reading of morph target data for targets after the base target.
- Fixed an issue where some anims failed to load due to incorrectly reading game specific extra data.
- Improved accuracy for file rebuilding.
- Reduced dependencies for various projects.
- Changed animation playback functions to take time in seconds to properly handle animation speed.
- Adjusted how Mibl alignment is handled to ensure the Mibl <-> DDS conversion is always 1:1.
- Adjusted glTF texture assignment to assume first texture is albedo by default.
- Switched to tracy for viewing traces.
- Adjusted decompiled shader annotation to include uniform buffers fields when possible.
First release!