※ 이 게시글은 6월 15일 작성 되었습니다. (원본 링크)
14강 내용 정리
SAMPLER 매크로
이 매크로에 대해서 알아보자면, 크게 두가지로 나눌 수 있다.

예시 이미지(강의자료)
TRANSFORM_TEX
- 유니티 define 매크로 처리로 _BaseMap 키워드를 기준잡아 _ST로 자동 변환 되어 사용한다.
SAMPLER
- 샘플러에서 _BaseMap 이름을 기준으로 미리 약속된 처리를 자동으로 알아서 한다.
연결된, 혹은 분리된 텍스처와 샘플러

왼쪽 공은 컴바인 상태.
오른쪽 공은 세퍼레이티드. 분리되어 있는 방식이다.
양쪽 공은 서로 셰이더 불러오는 방식이 다르다.
왼쪽 공은 HLSL로 불러온다.샘플러와 텍스처가 하나로 묶여 있다.
오른쪽 공은 전처리 지시어로 매크로 되어 있고, 샘플러 따로 텍스처 따로 분리 되어 있다.
샘플러는 하나지만 텍스처는 두개다. 즉 하나의 샘플러에 두개의 텍스처를 같이 공유한다는 뜻이 된다.
하드웨어적인 문제가 있기 때문에 텍스처는 많이 사용할 수 있지만 샘플러는 그렇지 않다.
UV회전


Assets > CK_GGE > CustomShader > UV_Rotate
이 경로에 있는 씬을 열어 보면 이렇게 텍스처가 적용되어 있는 사각형 박스가 있다.

인스펙터 창에서 Base Map에 있는 타일링, 오프셋 등의 옵션을 조정하면 아래와 같은 UV회전을 해볼 수 있다.



자료에 있는 코드를 보면 어떤 식으로 변형이 되었는지 알 수 있다.
Diffuse Wrap (Toon Ramp) Lighting



여기에 사용된 코드를 보면, 주석에 나온 내용을 바탕으로 Half Lambert 방식을 사용한다.
또한 빛을 받는 반대편이 0이 되도록 설정해 주면 위와 같은 현상이 일어나게 된다.

텍스처에서 Wrap Mode 를 Clamp모드로 해놓는 것이 중요하다.
한마디로 압축하지 않는 것을 권장한다.
Ramp텍스처는 글로벌 텍스처로 사용하기도 한다.
Colorize

위와 같은 이펙트용 텍스처를 재활용하는데 유용하다.


이러한 코드를 사용하여 타일링 옵션들을 만들어 활용하면

위와 같은 표현을 할 수 있도록 만들어 준다.
굴절(Refraction)

굴절은 화면을 캡처해 Distortion을 적용시킨다.
매우 간단하지만 정확한 레이트레이싱(Ray Tracing)은 아니다.
레거시 - Grab Pass로 재질이 그려질 때 캡처한다.
URP - Geometry Render Queue를 2000번 한 시점에서 렌더 파이프라인이 화면을 캡쳐한다.
이후 _CameraOpaqueTexture 라는 글로벌 변수에 텍스처를 매 프레임 마다 설정하게 된다.

그럼으로 랜더 파이프라인 애셋에서 Opaque Texture 옵션을 체크 해야 캡처를 수행할 수 있다.
랜더 큐 또한 Geometry 이후로 설정 해 주어야 한다.
자유도는 줄어들지만 그만큼 퍼포먼스는 향상된다.
굴절과 반사의 조합 - URP

굴절과 반사를 동시에 사용하게 되면, 이런식으로 투명한 재질을 좀 더 기깔나게 멋지게 표현할 수 있게 된다.
하지만 반사를 하기 위해서는 반드시 Scene에 Reflection Probe 가 존재해야 한다.
정확히는 오브젝트가 Reflection Probe Box 영역 안에 들어와 있어야 반사를 사용할 수 있게 된다.

위 코드에 나온 주석 내용을 살펴보면,
화면 캡쳐용 이미지의 UV를 프레넬 부위에서 왜곡 시키고, UV로 캡쳐한 이미지의 색상을 불러온다.
또한 reflectAmount(반사 정도)는 프레넬 값을 얼마나 남겨둘지 결정한다.
프레넬 부위만을 반사시킨다.
참고로 레거시 같은 경우에는

버텍스 셰이더
프래그먼트 셰이더
위와 같은 환경 반사 코드를 사용한다.
Normal Map
노말맵을 사용하는 이유?

주로 픽셀 단위로 노말 벡터 값을 알기 위해서 사용한다.

RAPAPA DEV STORY (참고자료)
보간기를 거쳐 나온 노말 방향을 기준잡고 텍스처의 노말 방향만큼 추가로 회전한다.
탄젠트 벡터

파란 색 : Normal
빨간 색 : Tangent (U 방향)
초록 색 : BiTangent (V 방향) = BiNormal
탄젠트 공간 변환
노멀 맵은 평면에서의 x y z 방향 정보가 그려져 있는 벡터이다.
픽셀의 노멀 정보를 뜻한다.
오브젝트 공간이 아니고 탄젠트 공간이다.
오브젝트는 바뀌었어도 픽셀로부터 얻어낼 수 있는 오브젝트 정보는
노멀 벡터의 값이 똑같다.
탄젠트 공간이라고 하면 위치나 공간이 변하더라도 노멀 텍스처의 벡터는 늘 같다.
'교내 활동 > 게임그래픽엔진심화' 카테고리의 다른 글
게임그래픽엔진심화 13강 - 아웃라인 셰이더, BRDF, Lambert, Half Lamb···, Blinn Phong, Fresnel, 버텍스 라이팅, IBL, SH, Blending (2) | 2022.09.30 |
---|---|
게임그래픽엔진심화 12강 - 행렬, MVP 변환과 아웃라인 셰이더 (0) | 2022.09.30 |
게임그래픽엔진심화 11강 - 벡터, 기저벡터와 변환, 행렬 (1) | 2022.09.30 |
게임그래픽엔진심화 10강 - 함수와 구조체, 시멘틱, 전처리, 네이밍 관례, if분기, 좌표계 (1) | 2022.09.30 |
게임그래픽엔진심화 9강 - ShaderLab, 함수와 구조체 (1) | 2022.09.30 |