130 likes | 374 Views
Scissor Rect. Mgun . PipeLine. . 정점변환 -> 그래픽 라이브러리에 의해 객체 공간의 정점 위치들이 결과적으로 기본도형 레스터화를 위해 윈도우 공간으로 변환 . Rasterization & Fragment. . 레스터화 -> 모형의 정점들이 윈도우 공간으로 절단 , 변환되고 나면 GPU 는 각 그래픽 기본도형들이 뷰포트의 어떤 픽셀들을 덮을 것인지를 결정 .. 기본 도형에 속한 영역을 한줄씩 픽셀들로 채우는 과정 . . 단편 (Fragment)
E N D
Scissor Rect Mgun.
PipeLine • . 정점변환 • -> 그래픽 라이브러리에 의해 객체 공간의 • 정점 위치들이 결과적으로 기본도형 레스터화를 • 위해 윈도우 공간으로 변환.
Rasterization & Fragment • . 레스터화 • -> 모형의 정점들이 윈도우 공간으로 • 절단, 변환되고 나면 GPU는 각 그래픽 • 기본도형들이 뷰포트의 어떤 픽셀들을 • 덮을 것인지를 결정.. • 기본 도형에 속한 영역을 한줄씩 • 픽셀들로 채우는 과정. . 단편(Fragment) -> 깊이, 보간된 정점 색, 보간된텍스쳐 좌표, 픽셀 자체의 위치의 묶음.
Rasterization & Fragment . 단편(Fragment) 연산 픽셀 소유권 판정. 가위판정(scissor rect) 알파 판정 스텐실 판정 깊이 판정
Scissor Optimizations . Optimizations -> Most important fill-rate optimization for stencil shadows ->Hardware does not generate fragments outside the scissor rectangle — very fast ->Scissor rectangle can be applied on a per-light basis or even a per-geometry basis ->Requires that lights have a finite volume of influence
Light Scissor No Light Scissor Shadow volumes extend to edges of viewport Light Scissor Shadow volume fill reduced significantly
Scissor Test 그리기 범위를 뷰포트 일부로 제한 : 마스크
-> 감쇠되는 광원사용시 광원의 영향이 미치는 곳을 반지름 r의 구 형태로 한정하고 그 구를 벗어나는 곳에 대해서는 조명을 가하지 않는다. 이는 시야 절두체의 바깥에 있는 부분은 렌더링에서 일찍 제외할 수 있다는 장점을 가진다.
Light Scissor . Light Scissor -> Project light volume onto the image plane – 조명구가 시야에 보이는 경우, 뷰포트에서 그 광원이 영향을 미치는 영역이 뷰포트 전체가 아닐 수도 있다. 조명구를 이미지 평면에 투영해 그 영역에서만 랜더링. Light View Frustum Image Plane Camera http://www.gamasutra.com/view/feature/2942/the_mechanics_of_robust_stencil_.php?page=2
Calculation • Scissor Rect Calculation • Y축에 평행한 접평면들의 단위 길이 법선벡터N의 y좌표는 0. • 이 접평면이 원점을 지나므로 원점과의 거리(d)는 0. • T = <Nx, 0, Nz, 0> • T ·L = r • Nx2 +Nz2 = 1 • T ·L => NxLx + NzLz = r • NzLz = r – NxLx • 양변을 제곱하고 Nz2 = 1 - Nx2 으로 치환. • (1 - Nx2) Lz2 = r2 – 2rNxLx + Nx2Lx2 • 이차 방정식 형태로 묶어주면 아래와 같다. • (Lx2+Lz2)Nx2 + (-2rLx)Nx + r2 – Lz2 = 0
Calculation • Scissor Rect Calculation (Lx2+Lz2)Nx2 + (-2rLx)Nx + r2 – Lz2 = 0 이 식에 대한 판별식 D를 구하면 아래와 같다. D = 4[r2Lx2 - (Lx2 + Lz2)(r2 – Lz2)] Lx + Lz <= r 이면 (즉, 구를 xz평면에 평행하게 투영해서 생긴 원 안에 원점이 있으면) 정확히 D<=0이며 이는 광원의 경계구가 뷰포트 전체를 채우는 것을 의미한다.
Calculation • Scissor Rect Calculation X축 (Y축도 계산방식이 동일) float fD = (r2 * L2.x - (L2.x + L2.z) * (r2 - L2.z)); if(fD <= 0.0f) return false; float fSqrtD = sqrtf(fD); T0.x = (fRadius * vL.x + fSqrtD) / (L2.x +L2.z); T0.z = (fRadius - T0.x * vL.x) / vL.z; T1.x = (fRadius * vL.x - fSqrtD) / (L2.x +L2.z); T1.z = (fRadius - T1.x * vL.x) / vL.z; vP[0] = vL - fRadius * T0; vP[1] = vL - fRadius * T1;
Calculation 사각형 영역 예외처리 - 뷰포트 크기 고려, 사각형 영역 크기 고려. • Scissor Rect Calculation