셰이더 코드는 참조하다보니 _MainTex_TexelSize; 라는 변수를 선언만 하고 바로 사용하는 모습들을 종종 보게 됨. 내장 변수인 것 같은데, 어떤 값을 담는지 설명은 검색해도 보이던데 어디서 어떻게 생성해서 값을 할당 해주는 것인지에 대한 내용이 잘 보이지 않더라.
일단 이 변수는 유니티 엔진 내부에서 생성 및 할당해주는 변수는 확실하고, 관련 설명은 아래 유니티 공식 문서에서 서술하고 있음.
주의해야 할 부분은, _MainTex_TexelSize 라는 이름의 변수명을 생성해주는 것이 아니고, {TextrueName}_TexelSize 라는 이름으로 생성해준다는 것. 셰이더를 작성할 때 보통 _MainTex 프로퍼티를 생성하기 때문에 결론적으로 _MainTex_TexelSize 라는 변수가 만들어졌던 것.
_MainTex_TexelSize 는 float4 프로퍼티로 생성되는데, 셰이더에서 선언할 때는 half4 타입으로 선언해도 되는 모양. 각 요소의 값은 아래와 같음.
x는 1.0/너비.
y는 1.0/높이.
z는 너비.
w는 높이.
즉 화면 가로x세로 해상도가 1024x768 이면
_MainTex_TexelSize.x 는 1/1024
_MainTex_TexelSize.y 는 1/768
Unity 공식 문서, Cg/HLSL 셰이더 프로퍼티 액세스 - 특수 텍스처 프로퍼티
관련 코드는 아래 GitHub 코드 참조. _TexelSize 외에도 몇몇 프로퍼티를 생성하고 있는 걸 확인.
internal override void ForeachHLSLProperty(Action<HLSLProperty> action)
{
HLSLDeclaration decl = (generatePropertyBlock ? HLSLDeclaration.UnityPerMaterial : HLSLDeclaration.Global);
action(new HLSLProperty(HLSLType._Texture2D, referenceName, HLSLDeclaration.Global));
action(new HLSLProperty(HLSLType._SamplerState, "sampler" + referenceName, HLSLDeclaration.Global));
action(new HLSLProperty(HLSLType._float4, referenceName + "_TexelSize", decl));
if (useTilingAndOffset)
{
action(new HLSLProperty(HLSLType._float4, referenceName + "_ST", decl));
}
}
게임 개발에 필수적인 내용을 담는 명서들을 소개합니다.
<유니티 교과서 개정6판>(유니티 최신 버전)
https://link.coupang.com/a/be3P0t
<대마왕의 유니티 URP 셰이더 그래프 스타트업>
https://link.coupang.com/a/bs8qyC
<리얼-타임 렌더링(REAL-TIME RENDERING) 4/e>
https://link.coupang.com/a/8VWas
<이득우의 게임 수학:39가지 예제로 배운다! 메타버스를 구성하는 게임 수학의 모든 것>
https://link.coupang.com/a/9BqLd
유니티 에셋 스토어 링크
https://assetstore.unity.com?aid=1011lvz7h
(링크를 통해 도서/에셋 구입시 일정액의 수수료를 지급받습니다.)
'유니티 엔진 (Unity Engine)' 카테고리의 다른 글
[Unity] 유니티 엔진으로 툴 제작 시 에디터 클릭 이벤트 후킹하기 (0) | 2024.03.21 |
---|---|
[Unity] Texture2D와 RenderTexture의 핵심 차이 (2) | 2024.03.20 |
[Unity] 최초 실행되는 UnityMain 함수 만들기 (RuntimeInitializeOnLoadMethod 상세 순서 설명) (0) | 2024.03.19 |
[Unity] 셰이더 처리 후 텍스처 테두리가 번져 보이는 문제 (0) | 2024.03.19 |
[Unity] 간단한 가우시안 블러(GaussianBlur) 셰이더 코드 (0) | 2024.03.14 |
[Unity] 유니티로 Texture 를 복사하거나 Shader로 변형하는 방법 (0) | 2024.03.14 |
[Unity] Dithering 셰이더 함수, Dither 노드, Dither thresholds array (0) | 2024.03.13 |