Catlike coding์˜ Custom SRP ๊ฐ•์ขŒ 2๋ฒˆ์งธ Draw Call ์˜ GPU Instancing๋ถ€๋ถ„์„ ์—ด์‹ฌํžˆ ๋”ฐ๋ผํ•ด๋ณด๊ณ  ์žˆ๋Š”๋ฐ ์˜ˆ์ œ๋ฅผ ๋ณต๋ถ™ํ•˜๋Š”๋ฐ๋„ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋„ค์š”;;

HLSL ๊ณ ์ˆ˜๋‹˜์ด๋‚˜ Catlike Coding์˜ Custom SRP๊ฐ•์ขŒ๋กœ ๊ณต๋ถ€ํ•ด๋ณด์‹ ๋ถ„๋“ค์˜ ์ง€๋„๋ฅผ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Catlike coding์€ ์™„์„ฑ๋œ ์˜ˆ์ œํŒŒ์ผ์„ ์ œ๊ณตํ•ด์ฃผ์ง€ ์•Š์•„์„œ ๋‹ต๋‹ตํ•˜๋„ค์š”. ํ˜น์‹œ ๋” ์ข‹์€ ๊ณต๋ถ€์ž๋ฃŒ ์žˆ์œผ์‹œ๋ฉด ์ถ”์ฒœ์ข€ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.


ํ˜„์žฌ ์•„๋ž˜ draw call๊ฐ•์ขŒ์˜ 2.3 GPU Instancing ๊นŒ์ง€ ๋ณต๋ถ™ํ•œ ์ƒํƒœ์ด๊ตฌ์š”

https://catlikecoding.com/unity/tutorials/custom-srp/draw-calls/

Draw CallsA Unity Custom SRP tutorial about taking control of draw calls with custom shaders and batching.catlikecoding.com



https://catlikecoding.com/unity/tutorials/custom-srp/draw-calls/


์—๋Ÿฌ ๋ฉ”์„ธ์ง€๋Š”

===============================================

Shader error in 'Custom RP/Unlit': syntax error: unexpected token ';' at RP/Shader/UnlitPass.hlsl(10) (on d3d11)

Compiling Subshader: 0, Pass: <Unnamed Pass 0>, Fragment program with <no keywords>
Platform defines: SHADER_API_DESKTOP UNITY_ENABLE_DETAIL_NORMALMAP UNITY_ENABLE_REFLECTION_BUFFERS UNITY_LIGHTMAP_FULL_HDR UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BLENDING UNITY_SPECCUBE_BOX_PROJECTION UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS
Disabled keywords: INSTANCING_ON SHADER_API_GLES30 UNITY_ASTC_NORMALMAP_ENCODING UNITY_COLORSPACE_GAMMA UNITY_ENABLE_NATIVE_SHADOW_LOOKUPS UNITY_FRAMEBUFFER_FETCH_AVAILABLE UNITY_HALF_PRECISION_FRAGMENT_SHADER_REGISTRS UNITY_HARDWARE_TIER1 UNITY_HARDWARE_TIER2 UNITY_HARDWARE_TIER3 UNITY_LIGHTMAP_DLDR_ENCODING UNITY_LIGHTMAP_RGBM_ENCODING UNITY_METAL_SHADOWS_USE_POINT_FILTERING UNITY_NO_DXT5nm UNITY_NO_FULL_STANDARD_SHADER UNITY_NO_SCREENSPACE_SHADOWS UNITY_PBS_USE_BRDF2 UNITY_PBS_USE_BRDF3 UNITY_PRETRANSFORM_TO_DISPLAY_ORIENTATION UNITY_UNIFIED_SHADER_PRECISION_MODEL UNITY_VIRTUAL_TEXTURING

===============================================

ํ•ด๋‹น ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค .


< UnlitPass.hlsl >

#ifndef CUSTOM_UNLIT_PASS_INCLUDED
#define CUSTOM_UNLIT_PASS_INCLUDED
#include "../ShaderLibrary/Common.hlsl"

UNITY_INSTANCING_BUFFER_START(UnityPerMaterial)
UNITY_DEFINE_INSTANCED_PROP(float4, _BaseColor)
UNITY_INSTANCING_BUFFER_END(UnityPerMaterial)

struct Attributes {
UNITY_SETUP_INSTANCE_ID(input); // <- ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๋ถ€๋ถ„
float3 positionOS : POSITION;
UNITY_VERTEX_INPUT_INSTANCE_ID
};

struct Varyings {
float4 positionCS : SV_POSITION;
UNITY_VERTEX_INPUT_INSTANCE_ID
};

Varyings UnlitPassVertex (Attributes input) { //: SV_POSITION {
Varyings output;
UNITY_SETUP_INSTANCE_ID(input);
UNITY_TRANSFER_INSTANCE_ID(input, output);
float3 positionWS = TransformObjectToWorld(input.positionOS);
output.positionCS = TransformWorldToHClip(positionWS);
return output;
}

float4 UnlitPassFragment (Varyings input) : SV_TARGET {
UNITY_SETUP_INSTANCE_ID(input);
return UNITY_ACCESS_INSTANCED_PROP(UnityPerMaterial, _BaseColor);
}

#endif


<Common.hlsl>


#ifndef CUSTOM_COMMON_INCLUDED
#define CUSTOM_COMMON_INCLUDED

#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"

#define UNITY_MATRIX_M unity_ObjectToWorld

#define UNITY_MATRIX_I_M unity_WorldToObject
#define UNITY_MATRIX_V unity_MatrixV
#define UNITY_MATRIX_VP unity_MatrixVP
#define UNITY_MATRIX_P glstate_matrix_projection

#include "UnityInput.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/SpaceTransforms.hlsl"
#endif


< UnityInput.hlsl >

#ifndef CUSTOM_UNITY_INPUT_INCLUDED
#define CUSTOM_UNITY_INPUT_INCLUDED

CBUFFER_START(UnityPerDraw)
float4x4 unity_ObjectToWorld;
float4x4 unity_WorldToObject;
float4 unity_LODFade;
real4 unity_WorldTransformParams;

CBUFFER_END
float4x4 unity_MatrixVP;
float4x4 unity_MatrixV;
float4x4 glstate_matrix_projection;

float4x4 UNITY_PREV_MATRIX_M;
float4x4 UNITY_PREV_MATRIX_I_M;
#endif


< Unlit.shader >

Shader "Custom RP/Unlit"
{
Properties {
_BaseColor("Color", Color) = (1.0, 1.0, 1.0, 1.0)
}
SubShader {
Pass {
HLSLPROGRAM
#pragma multi_compile_instancing
#pragma vertex UnlitPassVertex
#pragma fragment UnlitPassFragment
#include "UnlitPass.hlsl"
ENDHLSL
}
}
}

๋ฌด๋ฃŒ ChatGPT๋‹˜๊ป˜ ๋ฌธ์˜ํ•˜์˜€๋”๋‹ˆ "UNITY_SETUP_INSTANCE_ID ๊ฐ€ ์‚ฌ์ „์— ์ •์˜์•ˆ๋˜์–ด์žˆ๋Š”๊ฑฐ ์•„๋‹ˆ๋ƒ?" ๋ผ๊ณ  ํ•˜์‹œ๋Š”๋ฐ....

์•„๋‹ˆ ๋‚œ Catlike Coding๋‹˜๊ป˜์„œ ์ฃผ์‹  ์˜ˆ์ œ๋ฅผ ๋ฌด์ง€์„ฑ ๋ณต๋ถ™ํ•œ๊ฑฐ๋ผ์„œ ๊ทธ๋Ÿฐ ํ•จ์ˆ˜ ๋ชจ๋ฅธ๋‹ค๊ณ  ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ ใ… ใ… 


ํ•˜... ์ด๋ฒˆ๊ปจ์€ ๊ทธ๋ƒฅ ์‰์ด๋” ํฌ๊ธฐํ•ด์•ผํ•˜๋‚˜....ใ… ใ