[Unreal Engine 5] Virtual Shadow Map - 렌더패스 분석
·
언리얼 엔진
이전 포스트https://jooh3444.tistory.com/36 [Unreal Engine 5] Virtual Shadow Map기본 아이디어Shadow Map 해상도가 낮으면 그림자에 aliasing이 발생한다.이를 해결하기 위해 다양한 시도들이 있다.Cascaded Shadow Map : 거리에 따른 Shadow map 분리Variance Shadow Map : 텍스쳐 샘플링 때, 분jooh3444.tistory.com 먼저, 이 글에서는 분석 단순화를 위해 directional light, clipmap 동작에 대해서만 분석하는 것을 목표로 한다.Directional Light는 Mipmap을 사용하지 않기 때문에 이 글에서 mipmap관련 처리 패스 InitPageRectBounds, Gen..
Multi-Scattering BRDF
·
Computer Graphics
Image Based Lighting - Single Scatter model이전 포스트 (https://jooh3444.tistory.com/33) 에 구현된 라이팅 모델 결과물입니다.SingleScattering 이라고 부르는 이유는 글 뒷부분에서 언급됩니다. Energy Loss on rough surfaceRoughness가 낮을수록 어두운 느낌이 드는데요, White furnace test를 해서 에너지가 잘 보존되고 있는지 확인해볼 수 있습니다. White Furnace Test라이팅 모델이 잘 구현된 경우, 모든 방향에서 완벽한 흰색 light가 들어온다고 가정하면 물체는 완벽한 흰색 (1,1,1)이 되어서 배경과 구분할 수 없게 됩니다.그래서 내 라이팅 모델이 제대로 구현되었는지 이 테스..
Image Based Lighting
·
Computer Graphics
Reflectance functionLo : Out Radiance - 점 p에서 Wo(카메라 방향) 으로 반사하는 RadianceLi : Incident Radiance - 점 p에서 Wi (광원 입사 방향) 으로 입사하는 Radiancefr : BRDF 함수. 점 p에서 Wi 방향으로 입사한 빛이 Wo 방향으로 반사하는 비율.Sn dot wi : 램버트 코사인 법칙. 광량은 입사각에 따라 감쇠. 중요한 것은 BRDF 함수이것에 따라서 렌더링 결과물이 달라진다.Physically Based Rendering에서는 미세면이론, 에너지 보존을 고려하여 모델링한다.PBR 계산을 위한 재질 파라미터albedo, metalic, roughness, normal, fresnel (F0)F0 은 normal 방향의..
Two Pass Occlusion Culling
·
Computer Graphics
HZB Occlusion CullingHZB란? depth buffer의 Mipmap 이다.원본 depth buffer에서 downsampling을 해서 만들되, 상위 4 texel의 min / max 값을 가지고 있다.reversed-Z 여부에 따라 min/max 값 결정한다. (필요에 따라 둘 다 저장) HZB 사용처Occlusion cullingScreen Space Reflections ( screen space ray casting 가속을 위해)Volumetric Fog보통 HZB에 대해 뎁스테스팅은 Compute Shader에서 AABB 로만 보수적으로 진행한다.결과물을 indirct draw call arguments 버퍼를 만들어 저장해두고, 그 후, 결과물을 Indirect Draw Ca..
Part 5-2 : 쉐도우 매핑 (Shadow Mapping) - 2
·
OpenGL/CS-248 셰이더 프로그래밍
셰이더 프로그래밍 Part 5-2 : 쉐도우 매핑 (Shadow Mapping) - 2 Part 5-2 두번째 파트에서 구현할 것마지막 스텝은 shadow map generation pass에서 생성된 array texture를 fragment shader의 input으로 넘겨주는 것입니다. 이는 최종 렌더 패스에서 씬을 렌더링하는데 사용될 것입니다.(이 바인딩 과정은 Mesh::internalDraw에서 구현하며, 우리가 이전 Part의 노말맵, 환경맵을 셰이더로 넘겨주는 것과 같은 동작입니다.)GLSL fragment shader에서 Array Texture를 샘플링하는 것은 문법이 조금 다릅니다. Scene::visualizeShadowMap 과 src/shader/shadow_viz.frag 를 ..
Part 5-2 : 쉐도우 매핑 (Shadow Mapping) - 1
·
OpenGL/CS-248 셰이더 프로그래밍
셰이더 프로그래밍 - Part 5-2 : 쉐도우 매핑 (Shadow Mapping) 이번 Part 5-2 에서는 spotlights가 물체에 그림자를 드리우도록 할 것 입니다. 쉐도우 매핑 알고리즘은 rasterization 기반의 렌더링 파이프라인에서 그림자를 근사하는 방법입니다. 쉐도우 매핑은 두 가지 스텝이 필요합니다. 각 광원마다 그 위치에 카메라가 있다고 가정하고, Scene 지오메트리를 렌더링합니다. 이 지점에서 렌더링 결과는 depth buffer 에 저장되며, 이 값은 광원에서 가장 가까운 지점을 의미합니다. depth buffer는 단일 채널의 텍스쳐 맵으로 만들어져서 fragment shader로 넘겨집니다. 이 텍스쳐 맵을 쉐도우맵 텍스쳐라고 합니다. 실제 렌더링 과정에서 illumi..