Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

perf: 성능 개선 및 정리 #5

Merged
merged 18 commits into from
Aug 24, 2023
Merged

Conversation

scarf005
Copy link
Collaborator

@scarf005 scarf005 commented Aug 23, 2023

개요

after.mp4

녹화하지 않고 로컬 실행시 마우스 이동 시에도 75fps 를 유지하며, 변경 전에 비해 5~7배 가량 성능을 올렸습니다.

변경 이후

변경 전

before.mp4

변경점

  • 타입스크립트를 적용시켰습니다.
  • @types/three 적용을 위해 three/addons/ import 경로를 three/examples/jsm로 바꾸었습니다.
  • 코드 단순화를 위해 <script> 태그만 있는 svelte 컴포넌트를 타입스크립트 파일로 전환했습니다.
  • colorthief 패키지의 d.ts 타입 파일을 작성했습니다.
  • 색상 추출 루프에서 크기 0인 이미지를 제외하도록 해 colorthief 사용시 오류메시지가 뜨지 않게 막았습니다.
  • 화면 좌측 상단에 fps 패널을 추가했습니다. (개발 모드일 시)

최적화

  • THREE.Vector3같이 할당시 큰 부하가 걸리는 작업을 반복문 밖으로 꺼내 재사용했습니다.
  • 충돌 체크를 단순화하기 위해 boundingbox를 사용했습니다.
  • 파도 계산시 vector에 값을 할당하고 복사하는 대신 geometry.position에 z 좌표를 직접 할당했습니다.
  • 완성 화면에 큰 차이가 나지 않는 선에서 WebGL 렌더러에서 성능을 많이 필요로 하는 옵션을 비활성으로 바꾸었습니다.
  • 광원 토글 시 연산 부하가 있는 scene.add 대신 visible속성값만을 수정하도록 했습니다.
  • 병 상호작용 이벤트 핸들러를 병이 로드되고 나서 추가하도록 변경했습니다.

- waterGeometry 해상도를 500에서 300으로 낮춰 activeWave 루프 성능 향상
- openGL에 DynamicDrawUsage 최적화 옵션 추가
- Vector3를 루프마다 할당하지 않고 재사용
- 벡터에서 z 좌표를 가져오는 대신 직접 할당
- wave와 activeWave를 별개 함수로 분리
유일한 카메라이므로, 모듈을 사용하는 것이 싱글톤 클래스 패턴보다 단순하다 판단했습니다.
화면에 눈에 띄는 변화가 없는 선에서 성능 향상에 도움이 되는 옵션들을 적용시켰습니다.

참고: https://discoverthreejs.com/tips-and-tricks/#renderer
- 레이캐스터를 재사용
- glb scene에서 병 모델만 추출
- 전체 scene 대신 개별 object를 레이캐스트
@vercel
Copy link

vercel bot commented Aug 23, 2023

@scarf005 is attempting to deploy a commit to the 42Benefit Team on Vercel.

A member of the Team first needs to authorize it.

Copy link
Member

@YeonSeong-Lee YeonSeong-Lee left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGMT. 아주 좋습니다~!

@YeonSeong-Lee YeonSeong-Lee merged commit 710490f into 42Benefit:main Aug 24, 2023
1 check failed
@scarf005 scarf005 deleted the perf branch August 24, 2023 13:04
@vercel
Copy link

vercel bot commented Aug 24, 2023

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
42-benefit ✅ Ready (Inspect) Visit Preview 💬 Add feedback Aug 24, 2023 1:07pm

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants