상세 컨텐츠

본문 제목

[FAQ] Directx 3D

프로그래밍 관련/3D,2D DRAW 관련

by AlrepondTech 2011. 3. 30. 15:44

본문

반응형

 

 

=================================

=================================

=================================

 

 

 

 

http://www.gpgstudy.com/gpgiki/3D


출처: 
http://blog.naver.com/PostView.nhn?blogId=vs2002&logNo=60020766681


차례 [+]

Q) OpenGL이란?

OpenGL FAQ

http://www.opengl.org

http://users.unitel.co.kr/~sangeun5/opengl/basicsfaq.html

참고하세요.

Q) Direct3D이란?

 2001/2/22/20:07 작성자:김지훈 *틀린 내용이 있다면 수정해주세요* 

Direct3D란 실시간 3D 렌더링을 위해 마이크로 소프트가 배포하는 API(응용프로그램 인터페이스) 로서 일반적으로 D3D라고 말합니다 --;(당연한건가?) 그리고 하드웨어 추상화 기법을 사용하기 때문에 응용 프로그램 개발자들이 각종 하드웨어에 대해 세세히 신경쓰지 않아도 된다는 굉장한 장점을 가지고있으며 실시간 3D게임 제작에 많이 사용되고있습니다.

Q) Direct3D vs OpenGL

 2001/2/22/20:07 작성자:김지훈 *틀린 내용이 있다면 수정해주세요* 

D3D의 내용은 위에 있으니...

우선 OpenGL에 대해서 말해본다면 오픈지엘은 'Open Graphic Language' 의 약자로 실시간 3D렌더링을 위해서 실리콘 그래픽사에서 배포하는 API입니다. 뛰어난 성능을 가지고있으나 하드워어를 기반으로 하기때문에 PC에 3D가속카드가 보급되기 이전에는 일부 그래픽을 전문으로하는 워크스테이션에서나 사용되었습니다. 하지만 현재 마이크로 소프트와 제휴를 맞어 DX기술과 OpenGL의 통합인 Farenheit라는 새로운 API의 제작이 시작되었다고 합니다.(책 무지 찾아봤음다)

Farenheit는 DirectX 8.0에 대한 프로젝트명으로 알려져있습니다.의도는 좋았으나 MS에서 Farenheit를 윈도우에 의존적으로 만들려고 했습니다. 그래서, SGI와 MS 간의 협력 관계는 깨졌습니다. 그런 관계로, DirectX에서 OpenGL의 작동이 약간 불안정한 면이 있습니다.

Q) 3D Pipeline이란?

 2001/05/28 23:40 [붉은미르|dragoon] 

3D을 2D로 표현하기 위해서 거쳐가야 하는 일련의 과정을 이야기합니다. 그 과정을 나열하면 다음과 같습니다.

MODEL -> WORLD -> Camera -> Project -> Viewport

T&L를 지원하는 것은 이 과정이 전부 다 거쳐간다고 봐도 무리가 없습니다. T&L를 지원하지 않는 경우에는 맨 마지막인 래스터라이즈인 Viewport 부분만을 지원한다고 생각하시면 됩니다.

Q) 기존 책에 있는 고정소숫점 연산을 꼭 해야하는가 부동소숫점을 사용하면 안되는가?

 2001/2/21/수 

현재 PC상에서 개발한다면 부동소숫점의 실용성을 대단히 떨어집니다. 초기 펜티엄들과 이전 CPU(486, 386등)들은 실수연산이 정수연산에 비해서 떨어졌습니다. 그래서, 형변환(float=>int)에 따른 수행 시간 손실을 감수하고도 정수연산을 사용했습니다.

그러나, 최근, 현재 나오는 CPU들인 펜티엄2, 펜티엄3, 애슬론, 썬더버드 등은 실수나 정수형이나 거의 같은 속도가 나옵니다. 이 사항에서는 실수형을 정수형으로 변화해서 연산을 하면 이 변환을 위한 사용되는 시간 손실이 너무나 큰 상황이 된 것입니다. 프로그래머 입장에서 어떠한 이득이 없고 오히려 손해만 있는 사항이 되었습니다. 그래서, 현재 PC상에서 게임개발에서는 부동소숫점을 일부러 고정소숫점으로 바꿀 필요는 없습니다.

그러나, 여기에 대해서 궁굼하신 분은 "제목:Black Arf of 3D / 저자:안드레 라모쓰/ OS: Dos" 라는 책은 참조하시기 바랍니다.

Q) 게임에서 속도를 빠르게 하려면 어느것부터 손을 대야 하나요?

 2001/2/24/천영호 

전 그 어떤 루틴보다 '자료구조'라고 생각합니다. 얼마나 생각하고 각 오브젝트에 대한 구조를 잘 짰는냐가 중요하다고 생각합니다. 그리고 현재 개발하려는 게임에 맞는 엔진을 선택하는 것이죠. 퀘이크같은 3D인칭게임이라면 BSP를 실외라면 LOD 같은 알고리즘의 선택 또한 중요합니다.

제작하다가 가장 속도를 많이 잡아먹는 루틴을 알고 싶으시다면 컴파일 옵션에 프로파일링을 켜고 프로파일링을 해보시면 아실수 있습니다. 좀더 자세히 알고 싶으시면, GPG책안에 포함된 실시간 프로파일링이 있으니 그걸로 아실수 있습니다.

 2001/05/12 03:29, [파연|Pion] 

자료구조를 항상 따라다니는건 알고리즘입니다. 특히 삼차원 그래픽에서는 똑같은 일을 수행하는 수 많은 알고리즘이 있고, 또 개발되어지고 있습니다. 이들 알고리즘은 사용용도에 따라 장단점이 있고요.. 경우에 따라 가장 적절한 알고리즘을 사용하는 것이 중요합니다.

기타, 코드 최적화에 대해 공부하셔야되고, 부분적으로 어셈블리를 사용하는 것도 해결책이 될 수 있고요.. (저도 어셈블리는 모릅니다만.. -_-;;)

Q) 게임에서 디버그는 어떻게?

 2001/2/27/천영호 

디버그는 최대한 툴이 지원하는 것을 하는게 좋은거 같습니다... 각종 메모리 누수부터 변수들의 값변화등을 알수 있습니다. 언젠가 이 디버그모드를 무시하고 릴리즈모드로 작업하다가 프로그램을 다시 첨부터 짠 기억이 나는군요. 그외엔 엔진에서 최대한 로그를 남기는 것입니다. 즉 각종 정보에 대한것을 다 기록하고 남겨서 확인해 보는 것이지요.

참고로 디버그 모드 제작시 풀스크린모드이면 불가능합니다. 2개 이상의 모니터를 두고 작업할수도 있겠지만, 실제 게임에선 창모드가 없더라도 창모드로 제작하는 쪽이 더 낫더군요.

Q) 특수효과에 대해서 알고 싶어요? (특수 효과라는 보다는 용어 설명인것 같은데요.. )

 2001/2/22/20:07 작성자:김지훈 *틀리면 수정해 주세요-오늘 진짜 책 많이 읽어본닷!!* 

우선 3D에 사용되는 특수효과 몇개를 설명하겠습니다.

  • BLENDING
    • 블렌딩 기법은 사전적 용어로는 혼합,융합이라는 의미로 쓰이는데 역시 3D에서도 블렌딩 기법은 2개지의 텍스처를 합쳐 같은 물체에 사용하는 시각적인 기법을 말하는군요 --;
    • 블렌딩 기법은 혼합이라는 말 그대로 2가지 이상의 요소를 섞어서 그결과를 출력 하는 방법입니다. 2D에서는 픽셀, 3D에서는 텍스쳐가 가장 대표적으로 사용됩니다. 쉽게 말해 2가지 이상의 색상을 혼합하는 방법입니다.
  • ALPHA BLENDING
    • 2개 이상의 텍스처를 합칠때 투영효과를 주는 블렌딩 기법의 한 종류로서 물이나 유리같은 투명한 매질의 속성을 주기위해 사용된다는군요.
    • 알파 블렌딩은 투명성을 제어하는 기법입니다. 색의 기본적인 요소인 R, G, B외에 A라는 요소를 추가하는합니다. R, G, B는 색의 명도값을 나타내는 반면, A 요소는 색상의 채도값을 나타냅니다. 색상의 투명성 정도를 조절하기 때문에, 게임내에서 거의 필수적으로 사용됩니다.
  • BILINEAR FILTERING
    • 물체의 표면에 나타나는 텍스처를 흐릿하게 함으로서 '블럭현상--' 을 줄이기 위해 사용됩니다.
    • 3D게임을 할때 가까이서 보이는 물체일수록 픽셀이 커져 보이는데 이 경우 바이리니어 필터링을 사용하면 픽셀등을 흐릿하게해서 거칠지 않게 볼수있다는군요
    • 전에 DOOM2할때 픽셀이 거칠어 멀미약이 잘팔렸다는--
  • FOGGING
    • 멀리 떨어져있는 배경을 화면의 백그라운드 텍스처 맵과 단일한 색으로 혼합해서 서서히 보이지 않거나 나타나게 하는 기법을 말합니다.
    • 마치 안개낀 지역을 바라보는듯한 화면을 생각하면 될 것같네요.
    • 튜록에서 안개낀 화면은 정말 예술이었음.
  • GOURAUD SHADING
    • 빛효과를 줌으로서 물체의 형상이나 원근감을 강조하는 실시간 렌더링 기법중 하나인데 헨리 고라우드라는 사람의 이름을 따서 만들었다네요 --; 고라드 쉐이딩을 사용할 경우 물체는 각이 지지않고 표현됩니다.
    • 쉐이딩은 말 그대로 3D 물체에 명암의 정도를 나타내는 방법을 말합니다. 고라우드 쉐이딩의 경우 3D 물체의 버텍스(꼭지점)마다 계산을 하기 때문에, 보다 사실적인 효과를 만들어 낼 수 있습니다. - 참고로 플랫 쉐이딩은 면마다 계산합니다.
  • MIP MAPPING
    • 실시간 렌더링 기법중 하나이며 복수의 텍스처맵을 사용하여 디테일 레벨이 변경될경우 그에알맞는 텍스처맵을 사용해 물체가 커지거나 작아질경우 자연스럽게 텍스처를 출력한답니다
  • Z-BUFFERING
    • 오프 스크린 메모리 영역으로 3D공간 내부의 공간적인 거리를 계산해 출력하려는 물체가 다른물체나 배경에 가려지는등의 연산을 수행하는 기법입니다.
 2001/05/12 03:29, [파연|Pion] 

Gouraud shading 은 각 폴리곤의 버텍스에 색을 따로 지정해서 폴리곤의 색을 내삽(interpolation)하여 표면을 부드럽게 처리하는 방법입니다. 폴리곤의 경계에서 다른 인접한 폴리곤과 색깔이 연결됩니다만, 색의 기울기는 달라지는 C0 연결도를 가집니다.

이에 반해 Phong shading 이라는게 있는데, 이것은 각 버텍스의 노말벡터가 인근 폴리곤의 노말벡터의 평균값을 갖게하여 폴리곤을 그릴 때는 이 노말벡터를 내삽하여 그리는 방법입니다. 인접 폴리곤과 색깔과 및 색의 기울기가 같은 G1 연결도를 가집니다.

Z-buffering 은 각 픽셀에 깊이정보를 가진 메모리 부분을 할당해서 삼차원 공간의 모든 물체를 체크해서 각 픽셀에 들어있는 깊이정보보다 더 얕은건 렌더링하고 (이 때 새로운 깊이를 버퍼에 넣습니다) 더 깊은건 무시하는 방식으로 은면을 제거하는 방법입니다. 보통의 삼차원 그래픽 카드라고 하면 이 Z buffer가 기본적으로 할당되어 있으므로, 하드웨어의 도움으로 수행속도가 빨라지게 되는 방법입니다. 투명/반투명한 물체 뒤의 물체들을 제대로 표현해 주지 못하는 단점이 있습니다.

반면 삼차원 공간의 모든 물체의 깊이를 다 저장해서 Z-buffering 의 한계를 극복하는 방법이 있는데, 이를 A-buffering이라고 합니다. 픽셀당 가질 수 있는 버퍼는 하드웨어에 종속적이 되므로 (그리고 하드웨어란게 표준이 없으므로) 여전히 문제를 내포하고 있습니다.

또한 z-buffering과 a-buffering은 공간에서 물체가 꼬인 경우 제대로 표현할 수 없는 문제가 있습니다. 이를 해결하기 위해서 BSP, Oct-tree, cell & portal 등 화면 분할기법을 사용합니다.

Q) 왜 우리나라는 3D 게임책을 만들지 못하나요?

Q) 파티클 효과란 무엇인가? 활용도는 어떻게 되는가?

 2001/2/25 김형진 

파티클의 사전적인 의미는 말 그대로 입자입니다..주로 게임에서 적용되는 분야는 눈, 비 , 연기 , 폭발 , 물이 어느 표면에 충돌하고 되튀는 물방울 등등.. 그 응용분야는 실로 다양합니다...파티클 자체를 구현하는 것보다 그 파티클의 움직이는 패턴 구현이 신경쓸게 많죠...나중에 제가 구현한 걸 가지고 강좌해 드리죠..^^;

Q) 3D 게임을 위한 파일 포맷은 무엇이 있습니까?

 2001/04/19 23:01 붉은미르 

정해진 것은 없습니다. 다만, 필요에 의해서 만들어서 사용하면 됩니다. 기준에 만들어진 것중에서 사용 빈도가 높은 것은 다음과 같은 것이 있습니다.

  • 3DS => 3DStuido R4 (또는 MAX)에서 출력한 것
  • ASE => 3DStudioMax에서 작업한 것을 아스키코드형태로 출력한 것.
  • X => DirectX3D에서 기본으로 지원.
  • MD2 => Quake(1 아니면 2)의 캐릭터 포맷.
  • MDL( 또는 SMD ) => Haf-Life의 캐릭터 포맷

Q) 확장자가 .x인 것은 무엇인가요?

 2001/03/10/Crc12 

X파일은 다이렉트3D에서 사용할수 있는 3D파일입니다.

3D에서 어떠한 물체를 띄울경우에 그 물체의 버텍스값과 , 텍스쳐가있어야하죠

그런것들을 X파일에서 모두 관리해줍니다. ASE파일도 3D파일이죠.

X파일 역시 ASE와 같은 3D파일입니다. 3DS-> X파일(변환)로 만들어주는 컨버터가 있습니다. 다이렉트 SDK를 깔고 나셔서 Util 폴더를 보시면 안에 X파일로 컨버팅 해주는 프로그램이 있구요 다이렉트X의 유틸리티 클래스에서 기술제공을 해주고 있습니다.

Q) 확장자가 .ase인 것은 무엇인가요?

 2001/2/22/목 천영호 

.ase는 맥스의 익스포트파일중 하나로 그 구성이 텍스트 파일로 되어 있습니다.

그러기에 상당히 파싱하기에 좋고 다루기 쉽다는 장점이 있습니다.

Q) *.ase vs *.x

 2001/2/24/천영호 

저는 *.ase와 *.x의 선택은 무의미하다고 생각합니다. 왜냐하면 실제 게임에서 위의 파일을 그대로 쓰는 경우는 없기 때문이죠. 다 *.ase나 *.x파일에서 필요한 데이터만을 뽑아내어 자신만의 파일포맷을 사용합니다. 그러므로 1차적 공개파일 (데이터가 다 공개되어 있는)의 선택은 그 의미가 없다고 생각합니다.

Q) 왜 ase를 사용하는가? 3DStudio Max 자체 데이터를 사용하면 안되는가?

 2001/2/22/목 천영호 

.max파일은 어떻게 보면 그 자료가 명확하지 않습니다. 실제 이 파일의 내용은 수많은 플러그인의 내용으로 가득차있고 그 플러그인의 수또한 많기 때문에 실제로 이 .max파일 자체의 데이터를 뽑아 낸다는것은 불가능하다고 알고 있습니다.

Q) BSP란 무엇인가?

 2001/05/10 23:39 [붉은미르|dragoon] 

게임에서는 DOOM에서 최초로 적용되어졌습니다. 이때에는 상하 이동이 불가능하였습니다. Quake에 와서는 완전한 3차원을 구현하였습니다.

화면을 Front-Back으로 구분하는 이분법에 의해서 3차원 공간을 분리하는 알고리즘입니다. 실내공간을 표현하는 대표적인 방법입니다.

 2001/05/12 03:29, [파연|Pion] 

삼차원 공간을 하나의 평면으로 잘라서, 그 평면 앞에 있는 것들과 뒤에 있는 것들로 구분해서 내부적으로 트리를 생성합니다. (이 때 자르는 평면에 의해 잘리는 평면이 있다면 다른 두개의 평면으로 분할합니다.) 그 다음 다른편 공간에서 또 하나의 평면을 기준으로 반으로 자르고, 이런 방식으로 공간의 모든 평면을 분할합니다.

트리가 완성되면 가지에서부터 밑둥으로 그림을 그려주게 되는데, 항상 뒤에 있는 물체로부터 시작해서 앞에 있는 물체의 순으로 그림이 그려지게 됩니다. 즉 앞에 있는 물체가 나중에 그려지므로 뒤에 있는 물체를 가려주게 됩니다. 반대로 트리의 밑둥부터 가지까지의 순서로 그림을 그릴 수도 있는데, 이 때는 점유되지 않은 픽셀에만 그림을 그리게 됩니다.

Q) Portal이란 무엇인가?

 2001/05/12 03:29, [파연|Pion] 

Cell & Portal 기법이라고 하는, 실내공간을 표현하는 또 하나의 대표적인 방법입니다. 벽 하나 하나가 (창문/문 등도 포함) 셀을 이루어, 카메라가 있는 위치에서부터 그림을 그려나가게 됩니다. 시각이 미치는 부분이 Portal(창문/문 등)이라면 시각을 그 포탈로 분할(clipping)한 다음 시각이 미치는 다음 셀을 그리게 되며, 시각이 미친 부분이 벽이라면 그 벽을 그려준 후 서브루틴을 마치게 됩니다.

이런 방법으로 보이는 건 그리고 안 보이는 건 아예 검사도 하지 않는 방법입니다.

삼차원 공간을 셀들로 나누어 적당한 자료구조로 잘 구현해야합니다.

Q) Octree란 무엇인가?

 2001/05/12 03:29, [파연|Pion] 

삼차원 공간을 여덟개로 분할해가는 방식입니다. 분할한 공간에는 최종적으로 하나의 평면만 있도록 하여, 상대적으로 물체가 적은 공간에 괜한 메모리를 낭비하지 않는다는 공간분할 방식입니다.

Q) LOD란 무엇인가?

 2001/05/10 23:39 [붉은미르|dragoon] 

LOD는 Level Of Detail의 약자입니다. 섬세함의 단계. 간단한 예를 들면 거리에 따라서 캐릭터의 표현할 때에 사용하는 폴리곤 갯수를 차별화시키겠다는 것입니다.

00m에서 폴리곤 1000개, 200m에서는 폴리곤 500개, 400m에서는 폴리곤 250개 등입니다.

이런 식이면 멀리있는 캐릭터를 거리에는 작은 폴리곤을 사용해서 컴퓨터에 부담을 줄일수 있고, 그 결과 더 많은 캐릭터를 한 화면에 등장시킬수 있을 것입니다.

Q) 점진적 메시(Progressive Mesh)란 무엇인가?

 2001/05/28 23:40 [붉은미르|dragoon] 

제목에서 볼수있듯이 점진적으로 메쉬가 갯수가 늘어났다가 줄어다가 하는 것입니다. LOD와 비슷한 개념입니다. 다만 이것은 어떤 메쉬가 Camera와의 거리에 따라서 실시간으로 메쉬의 수를 늘였다가 줄였다가 합니다. LOD는 미리 만들어진 것이라는 점이 다른 점입니다.

문제는 실시간으로 계속해서 메쉬의 갯수를 늘었다가 줄이면 그것에 따른 CPU 점유율이 높다는 점입니다. 따라서, 일정한 규칙에 의해서 메쉬 갯수에 변화를 주어야합니다. 즉, Camera와 거리에 대해서 1000씩 늘어날 때마다 1/2씩 메쉬 수를 줄어준다지 이런 씩으로 해야 적절한 CPU를 사용하게 될것입니다.

Q) 3D에서는 충돌체크를 어떻게 하는가?

 2001/2/24/천영호 

3D에서의 충돌체크는 폴리곤단위로 이루어집니다. 이 폴리곤들은 각 노말벡터의 값을 가지고 있습니다. 그러면 고등학교때 배우는 평면의 방정식이 성립됩니다.

 ax + by + cz + d = 0; 

위에서 a,b,c가 노말 벡터이구요. x,y,z가 폴리곤상의 한점입니다. d는 관련식에 의해 d = -(ax + by + cz)로 나오죠.. 이 방정식에 한점을 넣었을때, 0보다 크면 충돌이 일어난게 아니고, 0이면 포함된것이고, 0보다 작으면 충돌된것입니다. 그런데 실제로 보시면 알겠지만, 위의 공식으로 구할수 있는 값은 바로 평면과 점 과의 거리입니다.(노말벡터가 노말라이즈되어 있다는 가정하입니다.) 즉, 이거리만큼 점을 평면의 노말벡터방향으로 이동시켜주면 간단하게 폴리곤상에서 미끄러지는 효과를 낼수 있습니다.

( 참고: 충돌검출 )

Q) 캐릭터 애니메이션을 어떻게 하는가?

 2001/05/28 23:40 [붉은미르|dragoon] 

정점 애니메이션과 뼈대 애니메이션으로 합니다.

Q) 정점 애니메이션(Vertex Animation) 이란?

 2001/05/28 23:40 [붉은미르|dragoon] 

캐릭터가 걷는 동작은 30frame으로 만들었다면 캐릭터를 구성하는 스킨의 버텍가 Model 좌표를 기준으로 해서 이동을 했을 것입니다. 즉, 0frame과 29Frame에서 캐릭터를 구성하는 Vertexs 위치가 다르다는 것입니다. 이 Vertexs를 매 frame으로해서 저장합니다. 이 상태에서 캐릭터를 특정 World에 애니메이션을 출력시키려면 단지 Vertex에서 회전시켜서 이동만시켜주면 됩니다. 아주 간단한 계산으로 캐릭터를 Model 좌표에서 World 좌표가 이동하게 됩니다. 퀘이크1 & 2에서 캐릭터들은 이 방법으로 저장되어있습니다.

Q) 뼈대 애니메이션(Skeletal Animation) 이란?

 2001/02/22 21:19 

http://www.mad3d.net/column/Ncolumn.asp?number=64

Q) 스키닝(skinning) 이란?

 2001/02/22 21:19 

일반적으로 실시간 3D(이하 3D)에 사용될 캐릭터는 근육에 대한 생각을 하지 않습니다. 쉽게 이야기하면 팔을 머리 어깨위로해서 쪽뻗으면 어깨와 가슴의 근육에 의해서 피부가 움직입니다. 근데, 이 피부를 3D에서는 정점(Vertex)로 표현합니다. 이 정점을 계산량 즉, 속도때문에 하나의 뼈대에 있다고 생각하고 처리합니다. 약간의 어색함을 감수합니다. 이런 문제는 빼대 애니메이션에는 더욱더 두더러집니다.

그러나, T&L를 지원하는 비디오 카드가 나오면서 많은 이런 것을 극복하고자, 정점에 대해서 연관되어있는 뼈대들로 부터 받는 소속값(Weight)을 이용해서 정정에 대해서 연관된 뼈대들이 다 영향을 주어서 어색함을 없게 만듭니다. 그래픽툴인 3DStudio Max에서 캐릭터 애니메이션을 할때 확인해 볼 수 있습니다.

http://www.mad3d.net/column/Ncolumn.asp?number=64

Q) 안티엘리아싱(안티엘리아싱) 이란?

 2001/2/21/수 

http://www.kbench.com/ 에서 Hardware으로 이동해서 다시 강좌를 보시면 안티엘리아싱에 관한 글을 볼 수 있습니다.

http://www.mad3d.net/column/Ncolumn.asp?number=51

http://www.mad3d.net/column/Ncolumn.asp?number=42

http://www.mad3d.net/column/Ncolumn.asp?number=84

Q) 유용한 수식들

"??를 구하려면 어떻게 해요"에 대한 답들... 유용한 수식들


제일 위로
최종 수정 일시: 03월 28일(2004년) 09:09 PM 편집 | 정보 | 차이 | 비슷한 페이지 DebugInfo
유용한 페이지들: 분류 분류 | 자유로운 연습장 SandBox | 무작위 페이지들 RandomPages | 인기있는 페이지들 MostPopular

 

 

=================================

=================================

=================================

 

 

 

=================================

=================================

=================================

 

 

[출처] [FAQ] Directx 3D|작성자 워너피터

 

반응형


관련글 더보기

댓글 영역