새로운 그래픽 프로그래머가 OpenGL 대신 Vulkan을 학습해야합니까?


53

위키에서 : "를 VULKAN API는 처음 Khrono으로 '차세대 OpenGL을 이니셔티브'라고했다"있고 "뒤로되지 않습니다 하나 개의 공통 API로 OpenGL을 및 OpenGL ES를 통합 할 수있는 근거 업 재 설계 노력 기존 OpenGL 버전과 호환됩니다. "

그렇다면 이제 그래픽 프로그래밍에 익숙한 사람들이 OpenGL 대신 Vulkan을 더 잘 배울 수 있을까요? 그들은 같은 목적으로 사용될 것 같습니다.


1
하나의 API에서 무언가를 할 수 있다면 다른 API도 할 수 있습니다. API에 따라 방법이 달라집니다.
A --- B

답변:


33

거의!

이것은 "새로운 프로그래머가 C 대신 C ++를 배워야 하는가"또는 "새로운 예술가가 물리 회화가 아닌 디지털 회화를 배워야 하는가"라고 묻는 것처럼 보입니다.

특히 이전 버전과 호환되지 않기 때문에 그래픽 프로그래머는 업계에서 가장 일반적인 그래픽 API를 배제하는 것이 어려울 것입니다. 단순히 새로운 것이 있기 때문입니다. 또한 OpenGL은 다른 작업을 다르게 수행합니다. 회사가 특히 게임 초반에 Vulkan보다 OpenGL을 선택했을 가능성이 있으며 Vulkan을 알지 여부에 관계없이 OpenGL을 모르는 사람에게는 관심이 없을 것입니다.

전문화는 시장성이있는 기술이 아니다.

인디 개발자와 같이 기술을 마케팅 할 필요가없는 사람들에게는 툴박스에서 툴을 제거하는 것이 더 어리석은 일입니다. 인디 개발자는 유연성에 더욱 의존하고 자금 지원 대상보다 효과가 높은 것을 선택할 수 있습니다. Vulkan을 전문으로하면 옵션 만 제한됩니다.

전문화가 효율적인 패러다임은 아닙니다.



7
이 C ++ 유추는 부적절합니다. Vulkan은 OpenGL 제작자가 개발 한 새로운 차세대 API입니다. C ++는 C와 거꾸로 호환되는 기존의 경쟁자입니다.
Moby Disk

이러한 세부 사항은 비유의 점과 관련이 없습니다.
mHurley

5
전문화가 비효율적이거나 마케팅 불가능하다고 주장하는 것은 매우 순진합니다. 모든 단일 언어로 5 개 단어를 모두 알고있는 번역가는 쓸모가 없습니다. 사람들은 소수의 언어를 습득 한 (일명 전문화 된) 번역자를 고용 할 것입니다. 이제 이상 -specializing 입니다 문제. 하나의 언어를 완전히 익히고 그 언어를 아는 번역사도 유용한 번역사가 아닙니다. 또한 개발자 (인디 또는 기타)는 새로운 도구를 배우는 데 모든 시간을 소비하지 않도록주의해야합니다. 그들은 자신에게 파산 찾을 않도록 결국 그들은, 실제로 뭔가를 판매해야
8bittree을

분명히 OpenGL과 Vulkan과 관련하여 반드시 당신과 동의하지는 않습니다. Vulkan 대신 두 가지를 모두 배우는 것이 더 나은 선택 일 수 있습니다.
8bittree

40

지금 시작하고 있고 Unity와 같은 게임 엔진을 항상 사용하는 대신 GPU 작업을하려면 Vulkan을 배우는 것부터 시작해야합니다. 나중에 GL을 배워야 할 수도 있지만 Vulkan을 먼저 생각해야 할 몇 가지 이유가 있습니다.

  1. GL과 GLES는 GPU가 상당히 다르게 작동 한 몇 년 전에 설계되었습니다. (가장 명백한 차이점은 즉시 모드 드로우 콜과 타일링 및 명령 대기열입니다.) GL을 사용하면 즉시 모드 스타일로 생각하고 많은 레거시 부서가 있습니다. Vulkan은 최신 GPU의 작동 방식에 훨씬 더 가까운 프로그래밍 모델을 제공하므로 Vulkan을 배우면 기술의 실제 작동 방식과 비 효율성 및 비 효율성에 대해 더 잘 이해할 수 있습니다. GL 또는 GLES로 시작한 많은 사람들이 VBO를 사용하는 대신 객체 당 별도의 드로우 콜을 발행하거나 표시 목록을 사용하는 등 나쁜 습관을들이는 것을 보았습니다. GL 프로그래머는 더 이상 권장하지 않는 것을 찾기가 어렵습니다.

  2. Vulkan에서 GL 또는 GLES로 전환하는 것이 훨씬 쉽습니다. Vulkan은 동시성 제어, 공유 및 렌더링 상태와 같이 GL에서 숨겨 지거나 예측할 수없는 많은 것들을 명시 적으로 만듭니다. 드라이버에서 응용 프로그램으로 많은 복잡성을 가중시킵니다. 그러나 그렇게하면 응용 프로그램을 제어하고 다른 GPU 공급 업체간에 예측 가능한 성능과 호환성을 얻는 것이 더 간단 해집니다. Vulkan에서 작동하는 코드가 있으면 GL 또는 GLES로 이식하는 것이 매우 쉽고 GL / GLES 습관을 사용하는 것으로 끝납니다. GL 또는 GLES에서 작동하는 코드가있는 경우 Vulkan에서 효율적으로 작동하려면 거의 다시 시작해야합니다. 특히 레거시 스타일로 작성된 경우 (1 지점 참조).

처음에 Vulkan은 프로그래밍하기가 훨씬 어려우며 대기업의 숙련 된 개발자에게는 문제가 없지만 인디언 및 애호가에게는 큰 장벽이 될 것이라고 우려했습니다. 나는이 질문을 워킹 그룹의 일부 회원들에게 제기했으며, 그들은 이미 벌칸으로 이사 한 사람들과 대화를 나눈 사람들의 데이터 포인트가 있다고 말했다. 이 사람들은 UE4 통합 작업을하는 Epic 개발자부터 취미 게임 개발자까지 다양합니다. 그들의 경험은 시작 (즉, 화면에 하나의 삼각형을 갖는 것)이 더 많은 개념을 배우고 더 긴 상용구 코드를 갖는 것과 관련이 있었지만, 심지어 인디언에게는 너무 복잡하지 않았습니다. 그러나 그 단계에 도달 한 후에는 실제 선적 가능한 응용 프로그램을 구축하는 것이 훨씬 쉽다는 것을 알게되었습니다. 왜냐하면 (a) 다른 벤더의 구현 사이에서 행동이 훨씬 더 예측 가능하고 (b) 모든 효과를 켠 상태에서 잘 수행 된 결과를 얻는 데 많은 시행 착오가 수반되지 않았기 때문입니다. 실제 개발자의 이러한 경험을 통해 그들은 초급 그래픽 사용자에게도 Vulkan에 대한 프로그래밍이 가능하며 튜토리얼을 마치고 다른 사람들에게 제공 할 수있는 데모 또는 응용 프로그램을 구축하기 시작하면 전반적인 복잡성이 줄어 듭니다.

다른 사람들이 말했듯이 GL은 많은 플랫폼에서 사용 가능하고 WebGL은 훌륭한 전달 메커니즘이며 GL을 사용하는 기존 소프트웨어가 많으며 해당 기술을 고용하는 많은 고용주가 있습니다. 앞으로 몇 년 동안 Vulkan이 발전하여 생태계를 발전시킬 것입니다. 이러한 이유로 GL 학습을 완전히 배제하는 것은 어리석은 일입니다. 그럼에도 불구하고 GPU를 이해하는 데 도움이되는 무언가로 시작하면 GPU 작동 방식을 이해하는 대신 더 나은 GL 프로그래머 (일반적으로 더 나은 GPU 프로그래머)가됩니다. 20 년 전에.

물론 한 가지 옵션이 더 있습니다. 나는 이것이 당신과 특히 관련이 있는지 모르겠지만 어쨌든 다른 방문객들에게 그것을 말해야한다고 생각합니다.

인디 게임 개발자 또는 게임 디자이너가되거나 VR 경험을 만들기 위해 Vulkan 또는 GL을 배울 필요가 없습니다. 많은 사람들이 게임 엔진을 시작합니다 (현재 Unity 또는 UE4가 인기가 있습니다). 이와 같은 엔진을 사용하면 기술 뒤에있는 기술 대신 만들고 싶은 경험에 집중할 수 있습니다. GL과 Vulkan의 차이점을 숨길 수 있으므로 플랫폼에서 지원되는 것에 대해 걱정할 필요가 없습니다. 모든 세부 사항을 한 번에 처리하지 않고도 3D 좌표, 변형, 조명 및 애니메이션에 대해 배울 수 있습니다. 일부 게임 또는 VR 스튜디오는 엔진에서만 작동하며 풀 타임 GL 전문가가 없습니다. 자신의 엔진을 작성하는 대규모 스튜디오에서도 그래픽 프로그래밍을하는 사람들은 소수입니다.

GPU와 상호 작용하는 방법에 대한 자세한 내용을 배우는 것은 확실히 유용한 기술이며 많은 고용주가 소중히 생각하는 기술이지만 3D 프로그래밍을 배우기 위해 배우지 않아도 될 것입니다. 알고 있더라도 반드시 매일 사용하는 것은 아닙니다.


2
다소 동의하지 않습니다. Vulkan (및 DX12)은 숙련 된 개발자 를 위해 구현하기가 매우 어려운 것으로 입증되었습니다 . Vulkan이 제공하는 모든 힘으로 발을 딛는 것은 매우 쉽습니다. 또한 Vulkan에는 훨씬 더 많은 상용구 코드가 필요합니다. GPU 프로그래밍에 대해 배우는 누군가에게 Vulkan은 매우 압도적이라고 생각하는 경향이 있습니다.
RichieSams 2016 년

2
@RichieSams 나는 당신이 "구현"을 의미한다고 생각하지 않습니다. GPU 벤더 만이 Vulkan을 구현해야하며 OpenGL을 구현하는 것보다 훨씬 쉽습니다. (나를 믿어 라!) 그러나 당신이 통합하거나 프로그램하기가 어렵다는 것을 의미한다고 가정 할 때, 나는 Vulkan WG에서 배운 정보가 담긴 단락을 추가했다.
Dan Hulme

옳은. 구현은 아마도 잘못된 단어 선택 일 것입니다. 나는 당신의 프로그램에서 '사용'을 의미했습니다. 그러나 나는 당신의 편집을 좋아합니다. 잘 들어
RichieSams

@ DanHulme- "GL은 즉시 모드 스타일로 생각하도록 권장합니다"라는 귀하의 의견에 놀랐습니다. 초기 OpenGL 버전 에서만 적용되었다고 생각 했습니까?
ToolmakerSteve

1
@ToolmakerSteve OpenGL WG는 동시성 및 일괄 쓰기를 추가하는 데 많은 노력을 기울 였으므로 타일링 / 지연된 구현에 적합한 방식으로 프로그램을 표현할 수 있습니다. 그러나 그것은 여전히 ​​즉각적인 시대에 세워진 기초이기 때문에 사람들이 불칸에서 새로운 출발이 필요하다고 결정한 이유입니다. 그리고 저는 여전히 GL로 시작하여 구현 방식에 대한 즉각적인 정신적 모델을 형성하는 많은 신규 사용자를보고 있습니다.
Dan Hulme

26

그래픽 프로그래밍 학습은 단순한 API 학습 그 이상입니다. 그래픽이 어떻게 작동하는지 배우는 것입니다. 정점 변환, 조명 모델, 그림자 기술, 텍스처 매핑, 지연 렌더링 등. 이것들은 구현에 사용하는 API와 전혀 관련이 없습니다.

문제는 이것입니다. API 사용법을 배우고 싶습니까? 아니면 그래픽 을 배우고 싶 습니까?

하드웨어 가속 그래픽으로 작업하려면 API를 사용하여 해당 하드웨어에 액세스하는 방법을 배워야합니다. 그러나 일단 시스템과 인터페이스 할 수있게되면 그래픽 학습이 API의 기능에 중점을 두지 않고 대신 그래픽 개념에 중점을 둡니다. 조명, 그림자, 범프 매핑 등

그래픽 개념을 배우는 것이 목표라면 API를 사용하는 시간은 그래픽 개념배우지 않는 시간 입니다. 셰이더를 컴파일하는 방법은 그래픽과 관련이 없습니다. 유니폼을 보내는 방법, 버텍스 데이터를 버퍼에 업로드하는 방법 등도 없습니다. 도구 및 그래픽 작업을위한 중요한 도구입니다.

그러나 실제로 그래픽 개념은 아닙니다. 그것들은 끝의 수단입니다.

Vulkan을 사용하면 그래픽 개념 학습을 시작할 수있는 시점에 도달하기 전에 많은 작업과 학습 이 필요 합니다. 데이터를 셰이더에 전달하려면 명시적인 메모리 관리 및 명시적인 액세스 동기화가 필요합니다. 기타 등등.

대조적으로, OpenGL로 그 시점에 도달하려면 적은 작업이 필요합니다. 그리고 저는 현대의 쉐이더 기반 코어 프로파일 OpenGL에 대해 이야기하고 있습니다.

화면을 지우는 것만 큼 간단한 작업을 수행하는 데 필요한 작업을 비교하십시오. Vulkan에서는 명령 버퍼, 장치 큐, 메모리 개체, 이미지 및 다양한 WSI 구성과 같은 많은 개념을 이해해야합니다.

OpenGL을에서 ...이 세 가지 기능을이다 : glClearColor, glClear, 및 플랫폼 별 스왑 통화를 버퍼링한다. 보다 현대적인 OpenGL을 사용하는 경우 두 가지로 낮추고 glClearBufferuiv버퍼를 교환 할 수 있습니다 . 프레임 버퍼가 무엇인지 또는 이미지의 출처를 알 필요가 없습니다. 이를 지우고 버퍼를 교체하십시오.

OpenGL은 많은 것을 숨기므로 그래픽 하드웨어에 대한 인터페이스를 배우는 것이 아니라 실제로 그래픽을 배우는 시점에 도달하는 데 훨씬 적은 노력이 필요합니다.

또한 OpenGL은 (상대적으로) 안전한 API입니다. 일반적으로 잘못된 작업을 수행하면 오류가 발생합니다. 불칸은 아닙니다. 도움을주기 위해 사용할 수있는 디버깅 계층이 있지만 핵심 Vulkan API는 하드웨어 결함이없는 한 거의 아무 것도 알려주지 않습니다. 무언가 잘못하면 가비지 렌더링을 받거나 GPU가 충돌 할 수 있습니다.

Vulkan의 복잡성과 함께 실수로 실수를 저지르는 것은 매우 쉽습니다. 텍스처를 올바른 레이아웃으로 설정하는 것을 잊어 버린 경우 한 구현에서는 작동하지만 다른 구현에서는 작동하지 않을 수 있습니다. 동기화 지점을 잊어 버린 경우가 가끔씩 작동하지만 갑자기 아무 이유없이 실패합니다. 기타 등등.


그러나 그래픽 기술을 배우는 것보다 그래픽을 배우는 것이 더 많습니다. 특히 Vulkan이이기는 곳이 하나 있습니다.

그래픽 성능 .

3D 그래픽 프로그래머가 되려면 일반적으로 코드를 최적화하는 방법에 대한 아이디어가 필요합니다. OpenGL이 정보를 숨기고 뒤에서 일을하는 것이 문제가되는 곳입니다.

OpenGL 메모리 모델은 동기식입니다. 사용자가 차이점을 알 수없는 한 구현에서 비동기 적으로 명령을 실행할 수 있습니다. 따라서 일부 이미지로 렌더링 한 후 이미지를 읽으려고하면 구현시이 두 작업간에 명시적인 동기화 이벤트를 발행해야합니다.

그러나 OpenGL에서 성능을 달성하려면 구현이이를 수행하므로 피할 수 있어야합니다 . 구현이 비밀리에 동기화 이벤트를 발행하는 위치를 인식 한 다음 가능한 한 많이 피하기 위해 코드를 다시 작성해야합니다. 그러나 API 자체는이를 명확하게하지 않습니다. 당신은 어딘가에서이 지식을 얻어야합니다.

VULKAN으로 ... 당신은 그 동기화 이벤트를 발행 할 수있는 하나입니다. 따라서, 당신은 해야한다 하드웨어가 동 기적으로 명령을 실행하지 않는다는 사실에 유의하십시오. 이러한 이벤트를 언제 발행해야하는지 알아야하므로 프로그램이 느려질 수 있음을 알고 있어야합니다. 그래서 당신은 그들을 피하기 위해 최선을 다합니다.

Vulkan과 같은 명시 적 API는 이러한 종류의 성능 결정을 내려야합니다. 따라서 Vulkan API를 배우면 어떤 것이 느려지고 어떤 것이 빨라질 지 이미 잘 알고 있습니다.

새로운 렌더 패스를 만들어야하는 프레임 버퍼 작업을해야한다면 ... 렌더 패스의 별도의 서브 패스에 맞추는 것보다 느릴 가능성이 높습니다. 그렇다고 할 수는 없지만 API가 성능 문제를 일으킬 수 있다고 미리 알려줍니다.

OpenGL에서 API는 기본적으로 프레임 버퍼 첨부를 변경하도록 초대합니다. 어떤 변경이 빠르거나 느릴 지에 대한 지침은 없습니다.

이 경우 Vulkan을 학습하면 그래픽을 더 빠르게 만드는 방법에 대해 더 잘 배울 수 있습니다. 또한 CPU 오버 헤드를 줄이는 데 도움이됩니다.

그래픽 렌더링 기술을 배울 수있는 시점에 도달하려면 여전히 시간이 오래 걸립니다.


1
내 답변에 표현하기를 망설이고 있다는 아이디어가 매우 명확하기 때문에이 글을 게시하게되어 기쁩니다. 개념을 배우는 것이 가장 중요합니다. 우리가 다른 점은 GL을 시작하는 것이 더 쉬워서 GL을 장려한다는 것입니다. 시작하기가 쉬워 레거시 방식으로 일을 할 위험이 있다고 생각합니다. 레거시 스타일의 프로그래밍과 비교할 때 GL에서 "현대 GL 이디엄"이 무엇인지 아는 것은 매우 어렵습니다. 아무도 프리미티브 당 별도의 드로우 콜 대신 VAO를 사용하라고 말하지 않으면 나중에 그 실수를 배우기가 훨씬 어렵습니다.
Dan Hulme

1
@ DanHulme : 올바른 학습 자료를 사용하는 것은 모든 문제입니다. 현대 관용구를 사용하는 온라인에는 그러한 자료가 많이 있습니다. 아무도 참조 매뉴얼이나 사양을 읽음으로써 그래픽을 배우려고 시도해서는 안됩니다.
Nicol Bolas 2016 년

정말 쉽게 들리게! 그럼에도 불구하고 여전히 프로그래머가 그래픽에서 시작하고 일부는 다른 분야에서 매우 유능한 것으로 보이며 레거시 기능을 사용하고 성능 특성에 대해서는 전혀 배우지 않습니다. Vulkan에서는 값 비싼 물건 비싸게 보이기 때문에 잘못 이해하기가 정말 어렵습니다 . 어쨌든 우리는 논쟁 할 필요가 없습니다. 나는 당신의 요점에 동의합니다. 개념을 배우는 것이 가장 중요하며 Vulkan 또는 GL 없이도 할 수 있습니다.
Dan Hulme

@DanHulme : " Vulkan에서 그 문제를 해결하는 것은 정말 어렵 습니다." 너무 바빠서 다른 모든 것을 잘못 받고 있기 때문에 ;) 또한 Vulkan에서 성능이 잘못 되기는 여전히 쉽습니다. 불필요한 동기화. "일반"이미지 레이아웃 만 사용 서브 패스를 이용하지 않습니다. 파이프 라인이 자주 변경됩니다. 기타 등등. 말할 것도없이, 다른 벤더들은 Vulkan을 가장 잘 사용하는 방법에 동의하지도 않습니다.
Nicol Bolas 2016 년

2
@ DanHulme : 현대 OpenGL을 사용하는 것이 얼마나 쉬운 지에 관해서는 쉽게 하기 위해 최선다합니다 . 사람들이 NeHe와 같은 쓰레기 사이트에서 배우거나 임의의 문서를 읽음으로써 고집한다면, 그것은 누군가가 도울 수있는 것이 아닙니다. 말을 물로 인도 할 수는 있지만 마실 수는 없습니다.
Nicol Bolas

7

OpenGL의 주요 매력은 (적어도 나에게) 많은 플랫폼에서 작동한다는 것입니다. 현재 Vulkan은 OSX에서 작동하지 않으며 Apple에는 Metal이라는 경쟁 API가 있습니다. Apple이 Vulkan을 지원하기까지 어느 정도 시간이 걸릴 수 있으며, 그렇게 할 경우 Vulkan 지원은 최신 하드웨어에만 제공 될 수 있습니다. OpenGL은 이미 대부분의 하드웨어를 지원하며 계속해서 지원할 것입니다.


OSX가 Vulkan을 지원한다면 작은 부분 집합 만 지원할 것이며 웹 브라우저를위한 차세대 그래픽 API가 될 것입니다. OpenGL은 여전히 ​​어느 정도 사용하기 쉽습니다 Vulkan, 렌더링 파이프 라인을 통해 단순성에서 얻는 vulkan은 다른 많은 것들을 명시 적으로 처리 할 때 잃어 버립니다
GameDeveloper

1
@DarioOO OpenGL 즉시 모드는 즉시 사용하지 않는 모드보다 사용하기가 훨씬 간단하지만 권장하지 않습니다.
user253751

1
@Gavin : OpenGL 버전 4.2 이상은 OSX에서도 지원되지 않습니다. 따라서 OSX의 OpenGL에서 최근의 것을 사용 하려면 할 수 없습니다. 그리고 애플은 이후의 OpenGL 버전을 채택하지 않을 것입니다. Apple 플랫폼은 Metal에 올인되어 있으므로 크로스 플랫폼은 어느 쪽이든 흉벽합니다.
Nicol Bolas 2016 년

애플은 Vulkan을 강요받지 않는 한 결코 지원하지 않을 것이며 경제는 매우 간단합니다. 모두 Metal에 참여함으로써 GLES2가 제공 할 수있는 것 이상을 필요로하지만 Vulkan과 Metal 모두를위한 게임을 개발할 수있는 리소스가없는 모바일 게임 개발자를 사로 잡으려고합니다. 특히 iOS 개발자가 Mac App Store에서 출시하는 경우 Mac의 작은 게임 환경을 희생 할 준비가되어 있습니다.
Jonathan Baldwin

Vulkan은 이제 macOS (이전의 OS X)에서 작동합니다 : meltgl.com
Alexander

4

그것은 당신이하고 싶은 것에 달려 있습니다. 자신 만의 그래픽 프로그래밍을 배우고 싶다면 실제로 선택한 것이 중요하지 않습니다.

전문적인 작업에 대해 생각하고 있다면 Vulkan을 추천합니다. 하드웨어에 더 가깝고 그래픽 프로그래머에게 하드웨어가 무엇인지에 대한 지식이 있다고 생각합니다.

Vulkan은 OpenGL이 명령 대기열 실행과 같이 Vulkan에서 수동으로 수행하는 작업을 많이 수행하기 때문에 하드웨어에 더 가깝습니다. 또한 메모리 관리는 드라이버가 아닌 응용 프로그램에 달려 있습니다. uniforms추적에 대한 메모리 할당 (CPU에서 GPU로 전달되는 변수) 에 대해 걱정해야 합니다. 걱정해야 할 것이 더 많지만 메모리 사용에 더 많은 자유를줍니다. 무섭고 압도적으로 들릴 수 있지만 실제로는 그렇지 않습니다. 학습해야 할 다음 API뿐입니다.

이 사항을 이해하면 GPU 작동 방식을 이해하는 데 도움이됩니다. Vulkan 및 OpenGL에서 최적화를 수행 할 수있는 기능

Vulkan이 직업을 찾을 때 그래픽 프로그래밍을 배우기 시작하면 아마도 하나 더 생각할 것입니다. 또한 그래픽 API를 사용하는 대부분의 회사가 주변에 자체 기능을 작성하므로 OpenGL이나 Vulkan으로 작성하지는 않지만 GPU에 대한 지식은 항상 유용 할 수 있습니다.


2

나는 몇 달 동안 그래픽 프로그래밍에 "들어가고있다".

지금은 여전히 ​​고등학교에 다니고 있으며 거의 ​​항상 크로스 플랫폼 응용 프로그램을 개발하려고합니다. 이것은 실제로 Vulkan의 가장 큰 문제입니다. 모든 플랫폼에서 작동하도록 개발 된 것은 아닙니다. Java에서 OpenGL을 사용하여 6 개월 이상 근무하고 있습니다.

내가 가진 또 다른 문제는 Vulkan의 주장과 관련하여 더 나은 주장입니다. OpenGL은 확실히 웹 사이트를 자주 업데이트하지 않습니다. 그들은 지속적으로 업데이트를 지속적으로 출시하며 항상 새로운 하드웨어로 더 빨리 실행되거나 더 잘 작동하는 새로운 업데이트를 기대합니다.

즉, OpenGL을 주로 사용하면서 DirectX 및 Vulkan의 기본 원칙을 이해합니다. OpenVl 및 DirectX와 같이 프로그래밍하기가 어렵고 배우기가 어렵 기 때문에 특히 Vulkan을 광범위하게 다루지 않습니다.

마지막으로, 나는 주로 Java를 사용하고 OpenGL이 놀랍게도 시장에 나올 수없는 것처럼 단일 필드 전문화를 추가하고 싶습니다. 게임을 만든 회사에서 일자리를 구하고 싶다면 대부분 OpenGL은 Linux 및 Android 개발 및 OSX 용 게임을 만드는 데만 사용됩니다. Windows 및 콘솔 용 DirectX <어떤 경우 Vulkan이 대체 할 수있는 경우.

OpenGL 업데이트를 영원히 유지할 수는 없습니다. 그러나 개발을 선호합니다.


" 내가 가진 또 다른 문제는 Vulkan의 주장이 그것이 더 좋다고 주장하는 것입니다. "Vulkan은 아무 것도 주장하지 않습니다. 단지 API 일뿐입니다. 주장 할 수 없습니다.
Nicol Bolas 2016 년

Vulkan과 GL은 대부분 같은 사람들에 의해 만들어진다는 것을 알고 있습니까?
Dan Hulme

네 저도 그렇습니다. 나는 여전히 GL을 선호합니다
Winter Roberts

2

주제에 대한 나의 그래픽 초급 관점을 보여 드리고자합니다. 제가 몇 년 동안 다른 분야의 엔지니어로 일하면서 깨달은 것은 기본 개념이 가장 중요한 부분이라는 것입니다. 일단 당신이 그것들을 잘 이해했다면, 마지막으로 빛나는 새로운 API를 배우는 것이 가장 어려운 부분입니다. 나는 당신이 새로운 Skyrim을 프로그램하려는 젊은 취미가되는지 또는 CG 분야에서 일자리를 찾고 있는지 모르겠습니다.

"프로처럼"컴퓨터 그래픽을 배우는 것이 제 생각 에 가장 좋은 방법이라고 생각합니다 .

  1. 전문가처럼 선형 대수와 기하학을 배우십시오. 이것이 없으면 멋진 API 또는 그래픽을 잊어 버리십시오.
  2. 컴퓨터 그래픽에 관한 좋은 책을 구입하십시오 (예 : 컴퓨터 그래픽의 기초 )
  3. 이 책을 공부하는 동안 이미지를 그려 알고리즘을 구현할 수있는 프로그래밍 환경을 설정하십시오! Java 2D 또는 C ++ 및 SDL 또는 Python 및 Pygame 일 수도 있습니다. 이 단계에서는 10000 FPS를 얻기 전에 여러 카메라 뷰가있는 회전 텍스처 기어를 준비해야합니다.
  4. 이제 OpenGL, Vulkan 또는 DirectX를 사용하고 멋진 예제를 반복하십시오 (위 참조).

선을 그리는 방법을 이해하기 전에 성능에 대한 걱정을 시작하는 것은 운전 면허를 얻기 전에 자동차의 공기 역학에 대한 걱정과 같습니다.


0

저는 공식 교육없이 C ++로 자체 교육을 받았으며 지난 15 년 동안 Modern OpenGL과 DirectX 9c, 10 및 11을 통해 OpenGL 1.0을 모두 배웠습니다. DirectX 12에 들어 가지 않았으며 Vulkan에서 내 손을보십시오. Vulkan으로 간단한 삼각형이나 간단한 회전 큐브를 그리는 몇 가지 기본 자습서 만 완료했습니다. DirectX 11 및 OpenGL 3.3+와 마찬가지로 완벽하게 작동하는 3D 게임 엔진을 작성했으며 심지어 엔진을 사용하여 간단한 게임을 만들었습니다.

나는 그것이 배우는 사람의 전반적인 환경에 달려 있다고 말할 것입니다. 3D 그래픽 프로그래밍에 익숙하다면 초보자에게 OpenGL 또는 DirectX 11로 뛰어 들어가기 때문에 많은 자습서, 리소스, 예제 및 이미 작동중인 응용 프로그램이 있기 때문입니다. 3D 그래픽을 배우는 것은 결코 쉬운 주제가 아닙니다.

우리가 프로그래밍 측면에서 추상화하고 데이터 세트와 데이터 구조 및 알고리즘으로 이어지는 다른 수준의 수학과 관련하여 어떤 종류의 기술이 사용되는지에 초점을 맞추면; 3D 게임 엔진을 구축하거나 기존 엔진을 효과적으로 사용하려면 먼저 알고 이해해야 할 것이 많습니다.

이제 모든 수학과 이론을 이미 이해하고 프로그래밍 경험이 있다면 Unity 또는 Unreal Engine과 같은 기존 API, 라이브러리 및 응용 프로그램을 사용하고 응용 프로그램 작동에 필요한 소스 코드 및 스크립트를 작성할 수 있습니다 .

그래서 내 자신의 이해와 내가 보는 방식에서 게임을 만들기 위해 빠른 게임을 만들려고한다면 이것입니다. 생산 시간을 훨씬 단축시킬 수있는 기존 프레임 작업을 수행하십시오. 반면에 게임 엔진 / 물리 엔진 / 애니메이션 엔진 및 시뮬레이터가 어떻게 설계되고 내부적으로 작동하는지 이해하고 직접 빌드하려는 경우 DirectX와 같은 API를 선택할 수 있습니다. OpenGL 또는 Vulkan. 여기서 결정적인 요소 중 하나는 기존 프로그래밍 지식이기도합니다. 이것이 의미하는 것은 멀티 스레딩, 동기식 vs 비동기식 호출, 메모리 펜스, 데이터 레이스, 세마포어 및 병렬 처리 (병렬 프로그래밍)에 대해 아무것도 모르는 경우,

스레드 및 액세스 시간과 함께 메모리를 올바르게 관리하는 방법을 모른다면이 점을 언급합니다. Vulkan은 arse에서 당신을 물 것입니다! OpenGL과 DirectX는 훨씬 더 많은 CPU 전력을 소비하여 여러분의 손길을 사로 잡습니다.

이제 당신의 프로그래밍 지식 수준이 적당하고 모든 수준의 대수, 기하학, 삼각법, 부울 대수, 확률, 통계, 벡터-행렬 기반 대수, 미적분학 I, II, .... 무한 (lol). 벡터 미적분학, 선형 대수학, 선형 방정식 시스템, 다변량 계산의 벡터 미적분학, 수 및 집합 이론, 데이터 세트 및 구조, 전산 분석, 전산 및 알고리즘 설계를 사용한 분석 기하학. 그런 다음 실제 게임 엔진을 만드는 데 필요한 개념을 이해할 수 있으며 필요한 수학이나 물리학 방정식이 없습니다. 그 배경과 충분한 프로그래밍 경험, 특히 메모리 관리 및 포인터 산술이 있으면 게임 엔진 구축을 시작할 수 있습니다.

고급 그래픽 프로그래밍을하기 위해 게임 엔진을 만드는 데 필요한 모든 측면을 이해해야합니다. 2D 그래픽 만 수행한다면 앞서 언급 한 API없이 파이썬에서 할 수있는 것처럼 인생은 그리 어렵지 않습니다! 그러나 진지하고 많은 기능 세트로 강력한 본격적인 파워 하우스 게임 엔진을 설계하려면 C 또는 C ++ 중 하나를 선택하고 OpenGL, Direct X 또는 Vulkan을 사용하십시오. 그들 중 누구라도 괜찮을 것입니다. 이제 Scratch에서 엔진을 구축하고 최소의 리소스 오버 헤드로 가장 "효율적인"엔진을 찾고 있다면 Vulkan을 선택하고 싶을 것입니다. 그러나이 경로를 사용하면 적어도 위에서 언급 한 모든 것과 일부를 알아야합니다!

보시다시피 Vulkan은 실제로이 분야의 초보자 프로그래머에게 적합하지 않습니다. 스레딩, 메모리 동기화, 병렬 프로그래밍을 포함한 모든 수학, 프로그래밍 패러다임, 모든 다른 유형의 데이터 세트 및 알고리즘에 대한 광범위한 지식이 있어야합니다. 그리고 그것은 응용 프로그램이 화면에 간단한 2D 삼각형을로드하도록하는 것입니다. OpenGL에서 약 100 줄의 코드 또는 DirectX에서 250 줄의 코드에서 수행 할 수있는 작업은 Vulkan에서 거의 1,000 줄의 코드를 사용합니다!

Vulkan은 응용 프로그램에서 Vulkan을 사용하는 방법의 모든 측면에 대한 책임이 있으므로 모든 것을 귀하에게 맡깁니다. 손을 잡을 필요가없고, 방해가되지 않습니다. 발에 몸을 쏘거나 재귀 올가미를 구매할 수 있습니다!

이제 초보자 나이 분야를 처음 접하는 사람들이 Vulkan을 배우지 말아야한다는 말은 아닙니다. 그러나 저는 그들에게 다음과 같이 제안합니다 : 먼저 OpenGL 및 DirectX에 대해 충분히 배워서 기본 응용 프로그램은 단순한 삼각형이나 회전하는 큐브를 렌더링하도록 구성되어 있습니다. API와 구조의 반복 패턴에 익숙해 지십시오. 병렬로 측면에서 Vulkan을 배울 수 있다는 것을 배우는 동안이 방법을 사용하면 세 가지 각각이 동일한 작업을 수행하는 방법을 알 수 있지만 어떻게 다른지를 수행하는지 알 수 있으며 다른 API 간의 결과와 그러면 원하는 것을 선택할 수 있습니다. 이 방법을 사용하면 도구 상자에 다른 도구를 제공 할 수 있으며 3 개를 모두 지원하고 "

결국 내려갈 길을 선택하는 것은 그 사람의 몫입니다. 거기에서 그들의 성공은 헌신, 끊임없는 연구, 노력, 시행 착오, 그리고 가장 중요한 실패에 의해 결정됩니다. 당신이 실패하지 않으면 당신은 성공하지 못합니다! 당신이 실패하고, 실수를 발견하고, 고치고, 움직여서 다시 일어나서 다시 한 번만해도 성공합니다!


-1

많은 플랫폼에서 그래픽의 표준 인 OpenGL을 먼저 배워야합니다.

최신 라이브러리가 있더라도 기본 사항을 이해하고 업계 전체에서 사용되는 언어로 작업하는 것이 매우 중요합니다. 특히 Vulkan은 대기업에서 한동안 사용되지 않기 때문입니다.

  1. 아무도 즉시 적응하고 불안정한 프레임 워크 / 라이브러리로 망쳐 놓기를 원하지 않습니다.

  2. 현재 Open-GL 프로그래머를 고용 / 재교육해야 할 필요가 없습니다.


또한 OpenGL과 Vulkan은 정확히 동일하지 않다고 들었습니다. Vulkan은 OpenGL보다 낮은 수준의 API이며 기계 코드에 더 가깝습니다.

방금 찾은이 답변에는 많은 훌륭한 정보가있는 것 같습니다

https://gamedev.stackexchange.com/questions/96014/what-is-vulkan-and-how-does-it-differ-from-opengl


고려해야 할 또 다른 사항은 OpenGL 1에서 발생한 문제입니다.

OpenGL 1에서 OpenGL 2로 큰 변화가 있었으며 많은 사람들이 OpenGL1을 사용하고 하드웨어를 지원했기 때문에 일부 응용 프로그램 / 엔진에서 구현해야하는 이전 버전과의 호환성이 심각하여 개발자가 계속 지원해야하는 경우가 종종 있습니다. .

지원 외에도 언어가 너무 많이 바뀌어 새로운 것을 배워야했습니다.

이것은 JavaFX (1.x에서 2.x까지) 및 Play! 프레임 워크 (1.x ~ 2.x). 프레임 워크가 완전히 변경되었으므로 모든 것을 다시 학습해야합니다.


따라서 Vulkan이 안정 될 때까지 기다려야합니다. 2.0 패치가 나올 때까지 기다리라는 의미입니다. IT가 Vulkan의 기본 사항에 대해 배울 수는 없지만 이것이 변경 될 수 있음을 알고 있습니다. 나는 Kronos와 같은 그룹이 처음부터 매우 안정적인 API를 제공한다고 가정합니다. 특히 Vulkan에서 일하는 여러 Nvidia 및 AMD 엔지니어가 있기 때문에 특히 프로젝트를 감독하는 고위 Nvidia 직원과 Mantle의 기본; 그러나 다른 소프트웨어와 마찬가지로 코더는 처음부터 얼마나 잘 작동하는지 볼 수 있지만 많은 사람들이 조심하고 무슨 일이 일어나고 있는지 기다리고 있습니다.


Vulkan은 현재 안정적입니다. GL 1.0 2.0의 비유는 적절합니다. GL로 시작하는 것은 GL 2.0이 나온 후 6 개월 후에 GL 1.0을 배우는 것과 같습니다.
Dan Hulme

1
Vulkan은 "안정적"일 수 있습니다. 변하지 않는 것은 아닙니다. 이것이 언어의 본질입니다. 지난 몇 년 동안 언어에 최근 2 가지의 변경 사항이 있었으므로 Vulkan에 이것이 일어나지 않을 것임을 어떻게 알 수 있습니까? 당신은 기본적으로 OpenGL을 배우는 것이 낭비라고 말하고 있습니다. OpenGL을 죽인 것처럼 보이게 만드는 것은 더 이상 사용되지 않을 것입니다. 또한 거짓입니다. 게다가, Vulkan이 안정성 문제를 가질 수 있다고 믿는 유일한 사람은 아닙니다. 그렇지 않을 수도 있지만 새로운 언어를 사용하는 것이 좋습니다.
XaolingBao

1
물론 상황이 바뀔 것이고 워킹 그룹은 이미 다음 스펙 버전의 새로운 기능을 향해 노력하고 있습니다 (ssh, 당신은 저에게서 그것을 듣지 못했습니다). 안정 은 그러한 것들이 스펙에 추가 될 것이며, 오늘날 당신이 배우는 것들이 지금부터 2 년 동안 유효 할 것입니다. OTOH, 오늘날 GL에 대해 배우는 것은 프로그래머블 쉐이더 세계에서 고정 기능 파이프 라인에 대한 학습과 마찬가지로 GPU의 작동 방식과 이미 잘 맞지 않습니다. 내 대답을 읽으면 GL을 배우는 것이 낭비라고 생각하지 않습니다. 그러나 "Vulkan이 너무 새롭다"는 것을 할인 할만한 좋은 이유는 아닙니다.
Dan Hulme

1
@Lasagna : " 이것은 변경 될 수 있습니다. 많은 회사들이이를 즉시 사용하지 않을 것 입니다."Valve. 서사시. 통일. 그들 모두는 Vulkan에서 엔진을 작동시키는 데 많은 투자를했습니다. CryTech와 Id도 정확히 무시하지 않습니다. 따라서 귀하의 진술은 사실과 일치하지 않습니다.
Nicol Bolas 2016 년

2
@Lasagna : " 3D 엔진에 적용되었다고해서 회사가 프로젝트에 투자하고 있다는 의미는 아닙니다. "3D 엔진이 "프로젝트"자격을 갖추지 못했습니까? DOTA2는 "프로젝트"로 간주됩니까? 지금 은 Vulkan을 지원하기 때문 입니다. 삼성의 스마트 폰 및 태블릿 제품군은 "프로젝트"로 간주됩니까? 그들은 그것을 UI에 통합하려고합니다. 현실은 많은 사람들이 "새로운 플랫폼을 테스트하는 사람"이 되고자한다.
Nicol Bolas 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.