Showing

[언리얼 Metarial] fresnel reflectioin 이용하여 반투명 재질 만들기 본문

Unreal

[언리얼 Metarial] fresnel reflectioin 이용하여 반투명 재질 만들기

RabbitCode 2024. 1. 25. 12:26

머티리얼에 프레넬 사용하기 | 언리얼 엔진 문서 (unrealengine.com)

 

머티리얼에 프레넬 사용하기

Fresnel 머티리얼 노드 사용법 안내입니다.

docs.unrealengine.com

https://docs.unrealengine.com/4.27/ko/RenderingAndGraphics/Materials/ExpressionReference/

 

머티리얼 표현식 레퍼런스

머티리얼 에디터에서 복잡한 노드기반 셰이더 네트워크를 만드는 데 쓰이는 머티리얼 표현식 전부에 대한 레퍼런스입니다.

docs.unrealengine.com

목표 에너지 쉴드(래퍼런스)

투명한 재질을 만들기 위해서는 Blend Mode에서 Masked 아니면 Translucent를 선택해주어야 한다.

그런데 Masked는 true, false와 같이 투명아니면 안투명밖에 선택지가 없고

반투명한 재질을 만들고 싶다면 Translucent를 선택해야 한다.

Translucent 선택시에 Ligthg Mode에서 Surface Translucency Voulume을 선택하면 비활성화 상태였던 Roughness 등등이 활성화된다.

(1) Surface Translucency Voulume 선택 전 (2) Surface Translucency Voulume 선택 (3) 선택 후

 

 

1. Fresnel 노드 추가하여 Base Color 지정

 필요한 정보(1) 투명하다는 0 (Black), 불투명하다는 수치로 1 (white)

 필요한 정보(2) fresnel reflectioin을 설명하기 위한 강물 예시: 바로 발밑 즉, 가까운 강물을 위에서 아래로 바로 바라보면 투명해보이지만, 강가의 수평선을 바라보면 물 표면의 주변 풍경이 반사되어 보인다.

여기서 법선벡터를 대입하여 생각해보면 바로 발밑의 법선벡터는 카메라(눈)의 벡터와마주보게 되고 저멀리 강가면의 법선벡터는 카메라 벡터와 수직이 되는 셈이다.

 

언리얼의 shpere 메터리얼에 바로 적용해서 생각해볼 때, fresnel 노드는

법선벡터가 카메라와 마주보게 되는 구의 앞쪽은(구의 중점과 카메라 간 거리가 가장 짧은 경우) Black(투명),

법선벡터가 카메라와 수직이 되는 외곽 쪽은 불투명한 값인 white 1로 보이게끔 짜여져있는 노드이다.

rim light 

테두리만 사알짝 빛나듯이(경계만 빛나게 하고 싶을 때) 만드는 것을 rim light라고 하는데,

프레넬 노드에서 지수값을 설정할 수 있는 이유는 최소값(0) 최대값(1)을 고정시켜놓고 중간 톤의 값만 바꾸고 싶을 때 용이하기 때문이다.

인풋 값에 대해 지수곱을 한 Exponential 그래프와 Linear 비교
프리넬 노드의  exponentIn 값을 올릴수록 투명한 부분이 없어지고  exponentIn 값을 낮출수록 투명 범위가 넓어진다.
좌(지수 3), 우(지수 9) 지수 값을 올릴수록 투명한 범위가 급격히 좁아진다.

 

행성을 표현할 때 조명은 비용이 크기 때문에 프리넬 material을 이용하여 조명 대신 연출해줄 수도 있다

위 캡처와 다르게 바로 opacity에 프레넬 노드를 꽂아버리면 중간이 텅비게 되는데 은은하게 색을 채우고 싶다면 

투명도 20퍼가 되게끔 0.2 Lerp를 준다.(아래캡처)

lerp를 80퍼 보이게 조절한 경우(아래 캡처)

 

 

다른 오브젝트와 맞닿은 경계 표현

Depth fade가 적용된 오브젝트는 다른 3d 오브젝트와 겹칠때 흐릿해지는 느낌을 줄 수 있다.

그러나 맞닿은 경계만 보이고 나머지는 안 보여야 하기 때문에 (보인다 1 안 보인다 0) 노드를 바꿔야 한다.

1-x 노드의 힘은 바로 반전효과이다.

맞닿은 경계만 보이기 시작

 

목표: 프레넬 + Depth fade

구체 위쪽으로는 프레넬이되, 바닥과 맞붙는 부분은 Depth fade가 적용되어야 한다.

위에서 작업한 프리넬 노드들과 Depth fade 노드들에 대해서 add를 사용하면 된다.

벡터 계산을 해보면 multiply는 안된다는 것을 알 수 있다.

 

다시 종합해서 노드를 잘 연결해준다.

목표 : 무늬 넣기

현재 육각형 격자무늬 크기가 너무 크다!

 

밑줄친 부분 조정 가능

u,v 값을 직접적으로 입력하는 대신 multiply 노드를 쓸 수도 있다.

그러나 가로세로에 대해 타입이 달라 float가 동일하게 복제되기 때문에 n*n 꼴만 가능하므로 자유도가 낮다

u,v 반복도를 다르게 하고 싶다면 constant2vectors노드를 활용해볼 수 있다.

파라미터로 바꿀 수가 없으므로 constant vector 노드 2개 만들어서 각각 파라미터로 변경해준뒤(우측 마우스 클릭 첫번째) append 해주는 방식을 취하도록 한다.

합치기

add or Max

외곽 경계값이 1이든 2이든 Opacity에서는 인식 컬러가 비슷하다.

(다만 Emissive 합친 것을 꽂으면 블룸 효과가 나타난다)

 

타일 애니메이션

쉐이더는 tick이 없기 때문에 time을 가져와서 써야한다.

최종