ECS 개요는 알겠는데, 대체 얼마나 빨라지길래 스크립팅 방식을 바꿔가면서까지 제공을 하는 걸까요?
그래서 한 번 유니티에서 제공해주는 샘플앱을 이용해 간단하게 벤치마크 테스트 해보았습니다.

 

* 아래 결과는 제 컴퓨터에서 18년 12월 28일 기준으로 수행된 결과입니다.

  * 사양 - i5-6600 / GTX 970 / Ram 15GB

* 실행 프로젝트는 유니티 ECS 샘플 프로젝트의 TwoStickShooter 입니다.

* job system과 burst compiler를 고려하지 않고, 단순히 오브젝트 리젠 갯수를 늘린 결과입니다.

 

* 오브젝트 무한리젠 ( 매 업데이트(0.02)마다 오브젝트 10개씩 생성)

* Classic

Profiler
Game Play Scene

 - 약 30FPS 아래로 내려갈 때의 프로파일링 결과입니다.

 - 총 오브젝트 갯수가 6800개를 넘어가자 어마어마하게 끊깁니다.

 

* hybrid ECS

- 약 30FPS 아래로 내려갈 때의 결과입니다.

- 총 오브젝트 갯수가 21000개 정도 이상되니 끊기네요

- 특이한 점은 classic은 끊기다가 다시 조금 회복되다 또 끊기는 반면에 Hybrid는 더더더 느려집니다.

 

*Pure ECS

- 30 FPS 이하로 떨어지질 않아요 하단 이미지가 실행중인 이미지인데 저 상태에서도 굉장히 부드럽습니다.

- 다만 특이한 점은 총 오브젝트 갯수가 균일하게 약 2000개 밖에 안 찍힙니다. 화면상으로만 봐도 몇 만개는 되보이는데 말이죠. ( 이 부분에 대해서는 좀 더 ECS 시스템에 대한 공부가 필요할 듯하네요)

 

 

 

 

번외로 Pure ECS가 30 FPS 이하로 떨어지는 구간이 대체 언제쯤일지 테스트를 해보았는데, 매 업데이트(0.02초)마다 적 오브젝트를 50개씩 만드니 아래와 같이 떨어지긴 하더군요 (참고로 적오브젝트는 계속 총알 오브젝트를 날립니다)

 

Result

- 거의 성능 차이가 classic을 1이라 했을 때, hybrid가 3, pure가 5~10 정도로 차이가 나는 듯 보이는 것 같습니다.

 

* 다음 포스팅부터는 hybrid ECS를 사용하는 방법 및 사용하면서 발생했던 오류 위주로 포스팅 시작하도록 하겠습니다.

 

 

* 유니티 샘플 프로젝트 경로를 같이 올리려했는데 반년 사이에 많은 변화가 있었는지 git 저장소에 TwoStickShooter를 비롯해 제가 가진 예전 샘플들이 없어졌더군요 ; (너무 바뀌어서 같은 프로젝트인지도 확실치 않지만 최근 샘플을 공유드립니다.)

 - git https://github.com/Unity-Technologies/EntityComponentSystemSamples

* 글을 쓰는 날(19.5.19)을 기준으로는 ECS 벤치마크 데이터가 빈번하게 검색되어 나오는 것 같네요. 더 궁금하시면 영문으로 찾아보시면 만족할만한 자료가 나올 듯 합니다.

 

* 개인이 공부하며 하는 포스팅이기에 잘못된 부분이 있을 수 있습니다.

 혹시 잘못되거나 문제시 되는 부분이 있으면 지적 부탁드립니다.

Posted by 검은거북

* 먼저 해당 포스트는 튜토리얼이 아닌 Firebase 사용하는 과정에서 발생한 오류 및 해결과정, TIP 중심의 글임을 알려드립니다.  

* Firebase 설명 자체가 굉장히 잘 되어있으므로 튜토리얼은 Firebase를 참고하세요. 여기서 발생한 오류/정보도 Firebase 가이드에 있으나 놓쳤을 확률이 높습니다

 

 

1. 사용하면서 느낀 Realtime VS Firestore

  • 우선 전체적으로 사용자 관점에서는 Firestore가 좋습니다.
  • 다만 Firestore의 단점은 베타라는 점과 데이터 옮기기가 조금 더 번거롭다는 점.
  • 쿼리문
    • Realtime
      • 내림차순이 없습니다;;;  ( 내림차순 하나면 처리될 쿼리가 엄청 복잡해질 수 있습니다..)
      • 여기서 트랜젝션 개념은 여러 일의 원자성 보장이 아닌 한가지 일에 대한 동시접근을 못하게 보장 (lock 개념과 비슷하다)
    • Firestore
  • 저장방식
    • Realtime
      • 완전 JSON이라 봐도 무방 - 실제로 import , export도 json 형식으로 연동되서, 데이터를 이동하기 편하다.
    • Firestore
  • 개인적으로 저장방식은 Realtime이나 Firestore나 비슷한 것 같습니다.

 

2. Firestore 복합쿼리가 동작하지 않음 ( 아무것도 찾지 못한다)

 - 서로 다른 필드에 대해서는 색인 등록을 해야한다.

 

3. 규칙을 설정했으나 Function으로 접근시 규칙이 무시된다.

 - 파이어베이스 Functions에서의 DB 접근은 모든 규칙을 무시한다.

 - DB의 규칙은 클라이언트에서의 접근에 적용된다.

 

 

 

 

Posted by 검은거북

* 먼저 해당 포스트는 튜토리얼이 아닌 Firebase 사용하는 과정에서 발생한 오류 및 해결과정, TIP 중심의 글임을 알려드립니다.  

* Firebase 설명 자체가 굉장히 잘 되어있으므로 튜토리얼은 Firebase를 참고하세요. 여기서 발생한 오류/정보도 Firebase 가이드에 있으나 놓쳤을 확률이 높습니다.

 

1. 웹 클라이언트 init 데이터 경로 

auth는 아니지만 init 에 사용되는 데이터 경로입니다.

 - 아래는 웹 클라이언트 측에서 Firebase 연동하여 init할 때 필요한 config 입니다. 

var config= {
apiKey:""
authDomain:""
databaseURL:""
projectId:""
storageBucket:""
messagingSenderId:""
 };

  - confing에는 연동하고자 하는 프로젝트의 각종 값이 필요합니다. 아래는 그 값을 찾을 수 있는 위치입니다.

  • apiKey = 좌측탭 상단 - 톱니바퀴 -  프로젝트 설정 - 일반 - 웹 API 키
  • projectId = 프로젝트 설정 - 일반 - 프로젝트 ID
  • authDomain =  프로젝트ID.firebaseapp.com   이거나 Authentication - 로그인 방법 - 승인된 도메인 중 localhost 외의 경로
  • databaseURL = 좌측 탭의 Database의 데이터베이스 이름 또는 디폴트로 https://프로젝트ID.firebaseio.com 이거나  프로젝트 설정 - 서비스 계정 - Admin SDK 구성 스니펫의 databaseURL
  • storageBucket = 디폴트로는 gs://프로젝트ID.appspot.com 
  • messagingSenderId = 프로젝트 설정 - 클라우드 메시징 - 발신자 ID

 

2. FirebaseUI의 데이터 값

 - FirebaseUI는 로그인 UI가 완성된 버전을 붙이는 것입니다. 개발자가 따로 UI를 짤 필요가 없죠. 저는 Facebook, google play game, 익명 을 사용해봤습니다.

  • 익명

    • 그냥 사용 설정

 

 

3. FirebaseUI에 게스트 로그인 추가하기

 - signInOptions 에 "anonymous" 추가

 

 

Posted by 검은거북
이전버튼 1 2 3 4 5 6 7 ··· 17 이전버튼

블로그 이미지
프로그래밍 공부 요약 및 공부하며 발생한 궁금증과 해결과정을 포스팅합니다.
검은거북

공지사항

Yesterday
Today
Total

달력

 « |  » 2025.1
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

최근에 올라온 글

최근에 달린 댓글

글 보관함