2012년 6월 11일 월요일

Unity, 널 사랑하지만 너의 UV만은 용납할 수 없다


요즘, 사랑에 빠졌습니다. 이름도 깔삼한 Unity입니다. 처음으로 '아~ 이것보다 뛰어난 놈은 못만들겠구나'라고 생각이 든 엔진이라죠. 물론 이유는 에디터가 너무 좋아서입니다. 그 전에 섹시한 언리얼 양을 볼때도 '뭐, 이정도 쯤이야 나도 언제나 만들 수 있지' 하고 생각했었는데 유니티양 앞에선 무릎을 꿇었답니다.

근데 며칠전에 은근 짜증나는 면을 발견했죠.. 바로 유니티의 UV좌표계.

보통 전(그리고 다른 그래픽 프로그래머들도 아마..?) 텍스쳐에 UV 좌표계를 다음과 같이 입힙니다. 왼쪽위(0,0), 오른쪽아래(1,1)로요.

(0,0)        (1,0)                 
  +-----+-----+
  |     |     |
  |     |     |
  +-----+-----+
  |     |     |
  |     |     |
  +-----+-----+
(0,1)        (1,1)

이렇게 좌표계를 대입하면 UV 좌표계가 텍스처 메모리 레이아웃과 일치한다는 장점이 있지요. 따라서 UV좌표를 기반으로 텍스처 조작(texture manipulation)을 하면 매우 직관적이고 쉽습니다. UV좌표를 써서 텍스처의 일부를 복사해내는 게 그 좋은 예겠죠.

근데, 유니티 양은 뭔 이유에선가 UV좌표를 좀 다르게 매핑합니다. 왼쪽아래(0,0) 오른쪽위(1,1)로요.. 즉 위아래가 뒤집힌 현상.. -_-


(0,1)        (1,1)                 
  +-----+-----+
  |     |     |
  |     |     |
  +-----+-----+
  |     |     |
  |     |     |
  +-----+-----+
(0,0)        (1,0)


무엇이라!? 왜 이따위로 사는거야!? 철썩~ -_-;;; 이 따위로 UV좌표를 매핑해놓은 수학책이 분명 있습니다. 하지만 이렇게 해서 얻는 실용적인 이익을 도무지 떠올릴 수가 없네요. 때로는 저희 렌더링 프로그래머들이 그냥 특정한 표기법에 익숙하다는 이유로 잘못된 결정을 내리는 경우가 있습니다. 이것도 그런 경우라고 생각합니다.

만약 제가 간과한 장점이 있다면 제발 알려주세요. 제가 사랑하는 유니티 양을 매도하고 싶진 않습니다. 하지만... "전통적으로 그래왔으니 이 방법이 맞아." 따위의 논의는 삼가해주시기 바랍니다.

댓글 14개:

  1. 뭐랄까.. 오픈GL이 수학적 표기법을 준수해만든 이유는
    '이게 더 보편적으로 알아먹기 쉽겠지?' 라고 생각해서이지 않을까요? (물론 처음에)
    흔히 DB의 자료들은 '표(테이블)'로 정리되는데 사실 그 원리와 출발은 수학적 관계데이터모델(릴레이션)이잖아요? (그 이전엔 그레프라던가..)
    그렇기 때문에 컴퓨터는 수학을 바탕으로 만들어졌지만 '컴퓨터 사이언스'가 필요한게 아닐까 생각해 봤습니다..ㅋ

    답글삭제
    답글
    1. 몰라요.. 복잡해요.. 미워요.. 흑흑 -_-

      삭제
  2. 저는 OpenGL을 기반으로 한 3D 응용개발을 해서 그런지 uv 좌표계보단 일명 st 좌표계(윗 글에서 아래 그림)가 더 익숙 합니다.
    음... 그런데 uv 좌표계가 그런 장점이 있었군요.

    답글삭제
    답글
    1. 아아 아랫놈은 st좌표계라 부르는군요.. 유니티는 uv라고 부르면서도 저꼴이에요 흑흑.. 미워요 -_-;

      삭제
  3. 거의 대부분의 DCC툴에서 위와같은 '뒤집힌' 좌표계를 쓰고 있어요.
    이게 st좌표계라고 부르는줄은 첨 알았네요.
    아티스트들에서 익숙한 좌표계는 st좌표계이네요.
    ㅎㅎ

    답글삭제
    답글
    1. 아티스트가 직접 작업한건 별 문제가 없습니다.. 프로그래밍적으로 뭔가를 할때만 문제일뿐... 유니티는 프로그래밍 적으로 뭐할때에도 st를 강요해요 흐윽....

      삭제
  4. 아 저는 OpenGL로 시작해서 이런 좌표계는 처음 보았습니다. :)

    답글삭제
    답글
    1. 생각보다 OpenGL만 쓰시는 분이 많으시군요... 전 둘다 해서... 둘 중에서 맘에 드는것만 골라 씁... (아 줏대 없는 프로그래먼가.. 흐윽.. -_-)

      삭제
  5. 저도 아무생각없이 짜다보니 좌표계가 우읭?! 하고 놀랐던 기억이 나네요.

    레퍼런스나 가이드는 그래서 꼼꼼하게 읽어야 하나 싶네요.ㅠㅠ

    답글삭제
    답글
    1. 머 우읭~? 하고 놀라면 그때 읽으시면 됩니다.. 귀찮게 언제 그런걸 꼼꼼히.....

      삭제
  6. 디자이너입니다. 3dsmax에서 unity 와 동일한 좌표계를 씁니다........
    저도 opengl es2.0 기반의 엔진으로 개발할적에 프로그래머가 텍스쳐가 뒤틀린다고해서 알아보니 맨위에 표기한 좌표법을 사용하더군요 그뒤에 프로그래머에게 다시한번 저희엔진의 좌표계에 대한 설명을 이해하고 texture export시 상하 반전 스크립을 만들어서 export 했던 기억이 납니다.

    답글삭제
  7. 게다가 생각해 보니 그 DX식 좌표계 자체가 OGL과 선을 긋기 위해서 MS가 독자노선으로 도입했다는게 주된 설 아니었던가요.....

    답글삭제
    답글
    1. 그게 무슨 상관이죠...? 설사 그렇다 쳐도 dx의 방식이 갑자기 나쁜게 되고 OpenGL방식이 좋은게 되는것도 아닌데...

      (이 글하곤 정혀 상관 없지만 궁금해하실거 같아서 알려드립니다. 실제 DX 좌표계가 왜 그렇게 되었는지에 대해서는 몇년전에 DX개발자가 비디오를 통해 밝혀놓은게 있습니다. 그리고 DX 좌표계가 정립된건 MS사 이전의 일로 압니다. 마소사는 단지 DX를 개발하던 회사를 샀을 뿐이죠)

      삭제
  8. 블로그 관리자가 댓글을 삭제했습니다.

    답글삭제