Unity URP Skill
Comprehensive Universal Render Pipeline configuration and customization for Unity projects.
Overview
This skill provides capabilities for configuring and extending Unity's Universal Render Pipeline, including shader development, lighting configuration, post-processing setup, and custom render feature implementation.
Capabilities
Pipeline Configuration
- Configure URP Asset settings for quality tiers
- Set up renderer features and passes
- Configure global rendering settings
- Manage pipeline asset variants
Shader Development
- Create URP-compatible shaders using Shader Graph
- Write custom HLSL shaders for URP
- Implement shader variants and keywords
- Optimize shaders for target platforms
Lighting Setup
- Configure real-time and baked lighting
- Set up reflection probes and light probes
- Implement screen space ambient occlusion
- Configure shadows and cascades
Post-Processing
- Set up post-processing volume profiles
- Configure bloom, color grading, vignette
- Implement custom post-processing effects
- Manage volume blending and priorities
Render Features
- Create custom render features
- Implement scriptable render passes
- Handle render targets and buffers
- Integrate with existing pipeline
Prerequisites
- Unity 2021.3+ with URP package
- URP package installed via Package Manager
- Basic understanding of rendering concepts
Usage Patterns
Creating a URP Shader Graph
1. Create new Shader Graph (Create > Shader Graph > URP > Lit Shader Graph)
2. Configure surface options (opaque/transparent)
3. Add nodes for desired effect
4. Connect to master stack outputs
5. Save and apply to material
Custom Render Feature
public class OutlineRenderFeature : ScriptableRendererFeature
{
[System.Serializable]
public class Settings
{
public RenderPassEvent renderPassEvent = RenderPassEvent.AfterRenderingOpaques;
public Material outlineMaterial;
}
public Settings settings = new Settings();
private OutlineRenderPass renderPass;
public override void Create()
{
renderPass = new OutlineRenderPass(settings);
}
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
{
renderer.EnqueuePass(renderPass);
}
}
Integration with Babysitter SDK
const urpSetupTask = defineTask({
name: 'urp-configuration',
description: 'Configure URP settings',
inputs: {
qualityTier: { type: 'string', required: true },
features: { type: 'array', required: true }
},
async run(inputs, taskCtx) {
return {
kind: 'skill',
title: 'Configure URP pipeline',
skill: {
name: 'unity-urp',
context: {
operation: 'configure_pipeline',
qualityTier: inputs.qualityTier,
features: inputs.features
}
}
};
}
});
Best Practices
- Create quality tier variants for different platforms
- Use Shader Graph for maintainable shaders
- Profile render passes for performance
- Use SRP Batcher compatible shaders
- Minimize overdraw and fill rate