선요약) 씬에 수천개 오브젝트 배치하고 싹다 비활성화, 플레이어 주변 청크들만 활성화시키는 방식 괜찮음?
3d이고 굳이 비유를 하면 돈스타브? 이정도 맵 크기까지 생각중
메시가 있는 오브젝트로 타일링할건데, 이유는 각 타일이 조건에 따라 메시를 변형시킨다던지 여러 상호작용을 구현하고 싶어서 그래
(터레인x, 타일맵x)
관련해서 질문글 썼었는데, 결론은 병합가능한 메시끼리 묶는 등의 최적화가 있을 뿐 수천개의 오브젝트를 배치하는 방향 자체는 같은 듯 했음
이제 여기서 수많은 오브젝트를 어떻게 최적화 시키냐에 대한 고민이 있는데.....
1. 청크단위로 타일 오브젝트를 묶은 뒤, 플레이어 주변 청크 타일만 활성화 시킴 (2번의 이유로 굳이 이럴 필요가 있나 싶음)
2. 어차피 카메라 밖은 렌더링 안되니까 굳이 청크를 껐다켰다 하지 말고, 스크립트 달린 애들에 한해서 틱레이트를 낮추던지 꺼버리던지 함
3. 애초에 수천, 수만개를 배치하는 씬이 잘못됐음 불가능함
나는 몇 번을 선택해야 할까.. 더 좋은 아이디어 있으면 알려주세오..
제가 그로고 욌슴 1. 저는 청크단위는 아니고 스테이지 프리팹 한 뭉탱이씩 활성화, 스테이지에는 약 최대 1000개의 오브젝트 존재 2. 걍 비활성화되서 상관 안 해도 됨 3. 왜용? 저도 동적으로 생성하다가 굴러굴러 여기까지 왔는데 씬 하나에 스테이지 12-15개정도는 할만할 것 같음
다만 제 경우는 오브젝트 종류가 약 200개정도뿐임, 10000개가 되든 20000개가 되든 메모리 할당량이 같음
타일을 프리팹으로 배치했다고 치고, 메모리먹는 건 배치 개수가 아니라 프리팹 종류 수에 가깝단 말인가여?
타일들이 다 같은 메쉬, 메터리얼을 쓰고 있어서 몇개를 복제하든 메모리에 차지하는 양은 같슴 씬 용량이야 커지겠지만..
+ GPU 인스턴싱을 쓴다는 가정하에
아하 그러면 각 타일에 메시랑 콜라이더가 붙어있으나 어차피 타일들이 전부 상호작용 중인 것도 아니라 상관 없고, 캠 밖에 있으면 렌더링도 안되니 2번으로 해도 성능상 문제는 없겠네여
인스턴싱쓰면 메테리얼이 공유되니까 개별수정이 안될테고, 이거는 상호작용한 타일에 한해서 새 인스턴스 만들면 될거고
그런것이겠지? 감사합니다
수천개 정도면 올려도 괜찮음. 더 많으면 동적으로 생성/파괴하는 방식을 고려하는게 나음
이런방식에서 월드 구성해본적 있는데 주의해야될게 오클루전 컬링쓸 때 문제가 생겨서 그림자가 고장날 수 있음
오호 감사합니다 이거는 이슈생기면 찾아봐야겠네
라이트맵을 사용하지 않는다면 일단 씬에 배치한 다음 프리팹 이름, 좌표, 스케일값만 따로 저장한 뒤 다 지우고 런타임에선 시야거리 내에 들어온 것들만 오브젝트 풀에서 꺼내 배치하고 시야 밖으로 나가면 다시 풀에 집어넣는 방식은 어떰?
이게 1번 계획이었는데 아직까지는 그럴 필요가 있나 싶었음. 어차피 렌더링은 캠 밖이라 제외되니까 상관없는데 굳이 청크로딩하면서 오브젝트 껐다켜거나 꺼내쓰는 게 같은 일 두 번 하는 느낌이랄까
풀링 같은건 나중에 해도 됨. 개발에서 가장 중요한 건 쉬운가? 하는 것