알라딘MGG와이드바


NDC 2010 전형규, “마비노기2 캐릭터 렌더링 기술”, 안태훈 옷을 입어봅시다-BSP를 활용한 의상 조합 시스템, 김재석, “패킷 지옥으로부터 탈출” 개발 이야기

NDC10 (Nexon Developer Conference, May 2010) 첫 날 후기입니다.
발표자료가 거의 잘리는 거 없이 올라오고 있기 때문에, 추가 내용이나 PT 에서 빠진 내용만 약간 추가합니다.
많이 배우고 갑니다. 고마워요.

전형규, “마비노기2 캐릭터 렌더링 기술” #

  • [http]PT 자료
  • Object Motion-Blur : Lost Planet
  • VTF 스키닝(Vertex Texture Fetch Skinning) : [http]Skinned Instancing, Nvidia [http]Source Code
  • ATI 의 ?R2VB 스키닝 : Renter To Vertex Buffer Skinning ([http]R2VB Animation, ATI) [http]참고
  • Demo
    • Demo 용 마비노기2 '실험녀' 캐릭터가 애니메이션 하는 순간을 pause 해서 실제로 Object Motion Blur 를 하고 있음을 보여줌
    • VT Lighting 쓰는 걸 보여주기 위해 실시간으로 구형 라이트를 박는 걸 보여줬음
  • 요약 : PT 가 훌륭하기 때문에 딱히 추가할 내용이 많이 없었음. 샘플코드까지 보여주는 대인배 정신에 감동.

?안태훈 옷을 입어봅시다-BSP를 활용한 의상 조합 시스템 #

  • [http]PT 자료
  • 기본적으로는 NDC 2007 영웅전 진선웅님의 '자유도 높은 코스춤' 과 맥략이 비슷(하다고 발표자가 얘기함)
  • 즉, '잉여 폴리곤은 자르고, 스냅 포인터로 양쪽 옷 사이의 벌어져 있는 vertex 를 합쳐준다(조인다)' 가 중심인 듯.
  • 영웅전에서는 Clip Plane 을 사용했고, 마비노기 2 에서는 그걸 BSP 로 썼다는 얘기인 듯 한데, 어떤 점이 더 좋아졌는지 사실 잘 감이 오지 않았음
  • 어떤 옷이 어떤 옷을 덮을 것인가에 대해서는 재질, 말단 폭등을 보고 결정하는데, 이거는 (아마도 데이터로 빼 놓은) table 로 관리하는 듯.
  • 장점 : 표현 가능 의상 개수 증가
    • 영웅전에서는 3D Max 용 plug-in 이 있어서 artist 가 옷을 잘라낼 평면을 지정할 수 있다고 함.
    • 디버깅 렌더로 지원한다고 하는데, 이게 마비노기2(이하 M2)에만 들어갔다고 한 거 같기도 하고...
  • 단점
    • 레이어드 스타일이나 롱치마 + 롱부츠 같은 조합이 골치 아프다고
    • 옷에 붙어있는 장식물 처리도 곤란. 결국 마비노기1 처럼 하드데이터 코딩 기법도 혼용한다고 한 듯.
    • 스냅 주위 vertex 를 합치면 texture 가 늘어나기 때문에 보기 안 좋다.
    • 이렇게 자르고, 조이는 작업을 매번 랜더링 할 때마다 하기 때문에 속도가 나지 않는다.
      • 캐릭터당 (평균?) 58 ms 가 걸린다고.
    • 이 부분은 최적화 가능할 거 같다고 함.
    • 얼굴 모자부분은 이 방식으로 도저히 해결이 안 되어서 다른 방법을 썼다고 하는데, '모자를 씌워봅시다' 라는 비공개 세션이라 들을 수 없었다. 아쉽.

김재석, “패킷 지옥으로부터 탈출” #

  • [http]PT 자료
  • [http]Red Gate's .NET Reflector 같은 거 쓰면 disassemble 쉽다
  • .NET 3.0 의 WCF 영향 받았다.
  • 제대로 이해한 건지 모르겠지만, .NET assembly DLL 파일을 컴파일한 후에, 해당 DLL 를 reflector 로 disassemble 한 후 패킷용 구조체를 확인해 lookup 을 만들어서 다시 한 번 DLL 를 빌드한다고 한 듯
    • 그리고, C++ 용 static 함수가 들어있는 .h, .cpp 파일도 이 시점에 같이 생성한다고(30페이지)
  • 목적
    • 최적화와 생산성을 같이 추구
    • 코드가 자동생성 -> '버그 생길 가능성' + '최적화를 캘 수 있는 여지'를 줄일 수 있다고.
  • 단점
    • DLL 깨먹을 때가 문제 -> ?InvalidProgramException 예외 발생하기 쉽다.
    • reflector 가 항상 믿을 수 있는 것도 아니라고
    • 문서, 자동화 커버, 로그, 예외처리 부족
      • imays 님 발표에서 나온 얘기처럼 라이브러리를 개발한 쪽에서는 그걸 사용하는 사람이 실수를 하더라도 그걸 알 수 있도록 로그를 남기는 과정이 꼭 필요할 듯.
  • Q : .NET C# 으로 서버 작성했을 때의 문제가 어떤게 있었는가?
    • A : dangling pointer 가 없어지는 장점이 분명 있다. 하지만, 구현이 쉽다보니 오히려 메모리 leak 찾기가 어려워지는 것 같은 점도 있다. GC구현은 .NET 에 되어 있기 때문에 GC 친화적인 최적화(stack 에 value object 로 생성 같은)가 필요한데 .NET 에 익숙하지 않은 개발자들은 처음에 이 부분에서 어려움을 겪는 듯 한다. Java 같이 GC 를 제어할 수 있는 여지가 많은 언어가 더 좋은 거 같기도 하다.
  • Q : (실제로 이걸 쓰고 있는 개발자인듯) skeleton 코드 생성기 때문에 오히려 생산성이 떨어진다는 생각도 드는데 어떻게 생각하는가?
    • A : Needs 를 파악해서 계속 개선해 나가겠다.

핑백

덧글

댓글 입력 영역


Yes24위대한게임의탄생3

위대한 게임의 탄생 3
예스24 | 애드온2