본문 바로가기
DirectX/[팀플] Death's Door 모작

22-10-26

by GameStudy 2022. 10. 27.

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);
}

핸드폰 스탑워치 결과는 96.94초였다. 믿을만한 결과인듯.

  - 똑같은 폴더들로 아래 코드를 통해 구현하였다.

    초는 못세보았다. -> 나중에 해보는 걸로.

    이를 통해서, 주 스레드는 로딩창을 띄우고 나머지 자식 스레드들이 일할 수 있게끔 가능할듯.

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. 내일 할일

  - 

'DirectX > [팀플] Death's Door 모작' 카테고리의 다른 글

22-11-04  (0) 2022.11.04
22-11-02  (0) 2022.11.02
22-10-31  (0) 2022.11.01
22-10-24  (0) 2022.10.24
22-10-14  (0) 2022.10.14

댓글