Programing

버텍스 셰이더 대 프래그먼트 셰이더

lottogame 2020. 8. 17. 09:30
반응형

버텍스 셰이더 대 프래그먼트 셰이더


이 질문에 이미 답변이 있습니다.

Cg에 관한 몇 가지 튜토리얼을 읽었지만 한 가지 분명하지 않습니다. 버텍스 쉐이더와 프래그먼트 쉐이더의 차이점은 정확히 무엇입니까? 그리고 어떤 상황에 하나가 다른 것보다 더 적합합니까?


조각 셰이더는 픽셀 셰이더와 동일합니다.

한 가지 주요 차이점은 버텍스 셰이더가 버텍스의 속성을 조작 할 수 있다는 것입니다. 다각형의 꼭지점입니다.

반면에 프래그먼트 셰이더는 정점 사이의 픽셀이 어떻게 보이는지 관리합니다. 특정 규칙에 따라 정의 된 정점 사이에 보간됩니다.

예를 들어 다각형을 완전히 빨간색으로 만들려면 모든 정점을 빨간색으로 정의합니다. 정점 사이의 그라디언트와 같은 특정 효과를 원한다면 조각 셰이더에서 수행해야합니다.

다른 방법으로 말하세요.

버텍스 쉐이더는 모델 좌표 변환과 다각형 클리핑 사이의 그래픽 파이프 라인 초기 단계의 일부입니다. 그 시점에서는 아직 아무것도 완료되지 않았습니다.

그러나 조각 / 픽셀 셰이더는 이미지가 계산되고 정점 사이의 픽셀이 채워지거나 "색이 지정"되는 래스터 화 단계의 일부입니다.

여기에서 그래픽 파이프 라인에 대해 읽으면 모든 것이 스스로 드러날 것입니다 : http://en.wikipedia.org/wiki/Graphics_pipeline


정점 셰이더는 모든 정점에서 수행되는 반면 프래그먼트 셰이더는 모든 픽셀에서 수행됩니다. 프래그먼트 셰이더는 버텍스 셰이더 이후에 적용됩니다. 셰이더 GPU 파이프 라인 링크 텍스트 에 대한 추가 정보


Nvidia Cg 튜토리얼 :

정점 변환은 그래픽 하드웨어 파이프 라인의 첫 번째 처리 단계입니다. 정점 변환은 각 정점에서 일련의 수학 연산을 수행합니다. 이러한 작업에는 래스터 라이저에서 사용하기 위해 정점 위치를 화면 위치로 변환하고, 텍스처링을위한 텍스처 좌표를 생성하고, 정점을 조명하여 색상을 결정하는 작업이 포함됩니다.

래스터 화의 결과는 픽셀 위치 집합과 조각 집합입니다. 기본 요소가 갖는 정점 수와 래스터 화 될 때 생성되는 조각 수 사이에는 관계가 없습니다. 예를 들어 세 개의 정점으로 구성된 삼각형은 전체 화면을 차지할 수 있으므로 수백만 개의 조각을 생성 할 수 있습니다!

앞서 프래그먼트가 무엇인지 정확히 알지 못한다면 프래그먼트를 픽셀로 생각하라고 말씀 드렸습니다. 그러나이 시점에서 조각과 픽셀의 구분이 중요해집니다. 픽셀이라는 용어는 "그림 요소"의 약자입니다. 픽셀은 색상, 깊이 및 해당 위치와 관련된 기타 값과 같은 특정 위치에있는 프레임 버퍼의 내용을 나타냅니다. 조각은 잠재적으로 특정 픽셀을 업데이트하는 데 필요한 상태입니다.

"조각"이라는 용어는 래스터 화가 삼각형과 같은 각 기하학적 기본 요소를 기본 요소가 포함하는 각 픽셀에 대해 픽셀 크기의 조각으로 나누기 때문에 사용됩니다. 조각에는 연관된 픽셀 위치, 깊이 값 및 색상, 보조 (반사) 색상 및 하나 이상의 텍스처 좌표 세트와 같은 보간 된 매개 변수 세트가 있습니다. 이러한 다양한 보간 매개 변수는 조각을 생성하는 데 사용되는 특정 기하학적 원형을 구성하는 변환 된 정점에서 파생됩니다. 조각을 "잠재적 픽셀"이라고 생각할 수 있습니다. 프래그먼트가 다양한 래스터 화 테스트를 통과하면 (짧게 설명하는 래스터 작업 단계에서) 프래그먼트는 프레임 버퍼의 픽셀을 업데이트합니다.


정점 셰이더와 조각 셰이더는 모두 고정 파이프 라인 렌더링을 사용하지 않는 3D 구현의 기능입니다. 모든 3D 렌더링에서 정점 셰이더는 조각 / 픽셀 셰이더보다 먼저 적용됩니다.

정점 셰이더는 각 정점에서 작동합니다. 고정 된 폴리곤 메시가 있고 셰이더에서 변형하려면 버텍스 셰이더에서 구현해야합니다. 즉, 정점 모양의 물리적 변경은 정점 셰이더에서 수행 할 수 있습니다.

프래그먼트 셰이더는 버텍스 셰이더의 출력을 가져 와서 색상, 픽셀의 깊이 값 등을 연결합니다. 이러한 작업 후에 프래그먼트는 화면에 표시하기 위해 프레임 버퍼로 전송됩니다.

조명 계산과 같은 일부 작업은 프래그먼트 셰이더뿐만 아니라 버텍스 셰이더에서도 수행 할 수 있습니다. 그러나 프래그먼트 셰이더는 버텍스 셰이더보다 더 나은 결과를 제공합니다.


3D 하드웨어를 통해 이미지를 렌더링 할 때 일반적으로 정점으로 정의되는 메시 (점, 다각형, 선)가 있습니다. 일반적으로 모델의 모션이나 바다의 파도에 대해 정점을 개별적으로 조작하려면 정점 셰이더를 사용할 수 있습니다. 이러한 정점은 조각 셰이더를 사용하는 정점 색상을 조작하기 위해 텍스처에 의해 할당 된 정적 색상 또는 색상을 가질 수 있습니다. 파이프 라인의 끝에서 뷰가 화면으로 이동할 때 조각 셰이더를 사용할 수도 있습니다.

참고 URL : https://stackoverflow.com/questions/4421261/vertex-shader-vs-fragment-shader

반응형