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

직접 찍은 HDRI로 조명했는데 그림자가 약하다면: 태양이 잘린 HDRI와 브라케팅 스톱 수

vfx 잡학지식 읽는 시간 약 16분 조회 2

직접 찍은 HDRI로 CG를 비췄는데 그림자가 흐리게 번진다면, HDRI 세기를 올리기 전에 HDRI 태양 클리핑부터 확인하세요. 촬영한 날은 분명 쨍한 맑은 날이었습니다. HDRI를 열어 보면 하늘에 해도 떠 있습니다. 그런데 렌더는 흐린 날처럼 나옵니다. 물체 아래 그림자는 옅고, 화면 전체가 조금 푸르스름합니다.

이럴 때 원인은 대개 해가 파일에 실제보다 훨씬 약하게 저장된 것입니다. 그림자의 진하기는 해와 하늘이 바닥에 보내는 빛의 비율이 정합니다. 그렇다면 해는 하늘보다 몇 스톱 밝게 담겨야 그림자를 제대로 만들까요? 이 질문의 답이 곧 브라케팅을 몇 스톱 찍어야 하는지의 답입니다.

순서는 다섯 단계입니다. 잘린 해가 그림자를 지우는 이유, 내 HDRI가 잘렸는지 확인하는 법, 해가 하늘보다 몇 스톱 위에 있어야 하는지, 촬영할 때 몇 스톱을 어떻게 찍는지, 이미 찍은 HDRI를 살리는 법입니다.

HDRI 태양 클리핑 렌더 비교: 언클립 HDRI는 진한 그림자, half EXR 저장본은 옅은 그림자, 하늘 +12스톱에서 잘린 HDRI는 그림자가 거의 없음
같은 장면, 같은 HDRI 세기에서 해를 저장한 상한만 바꿔 Blender Cycles로 계산한 렌더입니다. 실제 촬영본이 아니라 맑은 날 수치로 만든 HDRI입니다. 해가 바닥 빛에서 차지하는 몫은 같은 HDRI를 적분해 구했습니다.

1. HDRI 태양 클리핑이 그림자를 지우는 이유

사진에서 하늘이 하얗게 날아간 적이 있을 겁니다. 나중에 노출을 내려도 구름 결은 돌아오지 않고 평평한 회색만 남습니다. 센서가 담을 수 있는 상한을 넘은 값이 모두 같은 값으로 잘려 저장된 것, 이를 클리핑이라고 부릅니다.

HDRI도 같습니다. 여러 노출을 합쳐 HDRI를 만들 때, 해의 진짜 밝기는 해가 하얗게 날지 않은 사진이 한 장이라도 있어야 남습니다. 가장 어두운 장에서도 해가 하얗다면 병합한 HDRI에도 해의 진짜 값은 없습니다. 해는 그 장이 담을 수 있던 상한에서 잘려 평평한 원반으로 저장됩니다. 위치는 맞지만 밝기가 턱없이 모자란 해입니다.

이 차이가 그림자로 나타나는 과정은 단순합니다. 바닥의 양지에는 해와 하늘이 함께 빛을 보냅니다. 그림자 속에는 해가 가려져 하늘만 빛을 보냅니다. 해가 맡는 몫이 크면 두 곳의 차이가 커져 그림자가 진해집니다. 해가 잘려 몫이 줄면 하늘이 빛의 대부분을 맡습니다. 그러면 양지와 그림자 속의 밝기가 비슷해지고, 렌더는 흐린 날처럼 보입니다. Poly Haven도 해를 제대로 담지 못한 맑은 날 HDRI는 어둑한 흐린 날 같은 조명을 만든다고 설명합니다.

색도 함께 바뀝니다. 세 채널이 모두 상한에 닿으면 픽셀은 흰색이 됩니다. 색이 강한 광원은 한두 채널만 먼저 잘려 색이 남을 수도 있습니다. 해의 따뜻한 색이 사라지고 남은 빛의 대부분이 파란 하늘에서 오면 렌더 전체가 푸르게 기울 수 있습니다. 맨 위 비교 이미지의 아래 칸이 위 칸보다 푸른 이유입니다. 금속이나 유리에 비친 해 하이라이트도 같은 이유로 흐려집니다. 금속이 아예 검게 나온다면 원인이 다르니 메탈릭 재질과 HDRI 반사 환경 글부터 보세요.

맨 위 비교 이미지에서 하나 더 눈여겨볼 곳이 있습니다. 세 칸의 그림자 속 바닥은 밝기가 거의 같습니다. 달라진 것은 양지 쪽입니다. 이 단서는 3장에서 다시 꺼내겠습니다.

여기서 많은 사람이 떠올리는 해결책이 있습니다. 그림자가 약하면 HDRI 세기를 올리면 되지 않을까요?

잘린 HDRI의 세기를 4배로 올린 렌더와 언클립 HDRI 렌더 비교: 세기를 올려도 그림자는 옅은 그대로
하늘 +12스톱에서 잘린 HDRI의 세기를 4배(2스톱)로 올렸습니다. 화면은 밝아졌지만 그림자는 그대로 옅고 푸릅니다. 아래는 세기 1의 언클립 HDRI입니다.

올려도 그림자는 돌아오지 않습니다. 세기(Strength, Intensity, Exposure)는 HDRI의 모든 픽셀에 같은 수를 곱합니다. 잘린 해와 하늘이 같은 배수로 커지니 둘의 비율은 그대로입니다. 세기는 밝기를 바꾸고, 해와 하늘의 비율은 그림자를 정합니다. 그림자를 돌려놓으려면 비율을, 즉 해의 값을 바꿔야 합니다. 그렇다면 먼저 내 HDRI의 해가 정말 잘렸는지부터 가려야 합니다.

2. 내 HDRI의 해가 잘렸는지 1분 안에 확인하는 법

가장 빠른 방법은 노출을 내려 가며 해를 보는 것입니다. HDRI를 32bit로 읽는 뷰어면 됩니다. Nuke의 Viewer, Blender의 Image Editor, Photoshop의 32비트 노출 슬라이더 어느 것이든 좋습니다.

  1. 해가 화면 가운데 오도록 HDRI를 확대합니다.
  2. 노출을 몇 스톱씩 내립니다. 하늘이 검게 사라진 뒤에도 계속 내립니다.
  3. 해 원반이 하얀 덩어리에서 색과 형태를 가진 작은 원반으로 풀리면 언클립입니다.
  4. 원반이 풀리지 않고 그대로 무채색 회색 판으로 어두워지면 잘린 것입니다.
HDRI 노출 내리기 테스트: 언클립 해는 -17스톱에서도 따뜻한 원반이 남고, 잘린 해는 -14스톱에서 회색 원반으로 어두워짐
맨 위 비교에 쓴 HDRI의 해 주변을 노출만 바꿔 계산했습니다. 잘린 해는 -14스톱에서 이미 회색 판이 되고, 언클립 해는 -17스톱에서야 흰색이 풀리며 따뜻한 색이 남습니다. 실제 사진이면 해 주변의 번짐이 줄며 원반이 작아지는 모습도 함께 보입니다.

숫자로도 볼 수 있습니다. 뷰어의 픽셀 값 읽기로 해 원반 한가운데와 해에서 먼 맑은 하늘의 값을 각각 읽습니다. 해 값을 하늘 값으로 나눈 뒤 2를 밑으로 하는 로그를 취하면, 해가 하늘보다 몇 스톱 위에 저장됐는지 나옵니다. 이 숫자가 3장에서 다룰 기준보다 작으면 그림자가 약할 수밖에 없습니다.

그런데 촬영을 제대로 했는데도 해가 잘릴 수 있을까요? 저장 단계에서 그런 일이 생깁니다. 반정밀도(half float) EXR이 담을 수 있는 가장 큰 값은 65504입니다. Unity의 HDRI 제작 가이드는 해처럼 밝은 광원이 이 값을 넘으면 half로 저장하는 순간 잘릴 가능성이 높다고 경고합니다. 하늘을 1 근처에 맞춘 HDRI라면 맑은 날 해는 그보다 훨씬 위에 있습니다. 맨 위 비교의 가운데 칸이 바로 그 경우입니다. 촬영은 언클립이어도 half로 저장하면 그림자 대비가 절반 아래로 줄었습니다.

피하는 방법은 두 가지입니다. 32bit float로 저장하거나, 저장 전에 HDRI 전체 노출을 내려 가장 밝은 값이 65504 아래로 오게 합니다. 노출을 통째로 내리면 해와 하늘의 비율은 바뀌지 않으니 조명 결과는 같고, 쓸 때 세기만 다시 올리면 됩니다. half와 32bit의 차이는 32bit Float 이미지 글에 정리했습니다. 이제 처음 질문으로 돌아갈 차례입니다.

3. 해는 하늘보다 몇 스톱 위에 담겨야 하나

해가 엄청나게 밝아야 하는 이유는 크기에 있습니다. 해의 시직경은 약 0.53도입니다. 하늘 전체와 비교하면 아주 작은 점입니다. 해가 머리 위에 있어도 바닥을 비추는 효과로 따지면 해 원반은 하늘의 약 4만 6천분의 1 크기입니다. 해가 기울면 빛이 바닥에 비스듬히 닿아 효과가 더 줄어듭니다. 그 작은 점이 하늘 전체만큼 바닥을 비추려면 값이 그만큼 커야 합니다.

맨 위 비교에 쓴 HDRI로 계산해 보면 이렇습니다. 맑은 날 해가 직접 비추는 조도를 약 10만 럭스, 맑은 하늘의 평균 휘도를 약 5,400cd/m²로 두었고, 해 고도는 45도입니다. 이 조건에서 해 원반이 바닥을 하늘만큼 비추려면 하늘 평균의 약 6만 5천 배가 필요합니다. 스톱으로는 약 16스톱입니다. 실제 해는 하늘의 약 27만 배, 약 18스톱 위에 있습니다.

해 원반은 하늘보다 16스톱 위에 담겨야 겨우 하늘만큼 바닥을 비추고, 맑은 날 실제 해는 약 18스톱 위에 있습니다.

그래서 해를 하늘 +12스톱에서 잘라도 그림자는 거의 사라집니다. 12스톱이면 꽤 넓은 범위처럼 들리지만, 16스톱 문턱에 4스톱이나 모자랍니다. 해 고도가 20도에서 70도 사이라면 이 문턱은 약 15.6~17스톱으로 크게 움직이지 않습니다.

HDRI에 저장된 해의 상한해가 바닥 빛에서 차지하는 몫그림자가 양지보다 어두운 정도
하늘 +8스톱0.4%거의 0스톱(그림자 없음)
하늘 +12스톱6%0.09스톱
half EXR 상한 65504(약 +16스톱)49%1.0스톱
언클립(약 +18스톱)80%2.3스톱
맨 위 비교의 HDRI를 적분한 값입니다. 해 고도 45도, 수평 바닥 기준입니다. 실제 그림자 속은 물체가 하늘 일부도 가려 이보다 조금 더 어둡습니다.

1장에서 심어 둔 단서를 꺼내 보겠습니다. 세 렌더의 그림자 속 밝기가 같았던 이유는 그림자 속을 비추는 것이 하늘뿐이기 때문입니다. 하늘은 셋 다 잘리지 않았습니다. 클리핑이 빼앗은 것은 양지에 떨어지던 햇빛뿐입니다. 그래서 잘린 HDRI는 그림자가 밝아진 것이 아니라 양지가 어두워져 그림자가 사라집니다. 아래에서 해 고도와 저장 상한을 바꿔 직접 확인해 보세요.

맑은 날 실제 해를 하늘보다 18스톱 위로, 하늘은 고르게 밝다고 단순화한 계산입니다. 실제 하늘은 해 주변이 더 밝아 숫자가 조금 달라집니다.

4. HDRI 브라케팅은 몇 스톱, 어떻게 찍나

답이 나왔으니 촬영으로 옮길 차례입니다. 그런데 Poly Haven의 장비 글에는 12EV 범위면 거의 어디서든 HDRI를 찍을 수 있다는 기준이 있습니다. 3EV 간격 5장이나 2EV 간격 7장이면 되는 범위입니다. 앞에서 12스톱으로는 모자란다고 했는데, 둘 중 무엇이 맞을까요?

둘 다 맞습니다. 대상이 다를 뿐입니다. 12EV는 해를 뺀 환경, 즉 하늘·구름·건물·그늘을 담는 범위입니다. 같은 저자는 해 촬영 글에서 맑은 날 해는 카메라의 가장 어두운 설정(1/4000초, F22, ISO 100)에서도 하얗게 날아간다고 씁니다. 그래서 맑은 날 HDRI는 환경과 해를 따로 찍습니다. 몇 장을 찍느냐보다 가장 어두운 장이 해를 담았느냐가 기준입니다.

첫째, 환경 브라케팅입니다. ISO와 조리개는 고정하고 셔터 속도만 바꿉니다. 가장 밝은 장은 평소 적정 노출보다 1~2스톱 밝게, 가장 어두운 장은 해 말고 가장 밝은 곳(해 근처 하늘, 흰 구름)이 하얗게 날지 않을 때까지 내립니다. 찍을 장수는 범위를 간격으로 나눈 뒤 1을 더합니다. 12스톱을 3스톱 간격으로 찍으면 5장입니다.

둘째, 해 브라케팅입니다. 렌즈 앞에 ND 필터를 끼워 셔터만으로는 못 가는 어두운 노출을 만듭니다. 해가 들어간 방향 한 곳만 따로 찍으면 됩니다. 파노라마 전체를 진한 ND로 찍으면 한 장에 수십 초씩 걸리기 때문입니다.

출처카메라 기준해에 쓴 감광
Poly Haven(How to Shoot the Sun)1/4000초, F22, ISO 100최소 12스톱 ND, 1/4000초~30초를 약 2EV 간격으로 10장
Poly Haven(Camera Gear)최고 셔터 1/8000초14스톱 감광
Unity HDRI 가이드1/4000초, f/8, ISO 100ND1000+ND500, 약 19스톱(구름 없는 해 기본값)
조리개가 다르면 필요한 ND도 달라집니다. F22는 f/8보다 약 3스톱 어두워, 같은 해를 담는 데 ND가 그만큼 덜 듭니다. 숫자를 그대로 복사하지 말고 아래 순서로 내 장비에서 정합니다.
  1. 해를 화면 가운데에 둡니다. ND 필터와 홀더가 화각 가장자리를 가립니다. Unity 가이드 기준으로 필터 한 장이면 화각이 약 124도, 두 장이면 약 110도로 줄어듭니다.
  2. 가장 빠른 셔터에서 ND를 하나씩 더합니다. 미리보기에서 해가 하얀 덩어리가 아니라 작은 원반으로 보이고 주변 번짐이 사라질 때까지입니다. 해는 화면에서 너무 작아 히스토그램으로는 잘 안 보입니다.
  3. 그 ND를 낀 채로 셔터를 늘려 가며 브라케팅합니다. 가장 밝은 장이 환경 브라케팅의 가장 어두운 장과 겹치면 범위가 이어집니다.
  4. 쓴 ND의 스톱 수를 적어 둡니다. 필터 정보는 RAW 메타데이터에 남지 않습니다. 병합할 때 이 값으로 해 사진과 파노라마의 노출 차를 맞춥니다.

병합은 Poly Haven 방식이 따라 하기 쉽습니다. 파노라마와 해 사진을 각각 병합한 뒤, 해 사진에 ND까지 포함한 노출 차를 보정해 파노라마 위에 올립니다. 그리고 해 원반만 마스크로 남깁니다. ND 필터는 색이 끼거나 표시된 스톱과 실제 감광이 다를 수 있습니다. 컬러 차트를 함께 찍어 보정하면 안전합니다. 다 합친 뒤에는 2장의 노출 내리기 테스트를 다시 해서 해가 풀리는지 봅니다.

이렇게 찍으면 맑은 날 야외 HDRI의 전체 범위는 20스톱을 쉽게 넘습니다. HDRI 작가 Jorgen은 해가 있는 장면을 ND 해 브라케팅까지 더해 찍고, 완성본이 20~30EV 범위가 된다고 밝힙니다. 해가 하늘보다 약 18스톱 위에 있고, 그 아래로 그늘과 어두운 곳까지 담아야 하니 자연스러운 숫자입니다.

현장에서 한 번 더 확인하고 싶다면 조도계를 씁니다. Unity 가이드는 카메라 위치에서 조도계를 위로 향해 조도를 재고, 완성한 HDRI에서 계산한 위쪽 반구 조도와 맞춰 HDRI를 실제 밝기로 보정합니다. 이 절차는 절대 휘도 보정법을 응용한 점검입니다. 맑은 날 측정값보다 HDRI 쪽 조도가 크게 모자라면 해 클리핑을 의심해 볼 수 있지만, 조도 차이만으로 클리핑을 확정할 수는 없으니 노출 스케일도 확인하세요. 해가 잘리면 바닥 빛의 큰 몫이 빠질 수 있습니다.

5. 이미 찍은 HDRI의 해가 잘렸다면

가장 정확한 해결은 해를 다시 찍는 것입니다. 같은 장소, 같은 시각의 해를 다시 찍을 수 없다면 해를 라이트로 따로 둡니다. 실시간 엔진에서도 HDRI의 해를 지우고 같은 방향에 디렉셔널 라이트를 두는 방식이 흔합니다.

  1. HDRI에서 잘린 해 원반을 주변 하늘 색으로 지웁니다. 남겨 두면 대체 라이트와 빛이 겹쳐 그림자가 두 겹으로 생길 수 있습니다.
  2. 해 방향에 평행광을 둡니다. Blender의 Sun, Maya·Houdini의 Distant Light입니다. 방향은 HDRI에서 해가 있던 위치에 맞춥니다. Blender라면 가장 밝은 지점을 찾아 Sun을 정렬해 주는 무료 애드온 HDRI Sun Aligner도 있습니다. 공개된 v1.6 릴리스 노트에는 Blender 4.0에서 테스트했다고만 적혀 있으니, 더 새 버전에서는 호환성을 먼저 확인하세요.
  3. 각도 크기는 실제 해에 맞춰 약 0.53도로 둡니다. 그림자 경계의 부드러움은 이 값이 정합니다. 밝기와 경계가 왜 다른 문제인지는 광원 크기와 그림자 글에서 다뤘습니다.
  4. 세기는 눈대중보다 플레이트에 맞춥니다. 실사 플레이트에 합성한다면 선형 작업 공간에서 같은 바닥의 양지와 그림자 속을 샘플합니다. 그림자 속은 하늘만 비추니, 렌더의 양지÷그림자 비율이 플레이트의 비율과 같아질 때까지 Sun 세기를 올립니다. 샘플하는 방법은 접지 그림자와 그림자 밀도 맞추기 글에 있습니다.

다만 이것은 진짜 해의 값을 되살린 것이 아니라 근사입니다. Jorgen도 해를 브러시로 칠해 넣거나 렌더한 해를 붙인 HDRI는 언클립 HDRI가 아니라고 선을 긋습니다. 대신 라이트로 분리한 해는 방향과 세기를 샷마다 조절할 수 있다는 장점이 있습니다. 실사 합성에서는 오히려 이쪽이 다루기 편할 때도 있습니다.

정리: HDRI 그림자가 흐리면 해의 스톱부터 봅니다

그림자의 진하기는 해와 하늘이 바닥에 보내는 빛의 비율이 정합니다. 해가 잘린 HDRI는 이 비율이 무너져 흐린 날처럼 비추고, 세기를 올려도 비율은 그대로입니다. 노출을 내려 해가 풀리는지 보고, 해 값이 하늘보다 몇 스톱 위인지 읽으세요. 촬영할 때는 12EV 환경 브라케팅과 별도로 ND를 낀 해 브라케팅을 찍고, 저장은 32bit로 하거나 최댓값을 65504 아래로 맞춥니다.

해와 하늘의 비율이 그림자를 정하고, 그 비율을 지키려면 해는 하늘보다 약 18스톱 위에 담겨야 합니다.

참고 자료

vfx 잡학지식

함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.