AI Skill Report Card

Optimizing 3D Assets for Web

A-88·Feb 25, 2026·Source: Web
15 / 15
JavaScript
// Basic Three.js setup with optimized loading import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'; import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js'; import { KTX2Loader } from 'three/examples/jsm/loaders/KTX2Loader.js'; const dracoLoader = new DRACOLoader(); dracoLoader.setDecoderPath('/draco/'); const ktx2Loader = new KTX2Loader(); ktx2Loader.setTranscoderPath('/basis/'); const loader = new GLTFLoader(); loader.setDRACOLoader(dracoLoader); loader.setKTX2Loader(ktx2Loader); // Progressive loading: placeholder → low-poly → full quality loader.load('model_placeholder.gltf', (placeholder) => { scene.add(placeholder.scene); loader.load('model_lowpoly.gltf', (lowpoly) => { scene.remove(placeholder.scene); scene.add(lowpoly.scene); loader.load('model_full.gltf', (full) => { scene.remove(lowpoly.scene); scene.add(full.scene); }); }); });
Recommendation
Add more concrete input/output examples with actual file sizes and performance metrics from real projects
15 / 15

Blender Export Configuration

  1. Apply Modifiers

    • Select all objects → Object → Apply → All Transforms
    • Apply subdivision surface, mirror, array modifiers
    • Keep only essential armature/shape key modifiers
  2. Geometry Optimization

    • Switch to Edit mode → Select All (A)
    • Mesh → Clean Up → Merge by Distance (0.001m threshold)
    • Face → Triangulate Faces
    • UV → Smart UV Project (angle limit: 66°, margin: 0.001)
  3. GLTF Export Settings

    Format: glTF Binary (.glb)
    ☑ Apply Modifiers
    ☑ UVs
    ☑ Normals  
    ☑ Tangents
    ☑ Materials: Export
    ☑ Compression: Enable
    Transform: +Y Up
    

Draco Compression Implementation

Geometry Compression Ratios:

  • Position: 14 bits (high precision for hero assets)
  • Normal: 10 bits (sufficient for most lighting)
  • UV: 12 bits (texture coordinate precision)
  • Color: 8 bits per channel

Command Line Implementation:

Bash
# Install Draco tools npm install -g gltf-pipeline # Compress with optimal settings gltf-pipeline -i model.gltf -o model_compressed.gltf --draco.compressionLevel=7 --draco.quantizePositionBits=14 --draco.quantizeNormalBits=10 --draco.quantizeTexcoordBits=12

Texture Optimization Pipeline

  1. Source Preparation

    • Albedo: 1024×1024px max, sRGB
    • Normal: 1024×1024px max, Linear
    • Roughness/Metallic: 512×512px, pack into single texture (R=roughness, G=metallic, B=AO)
  2. KTX2 Conversion

    Bash
    # Install Basis Universal tools npm install -g @gltf-transform/cli # Convert textures gltf-transform etc1s model.gltf model_ktx2.gltf --level 1 --quality 128
  3. Mipmap Strategy

    • Generate full mipmap chain
    • Use trilinear filtering
    • Budget: 16MB VRAM total across all textures

Progressive Loading Implementation

Three-tier system:

  1. Placeholder (< 100KB): Simple geometry, solid colors
  2. Low-poly (< 1MB): Reduced geometry, compressed textures (256px)
  3. Full quality (< 4MB): Full geometry, full-res textures
Recommendation
Include a troubleshooting section with specific error messages and solutions for common compression/loading failures

Progress:

  • Geometry Check

    • Triangle count < 50K per model
    • No n-gons or invalid faces
    • UV islands fit 0-1 space with 2px padding
    • No overlapping faces or duplicate vertices
  • Material Optimization

    • Max 4 materials per model
    • Textures power-of-2 dimensions
    • Combined roughness/metallic/AO maps
    • Normal maps in OpenGL format (+Y up)
  • File Size Validation

    • Placeholder model < 100KB
    • Low-poly model < 1MB
    • Full model < 4MB
    • Total scene bundle < 5MB
  • Compression Applied

    • Draco geometry compression enabled
    • KTX2/Basis texture compression
    • GLTF binary format (.glb)
  • Performance Testing

    • Loads in < 2s on throttled 4G (1.6Mbps)
    • Maintains 60fps on mid-tier mobile
    • Memory usage < 100MB total
    • Tested on iOS Safari, Chrome Android, Desktop
  • Progressive Loading

    • Placeholder appears in < 200ms
    • Low-poly transition smooth
    • No visual pop during upgrades
15 / 20

Example 1: E-commerce Product Model Input: 200K triangle CAD model with 4K textures Output:

  • Placeholder: 500 triangles, 64×64 textures (80KB)
  • Low-poly: 5K triangles, 512×512 textures (800KB)
  • Full: 25K triangles, 1024×1024 textures (2.8MB)

Example 2: Architectural Visualization Input: 2M triangle building model Output: LOD system with distance-based loading, instanced geometry for repetitive elements, 4.2MB total

Recommendation
Provide fallback strategies for when Draco or KTX2 compression isn't supported by the target browser
  • Texture Atlasing: Combine small textures into single atlas to reduce draw calls
  • Instancing: Use for repeated elements (screws, bolts, vegetation)
  • Level of Detail: Create 3-4 LOD levels based on screen space size
  • Occlusion Culling: Remove interior faces never seen by camera
  • Vertex Colors: Use for simple variations instead of unique textures
  • Forgetting to apply modifiers before export (breaks compression)
  • Using non-power-of-2 texture dimensions (poor GPU performance)
  • Over-compressing normal maps (causes lighting artifacts)
  • Not testing on actual mobile devices (performance varies widely)
  • Ignoring texture memory budget (causes crashes on low-end devices)
  • Missing fallbacks for unsupported compression formats
0
Grade A-AI Skill Framework
Scorecard
Criteria Breakdown
Quick Start
15/15
Workflow
15/15
Examples
15/20
Completeness
15/20
Format
15/15
Conciseness
13/15