셰이더

Shader
셰이더는 3D 모델을 렌더링할 때 조명이 켜지고 음영 처리된 영역을 생성하는 데 가장 일반적으로 사용됩니다. 셰이딩(오른쪽)은 Guraud 셰이딩의 개량형으로 기본적인 플랫 셰이더(왼쪽) 이후 개발된 최초의 컴퓨터 쉐이딩 모델 중 하나이며 렌더링 시 곡면의 외관을 크게 개선했습니다.
셰이더의 또 다른 용도는 2D 이미지(: 웹 카메라의 사진)에서도 특수 효과를 볼 수 있습니다.변경되지 않은, 음영 처리되지 않은 이미지는 왼쪽에 있으며 같은 이미지는 오른쪽에 셰이더가 적용됩니다.이 셰이더는 이미지의 모든 밝은 영역을 흰색으로 바꾸고 어두운 영역을 밝은 색상의 텍스처로 바꿉니다.

컴퓨터 그래픽스에서 셰이더3D 장면을 렌더링하는 동안 적절한 수준밝기, 어두움 색상을 계산하는 컴퓨터 프로그램입니다. 이 과정은 쉐이딩이라고 합니다.셰이더는 컴퓨터 그래픽스 특수효과와 비디오 후처리, 그래픽스 프로세싱 유닛의 범용 컴퓨팅 등 다양한 특수 기능을 수행하도록 진화해 왔습니다.

기존 셰이더는 그래픽 하드웨어에 대한 렌더링 효과를 매우 유연하게 계산합니다.대부분의 셰이더는 엄격한 [1]요건은 아니지만 GPU(그래픽 처리 장치)으로 코딩되어 있습니다.쉐이딩 언어는 GPU의 렌더링 파이프라인을 프로그래밍하는 데 사용됩니다.이것은 일반적인 지오메트리 변환 및 픽셀 쉐이딩 기능만 허용하던 과거의 고정 기능 파이프라인을 대부분 대체했습니다.쉐이더를 사용하면 맞춤형 효과를 사용할 수 있습니다.최종 렌더링 이미지를 구성하는 데 사용되는 모든 픽셀, 정점 및/또는 텍스처의 위치 색상(색조, 채도, 밝기 및 대비)은 셰이더에 정의된 알고리즘을 사용하여 변경할 수 있으며 셰이더를 [citation needed]호출하는 컴퓨터 프로그램에 의해 도입된 외부 변수 또는 텍스처에 의해 수정될 수 있습니다.

셰이더는 다양한 효과를 내기 위해 영화 후처리, 컴퓨터 생성 이미지 및 비디오 게임에 널리 사용됩니다.단순한 조명 모델 이외에 쉐이더의 보다 복잡한 용도에는, 이미지의 색조, 채도(HSL/HSV) 또는 콘트라스트의 변경, 흐림, 라이트 블룸, 볼륨 라이팅, 노멀 맵핑(깊이 효과의 경우), 보크, 셰이딩, 포스터라이제이션, 범프 맵핑, 왜곡, 채도(일명 「블루스크린」)가 있습니다.ets), 가장자리움직임 감지, 데모센에서 [clarification needed]볼 수 있는 것과 같은 사이키델릭 효과.

역사

이러한 "섀도"라는 용어의 사용은 [2]1988년 5월에 처음 출판된 RenderMan 인터페이스 사양 버전 3.0과 함께 픽사에 의해 일반에 소개되었습니다.

그래픽 처리 장치가 진화함에 따라 OpenGL과 Direct3D같은 주요 그래픽 소프트웨어 라이브러리가 셰이더를 지원하기 시작했습니다.최초의 셰이더 대응 GPU는 픽셀 쉐이딩만 지원했지만 개발자가 셰이더의 힘을 깨닫자 버텍스 셰이더는 빠르게 도입되었습니다.프로그램 가능한 픽셀 셰이더를 갖춘 최초의 비디오 카드는 [3]2001년에 출시된 Nvidia GeForce 3(NV20)입니다.지오메트리 셰이더는 Direct3D 10 및 OpenGL 3.2에서 도입되었습니다.결국 그래픽 하드웨어는 통합 셰이더 모델로 발전했습니다.

설계.

셰이더는 정점 또는 픽셀의 특성을 설명하는 단순한 프로그램입니다.정점 셰이더는 정점의 속성(위치, 텍스처 좌표, 색상 등)을 나타내며, 픽셀 셰이더는 픽셀의 특성(색상, z 깊이알파 값)을 나타냅니다.정점 셰이더는 원시(테셀레이션 후)에서 각 정점에 대해 호출됩니다. 따라서 하나의 정점 입력, 하나의(업데이트된) 정점 출력입니다.그런 다음 각 정점은 픽셀 시리즈로 표면(메모리 블록)에 렌더링되어 최종적으로 화면에 전송됩니다.

셰이더는 일반적으로 FFP(고정 기능 파이프라인)라고 불리는 그래픽 하드웨어의 섹션을 대체합니다.이것은, 하드 코드 방식으로 조명과 텍스처 매핑을 실행하기 때문입니다.셰이더는 이 하드 코드화된 [4]접근법에 대한 프로그램 가능한 대안을 제공합니다.

기본 그래픽스 파이프라인은 다음과 같습니다.

  • CPU는 명령(컴파일된 음영 언어 프로그램)과 지오메트리 데이터를 그래픽 카드에 있는 그래픽 처리 장치로 보냅니다.
  • 정점 셰이더 내에서 지오메트리가 변환됩니다.
  • 지오메트리 셰이더가 그래픽 처리 장치에 있고 활성화된 경우 씬(scene)의 지오메트리를 일부 변경합니다.
  • 테셀레이션 셰이더가 그래픽 처리 장치에 있고 활성화된 경우 씬(scene)의 형상을 세분화할 수 있습니다.
  • 계산된 지오메트리는 삼각형으로 분할됩니다(삼각형으로 분할됩니다.
  • 삼각형은 4개의 조각으로 나뉩니다(1개의 조각 쿼드는 2 × 2의 조각 프리미티브입니다).
  • 프래그먼트 쿼드는 프래그먼트 셰이더에 따라 수정된다.
  • 깊이 테스트가 실행됩니다.통과한 fragment는 화면에 기록되고 프레임버퍼에 섞일 수 있습니다.

그래픽 파이프라인은 이러한 단계를 사용하여 3차원(또는 2차원) 데이터를 표시에 유용한 2차원 데이터로 변환합니다.일반적으로 이것은 큰 픽셀 매트릭스 또는 "프레임 버퍼"입니다.

종류들

일반적으로 사용되는 셰이더에는 세 가지 유형(픽셀, 정점 및 지오메트리 셰이더)이 있으며 최근에 추가된 몇 가지 유형이 있습니다.오래된 그래픽 카드는 셰이더 유형별로 별도의 처리 장치를 사용하는 반면, 새로운 카드는 모든 유형의 셰이더를 실행할 수 있는 통합 셰이더를 특징으로 합니다.이것에 의해, 그래픽 카드의 처리 능력을 보다 효율적으로 사용할 수 있습니다.

2D 셰이더

2D 셰이더는 컴퓨터 그래픽 분야에서 텍스처라고도 불리는 디지털 이미지에 작용합니다.픽셀의 속성을 수정합니다. 2D 셰이더는 3D 지오메트리를 렌더링하는 데 참여할 수 있습니다.현재 2D 셰이더의 유일한 유형은 픽셀 셰이더입니다.

픽셀 셰이더

픽셀 셰이더(fragment shader, 계산 색상 및 각 "fragment"의 기타 속성이라고도 )는 최대 1개의 출력 픽셀에 영향을 주는 렌더링 작업 단위입니다.가장 단순한 종류의 픽셀 셰이더는 하나의 화면 픽셀을 컬러 값으로 출력합니다.또, 복수의 입력/출력을 가지는 보다 복잡한 쉐이더도 가능합니다.[5]픽셀 셰이더는 단순히 항상 같은 색상을 출력하는 부터 조명값 적용, 범프 매핑, 그림자, 스펙트럴 하이라이트, 반투명 및 기타 현상까지 다양합니다.여러 렌더 대상이 활성화되어 있는 경우 조각의 깊이를 변경하거나(Z 버퍼링의 경우), 둘 이상의 색상을 출력할 수 있습니다.3D 그래픽스에서는 픽셀 셰이더만으로는 장면의 형상(즉, 정점 데이터)을 인식하지 않고 단일 조각에서만 작동하기 때문에 어떤 종류의 복잡한 효과를 낼 수 없습니다.그러나 픽셀 셰이더는 화면 좌표가 그려지는 것을 알고 있기 때문에 전체 화면의 내용이 텍스처로서 셰이더에 전달되면 화면과 인근 픽셀을 샘플링할 수 있습니다.이 기술은 흐림이나 카툰/ 셰이더의 에지 검출/강화 등 다양한 2차원 후처리 효과를 가능하게 합니다.픽셀 셰이더는 파이프라인의 모든 2차원 이미지(스프리트 또는 텍스처)에 중간 단계에서 적용할 수도 있지만 정점 셰이더는 항상 3D 장면이 필요합니다.예를 들어, 픽셀 셰이더는 비디오 스트림이 래스터라이즈된 후 비디오 스트림의 포스트 프로세서 또는 필터로 작동할 수 있는 유일한 셰이더입니다.

3D 셰이더

3D 셰이더는 3D 모델 또는 기타 지오메트리에 작용하지만 모델 또는 메시를 그리는 데 사용되는 색상과 텍스처에도 액세스할 수 있습니다.정점 셰이더는 3D 셰이더의 가장 오래된 유형으로, 일반적으로 버텍스 단위로 수정됩니다.새로운 지오메트리 셰이더는 셰이더 내에서 새로운 정점을 생성할 수 있습니다.테셀레이션 셰이더는 최신 3D 셰이더로, 런타임에 모델을 더 작은 삼각형의 그룹이나 다른 원시 요소로 세분화하거나 곡선과 범프 의 특성을 개선하는 등 정점 배치에 동시에 작용합니다.

정점 셰이더

버텍스 셰이더는 가장 확립된 일반적인 종류의 3D 셰이더로 그래픽 프로세서에 주어진 정점에 대해 한 번 실행됩니다.목적은 가상 공간에서 각 정점의 3D 위치를 화면에 나타나는 2D 좌표(Z 버퍼의 [6]깊이 값도 포함)로 변환하는 것입니다.정점 셰이더는 위치, 색상 및 텍스처 좌표와 같은 속성을 조작할 수 있지만 새 정점을 만들 수는 없습니다.정점 셰이더의 출력은 파이프라인의 다음 단계(존재하는 경우 지오메트리 셰이더 또는 래스터라이저)로 이동합니다.정점 셰이더를 사용하면 3D 모델이 포함된 모든 장면에서 위치, 이동, 조명 및 색상의 세부 사항을 강력하게 제어할 수 있습니다.

지오메트리 셰이더

지오메트리 셰이더는 Direct3D 10 및 OpenGL 3.2에서 도입되었습니다.이전에는 OpenGL 2.0+에서 [7]확장 기능을 사용하여 사용 가능했습니다.이 셰이더 유형은 그래픽 [8]파이프라인의 선두로 전송된 기본 요소에서 점, 선, 삼각형 등의 새로운 그래픽 기본 요소를 생성할 수 있습니다.

지오메트리 셰이더 프로그램은 정점 셰이더 후에 실행됩니다.이들은 인접 정보를 포함한 모든 프리미티브를 입력으로 받아들입니다.예를 들어, 삼각형에서 작업하는 경우 세 개의 정점이 지오메트리 셰이더의 입력이 됩니다.그러면 셰이더는 0개 이상의 프리미티브를 방출할 수 있으며, 이 프리미티브는 래스터라이즈되어 최종적으로 픽셀쉐이더로 전달됩니다.

지오메트리 셰이더의 일반적인 용도에는 점 스프라이트 생성, 지오메트리 테셀레이션, 섀도우 볼륨 돌출, 큐브 맵으로의 싱글 패스 렌더링 등이 있습니다.지오메트리 셰이더의 장점을 보여주는 전형적인 실제 예로는 자동 메시 복잡도 수정이 있습니다.곡선의 제어점을 나타내는 일련의 선 스트립이 지오메트리 셰이더에 전달되며, 필요한 복잡도에 따라 셰이더는 자동으로 추가 선을 생성하여 곡선의 보다 나은 근사치를 제공할 수 있습니다.

테셀레이션 셰이더

OpenGL 4.0 및 Direct3D 11에서는 테셀레이션 셰이더라는 새로운 셰이더 클래스가 추가되었습니다.기존 모델에 테셀레이션 컨트롤 셰이더(선체 셰이더라고도 함)와 테셀레이션 평가 셰이더(도메인 셰이더라고도 함)의 두 가지 새로운 셰이더 스테이지를 추가하여 수학 함수에 따라 런타임에 더 작은 메시로 단순하게 분할할 수 있습니다.이 함수는 다양한 변수, 특히 능동적인 세부 수준 스케일링을 가능하게 하는 뷰잉 카메라와의 거리 등과 관련될 수 있습니다.이것에 의해, 카메라 근처에 있는 물체는 섬세한 디테일을 가질 수 있는 반면, 멀리 있는 물체는 보다 거친 메쉬를 가질 수 있지만, 품질은 비슷해 보입니다.또한 메모리에서 매우 복잡한 메시를 다운샘플링하는 대신 셰이더 유닛 내에서 메시를 한 번 미세화할 수 있으므로 필요한 메시 대역폭을 대폭 줄일 수 있습니다.어떤 알고리즘은 임의의 메쉬를 업샘플링 할 수 있는 반면, 다른 알고리즘은 메쉬에서 가장 특징적인 정점과 에지를 지시하는 "힌트"를 허용합니다.

프리미티브 셰이더와 메쉬 셰이더

2017년경 AMD Vega 마이크로아키텍처[9][10]지오메트리를 처리하는 데 필요한 데이터에 액세스할 수 있는 컴퓨팅 셰이더와 다소 유사한 새로운 셰이더 단계인 원시 셰이더에 대한 지원을 추가했습니다.비슷하게, 엔비디아는 2018년 튜링 마이크로아키텍처와 함께 유사한 기능을 제공하고 AMD의 원시 셰이더도 컴퓨팅 [11][12]셰이더를 본떠 모델링한 메쉬와 태스크 셰이더를 선보였다.

2020년에 AMD와 Nvidia는 DirectX 12 [13]Ultimate를 통해 메시 셰이딩을 지원하는 RDNA 2암페어 마이크로 아키텍처를 출시했습니다.이러한 메쉬 셰이더에 의해 GPU는 보다 복잡한 알고리즘을 처리할 수 있게 되어 CPU에서 GPU로 더 많은 작업을 오프로드할 수 있게 됩니다.또한 알고리즘 집약 렌더링에서는 씬 내의 삼각형 프레임 레이트 또는 수를 [14]큰 폭으로 늘릴 수 있습니다.인텔은 2022년 1분기에 출하되는 인텔 Arc Alchemist GPU가 메시 [15]셰이더를 지원한다고 발표했습니다.

레이트레이스 셰이더

레이 트레이스 셰이더는 DirectX 레이트레이싱을 통해 Microsoft에 의해 지원되며, 벌칸, GLSLSPR-V[16]통해 Kronos Group에 의해 지원되며, Metal을 통해 Apple에 의해 지원됩니다.

셰이더 계산

컴퓨팅 셰이더는 그래픽스 어플리케이션에만 한정되지 않고 GPGPU에 동일한 실행 리소스를 사용합니다.이러한 리소스는 애니메이션이나 조명 알고리즘의 추가 단계(타일형 순방향 렌더링 등)에 사용할 수 있습니다.일부 렌더링 API를 사용하면 컴퓨팅 셰이더가 그래픽 파이프라인과 데이터 리소스를 쉽게 공유할 수 있습니다.

병렬 처리

셰이더는 예를 들어 화면 영역의 각 픽셀 또는 모델의 모든 정점에 대해 한 번에 큰 요소 세트에 변환을 적용하도록 작성됩니다.이는 병렬 처리에 매우 적합하며, 대부분의 최신 GPU에는 이를 용이하게 하기 위해 여러 개의 셰이더 파이프라인이 있어 계산 처리량이 크게 향상됩니다.

셰이더를 사용하는 프로그래밍 모델은 렌더링, 셰이더를 인수로 사용하고 중간 결과 간에 특정 데이터 흐름을 제공하기 위한 고차 함수와 유사하며, 데이터 병렬화(픽셀, 정점 등)와 파이프라인 병렬화(단계 간)를 모두 가능하게 합니다.(「 축소」도 참조).

프로그래밍

셰이더가 프로그래밍되는 언어는 대상 환경에 따라 달라집니다.OpenGL과 OpenGL ES 셰이딩 언어는 GLSL로도 알려진 OpenGL 셰이딩 언어이며, Direct3D 셰이딩 언어는 HLSL로도 알려진 High Level Shader Language입니다.Cg는 OpenGL과 Direct3D 셰이더를 모두 출력하는 서드파티 셰이딩 언어입니다. 단, Nvidia는 2012년에 개발되었습니다.애플은 메탈 프레임워크의 일부로서 메탈 쉐이딩 언어라고 불리는 그들만의 쉐이딩 언어를 출시했다.

GUI 셰이더 에디터

Unity, Unreal Engine 및 Godot같은 최신 비디오 게임 개발 플랫폼에는 실제 코드 없이도 셰이더를 만들 수 있는 노드 기반 편집기가 점점 더 많이 포함되어 있습니다. 대신 사용자는 다양한 텍스처, 맵 및 수학 함수를 다음과 같은 출력 값으로 유도할 수 있는 연결된 노드의 유도 그래프를 제공합니다.확산색, 경면색 및 강도, 거칠기/금속성, 높이, 정상 등입니다.자동 컴파일은 그래프를 실제 컴파일된 셰이더로 변환합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "LearnOpenGL - Shaders". learnopengl.com. Retrieved November 12, 2019.
  2. ^ "The RenderMan Interface Specification".
  3. ^ Lillypublished, Paul (May 19, 2009). "From Voodoo to GeForce: The Awesome History of 3D Graphics" – via www.pcgamer.com.
  4. ^ "ShaderWorks' update - DirectX Blog". August 13, 2003.
  5. ^ "GLSL Tutorial – Fragment Shader". June 9, 2011.
  6. ^ "GLSL Tutorial – Vertex Shader". June 9, 2011.
  7. ^ 지오메트리 셰이더 - OpenGL.2011년 12월 21일에 취득.
  8. ^ "Pipeline Stages (Direct3D 10) (Windows)". msdn.microsoft.com.
  9. ^ "Radeon RX Vega Revealed: AMD promises 4K gaming performance for $499 - Trusted Reviews". July 31, 2017.
  10. ^ "The curtain comes up on AMD's Vega architecture". January 5, 2017.
  11. ^ "NVIDIA Turing Architecture In-Depth". September 14, 2018.
  12. ^ "Introduction to Turing Mesh Shaders". September 17, 2018.
  13. ^ "Announcing DirectX 12 Ultimate". DirectX Developer Blog. March 19, 2020. Retrieved May 25, 2021.
  14. ^ "Realistic Lighting in Justice with Mesh Shading". NVIDIA Developer Blog. May 21, 2021. Retrieved May 25, 2021.
  15. ^ Smith, Ryan. "Intel Architecture Day 2021: A Sneak Peek At The Xe-HPG GPU Architecture". www.anandtech.com.
  16. ^ "Vulkan Ray Tracing Final Specification Release". Blog. Khronos Group. November 23, 2020. Retrieved 2021-02-22.

추가 정보

외부 링크