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

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

Windows
MacOS
Linux

FN_Fresnel_Sample.png

영화나 시네마틱 제작시 캐릭터의 실루엣을 더욱 강조시키는 방법이 필요할 때가 종종 있습니다. 이 라이팅 기법은 림 / 에지 (테두리) 라이팅이라고도 하며, 라이트를 추가하여 배경에서 캐릭터 실루엣을 도드라지게 하는 데 도움이 됩니다. 이 방법은 영화에는 꽤나 잘 통하지만, 3D 씬에 라이트를 추가하면 복잡도가 증가하여 관리하기가 급격히 힘들어질 수 있습니다. 그때문에 언리얼 엔진 4 (UE4) 에서는 아티스트가 캐릭터의 머티리얼을 사용해서 동일한 기본 효과를 시뮬레이션하는 솔루션이 제공됩니다. 이런 식으로 아티스트는 이펙트의 모양과 느낌을 더욱 세밀히 제어하고, 심지어 라이팅되지 않은 오브젝트에 라이팅을 더하는 데 사용하여 퍼포먼스를 절약할 수도 있습니다.

프레넬

Fresnel 은 관찰자가 바라보는 각도에 따라 반사되는 빛의 세기가 달라지는 현상을 설명하는 데 사용되는 용어입니다. 예를 들어 물 웅덩이 위에 서서 수직으로 내려다보는 경우, 반사되는 수면이 많이 보이지 않을 것입니다. 머리를 움직여 물 웅덩이의 수면이 시선과 평행이 되어갈수록, 수면의 반사면이 많아지는 것이 보일 것입니다.

UE4 에서 Fresnel 머티리얼 표현식 노드는 표면 노멀과 카메라까지의 방향의 내적을 기반으로 감쇠 계산을 합니다. 표면 노멀이 카메라를 바로 향하면 출력값은 0, 즉 발생하는 프레넬 이펙트가 없습니다. 표면 노멀이 카메라에 수직인 경우 출력값은 1, 즉 최대치의 프레넬 이펙트가 발생합니다. 그런 다음 그 결과를 [0,1] 범위로 제한시켜 가운데 음수 컬러가 생기지 않도록 합니다. 다음 그림은 이 개념을 나타냅니다.

FN_Caculation_Example.png

구체 중앙의 0 인 부분은 프레넬 이펙트가 없는 것이 보입니다. 왜냐면 카메라가 바로 표면 노멀쪽을 향하고 있기 때문입니다. 표면 노멀과 카메라가 수직이 되어갈 수록, 즉 1 에 가까울 수록 프레넬 이펙트가 더욱 잘 보이게 되는데, 바로 그러한 작동방식 유형이 필요한 것입니다.

프레넬 노드 분석

Fresnel 노드를 검색하면 UtilityVector Ops 아래 Fresnel 이 있습니다. 위의 두 노드는 이름도 같고 하는 일도 같지만, 사용 구성법이 다릅니다.

프레넬 유틸리티

Utility 아래 있는 프레넬은 이 하우투에서 사용되는 것으로, 둘 중에서 구성이나 사용법이 간단합니다. 처음에는 이 버전을 사용했다가 노드 작동 방식을 이해한 후 다른 버전을 사용할 것을 강력 추천 합니다.

FN_Fresnel_Node.png

프로퍼티

설명

ExponentIn

지수 입력 - 프레넬 이펙트 감쇠를 제어합니다.

BaseReflectFrctionIn

기본 리플렉션 굴절 입력 - 표면을 직접 봤을 때의 스페큘러 리플렉션의 굴절율을 나타냅니다. 이 값을 1 로 설정하면 사실상 프레넬이 꺼집니다.

Normal

노멀 - 여기에 노멀을 입력시켜 프레넬 이펙트의 렌더링 방식에 영향을 끼칠 수 있습니다. 이 프로퍼티는 노멀 맵이나 벡터 3 입력 중 하나를 제공하는 것으로는 설정할 수 없습니다.

Fresnel 머티리얼 표현식의 값을 조절하는 데는 두 가지 옵션이 있습니다.

  • 머티리얼 그래프에서 Fresnel 머티리얼 표현식을 선택한 다음 디테일 패널을 통해 값을 입력합니다. FN_Change_Via_Details.png

  • 머티리얼 그래프에 Constant 또는 Scalar 노드를 추가한 다음 각각의 입력에 연결합니다. FN_Change_In_Graph.png

노멀 맵을 사용할 때, Transform 표현식 노드를 추가하도록 하세요. 그러면 노멀 맵이 탄젠트 스페이스에서 월드 스페이스로 변환됩니다. 이러한 변환 없이는 노멀 맵이 의도한 대로 프레넬에 영향을 끼치지 못할 수 있습니다.

프레넬 벡터 옵스

Vector Ops 아래 있는 Fresnel 은 상세한 설정이 가능한 버전으로, 프레넬 렌더링 방식의 다양한 부분에 영향을 끼칠 수 있습니다. 하지만 이러한 부가 기능이 단점이 될 수도 있는데, 설정을 잘못 하면 프레넬 렌더링 방식에 부작용 내지 오류가 생길 수 있기 때문입니다. Utility 아래 있는 Fresnel 로 원하는 결과를 얻을 수 없을 때만 사용해야 할 것입니다.

FN_Fresnel_Node_VO.png

프로퍼티

설명

Normal Vector (V3)

노멀 벡터 - 여기에 노멀을 입력시켜 프레넬 이펙트 렌더링 방식에 영향을 끼칠 수 있습니다. 이 프로퍼티는 노멀 맵이나 벡터 3 입력 중 하나를 제공하는 것으로는 설정할 수 없습니다.

Camera Vector(V3)

카메라 벡터 - 카메라와 표면 노멀의 내적을 구하는 데 사용되는 카메라 이펙트가 가능합니다.

Invert Fresnel(B)

프레넬 반전 - 프레넬 이펙트를 반전시킬 수 있습니다. 프레넬을 중앙이나 가장자리에서만 적용시키고자 하는 경우에 유용합니다.

Power(S)

제곱 - 프레넬 이펙트의 제곱 조절이 가능합니다. 수치를 크게 할 경우 프레넬에 영향받는 영역이 협소해 지며, 작을 수록 넓어집니다.

Use Cheap Contrast(B)

싼 대비 사용 - 밝은 부분과 어두운 부분 사이의 대비를 계산하는 데 프레넬이 싼 메서드를 사용하도록 합니다.

Cheap Contrast Dark (S)

싼 대비 암도 - 프레넬의 어두운 정도를 조절합니다. Use Cheap Contrast 옵션이 켜져있을 때만 영향을 끼칩니다.

Cheap Contrast Bright (S)

싼 대비 명도 - 프레넬 이펙트의 밝은 정도를 조절합니다. Use Cheap Contrast 옵션이 켜져있을 때만 영향을 끼칩니다.

머티리얼에 프레넬을 사용하는 법

프레넬을 사용하는 머티리얼을 만드는 법은 다음과 같습니다.

  1. 이번 예제에서는 새로운 머티리얼을 만들어 보겠지만, 여기서 배운 것을 기존 머티리얼에 얼마든지 적용해도 됩니다. 머티리얼을 새로 만들려면, 콘텐츠 브라우저우클릭 한 다음 기본 애셋 생성 아래에서 머티리얼 을 선택합니다. 머티리얼이 생성되면 이름을 Fresnel_Material 이라 합니다.

    FN_Creat_New_Material.png

  2. 콘텐츠 브라우저 에서 새로 만든 머티리얼에 더블클릭 하여 엽니다. 머티리얼이 열리면, 필요한 머티리얼 표현식을 팔레트 검색 메뉴에서 검색합니다. 머티리얼 그래프에 머티리얼 표현식을 추가하려면, 먼저 배치하고자 하는 노드를 좌클릭 유지한 상태에서 머티리얼 그래프에 끌어 놓습니다. 이 머티리얼에 필요한 노드의 유형과 양은 다음과 같습니다.

    노드 이름

    Vector Parameter Node

    2

    Scalar Node

    2

    Fresnel Node

    1

    완료된 머티리얼 그래프 모습은 다음과 같을 것입니다.

    FN_Adding_Nodes.png

    Fresnel 머티리얼 표현식을 검색해 보면, 두 가지 유형이 나옵니다. 이번 하우투 안내에서는 Utility 아래에서 찾을 수 있는 프레넬만 사용하겠습니다.

  3. 머티리얼 그래프에 필요한 머티리얼 표현식 노드가 추가되었으니, 모든 것을 연결하고 파라미터에 기본 값을 줄 차례입니다. 이번 예제에서 사용할 파라미터 이름과 기본 값은 다음과 같습니다.

    이름

    Base_Color

    0.5, 0.5, 0.5

    Roughness

    0.5

    Fresnel_Color

    1.0, 0.0, 0.0

    Fresnel_Exp

    0.8

    완료된 머티리얼 그래프 모습은 다음과 같을 것입니다.

    FN_Completed_Materail.png

  4. 모든 것을 연결하고 나면 머티리얼을 적용저장 하도록 합니다. 머티리얼을 저장한 이후에는 머티리얼 에디터를 닫을 수 있을 것입니다.

    FN_Apply_Save.png

  5. 머티리얼을 컴파일, 저장 후 닫았으면, 콘텐츠 브라우저 에서 머티리얼을 찾은 다음 우클릭 합니다. 뜨는 메뉴에서 머티리얼 인스턴스 생성 옵션을 선택합니다. 그러면 새로운 머티리얼 인스턴스가 생성됩니다. 완료된 콘텐츠 브라우저 모습은 다음과 같을 것입니다. FN_Create_New_Material_Instance.png

  6. 콘텐츠 브라우저 에서 새로 생성된 머티리얼 인스턴스에 더블클릭 하여 엽니다. 머티리얼 인스턴스가 열리면, 먼저 파라미터 이름 옆에 회색으로 탈색된 박스를 클릭하여 편집하고자 하는 파라미터를 활성화시키는 것으로 머티리얼 인스턴스 파라미터 조정을 시작하면 됩니다. 이 작업이 완료된 이후에는 파라미터를 편집할 수 있습니다. 예를 들어 Fresnel_Exp 파라미터를 활성화시켰다면, 표면의 프레넬 이펙트를 늘이고 줄일 수 있습니다.

Fresnel_Exp 의 값이 커질수록 프레넬 이펙트가 가장자리에, 작을 수록 중앙에 가까워진다는 점 기억하세요. Fresnel_Exp 값이 프레넬에 영향을 끼치는 예제는 아래와 같습니다. 수치가 커질수록 프레넬 이펙트가 메시 가장자리에 가까워지는 것을 볼 수 있습니다. FN_Different_Fresnel_Exp_Values.png

프레넬 & 노멀 맵

프레넬의 노멀 입력에 노멀 맵을 입력하면, 표면의 이펙트에 매우 재미난 방식으로 영향을 끼치는 것이 보일 것입니다. 표면 노멀에 대한 노멀 맵의 영향력 때문인데요. 앞서 배운대로 프레넬은 표면 노멀이 카메라에 수직인가 아닌가를 검사하는 방식으로 작동합니다. 카메라에 수직이라면, 프레넬 이펙트가 발생합니다. 부드러운 구체에서라면, 프레넬은 오브젝트의 가장자리에서만 일어난다는 뜻입니다. 하지만 노멀 맵을 도입하면 표면의 노멀이 더이상 매끄럽지 않게 되어, 원래 부드러운 상태였다면 정상적으로 발생하지 않았을 프레넬 이펙트가 가능합니다.

어떻게 돌아가는지에 대한 시각적 예제로, 표면 노멀이 프레넬에 미치는 영향을 다음 이미지에서 살펴보세요. 왼쪽의 그림 1 은 표면 노멀이 평평한 상태에서 출력된 프레넬 노드입니다. 이제 오른편의 그림 2 번을 살펴봅시다. 이 그림에서 노멀 맵을 입력하여 표면 노멀이 급격하게 변동되었습니다. 모든 곳에 표면 노멀이 더이상 평평하지 않기 때문에, 프레넬이 더욱 많이 나타납니다.

FN_Effect_On_Surface_Normal.png

아래 그림에서는 다양한 노멀 맵이 프레넬에 어떤 식으로 영향을 끼치는지 확인할 수 있습니다.

FN_Fresnel_&_Normal_Map.png

위 그림을 만드는 데 사용된 머티리얼은 전에 사용된 것과 같은 머티리얼이지만 다음과 같은 변경사항이 있었습니다.

  • 머티리얼의 Blend ModeOpaque 에서 Translucent 으로 변경되었습니다.

  • 이미시브 컬러 입력에 연결된 프레넬의 최종 출력이 오파시티 입력에도 연결되었습니다.

  • 2D Texture Sampler 를 새로 추가하여 노멀 입력에 연결했습니다. 노멀 텍스처로는 시작용 콘텐츠의 Tech_Hex_Tile_N 이 사용되었습니다.

  • Scalar Parameter 를 새로 추가한 뒤 Texture Coordinates 표현식을 곱하여 노멀 맵에 기본적인 균등 타일링 효과를 구현했습니다.

FN_Adding_Normal_Map.png

Fresnel 머티리얼 표현식에도 노멀 맵을 제공하여 프레넬 렌더링 방식에 영향을 끼칠 수 있습니다. 프레넬을 사용하여 머티리얼에 에너지 쉴드같은 것을 표현하면서, 쉴드 작동 상태가 아닐 때도 머티리얼이 정상적으로 보이도록 하고자 할 때 특히나 좋습니다. 위의 머티리얼을 사용해서 이러한 효과를 내는 방법은 다음과 같습니다.

  1. 먼저 Translucency Lighting Mode (반투명 라이팅 모드)를 Volumetric Non Directional (볼류메트릭 비방향성)에서 Surface Translucency Volume (표면 반투명 볼륨)으로 변경합니다.

  2. 베이스 컬러러프니스 가 시작용 콘텐츠의 T_Brick_Clay_New_D 텍스처를 사용하도록 바꿉니다.

  3. 다음으로 노멀 입력이 마찬가지로 시작용 콘텐츠에서 찾을 수 있는 T_Brick_Clay_New_N 텍스처를 사용하도록 바꿉니다.

  4. 그리고 팔레트에서 Transform 표현식 노드를 검색한 다음 머티리얼 그래프에 추가합니다. 탄젠트에서 월드 스페이스로 변환하도록 설정되었는지 확인합니다.

  5. 이전 노멀 맵 텍스처 노드를 Transform 노드의 입력에 연결한 뒤 그 출력을 Fresnel 노드의 Normal 입력에 연결합니다. 완료된 머티리얼 모습은 다음과 같을 것입니다.

FN_Fresnel_Normal_Input.png

벽돌이 프레넬과는 무관한 것처럼 보이는 것이 보입니다. 여기에 한 발짝 더 나아가 MultiplyConstant 표현식 노드를 추가하여 프레넬 이펙트의 강도 조절용으로 사용할 수도 있습니다. 위의 머티리얼에 추가시킨 모습은 다음과 같습니다.

FN_Controal_Fresnel_Effect.png

추가시킨 Constant 를 조절하는 것으로 표면의 프레넬 이펙트를 조절할 수 있습니다. 수치를 0 으로 설정하면 이펙트가 꺼지고, 그 외의 값으로 설정하면 아래 예제에서처럼 이펙트가 서서히 드러납니다.

FN_Effect_Amount.png

프레넬의 다른 용도

프레넬의 작동 방식으로 인해 림 라이팅 말고도 다른 방식으로 사용할 수 있습니다. 림 라이팅 이외의 용도로 프레넬을 사용하는 예제는 다음과 같습니다.

  • Input Blending 입력 블렌딩 - Fresnel 을 LERP 의 알파로 사용하여 입력이 선형보간에 합쳐지는 방식을 제어할 수 있습니다. FN_Lerp_Blending.png

결론

머티리얼에 프레넬을 추가하면 캐릭터의 실루엣을 더욱 빛나게 만들거나 에너지 쉴드 특수 효과를 나타내는 데 큰 도움이 됩니다. 기억할 점은, 프레넬은 표면 노멀을 보는 각도에 따라 작동하므로, 프레넬에 재미난 디테일을 추가하려면 약간의 노이즈가 낀 노멀 맵을 사용해 보시기 바랍니다. 또 한가지, 프레넬은 두 가지 입력을 블렌딩하는 데도 사용할 수 있는데, 불이나 연기같은 시각 효과에 매우 편리하게 쓰입니다.

태그
Select Skin
Light
Dark

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼