Game Develop

TerrainEditor 최적화 본문

ComputerGraphics/My Project

TerrainEditor 최적화

MaxLevel 2021. 6. 24. 02:22

현재 작업중인 프레임워크는 학원에서 배우고 사용했던 프레임워크를 기반으로 내 포트폴리오에 맞춰서 최적화시킬수 있는건 최적화하고 기능 추가하고 하는중이였는데 터레인에디터부분에서 최적화가 많이 필요한걸 느꼈다.
일단 터레인맵의 크기가 클수록 프레임이 기하급수적으로 떨어졌다. 피킹을 하면 터레인크기가 클수록 프레임이 더 떨어지는건 정상이긴하지만 좀 많이 떨어졌다.  

 

떨어졌던 원인 2가지는 아래와 같다.

 

1. 터레인피킹

2. 터레인피킹으로 좌표를 받아와서 좌표주변의 버텍스 y값 조절을 통해 지형을 수정하는 과정.

 

피킹자체는 학원에서 배울 때 컴퓨트쉐이더를 이용해서 gpu쪽연산으로 돌렸기 때문에 최적화가 됐다.

그러나 렌더함수쪽에서 피킹으로 값받아오는 연산이 프레임단위로 수행되고 있었기 때문에 터레인크기를 늘리자마자 가만히 있어도 프레임이 기하급수적으로 떨어졌다. 그래서 필요한 경우에만 실행되도록 수정했다(높낮이조절을 위해 터레인에 마우스왼쪽버튼을 누르고있을 때).

 

그리고 터레인의 한지점에대해서만 버튼을 누르고 있을 시, 이전과 같은지점에 대해 높낮이조절이 수행되고 있는것이기 때문에 피킹을 계속 수행할 필요가 없다. 그 지점에 대해 맨처음 피킹으로 받아온 값으로만 높낮이조절을 실행하면 된다.

그래서 피킹함수를 실행할때마다 마우스좌표를 따로 저장을 해놓은 다음, 다음 피킹함수 실행할때의 마우스좌표와 비교를 통해 피킹함수의 중복호출을 막아놨다. 내 노트북 기준으로 500*500 터레인에서 같은지점에 대해서 마우스왼쪽버튼을 계속 누르고 있을 경우 프레임이 30정도까지 떨어졌지만, 같은지점에 대한 피킹 중복호출을 막으니 60까지 올랐다.

단순 값비교에 따른 호출방지라 코드도 몇줄안되지만 프레임상승이 눈에 띄었다.

 

 

2번같은경우는 터레인피킹을하고 그 주위 반지름안의 버텍스들 y값을 조정을 하게되는데 반지름안의 버텍스인지 검사할 때 터레인의 모든 버텍스를 검사하도록 코드가 짜여져있었다. 사실 피킹한 지점 주위의 버텍스만 검사하면 되기 때문에 반드시 수정해야하는 부분이다. 그래서 반지름만큼 사각형 범위를 만들고 그 넓이만큼만 버텍스검사를 했다.

이부분만 했어도 굉장히 많은 프레임향상이 있었다...