Consulting on Visual Graphics Optimization Issues
Frame time 28ms on Samsung Galaxy A53 with target 16.6ms. Unity Profiler shows Camera.Render takes 18ms of them. Developer looks into Frame Debugger — 340 draw calls, half of which is UI Canvas in Screen Space - Overlay mode with Rebuild every frame. This is solvable in a day. But without understanding exactly where the loss is — iterations take weeks.
Consulting on visual optimization — this is diagnosing bottlenecks and a plan of specific actions, not "use fewer polygons".
What to profile and where to look
CPU side. UnityEngine.Rendering.RenderPipeline.Render in Profiler — first entry point. If there > 10ms on mobile with simple scene — dig further. Canvas.SendWillRenderCanvases — sign of problematic UI. ShadowCaster.Render — too many shadows or shadow distance is too large. Animator.Update with large number of active animators in scene — each active Animator uses CPU independent 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 in Unity Scene View in Overdraw mode — red zones are multiple redraws. Typical problem: particle systems with Additive blending draw 15-20 layers over background — each layer is full fillrate pass.
Memory. Memory Profiler package — not built-in Profiler. Heap snapshot shows specific textures taking VRAM. Uncompressed 4K texture = 64 MB VRAM, without mipmaps even worse — GPU still reads full resolution when object is far.
Typical findings during audit
Dynamic batching doesn't work. Unity automatically batches meshes with same material if they are ≤ 900 vertices and 300 triangles. But if objects have different MaterialPropertyBlock values (e.g., color through script) — batching breaks. Solution: GPU Instancing + Instanced property through shader UNITY_INSTANCING_BUFFER.
Canvas Rebuild every frame. Canvas.willRenderCanvases fires on any child element change — offset, color, text. If HUD updates timer every second, entire Canvas recalculates. Solution: split Canvas into static and dynamic parts. Animated elements on separate Canvas — breaking parent-child hierarchy is not critical for visuals, but removes rebuild.
Shadow Distance. On mobile platforms Shadow Distance = 150 (default) renders cascaded shadows for everything within 150 units from camera. On top-down or isometric view this is the entire visible level. Actual need — usually 20-40 units. Difference in shadow render time — 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 — scene with 200 textures can take 600 MB VRAM on startup.
How consultation proceeds
First stage: audit. Launch project on target device with Profiler attached, record several characteristic scenes. Analyze frame breakdown, draw calls, fillrate, memory snapshot. Result — list of bottlenecks with potential improvement estimate.
Second stage: action plan. Prioritize by "fix complexity / performance gain" ratio. Quick wins (shadow distance, canvas split, texture compression) — first. Architectural changes (GPU Instancing transition, LOD reorganization) — with effort estimate.
Third stage: implementation support. Can implement ourselves or consult team during self-fixing. For second option: written technical guide with specific settings and expected results.
Tools we use
Unity Profiler, Memory Profiler 1.1+, Frame Debugger — basic set. RenderDoc for detailed GPU analysis on PC. Snapdragon Profiler, ARM Mali Graphics Debugger — for Android with respective GPU. Xcode GPU Frame Capture + Metal Performance HUD — for iOS. Stats window in Game View for quick batch and vertex assessment.
Timeline
| Consultation Type | Timeline |
|---|---|
| Express audit + report (1 scene, 1 platform) | 1–3 days |
| Full performance audit + optimization plan | 5–10 days |
| Audit + optimization implementation | 2–6 weeks |
Cost is calculated after initial project analysis and target platforms.





