Graphics
-
[53] - Lighting(Illumination) - 2Graphics 2021. 9. 15. 18:18
이전에 이론적으로 Phong 모델이 무엇인지 공부했습니다. 이번에는 D3D을 바탕으로 구현한 Engine을 뜯어보면서 어떤 식으로 구성하면 좋을지 배워봅니다. (hw3d/hw3d at T24.1-End · planetchili/hw3d (github.com)) Chili에게 많은 Insight을 얻을 수 있습니다. 비록 영어이긴 하지만 양질의 정보를 제공해줍니다. ((28) C++ 3D DirectX Tutorial [Dynamic Lighting / Graphics Debugger] Part 1 - YouTube) 3D fundamental 시리즈는 솔직히 Fundamental이라고 볼 수 없는 난이도였습니다. 설명도 부족하고 알아듣기도 어려워서 3D graphics의 기초는 대학 강의시간에 배웠던 것..
-
[52] - Lighting(Illumination)Graphics 2021. 9. 13. 21:43
일반적으로 빛을 받는 부분은 밝고 빛을 덜 받는 부분은 상대적으로 어둡습니다. 물체의 뒷면은 빛이 잘 들지 않아 그림자가 생기기도 합니다. 그림자는 따로 배우고 빛이 받는 부분에 대한 Shading을 배워봅니다. Illumination은 기본적으로 광[光]의 변화 및 조건에 따른 색깔[Colour]의 변화에 주된 목적이 있습니다. Phong model 가장 널리 알려지고 자주 사용되는 대표적인 Lighting 모델입니다. 물론 Phong model보다 나은 모델들이 여러 존재하긴 하지만 배우는 입장에선 기본부터 하는 것이 좋다고 생각합니다. Physically Based Rendering(PBR)이라는 스키마도 존재하긴 합니다. 이 Phong model은 크게 네 가지 요소들로 이루어져 있습니다. 1. ..
-
[51] - imguiGraphics 2021. 8. 28. 23:23
(ocornut/imgui: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies (github.com)) Imgui이라고 하며 GUI[Graphical User Interface]입니다. IM은 Immediate Mode의 약자이며 GUI는 흔히 쓰는 그대로 Graphical User Interface입니다. 대부분 C++로 작성되었으며 Platform independent입니다. 따라서 OpenGL이든 D3D이든 Vulkan이든 적당히 버무려서 사용할 수 있습니다. IMGUI의 Core을 떼어다가 적당히 손을 보면 된다는 뜻입니다. 게다가 이미 만들어져 있는 특정 플랫폼을 위한 Adapter들도 상당히 많이 ..
-
[50] - Texture - 2Graphics 2021. 8. 26. 23:17
Texture에 대한 약간의 공부를 진행했습니다. Texture, texel, pixel 등 이들이 어떻게 관리되고 어떤 식으로 Mapping이 되는지 개략적인 이해는 했습니다. D3D에서는 이 Texture을 어떤 식으로 관리할 수 있을지 배워봅니다. Pixel은 모호하게 표현하면 하나의 이미지와 같습니다. 따라서 우리는 가장 먼저 이미지를 우리의 Engine에 불러올 수 있도록 할 라이브러리가 필요합니다. 여기에는 많은 Tool이 존재합니다. DirectX Toolkit에도 이미지를 불러올 수 있는 기능이 존재하지만 이것을 사용하게 되면 Texture에 대한 많은 부분이 Black Box인 상태로 남기 때문에 공부를 하는 목적에 부합하지 않습니다. 따라서 이는 협상의 여지가 없이 GDI Plus라는 ..
-
[49] - Texture - 1Graphics 2021. 8. 17. 17:47
육면체는 총 8개의 Vertices가 있고 Vertex Shader - Tessellation - Geometry Shader 등을 거쳐서 Fragment/Pixel Shader에 이르면 최종적인 외형을 결정하게 됩니다. 최종적 외형[最終的外形]이라는 것은 Colour, Illumination, Texture 등등을 이릅니다. 오늘은 Image Texturing에 대한 공부를 할 것입니다. Rasterization에서 Fragment를 생성했으니 이들은 다음 Shader로 넘어갑니다. 그 전에 Fragment Shader와 Pixel Shader의 차이점이 있는지 확인해 봅니다. 크게 다른 점은 없고 OpenGL과 D3D의 단어 선택적 차이와 Graphics Pipepline을 구성하는 약간의 구조적인 ..
-
[48] - RasterizationGraphics 2021. 8. 13. 22:30
Rasterization Texture에 대한 공부를 하려면 Rasterization Stage에 대한 공부를 해야 합니다. Rasterization 전 단계까지 예를 들어서 정점[Vertex]이 여덟 개인 육면체를 CPU로부터 넘겨받았다고 가정하겠습니다. IA Stage에서 받은 이 Vertex들은 삼각형의 조각으로 정리가 됩니다. 한첨 전에 배운 것을 떠올려 보면 Vertex의 stride를 정의하고 Description을 정의하던 파트가 분명 존재했습니다. figure 1b의 ByteWidth, StrcutureByteStride와 같은 Description을 통해서 버퍼의 정보를 정해주어 전달을 받은 Vertex를삼각형으로 재구성합니다. 이렇게 처리된 Vertex들을 Rasterization 단계..
-
[47] - Bindable/Drawable System - 3Graphics 2021. 8. 12. 21:44
절차지향적으로 만들었던 코드를 객체지향적으로 재구성하면서 어떻게 코드를 이해하면 좋을지 감을 잡기가 어려워졌습니다. 따라서 변화 이전의 절차 지향적 코드와 비교를 해보면서 이 엔진을 어떤 식으로 응용하면 좋을지 고민해봅니다. Window 나름대로 분석해본 결과, 이 ChiliFramework는 Window 하나를 화면에 띄우면서 시작합니다. 따라서 가장 먼저 모든 절차에서 분리할 수 있는 요소는 Window를 초기화하는 과정이라고 할 수 있습니다. 그렇기 때문에 App class가 만들어지는 순간 Window의 인스턴스를 만드는 과정에 따로 Encapsulate된 상태로 존재하는 것입니다. 동시에 Window class 안에는 키보드, 마우스, Graphics를 비롯한 필수적인 요소들이 존재합니다. 이들..
-
[46] - std::optionalGraphics 2021. 8. 12. 14:09
Visual Studio 같은 IDE에서는 C++11 표준이나 C++17 표준을 쉽게 선택할 수 있지만 G++을 통해서 std::optional을 접근하려면 compile 옵션에서 따로 설정을 해주거나 expeimental에 있는 optional을 include해야 합니다. std::optional의 주된 사용처는 함수의 반환 값입니다. 예를 들면 외부에서 파일을 불러온다고 했을 때 사용할 수 있을 것입니다. 위와 같이 파일을 열고 test.txt 내의 모든 string을 반환하는 함수가 있습니다. 만약 파일이 존재하지 않는다면 std::string의 기본 생성자를 반환하게 될 것입니다. 파일이 존재한다면 string을 iterator를 사용해서 만들게 될 것입니다. 메인 함수 부에 이렇게 간단한 코드를..