Version: 2019.2
단순한 폭발 구현
파티클 시스템의 버텍스 스트림과 스탠다드 셰이더 지원

차량 배기 가스 구현

자동차 및 대부분의 차량은 연료를 동력으로 변환하면서 배기 가스를 방출합니다. 파티클 시스템을 추가하면 차량에 배기 가스를 추가하여 더 자연스럽게 표현할 수 있습니다.

파티클 시스템을 통해 생성된 배기 가스
파티클 시스템을 통해 생성된 배기 가스

파티클의 타임라인

파이프에서 바로 방출된 배기 가스는 속도가 빠르지만 외부 공기와 닿으면서 점점 느려집니다. 배기 가스는 느려지면서 확산되므로 점점 희미해지다가 공기 중으로 사라집니다. 배기 가스는 뜨거우므로 주변의 차가운 공기와 닿으면 살짝 상승하기도 합니다.

배기 가스의 파티클은 처음에는 파이프 직경보다는 작아야 하지만 짧은 수명 주기 동안 크기가 급격하게 증가합니다. 처음에는 반투명한 상태지만 나중에 공기와 섞이면서 완전히 투명해져서 사라집니다. 동역학적으로 파티클은 처음에는 빠른 속도로 방출되지만 급격하게 느려지면서 위로 살짝 상승합니다.

구현

Shape 모듈에서 Cone 모양을 선택한 후 Angle 프로퍼티를 0으로 설정합니다. 이 경우 “원뿔”은 실린더 모양의 파이프가 됩니다. 파이프의 Radius 는 자연스럽게 차량의 크기에 따라 달라지지만 보통 씬 뷰에서 차량 모델에 맞추어 기즈모의 반지름을 설정하면 됩니다. 통상적으로 차량 모델은 후면에 구멍이나 배기 가스 파이프가 있으므로 이에 맞추면 됩니다. 여기서 반지름은 파티클 크기나 이미션 레이트 등과 같이 몇몇 설정할 수 있는 프로퍼티 설정에 영향을 줍니다. 이 예제에서는 차량이 1월드 단위가 1미터인 Unity의 기본 규격을 따르는 자동차라고 가정합니다. 따라서 반지름은 약 0.05 또는 5cm가 됩니다.

연기 파티클에 적합한 그래픽은 스탠다드 에셋에 제공된 Smoke4 머티리얼에 있습니다. 스탠다드 에셋을 설치하지 않았다면 메뉴에서 에셋(Assets) > 패키지 임포트(Import Package) > 파티클(Particles) 로 이동합니다. 그런 다음, 파티클 시스템의 렌더러(Renderer) 모듈로 이동한 후 머티리얼(Material) 프로퍼티를 Smoke4 로 설정합니다.

디폴트 수명이 5초면 일반적인 배기 가스로는 너무 길기 때문에 파티클 시스템 모듈(“Exhaust”와 같이 게임 오브젝트와 동일한 이름)을 열어 Start Lifetime 을 약 2.5 초로 설정합니다. 또한 이 모듈에서 Simulation SpaceWorld 로 설정한 후 Gravity Modifier 를 –0.1과 같은 작은 음의 값으로 설정합니다. 월드 시뮬레이션 공간을 사용하면 차량이 이동해도 생성된 배기 가스가 그 자리에 머무르게 됩니다. 음의 중력 효과로 인해 연기 파티클이 마치 뜨거운 가스로 구성된 것과 같이 상승합니다. 여기서 Start Rotation 옆에 있는 작은 메뉴 화살표를 사용하여 Random Between Two Constants 옵션을 선택하면 더 나은 결과를 얻을 수 있습니다. 두 값을 0과 360으로 각각 설정하면 연기 파티클이 방출되면서 무작위로 회전합니다. 여러 파티클이 정확하게 동일하게 정렬되어 있으면 눈에 잘 띌 뿐만 아니라 뚜렷한 형태 없이 생겨나고 사라지는 실제 연기의 효과를 반감시킵니다.

이 단계에서 연기 파티클은 사실적으로 보이며, 디폴트 이미션 레이트로 인해 엔진이 자연스럽게 “칙칙”거리는 효과가 만들어집니다(아직 연기는 밖으로 확산되거나 흩어지지 않습니다). Color Over Lifetime 모듈을 연 후 그레디언트의 오른쪽 상단 끝부분을 클릭하면 컬러의 “알파” 값 투명도를 제어할 수 있습니다. 알파 값을 0으로 설정하면 연기 파티클이 씬에서 완전히 사라지는 현상을 확인할 수 있습니다. 엔진의 청결도에 따라 그레디언트의 초기 알파값을 조절할 수도 있으며, 짙고 어두운 연기는 더럽고 비효율적인 연소를 나타내는 경향이 있습니다.

연기는 사라질 뿐만 아니라 공기 중으로 퍼지면서 크기도 커집니다. 이 효과는 Size Over Lifetime 모듈로 간단히 구현할 수 있습니다. 모듈을 연 후, 커브를 선택한 후 커브 핸들을 왼쪽 끝으로 이동시켜서 파티클이 실제 전체 크기보다 더 작은 크기로 시작하도록 해야 합니다. 정확한 크기는 배기 가스 파이프의 크기에 따라 달라지지만, 파이프보다 약간 더 큰 값으로 설정하면 가스가 빠지는 모습을 잘 표현할 수 있습니다. 파티클을 파이프와 동일한 크기로 시작하도록 설정하면, 정해진 형태가 없는 가스가 마치 파이프의 모양대로 나타나는 것처럼 보입니다. 씬 뷰의 파티클 시스템 시뮬레이션을 사용하면 연기가 어떻게 보일지 직접 파악하기 쉽습니다. 연기가 원하는 효과만큼 멀리 퍼지지 않을 경우 파티클 시스템 모듈의 Start Size 를 늘리면 됩니다.

마지막으로 연기는 퍼지면서 속도가 줄어들어야 합니다. 가장 쉬운 방법은 Force Over Lifetime 모듈을 사용하는 것입니다. 모듈을 연 후 Space 옵션을 Local 로 설정한 후 힘의 Z 컴포넌트를 음의 값으로 설정하면 파티클이 힘에 의해 밀려나는 효과를 구현할 수 있습니다. 시스템은 파티클을 오브젝트의 로컬 공간에 양의 Z 방향으로 방출하기 때문입니다. 다른 파라미터를 위에서 제시한 값으로 설정할 경우 –0.75 정도로 설정하는 것이 적당합니다.

사용법

배기 가스 파티클 시스템은 메인 차량의 자식 오브젝트에 포지션하면 됩니다. 간단한 게임의 경우 Play On AwakeLooping 프로퍼티를 활성화한 후 시스템을 실행하면 됩니다. 하지만 대부분의 경우 차량이 움직일 때 배기 가스의 이미션 레이트를 조절할 수도 있습니다. 실제로 그렇기도 합니다. 즉, 엔진이 빠르게 작동할수록 가스가 더 많이 방출됩니다. 차량이 움직일 때 연기 파티클이 퍼져나가지 않도록 하는 데 도움이 됩니다. 빠르게 움직이지만 배기 가스를 아주 조금 배출하는 차량은 연기가 “뻐끔”거리는 것처럼 보이므로 너무 비현실적으로 보이게 됩니다.

이미션 레이트는 스크립트에서 아주 쉽게 바꿀 수 있습니다. 엔진 회전 속도나 차량 속도를 나타내는 스크립트에 변수가 있는 경우 이 값을 상수에 곱한 다음 그 결과 값을 파티클 시스템의 emissionRate 프로퍼티에 할당하면 됩니다.

    // C#

        using UnityEngine;
        using System.Collections;

        public class PartScriptTestCS : MonoBehaviour {

            public float engineRevs;
            public float exhaustRate;

            ParticleSystem exhaust;


            void Start () {
                exhaust = GetComponent<ParticleSystem>();
            }
    

            void Update () {
                exhaust.emissionRate = engineRevs * exhaustRate;
            }

        }



        // JS

        var engineRevs: float;
        var exhaustRate: float;

        var exhaust: ParticleSystem;


        function Start() {
            exhaust = GetComponent.<ParticleSystem>();
        }


        function Update () {
            exhaust.emissionRate = engineRevs * exhaustRate;
        }

추가 아이디어

기본 구성표를 통해 배기 가스 연기를 아주 실감나게 만들 수 있지만 파라미터에 따라 엔진의 “특성”이 바뀐다는 것을 알 수 있습니다. 제대로 튜닝되지 않은 비효율적인 엔진은 연료를 불완전하게 연소시켜 공기 중에 무겁고 어두운 배기 가스가 오래 지속됩니다. 오래된 농장의 트랙터에는 완벽할 수 있지만 고성능의 스포츠카에는 적합하지 않습니다. “깨끗한” 엔진의 경우 파티클의 수명 주기, 불투명도, 크기 증가에 작은 값을 사용해야 합니다. “더러운” 엔진의 경우에는 이 값을 늘려야 하고 Emission 모듈의 Bursts 프로퍼티를 사용하여 엔진이 털털거릴 수 있도록 만들어야 합니다.

단순한 폭발 구현
파티클 시스템의 버텍스 스트림과 스탠다드 셰이더 지원