The Production 3D Asset Optimization Checklist
Use a complete release checklist for source preservation, geometry, shading, textures, animation, compression, accessibility, SEO, delivery, profiling, and rollback.
A reliable optimization checklist does more than count triangles and bytes. It connects an immutable source to a target-specific artifact, verifies that required visual and semantic information survives, measures actual loading and rendering, and makes rollback possible.
Use this checklist as a release gate. Not every asset needs every feature, but every not applicable decision should be deliberate. Record evidence and owners rather than relying on memory.
1. Define the delivery profile#
Before editing, record:
- target platform, engine or viewer, and version;
- minimum devices, browsers, and operating systems;
- normal and closest camera distance;
- maximum simultaneous instance count;
- static, rigid animated, skinned, or morphing role;
- required variants, selection, collision, and AR behavior;
- physical scale and dimensional tolerance;
- initial and full-detail byte budgets;
- CPU, GPU, memory, and frame thresholds;
- allowed glTF extensions and configured decoders;
- accessibility, fallback, and indexable-content requirements;
- visual approver, technical approver, and exception owner.
A target of small, fast, and looks good is not testable. A 950 KB placement GLB, 3 MB detail tier, 60 Hz midrange phone target, and 2% silhouette tolerance is.
2. Preserve the source and provenance#
- The editable source, high-resolution mesh, bake source, and source images are immutable.
- A content hash identifies every important input.
- Creator, organization, license, purchase, attribution, and allowed-use records are stored.
- Generator prompt, scan project, DCC, exporter, and processing versions are recorded when relevant.
- Units, coordinate system, and source-to-delivery transform are documented.
- The original has not been overwritten by a lossy delivery round trip.
- Rights for depicted logos, people, designs, and input imagery are reviewed.
- Public attribution and private compliance records have appropriate separation.
Optimization is a derivative process. If the team cannot identify what the delivery came from, it cannot safely reproduce, correct, or audit it.
3. Capture the baseline#
Run the Khronos glTF Validator or appropriate format validator on the untouched interchange file. Save its versioned report.
Create a component inventory:
- total and subsystem bytes;
- scenes, nodes, hierarchy depth, and transforms;
- meshes, primitives, triangles, and runtime vertices;
- position, normal, tangent, UV, color, joint, weight, and morph attributes;
- materials, alpha modes, double-sided flags, and extensions;
- images, dimensions, channels, encoded bytes, and decoded estimates;
- animations, durations, tracks, samples, skins, bones, and influences;
- physical dimensions, origin, bounds, and remote components;
- validation errors, warnings, and approved exceptions.
Render fixed front, side, rear, top, closest, silhouette, grazing-light, and key animation views. Record renderer, camera, lighting, tone mapping, and resolution.
Measure cold and warm load, decode, transcode, upload, shader, first frame, interaction, CPU and GPU frame percentiles, draws, memory, and disposal in the shipping runtime.
4. Diagnose the actual constraints#
- Every major byte category has a percentage of total.
- Network, CPU working, decoded image, GPU, and disk or package memory are separate.
- Controlled toggles identify geometry, material, fill, shadow, animation, texture, or submission limits.
- One instance and production population are both captured.
- Development-build overhead is excluded from release conclusions.
- Thermal stabilization is included for mobile and XR.
- The optimization plan ranks actions by expected benefit, risk, and visual importance.
- No destructive transform begins only because it is the team's usual first step.
If images are 82% of bytes, geometry compression cannot deliver an 80% file reduction. If a simple-material test saves 6 milliseconds, triangle count may not be the immediate frame bottleneck.
5. Clean scene structure#
- Editor cameras, lights, helpers, hidden high meshes, and obsolete nodes are removed if not consumed.
- Unreferenced images, materials, accessors, buffer views, clips, skins, and morphs are pruned.
- Exact duplicate geometry, images, textures, samplers, and materials are deduplicated.
- Empty transform nodes are retained only for pivot, semantic, or animation needs.
- Multiple scenes are intentional and supported.
- Node names or external IDs required for selection remain stable.
- Bounds no longer include remote debris.
- Scene flattening, merging, or instancing preserves culling and lifecycle.
Revalidate after structural cleanup. A visual change means the data was not truly unused or the rewrite altered behavior.
6. Verify scale, orientation, and transforms#
- Physical width, height, and depth match authoritative values.
- One glTF unit corresponds to 1 meter where glTF is the delivery format.
- Forward and up conventions match the target integration.
- Origin supports floor, wall, grip, hinge, or rotation behavior.
- Negative or nonuniform scales are intentional and tested.
- Normals and winding remain correct after applying transforms.
- Animation and child nodes preserve their world motion.
- Bounds and camera framing are appropriate.
- AR placement is checked against a physical reference.
- Source-to-local transform is retained for scans or measured data.
A visually plausible asset at 100× scale is still a release failure.
7. Clean and optimize geometry#
- Hidden internals, duplicate shells, scan debris, and zero-value micro-detail are removed first.
- Degenerate faces, non-finite values, and required manifold defects are repaired.
- Intentional openings and acquisition boundaries are not filled accidentally.
- Simplification protects silhouette, holes, thin features, contact edges, joints, and semantic regions.
- Several reduction candidates are compared at approved screen sizes.
- Geometric, silhouette, depth, or rendered error supports the decision.
- Final triangulation is deterministic before baking.
- Runtime vertex count and attribute splits are measured, not inferred from positions.
- Vertex-cache and fetch ordering is optimized where supported.
- Collision and interaction use simple purpose-built proxies.
Record source and output triangles, vertices, primitives, bounds, and error. A lower triangle count does not excuse a damaged handle opening.
8. Verify normals, tangents, and UVs#
- Hard and smooth edges follow physical and visual intent.
- Normal direction and length are valid.
- Tangents exist when the material and runtime need them.
- Tangents are regenerated after topology or UV changes using the target convention.
- Final tangent-space normal bakes use final topology and triangulation.
- UV overlap is intentional; stretch is within accepted regions.
- Texel density follows projected importance.
- Island margins survive the final resolution and mip chain.
- Mirrored islands are compatible with text, wear, and normal direction.
- Secondary UVs exist only for consumed lightmap or other features.
Review grazing highlights and a UV checker. These reveal problems that an albedo-heavy studio render hides.
9. Rationalize materials and draw structure#
- Every material slot is used and maps to a real shading or variant need.
- Identical materials are consolidated.
- Primitive merging respects material, animation, selection, culling, and lifecycle.
- Opaque materials are preferred where alpha is unnecessary.
- Masked and blended materials are bounded and reviewed for overdraw.
- Double-sided is limited to physically or visually required surfaces.
- Unsupported procedural or engine-specific nodes are baked or rebuilt.
- Metallic, roughness, normal, emissive, clearcoat, transmission, and opacity are target-compatible.
- Shader feature and define count is measured.
- Shadow, depth, outline, and extra passes are included in draw analysis.
Profile actual draws. Ten meshes with one shared material and one mesh with 10 material groups can produce very different results from what object count suggests.
10. Optimize textures#
- Every image has semantic, dimensions, channels, format, UV, sampler, and color-space metadata.
- Encoded size and decoded top-level and mip memory are calculated.
- Duplicate, unused, constant, and opaque-alpha images are removed or simplified.
- Dimensions follow closest projected use, not source habit.
- UV occupancy is improved before increasing resolution.
- Color and emissive inputs receive correct color handling.
- Normal, roughness, metallic, occlusion, and masks remain linear data.
- Channel packing follows the runtime convention.
- Atlas groups share visibility, shader, quality, and streaming lifecycle.
- Mips, padding, alpha coverage, and distance motion are reviewed.
- Delivery codecs and KTX2 modes match configured loaders.
- Variants reuse invariant texture data.
Remember: one 4096 × 4096 RGBA image is about 64 MiB decoded at the top level and roughly 85 MiB with mips before GPU block compression.
11. Validate animation, skinning, and morphs#
- Only required clips ship, with clear names and expected default.
- Empty lead-in, tail, constant, duplicate, and oversampled keys are removed within error tolerance.
- Loop seams and event timing pass after delivery export.
- Unused bones and influences are removed.
- Joint and influence limits match the platform.
- Bind pose and inverse bind matrices are valid.
- Extreme poses preserve silhouette, volume, and thin surfaces.
- Required morph targets survive; unused targets are removed.
- Morph normals or tangents match runtime expectations.
- Animation LOD and update rate reflect production population.
- Rigid mechanical parts rotate around correct pivots.
- Static fallback exists where animation is optional.
Test the actual crowd or product configuration. One correctly deforming character is not a population performance result.
12. Build LOD and quality tiers#
- LOD0 is defined by closest normal use, not unlimited editor zoom.
- Lower tiers protect screen-space silhouette and semantic mapping.
- Transition points come from projected size and moving-camera tests.
- Hysteresis or fade prevents thrashing where appropriate.
- Lower LODs reduce bones, morphs, materials, shadows, and animation cost when useful.
- Placement, interaction, and full-detail milestones have stable fallbacks.
- Tier swaps occur only after resources and shaders are ready.
- Old resources release after a correct new frame.
- Mobile tiers strip unused high-detail data where the engine supports it.
- Quality policy logs the active tier with performance evidence.
An LOD family is successful when the production camera does not reveal the budget change and the profiler does.
13. Apply compression according to the loader#
- Quantization tolerances are tested against bounds, UVs, normals, skinning, and animation.
- Draco or Meshopt is applied only after geometry is final.
- KTX 2.0 is applied only after texture masters are approved.
- Required extensions match configured decoders and transcoders.
- Decoder files, WebAssembly, workers, MIME, CORS, and CSP are tested.
- Cold decoder initialization and warm cache are measured.
- Decode and transcode do not create unacceptable main-thread stalls.
- Compressed and fallback candidates are compared end to end.
- Tool versions and settings are in the build manifest.
- Lossy compression never becomes the new editable source.
The smallest GLB is not automatically the fastest first correct frame.
14. Validate file and visual quality#
- The final artifact passes the Khronos glTF Validator with reviewed warnings.
- At least 2 independent viewers open it correctly.
- The shipping runtime uses the exact approved file hash.
- Fixed source and output renders compare under identical conditions.
- Silhouette, depth, normals, material IDs, and production lighting are reviewed.
- Important labels, faces, openings, wear, and moving parts remain correct.
- Transparent surfaces pass front, rear, light, and dark backgrounds.
- Mips and LODs pass camera motion.
- Animation and variants pass every supported state.
- Physical dimensions and placement are rechecked after final packaging.
- Automated visual metrics route uncertain cases to human approval.
- Source defects and accepted delivery differences are documented separately.
Do not approve from one flattering screenshot.
15. Validate runtime performance#
- Tests use a production build and production URL or package path.
- Minimum, mid, and current device tiers are represented.
- Cold and warm acquisition are separated.
- Request, decode, transcode, upload, compile, first frame, interaction, and full detail are timed.
- CPU and GPU p50, p95, p99, and worst frame milliseconds are recorded.
- Draws, triangles, vertices, textures, shader programs, and passes are captured.
- One asset and maximum representative population pass.
- Pixel ratio, resolution, shadows, transparency, and post effects match production.
- A 10–20 minute mobile or XR run includes thermal behavior.
- Repeated loading and unloading reach a stable memory plateau.
- Network interruption, cancellation, route change, and context loss recover.
- Performance margin remains for effects and future variation.
Change one subsystem at a time when diagnosing a failure.
16. Validate web delivery, SEO, and accessibility#
- The asset uses HTTPS, correct MIME type, and tested CORS behavior.
- Content-hashed URLs support long immutable caching.
- HTML or manifests point to the approved artifact revision.
- Service-worker policy does not retain obsolete catalogs indefinitely.
- The page reserves stable viewer dimensions and supplies a poster.
- Product or article title, description, dimensions, and essential facts exist in semantic HTML.
- Search discovery does not require executing the 3D viewer.
- A useful image or content fallback exists when WebGL or XR is unavailable.
- Controls have labels, focus behavior, keyboard or equivalent operation, and visible state.
- Reduced-motion preferences disable optional rotation and animation.
- Touch gestures do not trap page scrolling unexpectedly.
- Errors restore content and a retry path instead of a blank canvas.
The model enhances the page. It does not replace the indexable, accessible explanation of what the user is viewing.
17. Publish atomically and retain rollback#
- Output and reports are written to staging, never over the live source.
- Final file hash, bytes, profile, tool versions, and approvals are recorded.
- Related GLB, USDZ, textures, posters, manifests, and metadata share a product revision.
- Upload verifies byte count and hash.
- The release manifest changes only after every required artifact passes.
- Previous manifests and artifacts remain available for rollback.
- Partial failure cannot create a mixed live release.
- Monitoring distinguishes asset revision, device, quality tier, and failure stage.
- Incident procedure can restore known-good bytes quickly.
- Temporary cleanup cannot delete sources or active releases.
- Future builds reproduce from source and profile, not last delivery.
- Exceptions have an owner and review date.
Run one final production smoke test after publishing. CDN headers and redirects can differ from staging.
Release sign-off record#
Record a concise final decision:
- asset and product ID;
- source and output hashes;
- delivery profile version;
- output bytes and reduction;
- triangles, vertices, draws, images, and GPU texture estimate;
- first-frame and frame-percentile results by device tier;
- validator result and accepted warnings;
- visual reference and difference report;
- license and attribution status;
- technical, visual, product, and accessibility approvers;
- exception links;
- live manifest and rollback revision;
- publication time and monitoring dashboard.
If one of those facts cannot be recovered later, the release is harder to debug than it needs to be.
Sources and further reading#
- Khronos glTF 2.0 specification
- Khronos glTF Validator
- Khronos glTF Asset Auditor
- Khronos KTX 2.0 specification
- W3C Web Accessibility Initiative
Optimization is complete when the artifact is smaller or faster for a named target, remains visually and semantically correct, reaches users through a resilient delivery path, and can be traced and rolled back. This checklist makes that outcome reviewable instead of assumed.