jobGuid 꽃미남 프로그래머 "Pope Kim"님의 이론이나 수학에 치우치지 않고 실무에 곧바로 쓸 수 있는 실용적인 셰이더 프로그래밍 입문서 #겁나친절 jobGuid "1판의내용"에 "새로바뀐북미게임업계분위기"와 "비자관련정보", "1판을 기반으로 북미취업에 성공하신 분들의 생생한 경험담"을 담았습니다. 3ds Max를 사용해서 게임용 3D 캐릭터를 셋업하는 방법
이를 위해 오랜 실무를 경험해 온 저자의 고급 노하우들이 공개
위 내용은 GameDevForever의 저자분들의 홍보를 위하여 운영진 자체적으로 올린 광고이며 일체의 수익이 없습니다.(밥좀사줘요~)
Posted by 김포프

요즘, 사랑에 빠졌습니다. 이름도 깔삼한 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좌표를 매핑해놓은 수학책이 분명 있습니다. 하지만 이렇게 해서 얻는 실용적인 이익을 도무지 떠올릴 수가 없네요. 때로는 저희 렌더링 프로그래머들이 그냥 특정한 표기법에 익숙하다는 이유로 잘못된 결정을 내리는 경우가 있습니다. 이것도 그런 경우라고 생각합니다.


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






댓글을 달아 주세요

  1. Favicon of http://blog.naver.com/conaman 백승지 2012.06.10 06:23 신고  댓글주소  수정/삭제  댓글쓰기

    Unity엔진의 이런 부분이 저도 많이 혼란스러웠던 기억이 나네요~
    좌표계는 DirectX의 왼손 좌표계를 사용하면서 UV설정 같은 경우는 OpenGL을 따르고 있으니 말입니다. 어짜피 OpenGL 기반으로 처음에 개발되었다면 모든 것을 OpenGL의 방식을 따랐어도 덜 헷갈렸을텐데 말입니다.

    • Favicon of http://gamedevforever.com 김포프 2012.06.10 07:34 신고  댓글주소  수정/삭제

      OpenGL이 바로 수학적 표기법을 따랐다가 혼돈릏 엄청 주는 대표적인 API죠.. 특히 행렬표기법과 행렬을 저장 하는 내부 메모리 레이아웃을 보면.. 쯔압 -_-;

  2. Favicon of http://cafe.naver.com/jcga 도플광어 2012.06.10 10:31 신고  댓글주소  수정/삭제  댓글쓰기

    저도 오픈지엘쪽을 주로해왔지만...말씀하신부분은 현대적( 적절한표현인지 모르지만...?!)이지 못한 부분이 좀있죠^^;

  3. 대마왕 2012.06.10 12:55 신고  댓글주소  수정/삭제  댓글쓰기

    우와 저도 저것땜에 한번 뒤집어지는 줄 .. ;;; 근데 3d max 도 저러더라고요????!?

    • Favicon of http://gamedevforever.com 김포프 2012.06.10 13:08 신고  댓글주소  수정/삭제

      제 기억에 맥스는 -1부터 0이었던걸로 생각하는데.. 0부터 -1이던가.. 뭔가 음수가 들어갔어요. .저도 이것때문에 뒤집혀서.. 오토데스크에 막 뭐라 한 기억이...

    • Favicon of http://gamedevforever.com 대마왕J 2012.06.10 14:56 신고  댓글주소  수정/삭제

      엣 그랬던 겁니까? UVW 에디터 그림은 그런 모양이던데... 궁시렁궁시렁

    • Favicon of http://gamedevforever.com 김포프 2012.06.10 15:04 신고  댓글주소  수정/삭제

      네 아마 -1~0이 맞을거에요.. 왜냐하면 그대로 쓰면 엔진에서 문제가 없었거든요. 텍스처 래핑 모드가 wrap으로 되서.. .근데 그걸 clamp로 하면 갑자기 싹 사라지더라구요. .그게 0이하여서 -_-;

      스페이스마린에서 블러드 맵 입힐때 UV를 좀 주물러줘야 했는데 이거때문에 좀 이상하게 억지로 넣었죠..

      아니면 UV0은 0~1인데 UV1이 -1~0이었을수도 있어요.. 자세한건 격이 안남.. 뭔가 문제가 있었다는것만 ㅎㅎㅎㅎㅎ

  4. Favicon of http://lunapiece.net Lyn 2012.06.10 13:03 신고  댓글주소  수정/삭제  댓글쓰기

    1사분면을 사용하는군용...

    근데 사실 비트맵도 그렇고 (...) XNA 도 그렇고 1사분면 좌표를 사용하는놈이 꽤 되던 ...

  5. 테드 2012.06.13 16:14 신고  댓글주소  수정/삭제  댓글쓰기

    저도 유니티식 좌표계를 사용합니다만...
    다른 이유 없구요.
    OpenGL의 기본 설정 그대로 인 이유는 이유가 되지 않을 듯 하구요.
    게임 엔진이라는게 수학 + 기술의 합체(?)이기 때문에
    데카르트 좌표계를 그대로 활용하고... (다른 사분면은 음수로 바뀌죠)
    1사분면에서 다른 수학적 함수들과 그대로 일치하기 때문입니다.

    • 테드 2012.06.13 16:18 신고  댓글주소  수정/삭제

      지금은 유니티를 사용하지만
      예전에는 직접 만들어 가며 사용했었죠.
      게임도 만들고 이미지 프로세싱도 했었는데...
      초기에는 비트맵(윈도우)좌표계 그대로 사용 하여
      다른 수학 함수들을 사용하면 매우 혼란스러웠죠.
      예를들어 사인 함수를 적용할때 비트맵과 화면의 y가 서로 반대라는거...
      골때리더군요.
      5년전부터는 UV원점을 데카르트 좌표계, 화면 좌표계, 비트맵 좌표계를 모두 좌하로 맞췄습니다.
      그뒤로 혼란이 사라지더군요.

    • Favicon of http://gamedevforever.com 김포프 2012.06.14 13:02 신고  댓글주소  수정/삭제

      영상처리쪽이라면 그럴법 하지만... 게임쪽에서 텍스처에 수학공식을 사용해야할 일이 그렇게 많나요?

      저는 오히려 그것보단 메모리 layout에 의존해서 바꿔야할일이 더 많았는데 말이죠... 텍스처 짜르기, 텍스처 붙이기 등등...

  6. 진우 2012.12.07 15:42 신고  댓글주소  수정/삭제  댓글쓰기

    마야는 아래쪽 그림이네요 ㅎㅎ
    전 마야유저라 행복함
    아 참고로 유니티 좌표계나 인터페이스가 마야랑 거의 똑같은거 같네요

    • Favicon of http://gamedevforever.com 김포프 2012.12.30 05:41 신고  댓글주소  수정/삭제

      오픈쥐엘 좌표계인가보군요.. 실제 유니티 개발자하고도 말해봤는데.. 처음엔 유니티는 OpenGL만 지원해서 그랬는데... 나중에 DX도 지원하면서 본인들도 모두다 DX좌표계로 바꿀려고 했었다는군요. 그게 상식에 맞으니까......

      근데 이젠 모바일에서 OpenGL ES까지 지원하면서 OpenGL방식으로 그대로 가는게 낫지 않을까 해서 두고 있다는....

  7. Favicon of http://moonausosigi.net 문어소시지 2013.10.19 23:37 신고  댓글주소  수정/삭제  댓글쓰기

    아 어쩐지.......데이터를 잘못 읽었나 싶었는데 뒤집어져 있었군요 -_-;;;



티스토리 툴바