Vertex 및 Pixel 쉐이더 란 무엇입니까?
Vertex 및 Pixel 쉐이더 란 무엇입니까?
그들 사이의 차이점은 무엇입니까? 어느 것이 최고입니까?
픽셀 쉐이더는 GPU를 (그래픽 처리 장치) 픽셀 단위로 운영하고 조명과 같은 물건을 돌봐 범프 매핑하도록 프로그램 할 수 있습니다 구성 요소입니다.
버텍스 쉐이더는 또한 GPU 구성 요소이며, 또한 픽셀 쉐이더와 같은 언어 어셈블리와 같은 특정을 사용하여 프로그램되어 있지만, 장면 형상 지향하는 등, 객체에 철로 실루엣 모서리를 추가하는 등의 작업을 수행 할 수 있습니다
둘 다 다른 것보다 낫지 않으며 각각 특정 용도가 있습니다. DirectX 9 이상을 지원하는 대부분의 최신 그래픽 카드에는 이러한 기능이 포함되어 있습니다.
이러한 것들을 사용하는 방법을 더 잘 이해할 수 있도록 웹에 여러 리소스가 있습니다. NVidia 및 ATI는 특히이 주제에 대한 문서에 대한 좋은 리소스입니다.
DirectX 10 및 OpenGL 3에서는 세 번째 유형으로 Geometry Shader를 도입했습니다.
렌더링 파이프 라인 순서에서-
Vertex Shader- 단일 포인트를 가져와 조정할 수 있습니다. 다음 단계를위한 설정으로 복잡한 ** 정점 조명 계산을 계산하거나 주변 지점 (흔들림, 배율 등)을 왜곡하는 데 사용할 수 있습니다.
각각의 결과 프리미티브는
Geometry Shader- 변형 된 각 프리미티브 (삼각형 등)를 가져 와서 계산을 수행 할 수 있습니다. 이렇게하면 새 포인트를 추가하거나 제거하거나 필요에 따라 이동할 수 있습니다. 단일 기본 메시에서 동적으로 세부 수준을 추가하거나 제거하고, 점 (복잡한 입자 시스템의 경우) 및 기타 유사한 작업을 기반으로 수학적 메시를 생성하는 데 사용할 수 있습니다.
결과로 생성되는 각 프리미티브는 스캔 라인으로 변환되고 스팬이 포함하는 각 픽셀은
픽셀 셰이더 (OpenGL의 조각 셰이더)-버텍스 셰이더가 전달하는 내용, 바인딩 된 텍스처 및 사용자가 추가 한 데이터를 기반으로 화면의 픽셀 색상을 계산합니다. 이것은 현재 화면을 전혀 읽을 수 없으며 픽셀이 현재 프리미티브에 대해 어떤 색상 / 투명도를 가져야 하는지를 계산합니다.
그런 다음 해당 픽셀은 현재 그리기 버퍼 (스크린, 백 버퍼, 텍스처로 렌더링 등)에 배치됩니다.
모든 셰이더는 월드 뷰 매트릭스와 같은 전역 데이터에 액세스 할 수 있으며 개발자는 조명이나 다른 목적으로 사용할 수 있도록 간단한 변수를 전달할 수 있습니다. 셰이더는 어셈블러와 유사한 언어로 처리되지만 최신 DirectX 및 OpenGL 버전에는 각각 HLSL 및 GLSL이라고하는 높은 수준의 c와 유사한 언어 컴파일러가 내장되어 있습니다. NVidia에는 두 API 모두에서 작동하는 CG라는 셰이더 컴파일러도 있습니다.
[댓글에 언급 된대로 이전에 가졌던 잘못된 순서 (Geometry-> Vertex-> Pixel)를 반영하도록 편집했습니다.]
이제 DirectX 11에서 테셀레이션에 사용되는 3 개의 새로운 셰이더가 있습니다. 새로운 완전한 셰이더 순서는 Vertex-> Hull-> Tessellation-> Domain-> Geometry-> Pixel입니다. 나는이 새로운 것을 아직 사용하지 않았으므로 정확하게 설명 할 자격이 없다고 생각합니다.
정점 및 픽셀 셰이더는 그래픽 파이프 라인 내에서 다른 기능을 제공합니다. 정점 셰이더는 정점 관련 데이터 (위치, 법선, texcoord)를 가져와 처리합니다.
픽셀 (또는 더 정확하게는 Fragment) 셰이더는 Vertex 셰이더에서 처리 된 값에서 보간 된 값을 가져와 픽셀 조각을 생성합니다. 대부분의 "멋진"작업은 픽셀 셰이더에서 수행됩니다. 여기에서 텍스처 조회 및 조명과 같은 일이 발생합니다.
DirectX 관련 :
셰이더 :
고정 렌더링 파이프 라인에 정의되지 않은 개체에 추가 그래픽 기능을 구현하는 프로그램 집합입니다. 이 때문에 우리는 우리의 필요에 따라 우리 자신의 그래픽 효과를 가질 수 있습니다. 즉, 우리는 더 이상 미리 정의 된 "고정"작업으로 제한되지 않습니다.
HLSL : (고수준 음영 언어) :
HLSL은 셰이더 (픽셀 셰이더 / 버텍스 셰이더)를 구현하는 데 사용되는 C ++와 같은 프로그래밍 언어입니다.
정점 셰이더 :
버텍스 쉐이더는 각 버텍스에서 개별적으로 작동하는 그래픽 카드의 GPU에서 실행되는 프로그램입니다. 이것은 우리가 정점과 함께 작동하도록 우리 자신의 사용자 정의 알고리즘을 작성할 수 있도록합니다.
픽셀 셰이더 :
픽셀 셰이더는 각 픽셀에 대한 래스터 화 프로세스 동안 그래픽 카드의 GPU에서 실행되는 프로그램입니다. 개별 픽셀에 직접 액세스 / 조작 할 수있는 기능을 제공합니다. 픽셀에 대한 이러한 직접 액세스를 통해 멀티 텍스처링, 픽셀 당 조명, 피사계 심도, 구름 시뮬레이션, 화재 시뮬레이션 및 정교한 그림자 기법과 같은 다양한 특수 효과를 얻을 수 있습니다.
참고 : 정점 셰이더와 픽셀 셰이더 (프로그램)는 사용하기 전에 특정 버전의 컴파일러를 사용하여 컴파일해야합니다. 파일 이름, 기본 항목 기능 등과 같은 필수 매개 변수를 사용하여 API를 호출하는 것처럼 컴파일을 수행 할 수 있습니다.
개발 측면에서 픽셀 셰이더는 각 픽셀에서 개별적으로 작동하는 작은 프로그램입니다. 마찬가지로 정점 셰이더는 각 정점에서 개별적으로 작동합니다.
특수 효과, 그림자, 조명 등을 만드는 데 사용할 수 있습니다.
각 Pixel / Vertex는 개별적으로 작동하기 때문에 이러한 셰이더 는 최신 그래픽 프로세서의 고도로 병렬 아키텍처에 적합합니다.
참고 URL : https://stackoverflow.com/questions/832545/what-are-vertex-and-pixel-shaders
'Program Club' 카테고리의 다른 글
| Elixir : .ex 사용시기 및 .exs 파일시기 (0) | 2020.11.04 |
|---|---|
| Ubuntu에 설치된 GTK + 버전을 어떻게 알 수 있습니까? (0) | 2020.11.04 |
| bash 스크립트가 계속 실행되는 동안 출력을 파일로 강제 플러시 (0) | 2020.11.04 |
| std :: strstream이 더 이상 사용되지 않는 이유는 무엇입니까? (0) | 2020.11.04 |
| 저장 프로 시저에 선택적 OUTPUT 매개 변수를 사용할 수 있습니까? (0) | 2020.11.04 |