If you're seeing this message, it means we're having trouble loading external resources on our website.

웹 필터가 올바르게 작동하지 않으면 도메인 *. kastatic.org*.kasandbox.org이 차단되어 있는지 확인하세요.

주요 내용

입자 시스템이란?

1982년에 Lucasfilm Ltd. 의 연구원인 윌리엄 리브즈(William T. Reeves) 는 영화 스타트랙 2: 칸의 분노(Star Trek II: The Wrath of Khan) 제작에 참여했습니다. 영화 대부분은 제네시스 장치를 중심으로 전개됩니다. 일종의 어뢰인 제네시스 장치는 황량하고 생명이 없는 행성의 물질을 재구성하고 식민지를 위한 거주지를 생성하는 능력이 있습니다. 영화에서 행성에서 인간이 살 수 있도록 지구와 비슷한 환경으로 만드는 과정 “테라포밍" 의 일부로 행성이 불의 물결로 뒤덮는 장면이 있습니다.
칸아카데미 동영상 래퍼
컴퓨터 그래픽에서 매우 일반적이면서 유용한 기술인 입자 시스템(particle system)은 다음과 같은 효과를 불러일으키며 새로운 용어로 자리잡았습니다.
“입자 시스템은 작은 입자들이 뭉쳐 흐릿한 물체를 형상화하는 집합체입니다. 시간이 지나면서 입자들은 계를 형성하고 계 내부에서 이동 또는 변형되며 결국 사라집니다.”—윌리엄 리브즈,"입자 시스템—흐릿한 물체 클래스 모델링 기술,"(A Technique for Modeling a Class of Fuzzy Objects); ACM Transactions on Graphics 2:2 (1983년 4월), 92.
1980년 초에 처음 선보인 입자 시스템은 이후에 무수히 많은 비디오 게임, 애니메이션, 디지털 예술 작품에서 불, 연기, 폭포, 안개, 잔디, 거품 등과 같은 불규칙적인 형태의 다양한 자연 현상을 모델링 하는데 사용되었습니다.
여기서는 프로그래밍 세계에서 입자 시스템을 구현하는 전략을 집중적으로 살펴보겠습니다. 코드를 어떻게 구성할까요? 개별 입자와 시스템 자체 정보는 각각 어디에 저장해야 할까요? 이 단원에서 살펴볼 예제는 입자 시스템과 연관된 데이터를 관리하는 것에 중점을 둡니다. 예제에서는 단순한 모양을 가진 입자에 가장 기본적인 행동만(중력과 같은) 적용할 겁니다. 그러나 여기서 배우는 프레임워크를 이용하고 자신만의 흥미로운 방법으로 입자를 렌더링하고 행동을 만들면 다양한 효과를 만들 수 있습니다.
위 인용문처럼, 입자 시스템은 단순한 물체의 집합체입니다. 전에도 물체의 집합체를 프로그래밍한 적이 있습니다. 전에 무버의 배열을 만들어 벽에 튕기는 공을 만들었습니다. 그러나 입자 시스템에서 집합체 개념은 훨씬 더 복잡합니다. 집합체의 규모는 다양합니다. 입자가 없을 수도 있고 열 개나 만 개가 있을 수도 있습니다. 집합체는 구성하는 입자뿐만 아니라 집합체 그 자체에도 행동과 프로퍼티가 있습니다. 오늘 목표는 다음과 같은 프로그램을 만드는 것입니다.
var ps = new ParticleSystem();

draw = function() {
    background(255, 255, 255);
    ps.run();
};
이 코드는 아무런 입자도 참조하지 않습니다. 하지만 마지막에는 화면 곳곳을 날아다니는 입자로 채울 겁니다. 이제 여러 객체형을 갖는 프로그램과 객체로 이루어진 다른 집합체를 기록하는 객체를 만들어 볼 것입니다. 이를 이용하여 강력한 입자 시스템을 생성하고 스스로 강력한 프로그램을 만들 수 있는 능력을 기를 수 있습니다.
앞으로 입자 시스템 프로그래밍을 배울 때 두 가지 객체 지향 프로그래밍 고급 기술인 상속성(inheritance)다형성(polymorphism)을 이용할 것입니다. 지금까지 봤던 예제는 항상 "무버(movers)" 또는 “진자(oscillators)”와 같은 단일 유형의 객체 배열을 사용했습니다. 상속성과 다형성 개념을 이용하여 서로 다른 유형의 객체를 포함하는 단일 배열을 저장하는 편리한 방법을 배울 것입니다. 이렇게 하면 입자 시스템의 입자를 단일 유형뿐만 아니라 여러 가지 유형을 갖도록 만들 수 있습니다.
이 단원에서는 입자 시스템을 일반적으로 사용하는 법을 살펴볼 겁니다. 그러나 여기서 만드는 프로그램에서 입자가 어떤 모습을 하거나 특정하게 행동한다고 해서 여러분도 꼭 이렇게 만들어야 한다는 것은 아닙니다. 상상력을 마음껏 펼쳐보세요. 여기서 배우는 입자 시스템이 빛을 내며 앞으로 날아가고 중력을 받아 떨어진다고 해서 모든 시스템이 반드시 이렇게 작동해야 한다는 법은 없습니다. 이 단원에서는 많은 요소를 가진 시스템을 다루는 방법에 중점을 둡니다. 이 요소들의 모양이나 행동은 오로지 여러분에게 달려 있습니다.