2012년 1월 25일 수요일

디테일맵과 감마보정에 대한 뻘쭘 경험담


디퓨즈 맵에 디테일 맵을 곱하는 방법은 텍스처 타일링으로 인해 발생하는 반복패턴을 숨길 때 사용할 수 있는 좋은 방법입니다.

스페이스 마린을 제작하는 도중에도 아티스트의 요청에 따라 이런 일을 하는 쉐이더를 만든 적이 있는데요. (스페이스 마린에 들어가는 쉐이더는 거의 전부 제가 작성했음... Shader Guy = Pope 였다는...).  그 때 제가 사용했던 블렌딩(?) 공식은 다음과 같았습니다.


디퓨즈맵 * 디테일맵 * 2

마지막에 2를 곱해준 이유는 디퓨즈 맵보다 밝은 색을 만드는 것이 가능하게 하기 위해서였죠. (이게 없으면 쉐이더에서 구해오는 텍스처맵의 범위는 0 ~ 1(0~100%)이기 때문에 디퓨즈맵을 어둡게 만드는 효과밖에 없습니다.) 따라서 아티스트가 디테일맵을 50%  회색(0.5)으로 칠하면 최종결과는 디퓨즈맵의 색과 같게 됩니다.

이 방법이 한동안 아무 무리 없이 작동했었는데.. 그 후에 렌더링 엔진을 "감마 친화적"으로 만들면서 좀 이상해졌습니다. 텍스처를 읽어올 때 하드웨어 자체에서 sRGB 변환을 켜줬는데, 실수로 디테일맵을 읽어올 때도 자동변환 기능을 켜버린 거죠.... 그리고 한 두달이 지나는 동안 이 새로운 쉐이더를 이용한 몇몇 아트들이 탄생했죠.


이 쯤되서 기술력 위주의 아티스트 한 명이 디테일 텍스처의 값을 0.5로 설정하면 최종결과가 디퓨즈맵의 색보다 어두워진다는걸 발견했습니다.... 아뿔싸.... 그 이유는 하드웨어에서 자동으로 sRGB -> Linear 변환을 사용한 결과 저희 공식이 이따위가 되었기 때문이지요.


{ (디퓨즈맵 ^ 2.2) * (디테일맵 ^ 2.2) * 2 } ^ (1/2.2)

0.5에 2.2 제곱을 하면 이 값이 0.25 보다도 작아지기 때문에 여기에 2를 곱해도 50프로보다도 더 어두워지기 때문.... 고치는 건 간단했습니다. 디테일맵을 읽어올때 자동 sRGB 변환을 꺼줬죠. 이래서 블렌딩 연산이 다음과 같이 되었습니다.

{ (디퓨즈맵 ^ 2.2) * 디테일맵 * 2 } ^ (1/2.2)

훨 낫죠?

이제 쉬운건 끝났고.. 그 다음은 아티스트들에게 지난 한두달 동안 이 쉐이더를 이용해서 만든 아트들을 다시 고쳐달라고 할 차례였죠. 뭐, 그리 무리한 요구는 아니였습니다. 지난 한 두달간 새로 만든 아트가 몇 안되었거든요. 디테일맵을 고치는 방법은 매우 간단했습니다.
  1. 포토샵에서 디테일 맵을 연다.
  2. 메인 메뉴에서 Image > Adjustment > Exposure를 선택한다.
  3. gamma를 0.454545(1 / 2.2와 같음)로 정해준다.
  4. OK를 누른다.
하지만 이번에는 시각위주의 아티스트가 디테일맵 대신 디퓨즈맵을 바꾸고 싶다고 하더군요. 디테일맵의 감마를 고쳐주니까 너무 어둡게 보여서 작업하는데 힘드시다고... 기존에 있던 디퓨즈맵을 새로운 공식에 맞게 고칠 수 있는 방법을 알려달라더군요. 위에서 디테일맵을 간단히 바꿀수 있었듯이... 그래서 곰곰히 생각해봤는데 수학적으로 옳게 변환을 할 수 있는 방법이 딱히 안떠오르더군요. 그래서.... '직접 눈으로 결과를 확인하시면서 변환을 하셔야 할 것 같네요. 죄송합니다~'라고 해드릴 수밖에 없었던 일이 있습니다.

뒤돌아보면 이게 수학적으로 옳은 것이 아티스트의 삶을 좀더 평안하게 만들 수 있었던 흔치않던 경우라고 생각하는데요... 뭐 불행히도 디퓨즈맵을 변환하는 공식을 찾을 수 없었으니... 제가 멍청한 건지도 모르지만 일단 불가능하다고 생각...

혹시 이거 할 수 있는 공식 아시는분은 연락주세요 ^^


댓글 11개:

  1. 음... 저도 디테일맵은 위의 방법으로 처리했는데, 아직 실전(?)에는 사용하지 않아서, 몰랐는데, 밑의 방법으로 테스트 좀 해봐야겠네요. ㅎㅎ.
    아티스트는 포토샾에서 감마가 적용된 상태로 색을 맞춰주는 거람? 음....

    답글삭제
    답글
    1. 지금 보니까, 저도 디테일맵은 감마를 적용하지 않았는데, 기억을 더듬어 보니까, 감마를 적용했더니, 수학적이고 나발이고, 생각했던 색상이랑 좀 달라서, 그냥 그렇게 적당히 해놓은 듯 하네요. ㅜㅜ

      삭제
    2. 훗.. 저만 개판이 아니었군요.. 기뻐요... 와락~

      삭제
  2. 안녕하세요. 쉐이더 입문강좌를 행복하게 보고 있습니다.
    특별한 건 아니구요. 제가 머리가 나빠 강좌를 반복해서 여러 번 읽어 보고 있습니다.
    그러다 보니 이전 편 보기, 다음 편 보기 링크를 자주 이용하고 있는데 이 링크를 누르면 해당 페이지의 끝(댓글이 있는 부분)으로 이동합니다. 그래서 다시 매 번 위로 스크롤한 후에 봐야 합니다.
    저만 그런지 궁금합니다.
    참고로 사용환경은 Win7 Sp1 + IE9 (9.0.8112.16421) 입니다.

    다시 한번 좋은 강좌에 감사합니다.

    답글삭제
    답글
    1. 정말 그러네요? IE에서 하니 그래요. 크롬에선 괜찮은데.. 제 생각에는 blogger.com에서 새로운 댓글 기능 넣으면서 문제가 생긴게 아닌가 싶은데요.. 솔직히 이 새로운 댓글 시스템이 너무 좋아서... 좀 불편하시더라고 잠시만 참고 써주세요 ^_^.. 화면 나와서 젤 아래로 가면 곧바로 home키를 누르면 젤 위로 가요 -_-;;;;

      구글에서 하는 서비스니까 조만간 고쳐줄거에요.. 저도 고쳐달라고 요청해놓을께요~ ^_^

      삭제
  3. 마지막 문단을 보니 수학에 대해서 뭔가 억하심정 같은게 있으신건가 싶기도 한데... -ㅅ-;;
    일단 '수학적으로 옳은 것' 보다는 '물리적으로 옳은 것'이 의미론적으로는 말씀하시는것에 가까운 것 같긴 하네요.

    여튼, CG 역사적으로, 수학/물리적으로 옳은 것이 아티스트들을 편하게 한 경우는 흔치 않은게 아니라 대부분이라고 보는게 가깝다고 봅니다. 가령 volume rendering, 흔히 말하는 physically based rendering, 좀 더 포괄적인 의미로 global illumination 속에서는 전부 물리적인 분석과 증명을 통해 CG 과정을 최대한 사용하기 쉬운 형태로 바꾸었고, 덕분에 그걸 디자이너가 일일이 그리지 않고 신경 쓰지 않아도 사실적인 렌더링이 가능했었죠.
    (단편적인 예로는 GI의 경우에, 이런 수학/물리적인 렌더링이 불가능하던 시절 직접 디자이너들이 가상의 간접 조명을 달아서 조절했었다죠. 매 씬마다.. -_-;;; 지금도 어느정도는 (연출등을 이유로) 이런게 필요하지만 예전보다는 디자이너의 손이 훨씬 덜 가고 더 좋은 결과물을 얻을 수 있죠.) 예시야 좀 더 들 수 있지만 여기까지....

    뭐, 그건 그렇고, 포토샵에서 기본적으로 sRGB 저장을 해주던데 켜나 꺼나 달라지는게 없어서 삽질 좀 했었는데, 원인을 알게 되서 좋은 정보가 되었습니다.
    앞으로 삽질을 좀 더 해봐야 제대로 이해가 될 부분들이 많아서 다시 손대보기 두렵지만요;;;;

    답글삭제
    답글
    1. 사람들이 지각하는 리얼리티(perceived reality)가 실제 리얼리티하고 많이 달라져놔서... (영화업계 덕분인듯...)수학적인 올바름을 고집하다가 오히려 아티스트들의 창의성 및 능률을 떨어뜨리는 경우를 많이봐서요. 거기에 대한 우려가 깊죠. 스페이스 마린 만드는 도중에도 그런 perceived reality 때문에 수학적으로 매우 올바르게 잘 돌던 놈을 일부로 고장낸적이 좀 있다죠.. ㅎ 그 결과로 아티스트들이 매우 편하게 작업했다는...

      개인적으로는 수학을 매우 사랑하죠. 인생의 중대한 결정은 다 수학공식으로 결정하는지라........ ㅡ.ㅡ

      GI 같은 경우도 전 오히려 수학적인 올바름을 적당히 포기한 덕에 이제서야 좀 쓸만한 놈이되었다고 봐요. 5년전 쯤에 처음으로 GI를 만들어써볼일이 있었는데 오프라인 프로세싱에 걸리는 시간만 거의 하룻밤이라 아티스트 이터레이션이 너무 어려웠던 격이 있지요. 같은 맥락에서 Beast도 enlighten에 서서히 밀려나가는듯

      수학이 그래픽을 발전시켜나가는건 사실이에요. 때로는 한 반 정도만 옳은게 실제 소비자가 원하는 결과를 만드는데 제일 좋은 결과를 만드는데 도움이 된다고 생각할뿐....

      삭제
  4. 물론 언제나 정도의 차이를 가능해야하는 상황은 존재하죠. 제가 말씀드린 사례와 정확하게 반대가 되는 사례도 사실 얼마든지 찾을 수 있을꺼고...... (그러니까 수학/물리적인걸 무시했더니 더 좋아지더라.)

    결국 무조건 사실적일 필요는 없다는게 언제나 항상 따라다니는 전제조건이죠. 그게 없다면 NPR같은건 존재 가치도 없고, 그랬다면 Pixar같은 회사도 없었을테니까요. 사실적인것과 비사실적인 것의 조화가 중요한거고, 게임에서도 비슷하게, 퀄리티와 속도(작업 속도 포함)과의 적절한 비율이 중요할 것이구요.

    뭐, 보는 관점마다 다르겠지만, enlighten이나 crytek 의 GI 방식은 실시간으로 가능하게 해주지만, 저는 이것이 '수학(물리적인것)을 포기한 것'이라고 보지 않습니다. 저는 오히려 수학(물리)적인것을 유지한채 최대한 빠르게 하려고 한 '수학의 승리-_-ㅋ' 쯤으로 보고 있습니다. (단편적으로 보면 crytek의 GI 방식은 기본적인 이론 측면에서 봤을 때 전통적인 GI 방식보다 '수학적으로' 훨씬 더 어렵지요.)

    마지막 문맥은 십분 공감합니다. 소비자(혹은 디자이너)가 원하는걸 만들어주는게 실질적인 목표지요. 그걸 위해서 수학과 물리적인 것을 쓰느냐, 아니면 그냥 삽질을 통해서 될때까지 해보느냐, 혹은 적절히 섞느냐는 개발자의 몫이구요.

    답글삭제
    답글
    1. 물론 언제나 정도의 차이를 가능해야하는
      ->
      물론 언제나 정도의 차이를 가늠해야하는

      삭제
    2. 아참, 그 GOW3의 근사를 이용한 조명 방식, 참 인상적이었습니다.
      물리적인 올바름을 포기하고 가상의 방식을 사용했는데, 수학적으로 무척 꼼꼼하게 신경써서 진행했더라구요.

      이 경우 저는 수학적인 유도에 매력을 느낄 것이고, 포프님은 물리적인 것을 포기한것에 대해 매력을 느끼지 않을까 싶다는 생각이 듭니다. 뭔가 같은걸 다르게 바라보는 느낌ㅎㅎ

      삭제
    3. 그런거 같네요. 똑같은걸 다르게 해석하는...

      GOW3 발표할 때 그 강의실에 있었는데 approximation 함수를 찾으려고 되게 노력헀더라구요. 그걸 가지고 수학적으로 옳지 못하고 뭐라하는 사람들에 대한 우려였을뿐... 수학적으로 틀리게 무조건 가잔 건 아니였어요.

      (심지어 저희 스페이스마린에서 쓴 오렌 네이어 근사치를 가지고 수학적으로 틀려서 안된다는 식으로 까는 골빈애도 있었죠... 정작 매의 눈을 가진 아티스트들도 차이점을 못느꼈는데요.. ㅎㅎ)

      삭제