
차별적 중력의 딜레마
당신이 설명한 문제는 Maya에서 per particle 속성을 작업할 때 전형적인 문제입니다. 각 입자를 개별적으로 제어하려고 하지만 현재 표현식은 각 입자별 특정 속성이 아닌 전역 힘 필드를 수정하기 때문에 모든 입자에 동시에 영향을 미칩니다.
핵심은 GravityField1.magnitude가 해당 필드에 연결된 모든 입자에 영향을 미치는 전역 속성이라는 것을 이해하는 것입니다. 필요한 것은 각 입자가 개별적으로 중력에 어떻게 반응할지 결정하는 방법이지, 중력 자체를 변경하는 것이 아닙니다.
입자 표현식에서 전역 필드를 변경하는 것은 특정 사람을 위해 지구 중력을 수정하는 것과 같습니다
사용자 정의 동적 속성을 사용한 해결책
올바른 방법은 각 입자에 중력에 영향을 받을지 여부를 결정하는 사용자 정의 동적 속성을 추가하는 것입니다. 이 속성은 전역적으로가 아닌 입자별로 평가됩니다.
- 사용자 정의 속성 추가: 입자 shape에서 Attributes > Add Attributes
- affectGravity 생성: affectGravity라는 per particle float 속성
- 동적으로 설정: 객체가 아닌 입자 속성임을 확인
- 값 1 또는 0: 1은 중력 영향, 0은 면역
올바른 표현식 설정
생성 표현식은 무작위 인덱스를 잘 할당하지만, 런타임 표현식은 완전히 다시 작성해야 합니다. 전역 필드를 수정하는 대신 사용자 정의 속성과 작업해야 합니다.
현재 코드의 문제는 표현식을 통과하는 각 입자가 GravityField1.magnitude를 다른 모든 입자에 대해 수정하여 당신이 설명한 지속적인 변경 효과를 생성한다는 것입니다 😅
- Creation expression: particlesShape1.affectGravity = rand(0,1) > 0.5 ? 1 : 0
- Runtime after dynamics: 입자별 개별 제어
- 조건 연산자 사용: ? : 로 깔끔한 이진 결정
- 인스턴스를 위한 indexp 유지: 하지만 중력 로직 분리
중력 필드와의 연결
affectGravity 속성을 각 입자에 추가한 후, 이 속성을 중력 필드의 영향과 연결해야 합니다. Maya는 연결 에디터나 추가 표현식을 통해 이를 허용합니다.
affectGravity 속성을 사용하여 각 입자에 개별적으로 적용되는 중력 힘을 조절할 수 있으며, 다른 입자에는 영향을 미치지 않습니다.
- ramp를 사용한 옵션: affectGravity를 필드의 영향 램프에 연결
- 표현식을 사용한 옵션: particlesShape1.worldVelocity += gravity * affectGravity
- particle sampler를 사용한 옵션: 셰이더에서 더 고급 제어
- goal weights를 사용한 옵션: 속성을 곱셈자로 사용
단계별 수정된 코드
여기에 완전하고 수정된 구현이 있습니다. 경험하는 문제를 피하기 위해 정확히 이 순서를 따르세요.
현재 표현식을 삭제하고 처음부터 모든 것을 생성하세요. 때때로 손상된 표현식이 예측 불가능한 동작을 일으킵니다.
- 단계 1: per particle 동적 속성 affectGravity 추가
- 단계 2: Creation expression: particlesShape1.affectGravity = (rand(0,1) > 0.5) ? 1 : 0
- 단계 3: Runtime after dynamics: particlesShape1.velocity += <<0,-9.8 * affectGravity,0>>
- 단계 4: 인스턴스를 위한 indexp 표현식을 별도로 유지
더 나은 성능을 위한 최적화
런타임 after dynamics 표현식은 특히 수천 개의 입자와 함께 계산적으로 비용이 많이 들 수 있습니다. 복잡한 시스템의 경우 더 효율적인 대안을 고려하세요.
입자 goal이나 사용자 정의 필드는 일부 경우에 더 나은 성능으로 동일한 제어를 제공할 수 있습니다. 장면에 이상적인 균형을 찾기 위해 실험하세요.
- 간단한 움직임을 위한 표현식 대신 goal 사용
- 더 복잡한 시뮬레이션을 위한 nParticles 고려
- 조건부 로직이 있는 인스턴스를 위한 MASH 테스트
- 고급 입자 시스템을 위한 Bifrost 평가
표현식 없는 대안 솔루션
표현식이 계속 문제를 일으킨다면, 두 개의 별도 입자 시스템을 사용하는 대안 방법이 있습니다. 덜 우아하지만 더 안정적입니다.
중력이 있는 객체용 에미터와 중력이 없는 객체용 에미터를 생성한 후, 렌더에서 결과를 결합하세요. 이는 런타임 표현식의 필요성을 완전히 피합니다.
- 시스템 A: 정상 중력 입자
- 시스템 B: 힘 필드 없는 입자
- 두 시스템 간 무작위 배출
- 컴포지션이나 렌더 레이어에서 결합
이 솔루션을 구현한 후, 입자들이 마침내 중력에 대해 독립적인 결정을 내릴 것입니다... 일부는 아마도 반항적으로 우주에 떠다니며 다른 일부는 물리 법칙을 따를 것입니다 🌌