Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
콜리전 감지하기
GPU 파티클은 전적으로 GPU에서 처리되므로 게임의 실제 세계에 접근할 수 없습니다. 입자가 환경과 충돌해야 하는 경우 입자 충돌 노드를 설정해야 합니다. GPUParticlesCollisionBox3D, GPUParticlesCollisionSphere3D, GPUParticlesCollisionSDF3D, :ref:`class_GPUParticlesCollisionHeightField3D`의 네 가지가 있습니다.
일반 속성
속성 그루핑(Grouping)
모든 충돌 노드에서 찾을 수 있는 몇 가지 속성이 있습니다. 검사기의 GPUParticlesCollision3D 섹션에 있습니다.
Cull Mask 속성은 각 시스템의 :ref:`가시성 레이어 <class_VisualInstance3D>`을 기반으로 충돌 노드의 영향을 받는 입자 시스템을 제어합니다. 입자 시스템은 충돌기의 컬 마스크에서 시스템의 가시성 레이어 중 하나 이상이 활성화된 경우에만 충돌 노드와 충돌합니다.
상자 콜리전
노드 목록에서 상자 콜리전
상자 충돌 노드는 단단한 직사각형 상자 모양입니다. Extents 속성을 사용하여 크기를 제어합니다. 상자 범위는 항상 경계 측면의 절반을 측정하므로 (X=1.0,Y=1.0,Z=1.0) 값은 각 측면의 너비가 2미터인 상자를 만듭니다. 상자 충돌 노드는 입자가 충돌해야 하는 바닥 및 벽 형상을 시뮬레이션하는 데 유용합니다.
상자 충돌 노드를 생성하려면 씬에 새 자식 노드를 추가하고 사용 가능한 노드 목록에서 ``GPUParticlesCollisionBox3D``를 선택합니다. 보다 역동적인 효과를 위해 상자 위치를 애니메이션으로 만들거나 움직이는 노드에 연결할 수 있습니다.
두 개의 입자 시스템이 상자 충돌과 충돌합니다 노드
구체 콜리전
노드 목록에서 구체 콜리전
구 충돌 노드는 단단한 구 모양입니다. Radius 속성은 구의 크기를 제어합니다. 상자 충돌 노드는 완벽한 큐브일 필요는 없지만 구 충돌 노드는 항상 구입니다. 높이와 별도로 너비를 설정하려면 Node3D 섹션에서 Scale 속성을 변경해야 합니다.
구 충돌 노드를 생성하려면 씬에 새 자식 노드를 추가하고 사용 가능한 노드 목록에서 ``GPUParticlesCollisionSphere3D``를 선택합니다. 보다 역동적인 효과를 위해 구의 위치에 애니메이션을 적용하거나 움직이는 노드에 연결할 수 있습니다.
두 개의 입자 시스템이 구형 충돌과 충돌합니다 노드
콜리전 준비하기
노드 목록의 높이 필드 충돌
하이트 필드 입자 충돌은 입자와 충돌해야 하는 넓은 실외 영역에 매우 유용합니다. 런타임에 노드는 컬 마스크와 일치하는 경계 내의 모든 메시에서 높이 필드를 생성합니다. 입자는 이 높이 필드가 나타내는 메시와 충돌합니다. 하이트 필드 생성은 동적으로 이루어지기 때문에 플레이어 카메라를 따라가며 레벨 변화에 반응할 수 있습니다. 하이트 필드 밀도에 대한 다양한 설정은 광범위한 성능 조정을 제공합니다.
높이 필드 충돌 노드를 생성하려면 씬에 새 자식 노드를 추가하고 사용 가능한 노드 목록에서 ``GPUParticlesCollisionHeightField3D``를 선택합니다.
높이 필드 충돌 노드는 상자 모양입니다. Extents 속성은 크기를 제어합니다. 범위는 항상 경계 측면의 절반을 측정하므로 (X=1.0,Y=1.0,Z=1.0) 값은 각 측면에서 너비가 2미터인 상자를 만듭니다. 높이 필드 생성 시 노드 범위 외부의 모든 항목은 무시됩니다.
Resolution 속성은 높이 필드의 세부 정도를 제어합니다. 해상도가 낮을수록 정확도는 떨어지지만 성능은 더 빨라집니다. 하이트 필드 해상도가 너무 낮으면 파티클이 레벨 지오메트리를 관통하거나 충돌 이벤트 중에 공중에 갇히는 것처럼 보일 수 있습니다. 또한 일부 작은 메시를 완전히 무시할 수도 있습니다.
낮은 해상도에서 하이트 필드 충돌로 인해 일부 미세한 디테일이 누락됨(왼쪽)
Update Mode 속성은 경계 내의 메시에서 높이 필드가 다시 생성되는 시기를 제어합니다. 이동할 때만 새로 고치려면 ``When Moved``로 설정하십시오. 이는 성능이 좋으며 자주 변경되지 않는 정적 장면에 적합합니다. 위치가 자주 바뀌는 동적 개체와 입자가 충돌해야 하는 경우 ``Always``를 선택하여 모든 프레임을 새로 고칠 수 있습니다. 이는 성능 저하를 초래하므로 필요한 경우에만 사용해야 합니다.
참고
``Update Mode``가 ``When Moved``로 설정된 경우 움직임이 업데이트를 트리거하는 것은 *높이 필드 노드*라는 점을 기억하는 것이 중요합니다. 높이 필드는 내부 메시 중 하나가 움직일 때 업데이트되지 않습니다.
Follow Camera Enabled 속성은 활성화되면 높이 필드가 현재 카메라를 따르도록 만듭니다. 카메라가 움직일 때마다 업데이트됩니다. 이 속성은 눈에 띄지 않거나 너무 멀리 있는 영역에서 성능을 낭비하지 않으면서 항상 플레이어 주변에 입자 충돌이 있는지 확인하는 데 사용할 수 있습니다.
SDF 콜리전
참고
이 기능은 모바일이나 호환성이 아닌 Forward+ 렌더러에서만 구현됩니다.
노드 목록에서 SDF 콜리전
SDF 충돌 노드는 입자가 충돌할 수 있는 `부호 거리 필드 <https://www.reddit.com/r/explainlikeimfive/comments/k2zbos/eli5_what_are_distance_fields_in_graphics>`_을 생성합니다. SDF 충돌은 경계 내의 여러 메시를 입자에 대한 단일 충돌 볼륨으로 변환한다는 점에서 하이트 필드 충돌과 유사합니다. 주요 차이점은 부호 있는 디스턴스 필드가 구멍, 터널, 돌출부를 나타낼 수 있다는 점입니다. 이는 하이트 필드만으로는 불가능합니다. 성능 오버헤드는 하이트 필드에 비해 크기 때문에 중소 규모 환경에 가장 적합합니다.
SDF 충돌 노드를 생성하려면 새 자식 노드를 씬에 추가하고 사용 가능한 노드 목록에서 ``GPUParticlesCollisionSDF3D``를 선택합니다. SDF 충돌 노드는 레벨의 입자에 영향을 미치기 위해 구워져야 합니다. 그렇게 하려면 SDF 충돌 노드가 선택된 상태에서 뷰포트 도구 모음에서 버튼을 클릭하고 베이킹된 데이터를 저장할 디렉터리를 선택합니다. SDF 충돌은 편집기에서 구워야 하므로 정적이며 런타임에 변경할 수 없습니다.
SDF 입자 콜리전은 매우 세부적인 3차원 콜리전 모양에 대해 허용합니다
SDF 충돌 노드는 상자 모양입니다. Extents 속성은 크기를 제어합니다. 범위는 항상 경계 측면의 절반을 측정하므로 (X=1.0,Y=1.0,Z=1.0) 값은 각 측면에서 너비가 2미터인 상자를 만듭니다. 노드 범위 외부의 모든 항목은 충돌 시 무시됩니다.
Resolution 속성은 거리 필드의 세부 정도를 제어합니다. 해상도가 낮을수록 정확도는 떨어지지만 성능은 더 빨라집니다. 해상도가 너무 낮으면 파티클이 레벨 지오메트리를 관통하거나 충돌 이벤트 중에 공중에 갇히는 것처럼 보일 수 있습니다. 또한 일부 작은 메시를 완전히 무시할 수도 있습니다.
서로 다른 해상도의 부호 있는 거리 필드로 덮힌 동일한 영역: 16(왼쪽) 및 256(오른쪽)
Thickness 속성은 일반적으로 내부가 비어 있는 거리 필드에 입자가 고속으로 침투하는 것을 방지하는 두께를 제공합니다. 일부 입자가 레벨 형상과 충돌하지 않고 대신 바로 통과하는 경우 이 속성을 더 높은 값으로 설정해 보십시오.
Bake Mask 속성은 SDF가 구워질 때 어떤 메쉬가 고려되는지 제어합니다. 베이크 마스크의 활성 레이어에 렌더링되는 메시만 입자 충돌에 영향을 미칩니다.
문제 해결
입자 충돌이 작동하려면 입자의 :ref:`visibility AABB <doc_3d_particles_properties_draw>`가 충돌기의 AABB와 겹쳐야 합니다. 충돌체가 설정되었음에도 불구하고 충돌이 작동하지 않는 것으로 나타나면 GPUParticles3D 노드를 선택하고 3D 편집기 뷰포트 상단에서 **GPUParticles3D > 가시성 AABB 생성...**을 선택하여 업데이트된 가시성 AABB를 생성하십시오.
입자가 빠르게 움직이고 충돌체가 얇은 경우. 이에 대한 두 가지 해결 방법이 있습니다.
충돌체를 더 두껍게 만듭니다. 예를 들어 입자가 단단한 바닥 아래로 내려갈 수 없는 경우 바닥을 나타내는 충돌체를 실제 시각적 표현보다 더 두껍게 만들 수 있습니다. 하이트필드 충돌기는 설계상 이를 자동으로 처리합니다. 하이트필드는 "공간 간" 충돌을 나타낼 수 없기 때문입니다.
GPUParticles3D 노드에서 ``Fixed FPS``가 증가하여 충돌 검사를 더 자주 수행합니다. 이는 성능 비용이 발생하므로 너무 높게 설정하지 마십시오.