3D 그래픽스에서 렌더링과 모델링..
안녕하세요. 여쭤보고 싶은게 있는데, 저는 지금 3D 그래픽스 관련 대학원 랩을 알아보고 있습니다.
염두에 두고 있는 곳은 2군데 정도인데, 각각 논문이나 연구 주제가 좀 다릅니다. 한 곳은 주로 렌더링을 주제로 하는 곳이고, 다른 한 곳은 모델링을 주로 연구하는 곳입니다. 제가 관심을 가지는 것은 CUDA와 같은, 병렬처리를 염두에 둔, 꼭 그래픽스쪽만은 아닌 이런 GPGPU나 CGPU (인텔 라라비의 구조를 이렇게 부르던데.. 아직 나오지도 않았고 확실하지도 않지만)를 이용한 미들웨어 수준에서의 활용입니다. 물론 렌더링이나 모델링이나 이미 엄청나게 연구되고 실제 뭔가 나오고 있겠지만, 프런트엔드에 해당하는 프로그램을 짜더라도 좀 더 효과적으로 바닥부터 알고 싶은 마음이 있고, 3D 그래픽스 쪽도 관심이 있어서 이쪽부터 시작해보려고 하는데요..
문제는 끝까지 공부할지, 어느 선에서 취직으로 테크를 탈지 확실하지 않기 때문에, 실제 벤더에서 어느 쪽이 좀 더 수요가 많거나 재미(?)있는지 모른다는거죠. 그리고, 렌더링은 어떤 분야를 연구하는지, 나중에 뭘 할지 대충 감이 잡히는데 모델링은 이런게 잘 감이 안 오네요. 그러니까 모델링을 주제로 연구했을 때 현장(게임 회사? 아님 의료 기기 회사?)에서 수요가 있는지, 뭘 하는지 등등.. 또, 이런 병렬 처리를 응용한 (교수님 왈 : 근본적인 병렬처리에 대한 연구는 이미 나올거 다 나왔다고.. 알아보니 이 주제를 연구하는 랩은 드물거나 방향을 돌리는 경우가 많더군요) 이런 주제가 전망이 어떤지에 대해서도 들어봤으면 합니다.
관련 분야에 종사하시는 분들의 현명한 조언을 부탁드립니다..!
CUDA..
3D렌더링 쪽은 잘 모르고, 과학 계산을 위한 병렬처리 쪽만 말씀 드릴게요.
gpu를 이용한 병렬 계산은 일단 나올거 다 나온 상황은 아닌 듯 싶네요.
기존에 cpu를 이용한 방법은 mpi나 openmp 등 이미 표준화가 되어 실제 연구에 많이 쓰이고 있습니다.
그런데 gpu를 이용한 과학분야의 병렬 계산은 아직 많이 사용하고 있지 않습니다.
일부 연구실에서 이제 막 시작해 보는 단계라고 알고 있습니다.
cpu는 범용 계산을 위해 만들어 졌기 때문에 메모리 부분과 연산하는 부분이 따로 분리되어 있는 반면에
gpu는 특정한 계산(3D 렌더링과 같은)을 위해서 단순한 연산이 가능한 유닛들이 모여 있는 형태 입니다.
그렇기 때문에 cuda같은 경우에 모든 과학계산에 다 적용할 수 있는 것은 아니고 특정한 것들을 보다 빠르고 저렴하게 구현할 수 있습니다. 장점은 저렴한 가격으로 고성능을 낼 수 있는 것이고, 단점은 병렬화를 위한 알고리즘 구현이 상대적으로 매우 복잡하고, 특정한 문제의 경우에만 좋은 성능을 낼 수 있습니다.
예를 들어 3차원 공간의 전기장을 구하는 문제라던가 하는 그리드를 나누어 계산하는 알고리즘에 매우 적합합니다.
결론 적으로 말씀드리면, cuda 같은 gpgpu 계산의 경우 그 알고리즘을 어떻게 구현하는가 하는 것이 매우 중요한 문제가 됩니다.
기술적인 부분(벤더)과 학술적인 부분(연구원)을 따로 떼어서 생각하기가 힘들다는 것입니다.
기존의 cpu를 이용한 병렬 계산은 알고리즘을 짜는 것과 병렬화를 하는 것이 어느정도 다른 분야로 분리되어 있었지만,
gpu를 이용하게 되면 병렬화 자체가 알고리즘에 직접 영향을 받는 것이기 때문에 분리하여 생각할 수가 없습니다.
대학원생 입장에서 배우시려면 3D렌더링 부분과 병렬계산 부분을 모두 한번에 배우는 랩을 찾는 것은 쉽지 않아 보입니다.
병렬계산 쪽을 깊이있게 배우고자한다면, cuda와 같은 gpu계산을 통해 연구과제를 수행하는 랩이 도움이 될 겁니다.
컴공쪽 보다는 직접 병렬계산을 이용하여 연구를 수행하는 기계공학이나 물리, 화학쪽을 찾아 보시는게 나을 것 같습니다.
음.. 그리고 수요는 현제 그리 많지는 않습니다. 희망적이라면 점점 수요가 증가한다는 것이겠지요 ..
그런 계산을 주로 하는 곳은 국책 연구소나 대학교 및 일부 기업체입니다. (기상 예보, 항공 선박 시뮬레이션, 물리 화학 현상 시뮬레이션 등등) 아직 까지는 클러스터 시스템에서 cpu를 이용하여 병렬 계산을 하는 경우가 대부분 입니다.
앞으로 gpgpu가 병렬계산 쪽에서 얼마나 큰 시장을 점유할 지는 알 수 없습니다.
수요가 계속 늘어날 수도 있고, 한 때의 유행으로 끝날 수도 있습니다.
gpu 쪽에만 올인하는 것 보다는 mpi나 openmp쪽 부터 차근차근 공부해 보는 것도 한 방법이 될 것같습니다.
말씀 고맙습니다.
말씀 고맙습니다. mpi는 뮤텍스와 같은 동기화 메커니즘을 공부하다가 조금 접해봤고, openmp는 아직 이름만 들어봤지 구체적인 것은 잘 모르겠네요. 스레드를 안정적으로 사용하기 위한 방법을 연구하다가 접해본 것들입니다.
여튼, 이 문제에 관해서 다른 분의 말씀을 들어보니, 병렬처리를 주제로 연구하는 랩들이 방향을 돌리는 이유 중 하나가 기존의 클러스터 컴퓨터를 활용하는 방법보다 하나의 다이에 여러개의 코어를 집적하는 방식으로 발전 방향이 잡혔기 때문이고(물론 그분은 클러스터링이 무가치하다는 것은 아니고, 아마도 시장을 이야기하는 것이겠죠), 모두가 잘 알고 있다시피 스레드는 프로세스와 달리 복수 개의 코어에 대해 같은 권한으로 실행될 수 있기 때문에 로드 밸런싱 비용이 사실상 0에 가깝다는 것이 주된 이유라고 하던데요.. 물론 과학 계산과 같은 슈퍼 컴퓨터 영역에서는 클러스터링이 아직도 유효하겠지만, 일반적으로 봤을 때 멀티 코어를 좀 더 잘 활용하는 방향이 될 것 같은데.. 그럴 듯하게 들렸습니다.
mpi나 openmp를 본격적으로 시작하지 않은 이유도, 이들 라이브러리를 직접 활용해서 뭔가를 하기 보다는, 병렬처리의 근간에 깔린 개념, 즉 무엇을 병렬화 할 수 있고 언제 병렬처리를 사용해야 하는가에 대해서 먼저 아는게 순서가 아닌가 싶어서 미루고 있었습니다. 또, 방금 위에서 말한 이유 때문에 이들 라이브러리가 묻힐 수도 있다는 생각도 들었구요. 그러나, 말씀대로 그래픽스 쪽에 올인할게 아니라면 이들 라이브러리를 연구해보는 것은 정석이 되겠네요.
여튼, 수요가 점차 증가한다니 그것으로도 반가운 이야기 같습니다.
말씀 고맙습니다.
최근 3D 분야의
최근 3D 분야의 연구는 렌더링에서는 GI(global illumination)의 구현, 쉐이더에 관한 연구가 활발한 편이고,
모델링에서는 Subdivision 과 같은 폴리곤 기반 모델링으로 돌아가는 분위기입니다.
한때 NURBS 가 모든 것을 해결해 줄 것처럼 보였지만 그 한계가 드러나면서 더 이상 큰 발전은 기대하기 어려운 실정입니다.
엄청난 계산 파워를 요구하는 photorealistic rendering 에서 병렬처리의 중요성은 강조할 필요가 없다고 생각합니다.
최근에는 화염이나 대기 효과등에 대한 연구도 활발하고 영상제작에도 많이 쓰이고 있습니다.
하지만 불행하게도 국내에서는 일부 대학이나 연구소에서 초보적인 연구에 그치고 있고, 업체에서의 수요는 거의 없다고 해도 과언이 아닙니다.
외국에서는 워크플로에 프로그래머의 역할이 크지만, 국내 프로덕션의 경우는 외국의 패키지 소프트웨어를 사다 그대로 활용하는 형편이라 오퍼레이터는 수요가 있지만 프로그래머가 할일이 많을 지 의심스럽네요.
흠.. 약간 모호한데요
조언 감사합니다. 그런데, 약간 모호한 점이 있어서 다시 여쭈어 보고자 합니다.
말씀하신 국내에서 수요가 거의 없다는 것은 모델링에 기반한 개발쪽 관련 일이 수요가 적다는 것인가요? 아니면 렌더링을 연구한다고 하더라도 어차피 해외 패키지 소프트웨어를 사오는 형편이라 가져다 쓰는 수준 이상의 일은 하기 어렵다는 일인가요? 후자 쪽으로 이해되는데, 특히 이런 미들웨어를 사용하는게 아닌 개량하거나 작성하는 부분에 있어서 병렬처리를 활용하는 것은 거의 수요가 없다고 이해하면 되나요?
그리고, 이건 약간 번외성 질문인데, 굳이 이런 미들웨어 개량이나 작성하는게 아니라면, 현장에서 이런 패키지 소프트웨어를 다루는 일이, 기존의 오퍼레이터들과 연봉이 큰 차이가 나나요? 프로그래머로서 할 일은 없어도 일단 수요가 많으면 좋겠는데요..