자동차 및 대부분의 차량은 연료를 동력으로 변환하면서 배기 가스를 방출합니다. Unity의 빌트인 파티클 시스템을 사용하면 차량에 배기 가스를 추가하여 더 자연스럽게 표현할 수 있습니다.
배기 파이프에서 바로 방출된 배기 가스는 속도가 빠르지만 외부 공기와 닿으면서 점점 느려집니다. 배기 가스는 느려지면서 확산되므로, 점점 희미해지다가 마침내 공기 중으로 사라집니다. 배기 가스는 뜨거우므로 주변의 차가운 공기와 닿으면 살짝 상승하기도 합니다. 이러한 요소들로 인해 사실적인 효과를 구현하려면 배기 가스의 파티클이 수명 주기 동안 다음의 규칙을 준수해야 합니다.
먼저 Shape를 Cone으로 설정하고, Angle 프로퍼티를 0으로 설정하십시오. 이때 생성되는 “원뿔”은 실제로는 원통형 파이프입니다.
다음으로, Radius 프로퍼티의 경우 값은 차량의 배기 파이프의 크기에 따라 다릅니다. 차량 모델의 배기 파이프와 일치하는지 확인하는 가장 간편한 방법은 씬 뷰에서 반지름 기즈모를 사용하는 것입니다. 반지름은 파티클 크기, 이미션 레이트 등을 포함하여 선택한 프로퍼티 설정의 매우 많은 사항을 결정합니다. 이 예제에서는 차량이 Unity의 표준 크기 규칙을 따른다고 가정합니다. 즉 1 월드 단위가 1미터이므로, 반지름은 약 0.05m(5cm)입니다.
연기의 시각적 표현을 위해 Unity의 스탠다드 에셋 패키지에는 연기 파티클에 적합한 그래픽이 포함되어 있습니다. 이 패키지를 아직 설치하지 않았다면 스탠다드 에셋을 참조하십시오.
이 패키지를 설치했으면 Renderer 모듈로 이동한 후 Material 프로퍼티를 StandardAssets/ParticleSystems/Materials 폴더의 ParticleSmoke 머티리얼 중 하나로 설정합니다. 어두운 연기는 ParticleSmokeBlack을 사용하고, 밝은 연기는 ParticleSmokeWhite를 사용하십시오.
기본 수명 주기 5초는 일반적으로 자동차 배기 연기에 사용하기에는 너무 깁니다. 이 값과 다른 일반 시뮬레이션 프로퍼티를 변경하려면 메인 모듈을 여십시오. 이 모듈은 게임 오브젝트와 이름이 같은 Particle System 컴포넌트의 상단에 있습니다. 이 모듈에서 다음을 수행하십시오. Start Lifetime을 2.5초로 설정합니다. Simulation Space를 World로 설정합니다. 월드 시뮬레이션 공간을 사용하면 연기가 차량이 움직일 때도 생성된 위치에 머무르게 만들 수 있습니다. Gravity Modifier를 작은 음수 값으로 설정합니다. 이 예제에서는 –0.1을 사용합니다. 음수 값의 중력 효과는 연기 파티클이 뜨거운 가스로 구성된 것처럼 상승하도록 만듭니다. 마지막으로 Start Rotation 옆에 있는 작은 메뉴 화살표를 클릭하고 Random Between Two Constants를 선택합니다. 두 값을 각각 0 및 360으로 설정합니다. 그러면 연기 파티클이 생성될 때 무작위로 회전합니다. 여러 파티클이 정확하게 동일하게 정렬되어 있으면 눈에 잘 띌 뿐만 아니라 뚜렷한 형태 없이 생겨나고 사라지는 실제 연기의 효과를 반감시킵니다.
이 단계에서 연기 파티클은 사실적으로 보이며, 기본 이미션 레이트로 인해 엔진이 자연스럽게 “칙칙”거리는 효과가 만들어집니다(아직 연기는 밖으로 확산되거나 흩어지지 않습니다). 다음으로는 시간에 지남에 따라 확산되도록 만들어야 합니다. 이렇게 하려면 다음 단계를 따르십시오. Color Over Lifetime 모듈을 활성화하고 엽니다. Color 프로퍼티의 컬러 피커를 클릭합니다. Gradient Editor 창에서 그레디언트 오른쪽에 있는 상단 스톱을 클릭하고 알파를 0으로 설정합니다. 상단 스톱은 알파를 제어하고 하단 스톱은 컬러를 제어합니다. 이제 연기 파티클이 씬에서 페이드아웃하는 모습을 볼 수 있습니다. 엔진의 청결도에 따라 그레디언트의 초기 알파값을 낮출 수도 있으며, 짙고 어두운 연기는 더럽고 비효율적인 연소를 나타내는 경향이 있습니다.
연기는 사라질 뿐만 아니라 공기 중으로 퍼지면서 크기도 커집니다. 이렇게 하려면 다음 단계를 따르십시오. Size Over Lifetime 모듈을 활성화하고 엽니다. Size 커브를 클릭하고, 인스펙터 하단의 커브 에디터에서 왼쪽에 있는 핸들을 수직으로 이동시켜 파티클이 전체 크기의 일부에서 시작되도록 만듭니다. 선택하는 정확한 크기는 배기 파이프의 크기에 따라 다르지만, 파이프보다 약간 큰 값을 사용하면 파이프에서 가스가 빠져나가는 모습을 멋지게 구현할 수 있습니다. 마지막으로 씬 뷰의 파티클 시스템 시뮬레이션을 사용하면 연기가 어떻게 보일지 직접 파악하기 쉽습니다. 연기가 원하는 효과만큼 멀리 퍼지지 않을 경우 메인 모듈의 Start Size를 변경하십시오.
마지막으로 연기는 퍼지면서 속도가 줄어들어야 합니다. 이렇게 하려면 다음 단계를 따르십시오. Force over Lifetime 모듈을 활성화하고 엽니다. Space를 Local로 설정합니다. 힘의 Z 컴포넌트를 음수 값으로 설정하면 파티클이 힘에 의해 밀려나는 효과를 구현할 수 있습니다(시스템은 파티클을 오브젝트의 로컬 공간에 양의 Z 방향으로 방출함). 이 예제에서는 위에서 설정한 프로퍼티에 가장 적합한 –0.75를 값으로 사용합니다.
배기 가스 파티클 시스템을 배치한 후 메인 차량의 자식 게임 오브젝트로 만드십시오. 이렇게 하면 배기 가스가 연기와 함께 움직입니다. 효과가 변경 사항 없이 플레이되기만 하면 되는 간단한 경우에는 Play On Awake 및 Looping 프로퍼티를 활성화할 수 있습니다. 하지만 차량이 움직일 때 이미션 레이트 같은 프로퍼티를 변경할 수도 있습니다. 이미션 레이트를 변경하면 엔진이 빠르게 작동할수록 가스가 더 많이 방출되므로 사실성을 높일 수 있으며, 차량이 움직일 때 연기 파티클이 퍼져나가지 않도록 하는 데에도 도움이 됩니다. 빠르게 움직이지만 배기 가스를 아주 조금 배출하는 차량은 연기가 “뻐끔”거리는 것처럼 보이므로 너무 비현실적으로 보이게 됩니다.
이미션 레이트는 스크립트에서 아주 쉽게 바꿀 수 있습니다. 엔진 회전 속도나 차량 속도를 나타내는 스크립트에 변수가 있는 경우 이 값을 상수에 곱한 다음 그 결과 값을 파티클 시스템의 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;
}
}
기본 구성표를 통해 배기 가스 연기를 아주 실감나게 만들 수 있지만, 파티클 시스템의 프로퍼티가 변경되면 엔진의 “특성”이 바뀐다는 것을 알 수 있습니다. 제대로 튜닝되지 않은 비효율적인 엔진은 연료를 불완전하게 연소시켜 공기 중에 무겁고 어두운 배기 가스가 오래 지속됩니다. 오래된 농장의 트랙터에는 완벽할 수 있지만 고성능의 스포츠카에는 적합하지 않습니다. “깨끗한” 엔진의 경우 파티클의 수명 주기, 불투명도, 크기 증가에 작은 값을 사용하십시오. “더러운” 엔진의 경우에는 이 값을 늘려야 하고 Emission 모듈의 Bursts 프로퍼티를 사용하여 엔진이 털털거릴 수 있도록 만들어야 합니다.