그래픽스 9

Quaternion

필요성 : 기존의 오일러 회전 방식의 문제점 짐벌락 현상 때문. 여러 회전축의 회전이 결합되면 생기는 문제이다. 설명하자면 어떤 축이 회전함에 따라 다른 축이 변화하게 되는데, 이 때문에 두 축의 방향이 겹치는 순간 하나의 축이 소실되어버리는 현상이 나타난다. 세 개의 축을 회전시킬 때 두 번쨰로 회전시키는 축이 이 문제를 일으킨다. 사원수 : 사원수는 놀랍게도 복소수를 이용해 회전을 한다. 두 복소수를 곱하면 복소수를 극좌표계로 표현했을 때 각도를 더한 벡터가 나온다. 삼차원 벡터 회전 공식 : 벡터 V를 a 축으로 Th 만큼 회전시킨 벡터 V' = v*cosTh + (v . a)*a*(1-cosTh) + (a x v)sinTh 쿼터니언 q는 xi + yj +zk + w의 형태 또는 Vect(x,y,z..

그래픽스 2022.01.04

Lighting

Diffuse : 난반사 Ambient : 환경광 Specualr : 정반사광 Normal 벡터 : 어떤 면에 수직인 벡터 빛을 받은 정도에 따라 물체의 색상에 어떤 값을 곱하는 과정. Diffuse 구하기 : 비스듬하게 올 수록 약해짐. 노말 벡터(N)와 빛의 각도(L)의 COS 값을 곱함. N , -L내적을 해주면 됨. Ambient : 기초생활광. 빛이 벽에 가로막혔더라도 기본적으로 주는 광량. Specular : 벽에 튕긴 빛에 의해 받는 광량. 빛이 튕겨나온 방향 벡터 R, 카메라와 빛이 튕긴 지점의 방향 벡터 C 사이의 각도의 COS 값에 따라 광량 결정. (마치 눈망울의 빛나는 하얀 점 같은 부분.) 참고로 R은 빛 벡터 L과 노말벡터 N의 내적을 L에서 두 번 빼줌.

그래픽스 2022.01.02

Index Buffer

Index Buffer란 정점 연결 순서 정보이다. 위 이미지만 보아도 어느정도 이해가 될 정도로 쉬운 내용이다. 사각형을 그리는데는 삼각형 두 개가 필요하다. 그런데 정말로 삼각형 두 개를 겹쳐서 위 그림의 왼쪽 처럼 표현하면 v0과 v5, v2와 v3가 겹쳐 메모리 공간이 낭비된다는 사실을 알 수 있다. 그래서 오른쪽 처럼 정점은 4 개만 표현하고, 대신 정점이 연결된 순서 정보를 담은 Index Buffer를 추가한다. 그림의 {0, 1, 2, 2, 3, 0}은 0, 1, 2로 하나의 삼각형을 그리고, 2, 3, 0으로 두 번째 삼각형을 그린다는 뜻이다. 이렇게 하면 훨씬 적은 공간으로 같은 사각형을 표시할 수 있다.

그래픽스 2021.12.08

Constant Buffer

이번 글에서 할 것은 Constant Buffer를 사용해 저번에 그렸던 삼각형의 포지션을 조금 이동시키고, 색을 바꿔줄 것이다. 그렇다면 Constant Buffer란 무었일까 알아보도록 하자. Constant Buffer가 무엇인지 알아보기 전에 아래 그림을 보자. 위 그림에서 1번은 CPU RAM에 있는 데이터, 즉 우리가 일반적으로 코드 상에서 다루는 데이터를 GPU의 RAM으로 보내고있다. 이때 GPU RAM에 Buffer의 형태로 저장되는데, Constant(리소스)를 저장하면 그것이 바로 Constant Buffer다~. 그리고 더욱 빠른 연산을 위해 레지스터도 활용해야 한다. 2번 과정을 통해 Buffer의 주소값을 Register에 등록해서 사용할 수 있다. 그리고 중요한 점은 1번 과정..

그래픽스 2021.11.10

장치 초기화

이 글은 Inflearn의 Rookies님의 강의를 보고 제 나름대로 필기한 내용입니다. https://www.inflearn.com/course/%EC%96%B8%EB%A6%AC%EC%96%BC-3d-mmorpg-2/dashboard [C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12 - 인프런 | 강의 DirectX 12를 통해 그래픽스 기초를 학습하는 강의입니다. 3D 세상의 물체가 어떤 원리로 모니터 화면에 그려지는지 공부하게 됩니다., MMORPG 개발에 필요한 모든 기술, C++ & Unreal로 Step By Step! 🕹️ www.inflearn.com 이번 글에선 장치 초기화에 대해 알아보자. 이전 글인 "프로젝트 세팅"과 이어지는 내용이..

그래픽스 2021.10.13

프로젝트 세팅

어떤 프로젝트? 이 글은 아래에 있는 Inflearn의 Rookies님의 강의를 보고 제 나름대로의 필기입니다. https://www.inflearn.com/course/%EC%96%B8%EB%A6%AC%EC%96%BC-3d-mmorpg-2/dashboard [C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12 - 인프런 | 강의 DirectX 12를 통해 그래픽스 기초를 학습하는 강의입니다. 3D 세상의 물체가 어떤 원리로 모니터 화면에 그려지는지 공부하게 됩니다., MMORPG 개발에 필요한 모든 기술, C++ & Unreal로 Step By Step! 🕹️ www.inflearn.com 이 강의에선 간단한 그래픽 엔진을 만들어 볼 것 같습니다. 여기서..

그래픽스 2021.10.07

GPU외주와 렌더링 파이프라인

CPU와 GPU의 차이 흔히들 CPU는 그냥 계산, GPU는 그래픽 계산 정도로 알고있다. 그러나 GPU가 그래픽만 계산할 수 있는 것은 아니다. 그래픽과 같은 대량의 간단 계산을 잘하는 친구일 뿐. 그래서 비트코인을 채굴하거나 암호 계산을 할 때 GPU를 쓰는 것이다. 또한 CPU라고 그래픽 계산을 할 수 없는 것은 아니다. 다만 그래픽 말고도 해야할 일이 많고 GPU에게 맡기는게 더 효율적일 뿐. 위 그림은 CPU와 GPU의 구조를 나타낸다. 딱 봐도 매우 다르게 생겼다. 이중 눈여겨 봐야할 것은 GPU에는 ALU가 준내 많다는 것이다. ALU는 실질적인 수학 계산을 담당하는 부분이다. 즉 GPU는 수학 계산을 잘하는 녀석이라는 뜻이다. 그러나 CPU처럼 똑똑하진 않다. CPU는 계산한 결과를 저장했..

그래픽스 2021.10.06

그래픽스 개론

우선 이 카테고리의 글들은 모두 "[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12" 의 강의를 듣고 제 나름대로 정리하여 필기한 내용들임을 알립니다. Part1 은 전부 들어보았는데 꽤 좋은 강의입니다. 여러분도 한 번 쯤 들어보세요. https://www.inflearn.com/course/%EC%96%B8%EB%A6%AC%EC%96%BC-3d-mmorpg-2/dashboard [C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12 - 인프런 | 강의 DirectX 12를 통해 그래픽스 기초를 학습하는 강의입니다. 3D 세상의 물체가 어떤 원리로 모니터 화면에 그려지는지 공부하게 됩니다., MMORPG ..

그래픽스 2021.10.05