TECHARTNOMAD | MAZELINE.TECH

TECH.ART.FLOW.IO

[번역] UE5에서 성능 좋은 서브서피스 옥(翡翠) 표현하기

jplee 2026. 5. 24. 00:14

저자: 낙월만강수

안녕하세요. 오랜만에 글을 씁니다. 오늘은 성능을 거의 잡아먹지 않는 방식으로 UE5에서 ‘서브서피스(SSS) 느낌’의 옥(翡翠) 재질을 만드는 방법을 공유하려고 합니다. 예전에도 비슷한 효과를 다룬 글을 한 번 쓴 적이 있는데 그때 방법에는 치명적인 문제가 있었습니다. 저는 깊이(Depth) 기반 시뮬레이션을 썼는데, Depth는 반투명에서만 제대로 동작하는 데다, 당시에는 모델을 한 겹 더 쌓아 올리는 방식까지 겹쳤습니다. 그래서 시선 거리(카메라 거리)에 따라 깊이 값이 달라져 고정된 결과를 만들 수 없고, 특정 위치에서만 예쁘게 보이는 문제가 있었습니다.

이번에는 비슷한 발상으로 ‘깊이’가 아니라 두께(Thickness) 를 시뮬레이션해서 해결해 보겠습니다.

1. 두께(Thickness) 시뮬레이션

제가 쓴 방식은 WorldPosition(세계 위치)에서 어떤 고정 위치까지의 거리를 구하는 것입니다. 즉 WorldPosition과 사용자가 지정한 위치 사이에 Distance를 계산하고, 값의 범위(레인지)와 그라데이션 범위를 조절하면 됩니다.

중요한 점: WorldPosition을 그대로 쓰지 말고, Local Position(로컬 위치)로 변환해서 계산해야 합니다. 그렇지 않으면 모델의 월드 위치가 바뀔 때 두께 값도 같이 변해 버립니다.

기본 두께 노드

기본 두께의 1차 결과

여기까지 하면 앞면에만 두께 정보가 나오고, 뒷면에는 나오지 않습니다.

뒷면에 두께 정보가 없음

다음은 뒷면을 한 번 더 계산해 주면 됩니다. 아주 간단합니다. 커스텀 위치를 반대로(예: x, y를 반전. z는 저는 양수를 유지) 한 번 더 Distance를 계산한 뒤, 앞면 계산 결과와 Min으로 최소값을 취하면 됩니다.

뒷면 두께 계산을 추가한 노드

뒷면에도 두께가 생김

이제 뒷면 두께도 생겼지만, 결과가 아직 완벽하지 않습니다. 계산의 중심을 물체의 중심으로 옮겨야 하므로, 커스텀 위치의 z 값을 움직여 조정해야 합니다.

z를 이동한 뒤 앞면 결과

z를 이동한 뒤 뒷면 결과

양쪽이 제대로 나오면, 그 위에 Beer’s Law(람베르트-비어 법칙) 를 하나 얹어줍니다. 이건 예전에 SSS 글을 쓸 때 戴巍 선배가 제안해 준 방식인데, 이번에도 추가해 보겠습니다. 관심 있는 분은 검색해 보시면 됩니다. 이 노드를 추가한 후 파라미터를 약간 조정하면 아래처럼 나옵니다.

Beer’s Law 노드 추가

Beer’s Law 적용 결과

확실히 더 투명하고 ‘통과광’ 느낌이 강해지죠. 두께 계산은 여기서 마무리입니다.

2. 메인 라이트와의 간단한 상호작용

우리는 Emissive(자발광)을 쓰는 방식이라, 일단은 메인 라이트와 제한적으로만 상호작용할 수 있습니다. 여기서는 SkyAtmosphere의 조도 값인 SkyAtmosphereLightIlluminance를 사용합니다. 이 값에는 하늘 대기의 광색강도가 들어 있습니다.

옥 자체의 색이 조명 색 변화에 맞춰 약간 변하도록, 이 값을 그대로 가져와 기존 색에 곱해 주면 됩니다. 다만 채도를 조금 낮추고, 최대 밝기는 제한해 주는 편이 좋습니다. 결과는 아래와 같습니다.

메인 라이트 영향 추가

메인 라이트 영향이 들어간 결과

3. ‘고빙(高冰)’ 계열 옥 효과

고빙(투명도가 높은) 옥은 ‘찰기 있는’ 옥보다 가장 큰 차이가 가장자리 투명감입니다. 프레넬(Fresnel)로 가장자리 효과를 만들 수는 있지만 방향이 원하는 대로 나오지 않을 수 있습니다.

그래서 저는 메인 라이트 방향과 버텍스 노멀 방향의 Dot을 사용했습니다. 결과는 아래와 같습니다.

메인 라이트 방향 × 노멀 Dot 결과

우리가 원하는 건 검은 부분(역광 면) 이 밝아지는 것(즉, 뒷광이 하이라이트처럼 보이게 하는 것)입니다. 그러면 통과광 느낌이 생깁니다.

역광 면 하이라이트 노드 추가

역광 면 하이라이트 결과

이렇게 하면 고빙 계열 옥 느낌이 거의 완성됩니다.

4. 모바일 성능 최적화

성능 얘기를 하자면, 눈치 빠른 분들은 BaseColor에 색이 없다는 걸 이미 보셨을 겁니다. 즉, 조명이 있는 모드에서 제가 실제로 쓰는 건 Roughness 정도입니다.

더 성능을 아끼고 싶다면 조명 자체를 버리고, Cubemap으로 반사를 흉내낼 수도 있습니다.

Cubemap 반사

Cubemap 반사 결과

마지막으로 4가지 효과의 성능 비교입니다. 왼쪽부터 순서대로:

  • 조명 없음 + 하이라이트 없음
  • 조명 없음 + 하이라이트 있음
  • 조명 있음 + 하이라이트 없음
  • 조명 있음 + 하이라이트 있음

최종 4종 결과

셰이더 복잡도

최종 노드(분해)

최종 노드(조합)


원문

(73 封私信 / 30 条消息) 如何在UE5中做出性能极佳的次表面翡翠 - 知乎