Voxel Horizon – 복셀 오브젝트에 변형이 일어날 경우 Light-map 갱신 이전의 깜빡임 방지하기

1. 복셀 오브젝트가 로켓을 맞고 뽀개지면 삼각형 데이터를 다시구성. 라이트맵 계산을 위한 패치데이터도 다시 구성.
2. 새로운 패치 데이터에 라이트맵을 다시 계산해서 써넣어야함.
3. 그런데 라이트맵 계산은 멀티스레드로 일괄적으로 처리함.
4. 유휴시간에 처리하므로 적어도 1프레임동안 라이트맵이 갱신되지 않고 어떤 라이트값이 들어가게 될지 모름.
5. 그래서 깜빡임 발생.

[해결책]

    1. 변형된 오브젝트에 대해 즉시 라이트맵을 다시 계산.
      • 그림자가 드리워지려면 KD-Tree를 탐색해서 월드의 삼각형들에 대해 ray intersection체크를 해야되는데 맵이 복잡해지면 겁나 느림. 깜빡임은 확실히 없어지지만 로켓이 폭발하고 순간적으로 멈칫거릴 수 있음.
    2. 변형된 오브젝트에 대해 즉시 라이트맵을 계산하되 그림자는 제외.
      • 멈칫거릴 일은 없지만 그림자가 없어서 전반적으로 밝게 렌더링될 가능성이 높고 그래서 더욱 깜빡이는것으로 보임.
    3. 특정 컬러(0x202020정도)로 세팅
      • 티가 많이 나지 않을수도 있지만 상황에 따라 굉장히 이질감 있게 튀어보임.
    4. 파괴되기 전 상태의 라이트맵 패치데이터로부터 새로 구성된 라이트맵 패치데이터로 라이트값을 복사.
      • 이 방법으로 OK.
      • 파괴된 부분(안쪽)의 복셀 데이터들의 라이트맵 패치 데이터는 이전 오브젝트에서 존재하지 않으므로  복사해올수 없다. 그래서 이쪽은 컬러 0x202020으로 설정. 어차피 어두워질 부분이라 어둡게 설정하면 티가 잘 안남. 그리고 로켓 폭발 이펙트 뒷쪽이라 더더욱 티가 안남. 결국 중요한건 파괴되지 않은 복셀들이 이질감없이 렌더링 되어야하는데 이 복셀들은 파괴되기 전 복셀들의 패치 데이터를 카피해오면 이질감 0.
      • 이전 패치 데이터와 새로 구성된 패치 데이터를 좌표가지고 맞춰야하는데 여기서 약간 애먹음. 하여간 해결.

 

[ 테스트]

  1. 처음엔 아무런 처리하지 않음.  -> 그래서 깜빡임 발생
  2. 파괴되기 전 이전 오브젝트의 패치 데이터를 파괴된 후의 패치 데이터로 카피. -> 깜빡임 없음. 완벽한건 아니지만 티가 거의 안남.

 

 


답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

w

%s에 연결하는 중