Computer Graphics/OpenGL 31

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..

OpenGL 정리 - 23. 인스터싱 (Instancing), 안티-앨리어싱(Anti-aliasing)

1. Instancing1.1 Instancing이란?Instancing은 동일한 오브젝트를 여러 번 렌더링해야 할 때 사용되는 최적화 기법이다. 예를 들어, 게임 속에서 풀이나 나무 같은 오브젝트가 수천 개 이상 반복해서 등장하는 경우를 생각해 보자. 각 오브젝트를 따로 드로우 콜을 호출하면 CPU와 GPU 간의 통신이 반복되어 성능이 저하된다.Instancing을 사용하면 한 번의 드로우 콜로 수천 개의 오브젝트를 동시에 그릴 수 있어, CPU와 GPU 간의 통신을 최소화하여 성능을 최적화할 수 있다.1.2 Instancing 구현 흐름과 예제 코드Instancing을 위해 주로 glDrawArraysInstanced() 또는 glDrawElementsInstanced() 함수를 사용하며, 인스턴스 ..

OpenGL 정리 - 22. GPU 데이터 관리 기법, UBO, Geometry Shader

1. OpenGL에서 VBO와 IBO 데이터 관리1.1 VBO 데이터 관리 기법glBufferData(): VBO에 데이터를 설정하는 기본 함수로, 메모리를 할당하고 데이터를 복사한다. nullptr을 인자로 넣으면 메모리 할당만 이루어지고 데이터 복사는 이루어지지 않는다. 이는 필요에 따라 이후 별도의 데이터 전송을 위해 미리 메모리를 할당할 때 유용하다.glBufferSubData(): 일부 데이터만 갱신하고 싶을 때 사용하는 함수로, 기존 메모리의 특정 위치부터 필요한 데이터 크기만큼 복사하여 성능을 최적화할 수 있다. 예를 들어, 매 프레임마다 전체 데이터가 아닌 변경된 부분만 업데이트할 때 사용할 수 있다.glMapBuffer(), glUnmapBuffer(): 데이터 포인터를 통해 버퍼 메모리..

OpenGL 정리 - 21. 큐브 맵 (Cubemap)

1. 큐브 맵 (Cubemap)1.1 큐브 맵이란?큐브 맵(Cubemap)은 6장의 2D 이미지를 하나의 정육면체(큐브) 형태로 붙인 텍스처 맵이다. 각 이미지는 큐브의 한 면을 담당하며, 결과적으로 6개의 면으로 이루어진 입체적인 텍스처가 된다. 이 큐브 맵을 사용하면 3D 장면에서 주변 환경을 감싸는 것처럼 보일 수 있고, 물체가 주변을 반사하는 효과를 자연스럽게 만들 수 있다.1.2 큐브 맵의 특징과 활용큐브 맵은 카메라를 중심으로 3차원 방향 벡터를 사용해 텍스처를 샘플링한다. 예를 들어, 카메라가 (1, 0, 0) 방향을 바라본다면 큐브의 오른쪽 면을 텍스처로 보여주는 식이다.이러한 큐브 맵은 보통 배경을 표현하는 Skybox와 물체의 반사나 굴절을 표현하는 환경 맵핑에 많이 활용된다.2. 큐브..