본문 바로가기
개발/Unity

유니티 - 스트로보 효과 (Stroboscopic Effect with Unity)

by 피로물든딸기 2023. 3. 26.
반응형

Unity 전체 링크

 

스트로보 효과(Stroboscopic Effect)는 착시 현상 중 하나다.

짧은 시간 내에 반복적으로 연속적인 움직임이 나타날 때 생기는 현상이다.

예를 들어 앞으로 회전하는 자동차 바퀴의 속도가 높아지면 뒤로 회전하는 것처럼 보이게 된다.

 

바퀴에서 나타나는 스트로보 효과를 유니티로 재현해보자.


오브젝트를 회전하는 스크립트를 Sphere에 추가하자.

Range를 이용해 슬라이드 바로 rotateSpeed를 0 ~ 1500 사이가 되도록 하였다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class StroboscopicEffect : MonoBehaviour
{
    [Range(0, 1500)]
    public int rotateSpeed = 30;
    Vector3 offset, rotation;

    void FixedUpdate()
    {
        offset = Vector3.one;

        Debug.Log(360.0f / Time.fixedDeltaTime);
        rotation.y = -(offset.x + offset.y) * Time.fixedDeltaTime * rotateSpeed;

        transform.Rotate(rotation);     
    }
}

매 프레임마다 정확히 움직이게 하기 위해 FixedUpdate에서 fixedDeltaTime을 이용하여 회전하였다.

 

Sphere에 얇은 큐브를 6개 추가하자.

 

그리고 Y 축으로 30도 단위로 회전시켜 아래의 모양이 되도록 하자.

Mesh Renderer에서 그림자 효과를 끄면 Sphere에서 큐브의 그림자가 사라진다.

 

카메라를 위로 향하게 한 후, 게임을 실행하면 아래와 같이 바퀴가 회전하는 것처럼 보인다.

 

Debug.Log(360.0f / Time.fixedDeltaTime) 결과를 보면 값이 18000이 나오는 것을 알 수 있다.

 

한 프레임당 바퀴가 멈추려면 속도가 18000이어야 하는 것을 의미한다.

그런데 바퀴는 30도 간격으로 배치되어 있어 12 조각이 난 상태다.

따라서 18000 / 12 = 1500이면 충분히 바퀴가 멈추게 될 것이다.

 

또한 속도를 높일수록 바퀴가 점점 느려지다가 역행하는 것처럼 보이기도 한다.

 

즉, 바퀴가 매 프래임마다 너무 빨리 움직여서 350도 회전한다면, 이것은 반대로 -10도 회전하는 것처럼 보이게 된다.

 

위의 실행결과는 아래의 unitypackage에서 확인 가능하다.

Stroboscopic_Effect.unitypackage
0.01MB

 

Unity Plus:

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Unity Pro:

 

Unity Pro

The complete solutions for professionals to create and operate.

unity.com

 

Unity 프리미엄 학습:

 

Unity Learn

Advance your Unity skills with live sessions and over 750 hours of on-demand learning content designed for creators at every skill level.

unity.com

반응형

댓글