본문 바로가기
vfxai 잡학지식 vfxai 잡학지식

디퓨즈 텍스처가 너무 하얘 렌더가 뜰 때: PBR 알베도 값 범위 확인

vfx 잡학지식 읽는 시간 약 7분

디퓨즈 텍스처를 연결했는데 모델이 하얗게 떠 보이면 조명부터 낮추고 싶어집니다. 하지만 재질 색 자체가 너무 밝은지, 조명과 노출이 강한지부터 나눠야 합니다. 실제 물체의 반사율과 셰이더 입력은 같은 수치일까요?

이때 알베도 값 범위를 확인하면 재질 문제를 먼저 걸러낼 수 있습니다. 이 글은 비금속의 확산 반사 입력을 중심으로 실물 참고값과 셰이더 기준을 구분합니다.

1. 실물 반사율과 디퓨즈 입력을 먼저 구분합니다

실물의 알베도는 표면에 들어온 빛 가운데 되돌아간 비율을 나타냅니다. 실제 물체에서 측정한 값에는 확산 반사뿐 아니라 정반사 성분도 함께 포함될 수 있습니다.

셰이더의 diffuse albedo는 렌더러가 확산 반사 계산에 사용하는 입력입니다. 따라서 실물의 총반사율을 diffuse 입력에 그대로 옮기면 안 됩니다. 이 글에서 다루는 표는 범위를 감 잡기 위한 실물 참고값이지, 셰이더에 그대로 복사할 숫자가 아닙니다.

실물 물체물리적 알베도
숯약 0.04 (4%)
새 아스팔트약 0.04 (4%)
낡은 아스팔트약 0.12 (12%)
맨흙약 0.17 (17%)
잔디약 0.25 (25%)
사막 모래약 0.40 (40%)
새 콘크리트약 0.55 (55%)
바다 얼음약 0.50~0.70 (50~70%)
새 눈약 0.80~0.90 (80~90%)

표의 값은 선형 기준의 실물 알베도입니다. Sébastien Lagarde는 이 값에 정반사 성분이 일부 포함되므로, diffuse color는 표의 값보다 조금 낮아야 한다고 설명합니다.

sRGB 코드값을 선형 입력으로 착각하지 않습니다

텍스처 파일의 8비트 sRGB 코드는 셰이더가 계산하는 선형 Base Color와 같은 숫자가 아닙니다. 채널 코드값을 0~1로 정규화한 값을 c라고 하면, c ≤ 0.04045일 때는 Clin=c/12.92, 그보다 클 때는 Clin=((c+0.055)/1.055)2.4로 변환합니다. 아래 값은 R=G=B인 중성 회색의 sRGB 8비트 코드값과 선형값을 W3C 변환식으로 계산한 예입니다.

sRGB 8비트 코드정규화 코드값선형값
1280.5020.216
1880.7370.503
2400.9410.871
2490.9760.947

그래서 sRGB 128을 선형 0.5로 읽으면 실제보다 밝게 해석하고, 선형 0.5는 sRGB 코드 약 188에 해당합니다. 툴이 파일의 sRGB를 이미 선형으로 디코딩했다면 다시 변환하지 않습니다. 이 환산은 중성 회색의 예시이며, 실제 유색 재질의 RGB 세 채널은 각각 따로 계산해야 합니다.

2. 너무 밝은 Base Color는 조명 균형을 흐립니다

비금속 알베도가 높아지면 표면은 들어온 빛을 더 많이 확산 반사합니다. 간접광을 여러 번 계산하는 장면에서는 밝은 표면이 되돌려 보내는 빛도 주변 표면에 영향을 줄 수 있습니다.

같은 Three.js 환경광과 직접광에서 선형 Base Color 0.95와 0.50을 비교한 PBR 구형 재질 렌더
Three.js 0.160 MeshStandardMaterial에서 선형 Base Color만 0.95와 0.50으로 바꾼 비교입니다. 카메라·재질 거칠기·방향광·반구광·출력 설정은 같습니다. 이 직접광·환경광 비교에는 경로 추적에 의한 간접 반사광 번짐을 넣지 않았습니다.

그 결과 재질 사이의 밝기 차이가 약해지거나, 조명을 낮춰야만 재질이 원하는 색으로 보이는 상황이 생길 수 있습니다. 문제는 화면의 흰색 그 자체보다 재질과 조명의 균형이 어긋나는 데 있습니다.

다만 알베도가 높다고 항상 하이라이트가 클리핑되는 것은 아닙니다. 클리핑은 노출과 톤매핑을 포함한 출력 단계의 영향도 받으므로, 재질 입력과 출력 잘림은 따로 점검합니다.

3. PBR 알베도 값 범위는 파이프라인 기준으로 봅니다

OpenMoonRay의 PBR Validity 문서는 diffuse albedo의 물리적으로 타당한 기준으로 RGB 중 최댓값 0.032~0.87을 제안합니다. 0.032보다 낮거나 0.87보다 높은 값은 이 검증 기준의 범위를 벗어납니다.

여기서 최댓값은 빨강·초록·파랑 중 가장 큰 채널을 뜻합니다. OpenMoonRay의 기준은 모든 렌더러가 따라야 하는 절대 한계가 아니라, 그 파이프라인의 확산 재질 입력을 점검하는 권장 범위입니다. 셰이더와 검증 도구가 다르면 기준도 달라질 수 있습니다.

반대로 값이 지나치게 낮으면 diffuse 반사와 간접광이 부족해 재질이 너무 어둡게 보일 수 있습니다. 조명으로 이를 보상하면 직접광이 과해질 수 있으므로, 먼저 재질 값과 라이팅을 분리해 봅니다.

따라서 새 눈의 실물 알베도가 0.80~0.90이라는 이유만으로 diffuse 입력에 0.90을 넣는 것은 적절하지 않습니다. 실물 값에는 정반사가 섞일 수 있고, 검증 범위는 셰이더의 확산 입력을 대상으로 하기 때문입니다.

4. 디퓨즈 텍스처가 하얗게 뜰 때 점검 순서

  • Base Color를 분리합니다. 조명 결과가 아니라 텍스처나 알베도 출력을 먼저 봅니다.
  • 최종 셰이더 입력을 확인합니다. 텍스처 보정이나 리맵 뒤에 값이 얼마나 바뀌는지 확인합니다.
  • RGB 최댓값을 비교합니다. 사용하는 렌더러의 검증 기준과 실제 재질 참고값을 함께 봅니다.
  • 조명과 노출은 따로 조정합니다. 재질 입력을 확인한 뒤에도 장면이 밝으면 라이팅과 출력 변환을 점검합니다.
  • 표면 재질에 맞춰 되돌립니다. 사진에 구운 하이라이트나 그림자를 알베도 값으로 보정하지 않습니다.

텍스처에서 최종 입력값을 확인하는 순서

  • 텍스처 노드의 색공간을 확인합니다. sRGB 이미지인지, 이미 선형으로 관리되는 이미지인지 먼저 구분합니다.
  • 코드값을 선형화합니다. 8비트 sRGB라면 채널 코드를 255로 나눈 뒤 위 변환식을 적용합니다. 색관리 툴이 이미 선형화했다면 파일 코드값으로 되돌아가지 말고 셰이더 입력을 읽습니다.
  • 최종 Base Color를 확인합니다. 색 보정·곱셈·리맵 노드 뒤의 입력을 봅니다. 원본 파일만 보고 판단하면 실제 값과 다를 수 있습니다.
  • 범위와 출력을 나눠 점검합니다. 대표 텍스처 영역과 RGB 최댓값을 렌더러 기준에 대조하고, 조명·노출·톤매핑은 재질값과 분리합니다.

Maya에서 텍스처가 어떤 값으로 해석되는지 함께 확인하려면 Maya Color Space 설정 글을 참고합니다. 금속 영역은 diffuse albedo와 다른 입력으로 다루므로, 메탈릭 재질의 Base Color와 반사 환경을 다룬 글에서 별도로 확인할 수 있습니다.

알베도 값 범위는 화면 밝기가 아니라 재질의 반사 특성을 기준으로 판단합니다.

참고 자료

vfx 잡학지식

함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.