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..
셰이더 프로그래밍 - Part 5-1 : Spotlights 추가하기
·
OpenGL/CS-248 셰이더 프로그래밍
Part 5에서는 spotlight 이라는 고급 광원을 사용하고, 그림자 매핑(shadow mapping)을 사용하여 점 광원의 그림자를 부드럽게 만들어볼 것입니다. 이 고급 광원은 우리의 렌더링을 아주 실사같이 만들어줄 것입니다. 이번 과제를 마친다면, media/spheres/spheres_shadow.json 씬을 렌더링했을 때 다음 이미지같이 보일 것입니다.이 씬은 세 개의 spotlights로 이루어져있습니다.왼쪽 앞 방향으로부터 빨간 spotlight 빛이 들어오고, 앞 방향에서 하얀색 빛이, 그리고 우측 앞 방향으로부터 청록색 빛이 들어옵니다.아래 이미지는 위에서 씬을 내려다봤을 때 모습입니다. 수정해야 할 부분이 과제에서 처음으로 해야할 부분은 spotlights 렌더링을 위해 fragme..
셰이더 프로그래밍 - Part 2: 퐁 반사모델 구현하기
·
OpenGL/CS-248 셰이더 프로그래밍
Part 2: 퐁 반사모델 구현하기 (Implementing Phong Reflectance) 이 과제의 후반부에서는 Material을 정의하는데에 있어서 두 가지 중요한 것을 구현할텐데요, 첫 번째로는 빛나는 표면을 렌더링하는 phone 반사 모델을 간단한 BRDF로 구현해볼 것입니다. 수정해야하는 파일은 src/shader/shader.frag 입니다. 현재 Scene은 바닥 평면과 두 개의 Sphere가 텍스쳐가 입혀진 상태인데, 렌더링 과정에서 lighting 구현이 없습니다. lighting 구현을 위해서는 src/shader/shader.frag 파일의 Phong_BRDF()을 구현하면 됩니다. ambient term은 광원 source들과 무관하다는 것에 주의하시고, 표면 반사 결과와 합쳐져..
셰이더 프로그래밍 - Part 1: Coordinate 변환 (Coordinate transform)
·
OpenGL/CS-248 셰이더 프로그래밍
안녕하세요. CS248 강의의 과제3 Real-Time Shader Programming을 풀어봅시다. 깃헙링크 먼저 첨부합니다. https://github.com/stanford-cs248/shading Summary 이번 과제에서는 간단한 real-time 렌더러와 3D 씬을 제공합니다. Starter 코드에는 아주 간단한 material과 lighting 모델이 구현되어있어서 결과 이미지가 썩 좋지 못합니다. 이번 과제는 GLSL라는 OpenGL Shading Language과 C++로 작성된 OpenGL Client를 사용하여 lighting 과 material shading 효과를 구현하여 결과 이미지 렌더링 퀄리티를 높여볼 것입니다. 이번 과제의 목표는 최신 shading 프로그래밍 경험을 쌓..