Loading...
Loading...
Compare original and translation side by side
This skill compiles best practices from multiple authoritative sources:
- Official guidelines from Three.js
branch maintained by mrdoobllms- 100 Three.js Tips by Utsubo - Excellent comprehensive guide covering WebGPU, asset optimization, and performance tips
本指南整合了多个权威来源的最佳实践:
- 由mrdoob维护的Three.js
分支官方指南llms- Utsubo发布的《100个Three.js技巧》(100 Three.js Tips)——涵盖WebGPU、资源优化和性能技巧的优质综合指南
| Priority | Category | Impact | Prefix |
|---|---|---|---|
| 0 | Modern Setup & Imports | FUNDAMENTAL | |
| 1 | Memory Management & Dispose | CRITICAL | |
| 2 | Render Loop Optimization | CRITICAL | |
| 3 | Draw Call Optimization | CRITICAL | |
| 4 | Geometry & Buffer Management | HIGH | |
| 5 | Material & Texture Optimization | HIGH | |
| 6 | Asset Compression | HIGH | |
| 7 | Lighting & Shadows | MEDIUM-HIGH | |
| 8 | Scene Graph Organization | MEDIUM | |
| 9 | Shader Best Practices (GLSL) | MEDIUM | |
| 10 | TSL (Three.js Shading Language) | MEDIUM | |
| 11 | WebGPU Renderer | MEDIUM | |
| 12 | Loading & Assets | MEDIUM | |
| 13 | Core Web Vitals | MEDIUM-HIGH | |
| 14 | Camera & Controls | LOW-MEDIUM | |
| 15 | Animation System | MEDIUM | |
| 16 | Physics Integration | MEDIUM | |
| 17 | WebXR / VR / AR | MEDIUM | |
| 18 | Audio | LOW-MEDIUM | |
| 19 | Post-Processing | MEDIUM | |
| 20 | Mobile Optimization | HIGH | |
| 21 | Production | HIGH | |
| 22 | Debug & DevTools | LOW | |
| 优先级 | 分类 | 影响等级 | 前缀 |
|---|---|---|---|
| 0 | 现代项目配置与导入 | 基础核心 | |
| 1 | 内存管理与资源释放 | 至关重要 | |
| 2 | 渲染循环优化 | 至关重要 | |
| 3 | 绘制调用优化 | 至关重要 | |
| 4 | 几何体与缓冲区管理 | 高影响 | |
| 5 | 材质与纹理优化 | 高影响 | |
| 6 | 资源压缩 | 高影响 | |
| 7 | 光照与阴影 | 中高影响 | |
| 8 | 场景图组织 | 中影响 | |
| 9 | GLSL着色器最佳实践 | 中影响 | |
| 10 | TSL(Three.js着色语言) | 中影响 | |
| 11 | WebGPU渲染器 | 中影响 | |
| 12 | 加载与资源管理 | 中影响 | |
| 13 | Web核心指标 | 中高影响 | |
| 14 | 相机与控制器 | 中低影响 | |
| 15 | 动画系统 | 中影响 | |
| 16 | 物理引擎集成 | 中影响 | |
| 17 | WebXR / VR / AR | 中影响 | |
| 18 | 音频 | 中低影响 | |
| 19 | 后期处理 | 中影响 | |
| 20 | 移动端优化 | 高影响 | |
| 21 | 生产环境部署 | 高影响 | |
| 22 | 调试与开发工具 | 低影响 | |
setup-use-import-mapssetup-choose-renderersetup-animation-looprenderer.setAnimationLoop()setup-basic-scene-templatesetup-use-import-mapssetup-choose-renderersetup-animation-looprenderer.setAnimationLoop()setup-basic-scene-templatememory-dispose-geometrymemory-dispose-materialmemory-dispose-texturesmemory-dispose-render-targetsmemory-dispose-recursivememory-dispose-on-unmountmemory-renderer-disposememory-reuse-objectsmemory-dispose-geometrymemory-dispose-materialmemory-dispose-texturesmemory-dispose-render-targetsmemory-dispose-recursivememory-dispose-on-unmountmemory-renderer-disposememory-reuse-objectsrender-single-rafrender-conditionalrender-delta-timerender-avoid-allocationsrender-cache-computationsrender-frustum-cullingrender-update-matrix-manualrender-pixel-ratiorender-antialias-wiselyrender-single-rafrender-conditionalrender-delta-timerender-avoid-allocationsrender-cache-computationsrender-frustum-cullingrender-update-matrix-manualrender-pixel-ratiorender-antialias-wiselydraw-call-optimizationgeometry-instanced-meshgeometry-batched-meshgeometry-merge-staticdraw-call-optimizationgeometry-instanced-meshgeometry-batched-meshgeometry-merge-staticgeometry-buffer-geometrygeometry-merge-staticgeometry-instanced-meshgeometry-lodgeometry-index-buffergeometry-vertex-countgeometry-attributes-typedgeometry-interleavedgeometry-buffer-geometrygeometry-merge-staticgeometry-instanced-meshgeometry-lodgeometry-index-buffergeometry-vertex-countgeometry-attributes-typedgeometry-interleavedmaterial-reusematerial-simplest-sufficientmaterial-texture-size-power-of-twomaterial-texture-compressionmaterial-texture-mipmapsmaterial-texture-anisotropymaterial-texture-atlasmaterial-avoid-transparencymaterial-onbeforecompilematerial-reusematerial-simplest-sufficientmaterial-texture-size-power-of-twomaterial-texture-compressionmaterial-texture-mipmapsmaterial-texture-anisotropymaterial-texture-atlasmaterial-avoid-transparencymaterial-onbeforecompileasset-compressionasset-dracoasset-ktx2asset-meshoptasset-lodasset-compressionasset-dracoasset-ktx2asset-meshoptasset-lodlighting-limit-lightslighting-shadows-advancedlighting-bake-staticlighting-shadow-camera-tightlighting-shadow-map-sizelighting-shadow-selectivelighting-shadow-cascadelighting-shadow-auto-updatelighting-probelighting-environmentlighting-fake-shadowslighting-limit-lightslighting-shadows-advancedlighting-bake-staticlighting-shadow-camera-tightlighting-shadow-map-sizelighting-shadow-selectivelighting-shadow-cascadelighting-shadow-auto-updatelighting-probelighting-environmentlighting-fake-shadowsscene-group-objectsscene-layersscene-visible-togglescene-flatten-staticscene-name-objectsobject-poolingscene-group-objectsscene-layersscene-visible-togglescene-flatten-staticscene-name-objectsobject-poolingshader-precisionshader-mobileshader-avoid-branchingshader-precompute-cpushader-avoid-discardshader-texture-lodshader-uniform-arraysshader-varying-interpolationshader-pack-datashader-chunk-injectionshader-precisionshader-mobileshader-avoid-branchingshader-precompute-cpushader-avoid-discardshader-texture-lodshader-uniform-arraysshader-varying-interpolationshader-pack-datashader-chunk-injectiontsl-why-usetsl-setup-webgputsl-complete-referencetsl-material-slotstsl-node-materialstsl-basic-operationstsl-functionstsl-conditionalstsl-texturestsl-noisetsl-post-processingtsl-compute-shaderstsl-glsl-to-tsltsl-why-usetsl-setup-webgputsl-complete-referencetsl-material-slotstsl-node-materialstsl-basic-operationstsl-functionstsl-conditionalstsl-texturestsl-noisetsl-post-processingtsl-compute-shaderstsl-glsl-to-tslwebgpu-rendererwebgpu-render-asyncwebgpu-feature-detectionwebgpu-instanced-arraywebgpu-storage-textureswebgpu-workgroup-memorywebgpu-indirect-drawswebgpu-rendererwebgpu-render-asyncwebgpu-feature-detectionwebgpu-instanced-arraywebgpu-storage-textureswebgpu-workgroup-memorywebgpu-indirect-drawsloading-draco-compressionloading-gltf-preferredgltf-loading-optimizationloading-progress-feedbackloading-async-awaitloading-lazyloading-cache-assetsloading-dispose-unusedloading-draco-compressionloading-gltf-preferredgltf-loading-optimizationloading-progress-feedbackloading-async-awaitloading-lazyloading-cache-assetsloading-dispose-unusedcore-web-vitalsvitals-lazy-loadvitals-code-splitvitals-preloadvitals-progressive-loadingvitals-placeholdersvitals-web-workersvitals-streamingcore-web-vitalsvitals-lazy-loadvitals-code-splitvitals-preloadvitals-progressive-loadingvitals-placeholdersvitals-web-workersvitals-streamingcamera-near-farcamera-fovcamera-controls-dampingcamera-resize-handlercamera-orbit-limitscamera-near-farcamera-fovcamera-controls-dampingcamera-resize-handlercamera-orbit-limitsanimation-systemanimation-systemphysics-integrationphysics-compute-shadersphysics-integrationphysics-compute-shaderswebxr-setupwebxr-setupaudio-spatialaudio-spatialpostprocessing-optimizationpostpro-renderer-configpostpro-merge-effectspostpro-selective-bloompostpro-resolution-scalingpostpro-webgpu-nativepostprocessing-optimizationpostpro-renderer-configpostpro-merge-effectspostpro-selective-bloompostpro-resolution-scalingpostpro-webgpu-nativemobile-optimizationraycasting-optimizationmobile-optimizationraycasting-optimizationerror-handling-recoverymigration-checklisterror-handling-recoverymigration-checklistdebug-devtoolsdebug-stats-gldebug-lil-guidebug-spectordebug-renderer-infodebug-three-mesh-bvhdebug-context-lostdebug-animation-loop-profilingdebug-conditionaldebug-devtoolsdebug-stats-gldebug-lil-guidebug-spectordebug-renderer-infodebug-three-mesh-bvhdebug-context-lostdebug-animation-loop-profilingdebug-conditionalrules/setup-use-import-maps.md
rules/memory-dispose-geometry.md
rules/tsl-complete-reference.md
rules/mobile-optimization.mdrules/setup-use-import-maps.md
rules/memory-dispose-geometry.md
rules/tsl-complete-reference.md
rules/mobile-optimization.md<script type="importmap">
{
"imports": {
"three": "https://cdn.jsdelivr.net/npm/three@0.182.0/build/three.module.js",
"three/addons/": "https://cdn.jsdelivr.net/npm/three@0.182.0/examples/jsm/",
"three/tsl": "https://cdn.jsdelivr.net/npm/three@0.182.0/build/three.tsl.js"
}
}
</script><script type="importmap">
{
"imports": {
"three": "https://cdn.jsdelivr.net/npm/three@0.182.0/build/three.module.js",
"three/addons/": "https://cdn.jsdelivr.net/npm/three@0.182.0/examples/jsm/",
"three/tsl": "https://cdn.jsdelivr.net/npm/three@0.182.0/build/three.tsl.js"
}
}
</script>function disposeObject(obj) {
if (obj.geometry) obj.geometry.dispose();
if (obj.material) {
if (Array.isArray(obj.material)) {
obj.material.forEach(m => m.dispose());
} else {
obj.material.dispose();
}
}
}function disposeObject(obj) {
if (obj.geometry) obj.geometry.dispose();
if (obj.material) {
if (Array.isArray(obj.material)) {
obj.material.forEach(m => m.dispose());
} else {
obj.material.dispose();
}
}
}import { texture, uv, color, time, sin } from 'three/tsl';
const material = new THREE.MeshStandardNodeMaterial();
material.colorNode = texture(map).mul(color(0xff0000));
material.colorNode = color(0x00ff00).mul(sin(time).mul(0.5).add(0.5));import { texture, uv, color, time, sin } from 'three/tsl';
const material = new THREE.MeshStandardNodeMaterial();
material.colorNode = texture(map).mul(color(0xff0000));
material.colorNode = color(0x00ff00).mul(sin(time).mul(0.5).add(0.5));const isMobile = /Android|iPhone|iPad|iPod/i.test(navigator.userAgent);
renderer.setPixelRatio(Math.min(window.devicePixelRatio, isMobile ? 1.5 : 2));const isMobile = /Android|iPhone|iPad|iPod/i.test(navigator.userAgent);
renderer.setPixelRatio(Math.min(window.devicePixelRatio, isMobile ? 1.5 : 2));