본문 바로가기

유니티엔진/유니티쉐이더

SRP Batcher

안녕하세요 새벽언덕입니다. 

SRP Batcher를 사용하는 방법을 안내드리겠습니다.

일반적으로 쉐이더를 처음 생성하면, SRP Batcher부분이 not compatible라고 되어있습니다.

이것을 아래와같이 바꿔주고자하는데요

이것을 하는 방법은 아래와 같습니다.

쉐이더의 Properties 변수부분을 CBUFFER로 감싸주면됩니다.

CBUFFER_START(UnityPerMaterial)

float4 _MainTex_ST;
float4 _MainColor;

CBUFFER_END

 

주의사항입니다.

1. Properties에 선언한 모든 변수를 CBUFFER로 감싸줘야합니다.

2. Pass를 여러개 쓸경우, 해당 Pass에서 변수를 쓰지않더라도, Properties의 모든 변수를 CBUFFER로 감싸줘야합니다.

3. 전역변수를 쓸경우에는 전역변수는 Properties에 없으므로 CBUFFER안에 넣지 않습니다.

 

아래는 예제코드입니다.

Shader "Unlit/SRP_Batcher"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _MainColor ("MainColor", Color) = (1, 1, 1, 1)
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            // make fog work
            #pragma multi_compile_fog

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                UNITY_FOG_COORDS(1)
                float4 vertex : SV_POSITION;
            };

            CBUFFER_START(UnityPerMaterial)

            float4 _MainTex_ST;
            float4 _MainColor;

            CBUFFER_END

            sampler2D _MainTex;

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                UNITY_TRANSFER_FOG(o,o.vertex);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                // sample the texture
                fixed4 col = tex2D(_MainTex, i.uv) * _MainColor;
                // apply fog
                UNITY_APPLY_FOG(i.fogCoord, col);
                return col;
            }
            ENDCG
        }
    }
}

 

참고링크 : SRP Batcher에대해서

https://blog.unity.com/kr/technology/srp-batcher-speed-up-your-rendering

'유니티엔진 > 유니티쉐이더' 카테고리의 다른 글

Shader의 Struct, SubShader, Pragma  (0) 2022.02.23
Properties & Shader 경로지정  (0) 2022.02.16
UV와 Sampler2D  (0) 2022.02.09
쉐이더의 Culling, Queue, RenderType  (0) 2022.01.26
01 - 쉐이더란?  (0) 2021.09.17