우주선을위한 플라즈마 트레일 생성 방법


13

나는 모두 비슷한 효과를 사용하는 멋진 우주 게임을 많이 보았습니다. 이러한 효과 중 일부가 일반적으로 수행되는 방법을 찾는 데 정말 관심이 있습니다.

특히 나는 가용 한 자원을 모두 사용하지 않고 우주선이나 미사일의 흔적이 어떻게 달성되는지 알고 싶다.

효과의 예는 Gimbal 스크린 샷 과 동일한 링크의 비디오를 참조하십시오 . Ether Vapor미사일 트레일 .

둘 다 같은 기술입니까? 나는 주로 2D에 관심이 있지만 너무 다르다는 것을 상상할 수 없습니다.

이런 종류의 효과를 어떻게 만들 수 있을까요? 우리는 픽셀 쉐이더, 블렌드 모드 / 필터, 비트 맵 효과, 파티클 시스템 또는 무엇을 말하는가? 실제로 플랫폼별로 다릅니다. 나는 단지 이론을 찾고 있지만 구체적인 예나 링크가 좋을 것입니다. 더 자세할수록 좋습니다.

답변:


7

이런 종류의 효과를 어떻게 만들 수 있을까요? 우리는 픽셀 쉐이더, 블렌드 모드 / 필터, 비트 맵 효과, 파티클 시스템 또는 무엇을 말하는가? 실제로 플랫폼별로 다릅니다. 나는 단지 이론을 찾고 있지만 구체적인 예나 링크가 좋을 것입니다. 더 자세할수록 좋습니다.

무엇보다도.

소스 코드를 찌르지 않으면 어떻게 했는지 정확히 모를 수 있습니다 .

그러나 두 게임의 모습에서 두 게임 모두 연결되어 배를 따라 걷는 형상으로 보입니다 . 기본 포인트 스프라이트 파티클 시스템 일 필요는 없지만 그다지 어려운 것은 아닙니다.

일부 게임은 곡선 알고리즘을 사용하고 그로부터 정점 목록을 생성하고 트레일의 두 끝점에 적용된 다른 텍스처로 약간의 텍스처링을 수행하여 한 지점에서 배기 가스가 뜨겁고 다른 곳에서는 더 시원하고 우주로 떠납니다.

플레이어의 함선은 움직임이 예측할 수 없기 때문에 흥미로운 경우이며, 곡선 알고리즘의 제어점을 업데이트하거나 최신 선박 위치를 샘플링하고이를 기반으로 정점 위치를 생성해야 할 수도 있습니다.

제어점에서 작동하는 것을 원한다면 이전 질문 에서이 답변 을 살펴보십시오 . 그러나 필요에 따라 플레이어 위치를 샘플링하면 훨씬 잘 작동하고 이해하기 쉽습니다.

당신이 생각하게 할 것이 있습니다 :

플레이어 위치 샘플링을 시작하십시오. 이 점들은 형상을 구성 할 수있는 트레일 의 바디 세그먼트 를 형성합니다 . 별도의 질감을 가진 별도의 꼬리 세그먼트 를 유지하는 것이 좋습니다 . 플레이어가 회전하는 시점을 감지하고 이러한 세그먼트의 빈도를 높이는 것이 좋습니다. 그렇지 않으면 블록 커브가 생길 수 있습니다. 그것이 당신이 가고있는 효과가 아니라면 :)

특정 이벤트에서 세그먼트는 생성을 중지해야하며 기존 세그먼트는 꼬리에 가장 가까운 신체 세그먼트 (꼬리 자체는 아님)에서 시작하여 천천히 축소를 시작해야합니다. 플레이어가 느려지는 경우입니다. 그러나 세그먼트가 축소되는 속도가 플레이어의 선박 속도와 일치하는 경우 새 세그먼트가 시간이 지날수록 정시에 형성됩니다. 따라서 이것은 풀 모션중인 선박에도 잘 작동합니다. 트레일의 길이는 항상 동일하며 유동적이고 일관된 흐름을 제공합니다.

머리 부분은 항상 플레이어의 현재 위치에 있어야합니다. 회전이 감지되면 기존 헤드 세그먼트가 바디 세그먼트에 추가되고 새 헤드 세그먼트가 시작됩니다. 반복. 텍스처에 따라 각 세그먼트는 최대 길이를 가질 수 있습니다.

이를 통해 우리는이 효과를 쉽게 모델링 할 수 있습니다. 더 많은 세그먼트가 제공되지 않는 한 효과 자체가 감소 / 축소되고 속도가 줄어드는 것을 방지 할 수 있다는 생각에서 벗어나지 않습니다.


4

이러한 트레일을 생성 할 수있는 다양한 가능성이 있습니다. 간단한 선, 다각형, 점 구름 등을 사용할 수 있습니다.

그것들은 일반적으로 두 가지 개념 중 하나를 기반으로합니다.

  • 이전 위치를 추적하고이를 사용하여 꼬리를 그립니다.
  • 속도 / 방향을 추적하고 그에 따라 꼬리를 조정하십시오.

첫 번째 방법은 미사일과 같은 것에 더 적합하고, 두 번째 방법은 용의 꼬리와 같은 무언가를 따르는 일종의 부착물에 더 좋습니다.

엔진 테일에 대한 간단한 구현은 그렇게 복잡하지 않습니다. 이전 위치를 저장하려면 약간의 버퍼 만 있으면됩니다. 사용중인 언어를 모르지만 링 버퍼 또는 유사한 종류의 버퍼를 사용합니다 (끝 부분에서 빠른 삭제 및 삽입).

모든 x 번째 프레임 / 업데이트 틱 (초당 수백 번 수행 할 필요는 없음), 본질적으로 버퍼에서 가장 오래된 / 마지막 요소를 버리고 현재 위치를 앞에 추가합니다 (버퍼가 채워진 경우에만). 항상 n 개의 요소를 포함해야합니다. 여기서 n은 꼬리의 길이를 결정합니다.

그런 다음 그리기하는 동안 현재 위치에서 시작하여 버퍼의 모든 점을 통해 일련의 선을 그리면서 추가 정점마다 불투명도를 줄입니다.

이렇게하면 멋지고 깨끗한 꼬리가 생깁니다. 플랫폼을 기반으로 셰이더를 사용하거나 해당 경로를 따라 멋진 꼬리 그래픽을 배치하여이를 확장 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.