본문 바로가기

Home > 열린마당 > 공개SW 소식

공개SW 소식

[알아봅시다] 물리엔진

OSS 게시글 작성 시각 2016-01-06 17:18:11

2016년 01월 04일 (월)

ⓒ 디지털타임스, 이형근 기자 bass007@dt.co.kr


가상으로 만들어진 중력·속도 실시간 구현
강체동역학·유동역학 등 물리시스템 시뮬레이션 SW
SW속 수많은 변수 계산… 막대한 시간·자원 절감
게임·영화·CG 등 응용 확대


[알아봅시다] 물리엔진
물리엔진이 적용, 장애물의 파괴 정도, 연쇄반응을 계산하는 스마트폰 게임 앵그리버드. 출처 앵그리버드 홈페이지


스마트폰 게임 '앵그리버드'는 각 특성을 가진 새를 이용해 장애물을 무너뜨려 적을 퇴치하는 게임입니다. 새가 장애물과 충돌하면 각 장애물들이 실제로 타격을 입은 것처럼 연쇄반응을 일으킵니다. 게임을 진행하면 새가 날아가는 속도와 방향을 고려해 장애물이 연쇄반응을 일으키는 것을 볼 수 있습니다.


이렇게 실제와 같은 상황이 연출될 수 있는 것은 이 게임에 물리엔진이 적용됐기 때문입니다. 이전까지는 게임 디자이너가 각 상황에 맞는 화면 변화를 설정해야했지만, 물리엔진을 적용하면 실제로 상황이 벌어진 것을 감안하고 작용과 반작용이 일어납니다. 가상으로 중력과 속도가 존재하는 세상을 만드는 것입니다.


[알아봅시다] 물리엔진
박스2D 물리엔진. 실제 충돌의 힘, 각도를 계산해 연쇄효과를 구현한다. 출처 위키피디아


물리 엔진(physics engine)은 강체동역학(충돌 감지 포함), 연체동역학, 유동역학과 같은 특정 물리 시스템을 최대한 시뮬레이션하는 컴퓨터 소프트웨어(SW)입니다. 이 엔진은 컴퓨터 그래픽, 비디오 게임, 영화 분야에 주로 쓰입니다. 최근에는 비디오 게임에 미들웨어로 많이 이용되며 실시간으로 게임에서 발생하는 상황을 구현합니다. 물리엔진은 고성능 과학 시뮬레이션과 같은 특정 분야의 물리 현상을 시뮬레이션하기 위한 SW를 뜻하기도 합니다.


물리엔진은 물리연산으로 가능합니다. 물리연산의 기본은 충돌 판정과 동적 시뮬레이션(특정 지점의 힘을 구현하는 것이 아니라 현실처럼 움직이는 물체의 움직임 전체를 시뮬레이션하는 것)입니다. 이외에 유체 시뮬레이션과 모션 컨트롤(스크립트 언어에 의해 물체의 동작을 제어하는 기능)·외부 개체를 도입해서 적용하는 등 기능이 추가돼 정밀한 물리엔진을 만들어 줍니다.


물리엔진은 학문적 시뮬레이션과 3D CG 애니메이션 제작 등 전문 분야에서만 사용되고 있었지만, 최근에는 고급 물리 엔진을 탑재 한 게임기, 그래픽카드 등장으로 물리 연산을 이용한 게임들이 등장하면서 활용이 확산되고 있습니다.


또 물리연산을 탑재한 3D CG SW는 전문가들만 사용이 가능했지만, 최근에는 오픈소스를 기반으로 한 물리엔진이 등장하고, 사용도 쉬워지면서 일반인들도 물리엔진을 다루는 경우가 많아지고 있습니다. 영상에 관심이 있는 사람이라면 오픈소스 물리엔진을 이용해 짧은 3D CG 애니메이션을 제작하는 것도 가능합니다.


물리엔진은 여러 가지 종류가 있습니다. 각 물리엔진은 기능과 사용성에 특화되어 있습니다. 대표적인 하복 물리엔진(Havok Physics)는 아일랜드 하복이 개발한 제품입니다. 2000년 처음 공개된 하복 엔진은 C, C++ 언어로 제작됐습니다. 하복 엔진은 1인칭 게임에 많이 사용되고 있습니다. 1인칭 비디오 게임 개체로 다른 개체, 등장 캐릭터 간 실시간 상호 작용을 보다 쉽게 구현할 수 있어 현재까지 150여개 게임에 탑재됐습니다.


박스2D(Box2D)는 질량 · 속도 · 마찰 등, 역학 법칙을 시뮬레이션할 수 있는 2D 물리엔진입니다. 2차원이기 때문에 고성능이 아니라도 쉽게 구현할 수 있는 것이 특징입니다. 앵그리버드에 사용된 물리엔진도 박스2D입니다.


불릿(Bullet)은 오픈소스 물리엔진입니다. 불릿은 하복 물리엔진에서 일했던 개발자가 만들었으며, 딱딱한 블록같은 소재의 시뮬레이션 뿐 아니라, 연체 소재의 시뮬레이션을 연속적으로 가능하게 하는 기능을 가지고 있습니다. 불릿의 개발을 주도한 개발자가 소니컴퓨터엔터테인먼트에서 2003년부터 2010년까지 근무해, 플레이스테이션 게임기에 불릿이 적용된 게임들이 등장한 바 있습니다.


ODE(Open Dynamics Engine)도 오픈소스 물리엔진입니다. ODE는 동역학 연산 부분과 충돌 탐지 연산 부분으로 구성되어 있습니다. 유체 시뮬레이션 · 직물 시뮬레이션 등은 구현되어 있지 않지만, 대량의 객체들이 충돌하는 계산을 할 수 있습니다.


물리엔진은 복잡한 계산을 순식간에 함으로, 가상의 세계를 만들어 주는 SW입니다. 물리엔진이 없으면 SW에서 발생하는 수 많은 변수를 계산하고, 측정해야 하는데 이럴 경우 많은 시간과 자원이 필요합니다.


사실 물리엔진은 PC의 탄생과도 밀접한 관계가 있습니다. 최초의 컴퓨터 에니악(ENIAC)은 탄도 계산을 위해 개발 됐습니다. 수학자들이 지도와 각도기로 했던 탄도 계산을 에니악이 처리했습니다. 당시 에니악이 계산했던 탄도의 궤적은 이제 스마트폰으로도 쉽게 측정할 수 있는 수준이지만, 시간이 흘렀기 때문에 더 복잡한 계산을 해야하는 SW가 필요하게 되고, 이 SW를 물리엔진이 담당하고 있습니다.


1980년대부터 슈퍼컴퓨터가 등장해 대기와 해류, 날씨 등을 시뮬레이션해서 사용됐습니다. 오늘날 물리엔진은 더 영역이 넓어지고 있습니다. 제품을 만들 때 발생할 수 있는 일들을 SW로 시뮬레이션함으로써 오차와 비용을 줄이고, 개발 기간을 단축할 수 있습니다. 자동차 업체와 항공기 제작업체 경우 막대한 개발 비용을 줄이기 위해 이같은 방법을 쓰고 있습니다.




※ 본 내용은 (주)디지털타임스(http://www.dt.co.kr/)의 저작권 동의에 의해 공유되고 있습니다.
Copyright ⓒ 디지털타임스. 무단전재 및 재배포 금지


[원문출처 : http://www.dt.co.kr/contents.html?article_no=2016010502101860718001]

맨 위로
맨 위로