상세 컨텐츠

본문 제목

Pixel Processing - Fragment Shading

Computer Graphics/Graphics Pipeline

by Banjosh 2024. 11. 30. 14:42

본문

Pixel Processing의 첫 번째 단계: Fragment Shading

이번에는 Pixel Processing 단계의 첫 번째 단계인 Fragment Shading에 대해 알아보자.
Fragment ShadingRasterization 단계에서 생성된 프래그먼트들의 최종 색상 및 속성을 계산하는 단계이다.
이 단계에서는 조명, 텍스처 매핑 등 다양한 계산이 이루어진다.


Fragment Shading의 역할

Fragment Shading은 각 프래그먼트의 최종 속성을 결정하는 과정으로, 우리가 보통 작성하는 Fragment Shader를 통해 구현된다.
조명, 텍스처, 반사, 굴절 효과 등 다양한 계산을 수행하며, 이를 통해 다양한 그래픽 효과를 만들어낼 수 있다.
아래는 Fragment Shader에서 구현할 수 있는 주요 작업들이다.


Fragment Shader에서 수행할 수 있는 작업

1. 조명 모델

프래그먼트의 기본 색상을 빛의 영향을 고려해 계산한다. 잘 알려진 조명 모델로는 Phong, Blinn-Phong, PBR이 있다.

  • Phong 조명 모델
    • 간단하고 직관적인 모델로, 다음 세 가지 요소를 사용한다:
      • Ambient Lighting: 주변광.
      • Diffuse Reflection: 확산 반사.
      • Specular Reflection: 반사광.
    • 계산이 간단하면서도 꽤 자연스러운 결과를 제공한다.
  • Blinn-Phong 모델
    • Phong 모델의 단점을 개선한 모델.
    • 반사광 계산에서 빛 벡터와 뷰 벡터 대신 법선 벡터와 하프 벡터(Half Vector)를 사용하여 더 자연스러운 반사광을 표현한다.
  • PBR(Physically-Based Rendering)
    • 물리 기반 조명 계산을 적용하여 가장 사실적인 표현을 구현한다.
    • 주요 개념
      • 에너지 보존 법칙: 표면에서 반사되는 빛의 양이 들어오는 빛을 초과할 수 없다.
      • Material 특성: 금속성(Metallic)과 거칠기(Roughness)을 고려.
      • Fresnel 효과: 빛의 입사각에 따라 반사율이 달라지는 현상.

2. 텍스처 매핑

Rasterization 단계에서 보간된 텍스처 좌표를 사용하여 텍스처 데이터에서 색상 값을 샘플링하고, 이를 적용한다.


3. 환경 매핑

물체 표면에 주변 환경을 반사하는 효과를 구현한다.

  • Cube Map 텍스처를 사용해 환경 정보를 저장.
  • 표면에서 반사된 벡터를 이용해 적절한 Cube Map 색상을 샘플링하여 반사 효과를 구현.

4. 노말 매핑

Normal MapTBN 좌표계(Tangent-Binormal-Normal)를 사용하여 프래그먼트별로 고유한 법선 벡터를 계산한다.
이를 통해 조명 효과를 더 정교하게 표현할 수 있다.


5. 굴절 효과

환경 매핑과 유사하지만, 반사 벡터 대신 굴절 벡터를 사용해 빛의 굴절 효과를 표현한다.


6. 알파 테스트

특정 조건을 만족하지 못하는 프래그먼트를 삭제하는 기능.

  • 구현 방법
    if (alpha < threshold) discard;
     
  • 알파 블렌딩은 Merging 단계에서 처리되지만, 알파 테스트는 Fragment Shader에서 구현해야 한다.

7. 섀도우 매핑

Shadow Map을 생성하여 두 번째 렌더 패스에서 그림자를 그리는데 사용할 수 있다.


8. HDR (High Dynamic Range)

  • 빛의 색상을 더 넓은 범위의 부동 소수점 값으로 표현하여 밝고 어두운 부분의 디테일을 살린다.
  • 톤 매핑을 적용해 최종 색상을 [0.0,1.0] 범위로 변환하여 사용한다.

9. 포스트 프로세싱

렌더링된 이미지에 특수한 효과를 추가한다. 보통 두 번째 렌더링 패스에서 수행된다.

  • Bloom
    • 밝은 부분의 빛 번짐 효과를 추가해 더 사실적인 장면을 표현.
  • Motion Blur
    • 빠르게 움직이는 물체의 흐림 효과를 적용해 속도감을 표현.
  • 톤 매핑
    • HDR 데이터를 LDR로 변환하여 디스플레이에 출력.
  • 감마 보정
    • 이미지의 밝기를 사람의 눈에 더 자연스럽게 보이도록 조정.

10. 애니메이션 효과

시간 값을 기반으로 물결 효과, 텍스처 이동 등의 애니메이션을 구현할 수 있다.


Fragment Shading의 출력

  • 최종 계산된 색상 값을 fragColor에 저장한다.
  • 이 값은 Framebuffer에 기록되어 화면 출력에 사용되거나, 다음 렌더링 패스의 입력으로 활용된다.

결론

Fragment Shading은 렌더링 파이프라인에서 프래그먼트의 최종 색상과 속성을 계산하는 핵심 단계이다.
이 단계에서 조명, 텍스처, 반사, 굴절 등 다양한 계산을 수행하며, 이를 통해 최종적으로 렌더링 결과의 퀄리티를 결정하게 된다.
Pixel Processing의 다음 단계에서는 이 데이터를 활용해 색상 값을 합성하고 최종 이미지를 생성한다.

'Computer Graphics > Graphics Pipeline' 카테고리의 다른 글

Pixel Processing - Merging  (0) 2024.11.30
Rasterization - Triangle Traversal  (0) 2024.11.29
Rasterization - Triangle Setup  (1) 2024.11.29
Geometry Processing - Screen Mapping  (0) 2024.11.29
Geometry Processing - Clipping  (0) 2024.11.29

관련글 더보기