Skip to main content

Meshoptimizer wrapper with cython

Project description

almeshopt

almeshoptmeshoptimizer 的 Python 封装(Cython + CMake + scikit-build-core),提供面向 NumPy 的网格索引/顶点重排、渲染性能优化、压缩编解码、简化(LOD)、meshlet 构建等接口。

  • 安装pip install almeshopt
  • 导入import almeshopt
  • 实现:优先加载包内扩展模块 almeshopt_avx2(见 src/almeshopt/__init__.py

说明:当前发布策略为 只发布 AVX2 版 wheel(构建时 USE_AVX2=ON)。源码中保留了非 AVX2 的扩展实现入口,但目前不发布对应 wheel。


快速开始

安 装

pip install -U almeshopt numpy

典型用法:简化 + 顶点/索引重排

import numpy as np
import almeshopt

# indices: (N*3,) uint32
# vertices: (V,3) float32,必须 C-contiguous
indices = np.array([0, 1, 2, 2, 3, 0], dtype=np.uint32)
vertices = np.array([[0,0,0],[1,0,0],[1,1,0],[0,1,0]], dtype=np.float32)

# 目标三角形数量(这里演示:减半)
new_indices, error = almeshopt.simplify(
    indices,
    vertices,
    target_count=len(indices)//2,
    target_error=1e-2,
)

# 进一步优化:顶点 fetch 重排(返回 new_indices, new_vertices)
opt_indices, opt_vertices = almeshopt.optimize_vertex_fetch(new_indices, vertices)
print(opt_indices.shape, opt_vertices.shape, error)

API 参考(当前仓库实际封装的接口)

下列函数均来自扩展模块(src/almeshopt/almeshopt.pyx / src/almeshopt/almeshopt_avx2.pyx),导入统一使用 import almeshopt

约定:indices 通常为 np.uint32 的一维数组(长度为三角形数 × 3);vertices 通常为二维数组(例如 (V, 3)np.float32)。多数接口要求数组为 C-contiguous

1)重映射与索引生成

  • generate_vertex_remap(indices, vertices)(remap, unique_count)
    根据 indices + vertices 生成顶点重映射表。
  • remap_vertex_buffer(vertices, remap)new_vertices
  • remap_index_buffer(indices, remap)new_indices
  • generate_shadow_index_buffer(indices, vertices)shadow_indices
  • generate_adjacency_index_buffer(indices, vertices)adjacency_indices(每个三角形 6 个索引)

2)渲染性能优化

  • optimize_vertex_cache(indices, vertex_count)new_indices
  • optimize_vertex_cache_strip(indices, vertex_count)new_indices
  • optimize_overdraw(indices, vertices, threshold=1.05)new_indices
  • optimize_vertex_fetch(indices, vertices)(new_indices, new_vertices)

3)压缩与解压(索引/顶点)

  • encode_index_buffer(indices, vertex_count)bytes
  • decode_index_buffer(encoded_data, index_count)np.ndarray[np.uint32]
  • encode_vertex_buffer(vertices, level=2)bytes
    支持任意 C-contiguous 的 numpy 数组(例如 float32/uint16/uint8),level 越高压缩率越好但更慢。
  • decode_vertex_buffer(encoded_data, vertex_count, vertex_stride, dtype=np.float32)np.ndarray
    vertex_stride 单位是 字节(例如 uint16XYZ0 padding,stride=8)。
  • encode_filter_oct(data, bits=8)np.ndarray[np.uint8]
    Octahedral 编码(目前封装为返回字节数组;使用前请确保输入数据形状/stride符合预期)。

4)简化(LOD)

  • simplify(indices, vertices, target_count, target_error=0.01, sloppy=False, vertex_lock=None)(new_indices, error)
  • simplify_with_attributes(indices, vertices, attributes, weights, target_count, target_error=0.01, vertex_lock=None)(new_indices, error)
  • simplify_points(vertices, target_count, colors=None, color_weight=1.0)indices

5)空间排序

  • spatial_sort_triangles(indices, vertices)new_indices
  • spatial_sort_remap(vertices)remap

6)分析(统计指标)

  • analyze_vertex_cache(indices, vertex_count, cache_size=16, warp_size=0, primgroup_size=0)dict
  • analyze_overdraw(indices, vertices)dict

7)Meshlets(Mesh Shading)

  • build_meshlets(indices, vertices, max_vertices=64, max_triangles=124, cone_weight=0.0)dict
    返回键:meshlets(Nx4)、meshlet_verticesmeshlet_triangles
  • compute_meshlet_bounds(meshlet_vertices, meshlet_triangles, vertices)dict

8)Triangle Strip

  • stripify(indices, vertex_count)strip_indices

示例(仓库内 demos)

目录:demos/

  • 点云压缩(带颜色)demos/ply_compress.py / demos/ply_decompress.py
    主要展示 encode_vertex_buffer / decode_vertex_buffer 的用法(uint16 几何 + uint8 颜色)。
  • GLTF/GLB 简化(带 UV)demos/mesh_simp_with_texture.py
    展示 generate_vertex_remapremap_*simplifyoptimize_vertex_fetch 的组合使用。

“地形切片 / Cesium Terrain”接口说明

你可能在仓库中看到了 dem_to_cesium_terrain_*.plan.md 之类的规划文档,但当前仓库代码里并没有 TerrainTiler / .terrain 编码器等实现文件(例如 terrain_tiler.pyquantized_mesh.*terrain_mesher.* 均不存在)。
因此,本包当前对外 API 只包含 meshoptimizer 封装(见上文 API 参考),不包含地形瓦片管线接口。

如果你希望把地形切片管线也纳入 almeshopt 并发布为 wheel,我们可以再按“规划文档 → 实际代码”补齐对应 C++/Cython/Python 层实现与测试。


构建与发布(维护者)

构建 wheel(Windows + Linux manylinux via Docker Desktop)

仓库提供 PowerShell 脚本,目录:scripts/

  • 一键构建并上传(默认 cp311/cp312/cp313/cp314;Windows+Linux)
.\scripts\release.ps1
  • 只构建 Windows wheel
.\scripts\release.ps1 -Platform windows -SkipUpload
  • 只构建 Linux manylinux x86_64(Docker Desktop)
.\scripts\release.ps1 -Platform linux -SkipUpload

上传到 PyPI

推荐使用环境变量 PYPI_API_TOKEN

$env:PYPI_API_TOKEN="pypi-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
.\scripts\upload_pypi.ps1 -SkipExisting

中文终端显示:脚本中已包含 chcp 65001 + UTF-8 输出设置,并默认禁用 twine 进度条以避免 GBK 控制台编码问题。


常见问题(FAQ)

1)为什么 pip install almeshopt 但内部模块叫 almeshopt_avx2

almeshopt_avx2 是包内部的扩展模块名;对用户而言 安装名与导入名都始终是 almeshoptalmeshopt/__init__.py 会优先加载 AVX2 扩展。

2)数组需要什么 dtype / shape?

不同接口对 dtype/shape 有要求;最通用的组合是:

  • indices: np.uint32,形状 (T*3,)
  • vertices: np.float32,形状 (V,3) 或拼接属性后的 (V, k) 并确保 np.ascontiguousarray(...)

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

almeshopt-0.1.10-cp314-cp314-win_amd64.whl (136.3 kB view details)

Uploaded CPython 3.14Windows x86-64

almeshopt-0.1.10-cp314-cp314-win32.whl (114.4 kB view details)

Uploaded CPython 3.14Windows x86

almeshopt-0.1.10-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (276.1 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

almeshopt-0.1.10-cp313-cp313-win_amd64.whl (133.2 kB view details)

Uploaded CPython 3.13Windows x86-64

almeshopt-0.1.10-cp313-cp313-win32.whl (111.7 kB view details)

Uploaded CPython 3.13Windows x86

almeshopt-0.1.10-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (275.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

almeshopt-0.1.10-cp312-cp312-win_amd64.whl (133.0 kB view details)

Uploaded CPython 3.12Windows x86-64

almeshopt-0.1.10-cp312-cp312-win32.whl (111.8 kB view details)

Uploaded CPython 3.12Windows x86

almeshopt-0.1.10-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (271.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

almeshopt-0.1.10-cp311-cp311-win_amd64.whl (136.6 kB view details)

Uploaded CPython 3.11Windows x86-64

almeshopt-0.1.10-cp311-cp311-win32.whl (113.7 kB view details)

Uploaded CPython 3.11Windows x86

almeshopt-0.1.10-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (272.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

File details

Details for the file almeshopt-0.1.10-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: almeshopt-0.1.10-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 136.3 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for almeshopt-0.1.10-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 0334afb78e504c9f842b1764d39fc8884214073a451d90d3b7fe2553a0f55a64
MD5 8194528f770faf55ca41383dc11eb3c1
BLAKE2b-256 8b98f9b1306205f9d3e0da6995f47d843d11d74ab488f8bcd545b745d957822c

See more details on using hashes here.

File details

Details for the file almeshopt-0.1.10-cp314-cp314-win32.whl.

File metadata

  • Download URL: almeshopt-0.1.10-cp314-cp314-win32.whl
  • Upload date:
  • Size: 114.4 kB
  • Tags: CPython 3.14, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for almeshopt-0.1.10-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 f7fddc69516569be7bf44832e59284cc6100813f7f1bacbdafeb29d582039d85
MD5 c45a193518ec284394e2b5f6b972c493
BLAKE2b-256 b7f15df236845e1fea4550381e766f6f0cc9b3f666732240f86c3b27d3e0c764

See more details on using hashes here.

File details

Details for the file almeshopt-0.1.10-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for almeshopt-0.1.10-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 4d80dce6816c427a9a0088a25d506a06041cb03ef30f964b4565ca3aaa86cd11
MD5 a7f7d16f051bc72324bb33aec745558b
BLAKE2b-256 8e7ed43f44ff991fea994b964107f2b522558a4d340b9f5bf4bcda42e5c50a2b

See more details on using hashes here.

File details

Details for the file almeshopt-0.1.10-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: almeshopt-0.1.10-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 133.2 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for almeshopt-0.1.10-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 8e0d84c69303f6efc9ac41411838f73ab3e8c12df062dafcb1318e2856bedd20
MD5 0f45bdf11491dd78ee33861975aa2159
BLAKE2b-256 2b4380d3875c6e304ba8e281f1ad85446507f1f5791ea7a1efedcd294b0b0b67

See more details on using hashes here.

File details

Details for the file almeshopt-0.1.10-cp313-cp313-win32.whl.

File metadata

  • Download URL: almeshopt-0.1.10-cp313-cp313-win32.whl
  • Upload date:
  • Size: 111.7 kB
  • Tags: CPython 3.13, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for almeshopt-0.1.10-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 a537df1c92fc7c275af06f6b6cb5c1db88978c7d5657fa98f87c02c809cd1354
MD5 7188fc9f8148b913f7146e195d13db7d
BLAKE2b-256 837db616834509845915f2b8125e88cd0020331b3ba20da6bd2a98a48caa1c1b

See more details on using hashes here.

File details

Details for the file almeshopt-0.1.10-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for almeshopt-0.1.10-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 3204281c5ab9d6fc2bfd6727856926126fd39832aa2d8c98f66d9db3cda7cc18
MD5 581f9e046cf948db2d01e42a67ce5039
BLAKE2b-256 4fc86b9d79aa1297a8672138e24e4e00ffff83221c342e230f48988b3d3ff022

See more details on using hashes here.

File details

Details for the file almeshopt-0.1.10-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: almeshopt-0.1.10-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 133.0 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for almeshopt-0.1.10-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 451b06c87981550d8926bec518f42dc124bbdc021080fb27217f06bce66f9f32
MD5 096ac9140f52d8545f83d364faa47dcd
BLAKE2b-256 62228979208b19f1cf94b38c46a6aa063eb28b04059744186265b6fd61102edb

See more details on using hashes here.

File details

Details for the file almeshopt-0.1.10-cp312-cp312-win32.whl.

File metadata

  • Download URL: almeshopt-0.1.10-cp312-cp312-win32.whl
  • Upload date:
  • Size: 111.8 kB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for almeshopt-0.1.10-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 2b32cf4bb5c2eef5139fb09935500b9af8431881465056d52f3fa4d6f758b274
MD5 58da33c8b102a5d4a27cf8cd0e51db1f
BLAKE2b-256 2be26b0edc497b496b93fef0cfbb1f12a4bc50f7c317f3ab98909f4480b328d1

See more details on using hashes here.

File details

Details for the file almeshopt-0.1.10-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for almeshopt-0.1.10-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 8e80b8de07a0d509f75efdc11fb37e3d28eb162a8dce6875f6d46f560d0d4812
MD5 4b39003981940eb8095c6e2c698307d5
BLAKE2b-256 8301bb1d38a3223689f76971dc5bc1b158922747b5d52acc9d1482fd8100c9ca

See more details on using hashes here.

File details

Details for the file almeshopt-0.1.10-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: almeshopt-0.1.10-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 136.6 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for almeshopt-0.1.10-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d9cb8dee3b77c1e0f1b661b1da74e30c201e109e15931372ba7a2c8a0ce827bc
MD5 775a9fece5e6335437f08c5cd4eef83e
BLAKE2b-256 b64888860f999db8c0328988d61e77ddaed968bcc53bb2aefa4f498cff8e6abe

See more details on using hashes here.

File details

Details for the file almeshopt-0.1.10-cp311-cp311-win32.whl.

File metadata

  • Download URL: almeshopt-0.1.10-cp311-cp311-win32.whl
  • Upload date:
  • Size: 113.7 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for almeshopt-0.1.10-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 db03334a15667cca0bb556dd8f051504dbff5dc9d1dd0ae0e6ec213916821316
MD5 b4cb0206e08428f0ab7e7543866a66b9
BLAKE2b-256 ac3afd91b84e02a73ec9ba77dbc697c3596dc89ef23506bd32577281abf5ef3e

See more details on using hashes here.

File details

Details for the file almeshopt-0.1.10-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for almeshopt-0.1.10-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 2121561cfe17b560bb14eaff7ef97ab3ce1c89ba1370555e5275fd0422e5c151
MD5 413399e3385d66d217df1ffa896d4142
BLAKE2b-256 e50278c6ca8b7648d9613ec24aaf6ffa42ff797d5203dcbdd7db1971da4b9fed

See more details on using hashes here.

Supported by

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