Mobile Ready
MOBILEREADY DOCUMENTATION
Version 1.0.0 · Blender 3.0+
------------------------------------------------------------
TABLE OF CONTENTS
- 1. Installation
- 2. Getting Started
- 3. Polygon Budget & Heatmap 3.1 Per-Object Budgets
- 3.2 Threshold Settings
- 3.3 Viewport Color Coding
- 3.4 How to Read the Heatmap
4. LOD Generation
- 4.1 Presets Table
- 4.2 Custom Targets
- 4.3 Parent to Empty
- 4.4 LOD Naming Convention
5. Draw Call Estimation
- 5.1 How Draw Calls Work
- 5.2 Scope: Selection vs. Scene
- 5.3 Batching Explanation
- 5.4 Reading Results
6. Texture Memory Calculator
- 6.1 Format BPP Table
- 6.2 Mipmap Multiplier
- 6.3 Resolution Override
- 6.4 Reading Results
7. Bone Influences
- 7.1 Why 4 Bones on Mobile
- 7.2 Checking Influences
- 7.3 Auto Cleanup Algorithm
- 7.4 Weight Normalization
8. Channel Packing
9. Texture Atlas
10. Operator Reference
11. Troubleshooting
12. FAQ
------------------------------------------------------------
1. INSTALLATION
METHOD A — INSTALL FROM ZIP
1. Download the mobile_ready.zip file from Blender Market
2. Open Blender → Edit → Preferences → Add-ons
3. Click Install... and select the ZIP file
4. Enable the checkbox next to MobileReady
5. The MobileReady tab will appear in the 3D Viewport sidebar
METHOD B — MANUAL INSTALL
1. Extract the mobile_ready folder from the ZIP
2. Copy it to your Blender addons directory: Windows: %APPDATA%\Blender Foundation\Blender\4.4\scripts\addons\ macOS: ~/Library/Application Support/Blender/4.4/scripts/addons/ Linux: ~/.config/blender/4.4/scripts/addons/
3. Restart Blender and enable the addon in Preferences
Note: MobileReady requires NumPy, which is bundled with Blender by default. No additional packages are needed.
------------------------------------------------------------
2. GETTING STARTED
OPENING THE PANEL
Press N in the 3D Viewport to open the sidebar, then click the MobileReady tab.
PANEL OVERVIEW
The main panel displays a summary of your current selection (object count, total triangles, material count). Below it are seven collapsible sub-panels:
Panel Purpose
--------------- ---------------------------------------------
Polygon Budget Set triangle budgets per object and visuali..
LOD Generation Generate level-of-detail chains using mobil..
Draw Calls Estimate runtime draw call count with per-m..
Texture Memory Calculate VRAM usage for compressed mobile ..
Bone Influences Find and fix vertices exceeding the 4-bone-..
Channel Packing Pack multiple PBR maps into a single RGBA t..
Texture Atlas Combine textures from multiple objects into..
QUICK START
1. Select the objects you want to analyze
2. Open the Polygon Budget panel to check triangle counts against mobile budgets
3. Open Draw Calls to see your material cost
4. Open Texture Memory to profile VRAM usage
5. Use LOD Generation, Bone Influences, Channel Packing, and Texture Atlas to fix any issues
6. Export your optimized assets
------------------------------------------------------------
3. POLYGON BUDGET & HEATMAP
The Polygon Budget system lets you assign triangle limits to individual objects and instantly see which objects exceed their budget through color-coded viewport overlays.
3.1 PER-OBJECT BUDGETS
Each mesh object can have its own triangle budget. You can set budgets in three ways:
- Manual entry — type a specific triangle count into the budget field
- From preset — choose a preset category (Character, Prop, Environment) and LOD level to auto-fill a budget value
- Batch assign — select multiple objects and assign the same budget to all of them at once
When no budget is set for an object, it defaults to the global fallback value (configurable in addon preferences, default: 5000 triangles).
3.2 THRESHOLD SETTINGS
Two threshold percentages control when the heatmap color changes:
Setting Default Description
--------------------- ------- ---------------------------------------------
Warning Threshold 75% Objects using more than this percentage of ..
Over-Budget Threshold 100% Objects exceeding their budget turn red
You can adjust these thresholds in the panel header. For example, setting the warning threshold to 60% gives you an earlier heads-up.
3.3 VIEWPORT COLOR CODING
When the heatmap overlay is enabled, MobileReady applies a solid color override to each object based on its budget usage:
Color Range Meaning
------ ---------- ---------------------------------------------
Green 0% – 75% Within budget. No action needed.
Yellow 75% – 100% Approaching the limit. Consider optimizing ..
Red > 100% Over budget. This object needs polygon redu..
3.4 HOW TO READ THE HEATMAP
The heatmap is designed for rapid scene-wide triage:
1. Enable the heatmap overlay by clicking Show Heatmap in the Polygon Budget panel
2. Scan your viewport. Any red objects are immediate priorities for optimization
3. Yellow objects are borderline — consider reducing them if you need headroom
4. Green objects are safe. Focus your effort elsewhere
5. Hover over any object to see its exact triangle count and budget in the panel info area
Note:
Tip: The heatmap overlay is non-destructive. It uses Blender’s object color display mode and does not modify your materials. Toggle it off to return to normal shading.
------------------------------------------------------------
4. LOD GENERATION
MobileReady generates complete LOD chains from your high-detail meshes using Blender’s Decimate modifier. Each preset is tuned for real mobile polygon budgets.
4.1 PRESETS TABLE
Preset LOD0 (tris) LOD1 (tris) LOD2 (tris) LOD3 (tris) Typical Use
----------- ----------- ----------- ----------- ----------- -------------------------------------------
Character 5,000 2,500 1,000 500 Player characters, NPCs, enemies
Prop 2,000 1,000 500 200 Weapons, pickups, furniture, crates
Environment 10,000 5,000 2,000 1,000 Buildings, terrain chunks, large set pieces
4.2 CUSTOM TARGETS
If the presets do not match your project, you can set custom triangle targets for each LOD level. Enter exact triangle counts in the Custom fields. MobileReady will use ratio-based decimation to reach each target as closely as possible.
Note: The Decimate modifier produces approximate results. Final triangle counts may differ slightly from the target, especially for meshes with complex topology or edge constraints.
4.3 PARENT TO EMPTY
When LOD generation completes, all LOD meshes are automatically parented to an Empty object named ObjectName_LODGroup. This hierarchy is directly compatible with:
- Unity — recognized by the LODGroup component importer
- Unreal Engine — detected as LOD levels on FBX import
- Godot — works with LOD node setup
4.4 LOD NAMING CONVENTION
Generated meshes follow the standard engine naming convention:
MyCharacter_LOD0 (original or highest detail)
MyCharacter_LOD1 (medium detail)
MyCharacter_LOD2 (low detail)
MyCharacter_LOD3 (lowest detail)
The original mesh is duplicated and renamed to _LOD0. Your source mesh is preserved untouched.
------------------------------------------------------------
5. DRAW CALL ESTIMATION
Draw calls are one of the most critical performance metrics on mobile. MobileReady estimates your runtime draw call count and shows you exactly where the cost comes from.
5.1 HOW DRAW CALLS WORK
A draw call is a command sent from the CPU to the GPU to render a batch of geometry. On mobile, each draw call has significant overhead. As a general guideline:
- Under 50 draw calls — excellent for mobile
- 50–100 draw calls — acceptable for most devices
- 100–200 draw calls — may cause frame drops on low-end devices
- Over 200 draw calls — likely to cause performance problems on mobile
Each unique material on each unique object typically results in one draw call. An object with 3 material slots generates 3 draw calls.
5.2 SCOPE: SELECTION VS. SCENE
The Scope dropdown lets you choose what to analyze:
- Selection — only the currently selected objects are counted
- Scene — all visible mesh objects in the active scene are counted
5.3 BATCHING EXPLANATION
MobileReady reports two numbers:
- Current Draw Calls — the estimated count if every object/material combination is a separate draw
- Batched Draw Calls — the estimated count if objects sharing the same material are batched together (as most engines do with static/dynamic batching)
The difference between these two numbers is your batching potential — the number of draw calls you could save by ensuring objects share materials and are eligible for batching.
Note:
Tip: To reduce draw calls, combine objects that share the same material, use texture atlasing to merge materials, and minimize the number of material slots per object.
5.4 READING RESULTS
The results panel shows:
Column Description
---------- ---------------------------------------------
Material The material name
Objects Number of objects using this material
Draw Calls Number of draw calls this material contribu..
Triangles Total triangles rendered with this material
Materials are sorted by draw call count (highest first), making it easy to identify the biggest offenders.
------------------------------------------------------------
6. TEXTURE MEMORY CALCULATOR
Mobile devices have limited VRAM (often 1–4 GB shared with system memory). The Texture Memory Calculator shows you exactly how much GPU memory your textures will consume after compression.
6.1 FORMAT BPP TABLE
MobileReady supports the following texture compression formats. BPP (bits per pixel) determines the final compressed size.
Format BPP Platform Notes
----------------- ----- ------------------ ---------------------------------------
ASTC 4×4 8.00 Android, iOS (A8+) Highest quality ASTC block size
ASTC 6×6 3.56 Android, iOS (A8+) Good balance of quality and size
ASTC 8×8 2.00 Android, iOS (A8+) Smallest ASTC; some quality loss
ETC2 RGB 4.00 Android (ES 3.0+) No alpha channel
ETC2 RGBA 8.00 Android (ES 3.0+) With alpha channel
PVRTC 4bpp 4.00 iOS (legacy) Requires power-of-two & square textures
PVRTC 2bpp 2.00 iOS (legacy) Lowest quality; significant artifacts
Uncompressed RGB 24.00 All No compression, baseline reference
Uncompressed RGBA 32.00 All No compression, with alpha
6.2 MIPMAP MULTIPLIER
When mipmaps are enabled (the default for 3D rendering), the full mipmap chain adds approximately 33% to the base texture size. MobileReady applies a 1.33× multiplier to all size calculations when the Include Mipmaps checkbox is on.
The formula used:
memory = width * height * (BPP / 8) * mipmap_multiplier
Where mipmap_multiplier = 1.33 (with mipmaps) or 1.0 (without)
6.3 RESOLUTION OVERRIDE
The Resolution Override lets you simulate what would happen if you resized all textures to a different resolution. This is useful for answering questions like:
- “How much VRAM would I save by halving all my textures?”
- “Can I fit within 64 MB if I drop everything to 512×512?”
Set the override to a resolution (256, 512, 1024, 2048, or 4096) and MobileReady recalculates all sizes as if every texture were that resolution. Set it to Original to use each texture’s actual size.
6.4 READING RESULTS
The results panel displays:
- Per-texture breakdown — each texture image, its resolution, and size in each selected format
- Total VRAM — sum of all texture memory for the selected format
- Budget indicator — a color-coded bar showing usage against common mobile budgets (64 MB, 128 MB, 256 MB)
Important: These are estimates. Actual GPU memory usage depends on the game engine’s texture streaming, mipmap bias settings, and runtime loading behavior.
------------------------------------------------------------
7. BONE INFLUENCES
Skeletal meshes on mobile have a hard limit on the number of bones that can influence a single vertex. MobileReady helps you find and fix violations before they cause rendering errors in your game engine.
7.1 WHY 4 BONES ON MOBILE
Mobile GPU vertex shaders typically support a maximum of 4 bone influences per vertex. This limit exists because:
- Each influence requires a bone index + weight attribute, consuming vertex buffer bandwidth
- The vertex shader must perform a matrix multiply for each influence — more influences = slower skinning
- Unity, Unreal Engine, and Godot all default to 4-bone skinning on mobile quality settings
Vertices with more than 4 influences will either be silently clamped by the engine (potentially causing visible artifacts) or cause import errors.
7.2 CHECKING INFLUENCES
Select one or more armature-driven mesh objects and click Check Bone Influences. MobileReady scans every vertex and reports:
- Total number of vertices
- Number of vertices exceeding 4 influences
- Maximum influence count found
- A list of the most affected vertex groups (bones)
7.3 AUTO CLEANUP ALGORITHM
Click Auto Clean Bone Influences to automatically reduce all vertices to 4 or fewer influences. The algorithm works as follows:
1. For each vertex, collect all bone weights
2. Sort weights in descending order (highest influence first)
3. Keep the top 4 weights
4. Discard any remaining weights (they are the smallest and least visually significant)
5. Normalize the remaining 4 weights so they sum to exactly 1.0
Note:
Tip: In most cases, the discarded weights are very small (under 0.05) and the visual difference is imperceptible. For critical deformation areas (face, hands), review the results manually.
7.4 WEIGHT NORMALIZATION
After cleanup, all vertex weights are normalized so they sum to 1.0. This is required by all game engines for correct skinning. Unnormalized weights cause mesh distortion and are a common source of “exploding mesh” bugs on mobile.
You can also run normalization independently (without removing influences) using the Normalize Weights button.
------------------------------------------------------------
8. CHANNEL PACKING
Channel Packing combines multiple grayscale PBR maps into the RGBA channels of a single texture. This reduces the number of texture samples the GPU must perform per fragment, which is critical for mobile fill-rate performance.
HOW IT WORKS
1. Select an object with a Principled BSDF material that has PBR textures connected
2. Open the Channel Packing panel
3. Assign which map goes into each channel: R Channel — e.g., Ambient Occlusion
4. G Channel — e.g., Roughness
5. B Channel — e.g., Metallic
6. A Channel — e.g., Emission Mask (or leave empty)
7. Click Pack Channels
8. A new RGBA image is created and appears in Blender’s Image Editor
SOURCE DETECTION
MobileReady automatically detects textures connected to the Principled BSDF node inputs (Roughness, Metallic, Normal, Emission). You can also manually select any image in the blend file as a channel source.
PRESETS
Preset R G B A
-------------- -------- --------- ----------- -------------
ORM AO Roughness Metallic —
Unity Mask Metallic AO Detail Mask Smoothness
Mobile Compact Metallic Roughness AO Emission Mask
------------------------------------------------------------
9. TEXTURE ATLAS
The Texture Atlas tool combines textures from multiple objects into a single shared atlas. All selected objects are re-UV-mapped to reference the atlas, reducing the total number of materials and draw calls.
SETTINGS
Setting Description Default
-------------- --------------------------------------------- --------
Resolution Output atlas size (512, 1024, 2048, 4096) 2048
Padding Pixel padding between tiles to prevent blee.. Auto
Include Albedo Atlas base color textures On
Include Normal Atlas normal maps On
Include ORM Atlas ORM packed textures On
Atlas Name Base name for generated images and material MR_Atlas
HOW TO USE
1. Select 2 or more mesh objects with textures
2. Open the Texture Atlas panel
3. Configure resolution and map types
4. Click Create Atlas
5. All selected objects now share a single atlas material
BEST PRACTICES
- Group similar-sized objects together for best UV space utilization
- Use 1024 or 2048 for mobile — avoid 4096 unless absolutely necessary
- Enable auto padding to prevent mipmap bleeding
- Combine atlasing with LOD generation: atlas your LOD0 meshes, then generate LODs from the atlased result
------------------------------------------------------------
10. OPERATOR REFERENCE
Operator Python ID Input Description
-------------------------- ------------------------------ ------------------------- ---------------------------------------------
Check Polygon Budget mobileready.check_budget Selected meshes Evaluate triangle counts against assigned b..
Show Heatmap mobileready.show_heatmap Selected meshes Enable viewport color overlay based on budg..
Hide Heatmap mobileready.hide_heatmap None Remove viewport color overlay and restore n..
Generate LODs mobileready.generate_lods Selected meshes Create LOD chain using preset or custom tar..
Estimate Draw Calls mobileready.estimate_drawcalls Selection or Scene Calculate draw call count with per-material..
Calculate Texture Memory mobileready.calc_texmem Selected meshes Compute VRAM usage for mobile texture formats
Check Bone Influences mobileready.check_bones Selected armature meshes Scan vertices for bone influence count viol..
Auto Clean Bone Influences mobileready.clean_bones Selected armature meshes Reduce influences to 4 and normalize weights
Normalize Weights mobileready.normalize_weights Selected armature meshes Normalize all vertex weights to sum to 1.0
Pack Channels mobileready.pack_channels Active mesh with material Pack PBR maps into a single RGBA texture
Create Atlas mobileready.create_atlas 2+ selected meshes Generate multi-object texture atlas with UV..
CALLING FROM PYTHON
# Check polygon budgets for selected objects
bpy.ops.mobileready.check_budget()
# Show heatmap overlay
bpy.ops.mobileready.show_heatmap()
# Generate LODs with Character preset
bpy.ops.mobileready.generate_lods(preset='CHARACTER')
# Generate LODs with custom targets
bpy.ops.mobileready.generate_lods(preset='CUSTOM', lod0=8000, lod1=4000, lod2=2000, lod3=800)
# Estimate draw calls for selection
bpy.ops.mobileready.estimate_drawcalls(scope='SELECTION')
# Calculate texture memory with ASTC 4x4 format
bpy.ops.mobileready.calc_texmem(format='ASTC_4x4', include_mipmaps=True)
# Check and clean bone influences
bpy.ops.mobileready.check_bones()
bpy.ops.mobileready.clean_bones(max_influences=4)
# Pack channels with ORM preset
bpy.ops.mobileready.pack_channels(preset='ORM')
# Create texture atlas
bpy.ops.mobileready.create_atlas(resolution=2048)
# Access addon settings
settings = bpy.context.scene.mobileready
settings.budget_warning_threshold = 0.75
settings.budget_over_threshold = 1.0
------------------------------------------------------------
11. TROUBLESHOOTING
HEATMAP COLORS DO NOT APPEAR
Make sure Viewport Shading is set to Solid mode. The heatmap uses Object Color display, which is only visible in Solid shading. In Material Preview or Rendered mode the object color overlay is not displayed. Also verify that Color → Object is selected in the Solid shading options.
LOD GENERATION PRODUCES 0 TRIANGLES
This happens when the target triangle count is too low relative to the mesh complexity. The Decimate modifier may collapse the entire mesh. Increase the LOD target or use a custom target that is at least 5% of the original triangle count.
DRAW CALL COUNT SEEMS TOO HIGH
MobileReady counts each object/material combination as one draw call. Objects with multiple material slots contribute multiple draw calls. If you see unexpectedly high numbers, check for objects with many material slots. Use the per-material breakdown to identify the most expensive materials and consider consolidating them.
TEXTURE MEMORY SHOWS 0 BYTES
The calculator only measures Image Texture nodes connected to the Principled BSDF. If your materials use procedural textures, vertex colors, or non-standard shader setups, no textures are detected. Bake your procedural textures to images first.
BONE CHECK FINDS NO VERTICES BUT THE MESH HAS AN ARMATURE
Verify that the mesh has vertex groups assigned and that the Armature modifier is present. Meshes parented to an armature without an Armature modifier or without vertex group weights will not be detected as skinned meshes.
AUTO BONE CLEANUP CHANGES VISIBLE DEFORMATION
This typically occurs in areas with complex joint deformation (shoulders, hips, face). The cleanup removes the weakest influences, which may matter in these regions. After cleanup, enter Weight Paint mode and manually adjust weights on affected areas. Focus on the 4 most important bones for each region.
CHANNEL PACKING OUTPUT APPEARS BLACK
This means no source textures were found for any channel. Make sure your Principled BSDF has Image Texture nodes connected to the Roughness, Metallic, or other relevant inputs. If textures are connected through reroute nodes or other intermediary nodes, they may not be detected. Connect Image Texture nodes directly to the BSDF inputs.
ATLAS TEXTURES SHOW BLEEDING AT EDGES
Increase the padding value. Switch from Auto to Manual padding mode and set 8–16 pixels. Also ensure your game engine is generating mipmaps — bleeding is most visible at lower mip levels.
"SELECT AT LEAST 2 MESH OBJECTS" ERROR ON ATLAS
The texture atlas requires at least 2 selected mesh objects with materials. Ensure you are selecting mesh objects (not empties, cameras, or lights) and that they have at least one material assigned.
------------------------------------------------------------
12. FAQ
Q: DOES MOBILEREADY WORK WITH BLENDER 4.X?
Yes. MobileReady is tested with Blender 3.0 through 4.4 and later. It uses stable API features compatible across all recent Blender versions.
Q: CAN I UNDO ALL OPERATIONS?
Yes. All MobileReady operators support Ctrl+Z undo. LOD generation, bone cleanup, atlas creation, and channel packing are all fully undoable. Note that generated images persist in Blender’s data until you save and reload.
Q: DOES THE DRAW CALL ESTIMATOR ACCOUNT FOR GPU INSTANCING?
The estimator focuses on material-based draw call counting, which is the primary cost model for mobile. It does not simulate GPU instancing, as instancing behavior depends heavily on the target engine’s implementation. The batching potential number gives you a reasonable approximation of best-case batching.
Q: ARE THE TEXTURE MEMORY SIZES ACCURATE FOR MY SPECIFIC DEVICE?
The sizes are mathematically accurate for the specified compression format. Actual runtime memory may vary slightly due to engine-specific texture headers, alignment requirements, and streaming tile overhead. The estimates are within 5% of real-world values for all supported formats.
Q: CAN I USE MOBILEREADY ALONGSIDE ATLASPRO?
Yes. The two addons are fully compatible. A typical workflow is to use MobileReady for analysis and optimization, then use AtlasPro for advanced atlas features like trim sheets and palette textures. MobileReady’s built-in atlas is designed for quick mobile optimization; AtlasPro offers more control for complex atlas setups.
Q: DOES BONE CLEANUP WORK WITH RIGIFY RIGS?
Yes. MobileReady operates on vertex groups regardless of the rig system. It works with Rigify, Auto-Rig Pro, Mixamo, and any custom rig. The cleanup only modifies vertex group weights; it does not alter the armature itself.
Q: WHAT IS THE RECOMMENDED TEXTURE RESOLUTION FOR MOBILE?
It depends on the asset type and target device tier. As a general guideline:
- Characters (hero) — 1024×1024 or 2048×2048
- Characters (NPC/enemy) — 512×512 or 1024×1024
- Props — 256×256 to 512×512
- Environment (tiling) — 512×512 or 1024×1024
- UI elements — as small as possible, often 128×128 to 256×256
Use the Texture Memory Calculator with resolution override to find the sweet spot for your VRAM budget.
Q: CAN I EXPORT OPTIMIZED ASSETS TO ANY ENGINE?
Yes. MobileReady generates standard Blender meshes, materials, and images. Export via FBX, glTF, or any format your engine supports. LOD naming conventions are compatible with Unity, Unreal Engine, and Godot.
Q: IS MOBILEREADY SUITABLE FOR NON-MOBILE OPTIMIZATION?
Absolutely. While the presets and budgets are tuned for mobile, the tools work for any platform. VR/AR projects, WebGL games, and even desktop titles benefit from polygon budgets, draw call estimation, and texture memory profiling. Simply adjust the budget values to match your target platform.
Q: CAN I USE MOBILEREADY IN A COMMERCIAL PROJECT?
Yes. The license permits use in any personal or commercial project. You may not redistribute the addon itself.
------------------------------------------------------------
MobileReady v1.0.0 · Created by DimaP · For Blender 3.0+
Discover more products like this
bone-weights performance polygon budget heatmap mobile optimization Channel Packing mobile-games Draw Calls game optimization LOD generation texture memory vram