1. 리소스 폴더 구조 개편
- 간단한 테스트 코드로 3D 통맵과 플레이어를 로드 해보았는데,
상당히 오랜 시간이 걸림. 통맵은 70MB에 플레이어는 21MB 정도.
- 따라서 멀티 스레딩이 필요하다 결론 내고, 폴더구조를 개편함.
다른 팀의 엔진 담당 팀원들과 논의해보고나니
Animation이 있는 Actor -> Animator
Animation이 없는 Actor -> Static
정도로 나누고, 두 개의 멀티 스레딩을 사용하는게 맞을 듯 했음.
그리고 실제로 리소스를 뜯어보니 가장 많이 용량을 차지하는 게
저 두가지 폴더였음.
2. 엔진 코드 업데이트 관련 내용
- 나는 팀장 님의 코드를 그대로 가져오는게 맞다고 생각했지만,
클라 팀원은 그거보단, 그대로 가져와서 우리에 맞게 조금씩 수정하는게 맞다고
약간의 논쟁이 있었다.
- 결론적으론 내가 엔진 팀장님과 함께 엔진을 만들기에,
지금은 조금씩 수정하더라도 수정하는 양이 많아지면 그냥 그대로 가져와서
컨텐츠 쪽에서 내가 수정하기로 결정했다.
3. 멀티스레딩 구현
- 구현하기 전에, 타당성을 보기 위해서 간단한 실험을 함.
아래가 멀티스레딩 되어질 두 폴더. 크기는 각각 68.7MB와 96.2MB
- 싱글 스레딩에선 어느정도 걸리는지 아래 코드를 통해 시간을 재보았음.
교차 검증을 위해, 핸드폰으로도 스탑워치를 해봄. 스탑워치보다 작게 나오진 않겠지..
void LoginLevel::Update(float _DeltaTime)
{
std::chrono::system_clock::time_point prev = std::chrono::system_clock::now();
LoadTextureInStatic();
LoadTextureInAnimator();
std::chrono::system_clock::time_point curr = std::chrono::system_clock::now();
std::chrono::seconds sec = std::chrono::duration_cast<std::chrono::seconds>(prev - curr);
}
- 똑같은 폴더들로 아래 코드를 통해 구현하였다.
초는 못세보았다. -> 나중에 해보는 걸로.
이를 통해서, 주 스레드는 로딩창을 띄우고 나머지 자식 스레드들이 일할 수 있게끔 가능할듯.
void LoginLevel::Update(float _DeltaTime)
{
std::chrono::system_clock::time_point prev = std::chrono::system_clock::now();
GameEngineCore::EngineThreadPool.Work(
[=] ()
{
LoadTextureInStatic();
});
GameEngineCore::EngineThreadPool.Work(
[=] ()
{
LoadTextureInAnimator();
});
std::chrono::system_clock::time_point curr = std::chrono::system_clock::now();
std::chrono::seconds sec = std::chrono::duration_cast<std::chrono::seconds>(prev - curr);
int a = 100;
}
4. 내일 할일
-
댓글