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.comhttps://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 >
<Common.hlsl>
< UnityInput.hlsl >
< Unlit.shader >
๋ฌด๋ฃ ChatGPT๋๊ป ๋ฌธ์ํ์๋๋ "UNITY_SETUP_INSTANCE_ID ๊ฐ ์ฌ์ ์ ์ ์์๋์ด์๋๊ฑฐ ์๋๋?" ๋ผ๊ณ ํ์๋๋ฐ....
์๋ ๋ Catlike Coding๋๊ป์ ์ฃผ์ ์์ ๋ฅผ ๋ฌด์ง์ฑ ๋ณต๋ถํ๊ฑฐ๋ผ์ ๊ทธ๋ฐ ํจ์ ๋ชจ๋ฅธ๋ค๊ณ ใ
ใ
ใ
ใ
ใ
ใ
ใ
ํ... ์ด๋ฒ๊ปจ์ ๊ทธ๋ฅ ์์ด๋ ํฌ๊ธฐํด์ผํ๋....ใ
ใ
๋งคํฌ๋ก ๋ค์ ;๋ถ์ผ ํ์ ์์ด
์๋ณธ์ด ๊ทธ๋ ๊ฒ ๋์ด์๊ณ ๋๋ฆ ๊ตฌ์กฐ์ฒด ์ ์ธ๊ฐ์๋ณด์ฌ์ ํ์ํ์ค์์๋๋ฐ ๋นผ๋๊น ๋ฐ๋ก ๋๋ค์ ๊ฐ์ฌํฉ๋๋ค ใ ใ
UNITY_SETUP_INSTANCE_ID(input); ์ด๊ฑฐ struct์ ๋ฃ์ํ์์๋๊ฑฐ ์๋? UNITY_VERTEX_INPUT_INSTANCE_ID<--์ด๊ฑฐ ์์ผ๋๊น ๋ ํ ๋ฐ. ๋นผ๋ด ํ๋ฒ
์ค~~ ๋นผ๋ ๋์ํ๋๊ฒ ๊ฐ๋ค์. ๋ฌด์ง์ฑ๋ณต๋ถ์๋ ํ๊ณ๊ฐ ์๊ตฐ์ ใ ใ ์๋ ค์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์์์ ์ผ๋ก ์ปดํ์ผ ํ์์ struct๊ฐ ๊ฐ์ง Input ๊ฐ์ ์ ์๊ฐ ์์์
์์ด๋ 1๋ ๋ชจ๋ฅด๋๋ฐ ๊ทธ๋ฅ ๋ง 'unlit์์ด๋์๋ค๊ฐ directional light ๊ทธ๋ฆผ์๋ง ์ถ๊ฐํ๊ฒ ์ด' ๋ผ๋ ์ผ๋ ์ผ๋ก ์ฝ๋๋ชฝํค์ง ํ๋ ์ค์ด๋ผ ๊ทธ๋ฐ ์๊ฐ์ ํ๋ฒ๋ ์ํด๋ดค๋ค์ ใ ใ ใ ใ ใ .....hlsl์ฑ ๋น๋ ค์ ํ๋ฒ ๋ด์ผ๊ฒ ๋ค์..ใ ใ