2D 게임의 경우 Direct3D 또는 OpenGL과 같은 3D API를 사용하지 않는 이유가 있습니까?


20

나는 꽤 오랫동안 취미 게임 개발에서 벗어났습니다. 내가 그렇게했을 때, 대부분의 사람들은 Direct Draw를 사용하여 2D 게임을 만들었습니다. 내가 사람들이 멈추었을 때 직교 투영법을 가진 OpenGL 또는 Direct3D는 갈 길입니다.

나는 특히 휴대 전화에서 XNA 플랫폼에서 2D 게임을 만드는 것에 대해 생각하고 있습니다. OpenGL을 사용하여 무언가를 만들려면 3D 개발에 적응할 수있는 작은 학습 곡선이 있어야합니다.

그것을 건너 뛸 이유가 있습니까? 대신 픽셀로 채울 필요가있는 너비 x 높이 프레임 버퍼가있는 2D 프레임 워크로 작업합니까?


이 질문은 실제로 잘못되었습니다 ... 내 말은 : Direct3D와 OpenGL은 실제로 3D API가 아닙니다. 하드웨어 가속을 제공하지만 2D와 3D로 제공됩니다. 약간의 차이가 있습니다.
jacmoe

답변:


20

백엔드에서 3D 렌더러를 사용하는 것을 반드시 사용해야합니다. 그러나 더 높은 수준의 코드에서는 Z 축조차 보지 않아야합니다. 이 모든 것은 낮은 수준에서 추상화되어야합니다. 픽셀을 직접 조작하는 경우 무언가 잘못되었을 수 있습니다.

내 게임을 위해 2D 객체를 다루기위한 일련의 클래스를 만들었습니다. 내 게임 로직은 x와 y 좌표 만 처리했습니다. 내 수업은 회전, 배율 조정, 혼합 모드 등을 처리했습니다.

물론 사용할 수있는 기존 2D 라이브러리도 있습니다. Cocos2D는 iPhone에서 인기있는 라이브러리입니다. 전부는 아니지만 대부분의 이러한 라이브러리는 하위 레벨 3D API를 기반으로 구축되므로 사용 가능한 가속화의 이점을 누릴 수 있습니다.


xna가 무대 뒤에서 2D API를 처리하는 방법을 듣고 싶습니다.
Iain

5
결국 3D입니다. 2D 렌더 워크 마인 Spritebatch는 셰이더 효과입니다.
drxzcl

인터페이스를 구현에서 분리하기위한 +1
Steve S

@Iain 다음은 XNA 저자 xnatoolkit.codeplex.com이 작성한 DirectX11의 XNA 의미 입니다.
ClassicThunder

8

3D API를 사용하지 않는 이유가 있습니다.

NA, 북서 EU 및 일본의 컴퓨터 만 지원합니다 ...

예를 들어 브라질에 살고 있습니다. 자매 컴퓨터는 새롭고 멀티 코어 프로세서와 몇 GB 램이 있지만 OpenGL 게임을 실행하지 않습니다.

예를 들어 Dwarf Fortress (OpenGL을 사용하여 ASCII 그래픽 렌더링)를 내 컴퓨터, 크롤링 속도가 느린 다른 컴퓨터에서만 재생할 수 있습니다.

그리고 이것은 브라질에서만 문제가 아니며 주변 사람들에게 물었습니다. 전 세계 여러 곳에서 일반적입니다 ... 실제로 OpenGL 또는 Direct3D 호환 카드를 소유 한 인구는 소수입니다 ...

이 소수만이 기업들로부터 더 많은 관심을 얻습니다 ...

그러나 이러한 "전통적인"시장 (NA, 북서 EU, JP) 만 목표로 삼고 있다면 그 목표를 달성하십시오!

다운 보팅 사용자를위한 편집 : 분명히 동의하지 않으므로 OpenGL 1.0을 지원하지 않는 VIA 또는 SIS 칩 (또는 다른 알려지지 않았거나 더 나쁜 제조업체)이 더 이상 컴퓨터에 더 이상 배송되지 않는다는 증거가 있습니까?

나는 집에 두 대의 기계를 가지고 있으며 새로운 것입니다 (둘 다 코어가 2 개 이상이고 둘 다 2GB 램이 있으며 둘 다 클럭 주파수가 2GHz 이상입니다 ...)

저의 대학에는 200 대의 기계가 있습니다. 심지어 Dell이 만든 기계도 있습니다.

그것은 간단하고 GPU는 비싸고 (심지어 엉뚱한 인텔조차도), 가난한 시장에서는 MS Word를 실행하고 전자 메일을 읽는 기계를 구입하면 괜찮은 그래픽 칩이있는 기계를 사지 않을 것입니다. 그들은 대부분의 사람들이 한 달 동안 음식을 사야 할 때 특히 50 USD 인 경우 50 달러 싼 것을 구입할 수 있습니다.

제발, 제 3 세계 국가를 방문한 적이 없다면 제 3 세계 국가 사람들이 게임을하지 않는다고 말하지 마십시오. 리눅스 버전 출시에 대한 개발자의 게시물에 따르면 많은 사람들이 들어오는 트래픽 (실제로는 대부분)이 러시아에서 온 것으로 나타났습니다. 일반적으로 사람들은 무시되기 때문입니다.

브라질에서 가장 인기있는 게임은 소프트웨어 모드에서 실행되는 Counter-Strike입니다. 일부 Lan-Hoouses에는 GPU가있는 머신 중 10 %만이 있으며 200 개 또는 300 개의 스테이션이있는 큰 머신도 있습니다.

나는 이것을 게시해서는 안되며, 다운 투표를 유치하고, 이것을 게시하면 점수가 무료로 손실된다는 것을 알았을 때마다 5.0이 Direct Draw를 지원하지 않기 때문에 5.0이 아닌 다른 게임에서 Allegro 4.4를 사용하는 이유를 설명 할 때마다 소프트웨어 모드 나는 많은 사람들로부터 내가 거짓말 쟁이라고 말하거나 OpenGL 가속의 실제 가용성에 대해이 진실을 말하는 것에 대해 바보라고 말합니다.

편집 2 : OpenGL이있는 게임을하고 개발하려면 부모님과 다른 사람들에게 GeForce 8600 (Mass Effect 1 및 기타 UT3을 실행할 수있는 가장 저렴한 카드)을 사달라고 간청해야했습니다. -엔진 게임), 그들은 나에게 하나를 샀다.

편집 3 :
실용 사례 : Eletronic Arts는 Ultima Online에서 2D 그래픽에 3D 가속을 사용하는 새로운 고객을 만들었습니다 ... 결과 : 엄청나게 낮은 프레임 속도에 대해 불평하는 많은 플레이어와 EA의 새 클라이언트 (이전 클라이언트를 계속 사용할 수 있음)

2015 년 편집 4 :이 답변은 주로 역사적인 유물로 남을 것입니다. 현재 매우 엉뚱한 칩을 가진 컴퓨터의 양은 제 3 세계 국가에서도 낮습니다. 특히 사무실을 지향하는 컴퓨터에는 여전히 존재하지만 그렇지는 않습니다. 이제 더 이상 소프트웨어 모드 API로 작업 할 가치가 없다고 생각합니다. OpenGL 기반 API는 이제 갈 길입니다.


3
현재 3D를 지원하지 않는 칩은 없습니다. Windows에서 제공하는 드라이버에는 OpenGL 지원이 제공되지 않으므로 드라이버를 업데이트하면됩니다. 가장 일반적인 쓰레기 GPU는 Intel GMA 제품이며 기본적인 OpenGl 지원 기능도 있습니다.
Axel Gneiting

1
다시 반복 : 여기에있는 칩은 인텔 GMA보다 더 나쁘다. 그리고 그렇습니다. 일부 수정 된 드라이버는 문제를 해결하지만 사용자가 그 사실을 알 수는 없습니다.
speeder

실용 사례 : Eletronic Arts는 Ultima Online의 2D 그래픽에 3D 가속을 사용하는 새로운 클라이언트를 만들었습니다. (이제 오래된 것을 계속 사용할 수 있습니다)
speeder

1
새로운 고객은 2008 년부터 제 이야기는 다음과 같습니다. 2008 년의 사람들은 OpenGL 고객을 싫어하고 1997 년을 사용하는 것으로 되돌아갔습니다.
speeder

1
사람들이 드라이버를 업데이트하지 않는다고해서 컴퓨터가 OpenGL 및 Direct3D를 지원하지 않는 것은 아닙니다. OP는 OpenGL / Direct3D 호환성을 확인해야합니다. 존재하지 않으면 사용자에게 드라이버를 업데이트하도록 지시해야합니다. 이것은 98.6 %의 사례에서, 아마도 제 2 세계와 제 3 세계에서도 작동 할 것입니다. 하지만 OpenGL / Direct3D 지원이없는 컴퓨터를 구입할 수 있습니까?
Avi

3

아닙니다. 3D 렌더러를 사용하면 더 나은 효과와 더 빠른 렌더링을 얻을 수 있습니다. 예를 들어, 여기 구체 효과, 3D 쉐이더에 크게 의지에도 불구하고 많은 방법들이에게있는 거 2D 효과 - (주말에) 나는 몇 주 전에 만든 2D 게임이다. 마찬가지로, 저는 이 게임에 사용 가능한 렌더링 기술을 광범위하게 사용했습니다. 여기에는 3 ~ 4 개의 서로 다른 픽셀 셰이더 효과가 있습니다.

3D를 포용하고 사랑하지만 하나의 축이 적어서 좋아하십시오.


2

3D API가 일반적으로 사용됩니다. 오늘날의 GPU는 3D 그래픽을 렌더링하도록 설계되었으므로 상당히 견고한 성능을 보장합니다. ZorbaTHut이 말했듯이 3D 경로를 사용하면 픽셀 쉐이더와 같은 것을 활용할 수 있습니다.

더 이상 2D API가 많지 않습니다. DirectDraw는 더 이상 사용되지 않으며 대부분의 2D / 벡터 기반 라이브러리는 OpenGL 또는 Direct3D를 사용하여 렌더링을 수행합니다. 최신 UI 툴킷도 3D API를 활용하여 렌더링 및 합성을 수행합니다. WPF (Microsoft의 최신 UI 프레임 워크)를 예로 들어 보겠습니다. 렌더링에 Direct3D를 사용합니다.


2

DirectDraw를 사용하는 것이 여전히 OpenGL 또는 D3D보다 훨씬 빠르도록 업데이트되지 않은 크 래피 / 존재하지 않는 3D 가속 및 드라이버가있는 놀라운 오래된 컴퓨터가 여전히 많이 있습니다. 다른 플랫폼을 지원하기 위해 OpenGL에서 새 렌더링 백엔드를 작성하려고 시도했을 때 약 10 세인 2D 멀티 플레이어 게임을 작업하면서이 문제를 경험했습니다. 많은 플레이어들이 프레임 속도가 느리기 때문에 OpenGL 모드를 재생할 수 없다고보고했습니다. 또한 미국과 유럽 이외의 지역에서는 이것이 더 일반적이라는 브라질 포스터에 동의하지만, 여전히 그러한 장소에서도 마찬가지입니다.

휴대 전화 나 XNA를 타겟팅하는 경우 3D를 사용하십시오. 그러나 어느 PC에서나 실행되는 게임을 만들고 싶다면 DDraw를 고수해야합니다.


1

내가 생각할 수있는 유일한 것은 2D API보다 3D API를 사용하면 약간의 기본 복잡성이 추가된다는 것입니다. OpenGL에서는 최소한 텍스처를로드하고 관리해야하며, 그릴 때 지오메트리를 가져와야합니다. 래퍼 레이어는 이러한 문제를 해결합니다.

즉, 3D 그래픽 백엔드를 사용하면 단점보다 더 많은 단점이있는 것처럼 보이므로 나에게 물어 보면 노력할 가치가 있습니다.


1

게임이 충분히 단순하고 게임이 저사양 컴퓨터, 특히 넷북 및 구형 랩톱 (3D 가속이 없거나 최소형-구형 인텔 통합 그래픽 등)에서 제대로 실행되기를 원한다면 순수한 것을 고려해 볼 가치가 있습니다. 2D 프레임 버퍼 접근

게임에 최소한 저가형 ATi / NVidia 카드 / 칩이 필요하다면 3D API를 사용하면 많은 멋진 작업 (알파 블렌딩, 스케일링 / 회전 등)을 수행 할 수 있습니다. 순수한 소프트웨어 렌더러에서 잘 / 효율적으로 작업하는 것은 까다로울 수 있습니다.

또한 3D 하드웨어 (및 이중 선형 필터링 / 알파 블렌딩)가 포함되어있을 때 '순수한 2D'에서 매우 간단한 몇 가지 사항이 더 흥미로워집니다. 사전 곱셈 알파의 개념을 이해합니다. 또한 확대 / 축소 가능보기를 원할 경우 2D 타일 맵에서 타일 사이의 이음새를 처리하는 방법을 고려하십시오.

또한 충전 속도가 제한되어 있음을 기억하십시오. 그리고 2D로 이러한 한계에 도달하는 것은 놀랍게도 쉽습니다. 다각형은 많지 않지만 알파 블렌딩 된 시차 레이어 또는 파티클 또는 포스트 효과를 많이 원한다면 상당히 고급 3D 게임만큼 많은 픽셀을 쉽게 채울 수 있습니다.

그러나 일반적으로 3D 하드웨어는 훌륭하고 추가 블렌딩은 당신의 친구입니다 :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.