# Part 18 | 큐브맵 리플렉션 (Cubemap Refelction)

실시간 주변 반사는 무겁다.\
하지만 반짝반짝한 금속을 표현하기 위해선 주변 반사가 필요할 때가 있다.

그래서 실시간 주변 반사가 어려운 상황에선 큐브맵이라는 환경 텍스쳐를 이용해서\
주변 이미지를 텍스쳐로 미리 만들어 놓고, 이를 오브젝트에 씌우는 방식을 많이 사용한다.

## 01 큐브맵(Cubemap)을 적용해 봅시다

![](https://velog.velcdn.com/images/biomatrix117/post/5512c3ce-f095-4c4e-81df-40c499961074/image.png)

* HDRI 이미지의 Texture Shape를 Cube로 바꾼다
* Cubemap을 Fragment에 그대로 연결시킨다
* 노말맵을 적용하고 LOD를 조절하여 흐리게 만든다

간단하게 주변 반사를 적용할 수 있다.

LOD를 높여서 극도로 흐리게 만들면 거칠어진 표면처럼 보이게 되고,\
마치 Diffuse Reflection과 Ambient Refelction이 적용된 이미지처럼 보이기도 한다. 하지만 이미 Baked GI가 스카이박스의 이미지를 받아 더 좋은 퀄리티의 Ambient로 넣어주고 있기 때문에, 그럴 필요 없다.

> **Mipmap?**\
> 텍스쳐가 입혀진 오브젝트가 멀어졌을 때 작은 사이즈의 텍스쳐로 바꿔치기 해서 연산 부하를 줄이고 화면을 부드럽게 만들어주는\
> **여러 사이즈별로 미리 준비되어 있는 텍스쳐**이다. 게임에서 사용되는 텍스쳐는 UI나 2D 게임용 스프라이트 같은 경우를 제외하고는 기본적으로 Mipmap을 갖고 있다. 텍스쳐 미리보기 창 우측 상단의 Mipmap 조절자로 확인할 수 있다. 없으면 Mipmap 없는 것.

## 02 커스텀 라이트로 금속 재질의 반사 만들기

![](https://velog.velcdn.com/images/biomatrix117/post/1dcfd01f-bab3-455f-bf2e-2906d704778e/image.png)

금속의 반사는 어느 각도에서나 대략 일정하고, Diffuse의 값은 없고 Specular 값만 있으니\
반사를 텍스쳐와 곱해주는 것 만으로 충분할 것이다.

## 03 커스텀 라이트로 비금속 재질의 반사 만들기

소화기는 페인트로 덮여있기 때문에 비금속처럼 반사한다.\
비금속 재질은 Diffuse가 Base 컬러와 곱해지고, Specular는 단색(빛의 색)으로 더해지는 구조.\
또한, Fresnel에 따라 면이 기울어질수록 반사가 심해진다.

![](https://velog.velcdn.com/images/biomatrix117/post/d04fe28f-049e-4fa2-a45b-fd83f4519628/image.png)

* Labmbert로 Diffuse 만든다
* Baked GI로 Ambient 가져온다
* Blinn Phong으로 Specular 만든다
* Lambert와 Baked GI에 텍스쳐 곱해준다
* 노말맵 기반으로 큐브맵을 더한다

결과물이 이상한 이유 : 반사는 스페큘러이므로 Blinn Phong처럼 최종 결과물에 더해주는게 맞지만, Fresnel을 고려 안했기 때문.\
Cubemap Reflection 결과에 Fresnel Effect를 곱하고 LOD를 높여주면 더 자연스러워진다.

![](https://velog.velcdn.com/images/biomatrix117/post/c5dfcb2e-9529-440e-a509-2990318e156a/image.png)

출처 : <https://gamedevforever.com/35>

> **Troubleshooting** ![](https://velog.velcdn.com/images/biomatrix117/post/f93577d2-76d0-47dc-9796-9e31a54081db/image.png)

1. 소화기의 그림자의 면적이 책과 다르게 너무 좁았다. **Directional Light의 각도**가 달라서 그랬던 거였다.
2. 소화기의 그림자가 환경광에 의해 밝혀져버렸다. 예제 파일을 import해서 확인해봐도 같은 문제가 발생했다.\
   프로젝트를 새로 파서 예제를 다시 import하고 테스트해보니, 환경광 때문에 그림자가 지워지는 현상이 발생하긴 했는데, 그림자가 훨씬 부드럽게 보였다. 노드를 복붙해봤지만 소용 없었다. Global Volume > Tonmapping > Mode > **ACES으로 변경**했더니 그림자가 부드러워졌다. 일단 버전 문제로 간주하고 건너뛰었는데, 이후 내용을 진행하다보니 단순히 **큐브맵이 달라서 그랬던 거**였다는 걸 알게 됐다. 나무 있는 HDRI 파일이 2개 있었다. 나는 그 중에서 햇볕이 강한 (환경광이 강한) 큐브맵을 사용했던 것.

## 04 금속과 비금속을 구분하여 완성해 봅시다

![](https://velog.velcdn.com/images/biomatrix117/post/57825987-46f2-4466-9384-c34a3068fb71/image.png)

* 노말맵과 base color를 기반으로 큐브맵을 반사하는 결과를
* Metalic 맵을 이용해 기존의 비금속 결과와 Lerp한다


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lazyartisan.gitbook.io/note/main-page/books/urp/part-18-or-cubemap-refelction.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
