멋진 생각입니다. 우주선 주위에 일종의 확산 그라디언트가 필요합니다. 내가 생각할 수있는 세 가지 물리적 모델이 있습니다.
압력 구배가 재조정되는 액체 매체처럼 보이기를 원합니다. 예를 들어 입자를 통과 한 후에는 보트 뒤의 물처럼 깨어납니다. 이 경우 파티클의 위치는 절대적이며 렌더링 위치 를 일시적으로 수정하는 것은 플레이어와의 관계뿐입니다 . 이것은 두꺼운 돋보기를 물건 위에 놓을 때와 비슷하며 회절은 유리를 움직일 때까지만 움직입니다. 이 경우 배는 유리입니다.
그들이 배에서 멀어 지길 원하고 움직이면 계속 움직입니다. 이것은 압력 구배가없는 (또는 매우 작은) 일반적으로 빈 공간에서 표준 물리학과 같습니다.
(1)과 (2)에서와 같이 접근 할 때 입자를 신속하게 우주선에서 멀어 지려고하지만, 일단 우주선이 사라지면 입자가 천천히 재 균형하여 균형을 맞 춥니 다.
세 가지 솔루션 모두에 공통 : 선박과 함께 움직이는 확산 필드가 필요합니다. 이 예에서는 원형으로 만듭니다. 그런 다음 우주선과 해당 지역 내의 각 입자 사이에서 벡터를 감지하여 v1이라고합니다. 벡터를 따라 파티클을 밀어냅니다. 얼마나 멀리 밀어 넣을지는 우주선과의 거리에 따라 다릅니다 1 - v1.magnitude
. 이 공식은 선형 강도를 제공하지만 가장자리를 향한 강도가 감소하는 원형 강도 곡선과 같은 다른 것을 사용하도록 수정할 수 있습니다. 이렇게하면 선박 주위에 원형 압력 구배가 아닌 구면이있는 것처럼 보이게됩니다.
해결책 1 : 당신은 지금 모두는 수정이다 렌더링 마다에 그 입자의 위치 (이다, 스프라이트 위치) 렌더링 이 벡터에 의해, 업데이트. 이런 식으로 수행하기 때문에 이것은 순수한 렌더링 효과이며 입자의 실제 월드 위치에는 영향을 미치지 않습니다. 따라서 월드 위치를 렌더 오프셋 (v1)에 추가하면 파티클을 지나서 또는 옆으로 이동할 때 파티클이 멋지게 옮겨졌으며 패스 할 때 파티클을 부드럽게 되돌릴 수 있습니다 (뒤).
해결 방법 2 : v1을 뷰 위치에 적용하는 대신 각 논리 업데이트 에 적용 하여 입자의 위치에 적용하십시오. 그래서 p1.position += v1
. 따라서 입자에 가속력을 가하면 속도로 변환됩니다. 아마도, 각 입자의 속도를 늦추어 입자가 서서히 느려지고 일단지나 가면 멈추기를 원할 것입니다. 이 솔루션이 어떻게 성운에 쌓여있는 입자를 만드는지 알 수 있습니다. 성운은 현실이 아무리 약하더라도 그 안에 압력 구배가 있기 때문에 매우 현실적이지는 않습니다.
솔루션 3: (2)와 동일하지만이 경우 파티클을 다시 확산시켜야합니다. 이 작업을 쉽게 수행하는 것은 약간의 무차별 대입 방식이지만 입자와 눈에 띄는 사탕이므로 눈에 띄는 큰 영역을 다루지 않아도됩니다. 직사각 영역은 논리적 인 목적을 위해 그것을 둘러싼 다. 각각의 입자는 관심 영역 내에서 서로 다른 입자에 힘을 가할 것이다. 그들은 다시 서로의 거리에 따라 힘을 가할 것입니다. 관심 영역에서 단일 스윕으로 모든 입자 간 힘을 계산 한 다음 단일 스윕으로 모든 힘을 적용하십시오. 마지막으로 속도가 0 인 입자에 대해서만 입자 간 힘 처리를 수행하십시오. 주어진 입자가 최소 속도에 도달하면
모든 종류의 확산 공식 등이 있지만이 경우 간단한 해결책이 가장 효과적이라고 생각합니다.