양 변경을 비롯한 출력 유형 하위 연산자에는 우선 순위 순서 및 실행 순서를 정의하기 위한 옵션이 있습니다. 복잡한 설정을 만들 때 이러한 옵션을 알고 있어야 합니다.
출력 하위 연산자에 의해 데이터 수정 및 처리 순서가 정의됩니다. 출력 하위 연산자에서 데이터를 수정할 수 있습니다. 데이터 흐름에서 그 위에 있는 하위 연산자로부터 파티클 데이터를 당기고 데이터를 파티클 특성으로 설정합니다.
실행 순서 값이 동일한 출력 하위 연산자는 동일한 입력 데이터를 처리합니다. 실행 순서 값이 동일한 경우 우선 순위 순서 값은 출력 하위 연산자가 업스트림에서 데이터를 당기는 순서를 정의합니다. 모든 데이터를 당긴 후에만 데이터가 파티클 특성에 적용됩니다.
하위 연산자에 다른 실행 순서 값이 있으면 동일한 입력 하위 연산자에서 데이터를 당기는 경우에도 다른 입력 데이터를 처리할 수 있습니다. 그 이유는 실행 순서가 더 낮은 출력 하위 연산자가 일부 파티클 특성의 데이터를 변경할 수 있기 때문입니다. 실행 순서가 더 높은 출력 하위 연산자가 데이터를 당기는 경우 이러한 데이터는 이미 수정된 상태일 수 있습니다.
파티클이 이벤트에 들어 와서 모든 새 파티클에 대해 초기 값을 계산해야 하는 경우를 고려해 보겠습니다. 그러면 모든 프레임에서 파티클 특성을 수정하고(파티클이 이벤트의 새 항목인지 여부는 관계 없음) 이러한 수정 중에 모든 파티클에서 초기 값을 설정해야 합니다.
이 시나리오에는 두 개의 데이터 스트림이 있습니다. 첫 번째 스트림은 초기 값을 계산하고 두 번째 스트림은 파티클 특성을 수정합니다. 첫 번째 스트림의 출력 하위 연산자는 실행 순서=1이어야 하며 그 필터 출력은 입력 표준 이벤트의 새 항목으로 설정될 수 있습니다. 두 번째 스트림의 출력 하위 연산자는 실행 순서=2여야 합니다.
다른 시나리오도 고려해 보겠습니다. 모든 파티클의 속도 데이터를 분석하고 일부 조건에 따라 두 개의 파티클 하위 세트를 정의하려고 합니다. 이때 각각의 속도는 다른 방식으로 수정됩니다. 이 시나리오에서는 실행 순서가 동일한 두 개의 출력 하위 연산자를 사용해야 합니다. 이런 방식으로 초기 입력 속도 값이 각 출력에 대해 동일하도록 보장합니다.
경우에 따라 양 변경 하위 연산자가 파티클 수를 변경하기 때문에 다른 하위 연산자와 해당 실행 순서 값을 공유할 수 없습니다. 프로그램의 안전 장치가 그렇게 하지 못하도록 방지합니다.
또한 실행 및 우선 순위 순서 그룹에는 사전/일반/사후 라디오 버튼이 있습니다. 이 옵션은 더 높은 수준에서 처리 순서를 정의합니다. 사전으로 설정되면 현재 이벤트의 연산자가 실행되기 전에 이 출력을 처리합니다. 일반으로 설정되면 출력 하위 연산자가 동일한 이벤트의 다른 연산자 사이에서 일반 순서로 실행됩니다. 사후로 설정되면 이 파티클 시스템의 모든 연산자 및 모든 테스트가 이 통합 단계에 대해 해당 작업을 끝낸 다음 출력을 처리합니다.
사전/일반/사후 사용을 보여주는 예를 보려면 포함된 파일 CollisionAsBody.max 를 여십시오.
이 예제에서는 데이터 연산자를 사용하여 "돈이 적게 들면서도 빠른" 전체 몸체 충돌을 생성합니다. 이미 알고 있겠지만 3ds Max의 파티클 시스템은 충돌 및 디플렉터와 관련하여 파티클을 점 엔티티로 취급합니다. 따라서 파티클에 볼 수 있는 크기의 모양이 있는 경우 모양이 디플렉터 표면을 침투하여 전체 시각적 효과를 손상시킬 수 있습니다. 이 예제는 파티클 데이터를 와이어링하여 상호 침투 양만큼 파티클 위치를 오프셋하는 방법을 보여줍니다.
먼저 사용자 정의 데이터 채널을 만들어 침투를 피하기 위해 필요한 위치 오프셋으로 실수 값을 저장합니다. 모든 새 파티클에 대해 이 값을 0으로 초기화합니다. 데이터 블록 01을 참조하십시오.
다른 모든 연산자 및 테스트가 해당 작업을 수행한 다음 침투 양을 계산하여 사후 단계에서 파티클 위치를 오프셋합니다. 이런 방식으로 침투를 방지하기 위해 파티클 위치를 조정하고 파티클은 렌더링할 준비가 됩니다. 오른쪽의 출력 연산자가 사후 단계에서 해당 작업을 수행합니다.
그런 다음 사전 단계에서 아무 일도 일어나지 않은 것처럼 충돌 테스트가 해당 작업을 계속하려면 파티클을 오프셋이 없는 제 위치로 돌려야 합니다.
파티클 시스템은 본래 기록 종속입니다. 즉, 파티클 시스템의 상태를 결정할 수 있도록 하려면(이를테면 프레임 100에서) 소프트웨어가 처음 파티클이 생성된 이후 이전의 모든 프레임 상태를 계산해야 합니다. 그 이유는 다른 매개변수(예: 속도)의 지속적인 변경으로 인해 파티클 특성(예: 파티클의 위치) 변경이 누적되기 때문입니다.
그러나 특정 설정의 경우 일부 파티클 특성은 기록 종속이 아니므로 파티클의 현재 상태에서 계산할 수 있습니다. 예를 들어 카메라와 같이 파티클이 무언가를 "보는" 경우 또는 파티클 속도를 따르는 경우의 파티클 방향입니다. 여기서 파티클 방향은 카메라를 향하는 경우처럼 파티클 위치 또는 파티클 속도에 따라 달라집니다. 이때 파티클의 현재 방향을 계산하기 위해 파티클의 전체 기록을 알아야 하는 것은 아닙니다. 현재 속도 또는 위치만 알면 됩니다.
그런 의미에서 파티클 방향을 계산하는 연산자는 기록 종속이 아닙니다. 시스템이 이전의 모든 프레임에서 실행되는 동안 현재 프레임을 가져오기 위해 연산자가 해야 하는 일은 아무 것도 없습니다. 연산자는 최종 프레임에서 파티클의 위치/속도를 분석하고 해당 파티클 방향을 계산하기 위해 최종 프레임에서만 작동해야 합니다.
출력 하위 연산자의 결과가 파티클의 기록에 종속되지 않는 것이 확실한 경우 기록 종속 옵션을 해제할 수 있습니다. 이렇게 하면 데이터 연산자가 최종 프레임에서만 작동하기 때문에 전체 계산 속도가 빨라집니다.