고정 함수 대 셰이더 : 초보자에게 적합한 것은?


16

저는 현재 컴퓨터 공학을 위해 대학에 가고 있습니다. 작은 게임을 만들기 위해 어느 시점에서 기존 엔진을 활용할 계획이지만 지금은 3D 프로그래밍과 같은 기본 사항을 배우는 것이 목표입니다. 나는 이미 DirectX와 OpenGL 사이의 선택에 관해 약간의 연구를 해왔으며, 그에 대한 일반적인 감정은 OpenGL 또는 DirectX를 교육용 휠 플랫폼으로 선택하든 많은 지식을 다른 플랫폼으로 전송할 수 있다는 것입니다. . 따라서 OpenGL은 더 많은 시스템에서 지원되므로 (아마 배울 내용을 선택해야하는 어리석은 이유) OpenGL을 먼저 배우겠다고 결심했습니다.

OpenGL을 배우기로 결심 한 후, 나는 좀 더 많은 연구를 해왔고, 고정 함수 OpenGL과 최신 프로그래머블 쉐이더 기반 OpenGL에 대해 전혀 모르는 이분법에 대해 알아 냈습니다. 처음에는 오늘날 업계에서 가장 일반적으로 사용되는 셰이더 기반 OpenGL을 배우는 것이 분명한 선택이라고 생각했습니다. 그러나 저는 Jason L. McKesson의 인기있는 Learning Modern 3D Graphics Programming 을 발견했습니다. http://www.arcsynthesis.org/gltut/

소개 부분을 읽었으며 "이 책에 대하여"절에서 저자는 다음과 같이 말합니다.

"먼저 사용자가 프로그래밍 기능으로 해결해야하는 그래픽 문제에 직면 할 때이 접근 방식으로 배운 내용을 피해야합니다. 프로그래밍 기능은 거의 모든 고정 기능 파이프 라인을 제거하므로 지식이 쉽게 전달되지 않습니다."

그러나 동시에 고정 기능이 초보자에게 더 쉽고 즉각적인 학습 곡선을 제공한다고 주장합니다.

"고정 함수 파이프 라인을 사용하여 네오 피트 그래픽 프로그래머를 가르치는 것이 일반적으로 가장 쉬운 것으로 간주됩니다."

당연히 어떤 패러다임을 배워야하는지에 대해 왜 충돌하는지 알 수 있습니다. 고정 기능의 방법을 배우고 나중에 배우지 못하는 데 많은 시간을 소비합니까, 아니면 셰이더로 시작하기로 선택합니까? 저의 주요 관심사는 현대 프로그래머블 쉐이더가 프로그래머가 이미 고정 기능 파이프 라인을 이해하도록 요구한다는 것입니다.

TL; DR = 주목할만한 게임 그래픽 프로그래머로서, 고정 기능 또는 최신 셰이더 기반 프로그래밍을 통해 3D 프로그래밍을 배우는 것이 가장 중요합니까?


이것과 비슷한 질문이 있습니다.
notlesh

"그러나 동시에 고정 기능이 초보자들에게보다 쉽고 즉각적인 학습 곡선을 제공한다는 사례도 있습니다."궁금합니다. 그게 정확히 어떻게됩니까? 따옴표는 " 일반적으로 가장 쉬운 것으로 간주됩니다 ..." 라고 분명히 말했기 때문에 (강조 추가). 마찬가지로, 그것은 진실한 것으로 간주 될 수 있지만, 그것이 진실 인 것은 아닙니다.
Nicol Bolas

네, 그건 어색한 표현이었습니다.
Rob Hays

고정 기능 파이프 라인은 OpenGL과 DirectX에서 더 이상 사용되지 않으므로 시간을 낭비하지 않습니다. 기본 셰이더는 매우 간단하며 렌더링 컨텍스트가 작동하도록 충분히 이해하는 것만 큼 복잡하지 않습니다.
3Dave

답변:


30

나는 고정 기능으로 시작하는 것이 더 쉽다는 주장을 사지 않습니다. 고정 기능을 사용하면 코드가 적은 특정 작업을 수행 할 수 있습니다. 예를 들어, 고정 기능 OpenGL에서는 glEnable(GL_LIGHTING)몇 가지 다른 호출 을 수행 하여 기본적인 조명 / 음영을 얻을 수 있습니다 . 문제는 픽셀 별 조명, 즉 버텍스 당 조명 대신 약간 다른 것을 원하자마자 고정 기능을 완전히 버리고 사용중인 고정 기능을 모두 구현하기 위해 쉐이더를 작성해야한다는 것입니다 이전에 변경하고 싶은 모든 것을 추가했습니다.

전체 시간 동안 셰이더를 사용하는 것이 더 간단하고 혼란스럽지 않은 것처럼 보입니다. 셰이더를로드하고 컴파일해야하는 별도의 소스 파일, 매개 변수를 찾고 설정하기위한 추가 C 호출 등이 있으므로 셰이더를 약간 더 설정해야합니다. 몇 가지 다른 효과를 코딩하고 다른 아이디어 등을 시도해보십시오. 그리고 고정 기능 시스템의 한계가 어디에 있는지, 원하는 것을 할 수 있는지 여부에 대해 신경 쓸 필요가 없습니다. 셰이더는 코드를 작성할 수있는 모든 작업을 수행 할 수 있으며 일반적인 성능 및 메모리 제한을 모듈로 적용 할 수 있습니다.


응답 해 주셔서 감사합니다. 나는 아마도 쉐이더를 위해 올바르게 갈 것입니다.
Rob Hays

3
+1- "Learning C ++"vs "Learning BASIC"과 비슷합니다. C ++를 배우는 데 시간이 오래 걸리지 만 장기적으로는 더 많이 배우게 될 것입니다.
Jonathan Dickinson

3
opengl-tutorial.org 을 추천하고 싶습니다 . 이 사이트는 기본 사항을 잘 설명하고 쉐이더 만 사용합니다.
Exilyth


2

나는 쉐이더를 위해 곧장 간다. 실제로 설정하기 그리 어렵지는 않으며 첫 번째 장애물을 통과하면 손끝에서 모든 힘을 발휘할 수 있습니다.

요컨대, 셰이더 프로그래밍은 대학의 책과 그래픽 강의에서 볼 수있는 수학 방정식과 더 가깝습니다.


0

고정 함수 파이프 라인을 프로그램의 백본으로 사용하는 것이 좋습니다. 순수한 쉐이더 대신 사용하여 표시하는 것이 더 쉽다는 것을 알았습니다. 그런 다음 정점이나 법선을 엉망으로 만들지 않았다는 사실을 알면 천천히 차양을 만들 수 있습니다.

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