그래픽스 37

D3D11 애파인 변환(=아핀 변환)

이동은 선형변환이 아니다.하지만 그래픽스에서 이동과 선형 변환을 동시에표현하고 싶을 때 사용하는 것이 애파인 변환이다. 즉, 애파인 변환이란선형 변환과 이동을 하나의 행렬로 표현한 것이다. Homogeneous Coordinates란?선형 변환하고 선형 변환이 아닌 이동을 합치기 위해서 새롭게 추가가 된 개념이다.벡터 : (x,y,z,0) 포인트 : (x,y,z,1)포인트 - 포인트 = 벡터포인트 + 벡터 = 포인트변환 전 직선은 변환 후에도 직선이다.이 식을 행렬 식으로 표현하면 다음과 같다.이러한 개념을 수학적으로 간단히 나타내면 애파인의 a를 따고,선형변환을 Tau라고 했다. 애파인 변환을 식으로 나타내면 다음과 같다.이런 식으로 애파인 트랜스폼을 사용할 수 있으므로,3차원에서는 4x4 행렬을 사용..

그래픽스/DX11 2024.12.16

D3D11 회전축에 대한 벡터의 회전

회전축에 대한 벡터의 회전 회전도 행렬로 표현할 수 있다.회전을 하려면 먼저 회전축을 결정해야한다.어떠한 축에 대해서 회전해야할지, 그 다음은 몇 도만큼 돌아가야할지를 결정한다. 회전은 비교적 3차원 공간보단2차원 공간에서 구현하기 쉽다. (3차원 회전을 다룰 때는 사원수(Quaternion)를 사용하게 된다.숫자 4개를 사용해서 회전을 표현하는 것이다.) 회전을 시키고자 한다면, 2차원 평면에서의 회전을 생각하면 좀더 쉽다.2D 평면에서 회전을 생각해보자.서로 다른 벡터가 필요하다는 것을 금방 알 수 있다. 회전 과정 1. 먼저 회전축 벡터(n)와 회전하고 싶은 벡터(v)를 외적 (Cross Product)를 한다. 2. 외적 값은 회전축 벡터(n)와 회전하고 싶은 벡터(v) 두 벡터에 모두에 해서 수..

그래픽스/DX11 2024.12.13

D3D11 선형 변환(Linear Transformation) - 동차성과 가법성

선형 변환에서 변환은 그래픽스에서 뭘까? 뭐가 될 수 있을까?변환이란 어떠한 함수라고 생각해보자. 그렇게 되면 위와 같은 식이 전개가 된다.그럼 이 Tau가 어떤 함수인가에 따라,Scaling이 되기도 하고, Rotation이 되기도 한다. 이 두 가지 사례를 만족하는 것이 선형 변환이다.그렇다면 선형 변환이 아닌 경우는 뭘까? 이처럼 동차성과 가법성을 만족해야만 하는 것이 선형 변환이다. 선형 변환이 아닌 경우 예를 들어 tau라는 변환이 x,y,z를 넣었을 때,x,y,z를 x^2, y^2, z^2인 경우 왜 선형 변환이 아닐까?~이 아닌 경우를 찾을 때는 그에 대한 반례를 찾으면 된다. k가 2라고 하고, 해당 식을 전개하면 다음과 같은 결과값이 나온다.1,2,3에다가 2를 각각 곱하면2,4,..

그래픽스/DX11 2024.12.12

D3D11 그래픽스 - 변환

어떤 점을 원점에 대해서 회전시키는 경우어떤 점을 원점에 대해서 회전시키는 경우에어떠한 점 (= 임의의 점) xy를 하나의 미지수 (x,y)로 표현할 수 있고,그 임의의 점을 원점(여기서 원점은(0,0)이 아닐 수도 있다.)을 기준으로 θ만큼 회전 시킨 지점을 (x',y')로 표현할 수 있다.그러한 (x',y') 지점을 구하는 식은 아래와 같다. 그럼 열벡터(Column Vector) 형태의 회전 변환을행벡터(Row Vector)형태의 회전 변환 할까?방법은 간단하다. 좌변에도 전치(Transpose)를 해주고,우변에도 전치(Transpose)를 해준다. 이 식의 전개를 글로 풀어보면 다음과 같다.좌변에 Transpose를 해주고,우변에도 통째로 Transpose를 해준다. 이 Column vector는..

그래픽스/DX11 2024.12.11

인공지능 - 길찾기 BFS

길 찾기 알고리즘은 두 지점의 경로상에 있는 장애물을 피해서 길을 찾는다.이 길 찾기의 복잡성은 두 점 사이에는 여러 다양한 경로 집합이 존재할 수 있다는 사실에 있다.하지만 이러한 경로 중 아주 적은 수의 경로만이 최단 경로이다.장애물의 표면을 따라 이동하는 AI는 지능적으로 보이지 않는다.그래서 최단 경로를 찾기 위해서 모든 가능한 경로를 효율적으로 탐색하기 위한 방법이 필요하다. 그래프 길 찾기 문제를 풀기 전에 먼저 AI가 통과할 수 있는 게임 세계의 부분을 표현하는 방법이 필요하다.일반적으로는 그래프 데이터 구조를 많이 선택한다.그래프는 일련의 노드를 포함한다. 이 노드는 에지를 통해서 서로 연결된다. 이 에지는 방향성이 없는 경우가 있는데방향성이 없다는 것은 양방향으로 이동할 수 있다는 걸 의..

그래픽스/OpenGL 2024.10.30

D3D11 Rasterization - Light

조명은 크게 3가지이다.Direction light, Point light, Spot light 이를 코드로 나타내면 다음과 같다.struct Light{ float3 Strength; float FalloffStart; // point/spot light only float3 Direction; // directional/spot light only float FalloffEnd; // point/spot light only float3 Position; // point light only float SpotPower; // spot light only};Directional light태양같이 아주 멀리 있는 광원을 가정한다.광원은 아주 멀리있다고 정의..

그래픽스/DX11 2024.10.30

인공지능 - 상태 기계 설계 해시맵 이용하기

게임 인공지능 구현에 빠질 수 없는 것이 있다.State Machine Behaviors 상태 기계 행위이다. 아주 간단한 게임에서는 AI는 항상 같은 행위를 한다.다음과 같은 3가지 행위를 가지는 AI가 있다고 가정해보자. 플레이어 쫒아가기흩어지기플레이어로부터 멀어지기이러한 행위의 변화를 표현하는 한 가지 방법으로 각 행위가 하나의 상태를 가지는상태 기게 (State Machine)이란 것이 있다. 상태 기계 설계하기 상태 그 자체는 부분적으로 하나의 상태 기계만 정의한다.그래서 상태 기계 설계에 있어서 상태 기계를 변경하거나상태 기계 간 전이하는 방법을 결정하는 것이 중요하다. state 상태를 구분할 때는 주로 enum class를 사용한다.enum class 혹은 enum을 사용하면switch 문..

그래픽스/OpenGL 2024.10.27

DX11 - 쉐이딩(Blinn-Phong Shading)

쉐이딩은 조명과 재질의 상호작용을 고려해서 색을 결정하는 과정이다. 이때 vs에서 미리 색을 결정해서 ps에서 보간하는 방법이 있고, 쉐이딩 알고리즘 자체를 ps에서 하는 방법이 있다. 둘 중에 어느 것이 다 빠르나면, 픽셀수에 비해 vertex의 수가 훨씬 적기 때문에 vs에서 돌리는 것이 더 빠르다. 대신에 렌더링의 상세도는 조금 떨어질 것이다. 요즘에는 GPU가 많이 빨라졌기 때문에 ps에서 돌리는 경우도 많다. 오늘은 ps에서 blinn-pong shading을 구현한다. 회전 회전을 할 때는 어떤 회전 축에 대해 회전할 것인지 정해야한다. DX는 왼손 좌표계를 사용하고 있기 때문에 Y축을 기준으로 회전시킨다면, 왼손을 엄지를 위로 쭉 펴고 나머지 손가락들을 감아주는 방향으로 회전하는 것과 같다...

그래픽스/DX11 2024.10.25

DX11 - 원근 투영(Perspective Projection)

원근 투영은 원근법에 대한 것으로,원근범에 대한 기본적인 방식은 먼 거리에 있는 물체가더 작게 보이게 2D 화면에 나타내는 방식이다.3D 투영 (또는 그래픽 투영)은 2차원 (2D) 표면에3차원 (3D) 객체를 표시하는 데 사용되는 디자인 기술이다. 원근법을 적용한 그림들의 공통점은 '소실점의 존재'이다.이 소실점을 기준으로 일정 각도만큼의 직선들을 나란히 그리게 되면실제로 소실점에 가까운 부분들은 멀어보이게 되는 시각적 효과를 가져온다. 하지만, 3D 컴퓨터 환경에서 원근법을 적용하기 위해선실제 그림에서 적용되는 방식과는 조금 다르다.결론은 3D Rendering 에서는 소실점 개념은 필요치 않다. 우선, 한가지 생각해볼 문제는 우리가 바라보는 위치즉, 3D 공간을 표현하기 위한 우리의 시계에서는'카메..

그래픽스/DX11 2024.10.23

DX11 - 쉐이더 개념 + 뒷면 제거

이번 강의에서는 렌더링 파이프라인의 각 화살표 단계에서 쉐이더가 무슨 일을 하는지, 왜 필요한지, 왜 이런 구조로 만들어 졌는지 알아보기 위해서 마치 쉐이더라는 것을 활용하는 것 처럼 짜본다. 쉐이더의 이름은 쉐이딩를 할 때 사용해서 쉐이더라는 이름이 붙기 시작했다. 입체감을 주기 위해서 음영처리를 하기 위해서 처리하는 단계이다. 가상 세계에서 정말로 3차원에 있는 것처럼 보이기 위해 빛과 물체의 표면의 상호작용을 고려해서 음영처리 하는 것을 시작으로 GPU안에서 작동하는 프로그램을 쉐이더라고 부르기 시작했다. 쉐이더에 공통적으로 들어가는 것은 스케일, 트랜스레이션, 로테이션 값이다. 같은 물체 안에 동일한 변환을 적용하는 것들은 따로 모아놓고 사용하셨다. 버텍스 쉐이더에서 가장 중요한 것은 어떠한 정보..

그래픽스/DX11 2024.10.21