대충 2km정도의 탑뷰 오픈월드이고 대체로 오브젝트를 이용해 타일링 할거임
3d베이스라 타일맵은 못쓰기도 하고 타일맵 성격이랑 내 게임이 달라서 안씀
이때 2km에 존재하는 모든 오브젝트가 메모리에 올라가있으면 부담될 것이라고 예상만 하고 월드 스트리밍 메커니즘을 계속 구상해보고 있는데 이해가 안돼
1. 월드 스트리밍이란 시야 밖의 오브젝트들을 메모리에 내리는 것
2. 시야 밖에 있는 애들을 Destroy하면 됨
3. 근데 이러면 청크 로딩 언로딩 과정에서 수없이 많은 인스턴싱과 삭제가 발생 = gc폭발
4. 오브젝트 풀링을 하래 << 뭔소리지? 메모리 줄이겠다고 스트리밍하는데 풀링을해서 메모리에 싹 올려놓으라고?
이게 월드 스트리밍이 맞는건가? 애초에 월드 스트리밍이 필요할지도 모르겠음
시야 밖 오브젝트들 cpu 최적화 개념으로 꺼버리는 건 해놨는데 스트리밍까지?
월드 스트리밍이라는 것을 처음 들어보는데 culling을 말씀하시고 싶으신건가
아녀 씬이 넓고 오브젝트가 많을때 플레이어 청크 밖에 있는 오브젝트를 메모리에서 내리는 방식이여 컬링은 그냥 프러스텀컬링에 맡길건데 이건 그리는 걸 멈추는거지 메모리에서 내리는 게 아니니까여
언리얼 사용함?
유니티요
마인크래프트처럼 시야 내 청크만 로딩하라는거 아님? 마크도 옛날 버전에 청크 내려갈 때 렉 심해서 새로 생기는 청크의 오브젝트랑 내려가는 청크의 오브젝트랑 같은 부분을 재활용하는걸로 알고있음
감사합니다
해당 댓글은 삭제되었습니다.
오브젝트로 타일링하는거면 플레이어 주변 3x3 오브젝트만 미리 인스턴싱해놓고 플레이어 위치 바뀌면 오브젝트의 메쉬만 바꿔준다던가
청크 왔다갔다할때 이미 생성한 오브젝트가 사용하지않는 청크에 있고, 새로 오브젝트 필요한 청크 있으면 오브젝트 재사용해도 되는거잖아
시야 밖 오브젝트들이 메모리를 차지해서 디스트로이 하는거라고? 원래 렌더링 과부하를 줄이기위해 렌더링만 안하게 하는거 아님? 그럼 거의 화면을 돌릴때마다 수많은 오브젝트들을 삭제하고 생성해야한다는건데 말이안됌 너가 말하는건 렌더링 과부하만 줄이는게 맞는거같은데
마크 청크로딩 생각하면 됨 프러스텀컬링이랑 별개로 멀리있는 오브젝트를 제거하고싶었음 내가 시야 밖이라고 해서 살짝 혼동생기게 말한거 같은데 탑다운뷰라서 시야밖=렌더청크 밖임
여러분 감사합니다 일단 핵심아이디어는 세웠어요 스트리밍하는데 오브젝트 컬링을 동시에 하면 상충되는 것 아니냐? 한게 본문의 질문이었잔슴? 생각해보니까 드넓은 월드를 메모리에서 내리고 시야내에 생성될만한 오브젝트만큼만 풀 사이즈를 제한시키면 되는거였네요 즉 상주하는 메모리 사이즈를 풀사이즈 월드급에서 플레이어 시야 수준으로 제한시키는 개념인 거 같습니다
시야 밖 오브젝트를 제거하는게 아니라 끄고 풀링하는거아님?
월드 스트리밍이란 용어가 있는가? 건 모르겠네. 어쨌든 짧게 설명 메모리 최적화 + 속도 최적화 두 가지 다 존재. 메모리 최적화는 당연하고, 결국 메모리 버퍼가 줄어들면 속도도 빨라짐 하지만 이동시마다 Destroy 를 하면 결과적으로 더 느려질 수도 있다. 그래서 이동시마다 풀링을 하는 거. : 풀링을 하는 이유는 재활용을 하려는 거니까 당연히 재활용 빈도가 높아야 유리하겠지? 그리고 로딩시 쓰레드 로딩을 하면 더 부드럽게 처리 가능 : 유니티는 쓰레드 지원을 안하니 이 부분은 잘...
위에 이어서 조금만 더 재활용 빈도를 높이려면 객체를 돌려 쓰거나 하면 됨. 엥? 내가 만든 맵은 완전 고유한 맵이고 청크 단위로 하나도 겹치는 게 없는데요? 그럼 뭐하러 풀링 함? 이 경우에도 풀링이 필요. 이동시에 결국 자기 주변 경계의 오브젝트가 올라옴. 그럼 그 경계의 오브젝트는 재사용성이 높다고 할 수 있다. 이 경우 각 청크별로 시간을 두고 버퍼가 차면 오래된 시간 애들을 내리는 방법을 써도 됨.
현재 및 앞으로 이동할 지형에 대한 정보를 바탕으로 제일 많이 사용될 오브젝트 풀링해두고 재활용, 일정 배열로 관리하다가 여러 관리 기법이나 우선순위에 따라 탈락시키거나 신규 오브젝트 프리풀링 해두고 쓰면 됨. 관련된 기법이나 팁들 찾아보면 젤 많은게 이쪽 부문인데....?