i spent six weeks optimising my unity 6 urp renders with ai tools and here is every setting change that actually made a difference
My Unity 6 URP game was running at 47 FPS on my target Android device. My goal was 60. I spent six weeks using Muse Chat, Cursor, and Claude to systematically identify and fix every performance problem in my rendering pipeline. This is the complete honest account of every change I made, which AI tool helped me find each one, and the final frame rate I reached.
Unity
Unity 6 LTS with Universal Render Pipeline, Personal plan free under $100k revenue
unity.com
Cursor
Used to write URP renderer feature scripts and optimisation code, Pro plan $20 per month
cursor.sh
Claude
Used for performance profiling interpretation and URP architecture decisions, Pro plan $20 per month
claude.ai
Marcus Webb
June 28, 2026
Starting point: 47 average FPS on a mid-range Android device (Snapdragon 778G, Adreno 642L). Target: 60 stable FPS. Game type: 3D third-person action game with outdoor environments. URP version: the one that ships with Unity 6 LTS. Six weeks of optimisation sessions. Final result: 61 average FPS with 58 minimum FPS across all test scenes. Every change documented below with which AI tool surfaced the issue.
Why I Used AI for URP Optimisation Instead of Just Reading Documentation
URP optimisation has two problems. First, the settings are spread across multiple places: the URP Renderer asset, the Camera component, individual material settings, Quality Settings, and the Frame Debugger output. Second, the correct settings depend heavily on your specific project characteristics and target hardware. Generic documentation tells you what each setting does. It does not tell you which of the twenty possible changes will have the most impact on your specific scene. I used AI tools to compress the diagnostic step and prioritise changes rather than working through every possible optimisation blindly.
Week One: Profiling the Actual Problem
- I captured a Unity Profiler session of two minutes of typical gameplay and exported it. Then I pasted the profiler summary into Claude and asked: based on this Unity 6 URP profiler output for a 3D Android game, what are the three most likely GPU bottlenecks and what settings should I investigate first. Claude identified the shadow cascades as the most expensive GPU operation based on the GPU.Time breakdown, recommended checking Realtime Shadows quality settings and the shadow distance.
- I took Claude's recommendations to Muse Chat and asked specifically: in Unity 6 URP for Android, what is the recommended shadow distance and shadow cascade configuration for a mid-range mobile target. Muse Chat gave me the Unity 6 URP specific settings path and recommended values. This was version accurate where Claude's response had been slightly generic.
- Cursor helped me write a quick diagnostic script that logged FPS, draw call count, and shadow caster count to the console during play mode. Having these numbers per scene helped me identify which specific scene was the primary performance problem. The diagnostic script took Cursor five minutes to generate and would have taken me 30 minutes without it.
The Changes That Made the Biggest Difference
- Shadow cascades from 4 to 2, shadow distance from 150 to 60: Single largest performance change. FPS increased from 47 to 54 with this change alone. Muse Chat identified the correct URP setting path: URP Asset > Shadows > Cascade Count and Max Distance. The visual quality change was minimal at the target camera height and distance.
- Render Scale from 1.0 to 0.85: Rendering at 85 percent of native resolution then upscaling. On the Adreno 642L this produced a 4 FPS improvement with very low visible quality degradation on a 6 inch screen. Muse Chat confirmed this was the correct render scale setting in Unity 6 URP and noted it was a different location from older URP versions.
- Disabling Screen Space Ambient Occlusion on mobile build: SSAO adds significant GPU cost on mobile hardware for a visual improvement that is subtle at normal camera distances. Cursor helped me write a platform-specific renderer feature toggle that disables SSAO on Android builds while keeping it on PC builds. The script used Application.platform in the renderer feature OnCameraSetup method.
- Draw call batching: Cursor searched my project for every Renderer component not using GPU instancing and generated a batch fix that added instancing to all eligible static materials. Draw calls dropped from 340 to 180 on the worst scene.
- LOD Group setup: Several large environment assets had no LOD groups configured. Claude explained the LOD percentage threshold values appropriate for third-person camera distances. Cursor generated a utility script that added LOD Group components with sensible thresholds to a list of specified prefabs.
The Code That Fixed the Platform-Specific SSAO Toggle
// MobileRendererOptimiser.cs
// Disables expensive renderer features on mobile builds
// Attach to a persistent GameObject or call from a GameManager
// Written with Cursor Pro using project context
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
public class MobileRendererOptimiser : MonoBehaviour
{
[Header("Features to disable on mobile")]
public bool disableSSAO = true;
public bool disableBloom = false; // Keep bloom, it is cheap on URP
public bool reduceRenderScale = true;
[Range(0.5f, 1.0f)]
public float mobileRenderScale = 0.85f;
void Awake()
{
// Only apply mobile optimisations on actual mobile devices
// Not in Editor even when targeting Android
bool isMobile = Application.platform == RuntimePlatform.Android
|| Application.platform == RuntimePlatform.IPhonePlayer;
if (!isMobile) return;
ApplyMobileOptimisations();
}
private void ApplyMobileOptimisations()
{
// Get the current URP renderer data
var urpAsset = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset;
if (urpAsset == null)
{
Debug.LogWarning("URP asset not found. Mobile optimisations not applied.");
return;
}
// Reduce render scale
if (reduceRenderScale)
{
urpAsset.renderScale = mobileRenderScale;
Debug.Log($"Mobile render scale set to {mobileRenderScale}");
}
// Disable SSAO via Volume component if present in scene
if (disableSSAO)
{
var volume = FindFirstObjectByType<Volume>(); // Unity 6 API
if (volume != null && volume.profile.TryGet<ScreenSpaceAmbientOcclusion>(out var ssao))
{
ssao.active = false;
Debug.Log("SSAO disabled for mobile.");
}
}
// Reduce shadow distance for mobile
// This supplements the URP asset setting with runtime adjustment
UniversalRenderPipeline.asset.shadowDistance = 60f;
UniversalRenderPipeline.asset.shadowCascadeCount = 2;
Debug.Log("Mobile rendering optimisations applied.");
}
}What the AI Tools Each Contributed
- Claude: profiler interpretation and bottleneck prioritisation. Pasting profiler output into Claude produced an accurate priority ordering of what to fix first. This compressed the diagnostic step from days to hours.
- Muse Chat: Unity 6 URP specific setting locations and recommended values. Every URP setting path I needed was confirmed through Muse Chat with Unity 6 accuracy. Without Muse Chat I was cross-referencing Unity 2022 URP documentation and finding settings in wrong locations.
- Cursor: writing diagnostic scripts, the platform-specific optimisation script, the LOD setup utility, and the draw call analysis. Project context meant Cursor referenced my actual renderer and material names correctly.
- Frame Debugger (built into Unity, free): the AI tools pointed me at what to look for but the Frame Debugger showed the actual draw call cost per operation. Used this in every session alongside the AI tools.
Mistakes in Six Weeks of URP Optimisation
- Changing multiple settings at once and not knowing which change caused improvement: made four URP settings changes in one session on week two and saw a 6 FPS improvement without knowing which change drove it. Reverted to the starting point of that session and made one change at a time. The Frame Debugger and Cursor diagnostic script both require one-change-at-a-time methodology to produce useful data.
- Asking Claude about URP without specifying Unity 6: Claude's first profiler analysis response referenced some URP settings from Unity 2022. Adding Unity 6 LTS and Android target to every prompt produced consistently version-accurate responses.
- Optimising scenes that were not the bottleneck: spent day four of week one optimising a loading screen that ran at 120 FPS. The outdoor gameplay scene was the actual bottleneck. Profiler first, optimise the slowest scene first.
- Disabling Bloom without testing the visual impact first: bloom adds visual polish that players notice when it is removed even if they cannot name what changed. Kept bloom enabled after a playtester specifically mentioned the game looked slightly flat in a test build where I had disabled it.
Final Thoughts
Six weeks from 47 FPS to 61 FPS average on mid-range Android hardware. The AI tools compressed the diagnostic and research phases significantly. Claude interpreted profiler output in minutes. Muse Chat found the correct Unity 6 URP settings paths that I would have spent hours locating manually. Cursor wrote the platform-specific optimisation code in minutes. The actual performance work, deciding what to change and how much to change it, still required my own judgment about the visual quality trade-offs. AI tools made the research and implementation faster. The decisions remained mine.