Skip to main content

Python bindings for xatlas

Project description

Python bindings for xatlas

(Unofficial) Python bindings for xatlas, a library that generates texture coordinates for triangle meshes.

Installation

From source

git clone --recursive https://github.com/mworchel/xatlas-python.git
pip install ./xatlas-python

Using Pip

pip install xatlas

Usage

Parametrize a mesh and export it

import trimesh
import xatlas

# We use trimesh (https://github.com/mikedh/trimesh) to load a mesh but you can use any library.
mesh = trimesh.load_mesh("input.obj")

# The parametrization potentially duplicates vertices.
# `vmapping` contains the original vertex index for each new vertex (shape N, type uint32).
# `indices` contains the vertex indices of the new triangles (shape Fx3, type uint32)
# `uvs` contains texture coordinates of the new vertices (shape Nx2, type float32)
vmapping, indices, uvs = xatlas.parametrize(mesh.vertices, mesh.faces)

# Trimesh needs a material to export uv coordinates and always creates a *.mtl file.
# Alternatively, we can use the `export` helper function to export the mesh as obj.
xatlas.export("output.obj", mesh.vertices[vmapping], indices, uvs)

# Both `xatlas.parametrize` and `xatlas.export` also accept vertex normals

Parametrize multiple meshes using one atlas

mesh1 = trimesh.load_mesh("input1.obj")
mesh2 = trimesh.load_mesh("input2.obj")

atlas = xatlas.Atlas()

atlas.add_mesh(mesh1.vertices, mesh1.faces)
atlas.add_mesh(mesh2.vertices, mesh2.faces)

# Optionally parametrize the generation with
# `xatlas.ChartOptions` and `xatlas.PackOptions`.
atlas.generate()

vmapping1, indices1, uvs1 = atlas[0]
vmapping2, indices2, uvs2 = atlas[1]

Repack multiple parametrized meshes into one atlas

vertices1, indices1, uvs1 = load_mesh_with_uvs("input1.obj")
vertices2, indices2, uvs2 = load_mesh_with_uvs("input2.obj")

atlas = xatlas.Atlas()

atlas.add_uv_mesh(uvs1, indices1)
atlas.add_uv_mesh(uvs2, indices2)

atlas.generate()

vmapping1, indices1, uvs1 = atlas[0]
vmapping2, indices2, uvs2 = atlas[1]

Query the atlas

atlas.mesh_count  # Number of meshes
len(atlas)        # Convenience binding for `atlas.mesh_count`
atlas.get_mesh(i) # Data for the i-th mesh
atlas[i]          # Convenience binding for `atlas.get_mesh`

atlas.width       # Width of the atlas 
atlas.height      # Height of the atlas

atlas.utilization        # Utilization of the first atlas
atlas.get_utilization(i) # Utilization of i-th atlas

# The image requires passing custom PackOptions:
#   pack_options = xatlas.PackOptions()
#   pack_options.create_image = True
#   atlas.generate(pack_options=pack_options)
atlas.chart_image        # Debug image of the first atlas
atlas.get_chart_image(i) # Debug image of the i-th atlas

...               # See xatlas documentation for all properties

License

The xatlas Python bindings are provided under a MIT license. By using, distributing, or contributing to this project, you agree to the terms and conditions of this license.

References

Test model taken from the ABC dataset

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

xatlas-0.0.9.tar.gz (290.2 kB view hashes)

Uploaded Source

Built Distributions

xatlas-0.0.9-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (230.3 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

xatlas-0.0.9-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (236.0 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

xatlas-0.0.9-pp310-pypy310_pp73-macosx_10_9_x86_64.whl (206.3 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

xatlas-0.0.9-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (230.2 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

xatlas-0.0.9-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (235.9 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

xatlas-0.0.9-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (206.2 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

xatlas-0.0.9-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (230.5 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

xatlas-0.0.9-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (236.2 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

xatlas-0.0.9-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (206.2 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

xatlas-0.0.9-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (230.1 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

xatlas-0.0.9-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (235.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

xatlas-0.0.9-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (205.9 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

xatlas-0.0.9-cp312-cp312-win_amd64.whl (193.8 kB view hashes)

Uploaded CPython 3.12 Windows x86-64

xatlas-0.0.9-cp312-cp312-win32.whl (166.5 kB view hashes)

Uploaded CPython 3.12 Windows x86

xatlas-0.0.9-cp312-cp312-musllinux_1_1_x86_64.whl (745.9 kB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ x86-64

xatlas-0.0.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (227.9 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

xatlas-0.0.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (236.5 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686

xatlas-0.0.9-cp312-cp312-macosx_10_9_x86_64.whl (207.9 kB view hashes)

Uploaded CPython 3.12 macOS 10.9+ x86-64

xatlas-0.0.9-cp311-cp311-win_amd64.whl (193.1 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

xatlas-0.0.9-cp311-cp311-win32.whl (166.0 kB view hashes)

Uploaded CPython 3.11 Windows x86

xatlas-0.0.9-cp311-cp311-musllinux_1_1_x86_64.whl (746.0 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

xatlas-0.0.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (229.9 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

xatlas-0.0.9-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (235.7 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686

xatlas-0.0.9-cp311-cp311-macosx_10_9_x86_64.whl (206.2 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ x86-64

xatlas-0.0.9-cp310-cp310-win_amd64.whl (193.1 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

xatlas-0.0.9-cp310-cp310-win32.whl (165.8 kB view hashes)

Uploaded CPython 3.10 Windows x86

xatlas-0.0.9-cp310-cp310-musllinux_1_1_x86_64.whl (746.0 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

xatlas-0.0.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (230.1 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

xatlas-0.0.9-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (235.8 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686

xatlas-0.0.9-cp310-cp310-macosx_10_9_x86_64.whl (206.2 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

xatlas-0.0.9-cp39-cp39-win_amd64.whl (192.1 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

xatlas-0.0.9-cp39-cp39-win32.whl (165.9 kB view hashes)

Uploaded CPython 3.9 Windows x86

xatlas-0.0.9-cp39-cp39-musllinux_1_1_x86_64.whl (746.2 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

xatlas-0.0.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (230.2 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

xatlas-0.0.9-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (236.1 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

xatlas-0.0.9-cp39-cp39-macosx_10_9_x86_64.whl (206.3 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

xatlas-0.0.9-cp38-cp38-win_amd64.whl (193.1 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

xatlas-0.0.9-cp38-cp38-win32.whl (166.0 kB view hashes)

Uploaded CPython 3.8 Windows x86

xatlas-0.0.9-cp38-cp38-musllinux_1_1_x86_64.whl (745.9 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

xatlas-0.0.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (229.9 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

xatlas-0.0.9-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (235.4 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686

xatlas-0.0.9-cp38-cp38-macosx_10_9_x86_64.whl (206.1 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

xatlas-0.0.9-cp37-cp37m-win_amd64.whl (193.5 kB view hashes)

Uploaded CPython 3.7m Windows x86-64

xatlas-0.0.9-cp37-cp37m-win32.whl (167.2 kB view hashes)

Uploaded CPython 3.7m Windows x86

xatlas-0.0.9-cp37-cp37m-musllinux_1_1_x86_64.whl (749.2 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

xatlas-0.0.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (232.4 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

xatlas-0.0.9-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl (240.8 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686

xatlas-0.0.9-cp37-cp37m-macosx_10_9_x86_64.whl (204.4 kB view hashes)

Uploaded CPython 3.7m macOS 10.9+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page