일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 언리얼엔진5
- Unreal Engine5
- winapi
- 백준
- 오블완
- directx
- softeer
- 1563
- 티스토리챌린지
- RootMotion
- 줄 세우기
- baekjoon
- DeferredRendering
- Programmers
- RVO
- 2294
- UnrealEngine5
- Frustum
- algorithm
- C
- DirectX11
- UnrealEngine4
- IFileDialog
- NRVO
- 팰린드롬 만들기
- const
- 프로그래머스
- C++
- GeeksForGeeks
- UE5
- Today
- Total
Game Develop
TerrainEditor 최적화 본문
현재 작업중인 프레임워크는 학원에서 배우고 사용했던 프레임워크를 기반으로 내 포트폴리오에 맞춰서 최적화시킬수 있는건 최적화하고 기능 추가하고 하는중이였는데 터레인에디터부분에서 최적화가 많이 필요한걸 느꼈다.
일단 터레인맵의 크기가 클수록 프레임이 기하급수적으로 떨어졌다. 피킹을 하면 터레인크기가 클수록 프레임이 더 떨어지는건 정상이긴하지만 좀 많이 떨어졌다.
떨어졌던 원인 2가지는 아래와 같다.
1. 터레인피킹
2. 터레인피킹으로 좌표를 받아와서 좌표주변의 버텍스 y값 조절을 통해 지형을 수정하는 과정.
피킹자체는 학원에서 배울 때 컴퓨트쉐이더를 이용해서 gpu쪽연산으로 돌렸기 때문에 최적화가 됐다.
그러나 렌더함수쪽에서 피킹으로 값받아오는 연산이 프레임단위로 수행되고 있었기 때문에 터레인크기를 늘리자마자 가만히 있어도 프레임이 기하급수적으로 떨어졌다. 그래서 필요한 경우에만 실행되도록 수정했다(높낮이조절을 위해 터레인에 마우스왼쪽버튼을 누르고있을 때).
그리고 터레인의 한지점에대해서만 버튼을 누르고 있을 시, 이전과 같은지점에 대해 높낮이조절이 수행되고 있는것이기 때문에 피킹을 계속 수행할 필요가 없다. 그 지점에 대해 맨처음 피킹으로 받아온 값으로만 높낮이조절을 실행하면 된다.
그래서 피킹함수를 실행할때마다 마우스좌표를 따로 저장을 해놓은 다음, 다음 피킹함수 실행할때의 마우스좌표와 비교를 통해 피킹함수의 중복호출을 막아놨다. 내 노트북 기준으로 500*500 터레인에서 같은지점에 대해서 마우스왼쪽버튼을 계속 누르고 있을 경우 프레임이 30정도까지 떨어졌지만, 같은지점에 대한 피킹 중복호출을 막으니 60까지 올랐다.
단순 값비교에 따른 호출방지라 코드도 몇줄안되지만 프레임상승이 눈에 띄었다.
2번같은경우는 터레인피킹을하고 그 주위 반지름안의 버텍스들 y값을 조정을 하게되는데 반지름안의 버텍스인지 검사할 때 터레인의 모든 버텍스를 검사하도록 코드가 짜여져있었다. 사실 피킹한 지점 주위의 버텍스만 검사하면 되기 때문에 반드시 수정해야하는 부분이다. 그래서 반지름만큼 사각형 범위를 만들고 그 넓이만큼만 버텍스검사를 했다.
이부분만 했어도 굉장히 많은 프레임향상이 있었다...
'ComputerGraphics > My Project' 카테고리의 다른 글
WINAPI FileDialog 사용하다 곤란했던 일 (0) | 2021.11.12 |
---|---|
잡다한 에러 고친경험 저장. (0) | 2021.08.05 |
절두체크기 컬라이더로 시각적표현해보기 (0) | 2021.06.15 |
몬스터에 A* 알고리즘 적용관련 최적화 (0) | 2021.05.11 |
나중에 고쳐야할 버그목록. (0) | 2021.04.19 |