Programming/Computer Graphics(9)
-
[Computer Graphics with DirectX 12] 07. Lighting
07. Lighting 목표퐁 모델을 이용한 지역 조명 구현평행광, 점광, 점적광 구현폴리곤 조명 처리를 위한 노말 벡터 계산빌보드 및 지형의 노말 벡터 계산이전까지 어떤 물체가 색을 표현하는 방식은 텍스처에 저장된 색을 uv 값에 따라 샘플링하여 그냥 화면에 출력하는 것이었습니다. 이는 현실 세계와는 괴리감이 있습니다.실제로는 물체의 색이 어떻든간에 빛이 없으면 그 물체의 색은 우리 눈에 들어오지 않습니다. 광원이 어떤 물체의 표면을 때리면 표면과의 적절한 상호작용을 통해 빛이 흡수되거나 정반사, 난반사되고 이러한 여러 과정을 거쳐 빛이 눈에 닿으면 비로소 그 물체의 색을 감지하는 것입니다. 또한 현실 세계에 존재하는 여러 물체, 이를테면 나무와 금속의 차이점에 대해 생각해 보면 단순히 색 하나로 어떤..
2024.05.03 -
[Computer Graphics with DirectX 12] 06. Tessellation
06. Tessellation 목표테셀레이션을 이용한 지형 세분화카메라의 거리에 따른 지형의 테셀레이션 계수 조절4차 베지에 곡면을 이용한 지형 렌더링GetHeight 함수 재구현 지형의 높이가 셰이더 단에서 결정됨에 따른 GetHeight 함수 재구현 기존의 지형은 높이 맵의 높이를 받아와 서로 연결하는 형태로 구현되었습니다.결과는 나쁘지 않았지만 높이의 변화가 선형으로 이뤄지므로 가까이서 관찰하면 분명 어색한 부분이 존재함을 확인할 수 있었습니다. 이는 높이 맵을 더욱 세분화하고 삼각형을 가까운 간격으로 연결하여 해결할 수 있습니다. 그러나 이러한 구현을 위해 많은 메모리와 연산을 필요로 합니다. 가령 0.1 간격으로 지형을 렌더링한다면 1 간격으로 렌더링 할 때에 비해 100배의 메모리가 필요할 것..
2024.04.29 -
[Computer Graphics with DirectX 12] 05. Instancing
05. Instancing 목표인스턴싱을 이용한 오브젝트 렌더링한 번의 렌더 명령으로 다수의 수풀 렌더링서로 다른 텍스처 리소스를 사용하는 수풀 역시 한 번의 렌더 명령으로 렌더링 이전 프로젝트에서 기하 셰이더를 이용해 빌보드를 렌더링 해 보았습니다. 괜찮은 결과가 나왔지만 빌보드의 개수가 조금만 많아져도 렉이 심해지고, 로딩 시간 역시 오래 걸렸습니다.이는 수 만 개 오브젝트를 생성하며 업로드 버퍼를 초기화하고, 이 오브젝트들에 매 프레임 일일히 렌더링 명령을 내리기 때문입니다. 이 오브젝트들은 월드 변환 행렬(그리고 텍스처)만 다를 뿐, 같은 기하구조를 가지고 있습니다. 따라서 분명 반복되는 렌더링 과정 속에 비효율적인 부분이 존재합니다. 프로젝트 5에서는 인스턴싱을 이용하여 한 번의 렌더 명령으로 ..
2024.04.25 -
[Computer Graphics with DirectX 12] 04. Geometry Shader
04. Geometry Shader 목표기하 셰이더를 이용한 빌보드 구현빌보드를 통한 수풀 표현수풀은 항상 지형 위에 그려지도록 구현루트 상수 대신 루트 서술자를 사용하도록 수정 상수 버퍼 뷰 루트 서술자를 이용해 루트 파라미터 전송 프로젝트 4에서는 기하 셰이더를 이용해 빌보드를 구현하고, 빌보드를 이용하여 풀을 렌더링해 보겠습니다. 이 과정에서 항상 지형 위에 수풀이 렌더링될 수 있도록 구현하겠습니다.또한 지금까지는 월드 변환 행렬, 뷰 변환 행렬, 투영 변환 행렬 등을 루트 상수(Root Constant)를 이용해 셰이더로 전달하였습니다. 하나의 루트 시그니처에 전송 가능한 루트 파라미터의 최대 크기는 4 X 64바이트이므로, 행렬 세 개로만 최대 크기의 75%를 사용하게 됩니다. 이 공간을 절약하..
2024.04.14 -
[Computer Graphics with DirectX 12] 03. Terrain
03. Terrain 목표높이 맵을 이용한 지형 구현파일 입출력을 이용한 높이 맵 입력Mesh의 정점 정보 또한 파일 입출력을 사용하여 메모리에 올리도록 수정텍스처 혼합을 이용한 지형 색 표현 Texture 클래스가 여러 텍스처를 관리하도록 수정 프로젝트 3에서는 높이 맵을 이용 하여 지형을 구현하고, 여러 텍스처를 혼합하여 지형의 색을 자연스럽게 표현해 보겠습니다. GitHub - SH4MDEL/DirectX12-ComputerGraphicsContribute to SH4MDEL/DirectX12-ComputerGraphics development by creating an account on GitHub.github.com 위 리포지토리에서 전체 소스코드를 확인하실 수 있습니다.이 프로젝트의 소스코..
2024.03.06 -
[Computer Graphics with DirectX 12] 02. Texture
02. Texture 목표텍스처 렌더링플레이어를 포함한 오브젝트에 텍스처 적용스카이박스 렌더링 큐브 텍스처(D3D12_SRV_DIMENSION_TEXTURECUBE) 사용 프로젝트 1에서는 정점에 직접 색을 지정해 주고, 픽셀 셰이더에서 그 색을 직접 출력하는 방법으로 색을 표현하였습니다. 프로젝트 2에서는 텍스처를 메쉬에 입히는 방법으로 색을 표현해 보겠습니다. GitHub - SH4MDEL/DirectX12-ComputerGraphicsContribute to SH4MDEL/DirectX12-ComputerGraphics development by creating an account on GitHub.github.com 위 리포지토리에서 전체 소스코드를 확인하실 수 있습니다.이 프로젝트의 소스코드는..
2024.02.26