안녕하세요.
정글러 입니다.
오늘은 화면 구현 방식의 차이가 있는 Rasterization과 Ray tracing의 차이를 알아보겠습니다.
먼저 Ray tracing은 이 게시물에서 알아본 바가 있는데요.
[Graphics] Ray Tracing 원리 이해하기
안녕하세요. 정글러 입니다. Ray Tracing은 광선이 카메라(또는 관찰자)로부터 출발해 장면 속의 물체와 상호작용하며빛과 그림자, 반사, 굴절 등을 계산하여 이미지를 생성하는 렌더링 기법입니
storytech.tistory.com
Ray tracing은 모든 픽셀마다 물체와 부딪히는 ray를 쏘기 때문에 렌더링 시간이 오래 걸립니다.
각 픽셀에서 빛의 경로를 역추적하는 방식으로 작동하기 때문입니다. (카메라가 촬영하는 방식)
이는 계산량이 많지만, 매우 사실적인 그래픽을 보여줍니다.
https://www.unrealengine.com/ko/explainers/ray-tracing/what-is-real-time-ray-tracing
언리얼에서도 ray tracing을 사용할 수 있습니다.
다만, 실시간 렌더링에 어려움이 있어 언리얼에서는 루멘이나 패스트레이싱을 사용하기도 합니다.
[Unreal Engine] 라이트 세팅 알아보기
안녕하세요. 정글러입니다.오늘은 언리얼엔진의 라이트 세팅에 대해 알아보겠습니다 언리얼엔진에서 라이트 매스를 사용하면 사양에 비해 높은 퀄리티를 표시할 수 있습니다.하지만 빌드 시
storytech.tistory.com
Rasterization은 3D물체를 2D삼각형으로 변환시켜, 삼각형을 화면으로 투영시킵니다.
사실적인 빛 표현이 제한적이지만, 매우 빠르기 때문에 대부분의 게임에서 사용하고 있습니다.
원리대로 순서를 살펴보겠습니다.
ProjectWorldToRaster 함수
3D -> 2D로 변환
1. aspect ratio 보정
point.x / aspect // 가로 방향 보정
화면이 직사각형이어도 물체가 찌그러지지 않도록 보정
2. [-1,1] 범위의 NDC 좌표로 변환
- 1920x1080 화면이든 1280x720 화면이든 동일한 방식으로 처리 가능
3. 실제 픽셀 좌표로 변환
EdgeFunction 함수
점이 삼각형 내부인지 판단
/벡터의 외적을 사용해서 점이 선분의 어느 쪽에 있는지 계산
삼각형 그리기
DrawIndexedTriangle
1. 입력 데이터 준비
- indexBuffer에서 삼각형을 구성하는 3개의 정점 인덱스를 가져옵니다.
2. 정점변환
projectWorldToRaster 함수 사용
3. 바운딩박스 계산
const auto xMin = size_t(glm::clamp(glm::floor(std::min({v0.x, v1.x, v2.x})), 0.0f, float(width - 1)));
const auto yMin = size_t(glm::clamp(glm::floor(std::min({v0.y, v1.y, v2.y})), 0.0f, float(height - 1)));
4. 픽셀 검사
alpha0, 1, 2
Edgefunction 사용
5. 색상과 깊이 결정
const float area = alpha0 + alpha1 + alpha2;
const vec3 color = (alpha0 * c0 + alpha1 * c1 + alpha2 * c2) / area;
const float depth = (alpha0 * this->vertexBuffer[i0].z + ...) / area;
Render
버퍼로 하나씩 그리기
vertexBuffer = { (0,0), (1,0), (1,1), ... // 원의 각 점 위치 }
indexBuffer = { 0,1,2, // 첫 번째 삼각형 3,4,5, // 두 번째 삼각형 ... // 이런 식으로 점들을 연결 }
colorBuffer = { (1,0,0), // 첫 번째 점의 색상(빨강) (1,0,0), // 두 번째 점의 색상 ... }
감사합니다!
'XR > Graphics' 카테고리의 다른 글
[Graphics] Compute Shader 알아보기 (0) | 2025.04.03 |
---|---|
[Graphics] Barycentric Coordinate System 알아보기 (0) | 2025.03.10 |
[Graphics] Phong Reflection Model(Ambient / Diffuse / Specular) 이해하기 (0) | 2025.02.04 |
[Graphics] Ray Tracing 원리 이해하기 (0) | 2025.01.20 |
[Graphics] vcpkg_imgui 설치하기 (1) | 2025.01.15 |