Computer Graphics 110

ShaderPixel - 2. 바닥 구성 (Normal map)

이번에는 Normal Map을 사용해 바닥 표면을 표현했다.알베도 텍스처와 Normal Map을 적용하여 표면의 질감과 조명이 자연스럽게 반응하도록 만들었다. Tangent-Bitangent-Normal (TBN) 행렬을 활용해 조명 계산을 위한 텍스처 공간(Tangent Space) 변환을 적용하여 표면의 기복에 따라 조명이 반사되도록 구현하였다.바닥 텍스처 및 모델 초기화 코드먼저 바닥에 사용할 알베도 텍스처와 Normal Map을 로드하고, 바닥의 크기와 회전 정보를 설정했다.// Normal Map 셰이더 프로그램 로드m_normalProgram = Program::Create("./shader/normal.vs", "./shader/normal.fs");// 바닥 알베도 텍스처와 Normal M..

ShaderPixel - 1. 배경 구성 (Skybox)

이번 작업에서는 HDR 파노라마 이미지를 큐브맵 텍스처로 변환해 스카이박스(Skybox)를 구성했다.캡처 초기화 코드HDR 이미지를 불러온 후, 큐브맵 텍스처로 변환하기 위해 큐브 프레임버퍼와 뷰 행렬을 설정했다.// HDR 이미지를 로드하여 Texture 객체로 생성m_hdrMap = Texture::CreateFromImage(Image::Load("./image/god_rays_sky_dome_8k.hdr").get());// 스피어리컬 맵에서 큐브맵으로 변환하는 셰이더 프로그램 로드m_sphericalMapProgram = Program::Create("./shader/spherical_map.vs", "./shader/spherical_map.fs");// 큐브맵 텍스처 생성 (2048x2048..

OpenGL 정리 - 30. 이미지 기반 조명 (Image-Based Lighting, IBL)

이미지 기반 조명(Image-Based Lighting, IBL)은 캡처된 환경 이미지를 활용해, 마치 물체가 실제 환경 속에 있는 것처럼 사실적인 조명 효과를 구현하는 기법이다. 일반적인 조명 모델이 특정 광원에서 나오는 빛만을 계산하는 것과 달리, IBL은 물체 주변의 모든 방향에서 빛이 들어오는 환경의 조명을 반영하여 복잡하고 섬세한 반사와 굴절 효과를 만들어낸다. 이로 인해 금속이나 유리 같은 재질을 더욱 사실적으로 표현할 수 있다.IBL의 기본 개념IBL의 핵심은 HDR 환경 맵을 사용해 장면의 전방위 조명을 표현하는 것이다. 이 환경 맵이 조명 역할을 하여 물체가 주변의 빛을 반사하거나 굴절하는 효과를 만들어낸다. 이러한 과정은 다음과 같이 이루어진다.HDR 환경 맵HDR 환경 맵에는 주변에서..

OpenGL 정리 - 29. 물리 기반 렌더링 (Physically Based Rendering, PBR)

물리 기반 렌더링 (Physically Based Rendering, PBR)PBR(Physically Based Rendering)은 물리적 원리에 기반하여 빛과 물체의 상호작용을 근사해, 현실적인 렌더링을 구현하는 기법이다. 기존의 조명 모델과 달리, PBR은 표면의 질감과 물질의 물리적 특성을 세밀하게 반영하여, 생생한 질감과 조명 효과를 가능하게 한다. PBR의 핵심 요소는 미세면 모델(Microfacet Model), 에너지 보존 법칙(Energy Conservation), 그리고 양방향 반사 분포 함수(BRDF)이다.PBR의 핵심 개념미세면 모델 (Microfacet Model)물체 표면은 확대해 보면 무수히 작은 거울면들로 이루어져 있다고 가정할 수 있다. 거친 표면에서는 빛이 여러 방향으로..

OpenGL 정리 - 28. Screen-Space Ambient Occlusion (SSAO)

3D 그래픽에서 앰비언트 라이트(Ambient Light)는 모든 빛이 오브젝트에 부딪히면서 만들어지는 간접 조명 효과를 모방한 것이다. 하지만 일정한 값을 가진 앰비언트 라이트는 비현실적이다. 앰비언트 오클루전(Ambient Occlusion)은 씬의 각 위치가 얼마나 주변에 의해 가려져 있는지 계산해 현실감을 더해주는 방식이다. 주위에 가려진 정도가 클수록 빛이 적게 닿아 어두워진다.SSAO의 개념과 도입 배경SSAO는 Screen-Space Ambient Occlusion의 약자로, 스크린 공간에서 주변의 깊이 정보를 사용해 빠르게 앰비언트 오클루전을 계산하는 방식이다. 기존의 방식은 각 지점에서 여러 방향으로 가상의 광선을 쏘아 차폐 정도를 측정했지만, 연산량이 너무 커서 실시간 렌더링에는 적합하..

OpenGL 정리 - 27. Deffered Shading

지연 셰이딩 (Deferred Shading)기존의 3D 그래픽 렌더링에서는 조명 소스와 오브젝트가 늘어날수록 연산량이 폭증하여 성능이 빠르게 저하된다. 특히 화면 밖에 있는 오브젝트나 다른 오브젝트 뒤에 가려진 오브젝트도 조명 계산에 포함되기 때문에, 연산 낭비가 심각하다. 지연 셰이딩은 이러한 문제를 해결하기 위해 조명 계산을 렌더링 후반부로 미뤄 불필요한 계산을 줄이는 방식으로, 복잡한 장면에서 렌더링 성능을 크게 개선할 수 있다.지연 셰이딩의 기본 원리지연 셰이딩에서는 모든 기하학적 데이터를 G-buffer라는 여러 텍스처로 구성된 버퍼에 저장하고, 이를 기반으로 나중에 조명 계산을 수행한다. 이 방식으로 조명 연산을 한 번에 처리할 수 있어 불필요한 계산을 최소화할 수 있다.기하 단계 (Geom..

OpenGL 정리 - 26. HDR, Bloom

1. HDR과 Bloom1.1 HDR이란?HDR(High Dynamic Range)은 더 넓은 밝기와 색상 범위를 표현해 현실감을 높이는 기술이다. 보통 그래픽에서는 색상값이 0.0에서 1.0 사이로 제한되는데, 이를 벗어나는 값들은 자동으로 잘려나가 밝은 장면에서도 빛의 강도를 제대로 표현하지 못한다. 이 제한을 넘어서려면 HDR을 사용해야 하고, 이를 통해 더 현실적인 조명을 표현할 수 있다.1.2 빛의 제한을 넘는 방법단순히 조명의 강도를 낮춰서 1.0을 넘지 않도록 설정하는 방식도 있지만, 이렇게 하면 원래 빛의 느낌이 사라지고, 장면이 밋밋해진다. 현실적인 표현을 위해서는 빛의 강도를 일단 1.0 이상으로 허용한 다음 나중에 이를 0.0 ~ 1.0 사이로 다시 조정하는 게 낫다. 이렇게 하면 강..

OpenGL 정리 - 25. Normal Mapping

1. Normal Mapping1.1 Normal Mapping이란?Normal Mapping은 3D 그래픽에서 물체의 표면을 고해상도로 보이게 하는 주요 기술이다. 물체의 표면을 세밀하게 표현하려면 버텍스(Vertex) 수를 크게 늘려야 하는데, 이는 연산 부하를 높이고 성능을 저하시킨다. Normal Mapping을 사용하면 버텍스 수를 최소화하면서도 표면에 입체감을 더할 수 있어, 마치 물체에 고해상도 텍스처가 입혀진 것 같은 효과를 만들어낸다. 조명을 계산할 때 이 텍스처 정보로 각 픽셀의 법선 벡터(Normal)를 조정해 표면의 굴곡이 있는 것처럼 보이도록 만드는 것이다.1.2 Normal Mapping의 기본 원리Normal Mapping의 핵심은 법선 맵(Normal Map)이라는 특별한 텍..

OpenGL 정리 - 24. Shadow Mapping

1. Shadow Mapping1.1 Shadow Mapping이란?Shadow Mapping은 3D 장면에서 물체의 그림자를 표현하기 위한 기법으로, 빛과 물체 간의 상호작용을 통해 장면의 깊이와 사실감을 부여하는 효과적인 방법이다. 그림자는 물체와 주변 환경 간의 관계를 시각적으로 표현해 주기 때문에, 게임과 그래픽스에서 필수적인 요소로 자리 잡고 있다. Shadow Mapping은 특히 구현 난이도가 비교적 낮고 성능이 우수하여 많이 사용되며, 다양한 확장 기법을 통해 보다 사실적인 그림자 표현도 가능하다. 예를 들어 Omnidirectional Shadow Mapping과 Cascaded Shadow Mapping을 통해 포인트 라이트 및 넓은 범위의 그림자를 보다 정확하게 표현할 수 있다.1.2..

ShaderPixel - 0. 과제 해석

프로젝트 개요목적ShaderPixel 프로젝트의 주된 목적은 OpenGL을 통해 다양한 그래픽 객체가 논리적으로 연결되도록 매트릭스 스택을 조작하며, 쉐이더를 활용해 고차원적인 렌더링을 구현하는 것이다. 신체 부위와 같은 독립적인 개체들이 상호 연결된 상태로 동작할 수 있도록 구성하면서, 쉐이더의 복잡한 조명과 최적화를 경험할 수 있다. 또한 이 프로젝트를 통해 3D 공간에서 창의적인 비주얼 효과를 표현할 수 있다.일반적인 규칙Makefile 또는 빌드 파일 제공: 프로젝트 컴파일을 위해 Makefile, CMake 또는 Premake 등의 빌드 파일을 제공해야 한다.OpenGL 4.0 이상 사용: OpenGL을 사용할 경우 최소 버전 4.0을 사용하며, 쉐이더는 버전 330을 사용해야 한다. Vulka..