블로그 이미지
Every unexpected event is a path to learning for you.

카테고리

분류 전체보기 (2307)
Unity3D (564)
Programming (470)
Unreal (4)
Gamebryo (56)
Tip & Tech (182)
협업 (34)
3DS Max (3)
Game (12)
Utility (114)
Etc (92)
Link (31)
Portfolio (19)
Subject (90)
iOS,OSX (37)
Android (12)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (1)
Memories (19)
Interest (37)
Thinking (36)
한글 (26)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (19)
Exercise (3)
나만의 맛집 (2)
냥이 (9)
육아 (5)
Total1,332,134
Today237
Yesterday172
Statistics Graph

달력

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

공지사항

태그목록

'카메라 흔들기'에 해당되는 글 2건

  1. 2011.03.05 카메라 흔들기
  2. 2011.03.04 [게임코드]손쉽게 카메라 흔들기

카메라를 흔들려면 카메라를 흔드는 폭을 알아야 한다.

그런데 이 폭을 생각처럼 이쁘게 얻기 힘들다.

그래서 이쁜 공식에 대한 화두를 던저볼까 한다.

 

1. y = sin(x)

 

 

먼저 생각해 볼 수 있고 만만한 공식은 바로 sin 이다.

sin 특성상 파형을 나타낸다. 오르락 내리락 하는것이 단순하면서도

직선적이지 않아 카메라 흔들때 딱이라는 느낌이 온다.

하지만.. 너무 단조롭지 않은가? 점점 감쇄할수 있다면 좋을것 같다.

 

 

2. y = powf(0.5f, x) : 흔히 말하는 y=(1/2)^x 그래프 이다.

 

 

감쇄하는 모양이 아주 이쁘다. 특히나 5 정도를 지나면 0이 아니라 0에 수렴하는 곡선이다.

이 그래프의 감쇄 정도를 상수를 이용해서 수정한다면 아주 이쁜 상쇄 그래프가 나올것이다.

 

 

3. y = sin(x) * powf(0.5f, x)

 

그냥 단순히 곱해봤다. x 축의 값이 time이랑 맞지 않아 이런 결과가 나왔다.

만약 sin 파장을 줄인다면 뭔가 이쁜 그래프가 나올것 같다.

 

 

4. y = sin(x*10.0f) * powf(0.5f, x)

 
그래프가 아주 이뻐졌다.
두 함수의 속성을 이용해서만이라도 훌륭한 카메라 흔들기를 구현할수 있지 않을까?
여러가지 실험을 통해서 이쁜 상수들(일명 매직넘버)을 구하기 바란다.
또한 다른 그래프와의 간섭이 일어난다면 더욱 이쁜 그래프가 나올수도 있다.

[출처] 카메라 흔들기|작성자 시퍼렁새
Posted by blueasa

댓글을 달아 주세요

출처 - http://www.gamecode.org/bak/article.php3?no=3371&page=0&current=0&field=tip

 

작성자 : noerror
E 메일 : noerror@hitel.net
조회수 : 972
작성일 : 2006-07-22 16:53:55
목 : 손쉽게 카메라 흔들기

 

게임중에 충격등의 효과시 카메라를 흔들때 간단하게 sin 함수를 이용해서 그럴듯하게 처리하는 팁입니다. (약간은 감강적인 방식입니다만 - 이론적 근거가 별로 필요없다는 얘기죠. ^^ - 효과는 괜찮습니다.) 

결론부터 말씀드리자면 sin 함수를 여러개 합해서 사용하는 것입니다. 실제로 제어쪽에서는 충격(임펄스)를 가해서 그 응답 특성으로 시스템 특성이나 안정도등을 분석하기도 합니다. 보통 시간에 따른 주파수 특성을 분석하는데, 역으로 사인파로 어떤 특성을 가진 시스템을 만든다고 생각하면 될거 같네요. (구지 그럴듯하게 말을 붙이자면... ^^) 

기본적으로 사인파의 결과가 부드럽게 나타나기 때문에 자연스럽게 연속적인 모양으로 나옵니다. 충격에 따른 사인파의 특성 (진동하는 정도와 주파수, 충격이후 진폭이 서서이 줄어드는 특성)을 아래처럼 간단하게 사인함수로 구현할 수 있습니다. 

W = sin( 2 * 3.14159f * (t * freq) + phase ) * amp * (decaysec - t) / decaysec ; 

t 현재 시간, amp(const) 진폭, freq(const) 진동수, phase(const) 위상, decaysec(const) 선형감쇄시간 

사실상 특별한 이론이 있다기 보다는 상황에 따라 감각적으로 각 상수를 정해서 표현하게 됩니다.^^ 
* 진폭은 결과가 상하로 이동하는 정도가 되며 값이 클수록 더 크게 진동합니다. 
* 진동수는 초당 상하 운동하는 횟수로 값이 클수록 더 빨리 진동합니다. 
* 위상은 함수의 시작 포지션 정도로 실제로 값에 따른 느낌을 주는 것은 아니지만 함수들을 여러개 더할 때 좀 더 다양한 형태로 결과가 나옵니다. (사실상 주파수가 n 배로 할 경우 작은 주파수에서 항상 0가 되는 데, 위상을 주면 결과가 다르게 나옵니다. - 어차피 상수값을 감각적으로 넣는 데, 결과물에 다양함을 줄 수 있는 값 정도로 보면 될거 같습니다.) 
* 감쇄시간은 감쇄되는 함수모양에 따라 다른데, 어차피 모델링할 정확한 모양이 있는 게 아니므로 그냥 단순히 시간에 따라 감쇄한다고 설정하면 선형으로 하는 것도 별 문제는 없어 보입니다. (이 경우 t 가 decaysec 보다는 작거나 같아야 겠죠.) 

자 그럼 이걸로 어떻게 사용하냐 하면 

float t = (timeGetTime() - m_uWaveStartTime) * 0.001f; 

if (t < m_fDecayTime) 

    camera.pivot.y += (sin (2.0f * 3.14159f * t * 3) * 30.0f + 
        sin (2.0f * 3.14159f * t * 7 + 0.2f) * 10.1f + 
        sin (2.0f * 3.14159f * t * 15 + 0.5f) * 1.1f)) * ( m_fDecayTime - t) / m_fDecayTime; 


이런 식입니다. ^^ 

실제 주파수는 화면 갱신 타임에 영향을 주기 때문에 값이 크더라도 크게 의미가 없습니다. 
그리고 만약 60 hz로 갱신되는 모니터라면 화면이 흔들리지 않는 상황이 생깁니다. ^^ 
(여러번 해보면 주파수가 높은 사인파의 진폭에 대한 느낌이라던가, 파형수가 많을 때와 적을 때의 차이라던가하는 느낌이 옵니다.) 

그냥 적당히 감각적(!)으로 상수를 설정해서 사용해보고, 결과가 괜찮으면 OK!! 
(흔들기 뿐 아니라, 번쩍거리기 등 활용 예는 많겠죠 ?) 

이상 별 내용은 없지만, 너무 간단해서 별로 이슈화 안되는 내용을 함 적어봤습니다.

Posted by blueasa

댓글을 달아 주세요