굴절 사용법

머티리얼에 Refration, 굴절을 사용하는 방법 안내입니다.

Windows
MacOS
Linux

빛이 하나의 매체에서 다른 매체로 통과할 때, 즉 공기에서 물로 이동할 때, 그 두 매체가 만나는 지점에서 빛의 이동 방향이 바뀌게 됩니다. 이러한 빛 현상을 일컬어 Refration, 굴절이라 하며, 빛이 닿는 재질의 서로 다은 유형에 따라 빛의 이동 속도가 달라지기 때문에 발생하는 것입니다. 언리얼 엔진 4 에서는, 머티리얼에서 Refraction, 굴절을 사용하여 이러한 빛 현상을 시뮬레이션할 수 있습니다.

굴절

Refraction, 굴절이란 빛이 투과되는 매체의 변화에 따라 (빛의) 파장 방향이 바뀌는 현상을 설명하는 용어입니다. 다른 말로, 빛이 물이나 유리같은 특정 표면에 닿을 때, 빛이 그 표면을 투과하는 속도에 그 표면이 영향을 끼치기 때문에 빛이 살짝 굽는 것입니다. 굴절의 가장 좋은 예는 물에 연필의 일부를 담가 보는 것입니다. 물 속에 있는 연필의 일부는 굴절로 인해 연필과 물이 만나는 지점에서 굽어 보일 것입니다. 굴절이 어떻게 돌아가는지 보여주는 매우 간단한 예제입니다.

R_Refraction_Example.png

수면 아래 있는 연필 부분은 굴절로 인해 카메라에서 봤을 때 굽어 보일 것입니다. 이러한 현상이 발생하는 이유는, 연필의 원래 위치인 X 에서의 빛 파장이 수면 굴절의 영향을 받아 카메라에서 봤을 때 Y 에서 오는 것처럼 보이기 때문입니다. 빛의 이동 속도가 물에 닿을 때 변하고, 공기에 닿으면서 한 번 더 변하기 때문에 발생하는 현상입니다.

굴절지수 또는 IOR

Index of Refraction (줄여서 IOR, 굴절지수)는 빛이 한 매체에서 다른 매체로 전파될 때 얼마나 굽는지를 정확히 파악하는 데 사용할 수 있는 광학 측정 단위입니다. 이러한 빛 현상은 측정이 가능하므로, UE4 안에서 이러한 측정치를 사용하여 굴절의 모양에 영향을 끼침으로써 3D 월드에 보다 나은 사실감을 부여할 수 있습니다. 일상에서 볼 수 있는 사물에 대한 IOR 값은 이렇습니다.

재질

IOR 값

공기

1.00

1.33

얼음

1.31

유리

1.52

다이아몬드

2.42

머티리얼에 굴절 사용하기

굴절을 활용하는 머티리얼을 구성하는 방법은 다음과 같습니다.

이 튜토리얼은 프로젝트에 시작용 콘텐츠를 포함시켰다 가정하고 작성되었습니다. 포함시키지 않으신 경우, 다른 프로젝트의 시작용 콘텐츠를 이주 시키는 법을 참고하시기 바랍니다.

  1. 먼저 콘텐츠 브라우저 에서 우클릭 한 다음 기본 애셋 생성 부분의 머티리얼 을 선택하고 Refraction_Material 이라 이름을 지어 새 머티리얼을 만듭니다. 완료된 콘텐츠 브라우저 모습은 다음과 같을 것입니다.

    R_Create_Refraction_Material.png

  2. 위에서 만든 머티리얼을 콘텐츠 브라우저 에서 더블클릭 하여 엽니다. 열리면 Blend Mode (블렌드 모드)를 Opaque (불투명)에서 Translucent (반투명)으로 변경하고, Lighting Model (라이팅 모델)을 Volumetric Non Directional (무방향 볼륨형)에서 Surface Translucency Volume (표면 반투명 볼륨)으로 변경합니다. 완료된 머티리얼 디테일 패널 모습은 다음과 같을 것입니다.

    DetailsPanel.jpg

  3. 머티리얼 프로퍼티 설정이 잘 되었으니, 필수 머티리얼 표현식 노드를 추가하기 시작하면 됩니다. 이 머티리얼에 추가할 노드의 유형과 수량은 다음과 같습니다.

    • Constant x 5

    • Lerp x 1

    • Fresnel x 1

    R_Required_Nodes.png

  4. 머티리얼 그래프에 필수 머티리얼 표현식 노드를 전부 추가했으면, 모두 연결해 주기 시작할 차례입니다. 완료된 머티리얼 그래프 모습은 이와 같을 것입니다.

    R_Finshed_Material.png

  5. 나중에 테스트를 편하게 하기 위해, Lerp 의 B 입력에 들어가는 Constant 머티리얼 표현식을 우클릭 하여 뜨는 메뉴에서 파라미터로 변환 옵션을 선택합니다. 그 후 입력 이름을 지어줍니다. 이 예제에서는 IOR 로 지어주겠습니다. 완료된 머티리얼 그래프는 다음과 같은 모습일 것입니다.

    R_Finshed_Material_IOR_Tweak.png

  6. 머티리얼 구성이 완료되었으니, 적용, 저장 버튼을 누른 다음 머티리얼을 닫습니다.

    R_Apply_&_Save.png

  7. 머티리얼을 닫았으면, 콘텐츠 브라우저 에서 머티리얼을 찾습니다. 찾았으면 그 머티리얼에 우클릭 한 다음 메뉴에서 머티리얼 인스턴스 생성 을 선택합니다. 완료된 콘텐츠 브라우저 모습은 이와 같을 것입니다.

    R_Create_New_MI.png

  8. 이제 머티리얼 인스턴스가 생성되었으니, 머티리얼 미리보기가 수월하도록 월드에 오브젝트를 몇 개 추가해 줍시다. 프로젝트에 시작용 콘텐츠를 포함시켰다면, Shapes 폴더에 여러가지 모양의 메시를 찾을 수 있습니다. 이 예제에서는 월드에 큐브, 원뿔, 구체 모양을 추가했습니다.

    R_Adding_Test_Meshes.png

    큐브, 원뿔, 구체를 찾을 수 없다는 것은 프로젝트에 시작용 콘텐츠를 포함시키지 않았다는 뜻입니다. 시작용 콘텐츠를 포함시키지 않은 경우, 다시 새 프로젝트를 만들면서 시작용 콘텐츠가 포함되었는지 확인을 하거나, 시작용 콘텐츠가 있는 다른 프로젝트에서 이주 해 오면 됩니다.

  9. 테스트할 모양이 생겼으니, 먼저 콘텐츠 브라우저 에서 머티리얼 인스턴스를 좌클릭 하여 선택한 다음, 클릭을 유지한 상태로 모양 위로 끌어 놓으면 굴절 머티리얼 인스턴스가 모양에 적용됩니다. 완료되면 레벨의 모습이 다음과 같을 것입니다.

    R_Applied_Material.png

  10. 콘텐츠 브라우저 에서 굴절 머티리얼 인스턴스에 더블클릭 하여 엽니다. 열리면 IOR 파라미터의 체크박스를 좌클릭 하여 활성화시켜 줍니다. 활성화되면 IOR 값을 바꿔 다른 표면 상태를 시뮬레이션할 수 있습니다. IOR 기본 값을 물에 해당하는 1.33 에서 유리에 해당하는 1.52 에서, 마지막으로 다이아몬드에 해당하는 2.42 로 바꾼 예제입니다.

굴절 팁 & 정보

다음 섹션에서는 굴절과 함께 머티리얼 에디터의 여러 면을 조합해서 매우 재미난 결과를 내는 여러 방법을 살펴보도록 하겠습니다.

굴절 & 노멀 맵

굴절 머티리얼에 노멀 맵을 사용하도록 하는 옵션을 추가하면 매우 흥미로운 결과가 나는데, 노멀 맵에 흥미로운 디테일이 많은 영역인 경우 특히 더 그렇습니다. 위에서 만든 머티리얼을 다음과 같이 변경하면 노멀 맵과 함께 작업할 수 있습니다.

  1. 우선 사용할 노멀 맵을 찾습니다. 이 예제에서는 T_Brick_Clay_Old_N 을 사용했으니, 다른 노멀 맵도 괜찮습니다. 노멀 맵을 찾았으면, Refraction_Material 을 연 다음 콘텐츠 브라우저 에서 노멀 맵을 끌어 머티리얼 그래프에 놓습니다.

    R_Adding_Normal_Map.png

  2. 머티리얼 그래프에 노멀 맵을 배치한 이후에는, 노멀 입력에 연결합니다. 연결한 이후에는 노멀 맵 Texture Sampler 노드를 선택한 다음 우클릭 하고 메뉴에서 파라미터로 변환 옵션을 선택한 뒤 이름을 Normal Map 라 합니다.

  3. 적용, 저장 버튼을 누른 뒤 머티리얼을 닫습니다.

    R_Apply_&_Save.png

  4. 머티리얼을 컴파일하고 저장했으면, 머티리얼 인스턴스를 열고 Texture Parameters Values (텍스처 파라미터 값) 섹션의 Parameter Groups (텍스처 그룹) 부분을 봅니다. 여기에 노멀 맵이 편집가능한 파라미터로 보일 것입니다. 노멀 맵을 변경하려면, 회색으로 탈색된 체크박스를 클릭해서 활성화시켜주기만 하면 됩니다. 활성화된 이후에는 콘텐츠 브라우저 에서 새로운 노멀 맵을 찾아 선택한 뒤, Use Selected Assets from the Content Browser (콘텐츠 브라우저에서 선택된 애셋 사용) 버튼을 눌러 선택된 노멀 맵을 머티리얼 인스턴스에 할당하면 됩니다.

  5. 노멀 맵을 변경하는 것으로, 굴절 방식을 흥미롭게 영향을 끼칠 수 있습니다. 시작용 콘텐츠의 Textures 폴더에서 찾을 수 있는 노멀 맵만을 사용한 예제입니다.

    R_Reflection_&_Normal_Maps.png

굴절 및 이동

머티리얼 그래프에 Panner 머티리얼 표현식 노드를 추가한 다음 노멀 맵 텍스처의 UV 에 연결하면, 매우 흥미로운 결과가 납니다. 이 방법은 유리창같은 것에 좋지만, 열기로 인한 아지랑이나 거대한 폭발로 인한 왜곡같은 비주얼 이펙트에도 매우 유용할 것입니다.

R_Panning_Normal_Map.png

굴절 깊이 편향

Refraction Depth Bias 는 가까이 있는 오브젝트를 극심한 각도에서 볼 때 왜곡된 표면속에 렌더링되지 않도록 합니다. 하지만 표면과 굴절이 시작되는 부분 사이의 단절이 생길 수 있습니다. UE4 안의 두 곳에서 Refraction Depth Bias 를 조정할 수 있습니다.

  • 머티리얼 에디터 - 디테일 패널의 Material 섹션 아래에서 Refraction Depth Bias 를 찾을 수 있습니다. 이 프로퍼티를 노출시키려면 (초록으로 강조된) 흰색 삼각형을 눌러줘야 할 것입니다.

    R_RDB_Materail_Editor.png

  • 머티리얼 인스턴스 - 디테일 패널의 General 섹션에서 Refraction Depth Bias 를 찾을 수 있습니다.

    R_RDB_Materail_Instance.png

결론

머티리얼에 굴절을 추가하면, 특히나 물이나 유리같은 경우 매우 현실적인 결과물을 얻기에 좋은 방법입니다. 시뮬레이션하려는 표면 유형에 올바른 IOR 값을 사용해야 한다는 점 기억하시구요. 표면 유형에 사용되는 값 이상으로 IOR 값을 올리고 싶다는 충동이 들 수 있으나, 참으세요. IOR 값은 현실에서의 측정값을 토대로 한 것이기 때문에, IOR 값을 높이거나 낮춘다고 더욱 괜찮아 보이지는 않을 것입니다.

태그
Select Skin
Light
Dark

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

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

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

네이버 카페
공식 포럼