Frame time 28ms on Samsung Galaxy A53 with a target of 16.6ms. Unity Profiler shows Camera.Render taking 18ms of that. The developer checks Frame Debugger — 340 draw calls, half of which are UI Canvas in Screen Space - Overlay mode with Rebuild every frame. We solve such problems in a day, but without precise diagnostics, iterations stretch into weeks. Our experience: over eight years in gamedev, more than 50 projects where we achieved stable 60 FPS on mid-range hardware.
Consulting on visual optimization is about diagnosing bottlenecks and providing a concrete action plan, not "use fewer polygons." We deliver not just a report, but also the understanding for your team to independently find and fix issues in the future. We guarantee a 2–3x reduction in bug-fix time after our consultation.
What problems does visual optimization solve?
CPU side. UnityEngine.Rendering.RenderPipeline.Render in Profiler — the first entry point. If it's >10ms on mobile with a simple scene, we dig deeper. Canvas.SendWillRenderCanvases — a flag for problematic UI. ShadowCaster.Render — too many shadows or excessive shadow distance. Animator.Update with many active animators in the scene — each active Animator consumes CPU regardless of visibility.
GPU side. Snapdragon Profiler for Android, Xcode GPU Frame Capture for iOS — more precise than Unity Profiler for GPU analysis. Fillrate overdraw visible via Unity Scene View in Overdraw mode — red zones indicate multiple redraws. Typical problem: particle systems with Additive blending draw 15–20 layers over the background — each layer is a full fillrate pass.
Memory. Memory Profiler package — not the built-in Profiler. A heap snapshot shows specific textures consuming VRAM. An uncompressed 4K texture = 64 MB VRAM, worse without mipmaps — when the object is far, GPU still reads full resolution.
Why Dynamic Batching fails on mobile?
Dynamic batching automatically batches meshes with the same material if they are <=900 vertices and 300 triangles. But if objects have different MaterialPropertyBlock values (e.g., color set via script), batching breaks. GPU Instancing is 3x more efficient on mobile GPUs because it reduces draw calls with a single rendering call for multiple objects. Migrating to GPU Instancing is one of the most effective changes.
What typical problems do we find?
- Canvas Rebuild every frame.
Canvas.willRenderCanvasesfires on any change to a child element — move, color, text. If a HUD updates a timer every second, the entire Canvas recalculates. Solution: split Canvas into static and dynamic parts. Animated elements on a separate Canvas. - Shadow Distance. On mobile platforms
Shadow Distance = 150(default) draws cascaded shadows for everything within 150 units of the camera. Real need — usually 20–40 units. Shadow render time difference is 3–4x. - MipMap Streaming not configured. Without
QualitySettings.streamingMipmapsActive = true, all textures load at full resolution on scene start. For mobiles with 3–4 GB RAM this is critical — a scene with 200 textures can consume 600 MB VRAM on start.
How does a visual optimization consultation proceed?
- Audit. We run the project on the target device with Profiler attached, capture several typical scenes. Analyze frame breakdown, draw calls, fillrate, memory snapshot. Result — a list of bottlenecks with estimated potential gain.
- Action plan. Prioritize by "fix complexity / performance gain" ratio. Low-hanging fruit (shadow distance, canvas split, texture compression) first. Architectural changes (GPU Instancing migration, LOD reorganization) with effort estimation.
- Implementation support. We implement changes ourselves or guide the team during self-fixing. For the latter: a written technical guide with specific settings and expected results.
What's included in a visual optimization consultation?
- Documentation: report with charts, Profiler and Frame Debugger screenshots, priority recommendations.
- Optimization code: ready shaders, scripts for Instancing setup, configs for Addressables.
- Access: temporary access to our demo stand with reference solutions.
- Training: 2-hour session analyzing typical errors and answering team questions.
- Support: consultations on arising difficulties for one month after the main phase.
We use a combined approach: first CPU profiling to find logical bottlenecks, then GPU detailing via RenderDoc and Snapdragon Profiler. This uncovers both obvious and hidden problems — for example, incorrect LOD setup or inefficient shader use.
Tools we use
| Tool | Purpose | Platform |
|---|---|---|
| Unity Profiler + Frame Debugger | CPU/GPU profiling, draw calls | Unity Editor |
| RenderDoc | Detailed GPU analysis | PC, consoles |
| Snapdragon Profiler | GPU profiling Android | Android (Adreno) |
| Xcode GPU Frame Capture | GPU profiling iOS | iOS (Metal) |
| Memory Profiler 1.1+ | VRAM analysis, textures | Unity Editor |
Timelines and savings
| Consultation type | Duration | Time saved for the team |
|---|---|---|
| Express audit + report (1 scene, 1 platform) | 1–3 days | up to 2 weeks of self-troubleshooting |
| Full performance audit + optimization plan | 5–10 days | up to 4 weeks in finding solutions |
| Audit + implementation of optimizations | 2–6 weeks | complete headache removal for FPS |
Average project saving — debugging budget reduction by 30–50% due to precise root cause identification. The consultation cost is fixed after initial analysis of the project and target platforms. Contact us to discuss your project and get a preliminary estimate. Order a consultation, and we will help solve performance issues.





