modelio-rs
Safe Rust bindings for Apple's ModelIO framework on macOS. The published Cargo package is modelio-rs; the Rust library target is modelio.
Status: v0.2.1 adds transform authoring, transform stacks, mesh-buffer allocators, asset resolvers, procedural texture subclasses, and light-probe baking helpers on top of the v0.2.0 scene and animation surface.
Highlights
Assetfor loading, exporting, and walking ModelIO assetsMeshfor procedural primitives, vertex buffer reads, submesh inspection, and vertex descriptor accessMaterialandMaterialPropertyfor physically plausible materials and property mutationLight,PhysicallyPlausibleLight, andCamerafor scene-lighting and camera control surfacesObjectfor hierarchy creation, child traversal, path lookup, and transform-component attachmentTransform,TransformStack, and typed transform ops for explicit transform authoringMeshBufferData,MeshBufferDataAllocator, and related wrappers for buffer-authoring workflowsAssetResolverplus path, bundle, and relative resolvers for asset lookup controlVoxelArrayfor sparse voxel grids, boolean ops, and coarse mesh generationTexturefor URL-backed textures, checkerboards, procedural gradients/noise/sky cubes, metadata, writes, and texel extractionLightProbeandLightProbeIrradianceDataSourcefor probe generation and placement helpersSkeleton,PackedJointAnimation,AnimationBindComponent, and animated value wrappers for basic rigging and animation workflowsVertexDescriptorandVertexAttributewrappers for vertex layout inspection and authoring
Quick start
use *;
Surface overview
Assets + objects
Asset::new,from_url,export_to_url,place_light_probesAsset::count,object_at,object_at_path,mesh_at,meshesAsset::frame_interval,start_time,end_time,up_axisObject::new,name,path,hidden,add_child,child_at,at_path,transform_componentPathAssetResolver,BundleAssetResolver,RelativeAssetResolver, andAssetResolver::resolve_asset_named
Meshes + submeshes + vertex data
Mesh::new_box,new_plane,new_ellipsoid,new_sphere,new_cylinder,new_icosahedronMesh::vertex_count,vertex_buffers,submeshes,bounding_box,vertex_descriptorMeshBuffer::map,fill_data,allocator,zone,as_data_bufferMeshBufferData,MeshBufferDataAllocator,MeshBufferZoneDefault, andMeshBufferMapVertexAttributeData::info,bytesSubmesh::index_count,index_type,geometry_type,index_buffer,material,set_materialVertexDescriptor::info,attributes,attribute_named,copyVertexAttribute::new,info,set_initialization_value
Materials + textures
Material::new,info,material_face,property_with_semanticMaterialProperty::info,set_float,set_color,set_string,set_url,textureTexture::from_url,new_checkerboard,new_color_temperature_gradient,new_color_gradient,new_vector_noise,new_scalar_noise,new_cellular_noise,new_normal_map,new_sky_cubeTexture::info,write_to_url,update_sky_cube,texel_data_top_left,texel_data_bottom_left
Lights + cameras
Light::new,info,set_light_type,set_color_space,irradiance_at_pointLightProbe::new,reflective_texture,irradiance_texture,generate_spherical_harmonics_from_irradianceLightProbeIrradianceDataSource::new,bounding_box,spherical_harmonics_levelPhysicallyPlausibleLight::new,info,set_color_temperature,set_lumens, cone-angle and attenuation settersCamera::new,info,set_projection,set_field_of_view,look_at,look_at_from,ray_to,frame_bounding_box
Transforms + animation
Transform::new,from_component,from_matrix,translation,rotation,scale, and timed settersTransformComponent::matrix,key_times,local_transform_at_time,global_transform_with_objectTransformStack::add_translate_op,add_rotate_*_op,add_scale_op,add_matrix_op,add_orient_op,transform_opsTransformOpplus typed op wrappers with animated-value accessors
Voxels + animation
VoxelArray::new,info,set_voxel,voxel_exists,voxel_indices,voxels_within_extentVoxelArray::union_with,intersect_with,difference_with,coarse_mesh,meshSkeleton::new,info,joint_bind_transforms,joint_rest_transformsPackedJointAnimation::new,info,translations,rotations,scalesAnimationBindComponent::new,info,set_skeleton,set_packed_joint_animation,set_joint_pathsAnimatedScalar,AnimatedVector2/3/4,AnimatedQuaternion,AnimatedMatrix4x4AnimatedScalarArray,AnimatedVector3Array,AnimatedQuaternionArray
Examples
The crate ships numbered examples covering every logical area:
01_primitive_smoke02_asset_basics03_material_properties04_light_defaults05_physically_plausible_light06_camera_controls07_object_hierarchy08_voxel_array_boolean09_texture_checkerboard10_animation_bind_component11_animated_value_types12_submesh_material13_vertex_attribute_descriptor14_skeleton_basics15_transform_stack_basics16_mesh_buffer_allocator17_asset_resolver_light_probe
Run one with:
Run them all with:
for; do ; done
Tests
Integration smoke tests live under tests/ with one file per logical area plus tests/api_coverage.rs, which validates the Swift bridge against the active macOS SDK headers.
License
Licensed under either of Apache-2.0 or MIT at your option.