vendored meshoptimizer 1.2(submodule 环境故障改直接 vendor)。Mesh 多 LOD:各级索引连续拼进同一 index buffer(共享顶点,LodRange 区间 选择),解析期 meshopt_simplify 生成链(LOD0=原始,每级目标减半, 相对误差 1e-2,小网格复用上级);都在 worker 线程,加载零额外卡顿。 SceneRenderer 按 (mesh, LOD) 聚合 batch(lookup key = 指针<<8|lod): 主视图按屏占比近似 radius/dist 选级(阈值 10/20 倍半径);阴影级联 按级联序降级(越远越简)。Draw 按 batch.lod 选索引区间。 A/B 对比(100 背包 10×10,RTX 5060 Laptop,vsync off): - 纯背包:LOD 开 93-95 fps / 关 90-107 fps —— 无显著差异 - 加 SunTemple:LOD 开 52-56 / 关 51-55 —— 无显著差异 结论:当前场景瓶颈不在顶点数(5060 顶点吞吐富余),LOD 基础设施 保留(几何复杂资产/低端 GPU/更大场景生效),帧率问题转向 Tracy GPU 时间线定位真实瓶颈。 坑:LodRange 记录"LOD 不足复用最后一级"时 first 不得继续累加 (buffer 无重复数据,累加必越界——VUID-08798 抓的)。
78 lines
2.3 KiB
YAML
78 lines
2.3 KiB
YAML
name: release
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- 'master'
|
|
paths-ignore:
|
|
- '*.md'
|
|
|
|
jobs:
|
|
gltfpack:
|
|
strategy:
|
|
matrix:
|
|
os: [{ name: windows, version: windows-latest }, { name: ubuntu, version: ubuntu-22.04 }, { name: macos, version: macos-14 }]
|
|
name: gltfpack-${{matrix.os.name}}
|
|
runs-on: ${{matrix.os.version}}
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
repository: zeux/basis_universal
|
|
ref: gltfpack
|
|
path: basis_universal
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
repository: webmproject/libwebp
|
|
ref: 1.6.0
|
|
path: libwebp
|
|
- name: cmake configure
|
|
run: cmake . -DMESHOPT_BUILD_GLTFPACK=ON -DMESHOPT_GLTFPACK_BASISU_PATH=basis_universal -D MESHOPT_GLTFPACK_LIBWEBP_PATH=libwebp -DCMAKE_MSVC_RUNTIME_LIBRARY="MultiThreaded" -DCMAKE_BUILD_TYPE=Release
|
|
- name: cmake configure x64
|
|
run: cmake . -DSSE=ON -DBASISU_SSE=ON
|
|
if: matrix.os.name == 'ubuntu'
|
|
- name: cmake build
|
|
run: cmake --build . --target gltfpack --config Release -j 3
|
|
- uses: actions/upload-artifact@v7
|
|
with:
|
|
name: gltfpack-windows
|
|
path: Release/gltfpack.exe
|
|
if: matrix.os.name == 'windows'
|
|
- uses: actions/upload-artifact@v7
|
|
with:
|
|
name: gltfpack-${{matrix.os.name}}
|
|
path: gltfpack
|
|
if: matrix.os.name != 'windows'
|
|
|
|
nodejs:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- uses: actions/setup-node@v6
|
|
with:
|
|
node-version: '18'
|
|
- name: install wasi
|
|
run: |
|
|
curl -sL https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-$VERSION/wasi-sdk-$VERSION.0-x86_64-linux.deb > wasi-sdk.deb
|
|
sudo dpkg -i wasi-sdk.deb
|
|
env:
|
|
VERSION: 32
|
|
- name: build
|
|
run: |
|
|
make -j2 -B gltf/library.wasm js
|
|
git status
|
|
- name: npm pack
|
|
run: |
|
|
cp LICENSE.md gltf/
|
|
cp LICENSE.md js/
|
|
cd gltf && npm pack && cd ..
|
|
cd js && npm pack && cd ..
|
|
- uses: actions/upload-artifact@v7
|
|
with:
|
|
name: gltfpack-npm
|
|
path: gltf/gltfpack-*.tgz
|
|
- uses: actions/upload-artifact@v7
|
|
with:
|
|
name: meshoptimizer-npm
|
|
path: js/meshoptimizer-*.tgz
|