앱인토스 개발자센터 로고
Skip to content

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를 사용하면 모바일에 맞게 최적화하면서도 앱인토스의 브랜딩 스타일을 함께 구현할 수 있어요.
커스텀 렌더링 기능을 활용해 성능과 시각적 품질의 균형을 맞춰보세요.