URP 파이프라인 커스터마이징
앱인토스 Unity 게임에서 Universal Render Pipeline(URP)을 활용하여 최적화된 렌더링 파이프라인을 구축하는 방법을 다뤄요.
1. AppsInToss URP 설정
커스텀 URP 에셋 설정
c#
using UnityEngine;
using UnityEngine.Rendering.Universal;
[CreateAssetMenu(fileName = "AppsInTossURPAsset", menuName = "Rendering/AppsInToss URP Asset")]
public class AppsInTossURPAsset : UniversalRenderPipelineAsset
{
[Header("AppsInToss 최적화")]
public bool enableMobileOptimizations = true;
public bool enableBatteryOptimizations = true;
public RenderScale renderScale = RenderScale.Half;
public enum RenderScale
{
Quarter = 4,
Half = 2,
Full = 1
}
protected override ScriptableRenderer Create()
{
return new AppsInTossURPRenderer(this);
}
}커스텀 렌더러
c#
using UnityEngine;
using UnityEngine.Rendering.Universal;
public class AppsInTossURPRenderer : UniversalRenderer
{
private AppsInTossRenderFeature tossBrandingFeature;
private PerformanceOptimizerFeature performanceFeature;
public AppsInTossURPRenderer(AppsInTossURPAsset data) : base(data)
{
// AppsInToss 특화 렌더링 기능 추가
tossBrandingFeature = new AppsInTossRenderFeature();
performanceFeature = new PerformanceOptimizerFeature();
// 렌더링 기능 등록
rendererFeatures.Add(tossBrandingFeature);
rendererFeatures.Add(performanceFeature);
}
}앱인토스 브랜딩 렌더 기능
c#
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
public class AppsInTossRenderFeature : ScriptableRendererFeature
{
[System.Serializable]
public class Settings
{
public bool enableTossWatermark = true;
public Texture2D tossLogo;
public Vector2 logoPosition = new Vector2(0.9f, 0.1f);
public float logoScale = 0.1f;
}
public Settings settings = new Settings();
private AppsInTossRenderPass renderPass;
public override void Create()
{
renderPass = new AppsInTossRenderPass(settings);
renderPass.renderPassEvent = RenderPassEvent.AfterRenderingPostProcessing;
}
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
{
if (settings.enableTossWatermark && settings.tossLogo != null)
{
renderer.EnqueuePass(renderPass);
}
}
private class AppsInTossRenderPass : ScriptableRenderPass
{
private Settings settings;
private Material blitMaterial;
public AppsInTossRenderPass(Settings settings)
{
this.settings = settings;
// 워터마크 셰이더 머티리얼 생성
blitMaterial = new Material(Shader.Find("AppsInToss/TossWatermark"));
}
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
{
if (blitMaterial == null) return;
CommandBuffer cmd = CommandBufferPool.Get("AppsInToss Branding");
// 토스 로고 렌더링
blitMaterial.SetTexture("_TossLogo", settings.tossLogo);
blitMaterial.SetVector("_LogoPosition", settings.logoPosition);
blitMaterial.SetFloat("_LogoScale", settings.logoScale);
// 화면에 워터마크 렌더링
cmd.Blit(null, BuiltinRenderTextureType.CurrentActive, blitMaterial);
context.ExecuteCommandBuffer(cmd);
CommandBufferPool.Release(cmd);
}
}
}URP를 사용하면 모바일에 맞게 최적화하면서도 앱인토스의 브랜딩 스타일을 함께 구현할 수 있어요.
커스텀 렌더링 기능을 활용해 성능과 시각적 품질의 균형을 맞춰보세요.
