# Part 14 | Fresnel(프레넬)

## 01 Fresnel(프레넬) 이란?

모든 일반적인 사물은 기울어질수록 심하게 반사가 된다.\
즉, **시선 벡터(카메라 벡터)와 노말 벡터가 90도에 가까워질수록 반사가 심해진다.**

금속 재질은 비금속 재질보다 확연하게 반사율이 다르다.\
이런 반사 공식을 Fresnel(프레넬)이라고 부른다.

역광이 있다거나, 털이나 반투명의 재질이라거나 하면 프레넬 현상의 정도가 달라진다.\
사진에서는 이것을 림 라이트(Rim Light)라 부른다. (같은 개념은 아니지만, 림 라이트를 프레넬로 많이 만든다)

림 라이트 게임 사용 예시

* 배경과 캐릭터의 분리나 강조
* 선택되었을 때나 특이한 상태 표현
* 툰 셰이딩

## 02 Fresnel을 구현해 봅시다

이전에 배운 램버트 공식을 간단히 정의하면,\
Normal Vector와 Light Direction의 각도가 같으면(0도) 밝고, 90도가 되면 어두워져 검은 색이 된다.

![](https://velog.velcdn.com/images/biomatrix117/post/5db9a006-3b41-470b-94b5-f8692dc19169/image.png)

램버트 공식에서 Light Direction을 View Direction으로 치환하면,\
마치 카메라가 조명인 것처럼, 카메라를 바라보는 면이 밝아지고 카메라와 각도가 벌어질수록 어두워진다.\
('언제나' 어두운 부분은 존재하지 않는다고 생각해도 될듯)

![](https://velog.velcdn.com/images/biomatrix117/post/062511f2-17c3-48fa-a632-4c1429a6dade/image.png)

one minus 노드를 이용해 결과를 뒤집으면\
보는 각도를 바꿔도 언제나 외곽이 밝아보이면서 림 라이트처럼 보이기 시작한다.

![](https://velog.velcdn.com/images/biomatrix117/post/10961b9b-779d-4218-ac58-72921c10d29a/image.png)

두께를 얇게 만들어주기 위해 3제곱을 해준다.

## 03 Fresnel을 다듬어 완성해 봅시다

![](https://velog.velcdn.com/images/biomatrix117/post/de046086-d37f-4e7c-9789-e3636e18a7df/image.png)

림 라이트의 두께와 색깔을 커스텀할 수 있게 프로퍼티로 만들고 컬러를 곱해줬다.\
거기에 이전 단원에서 만들었던 램버트 라이트를 더해줬다.

Fresnel 기능은 자주 쓰이므로, Fresnel Effect라는 이름으로 노드가 만들어져 있다.

> **Troubleshooting**\
> 책에서처럼 고급스럽게 빛나지를 않아 예제 씬을 Import해서 비교했는데, Global Volume의 Tone Mapping이 ACES로 돼있었다. 나도 ACES로 바꿔주니 해결됨.

## 04 Fresnel을 응용한 이펙트를 만들어 봅시다

![](https://velog.velcdn.com/images/biomatrix117/post/6e5cab90-d048-41be-be72-51d45af6b3b9/image.png)

여기 Emission 맵이 있는 가로등이 있다. Intensity를 올리면 Bloom 효과와 함께 발광할 것이다.\
하지만 저사양의 모바일 게임이거나 레트로한 느낌을 주기 위해 HDR이나 Bloom을 사용하지 않고 이런 효과를 내야 한다고 생각해보자.

![](https://velog.velcdn.com/images/biomatrix117/post/0ccb40c9-3dcc-465f-8e38-07346f9cc5ad/image.png)

Fresnel Effect 노드를 이용하면 색상을 굳이 HDR로 하지 않아도 빛나는 것처럼 보이는 이펙트를 만들 수 있다.

이 방법은 모델링을 이용해서 빛나는 효과를 만드는 것이기 때문에, 모양대로 빛나게 만드는 것이 가능하다.

![](https://velog.velcdn.com/images/biomatrix117/post/9a823f83-bfdd-48e1-82ae-c8edca19e10b/image.png)

조명이 깜빡이는 효과를 주기 위해, 0에서 1 사이를 오가는 값을 곱해주었다.\
하지만 그냥 곱해주면 sine의 음수 부분 때문에 이상한 색이 나온다.

**해결책**

* Saturate : 불이 꺼져 있을 때의 시간이 너무 길다
* 하프 램버트 (`*0.5+0.5`) : 부드럽게 지속적으로 반짝이는 곡선이 나온다
* 절대값 함수 : 통통 튀는 느낌이 된다

Time에 계수를 곱해주면 반짝이는 속도를 조절할 수 있다.

> \*\*애니메이션이 잘 보이지 않으면? \*\* 씬 뷰 상단의 스택에 반짝이는 효과가 붙어있는 아이콘 (Toggle skybox, fog...) 에서 Always Refresh를 체크한다.

![](https://velog.velcdn.com/images/biomatrix117/post/c09dc62b-3c74-409c-8211-cc27ea1bd593/image.png)

반짝임 효과에서 one minus를 빼주면 보호막, 비눗방울, 홀로그램같은 느낌을 줄 수 있다.\
(위에서의 깜빡임 효과를 적용하면 깜빡이는 홀로그램도 만들 수 있다)

![](https://velog.velcdn.com/images/biomatrix117/post/24ebbbdf-1fd1-4191-952d-117a5b1e450e/image.png)

World Position을 UV 대용으로 사용하면 어떤 물체라도 World 좌표계의 기준에 맞게 텍스쳐를 입힐 수 있다.\
Time을 Negate로 음수로 만들고, 이를 Combine Y에 연결한 후 Add하여 시간에 따라 y축도 흘러간다.

> **Swizzle 노드?**\
> Vector4에서 필요한 좌표만, 순서까지 마음대로 바꾸어 출력하는 노드

> **Triplaner?**\
> xy, zy, xz 방면으로 각 면의 방향에 맞게 UV를 만들어 입혀주는 기술. 노드로도 만들어져 있다.

만들어져 있는 것을 사용하는 것은 응용의 폭에 한계가 있고, 혹시나 낭비되는 영역이 있더라도 최적화를 할 수 없다.\
각 노드를 선택한 뒤 F1이나 우클릭 > Open Documentation으로 도움말을 볼 수 있다.

Checkerboard 노드를 이용하지 않고 줄무늬를 구현해보자.

![](https://velog.velcdn.com/images/biomatrix117/post/7d0253fd-edee-4461-82c7-39eb3e9166e9/image.png)

World Position과 Fraction 노드를 이용해 줄무늬를 만들 수 있다. Power을 빼면 검은 부분이 사라진다.\
이때 Graph Settings에서 Blending Mode를 Alpha로 바꿔주어야 검은색이 투명해지지 않는다.

> **Fraction 노드?**\
> 들어온 숫자의 소수점 부분만 리턴한다. 1.1은 0.1을, 1.9는 0.9를 리턴한다.

![](https://velog.velcdn.com/images/biomatrix117/post/e45c9d29-4337-4132-b658-f1d4ae9b0d5b/image.png)

Step 노드를 추가하면, 딱 끊어져 보이는 줄무늬를 만들 수 있다.

> **Step 노드?**\
> in에 들어온 값이 Edge에 쓴 수보다 크거나 같으면 1을 반환하고, 작으면 0을 반환한다.


---

# 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-14-or-fresnel.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.
