메가 스플래팅 (Mega Splatting) - KGC2010 Game develop

오늘 KGC2010에서 "메가 스플래팅" 세션을 듣고 왔지요. 바로 적용 해볼 수 있는 유용한 팁을 얻은 것 같습니다. 강연자분께서 바로 발표자료를 올려주셨네요. 

링크 : 메가 스플래팅 (Mega Splatting) - KGC2010 발표 by 노동진

솔직히 처음에는 초큼 실망이였습니다. "메가 스플래팅"이라길래 저는 존 카멕 아저씨의 "메가 텍스쳐"를 이야기 하는 줄 알았더랬지요. 하지만 반전이였어요. 강연자분이 개량하신 스플래팅 기법의 네이밍이더군요. 게다가 초반에는 터레인 텍스쳐링의 역사를말씀하시고 "메가 스플래팅"은 꼴랑 한장에 업급되더군요. 다른 세션 들으러 갈까 하고 잠깐 흔들렸습니다.
그러나 실망은 잠시였습니다.
저희 엔진은 원경의 패치는 미리 구워놓은 통맵으로 랜더링 해서 비용을 절약하고 있습니다. 하지만 노동진님은 이 방식을 삽질사례#2로 편입시키고,  꽤 좋은 아이디어를 말씀해주시더군요.

한마디로 간략하게 하자면, 멀리 있는 패치( DP호출하는 단위 묶음. 각가 이를 칭하는 용어가 다른데 저는 이렇게 부르는게 편합니다;;)부분은 매번 스플래팅으로 그리는게 아니고 랜더 타겟에 스플래팅으로 한번 랜더링 하고 그 결과를 매번 가져다 써서 비용을 절약한다는 것입니다. 멀리 있는 것일수록 해상도는 낮게 하구요.  

한가지 우려되는 것은 랜더 타겟 생성 및 삭제 관리를 어떻게 하느냐였습니다. 패치 단위로 랜더 타겟을 보유하고 있고, 시야에 들어 올 시점에 타겟을 생성하고, 시점 반경에서 멀어지면 타겟을 삭제하는 등의 행위가 필요할텐데, 이 과정이 느리지는 않을까 말이죠. 강연자분은 그 과정이 우려하는 만큼 시간이 걸리지는 않는다더군요.
얼마나잘 관리하느냐가 관건일 것 같습니다만 설사 문제가 된다 하더라도, 케릭터가 열심히 달리기만 하는 경우는 살짝씩 프레임이 떨어져도 큰 문제가 없지 않을까 싶기도 해요. 전투중의 이동은 패치 디테일이 크게 변할 일이 없을테니까요. 아, 카메라 회전은 있겠네요.
아이디어가 복잡하지도 않고 기존 랜더 파이프를 크게 바꾸지 않고 적용을 해 볼수 있을 것 같으니 저도 한번 적용해서 테스트 해 봐야지 싶습니다.


핑백

덧글

  • charmzine 2010/09/16 14:21 # 삭제 답글

    드래곤볼 온라인 개발 당시 같은 내용을 리서치 한 적이 있습니다.
    랜더타겟 캐쉬 시스템(?) 같은 걸 하나 만들어 쓰시면 좋습니다.

    1. 프로스텀 안에 섹터 들어오면 타겟 생성.
    2. 캐쉬에 타겟 해상도가 생성되어 있으면 사용. 없으면 생성.
    3. 캐쉬는 시간의 흐름이나 비디오 메모리 사용량에 따라 삭제.

    드래곤볼 온라인은 해당 내용을 적용하진 못했지만 비디오 메모리와 프레임 중에 선택해야 했고, 저사양이라 비디오 메모리를 선택했지요... 노동진씨의 강연을 들으면서 참 재미 있었습니다. 노동진씨가 사용하신 해상도 정하는 방법을 사용한다면 비디오 메모리도 최적화하여 사용 할 수 있었는데... 아쉽네요.
  • 오즈라엘 2010/09/16 14:28 #

    오오 다른분들도 생각 해보셨던 아이디어군요. 저두 한번 적용해서 테스트해보고 결과가 좋으면 말씀 드리겠습니다 ㅎㅎ 언제가 될런지는 모르겠지만요;;;
  • forour 2010/09/17 00:19 # 답글

    안녕하세요. 메가스플래팅을 발표했던 사람입니다.
    강연 들어와 주셔서 감사합니다.

    charmzine님이 말씀하신 것처럼, 저 역시 CreateTexture() 랑 Delete하는 것은 여전히 큰 문제가 안된다고 생각합니다.
    프러스텀을 벗어나자 마자, 생성된 통맵을 제거하는게 아니라, 계속가지고 있습니다.
    통맵이 일정시간 이상 사용이 안되거나, 비디오 메모리가 부족할 때, 삭제하게 됩니다.
    따라서, 카메라가 회전되도, 그때마다, CreateTexture()를 할 필요는 없습니다.

    초반에 배경 부분 설명을, 재밌다고 하시는 분도 있고, 다 아는 얘기라는 분도 있어서, ^^; 뺄까 말까 고민도 했었습니다.
  • 오즈라엘 2010/09/17 15:56 #

    들려주셔서 감사합니다. 강연 정말 잘들었습니다 :-)

    저희 엔진은 원경의 섹터는 1024 or 2048 크기의 통맵 하나를 사용해서 랜더링 합니다. 그래서 스플래팅 섹터와 통맵 섹터의 퀄리티 경계가 두드러지는 것( 데모로 보여주시면서 해상도 threshold를 잘못 설정 한 예를 보여주신 것 처럼요)이 맘에 안들던 참이였는데, 메가 스플래팅이 어느정도 해결을 많이 해 줄것 같습니다.
    저희 경우 통맵 영역은 텍스쳐 하나를 사용하니 섹터들을 DP콜 시 상태 변화 없이 뿌리고있습니다. 메가스플래팅 방식이면 섹터 당 텍스쳐 셋팅이 필요해서 상태 변화가 통맵 방식보다 잦아질 것 같은데, 이로 인한 성능 차이가 어떠하시던가요?

    아직 닥친일 해결하느라 실험을 못해보고 생각나는대로 질문 드렸네요 죄송합니다.
    시간 될때 메가스플래팅 적용해보면서 의문점 있으면 질문 더 드리겠습니다. 잘 부탁드립니다 굽신굽신
댓글 입력 영역


smallBanner

longBanner

rightSmallBanner

mobile

트위터큰거