혹시 물리엔진 관련 부분에 종사하시는 선배님들이 계실까요?

awidesky의 이미지

물리엔진 개발자를 꿈꾸는 대학생입니다.
게임을 만들기보다는 물리적인 원리를 컴퓨터가 더 잘 이해하도록 알고리즘화 시키고 구현하는 부분에 흥미를 느껴, 현 컴공과 1학년 재학 중에 data structure나 물리 엔진 관련 도서를 보며 독학하고 있습니다.
다름이 아니라 교양과목 과제로 "진로에 대해 직간접적으로 도움을 받을 수 있는 사람의 조언 또는 자
문"을 받아 보는 것이 있는데, 혹시 물리엔진 관련 부분에 종사하시는 개발자분들께서 보신다면 다음 질문들에 대해 조금 도움을 주실 수 있을까요?

1. 물리 엔진이라는 분야가 물리(벡터로 기술하는 물리 운동 체계, 힘과 드래그 등등), 수학(벡터, 행렬, homogeneous 좌표계 등등), 프로그래밍(벡터 클래스를 만들 때 4word padding, 여러 번 이루어지는 계산에서의 효율적인 코드, floating point를 이용한 fast inverse square root 등등) 이렇게 3가지 분야 모두에 웬만한 지식이 있어야 하는 것으로 알고 있습니다. 혹시 이 분야들 중에 우선순위를 둔다면 무엇부터, 어느 부분을 조금 더 무게를 두고 배워야 할까요??
(ex 간단한 물리엔진을 만들어 보려다가 openGL을 배우기 시작 -> homogeneous 죄표계가 뭐지? -> 찾아보니 행렬, 사원수, QR분해 등등 수두룩... 이렇게 깊이 들어갈수록 너무 수학이나 물리에 치중된 것을 공부해야 할 때가 많은데, 배우면서 재미는 있지만 혹시 제 공부법에 문제가 있는 건 아닌지 궁금해서 드린 질문입니다.)

2. 상술했다시피 상당히 복잡하고 어려운 분야로 알고 있습니다. 나중에 관련 분야로 취업하는 데 있어서 석박사 학위가 필수일까요?

3. 유니티 프론트엔드는 사실상 물리보다는 게임 외부 디자인에 가까운 분야로 알고 있습니다. 그래서 언리얼 엔진을 배워 볼까도 생각해 봤는데 지금은 openGL을 이용해서 간단한 물리 현상(운동, 충돌, 용수철, 기회가 된다면 파괴 알고리즘까지)을 구현하는 물리 엔진과 그래픽 표시 부분을 아예 밑바닥부터 만들어보고 있습니다.
로우 레벨에서 무슨 일이 일어나는지가 궁금해 openGL쪽을 먼저 파고는 있지만, 혹시 그것보다 언리얼 등 상용 엔진 사용법을 먼저 공부해야 하는 것은 아닌지 궁금합니다.

모든 질문 하나하나 답해주실 필요 없이 개발자님들 편하신 대로 조금씩만 말씀해주셔도 제게는 큰 도움이 될 것 같습니다. 감사합니다!

ifree의 이미지

1. 물리 엔진에서 필요한 물리학은 대학의 일반 물리 수준이면 충분합니다.
수학에서 벡터와 행렬 및 쿼터니언 정도는 당연히 익숙해야 하는데, homogeneous 좌표계가 무엇인지는 모르겠네요.
프로그래밍에서 벡터 클래스를 만들 때 4 word padding 이 꼭 필요한 것은 아닙니다.
여러 번 이루어지는 계산에서의 효율적인 코드는 멀티프로세싱이나 비동기식 처리를 사용하면 될 것이고,
floating point를 이용한 fast inverse square root 은 무엇인가요? 그냥 square 를 하면 되지 않나?
이 분야들 중에 가장 중요한 것은 당연히 프로그래밍입니다.
물리적 충돌의 간단한 개념도 이를 프로그래밍으로 구현하는 것은 매우 어렵습니다.
참고로 open gl 은 단순한 그래픽 처리 라이브러리로 이 것이 물리적 현상을 처리해 주지는 않습니다.

2. 나중에 관련 분야로 취업하는 데 있어서 석박사 학위가 필수라고는 생각하지 않습니다. 이 바닥은 학위보다는 실제 코딩으로 구현하는 것이 중요합니다.

3. 유니티나 언리얼 엔진이나 마찬가지로 게임 로직만을 다루며 사용자가 직접 물리 법칙을 코딩해 넣기는 어렵게 되어 있습니다.

개인적인 노력으로 물리 엔진을 구현해 사용 가능한 결과물을 전달하는 것은 사실 상 불가능에 가깝습니다. 관련된 오픈소스에 참가해서 기여를 하거나, 기본적인 알고리듬을 이해하고 있다면 이를 구현하는 회사에 입사해서 프로젝트를 진행하는 것이 좋겠죠.
검은 사막을 만든 게임사가 게임 엔진을 직접 만드는 것으로 알고 있습니다.

awidesky의 이미지

감사합니다!
제가 만들어 보려는 것은 간단한 등가속도 운동이나 충돌 정도만 계산할 수 있는 물리 엔진을 만들고, openGL로 결과를 띄우는 것입니다. 프로그래밍이 중요하다고 하시니 다양하게 구현하고 배워보면서 더 익혀야겠네요!
상용 엔진 사용법을 먼저 배워야 하는지 불안했는데, 답변 듣고 앞길이 확실히 보이게 된 것 같습니다!
정말 감사드리고 좋은 하루 보내시길 바랍니다!!

라스코니의 이미지

우선 물리 엔진이 뭔지 전혀 모릅니다. 그냥 가벼운 개인적인 의견이라고 생각해 주세요.

1. 물리 엔진이 어떤 수준의 기술과 전문적인 지식이 요구되는 지는 모르겠으나 컴공 학부 수업을 들으면서 다 소화할 정도는 아니라고 생각되네요. 특히 그냥 3D가 아닌 물리 엔진 구현에 관한 것이라면 상당 수준의 그리고 다양한 물체 소재, 물성치, 구조 등에 대한 별도의 전문적인 지식이 필요할 것이라고 생각들어서 4년의 학부 공부로는 좀 부족하지 않나 싶네요. 관련 오픈 소스를 분석해 보면서 어떤 모듈이 정말 단순 코딩 스킬 이상의 전문 지식이 필요한 모듈인지 찾아 보세요.

2. 이와 관련한 업종의 취업 상황에 대한 것은 전혀 모릅니다만 막 졸업한 학부 졸업생에게 중요한 것을 시키는 회사는 없습니다. 대부분이 이미 있는 개발 체계를 배워서 그대로 개발 자체에 전담하는 역할이 될 것이라고 생각이 들고요. 석사는 어떤 분야의 맛을 아주 조금 깊게 봤다(?) 이정도라고 보시면 되고 실제 업무에 좀더 잘 적응할 능력이 있다고 생각할 수 있는 수준이 되겠네요. 박사는 거기에서 좀 더 자세히 봤다라는 정도(?)인데 하지만 관련 연구 현황이나 상황을 (아주) 잘 알고 있다. 그래서 관련 연구를 앞으로 스스로 해 나갈 수 있는 능력은 있겠구나라고 생각할 수 있는 수준이라고 볼 수 있겠네요. 그런 능력이 있다고 해서 박사 학위를 자격증(?) 이라고 하는지도 모르겠네요. 현재 이 분야가 전망있다고 판단하고 나중에 회사에 들어가서 중간 개발자/기획자/관리자 정도는 되고 싶다는 생각이 있다면 박사도 좋을 것 같아요.

3. 이건 질문이 아님으로...

대부분 학부 수준이나 영세 사업장에서는 상용툴이나 오픈 소스를 써서 output을 만드는 정도일 것이고 어떤 분야에 대해서 어느정도 깊게 잘 알게 되려면 10년 이상 공부 시간이 필요해요.

awidesky의 이미지

감사합니다!
학위 여부에 따라서 기업에서 어떻게 생각하는지 궁금했는데 정확히 이해가 되었습니다!
기간을 오래 잡고 지속적으로 공부해야겠네요.
감사합니다! 좋은 하루 보내세요!