본문 바로가기

Game/Graphics

(68)
Learn OpenGL - Advanced Lighting : Shadow Mapping (1) link : https://learnopengl.com/Advanced-Lighting/Shadows/Shadow-Mapping Shadow Mapping 그림자는 폐색으로 인한 빛의 부재로 인한 결과이다. 광원의 광선이 어떤 물체에 의해 가려지기 때문에 물체에 부딪치지 않으면 그 물체는 그림자 속에 있다. 그림자는 밝은 장면에 많은 사실감을 더하고, 관찰자가 물체 간의 공간적 관계를 더 쉽게 관찰 할 수 있게 한다. 그들은 우리 장면과 사물에 깊이 감을 준다. 예를 들어, 그림자가 있거나 없는 장면의 다음 이미지를 살펴보자: 그림자를 사용하면 오브젝트가 서로 어떻게 관련되는지 훨씬 더 분명해진다는 것을 알 수 있다. 예를 들어, 큐브 중 하나가 다른 큐브 위로 떠 다니는 사실은 그림자가 있을 때 훨씬 ..
Learn OpenGL - Advanced Lighting : Gamma Correction link : https://learnopengl.com/Advanced-Lighting/Gamma-Correction Gamma Correction 장면의 모든 최종 픽셀 색을 계산하자마자 모니터에 표시해야한다. 디지털 이미징의 옛날 대부분의 모니터는 브라운관 (CRT) 모니터였다. 이 모니터는 입력 전압이 두 배가 되어도 밝기의 두 배가 되지 않는다는 물리적 특성을 가지고 있다. 입력 전압을 두 배로 하면 모니터의 감마라고도 알려진 약 2.2의 지수 관계와 같은 밝기가 나타난다. 이것은 인간이 밝기를 측정하는 방법과 비슷하게 발생한다. 밝기는 비슷한 (역) 전력 관계로 표시된다. 이것이 무엇을 의미하는지 더 잘 이해하기 위해 다음 그림을 살펴보아라: 맨 윗줄은 사람의 눈에 맞는 밝기 크기이다. 밝기를 ..
Learn OpenGL - Advanced Lighting : Advanced Lighting link : https://learnopengl.com/Advanced-Lighting/Advanced-Lighting Advanced Lighting 조명 튜토리얼에서 Phong 조명 모델을 간략하게 소개해 현장에 기본적인 사실감을 선사했다. Blin-Phong 퐁 조명은 조명의 훌륭한 근사이지만, 특정 조건에서는 특히 반사율이 낮아 반사 영역이 겇니 경우 반사 현상이 발생한다. 아래 이미지는 평평한 텍스처면에서 1.0의 반사광 지수를 사용할 때 어떤 일이 일어나는지 보여준다: 가장자리에서 반사 영역이 즉시 끊어지는 것을 볼 수 있다. 그 이유는 뷰 벡터와 반사 벡터 사이의 각도가 90도 이상으로 올라가지 않도록 하기 위함이다. 각도가 90도 이상이면 결과 내적이 음수가 되고 반사 지수가 0.0이 된다..
Learn OpenGL - Advanced OpenGL : Anti Aliasing link : https://learnopengl.com/Advanced-OpenGL/Anti-Aliasing Anti Aliasing 아마 렌더링을 하다보면 당신의 모델의 가장자리를 따라 톱니 모양의 패턴을 보게 될 것이다. 이 들쭉날쭉한 가장자리가 나타나는 이유는 래스터 라이저가 정점 데이터를 장면 뒤의 실제 조각으로 변환하는 방법 때문이다. 이 들쭉날쭉한 가장자리가 어떻게 생겼는지 보여주는 예제는 간단한 큐브를 그릴 때 이미 볼 수 있다: 즉시 보이지는 않지만 큐브의 가장자리를 면밀히 살펴보면 지그재그 패턴을 볼 수 있다. 확대하면 다음을 볼 수 있다: 이것은 분명히 응용 프로그램의 최종 버전에서 우리가 원하는 것이 아니다. 가장자리가 구성하는 픽셀 형성을 명확하게 보는 이 효과를 Aliasing 이..
Learn OpenGL - Advanced OpenGL : Instancing link : https://learnopengl.com/Advanced-OpenGL/Instancing Instancing 대부분의 모델에 동일한 정점 데이터 세트가 포함되어 있지만 다른 세계 변형이 있는 많은 모델을 그리는 장면이 있다고 가정해보자. 잔디 잎으로 가득찬 장면을 생각해보아라. 각 잔디잎은 소수의 삼각형으로 구성된 작은 모형이다. 당신은 아마 그 중 몇개를 그리기를 원할 것이고, 당신의 장면은 수천 또는 수만 줄의 잔디 잎으로 끝날 것이며, 각 프레임을 렌더링해야 할 것이다. 각 잎은 단지 몇 개의 삼각형으로 구성되어 있기 때문에 잎은 거의 즉시 렌더링되지만, 수천 개의 렌더링 호출을 수행하면 성능이 크게 저하된다. 실제로 많은 양의 객체를 렌더링한다면 코드에서 다음과 같이 보일 것이다:f..
Learn OpenGL - Advanced OpenGL : Geometry Shader link : https://learnopengl.com/Advanced-OpenGL/Geometry-Shader Geometry Shader 정점과 조각 쉐이더 사이에 기하학 쉐이더라고 불리는 선택적인 쉐이더 스테이지가 있다. 기하학 쉐이더는 하나의 기본 점 또는 삼각형을 형성하는 정점 세트를 입력으로 사용한다. 그런 다음 기하학 쉐이더는 다음 쉐이더 단계로 보내기 전에 적합하다고 판단되는 대로 이 정점을 변형 할 수 있다. 그러나 기하학 쉐이더를 흥미롭게 만드는 것은 처음에 주어진 것보다 훨씬 많은 정점을 생성 할 수 있는 완전히 다른 프리미티브로 정점 세트를 변환 할 수 있다. 우리는 여러분에게 기하학 쉐이더 예제를 보여줌으로써 여러분을 깊은 곳으로 던질 것이다:#version 330 core lay..
Learn OpenGL - Advanced OpenGL : Advanced GLSL link : https://learnopengl.com/Advanced-OpenGL/Advanced-GLSL Advanced GLSL 이 튜토리얼에서는 장면의 시각적 품질을 크게 향상시키는 고급 기능을 소개하지 않는다. 이 튜토리얼은 GLSL의 흥미로운면과 미래의 노력에 도움이 될만한 좋은 트릭에 다소간 차이가 있다. 기본적으로 GLSL과 함께 OpenGL 응용 프로그램을 만들 때 더 쉽게 익숙해질 수 있는 기능이 있습니다. 흥미로운 내장 변수, 쉐이더의 입출력을 구성하는 새로운 방법, 균일 버퍼 객체라는 매우 유용한 도구에 대해 살펴 보겠습니다. GLSL's built-in variables 쉐이더는 최소한이지만 현재 쉐이더 밖의 다른 소스의 데이터가 필요한 경우 데이터를 전달해야한다. 우리는 정점 속..
LearnOpenGL - Advanced OpenGL : Advanced Data link : https://learnopengl.com/Advanced-OpenGL/Advanced-Data Advanced Data OpenGL의 버퍼를 사용해 꽤 오랫동안 데이터를 저장했다. 텍스처를 통해 많은 양의 데이터를 쉐이더에 전달하는 버퍼 및 기타 흥미로운 메소드를 조작하는 더 흥미로운 방법이 있다. 이 튜토리얼에서는 보다 흥미로운 버퍼 함수와 텍스처 객체를 사용해 많은 양의 데이터를 저장하는 방법에 대해 설명한다. OpenGL의 버퍼는 특정 메모리와 그 이상을 관리하는 객체일 뿐이다. 버퍼를 특정 버퍼 대상에 바인딩 할 때 버퍼에 의미를 부여한다. 버퍼는 GL_ARRAY_BUFFER에 바인드 할 때 단지 정점 배열 버퍼일 뿐이지만 GL_ELEMENT_ARRAY_BUFFER에 쉽게 바인드 할..