'튜닝'에 해당되는 글 4건

  1. 2013/11/27 글뻥 간단하게 만들 수 있는 상용 게임이란 없다. (1)
  2. 2012/05/30 글뻥 unity3D 성능 튜닝
  3. 2009/08/20 글뻥 SQL 사용시 주의할 점
  4. 2007/10/23 글뻥 Vista Aero 더 빠르게 설정하기
최근에 1인 개발자로 돌아서면서, 교육기관과 학교에서 모바일 게임 개발을 가르치다보면, 많은 실무 경영자/ 개발자/  학생들이 모바일은 간단해서 빨리 나온다고 이야기한다.
그럴 수 있다고 본다.

하지만, 간단히(?) 나오는 그 게임중 상업적으로 성공한 게임이 나오더냐?
물어보면 꿀먹은 벙어리가 되곤한다.

다시말해, 남들이 해놓은건 쉬운거다.

하지만, 니가 직접 해보면 상황이 달라진다.
예전에 같이 일하다 혜어진 모팀원은 타이니 윙을 예로 들며, 간단히 여자친구에게 주려고 만들었으니 그런걸 우리도 하자고 하길레...
"타이니 윙같은 자동 생성 무한 지도 만들어 보세요"라고 했었다.
Spline에 따라 Mesh를 구부려주고 펴주는게 기술적으로 얼마나 어려운 일인지에 대한 고민이 빠져 있는거다.

코인도저 역시 마찬가지다.
코인당 폴리곤 갯수 조정에 실패하면 코인수에 따라서 무지막지한 렉이 걸린다.
거기에 연쇄반응하는 물리를 안정적으로 돌리려면 환장할 노릇이 되어버리는데, 남들이 그렇게 구현했으니까 쉽다고 이야기한다면, 한마디로 머리에 총맞은 거다.

또 예를 들어,

애니팡, 윈드러너, 활 등의 게임은 모바일에 포팅되기 전에 몇 년간 웹에서 서비스되던 성공한 게임이었다는 사실을 사람들은 종종 잊곤한다.


더군더나, 게임의 재미라는 부분은 더욱더 가관이다.

(이하 http://www.itester.co.kr/2013_07_09_archive.html 에서 참조)

3Core for FUN이라는 설이 있는데,
- 관계 (힘/권력&사랑/사운드/그래픽 등)
- 도전 (탐험/창조/경쟁 등)
- 학습  (난이도/패턴/콘텐츠)
이상 3가지가 키워드라고 이야기한다.

이 관계는 통상 3가지 요소가 장르별로
- 액선 = 3:3:4
- 퍼즐 = 2:3:5
- 런 = 3:5:2
- 시뮬/RPG = 5:3:2
정도라고 한다.

관계를 따지는데 더 많은 데이터가 필요하지만, 암튼 3가지에 대해 2차함수로 표현하면,
"Y=aX^2+bX+c"로 표현할 수 있다고 한다.


여기에
관계 : 0, 0.1(비쥬얼/사운드), 0.2(+파워사랑), 0.3(+친구경쟁), 0.4(추가요소)
도전 : -2, -1(탐험), 0(+창조), 1(+경쟁)
학습 : 0, 1(콘텐츠), 2(+난이도), 3(+다양성반복)
으로 a,b,c를 차례대로 넣으면
사용자 삽입 이미지
이와 유사할 수록 게임성이 몰입감이 있느냐 없느냐로 나뉘어진다고 한다.

다시말해... 흔한 상업적 성공한 게임은 가장먼저 다음의 특징을 가진다.

1. 이전에 소수가 경험했거나, 경험하지 않은 UX
(이래서 아류 게임은 다 망하는거다.)
2. 다른게임과 다른 관계요소를 가질 것
3. 탐험요소의 3대 요소는 필수 일 것 (커스텀도 창조에 포함)
4. Flow Channel에 들어가는 난이도를 가지면서 변형된 패턴이 반복될 것.

같은 슈팅게임이라도 직접해보면 다른 게임성을 느끼는 이유가 여기에 있다.


==> 다시말해 유저의 데이터를 보고 계속 튜닝하지 않으면 게임은 재미없어진다.


그런데 이 모든 일이 쉽냐고?
예를 들어,
유저 데이터는 어떤 Event Key로 저장할 것이며...
어떤 툴로 해석할 것이며...
어디를 건드려서 게임성을 더 좋게 할 것인지...

모두가 인간의 두뇌에서 나오는 거다.
다시말해, 공식이란 없다!

따라서, 공식이 없으니 발견하기 위해 하루 수만 라인의 데이터Row를 추적하고 Insight를 얻어야 한다.

이게 간단한 일인가?

단언컨데 만드는건 어렵지만, 상업적 성공은 몇 십배 더 어렵다.


- 우리가 길을 잃는 이유는 몰라서가 아니라, 안다고 생각하기 때문이다.
2013/11/27 19:04 2013/11/27 19:04

unity3D 성능 튜닝

Developer 2012/05/30 01:39
FB에서 어떤 분이 버벅인다는 문의를 올려서 소스 보내달라고 해서 보았다.
사용자 삽입 이미지
그래프가 아주 요동을 친다. =(

그래서 몇몇 부분 고치고 중복 콜하는 메소드 정리후 Physic관련 사항을 튜닝하고 Size도 튜닝했더니..
사용자 삽입 이미지
깔끔하게 정리 완료.

잠도 안와서 Update() 메소드에서 호출하는 Method를 전부 Thread로 변경했음.
사용자 삽입 이미지
극히 안정화된 상태.

Framerate가 잘나오는게 문제가 아니라 저렇게 코드나 Asset문제로 튀는게 더 큰 문제임 -_-;;

이정도면 Vsync 켜서 테스트 돌려보면 답나올듯...




2012/05/30 01:39 2012/05/30 01:39
지금까지 십여년 가까이 전산쟁이 생활하면서 개발자들이 많이 저지르는 SQL miss-사용법에 대해 한번 정리 해보고자 한다. 한마디로 성능 저하의 원인이 되는 것들이다.
특히 이런 녀석들은 데이터량이 작을때는 문제가 안되다가 일정 용량 넘어가면 그때부터 문제가 되는 녀석들이다.

따라서, 실행계획을 계속 모니터링 하면서 일정 시간 이상의 SQL문은 튜닝해주자.

1. Index를 생성하지 않은 컬럼에 Where 조건 주는 경우
조건 : T1이라는 Table은 C1과 C2 컬럼이 있다.
SQL : select C1 from T1 where C2 = '1'
이경우 CPU 부하가 무지막지하게 올라간다. C2에 Index가 걸려 있는지 확인하여 안걸려 있다면 걸어주도록 하자.

2. Database Table간에 중복되는 값이 들어가 있는 경우
조건 : T1에 C1과 C2가 있고 T2에는 C3와 C4, C5가 있는데 C1과 C3는 PK/FK 관계이다. C2와 C5는 사실상 같은 내용의 컬럼이다.
이경우는 성능보다는 데이터 무결성에 문제가 되기도 한다. 또한 T1과 T2를 정규화 시키지 않음으로 해서 결과적으로 update 1번이면 되는 것을 2번하게 만드는 것때문에 불합리한 사용법중 하나이다.

3. Order by 명령
조건 : T1에 C1과 C2가 있다.
SQL : select C1 from T1 order by C2
흔히 사용하는 Query문이다. 문제가 되는 이유는 조건 없이 Full Sorting 하고 있다는 점이다.
이런 경우는 반드시 where 조건을 줘서 뽑아온 부분만 Order by 를 하도록 하자.
(간단한 사례 100,000건의 데이터 남녀 구분의 데이터 중에 정작 쓰는건 남자라고하면 Where 조건을 주게되면 50,000건만 Sorting하게 된다.)

4. Join 명령
조건 : T1에 C1과 C2가 있고 T2에 C3와 C4가 있다.
SQL : select T1.C1, T1, C2, T2, C4 from T1 join T2 on T1.C1=T2.C3 where T1.C1 = '1'
주로 사용하는 방식의 Join명령이다. 하지만 이것도 데이터의 수가 많으면 문제가 된다.
T1의 C1을 기준으로 T2의 C3와 매칭시켜 뽑아 오는 Query문인데 이런 경우는 이렇게 처음 부터 만들면 나중에 데이터가 많아지더라도 크게 문제가 되지 않는다.
select VT1.C1, VT2.C2, T2.C4 from (select C1, C2 from T1 where C1='1') VT1 join T2 on VT1=T2
Full scan 이 일어날 만한 명령을 사전에 차단해버리는 방법이다.

5. Hint 를 주지 않는 경우
조건 : T1에는 C1, C2, C3가 있고 C1과 C2에 각각 Index1과 Index2가 걸려 있다.
SQL : select C1, C2 from T1 where C2 = '1'
이런 경우는 특정 인덱스를 타라고 선언해주는 쪽이 나중에 성능 문제가 발생하지 않을 소지가 높다.
다시말해 이렇게 바꾸도록 하자
MSSQL : select C1, C2 from T1 with (INDEX (index2)) where C2='1'
Oracle : select /*+INDEX(index2) */ C1, C2 from T1 where C2='1'

보통 CPU에 과부하 걸린다고 해서 나가서 보면 이런 문제들이다.
처음 개발할때 부터 조금만 신경 쓰면 나중에 문제가 발생하지 않을 일을 하고 있다는것이 매우 아쉽다고나 할까?

그리고나서는 꼭하는 말들이 이러하다.
MS-SQL이라서... MySQL이라서...
ORACLE이 사실 하드웨어 스팩상 가장 빵빵하기때문에 이러한 실수를 조금 가려주기도 한다.
그러나 이런 문제들은 지아무리 오라클이 와도 조금 지나면 재발되는 문제이다.

나중에 땀 삐질 삐질 흘리지 말고 지금부터라도 잘 잡도록 하자
2009/08/20 11:41 2009/08/20 11:41
비스타가 좀 느려보인다면 기능은 최대한 살리면서 자원을 많이 먹는 넘을 제어해서 빠르게 사용하자.

1. 바탕화면의 "컴퓨터"에서 마우스 우클릭 "속성"선택
2. "고급 시스템 설정", "고급", "성능", "설정", "창을 최소화하거나 최대화할때 에니메이션"
    체크되어 있는 것을 해제한다.
3. "투명효과사용"을 해제한다.
4. "적용"후 "확인" 클릭!

2007/10/23 23:13 2007/10/23 23:13
TAG , ,