목록이득우의 게임수학 (7)
cyphen156

이전 글에서 이어서 쓴다.※ 여기서 설명하는 예제 순서는 책에서의 예제보다 1개 인덱스가 높습니다.초점거리 왜곡과 깊이감앞서 경험했던 렌더링 예제에서는 하나의 물체만을 그리고 있었기 때문에 별다른 문제를 발견하지 못했다. 하지만 사실 이건 컴퓨터 그래픽스에서 현실감과 몰입감을 방해하는 요소가 고려되어있지 않다.바로 깊이감이다. 물체를 원근 투영 하여 그렸지만 사물이 화면에 그려지는 순서에 따라 먼저 그려진 그림이 덮어씌워져 나중에 그린 물체에 의해 가려져서 보인다. 예를 들자면 빨간 사각형을 그리고 그 위에 검은 원을 일부 겹쳐 그리는 듯하게 그린다는 것이다. 이러한 그리기 방식 때문에 물체가 가지고 있는 초점거리를 왜곡하는 현상이 발생한다.절두체 :: 3차원 NDC 이제 이차원 평면 NDC를 깊이를 추..

모니터는 항상 2차원 평면이기 때문에, 현실 세계처럼 입체감 있는 그림을 그리는 것은 매우 어렵습니다. 그래서 2차원 이미지를 3차원처럼 보이게 만드는 기법이 중요한데, 이를 원근 투영(Perspective Projection)이라고 부른다.이러한 원근감 표현은 르네상스 시대에도 이미 존재했으며, 한 점을 기준으로 직선 거리를 설정하고, 거리에 따라 같은 사물이라도 비율을 다르게 그리는 방식이 고안되었고, 현대에 이르러서는 이 '한 점'을 카메라와 같은 물체의 시점으로 일반화하여 세상을 바라보게 되었다. 이를 화각(Field of View, FOV)이라고 부릅니다.원근 투영은 기존의 직교 투영 방식에서 한 점으로 모이기 때문에 뷰 모델이 6면체의 형태에서 사각 뿔의 형태로 변화하게 된다. 모든 물체는 하..

백터의 외적내적과 다르게 외적의 경우 3차원 이상의 공간에서만 사용가능한데, 그 이유는 외적이 왼손법칙에서 설명했듯이 두 벡터에 대한 외적의 결과가 두 벡터 모두에 직교하는 새로운 벡터를 만들고, 이것이 회전 축을 결정하는 역할을 하기 때문이다.내적의 결과는 항상 스칼라였지만, 외적의 결과가 방향과 크기를 갖는 벡터이기 때문이라고 다시 설명할 수 있다.A · B 내적 연산 기호 = ∣ a ∣∣ b ∣ cosθ == axbx + ayby + azbz A X B 외적 연산 기호 = ∣ a ∣∣ b ∣ nsinθ == (aybz − azby, azbx − axbz, axby − aybx)위 수식에서 보면 알 수 있듯 내적은 같은 성분끼리 곱한 뒤 더하여 최종 결과를 만들어내고, 외..

3차원 공간은 원근감이 존재하기 때문에 구현 방법이 복잡해지고, 예상밖의 상황이 많이 생긴다고 한다. 이것을 오일러의 각도법과 벡터의 외적으로 하나씩 해결해 나가면서 여러 수학적 지식과 게임 엔진 개발에 대한 지식들을 배울 수 있을 것 같다.좌표계 기준이 전에 한번 언급한적 있었던 왼손 좌표계와 오른손 좌표계에 대한 내용이다. 이 둘은 관점에 따라 3차원 공간을 설계하는 큰 차이를 만들어내는 기준들이 되는데 그 기준이 물체를 바라보는데 있어서 나를 기준으로 오는지, 또는 앞으로 가는지를 결정한다.대표적인 특징은 다음과 같다. 하지만 상대적인 기준일 뿐 절대적이지는 않다.왼손 좌표계 : 배경을 관찰하는데 적합하다오른손 좌표계 : 물체를 관찰하는데 더 익숙하다.밑의 그림은 대표적인 게임, 모델링 툴, 엔진과..

게임 엔진은 유니티와 엔진과 자체엔진 개발공부로 어느정도 학습해 나가고 있다고 생각한다.이번 9장에서는 이득우 교수님의 CK소프트 렌더러라는 CPU BaseEngine에서 게임이라는 소프트웨어를 구성하기 위해 게임 엔진이 어떤 기능을 해야 하는지 배울 것이다.우선 모든 게임 오브젝트가 기본적으로 가지고 있는 Transform에 대해서 생각해 보면Position(T), Rotation(R), Scale(S)로 정의된다.이 트랜스폼 정보들은 행렬 곱 연산을 통해 아핀 변환을 수행하기 때문에 교환 법칙이 성립하지 않아 순서가 가장 중요하다. 이 변환의 순서 조합은 6가지가 생기는데 다음과 같다.S * R * TS * T * RT * S * RT * R * SR * S * TR * T * S이렇게 순서에 따라 ..

이전까지는 한 점(점의 좌표) 혹은 두 점(선분, 벡터) 에 대해 공부했다면, 이제부터는 3D 그래픽스 및 게임 그래픽에서 가장 기본적인 단위인 세 개의 점(정점, Vertex)으로 구성된 삼각형에 대해서 배우겠다. 정점(Vertex), 삼각형(Triangle), 폴리곤(Polygon)앞선 장에서 두 벡터가 서로 선형 독립의 관계라면 같은 차원 내의 공간상에서 어떠한 벡터든 만들어 낼 수 있다고 배웠다.그런데 아핀 공간상에서 점들의 결합의 스칼라 결과는 항상 1이 되어야 한다고 했다.또한 선분을 그릴 때 S와 T값을 [0, 1]로고정한다면 유한한 크기의 직선을 구할 수 있다고 했다.이것을 통해 삼각형의 형태 안에 존재하는 점들이 모두 아핀 결합식으로 생성될 수 있는 점들이라 판단할 수 있다.이렇게 탄생한..

게임에서 빛의 표현을 위해 사용하는 여러가지 공식들이 있다. 그 중 하나가 램버트 반사 모델이다.램버트 반사는 물체가 광원으로부터 빛을 받았을 때 반사하는 빛의 세기가 Cos함수에 비례 한다는 것을 착안하여 만들어낸 모델이다. 다만 모든 표면이 동일하게 빛을 확산 반사한다고 가정하기 때문에 정확한 빛의 반사를 표현하기는 어렵지만 단순하기 때문에 빠른 연산속도를 보장하고, 그럴듯한 음영 효과를 플레이어에게 제공하기 때문에 유용한 공식이다.다음은 플레이어 포지션을 따라 광원으로부터 빛을 반사하는 예제이다.공유 변수// 게임 로직과 렌더링 로직이 공유하는 변수/// 7_2 예제/// 조명 모델 구현하기Vector2 lightPosition; // 광원LinearColor lightColor;Vector2 ci..