blender-web-pipeline by freshtechbro/claudedesignskills
npx skills add https://github.com/freshtechbro/claudedesignskills --skill blender-web-pipelineBlender 网络管线技能提供了将 3D 模型和动画从 Blender 导出为网络优化格式(主要是 glTF 2.0)的工作流程。它涵盖了用于批量处理的 Python 脚本编写、针对网络性能的优化技术,以及与 Three.js 和 Babylon.js 等网络 3D 库的集成。
何时使用此技能:
核心能力:
为何为网络选择 glTF:
glTF 与 GLB:
.gltf = JSON + 外部 .bin + 外部纹理
.glb = 单一二进制文件(推荐用于网络)
通过 Python 访问 Blender 数据和操作:
import bpy
# 访问场景数据
scene = bpy.context.scene
objects = bpy.data.objects
# 修改对象
obj = bpy.data.objects['Cube']
obj.location = (0, 0, 1)
obj.scale = (2, 2, 2)
# 导出 glTF
bpy.ops.export_scene.gltf(
filepath='/path/to/model.glb',
export_format='GLB'
)
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
目标指标:
# Blender Python 控制台或脚本
import bpy
# 选择要导出的对象(可选 - 如果未选择则导出全部)
bpy.ops.object.select_all(action='DESELECT')
bpy.data.objects['MyModel'].select_set(True)
# 导出为 GLB
bpy.ops.export_scene.gltf(
filepath='/path/to/output.glb',
export_format='GLB', # 二进制格式
use_selection=True, # 仅导出选中的对象
export_apply=True, # 应用修改器
export_texcoords=True, # UV 坐标
export_normals=True, # 法线
export_materials='EXPORT', # 导出材质
export_colors=True, # 顶点颜色
export_cameras=False, # 跳过摄像机
export_lights=False, # 跳过灯光
export_animations=True, # 包含动画
export_draco_mesh_compression_enable=True, # 压缩几何体
export_draco_mesh_compression_level=6, # 0-10(推荐 6)
export_draco_position_quantization=14, # 8-14 位
export_draco_normal_quantization=10, # 8-10 位
export_draco_texcoord_quantization=12 # 8-12 位
)
#!/usr/bin/env blender --background --python
"""
将目录中所有 .blend 文件批量导出为 glTF
用法:blender --background --python batch_export.py -- /path/to/blend/files
"""
import bpy
import os
import sys
# 获取 -- 之后的命令行参数
argv = sys.argv
argv = argv[argv.index("--") + 1:] if "--" in argv else []
input_dir = argv[0] if argv else "/path/to/models"
output_dir = argv[1] if len(argv) > 1 else input_dir + "_gltf"
# 创建输出目录
os.makedirs(output_dir, exist_ok=True)
# 查找所有 .blend 文件
blend_files = [f for f in os.listdir(input_dir) if f.endswith('.blend')]
print(f"找到 {len(blend_files)} 个 .blend 文件")
for blend_file in blend_files:
input_path = os.path.join(input_dir, blend_file)
output_name = blend_file.replace('.blend', '.glb')
output_path = os.path.join(output_dir, output_name)
print(f"正在处理:{blend_file}")
# 打开 blend 文件
bpy.ops.wm.open_mainfile(filepath=input_path)
# 使用优化导出为 GLB
bpy.ops.export_scene.gltf(
filepath=output_path,
export_format='GLB',
export_apply=True,
export_draco_mesh_compression_enable=True,
export_draco_mesh_compression_level=6
)
print(f" 已导出:{output_name}")
print("批量导出完成!")
运行批量脚本:
blender --background --python batch_export.py -- /models/source /models/output
import bpy
def optimize_mesh(obj, target_ratio=0.5):
"""使用精简修改器减少多边形数量。"""
if obj.type != 'MESH':
return
# 添加精简修改器
decimate = obj.modifiers.new(name='Decimate', type='DECIMATE')
decimate.ratio = target_ratio # 0.5 = 原始多边形的 50%
decimate.use_collapse_triangulate = True
# 应用修改器
bpy.context.view_layer.objects.active = obj
bpy.ops.object.modifier_apply(modifier='Decimate')
print(f"优化了 {obj.name}:{len(obj.data.polygons)} 个多边形")
# 优化所有选中的网格
for obj in bpy.context.selected_objects:
optimize_mesh(obj, target_ratio=0.3)
import bpy
def bake_textures(obj, resolution=1024):
"""将所有材质烘焙到单一纹理。"""
# 设置烘焙参数
bpy.context.scene.render.engine = 'CYCLES'
bpy.context.scene.cycles.bake_type = 'COMBINED'
# 创建烘焙图像
bake_image = bpy.data.images.new(
name=f"{obj.name}_bake",
width=resolution,
height=resolution
)
# 创建烘焙材质
mat = bpy.data.materials.new(name=f"{obj.name}_baked")
mat.use_nodes = True
nodes = mat.node_tree.nodes
# 添加图像纹理节点
tex_node = nodes.new(type='ShaderNodeTexImage')
tex_node.image = bake_image
tex_node.select = True
nodes.active = tex_node
# 分配材质
if obj.data.materials:
obj.data.materials[0] = mat
else:
obj.data.materials.append(mat)
# 选择对象
bpy.context.view_layer.objects.active = obj
obj.select_set(True)
# 烘焙
bpy.ops.object.bake(type='COMBINED')
# 保存烘焙的纹理
bake_image.filepath_raw = f"/tmp/{obj.name}_bake.png"
bake_image.file_format = 'PNG'
bake_image.save()
print(f"已将 {obj.name} 烘焙到 {bake_image.filepath_raw}")
# 烘焙选中的对象
for obj in bpy.context.selected_objects:
if obj.type == 'MESH':
bake_textures(obj, resolution=2048)
import bpy
def generate_lods(obj, lod_levels=[0.75, 0.5, 0.25]):
"""生成多边形数量递减的 LOD 副本。"""
lod_objects = []
for i, ratio in enumerate(lod_levels):
# 复制对象
lod_obj = obj.copy()
lod_obj.data = obj.data.copy()
lod_obj.name = f"{obj.name}_LOD{i}"
# 链接到场景
bpy.context.collection.objects.link(lod_obj)
# 添加精简修改器
decimate = lod_obj.modifiers.new(name='Decimate', type='DECIMATE')
decimate.ratio = ratio
# 应用修改器
bpy.context.view_layer.objects.active = lod_obj
bpy.ops.object.modifier_apply(modifier='Decimate')
lod_objects.append(lod_obj)
print(f"创建了 {lod_obj.name}:{len(lod_obj.data.polygons)} 个多边形")
return lod_objects
# 为选中的对象生成 LOD
if bpy.context.active_object:
generate_lods(bpy.context.active_object)
import bpy
import os
def export_optimized_gltf(filepath, texture_max_size=1024):
"""导出带降采样纹理的 glTF。"""
# 降采样所有纹理
for img in bpy.data.images:
if img.size[0] > texture_max_size or img.size[1] > texture_max_size:
img.scale(texture_max_size, texture_max_size)
print(f"已将 {img.name} 降采样到 {texture_max_size}x{texture_max_size}")
# 使用 Draco 压缩导出
bpy.ops.export_scene.gltf(
filepath=filepath,
export_format='GLB',
export_apply=True,
export_image_format='JPEG', # JPEG 以获得更小尺寸(或 PNG 以获得质量)
export_jpeg_quality=85, # 0-100
export_draco_mesh_compression_enable=True,
export_draco_mesh_compression_level=8, # 最大压缩
export_draco_position_quantization=12,
export_draco_normal_quantization=8,
export_draco_texcoord_quantization=10
)
# 导出优化版本
export_optimized_gltf('/path/to/optimized.glb', texture_max_size=512)
#!/bin/bash
# 批量导出 Blender 文件为 glTF,无需打开 GUI
SCRIPT_DIR="$(dirname "$0")"
# 导出当前目录中所有 .blend 文件
for blend_file in *.blend; do
echo "正在导出 $blend_file..."
blender --background "$blend_file" --python - <<EOF
import bpy
import os
# 获取输出文件名
filename = os.path.splitext(bpy.data.filepath)[0]
output = filename + '.glb'
# 导出
bpy.ops.export_scene.gltf(
filepath=output,
export_format='GLB',
export_apply=True,
export_draco_mesh_compression_enable=True,
export_draco_mesh_compression_level=6
)
print(f'已导出到 {output}')
EOF
done
echo "所有文件已导出!"
import * as THREE from 'three';
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
import { DRACOLoader } from 'three/addons/loaders/DRACOLoader.js';
const loader = new GLTFLoader();
// 为压缩模型设置 Draco 解码器
const dracoLoader = new DRACOLoader();
dracoLoader.setDecoderPath('/draco/');
loader.setDRACOLoader(dracoLoader);
// 加载 Blender 导出文件
loader.load('/models/exported.glb', (gltf) => {
scene.add(gltf.scene);
// 播放动画
if (gltf.animations.length > 0) {
const mixer = new THREE.AnimationMixer(gltf.scene);
const action = mixer.clipAction(gltf.animations[0]);
action.play();
}
});
import { useGLTF } from '@react-three/drei';
function Model() {
const { scene } = useGLTF('/models/exported.glb');
return <primitive object={scene} />;
}
// 预加载以获得更好的性能
useGLTF.preload('/models/exported.glb');
import * as BABYLON from '@babylonjs/core';
import '@babylonjs/loaders/glTF';
BABYLON.SceneLoader.ImportMesh(
'',
'/models/',
'exported.glb',
scene,
(meshes) => {
console.log('已加载网格:', meshes);
}
);
精简修改器:
# 减少 70% 的多边形数量
obj.modifiers.new(name='Decimate', type='DECIMATE')
obj.modifiers['Decimate'].ratio = 0.3
按距离合并:
# 移除重复顶点
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.select_all(action='SELECT')
bpy.ops.mesh.remove_doubles(threshold=0.0001)
bpy.ops.object.mode_set(mode='OBJECT')
三角化面:
# 确保所有面都是三角形(某些引擎需要)
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.select_all(action='SELECT')
bpy.ops.mesh.quads_convert_to_tris()
bpy.ops.object.mode_set(mode='OBJECT')
图像压缩:
# 将纹理保存为 JPEG(有损但更小)
for img in bpy.data.images:
img.file_format = 'JPEG'
img.filepath_raw = f"/output/{img.name}.jpg"
img.save()
纹理图集:
# 将多个纹理合并到一个图集中
# 使用智能 UV 投影进行自动图集化
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.select_all(action='SELECT')
bpy.ops.uv.smart_project(angle_limit=66, island_margin=0.02)
bpy.ops.object.mode_set(mode='OBJECT')
转换为 PBR:
# 确保材质使用原理化 BSDF(glTF 标准)
for mat in bpy.data.materials:
if not mat.use_nodes:
mat.use_nodes = True
nodes = mat.node_tree.nodes
principled = nodes.get('Principled BSDF')
if not principled:
principled = nodes.new(type='ShaderNodeBsdfPrincipled')
output = nodes.get('Material Output')
mat.node_tree.links.new(principled.outputs[0], output.inputs[0])
问题: 导出的 .glb 文件超过 20+ MB
解决方案:
问题: 纹理未在网络查看器中显示
解决方案:
问题: 动画未导出或播放不正确
解决方案:
问题: 材质在网络中与在 Blender 中渲染效果不同
解决方案:
问题: 导出耗时超过 10 分钟
解决方案:
问题: 模型在浏览器中卡顿
解决方案:
☐ 应用所有修改器
☐ 合并顶点(移除重复项)
☐ 三角化面(如果需要)
☐ 优化多边形数量(<5 万个三角形)
☐ UV 展开所有网格
☐ 烘焙材质(如果复杂)
☐ 调整纹理大小(最大 2048x2048)
☐ 使用原理化 BSDF 材质
☐ 移除未使用的数据(清理孤立数据)
☐ 为对象使用描述性名称
☐ 正确设置原点
☐ 应用变换(Ctrl+A)
# 推荐的 glTF 导出设置
bpy.ops.export_scene.gltf(
filepath='/output.glb',
export_format='GLB', # 二进制格式
export_apply=True, # 应用修改器
export_image_format='JPEG', # 更小的文件大小
export_jpeg_quality=85, # 质量与大小
export_draco_mesh_compression_enable=True, # 启用压缩
export_draco_mesh_compression_level=6, # 平衡速度/大小
export_animations=True, # 包含动画
export_lights=False, # 跳过灯光(在代码中重新创建)
export_cameras=False # 跳过摄像机
)
此技能包含:
batch_export.py - 将 .blend 文件批量导出为 glTFoptimize_model.py - 为网络优化几何体和纹理generate_lods.py - 自动生成 LOD 副本gltf_export_guide.md - 完整的 glTF 导出参考bpy_api_reference.md - Blender Python API 快速参考optimization_strategies.md - 详细的优化技术export_template.blend - 预配置的导出模板shader_library/ - 网络优化的 PBR 着色器每周安装量
103
代码仓库
GitHub 星标数
11
首次出现
2026年2月27日
安全审计
安装于
opencode103
gemini-cli101
github-copilot101
amp101
cline101
codex101
Blender Web Pipeline skill provides workflows for exporting 3D models and animations from Blender to web-optimized formats (primarily glTF 2.0). It covers Python scripting for batch processing, optimization techniques for web performance, and integration with web 3D libraries like Three.js and Babylon.js.
When to use this skill:
Key capabilities:
Why glTF for Web:
glTF vs GLB:
.gltf = JSON + external .bin + external textures
.glb = Single binary file (recommended for web)
Access Blender data and operations via Python:
import bpy
# Access scene data
scene = bpy.context.scene
objects = bpy.data.objects
# Modify objects
obj = bpy.data.objects['Cube']
obj.location = (0, 0, 1)
obj.scale = (2, 2, 2)
# Export glTF
bpy.ops.export_scene.gltf(
filepath='/path/to/model.glb',
export_format='GLB'
)
Target Metrics:
# Blender Python Console or script
import bpy
# Select objects to export (optional - exports all if none selected)
bpy.ops.object.select_all(action='DESELECT')
bpy.data.objects['MyModel'].select_set(True)
# Export as GLB
bpy.ops.export_scene.gltf(
filepath='/path/to/output.glb',
export_format='GLB', # Binary format
use_selection=True, # Export selected only
export_apply=True, # Apply modifiers
export_texcoords=True, # UV coordinates
export_normals=True, # Normals
export_materials='EXPORT', # Export materials
export_colors=True, # Vertex colors
export_cameras=False, # Skip cameras
export_lights=False, # Skip lights
export_animations=True, # Include animations
export_draco_mesh_compression_enable=True, # Compress geometry
export_draco_mesh_compression_level=6, # 0-10 (6 recommended)
export_draco_position_quantization=14, # 8-14 bits
export_draco_normal_quantization=10, # 8-10 bits
export_draco_texcoord_quantization=12 # 8-12 bits
)
#!/usr/bin/env blender --background --python
"""
Batch export all .blend files in a directory to glTF
Usage: blender --background --python batch_export.py -- /path/to/blend/files
"""
import bpy
import os
import sys
# Get command line arguments after --
argv = sys.argv
argv = argv[argv.index("--") + 1:] if "--" in argv else []
input_dir = argv[0] if argv else "/path/to/models"
output_dir = argv[1] if len(argv) > 1 else input_dir + "_gltf"
# Create output directory
os.makedirs(output_dir, exist_ok=True)
# Find all .blend files
blend_files = [f for f in os.listdir(input_dir) if f.endswith('.blend')]
print(f"Found {len(blend_files)} .blend files")
for blend_file in blend_files:
input_path = os.path.join(input_dir, blend_file)
output_name = blend_file.replace('.blend', '.glb')
output_path = os.path.join(output_dir, output_name)
print(f"Processing: {blend_file}")
# Open blend file
bpy.ops.wm.open_mainfile(filepath=input_path)
# Export as GLB with optimizations
bpy.ops.export_scene.gltf(
filepath=output_path,
export_format='GLB',
export_apply=True,
export_draco_mesh_compression_enable=True,
export_draco_mesh_compression_level=6
)
print(f" Exported: {output_name}")
print("Batch export complete!")
Run batch script:
blender --background --python batch_export.py -- /models/source /models/output
import bpy
def optimize_mesh(obj, target_ratio=0.5):
"""Reduce polygon count using decimation modifier."""
if obj.type != 'MESH':
return
# Add Decimate modifier
decimate = obj.modifiers.new(name='Decimate', type='DECIMATE')
decimate.ratio = target_ratio # 0.5 = 50% of original polygons
decimate.use_collapse_triangulate = True
# Apply modifier
bpy.context.view_layer.objects.active = obj
bpy.ops.object.modifier_apply(modifier='Decimate')
print(f"Optimized {obj.name}: {len(obj.data.polygons)} polygons")
# Optimize all selected meshes
for obj in bpy.context.selected_objects:
optimize_mesh(obj, target_ratio=0.3)
import bpy
def bake_textures(obj, resolution=1024):
"""Bake all materials to single texture."""
# Setup bake settings
bpy.context.scene.render.engine = 'CYCLES'
bpy.context.scene.cycles.bake_type = 'COMBINED'
# Create bake image
bake_image = bpy.data.images.new(
name=f"{obj.name}_bake",
width=resolution,
height=resolution
)
# Create bake material
mat = bpy.data.materials.new(name=f"{obj.name}_baked")
mat.use_nodes = True
nodes = mat.node_tree.nodes
# Add Image Texture node
tex_node = nodes.new(type='ShaderNodeTexImage')
tex_node.image = bake_image
tex_node.select = True
nodes.active = tex_node
# Assign material
if obj.data.materials:
obj.data.materials[0] = mat
else:
obj.data.materials.append(mat)
# Select object
bpy.context.view_layer.objects.active = obj
obj.select_set(True)
# Bake
bpy.ops.object.bake(type='COMBINED')
# Save baked texture
bake_image.filepath_raw = f"/tmp/{obj.name}_bake.png"
bake_image.file_format = 'PNG'
bake_image.save()
print(f"Baked {obj.name} to {bake_image.filepath_raw}")
# Bake selected objects
for obj in bpy.context.selected_objects:
if obj.type == 'MESH':
bake_textures(obj, resolution=2048)
import bpy
def generate_lods(obj, lod_levels=[0.75, 0.5, 0.25]):
"""Generate LOD copies with decreasing polygon counts."""
lod_objects = []
for i, ratio in enumerate(lod_levels):
# Duplicate object
lod_obj = obj.copy()
lod_obj.data = obj.data.copy()
lod_obj.name = f"{obj.name}_LOD{i}"
# Link to scene
bpy.context.collection.objects.link(lod_obj)
# Add Decimate modifier
decimate = lod_obj.modifiers.new(name='Decimate', type='DECIMATE')
decimate.ratio = ratio
# Apply modifier
bpy.context.view_layer.objects.active = lod_obj
bpy.ops.object.modifier_apply(modifier='Decimate')
lod_objects.append(lod_obj)
print(f"Created {lod_obj.name}: {len(lod_obj.data.polygons)} polygons")
return lod_objects
# Generate LODs for selected object
if bpy.context.active_object:
generate_lods(bpy.context.active_object)
import bpy
import os
def export_optimized_gltf(filepath, texture_max_size=1024):
"""Export glTF with downscaled textures."""
# Downscale all textures
for img in bpy.data.images:
if img.size[0] > texture_max_size or img.size[1] > texture_max_size:
img.scale(texture_max_size, texture_max_size)
print(f"Downscaled {img.name} to {texture_max_size}x{texture_max_size}")
# Export with Draco compression
bpy.ops.export_scene.gltf(
filepath=filepath,
export_format='GLB',
export_apply=True,
export_image_format='JPEG', # JPEG for smaller size (or PNG for quality)
export_jpeg_quality=85, # 0-100
export_draco_mesh_compression_enable=True,
export_draco_mesh_compression_level=8, # Max compression
export_draco_position_quantization=12,
export_draco_normal_quantization=8,
export_draco_texcoord_quantization=10
)
# Export optimized
export_optimized_gltf('/path/to/optimized.glb', texture_max_size=512)
#!/bin/bash
# Batch export Blender files to glTF without opening GUI
SCRIPT_DIR="$(dirname "$0")"
# Export all .blend files in current directory
for blend_file in *.blend; do
echo "Exporting $blend_file..."
blender --background "$blend_file" --python - <<EOF
import bpy
import os
# Get output filename
filename = os.path.splitext(bpy.data.filepath)[0]
output = filename + '.glb'
# Export
bpy.ops.export_scene.gltf(
filepath=output,
export_format='GLB',
export_apply=True,
export_draco_mesh_compression_enable=True,
export_draco_mesh_compression_level=6
)
print(f'Exported to {output}')
EOF
done
echo "All files exported!"
import * as THREE from 'three';
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
import { DRACOLoader } from 'three/addons/loaders/DRACOLoader.js';
const loader = new GLTFLoader();
// Setup Draco decoder for compressed models
const dracoLoader = new DRACOLoader();
dracoLoader.setDecoderPath('/draco/');
loader.setDRACOLoader(dracoLoader);
// Load Blender export
loader.load('/models/exported.glb', (gltf) => {
scene.add(gltf.scene);
// Play animations
if (gltf.animations.length > 0) {
const mixer = new THREE.AnimationMixer(gltf.scene);
const action = mixer.clipAction(gltf.animations[0]);
action.play();
}
});
import { useGLTF } from '@react-three/drei';
function Model() {
const { scene } = useGLTF('/models/exported.glb');
return <primitive object={scene} />;
}
// Preload for better performance
useGLTF.preload('/models/exported.glb');
import * as BABYLON from '@babylonjs/core';
import '@babylonjs/loaders/glTF';
BABYLON.SceneLoader.ImportMesh(
'',
'/models/',
'exported.glb',
scene,
(meshes) => {
console.log('Loaded meshes:', meshes);
}
);
Decimate Modifier:
# Reduce polygon count by 70%
obj.modifiers.new(name='Decimate', type='DECIMATE')
obj.modifiers['Decimate'].ratio = 0.3
Merge by Distance:
# Remove duplicate vertices
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.select_all(action='SELECT')
bpy.ops.mesh.remove_doubles(threshold=0.0001)
bpy.ops.object.mode_set(mode='OBJECT')
Triangulate Faces:
# Ensure all faces are triangles (required for some engines)
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.select_all(action='SELECT')
bpy.ops.mesh.quads_convert_to_tris()
bpy.ops.object.mode_set(mode='OBJECT')
Image Compression:
# Save textures as JPEG (lossy but smaller)
for img in bpy.data.images:
img.file_format = 'JPEG'
img.filepath_raw = f"/output/{img.name}.jpg"
img.save()
Texture Atlas:
# Combine multiple textures into one atlas
# Use Smart UV Project for automatic atlasing
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.select_all(action='SELECT')
bpy.ops.uv.smart_project(angle_limit=66, island_margin=0.02)
bpy.ops.object.mode_set(mode='OBJECT')
Convert to PBR:
# Ensure materials use Principled BSDF (glTF standard)
for mat in bpy.data.materials:
if not mat.use_nodes:
mat.use_nodes = True
nodes = mat.node_tree.nodes
principled = nodes.get('Principled BSDF')
if not principled:
principled = nodes.new(type='ShaderNodeBsdfPrincipled')
output = nodes.get('Material Output')
mat.node_tree.links.new(principled.outputs[0], output.inputs[0])
Problem: Exported .glb files are 20+ MB
Solutions:
Problem: Textures don't appear in web viewer
Solutions:
Problem: Animations don't export or play incorrectly
Solutions:
Problem: Materials render differently in web vs Blender
Solutions:
Problem: Export takes 10+ minutes
Solutions:
Problem: Model lags in browser
Solutions:
☐ Apply all modifiers
☐ Merge vertices (remove doubles)
☐ Triangulate faces (if required)
☐ Optimize polygon count (<50k triangles)
☐ UV unwrap all meshes
☐ Bake materials (if complex)
☐ Resize textures (max 2048x2048)
☐ Use Principled BSDF materials
☐ Remove unused data (orphan cleanup)
☐ Name objects descriptively
☐ Set origin points correctly
☐ Apply transformations (Ctrl+A)
# Recommended glTF export settings
bpy.ops.export_scene.gltf(
filepath='/output.glb',
export_format='GLB', # Binary format
export_apply=True, # Apply modifiers
export_image_format='JPEG', # Smaller file size
export_jpeg_quality=85, # Quality vs size
export_draco_mesh_compression_enable=True, # Enable compression
export_draco_mesh_compression_level=6, # Balance speed/size
export_animations=True, # Include animations
export_lights=False, # Skip lights (recreate in code)
export_cameras=False # Skip cameras
)
This skill includes:
batch_export.py - Batch export .blend files to glTFoptimize_model.py - Optimize geometry and textures for webgenerate_lods.py - Generate LOD copies automaticallygltf_export_guide.md - Complete glTF export referencebpy_api_reference.md - Blender Python API quick referenceoptimization_strategies.md - Detailed optimization techniquesexport_template.blend - Pre-configured export templateshader_library/ - Web-optimized PBR shadersWeekly Installs
103
Repository
GitHub Stars
11
First Seen
Feb 27, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
opencode103
gemini-cli101
github-copilot101
amp101
cline101
codex101
通过 LiteLLM 代理让 Claude Code 对接 GitHub Copilot 运行 | 高级变通方案指南
40,000 周安装
Gmail邮件转Google Tasks任务:命令行自动化工作流工具 | gws-workflow-email-to-task
1 周安装
gws-sheets-append:命令行工具,快速向Google Sheets电子表格追加数据行
1 周安装
gws-shared:Google Workspace CLI 工具,高效管理 API 与资源
1 周安装
gws-people 命令行工具:Google People API 联系人管理 CLI 客户端
1 周安装
Capacitor应用商店发布指南:iOS和Android应用商店提交完整教程
102 周安装
gws-keep 命令行工具:Google Keep API 客户端,管理笔记与附件
1 周安装