"매 thermal throttle 의 적 — fillrate 의 절약". Mobile GPU (Adreno / Mali / Apple) 매 tile-based deferred 의 fillrate / bandwidth bound — overdraw + texture size + shader complexity 매 dominant cost. 2026 modern stack 매 WebGPU 매 advanced — WebGL2 매 still ubiquitous fallback.
매 핵심
매 mobile GPU 차이
TBDR (Tile-Based Deferred Rendering): Mali / Apple / PowerVR — early-Z + tile cache.
import{KTX2Loader}from'three/addons/loaders/KTX2Loader.js';constloader=newKTX2Loader().setTranscoderPath('/basis/').detectSupport(renderer);loader.load('texture.ktx2',(tex)=>{/* ASTC / ETC2 / BC7 transcode 매 device */});// 매 mobile 의 ASTC — 매 4-8x smaller VRAM + bandwidth
Overdraw 매 줄임
// 매 sort opaque front-to-back (early-Z reject)
opaque.sort((a,b)=>a.distanceToCamera-b.distanceToCamera);// 매 transparent back-to-front (correct blending)
transparent.sort((a,b)=>b.distanceToCamera-a.distanceToCamera);// 매 alpha-test 의 alpha-blend 보다 prefer (TBDR-friendly)
material.alphaTest=0.5;material.transparent=false;
Mipmap 매 always
gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR_MIPMAP_LINEAR);gl.generateMipmap(gl.TEXTURE_2D);// 매 minified texture 의 cache hit + bandwidth 의 1/3
LOD 매 distance-based
constlod=newTHREE.LOD();lod.addLevel(highMesh,0);// 0-10m: 50k tris
lod.addLevel(midMesh,10);// 10-30m: 10k tris
lod.addLevel(lowMesh,30);// 30m+: 2k tris
scene.add(lod);
Shader precision 매 mediump
#version 300 esprecisionmediumpfloat;// 매 16-bit on mobile — 매 highp 보다 2x throughputinvec2vUv;uniformsampler2Dmap;outvec4fragColor;voidmain(){fragColor=texture(map,vUv);}
Thermal-aware quality scaling
// 매 thermal API (limited) + battery + perf observer
asyncfunctiondetectTier(){constbattery=awaitnavigator.getBattery?.();constmemory=navigator.deviceMemory??4;constcores=navigator.hardwareConcurrency??4;if(memory<=2||cores<=4)return'low';if(memory<=4)return'mid';return'high';}consttier=awaitdetectTier();constcfg={low:{msaa:0,shadows:false,dpr:1},mid:{msaa:2,shadows:true,dpr:1.5},high:{msaa:4,shadows:true,dpr:2}}[tier];
Disable expensive features on mobile
constisMobile=/Mobi|Android|iPhone/.test(navigator.userAgent);renderer.shadowMap.enabled=!isMobile;renderer.toneMapping=isMobile?THREE.NoToneMapping:THREE.ACESFilmicToneMapping;postProcessing.enabled=!isMobile;// bloom / SSAO 매 expensive
Instanced rendering 매 thousands
constmesh=newTHREE.InstancedMesh(geometry,material,5000);for(leti=0;i<5000;i++){mat.setPosition(randomPos());mesh.setMatrixAt(i,mat);}// 매 1 draw call 매 5k objects — mobile 의 huge win
언제: mobile-targeted WebGL app — 60fps 의 mid-tier device 의 hold / thermal throttle 의 prevent.
언제 X: desktop-only / WebGPU available 매 flagship — WebGPU compute path 매 better.
❌ 안티패턴
devicePixelRatio 의 fixed: 매 retina 의 4x fragments — clamp 1.5-2.
Uncompressed PNG: 매 mobile VRAM 의 폭주 — KTX2 / Basis 의 사용.
Real-time shadows on low-end: 매 30%+ frame budget — bake / disable.
Postprocessing on mobile: bloom / SSAO 매 fillrate killer — disable.
No LOD: distant 50k-tri mesh 매 vertex bound — LOD.
highp everywhere: precision 매 mediump 의 충분 (color / UV).
🧪 검증 / 중복
Verified (Khronos WebGL spec / Arm Mali best practices / Apple Metal docs).