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 4: 환경광 추가하기
·
OpenGL/CS-248 셰이더 프로그래밍
Part 4 : 환경광 추가하기 지금까지 만든 셰이더는 간단한 point and directional light source에 대해서만 적용했습니다. (shader.frag 에서는 light source들에 대해서 loop를 돌며 값은 누적하는 방식으로 계산되어 있다는 것에 주목하세요) 이번 part에서는 좀 더 복잡한 광원을 구현해봅시다. 이번 광원은 "image based environment light (이미지 기반 환경광)" 라고 불리는데, 씬에서 무한히 먼 광원으로부터 오는 것을 표현하며 모든 방향에서 빛이 들어옵니다. 씬이 무한한 크기의 구로 둘러싸여있다고 생각하면 될 것 같습니다. 기반 이미지 텍스쳐의 (x, y) 값은 앞서 말씀드린 무한한 구의 좌표값으로 변환됩니다. 결과 이미지 이번 pa..
셰이더 프로그래밍- Part 3: 노말 매핑 (Normal mapping)
·
OpenGL/CS-248 셰이더 프로그래밍
Part 3: Normal mappingPart2에서 만든 이미지입니다.바닥평면과 구 물체에는 표면에 텍스쳐 맵을 추가해 디테일을 넣었음에도 굉장히 flat 해보입니다. Part3에서는 normal mapping을 구현하여 표면이 디테일을 가진 것 처럼 보이도록 할 것입니다.normal mapping의 아이디어는 'normal map'이라는 텍스쳐맵에 벡터 값을 저장해놓고 해당 벡터값을 표면의 normal vector로 사용하는 것입니다. Normal Vector를 표면의 점마다 정의한다면, 빛의 반사를 풍부하게 표면해 표면 질감이 더 도드라집니다.우측 그림이 normal map의 예시입니다.normal map의 RGB 값은 각각 (x,y,z) 벡터를 나타내고 이 벡터는 물체의 표면에서의 normal v..
셰이더 프로그래밍 - 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 프로그래밍 경험을 쌓..