본문 바로가기

Directx11/Technic

테셀레이션 변위맵 소개 테셀레이션은 Directx11에 추가된 획기적인 기능입니다. 테셀레이션은 폴리곤은 세분화하여 더 정밀한 메쉬를 랜더링 하는 기술 입니다. 테셀레이션은 그냥 사용한다고 해서 메쉬의 디테일이 살아나는 것이 아니라, 테셀레이션을 통해 만들어진 폴리곤이 새로운 정보를 묘사해야 정밀해 집니다. 테셀레이션을 이용하면 범프맵핑을 완벽하게 만들 수 있고, 더 리얼한 캐릭터를 만들 수 있습니다. 또한 LOD를 이용하여 거리에 따라 메쉬의 디테일을 바꿀 수 있습니다. 제가 오늘 구현한 것은 가장 간단한, 변위맵을 이용하여 새로 생겨난 정점에 대해 맵핑해 주기 입니다. 변위맵이 정점의 높이 정보를 담고, 새로생긴 정점을 변위맵에 있는 데이터로 묘사해줍니다. 테셀레이션 단계는 랜더링 파이프라인 설명을 보시면 됩니다. 자.. 더보기
트레일 랜더링 소개 안녕하세요 이번에 소개할 내용은 Trail 입니다. 게임을 하다보면 검을 휘두를 때 잔상이 남거나, 로켓을 발사 할 때 뒤에 불빛이 늘어지는 것을 볼 수 있습니다. 이런것을 Trail 이라고 합니다. Trail을 구현하게 되면 조금더 화려하고, 현실적인 효과들을 낼 수 있습니다. 다양한 Trail과 이것을 구현하는 많은 방법이 있습니다. 저는 오늘 가장 간단한 방법으로 구현을 할건데요. 인게임 도중에 정점들을 생성하여 Mesh를 동적으로 만들어주는 방법을 사용할 것입니다. (기하쉐이더는 사용하지 않았습니다.) Trail을 구현하기 위해서는 간단한 기준들과 필요한 요소들이 있습니다. 1. 어떤루트로 만들어 줄것인가 1) 부모 오브젝트의 두 기준점과 Transform의 영향을 받아 루트 생성 Trail.. 더보기
쿼드트리 Terrain 컬링 소개 안녕하세요 이번에 보여드릴 최적화 기법은 쿼드트리 자료구조를 이용한 Terrain 컬링 입니다. 쿼드 트리를 이용한 Terrain 컬링은 지형의 크기가 매우 클 경우 사용하면 좋은 컬링입니다. 지형이 매우 큰 경우 보이지도 않는 지형을 랜더링하게 되면서 많은 값을 소비하게 됩니다. 이러한 경우 쿼드트리를 이용하여 지형을 컬링하는 것이 좋습니다. 왜 지형의 크기가 작은경우 컬링을 하지 않는가 .. 의문이 들텐데요!! 쿼드트리를 이용하여 Terrain을 컬링하는 경우, Terrain 을 구성하는 많은 셀들을(인덱스 삼각형) 순회하며 컬링 되야할 부분가 컬링되지 않을 부분을 구별하고, 인덱스들을 모아서 랜더링하는 작업을 해야하는데요. 이 작업에서 많은 값들이 소비 됩니다. 때문에 지형의 크기가 매우 크지.. 더보기
UV와 시간을 이용한 스킬 쿨타임 안녕하세요 이번에 보여드릴 아주 간단한 효과는 시간과 UV를 이용한 스킬 쿨타임 구현 입니다. 전에 설명드렸던 레이더와 아주 비슷한 방식으로 구현이 되는데요. 한가지 차이가 있다면, 영역의 점들을 알아내는 방법입니다. 레이더를 구현할때는 방향벡터와 이루는 각이 음각이든 양각이든 중요하지 않았기 때문에 내적을 이용해 구했는데요. 이번에 스킬 쿨타임은 시계 방향, 시계 반대방향이 중요하므로 내적을 이용하지 않습니다. 하지만 더 간단한 삼각함수를 이용할 건데요. 1. 현재 쿨타임 (현재 진행된 시간의 비율 1/10 -> 10초 중에 1초 진행됨) 1. 이차원 평면에 한 벡터의 동경각은 atan2로 구할 수 있습니다. (tan만 이해 했다면 매우 쉬운 말이므로 설명은 생략하겠습니다.) 2. tan를 이용할 경우.. 더보기
UV와 카메라의 방향 벡터를 이용한 레이더 쉐이더 Tera를 해보면 내가 바라보는 방향의 범위가 미니맵에 표시되는 효과를 볼 수 있습니다. 이 효과는 카메라의 방향벡터를 가지고 할 수 있는 아주 간단한 쉐이더 효과 입니다. 아래의 그림은 Directx의 UV의 좌표계 입니다. 이 효과는 카메라와의 방향과 시야각안에 있는 점들을 좀더 밝게 랜더링 해주는 것입니다. 때문에 두가지 값이 필요합니다. 1. 카메라의 방향 2. 시야각 이 두가지만 안다면 간단한 내적으로 시야각 안의점들을 잡아 낼 수 있습니다. (카메라의 방향을 기준으로 시야각의 반만큼의 양쪽각을 체크해 주면 되므로 내적을 이용함) 1. UV의 좌표의 중심 (0.5,0.5)을 내 현재 캐릭터의 위치라 생각을 합니다. 2. 중심에서 (0.5,0.0)지점을 향하는 방향을 z축 양의 방향이라 (0,0,.. 더보기
Navigation Mesh Navigation Mesh 안녕하세요 오랜만에 글을 다시올립니다. 이번에 포스팅할 글은 플레이어의 이동과 길찾기에 관한 글입니다. 3D게임을 하다보면 지붕위를 걸어다니 거나 계단을 올라가는등 다양한 메쉬들을 타는 모습을 볼 수 있습니다. 이런 게임들을 하다보면 메쉬를 이루는 삼각형들을 모두 탐색하며 충돌을 검사하는 듯한 느낌을 받는데요. 실제로 메쉬의 버텍스들이 이루는 삼각형들을 모두 탐색할 경우 버텍스가 만개인 메쉬 몇개만 띄워도 게임을 하기 어려울 것입니다. 때문에 사실상 불가능 하다고 볼 수 있습니다. 이것을 해결하기 위해 나온 방법이 Navigation Mesh라고 볼 수 있습니다. Navigation Mesh는 3D상의 물체의 이동을 2D상으로 생각해 보자 입니다. Player는 XZ상의 평면.. 더보기
Terrain Splatting (Brush) Terrain Splatting 터레인 스플레팅은 지형에 텍스쳐를 입히는 것을 의미 합니다. 게임을 하다보면 지형이 흙이나 풀로 덮혀있는것을 볼 수 있습니다. 그것이 바로 지형에 텍스쳐를 입힌것입니다. Splatting 사용 영상은 Tool 시범 영상에도 있습니다. Splatting Terrain Splatting에서 중요한 것은 터레인의 특정 부분에 어떤 텍스쳐들이 어느정도 가중치로 혼합되어 있는지가 중요합니다. 때문에 이 데이터들을 기록할 것이 필요하며, Terrain 정점 구조와 비슷하면 더 좋습니다. 저는 데이터를 저장하고 리소스로서 보내기 위해 터레인 사이즈의 가중치 MultiTexture를 만들어 사용된 텍스처와 Normal 맵정보를 저장하였습니다. Texture 는 ARGB 4 바이트의 정보.. 더보기
Color Picking (색상 픽킹) Color Picking 오브젝트를 마우스로 픽킹하기 위해서 보통 구체나 OBB를 씌워 놓고 그것을 픽킹하곤 합니다. 위와 같은 방법들은 정교한 픽킹을 할 수 없다는 단점을 가지고 있습니다. 이러한 단점을 보완해줄 픽킹 방법이 Color Picking 방법입니다. Color Picking은 매우 간단합니다. 1. 오브젝트들의 고유한 색상 값을 지정해 줍니다. 2. 오브젝트들의 고유한 색상값을 새로운 RenderTarget에 그려줍니다. 3. RenderTarget 을 CPU(Texture) 자원으로 가져와 줍니다. 4. Screen위의 마우스 좌표를 Texture의 인덱스로 변환해 줍니다. 5. RenderTarget Texture의 인덱스의 색상값을 읽어옵니다. 6. 그 색상값을가지 오브젝트가 현재 픽.. 더보기
DDT Picking (Bresenham's algorithm) 브레젠험 알고리즘을 이용한 DDT Picking Bresenham 직선 알고리즘을 이용한 DDT Picking을 구현해 보았습니다. Bresenham 직선 알고리즘은 주어진 시작점과 끝점을 두고 직선을 만들어 내기위한 알고리즘 입니다. (두점을 안다면 방향을알 수 있으며, 기울기 많큼 증가량으로 직선위의 정점들을 모을 수 있습니다. 이 정점들은 터레인의 유효한 점이 되고, 이 정점들을 포함하는 삼각형 메쉬에 Lay와 삼각형의 교차 판정을 통해 교차하는 유효한 삼각형들을 모을 수 있습니다. 이중 카메라와 거리가 제일 가까운 것이 지금 픽킹된 점이 됩니다.) 1. 카메라의 Ray의 위치와 방향을 지형의 로컬스페이스로 보낸다. 2. 지형의 로컬스페이스 상의 Ray를 XZ 평면으로 정사영을 내려줍니다. 3. T.. 더보기
Billboard Rendering BillBoard Billboard Rendering 이란 Mesh가 카메라 회전의 영향을 받지 않고 내 카메라를 항상 바라보게 하는 Rendering 기법 입니다. Billboard를 사용하는 이유는 보통 몬스터 머리위의 HP나 이름이 나를 항상 바라보게 할 때나 Billboard Effect를 사용하여 2D Sprite 이지만 3D Mesh같은 느낌을 주기 위해 사용합니다. BIllBoard 구현 Billboard를 구현하는 방법은 크게 2가지가 있습니다. 1. 기하 쉐이더 시점에서 처리하는 방법 2. Transform처리 이후에 처리하는 방법 저는 비교적 간단한 2번째 방법을 사용했습니다. 1번째 방법은 물방울 책에 자세하게 설명 되어있습니다. 1. Transform 월드 행렬을 가져옵니다 2. V.. 더보기