본문 바로가기

Directx11/Technic

트레일 랜더링

소개

안녕하세요 이번에 소개할 내용은 Trail 입니다. 게임을 하다보면 검을 휘두를 때 잔상이 남거나, 로켓을 발사 할 때 뒤에 불빛이 늘어지는 것을 볼 수 있습니다. 이런것을

 

Trail 이라고 합니다. Trail을 구현하게 되면 조금더 화려하고, 현실적인 효과들을 낼 수 있습니다.

 

다양한 Trail과 이것을 구현하는 많은 방법이 있습니다.

 

저는 오늘 가장 간단한 방법으로 구현을 할건데요. 인게임 도중에 정점들을 생성하여 Mesh를 동적으로 만들어주는 방법을 사용할 것입니다.

(기하쉐이더는 사용하지 않았습니다.)

 

Trail을 구현하기 위해서는 간단한 기준들과 필요한 요소들이 있습니다.

 

1. 어떤루트로 만들어 줄것인가

1) 부모 오브젝트의 두 기준점과 Transform의 영향을 받아 루트 생성

 

TrailRenderer를 가지는 자식오브젝트를 만들어 줍니다. 자식 오브젝트를 부모에 넣어줍니다. 초기화 시점에 부모 오브젝트가 Mesh를 가지고 있다면 Mesh의 가운데 최상

정점과 가운데 최하 정점을 기준으로 Transform의 영향을 받아 루트를 생성해 주었습니다.

 

2. 얼마마다 생성할 것인가

 

1) 정해진 시간마다

2) 정점들의 거리에 따라

 

정해진 시간마다 정점을 생성하는 기능도 지원하고, 정점들의 거리에 따라 정점을 생성하는 기능도 지원합니다.

 

3. 얼만큼 동안 유지 시킬 것인가

 

1) 정해진 시간 만큰

2) 움직인 거리 만큼

3) 일정 길이 만큼

 

정해진 시간이 지나면 사라지도록 설정해 놓았습니다.

 

 

 

구현

 

 

함수는 크게 다섯가지가 존재합니다.

 

bool CheckPoint();

 

- 매 프레임 Update시점에 정점이 갱신될 시점인지를 판단합니다. 판단의 기준은 시간일수도, 정점간의 거리일 수 도 있습니다.

 

void UpdatePoint();

 

- 매 프레임 CheckPoint()의 판단 여부에 따라 정점을 현재 정점list에 넣어줍니다.

 

void CatmullRom();

 

- UpdatePoint()에서 정점들이 새로 만들어 지면 세분화할지 말지 설정값에 따라 정점을 부드러운 곡선이 되도록 세분화해줍니다.

이 정점들은 새로운 list에 들어가게 됩니다.

 

void CreateTrail();

 

- 새로운 정점이 생성되고 CatmullRom을 걸친 최종 점점들을 이어줍니다. UV와 인덱스를 생성해 주고 최종 메쉬를 만들어 줍니다.

 

void Render();

 

- 생성된 Mesh를 랜더링 해줍니다.

 

 

 

 

구현후 소감

 

제가 구현한 트레일 입니다. 아주 간단한 트레일을 구현하는 것 자체는 한시간 정도 걸린것 같습니다. 하지만 이것을 어떻게 좀더 부드럽고 하느냐가 관건인것 같습니다.

 

UV를 설정할 때 텍스처를 늘리는 식으로 만들어 보았는데, 텍스처가 반복되는 듯한 느낌을 주는 것이 조금더 나을 것 같기도 합니다. 조금더 끊기는 느낌이 드네요. ㅜㅜ

 

Trail이 만들어지는 곳에 후처리를 통한 왜곡 효과를 주었습니다.

 

빌보드 느낌으로 구현을 한다면 부자연스러움이 줄어든다고 하는데 아직 자료를 찾아보는 중입니다.

 

조금더 공부해서 부드럽고, 파티클을 추가하여 조금더 화려한 트레일을 만들어 보는것이 TrailRenderer의 최종 목표 입니다.

 

 

 

 

 

 

'Directx11 > Technic' 카테고리의 다른 글

테셀레이션 변위맵  (0) 2018.05.01
쿼드트리 Terrain 컬링  (0) 2018.04.26
UV와 시간을 이용한 스킬 쿨타임  (0) 2018.04.24
UV와 카메라의 방향 벡터를 이용한 레이더 쉐이더  (1) 2018.04.24
Navigation Mesh  (0) 2018.04.18