2009-05-07 1 views
56

정점 및 픽셀 쉐이더 란 무엇입니까?정점 및 픽셀 쉐이더 란 무엇입니까?

그들 사이의 차이점은 무엇입니까? 어느 것이 최고입니까?

+1

가능한 중복 http://stackoverflow.com/questions/4421261/vertex 단지 등의 파일 이름, 주요 항목 기능과 같은 필요한 매개 변수와 함께 호출하는 API와 같이 수행 할 수 있습니다 -shader-VS 단편 쉐이더) –

답변

36

Pixel Shader은 픽셀 단위로 작동하고 조명 및 범프 매핑과 같은 작업을 처리하도록 프로그래밍 할 수있는 GPU (그래픽 처리 장치) 구성 요소입니다.

Vertex Shader 등,

또한 GPU 구성 요소이며, 또한 픽셀 쉐이더와 같은 특정 어셈블리와 같은 언어를 사용하여 프로그램되어 있지만, 장면 형상 지향하고 객체에 철로 실루엣 모서리를 추가하는 등의 작업을 수행 할 수 있습니다

둘 중 어느 쪽도 다른 쪽보다 낫지는 않지만 각각 특정 용도로 사용됩니다. DirectX 9 이상을 지원하는 대부분의 최신 그래픽 카드에는 이러한 기능이 포함되어 있습니다.

이러한 것들을 사용하는 방법을 더 잘 이해하기 위해 웹에 여러 리소스가 있습니다. NVidia와 ATI는 특히이 주제에 관한 문서를위한 훌륭한 자료입니다.

+13

쉐이더는 상위 레벨 (비 조립체) (CG) HLSL GLSL과 같은 언어로 작성된다. –

11

꼭지점 및 픽셀 쉐이더는 그래픽 파이프 라인 내에서 다른 기능을 제공합니다. 버텍스 쉐이더는 버텍스 관련 데이터 (위치, 법선, 텍스코 코드)를 가져와 처리합니다.

픽셀 (또는 더 정확하게는 조각) 셰이더는 버텍스 셰이더에서 처리 된 값을 보간하고 픽셀 조각을 생성합니다. "멋진"것들은 대부분 픽셀 쉐이더에서 이루어집니다. 이것은 텍스처 조회 및 조명과 같은 것들이 일어나는 곳입니다.

3

픽셀 쉐이더는 각 픽셀을 개별적으로 조작하는 작은 프로그램으로 비슷하게 버텍스 쉐이더는 각 버텍스마다 개별적으로 작동합니다.

특수 효과, 그림자, 조명을 만드는 데 사용할 수있는 등 ...

각 픽셀/버텍스 현대 그래픽 프로세서의 고도 병렬 아키텍처에 자신을 빌려 개별적으로 쉐이더를 수술하기 때문에.

57

DirectX 10과 OpenGL 3에서는 세 번째 유형으로 기하학 셰이더를 도입했습니다. 파이프 라인의 순서를 렌더링에서

-

버텍스 쉐이더 - 단일 지점을 소요하고 조정할 수 있습니다. 복잡한 ** 정점 조명 계산을 다음 단계의 설정 및/또는 주변의 포인트를 워핑 (워블, 스케일 등)하기 위해 사용할 수 있습니다.

각각

지오메트리 쉐이더에 전달되는 프리미티브 결과 - 각각의 변환 프리미티브 (삼각형 등)를 취하여 그것을 계산을 수행 할 수있다. 이것은 새로운 포인트를 추가하거나 필요에 따라 이동하거나 이동시킬 수 있습니다. 이 기능을 사용하여 단일 기본 메시에서 세부 사항을 동적으로 추가하거나 제거하고 점 (복잡한 파티클 시스템의 경우) 및 기타 유사한 작업을 기반으로 수학적 메쉬를 만들 수 있습니다.

각 프리미티브 생성하여 얻는 주사선 변환 및 스팬 커버가

픽셀 셰이더 (는 OpenGL의 단편 쉐이더)를 통해 전달되는 각 픽셀은 - 어떤 정점 셰이더에 기초하여 상기 화면상의 픽셀의 색상을 계산 바운드 텍스처 및 사용자가 추가 한 데이터를 전달합니다. 이것은 현재 화면을 전혀 읽을 수 없으며 픽셀이 현재 프리미티브를 위해 있어야하는 색상/투명도를 결정합니다.

그 픽셀은 전류 인출 버퍼에 넣어 얻을 (, 스크린, 백 버퍼 렌더링 - 투 - 질감, 무엇이든)

모든 쉐이더는 세계관 매트릭스로 글로벌 데이터에 액세스 할 수 있으며 개발자가 간단한에 전달할 수 있습니다 조명이나 다른 용도로 사용하기위한 변수. 셰이더는 어셈블러와 같은 언어로 처리되지만, 현대의 DirectX 및 OpenGL 버전에는 HLSL 및 GLSL이라고하는 고수준의 C와 유사한 언어 컴파일러가 내장되어 있습니다. NVidia에는 ​​두 API 모두에서 작동하는 CG라고하는 셰이더 컴파일러도 있습니다.

은 [코멘트에서 언급 한 바와 같이 내가 (Geometry-> Vertex-> 픽셀) 전의 잘못된 순서에 따라 편집.] 테셀레이션을 위해 다이렉트 X 11에 사용 된 3 개 개의 새로운 쉐이더가 지금있다

. 새로운 완전한 셰이더 순서는 Vertex-> Hull-> Tessellation-> Domain-> Geometry-> Pixel입니다. 나는이 새로운 것을 아직 사용하지 않았으므로 정확하게 묘사 할 자격이 있다고 느끼지 않습니다. 특정

+2

렌더링 파이프 라인이 잘못되었습니다. 버텍스는 먼저 버텍스 쉐이더에서 처리 된 다음, 구성하는 프리미티브가 기하 구조 셰이더를 통과합니다. 왜 다른 사람도이 잘못된 명령에 대해 불평하지 않은 이유가 궁금합니다. –

+2

테셀레이션 쉐이더 * 헐 쉐이더 *와 * 도메인 쉐이더 *로 구성되어 있습니다. 인 - * 사이의 테설 레이터 *이 단계는 프로그램 가능하지 않다. 따라서 두 개의 추가 쉐이더 만 있습니다. GL의 등가물은 테셀레이션 제어 *와 * 테셀레이션 평가 *를 * 될 것이다. –

3

다이렉트 X :

쉐이더 : 고정 렌더링 파이프 라인에 정의되지 않은 객체에 추가 그래픽 기능을 구현 프로그램의

설정합니다. . 때문에 우리는 우리의 필요에 따라 우리 자신의 그래픽 효과를 가질 수 이것의 은 - 즉, 우리는 더 이상 미리 정의 된 "고정" 작업에 국한되지 않습니다.

HLSL : (높은 수준의 쉐이딩 언어) :

HLSL 셰이더 (픽셀 쉐이더/버텍스 쉐이더)를 구현하는 데 사용되는 C와 같은 프로그래밍 언어 ++입니다.

버텍스 쉐이더 :

버텍스 쉐이더는 개별적으로 각 정점에 작동하는 그래픽 카드의 GPU에서 실행하는 프로그램입니다. 이렇게하면 정점의 작업을위한 자체 알고리즘을 작성할 수 있습니다.

픽셀 쉐이더 :

픽셀 셰이더 각 픽셀 래스터 화 프로세스 중에 그래픽 카드의 GPU에서 실행하는 프로그램이다. 그것은 우리에게 개별 픽셀에 직접 액세스/조작하는 기능을 제공합니다. 픽셀이 직접 액세스 픽셀 조명, 필드, 클라우드 시뮬레이션, 화재 시뮬레이션의 깊이와 정교한 그림자 기법에 따라, 우리는 멀티 텍스처링 등 다양한 특수 효과를 달성 할 수 있습니다.

참고 : Vertex Shaders와 Pixel Shaders (프로그램)는 사용하기 전에 특정 버전의 컴파일러를 사용하여 컴파일해야합니다.편집은 [조각 쉐이더 대 버텍스 쉐이더 (의