물이나 유리 등 특정 타입의 표면을 생성할 때 속이 비치는 표면을 만들 뿐만 아니라 표면에 깊이감과 색감을 더할 수 있어야 합니다. 현실에서 이러한 속성은 투명도(Transparency) 또는 오파시티(Opacity) 라고 하며, 두 용어가 동일하다는 것을 설명하기 위해 바꿔서 사용되기도 합니다. 언리얼 엔진에서 투명도 와 오파시티 는 의미가 구별되어 있습니다.
- 투명도 는 표면의 속이 비치는지 여부를 정의하는 데 사용됩니다.
- 오파시티 는 표면이 빛을 투과하는 정도를 정의하는 데 사용됩니다. 다시 말해, 오파시티 값은 표면이 얼마나 투명하거나 불투명한지, 표면 속이 비치는지 안 비치는지 여부를 결정합니다.
이번 튜토리얼에서는 언리얼 엔진 머티리얼에서 투명도를 사용하기 위해 알아야 할 모든 것을 알아봅니다.
투명도
투명도 란 빛을 차단하거나 통과시키는 표면의 기능을 설명하는 데 사용되는 용어입니다. 예를 들어, 벽돌은 투명도가 없는 물체입니다. 스테인드글라스는 전체가 아닌 일부 빛이 투과되므로 투명도가 있는 표면입니다. 투명도를 사용하여 아래 목록을 포함한 현실의 다양한 표면 타입을 시뮬레이션할 수 있습니다.
- 헤어
- 유리
- 물
- 연기 또는 불 비주얼 이펙트
- 구름
- 임팩트 데칼
- 폴리지
투명도 및 오파시티
언리얼 엔진에서 투명도는 각 픽셀에 0과 1 사이의 오파시티 값을 할당하는 방식으로 작동합니다. 오파시티 가 1일 때 표면은 완전히 불투명해지며, 이는 닿는 빛을 100% 차단한다는 뜻입니다. 오파시티 가 0일 때 표면은 모든 빛을 투과시킵니다. 0과 1 사이의 오파시티 값은 일부만 비치는 픽셀을 만들어 냅니다. 아래 이미지는 스태틱 메시에서 오파시티 값이 0에서 1까지 올라가는 모습을 보여줍니다.

그레이스케일 텍스처로도 오파시티를 정의할 수 있습니다. 아래 이미지는 메시의 투명한 부분과 정도를 정의하는 데 텍스처가 어떤 도움이 되는지 보여줍니다. 텍스처는 상단으로 갈수록 검은색(완전 투명)에 가까워지고 하단으로 갈수록 흰색(완전 불투명)에 가까워지는 그레이디언트로, 텍스처의 픽셀이 검은색 또는 흰색과 얼마나 가까운지에 따라 가운데 영역의 오파시티 정도가 달라집니다.

머티리얼에 투명도 사용하기
다음 단계를 따라 투명한 머티리얼을 구성할 수 있습니다.
이 튜토리얼에서는 언리얼 엔진 시작용 콘텐츠 에 포함된 에셋을 사용합니다. 프로젝트에 시작용 콘텐츠가 포함되어 있지 않은 경우 이주하기 콘텐츠 페이지에서 프로젝트 간에 콘텐츠를 이동하는 방법을 확인해 보세요. 이 방법으로 새 프로젝트를 만들지 않고도 현재 프로젝트에 시작용 콘텐츠를 추가할 수 있습니다.
-
먼저 콘텐츠 브라우저 에서 우클릭 한 다음, 컨텍스트 메뉴의 기본 에셋 생성(Create Basic Asset) 섹션에서 머티리얼(Material) 을 선택합니다.
-
머티리얼을 TransparentMaterial 로 명명한 다음 콘텐츠 브라우저 에서 머티리얼 섬네일을 더블클릭 하여 엽니다. 머티리얼 에디터가 열립니다.
-
머티리얼 그래프의 배경을 클릭하여 디테일(Details) 패널에 머티리얼 프로퍼티를 표시합니다. 머티리얼(Material) 섹션에서 블렌드 모드(Blend Mode) 를 불투명(Opaque) 에서 반투명(Translucent) 으로 변경합니다.
-
이제 블렌드 모드 가 올바르게 설정되었으니, 그래프에 다음 머티리얼 표현식을 추가합니다. 머티리얼 팔레트의 검색창에 노드 이름을 입력하여 노드를 찾을 수 있습니다. 노드를 찾았으면 클릭 하여 팔레트에서 머티리얼 그래프로 드래그합니다.
- 벡터 파라미터 x 1
- 스칼라 파라미터 x 1
-
벡터 파라미터 노드의 이름을 BaseColor 로 변경하고 컬러 값을 지정합니다. 벡터 파라미터 노드의 출력을 메인 머티리얼 노드의 Base Color 입력에 연결합니다.
-
스칼라 파라미터의 이름을 Opacity 로 변경하고 디폴트값을 0.5로 지정합니다. 스칼라 파라미터를 메인 셰이더 노드의 Opacity 입력에 연결합니다.
-
머티리얼 에디터 툴바에서 적용(Apply) 및 저장(Save) 을 차례로 클릭하여 머티리얼을 컴파일하고 에셋을 저장합니다.
-
콘텐츠 브라우저 에서 TransparentMaterial 에셋을 찾아 섬네일을 우클릭하고 컨텍스트 메뉴에서 머티리얼 인스턴스 생성(Create Material Instance) 을 선택합니다.
-
콘텐츠 브라우저 에서 시작용 콘텐츠의 Shapes 폴더로 이동합니다. Shape_Sphere 스태틱 메시를 클릭한 상태로 뷰포트로 드래그하고 왼쪽 마우스 버튼을 놓아 레벨에 스폰합니다.
-
콘텐츠 브라우저에서 TransparentMaterial_Instance 에셋을 찾습니다. 머티리얼 인스턴스를 클릭한 상태로 스피어로 드래그하고, 왼쪽 마우스 버튼을 떼어 메시에 적용합니다.
-
콘텐츠 브라우저 에서 머티리얼 인스턴스를 더블클릭 하여 엽니다. 머티리얼 인스턴스 에디터에서 파라미터 이름 옆의 박스에 체크하여 OpacityAmount 파라미터를 오버라이드합니다. 활성화되면 OpacityAmount 값을 조정하여 오브젝트의 투명도를 변경할 수 있습니다.
투명도 및 리플렉션
투명도를 사용하는 오브젝트는 다음 옵션을 설정하면 씬 리플렉션을 표시할 수 있습니다. 하지만 리플렉션이 활성화된 반투명 머티리얼이 많아지면 퍼포먼스 문제가 발생할 수 있다는 점에 유의해야 합니다.
-
위에서 생성한 TransparentMaterial 을 콘텐츠 브라우저 에서 더블클릭 하여 엽니다. 반투명(Translucency) 카테고리의 디테일 패널에서 라이팅 모드(Lighting Mode) 를 Volumetric NonDirectional 에서 Surface TranslucencyVolume 으로 변경합니다.
-
머티리얼 그래프에서 OpacityAmount 파라미터를 선택하고 키보드의 CTRL + D 를 눌러 2번 복제합니다. 완료 시 머티리얼 그래프는 다음과 같은 모습입니다.
-
새 머티리얼 표현식 노드의 이름을 Metallic 및 Roughness 로 변경합니다. Metallic 머티리얼 표현식의 디폴트값을 1.0으로, Roughness 의 디폴트값을 0으로 설정합니다. 그런 다음 각 머티리얼 표현식 노드를 메인 머티리얼 노드의 해당 입력에 연결합니다.
-
머티리얼 에디터 툴바에서 적용 및 저장 을 클릭한 다음, 머티리얼 에디터를 닫습니다.
-
이제 레벨의 스피어에 리플렉션이 보일 것입니다.
머티리얼 인스턴스의 파라미터를 조정하여 극도로 다른 투명도 결과를 만들어 낼 수 있습니다.

착색 또는 유색 투명
얇은 투명(Thin Transparent) 셰이딩 모델과 머티리얼 표현식을 사용하면 색유리나 컬러 플라스틱 등의 착색 또는 유색 투명 물질을 정확하게 표현할 수 있습니다. 이 셰이딩 모델은 투명 표면용으로 올바르게 색을 입힌 배경 컬러로 흰색 스페큘러 하이라이트를 활성화합니다.


아래 이미지는 얇은 반투명 머티리얼 그래프의 예시입니다.
이미지를 클릭하면 확대됩니다.
디테일 패널의 다음 프로퍼티를 통해 머티리얼을 환경설정합니다.
- 블렌드 모드(Blend Mode) 를 반투명(Translucent) 으로 변경합니다.
- 셰이딩 모델(Shading Model) 을 얇은 반투명(Thin Translucent) 으로 변경합니다.
- 반투명 카테고리에서 라이팅 모드 를 Surface ForwardShading 으로 변경합니다.
그래프에 Thin Translucent Material 표현식을 추가하여 입력에 Constant3Vector 또는 벡터 파라미터를 연결합니다. 이 노드는 투명한 표면의 컬러 색조를 제어합니다.
반투명 컬러 섀도
일부 사례에서 반투명 머티리얼이 라이트 투과를 통해 컬러 섀도를 드리울 수 있습니다. 머티리얼을 통과하는 라이트의 양은 오파시티 값과 머티리얼에 드리우는 라이트의 양에 따라 결정됩니다.

반투명 컬러 섀도는 현재 스태틱 라이팅 및 라이트매스를 통해서만 구현할 수 있습니다.
자세한 내용 및 사용법은 컬러 반투명 섀도 사용하기를 참조하세요.
투명도 및 퍼포먼스

투명도, 특히 릿 투명도는 씬에 투명한 오브젝트가 너무 많으면 퍼포먼스 병목 현상을 빨리 일으킬 수 있습니다. 이 문제를 설명하는 데 사용하는 용어가 '오버드로(Overdraw)'입니다. 오버드로 는 투명도 렌더링을 적용한 다수의 오브젝트가 서로 겹쳐 있을 때 발생합니다. 퍼포먼스 문제와 같은 오버드로가 발생하는 이유는 연속해서 투명도 레이어를 추가할 때마다 투명도 렌더링 비용이 점점 더 많이 들기 때문입니다.
이 문제의 발생 여부 및 발생 위치를 잘 파악하는 데 도움이 되도록, 언리얼 엔진에는 셰이더 복잡도(Shader Complexity) 모드라는 특수한 뷰 모드가 있습니다. 셰이더 복잡도 모드는 주어진 표면의 렌더링 복잡도를 컬러를 통해 표시합니다. 녹색이 진하게 보일수록 렌더링 비용이 저렴하고, 빨간색이 진하게 보일수록 해당 프레임의 렌더링 비용이 많이 듭니다. 다음 단계를 따라 셰이더 복잡도 뷰 모드를 활성화합니다.
-
셰이더 복잡도(Shader Complexity) 를 활성화하려면 에디터 뷰포트 상단에서 뷰 모드(View Mode) 옵션을 클릭합니다. 기본적으로 뷰 모드는 라이팅포함(Lit) 으로 설정되어 있습니다.
-
컨텍스트 메뉴에서 셰이더 복잡도 옵션을 선택합니다.
-
셰이더 복잡도 뷰 모드를 활성화한 후 레벨 뷰포트는 아래 영상과 같습니다.
영상에서는 카메라가 레벨의 투명한 스피어 주변을 회전할 때 오버드로가 극명하게 나타납니다. 모든 스피어가 나란히 표시되어 있을 때는 오버드로가 없고 뷰포트의 대부분 영역이 녹색입니다. 6개의 스피어가 모두 동일한 시선에 있을 때는 가장 많이 오버랩되는 영역이 오버드로를 나타내는 밝은 빨간색으로 바뀝니다. 모든 오버드로를 제거하는 것은 100% 가능하지도 않고 바람직하지도 않지만, 이 뷰 모드는 퍼포먼스 문제가 발생할 가능성이 있는 위치를 정확하게 알아내려고 할 때 매우 유용합니다.
반투명 정렬 우선순위
씬에 여러 투명 오브젝트가 서로 가까이에 있으면 엔진이 오브젝트를 다른 투명 오브젝트 앞에서 렌더링할지, 뒤에서 렌더링할지 결정하는 데 있어 문제가 발생하기도 합니다. 다음 예시는 위의 머티리얼과 시작용 콘텐츠의 릿 스팀 VFX를 사용하여 이 문제를 직접 보여줍니다.
처음에는 스팀이 메시 앞에서 렌더링되더니, 갑자기 각 스피어 뒤에서 튀어나오는 것을 볼 수 있습니다. 이러한 현상을 방지하려면 연기 VFX가 항상 씬의 다른 반투명 오브젝트 위에서 렌더링되도록 반투명 정렬 우선순위(Translucency Sort Priority) 를 설정해야 합니다. VFX의 반투명 정렬 우선순위 를 변경하려면 다음 단계를 따릅니다.
-
먼저 레벨의 다른 모든 반투명 오브젝트 위에서 렌더링하려는 하나 이상의 오브젝트를 선택합니다. 이 경우에는 VFX 파티클 시스템을 선택합니다.
-
디테일 패널에서 렌더링(Rendering) 섹션으로 이동한 다음 고급(Advanced) 서브카테고리를 펼칩니다.
-
새 옵션 목록에서 반투명 정렬 우선순위 를 찾아 값을 100 으로 입력합니다.
기본적으로 레벨에 추가되는 모든 요소의 반투명 정렬 우선순위 값은 0입니다. 어떤 투명 오브젝트가 항상 다른 모든 투명 오브젝트 위에서 그려지게 하고 싶다면 양수를 사용합니다. 어떤 투명 오브젝트가 항상 다른 모든 투명 오브젝트 뒤에서 그려지게 하고 싶다면 음수를 사용합니다.
-
이제 씬에서 스팀 VFX를 확인해 보면, 반투명 정렬 우선순위 가 100으로 설정되어 있어, 스팀이 항상 다른 반투명 오브젝트 위에서 그려집니다.
-
반투명 정렬 우선순위 를 -100으로 설정하면 스팀이 항상 다른 반투명 오브젝트 뒤에서 그려집니다.
반투명 정렬 우선순위 를 조정하여 레벨의 정렬 문제를 해결할 수 있지만, 게임플레이 중 이펙트 또는 오브젝트 스폰 시 새로운 정렬 문제를 일으킬 수도 있습니다. 따라서 어떤 반투명 정렬 우선순위 값을 어디에 사용할지 정의해 두는 것이 좋습니다. 예를 들어, 모든 스폰 이펙트의 반투명 정렬 우선순위 값이 100이라고 가정하면 레벨에서 정렬 문제가 발생하는 경우 레벨의 오브젝트 반투명 정렬 우선순위 를 최대 99까지의 값으로 조정하면 됩니다. 이렇게 하면 레벨 내 오브젝트의 반투명 정렬 우선순위 와 관계없이 스폰된 게임 이펙트가 항상 다른 모든 오브젝트 위에 렌더링됩니다.
결론
투명도는 3D 프로젝트에 생동감을 불어넣어 줄 수 있는 매우 강력한 툴입니다. 하지만 퍼포먼스에 영향을 미치기 쉬우므로, 리플렉션을 사용하는 투명 오브젝트의 수를 가능한 한 최소한으로 유지하려고 노력해야 합니다. 마지막으로, 셰이더 복잡도 모드를 에디터에서, 그리고 게임플레이 중에 정기적으로 확인하여 투명도 오버드로를 최저 수준으로 유지해야 합니다.