E D R , A S I H C RSS

3D프로그래밍시작하기

라그나로크로 유명한 그라비티사의 김학규 사장님이 쓴 글입니다. (한 4년전 쯤에여.)
좋은것 같아서 펴왔습니다. 제 멋대로 시차에 따른 주석을 달아 보겠음다. -HS


3D Programming 을 시작하는 사람은 상당히 막막한 상태에서 시작하게 되기 마련인데, 실질적으로 거치면 좋을 것이라고 생각되는 몇가지 스텝을 적어 보았습니다

1. 장비의 마련

아무래도 그냥 VGA 에서 만드는 것보다는 가속기능이 있는 카드에서 작업하면 훨씬 재미있습니다. (중요한 요소죠..) 만약 현재 쓰는 카드가 전혀 가속기능이 없다면 중고 부두라도 하나 사서 달아보시길 꼭 권합니다

2. 모델링 프로그램 연습 약간

3차원 프로그래밍을 하려면 최소한 맥스(3d studio max)의 기본정도 (화면에 박스 배치하고 연결해서 움직이기등) 는 알아두는 것이 필수입니다.

3. 관련 SDK 의 입수

DirectX 6 SDK 정도는 깔아놔야겠죠. Immediate mode essential 항목정도는 꼭 읽어봐야 합니다

  • 옛날 D3d에는 모드가 두가지가 있었는데요 retained mode 하구 immediate mode 가 있었는데 retained 가 immediate위에서 한계층 더 추상화 시킨것이라 하더군요. 보통 immediate를 사용하는것 같더랬습니다. d3d안써봐서리.. --; 정확하진 않지만
retained는 정점지정시에 속도가 떨어지고.. immediate는 어렵지만 여러방식으로 지정이 가능하고.. 빠르고.. 그랬던거 같습니당.. 요즘엔 direct graphics라 해서 인터페이스가 바꼈는데.. 어떻게 됬는지 몰겠네용..

4. 지속적인 자료 공급원 확보

http://cg.cs.tu-berlin.de/~ki/engines.html 에 보면 여러가지 공개, 상용 엔진들의 리스트가 정리되어 있습니다. 아마 3D 프로그래밍하는 사람치고 이 페이지에 안가본 사람은 별로 없을것입니다만, 노파심에서..

  • http://www.hitel.net/~kaswan/ 도 추천입니다. 김성완 님이라고.. unicosa출신이시고 미리내 소프트 시절.. 등.. 호랑이 담배먹던 시절에 이미 필드에서 경력을 쌓으시던 분. 성완님이 만드신 g-matrix라는 엔진의 소스를 얻을 수 있고 여러 칼럼
들이 한글화 된 것이 많이 있습니다.

5. 기본 벡터, 행렬관련 라이브러리의 작성

Direct3D 같은데에 봐도 예제로 들어있는 벡터나 행렬관련 루틴들이 있는데 곱하는 방식이 좀 골때리게 되어있어서 아마 크나큰 혼동을 가져올 확률이 높습니다. 3D 를 배우는 목적이 단지 화면에 사각형 몇개 돌리는 것이 아니라 게임이나 에디터를 만들기 위해서라면 벡터나 행렬 연산 라이브러리정도는 자기가 직접 만든 것으로 쓰고 DirectX 는 하드웨어 초기화나 모드세팅 처리랑 삼각형 그리는 부분 (DrawPrimitive) 만 쓰는 것이 좋을 것입니다.

6. 기본적인 프레임웍의 작성

수학관련 라이브러리가 어느정도 모습을 갖추었으면, 이제 최초로 뭔가 돌아가는 것을 만들어 볼때입니다.. 일단은 최소한의 초기화와 실행 절차를 갖춘 프로그램을 만들어 놓도록 합니다. 화면에 무언가를 그리는 함수 같은 것은 쉽게 바꿔치기 할 수 있도록 해 놓는 것이 좋을 것입니다. 이런 뼈대 라이브러리의 형태에 대해 참조하실려면 OpenGL 관련 라이브러리중 하나인 glut 를 참조하심이 좋을 듯..

이 단계까지는 화면에 그리는 내용이 직접 노가다 코딩으로 그릴 수 있는 간단한 큐브정도로 한정되어 있을 것입니다. 뭔가 좀 더 폼나는 것을 그리려면 맥스같은 외부툴에서 데이타를 가져와야 합니다

일단 맛뵈기만 하려면 ASC 포맷을, 좀 더 제대로 된 데이타를 가져오려면 ASE 포맷을 읽는 부분을 만들어야 할 것입니다.

이 시점에서 여러가지 해결해야 할 사항이 생기는데, 첫째로는 파일 포맷에 대해서 정확히 이해하고, 각 항목이 어떤 역할을 하는 것인지를 알아야 하겠으며, 둘째로는 비교적 여러단계로 복잡하게 구성되어 있는 3D Scene Data 를 효율적으로 정렬하기 위한 자료구조를 내 프로그램에 심는 것입니다. STL 같은 라이브러리를 능숙하게 사용할 수 있다면 많은 도움이 될 것입니다. 가급적이면 계층적으로 구성된 모델을 읽을 수 있도록 해야 나중에 애니메이션도 해보고 할 수 있겠죠. 세째로는 기본 이상의 가속기에 대한 조작을 할 수 있도록 d3d_renderstate 들에 대해서 알아두는 것입니다. 최소한 바이리니어 필터링을 켜고 끄고, 텍스춰 매핑을 켜고 끄고, 알파블렌딩, 등등을 맘먹은대로 조합해볼 수 있어야겠죠

만약 지금까지 험난한 길을 거쳐서 화면상에 맥스에서 그린 오리를 읽어서 출력할 수 있다면 이제 기본적인 코스는 마스터했다고 볼 수 있을 것입니다.

(몇가지 설명을 빼먹은 것이 있군요. 각종 좌표계 (모델좌표계, 월드좌표계, 카메라 좌표계, 스크린 좌표계) 들간의 변환에 대한 의미와 프로젝션에 대한 이해, 그리고 그에 따라 최소한의 벡터와 행렬 연산만으로 화면상에 그림이 그려질 수 있도록 하는 그래픽스 파이프라인의 설계가 필요하죠)

그래도 옛날보다는 훨씬 일이 쉬운 것이, 화면에 텍스춰매핑된 삼각형을 그려주는 부분인 Rasterization 관련 부분은 가속기가 모두 알아서 처리해 주기 때문이죠. 옛날에는 어떻게 하면 어셈블리로 최적화를 해서 화면에 그림을 빨리 찍느냐를 궁리하느라 사람들이 시간을 많이 보냈지만.. 요즘은 그런 일에 별로 신경을 쓰지 않고 다른 쪽.. (물리학이나 자료구조 최적화) 에
시간을 투자하는 추세죠.. (결국 앞에 할 일은 줄어들은 대신, 뒤에 할일 이 많아졌다는 뜻)

일단 엔진이 완성되고 나면 그 이후에는 자신의 필요에 따라서 할 일이 달라지겠지만, 최소한 3차원상에 마우스로 물체를 배치하는 에디터정도는 꼭 만들어보시기 바랍니다. 어느정도 기능을 갖춘 에디터까지 자기손으로 만들어보고 나면 어느정도 이젠 뭐라도 만들 수 있다는 자신감이 생길겁니다..

이상 초보자분들께 도움이 되셨길 바라며..

학규(neolith)

  • asc 포멧이라 함은 구석기 시대..에 쓰던 맥스의 포멧인데요.. --ㅋ 맥스에서 디자이너가 모델링을 하면 그 결과를 스크립트로.. 그러니까 텍스트 파일로 바꾼.. 포멧이라 합니다.
  • ase 는 좀더 나중에 나온 거구요.. asc처럼 텍스트로 뽑는건데 더 많은 정보를 제공해줍니다.
  • 이것들 이외에도 모델링 데이타를 가져오기 위한 포멧이 여럿 있습니다. x나 3ds등도 쓰입니다. 3ds의 경우 버텍스 모핑 키값을 쓸수 있다 하는데 실효성은 의문입니다. 그리고 그넘은 binary로 되있어서 읽을때 조금 더손이 갈 듯합니다.
  • 파일 포멧에 관한 자료는 나우누리 게제동에 심심강좌.. 인가.. 거기하구 책으로는 3d file format이라는 책이 있는데.. addison wesley 에서 나온건가.. --; 있습니다. 여러군대에서 찾으실수 있을듯 합니다.
  • STL 은 standard template library 입니다.
  • 최근에는 rasterinzing (transform, lighiting 이 끝나고 난후 화면 주사선에 맞추어서 찍어주는 부분.. 일꺼에여)이외에 trasform과 lighiting도 가속기로 처리할 수 있다고 합니다.

  • 가속기 관련 라입과 3D이론서 를 같이 공부하실 것을 추천합니다. 이론서를 보기전에 선형대수학 .. 적어도 2장인가.. 역행렬 까지는 보실것을 추천..


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:22:15
Processing time 0.0335 sec