O conjunto de ferramentas Advanced Data Manipulation no Particle Flow utiliza uma variedade de tipos de dados; a seguir está uma lista completa com ilustrações de cada tipo como um conector de entrada de suboperador:
Boolean - Azul
Complex - Ciano
Equal - Verde
Integer - Anil
Matrix - Vermelho escuro
Object - Laranja
Pair - Rosa
Quaternion - Amarelo
Real - Vermelho
Time - Verde azulado
Vector - Violeta
As cores são utilizadas pelos conectores de entrada e de saída em Data View e, em alguns casos, por botões que permitem entradas adicionais como alternativas para especificar valores na interface regular.
A maioria dos tipos de dados são autoexplicativos. A seguinte discussão cobre o resto:
Alguns suboperators geram dados que não cabem convenientemente no Vector, Integer ou Time format. Portanto, dois novos tipos "artificiais" foram adicionados:
Pair = {vetor + integral}
Complex = {vetor + integral + tempo}(não os números complexos tradicionais).
A seguir está uma discussão de situações em que os tipos pair e complex são utilizados:
Uma das entradas do tipo Pair = {vetor + integral}, onde o vetor de entrada é a posição em coordenadas locais do objeto e a integral de entrada é o índice de objeto, como definido pelo sub-operador Select Object. O índice do objeto é necessário, pois o suboperator Object pode trabalhar com vários objetos de uma só vez. Se há um único objeto de referência para trabalhar então o valor da Integer deve ser definido para 0. Também, como um lembrete, índices no Data View são baseados em 0 (a contagem é iniciada a partir do 0). Isso é diferente do MAXScript, onde os índices são de baseados em 1. Portanto, se você tiver vários objetos de referência conforme definido no suboperador Select Object, então os índices são 0, 1, 2, e assim por diante.
A saída é do tipo Pair = {vetor + integral} onde Integer é um índice composto que contém um índice de objeto e um índice de face, e Vector é a posição nas coordenadas da face local. Quando o ponto mais próximo é calculado, o operador procura através de todos os objetos de referência, conforme definido pelo suboperator Select Object e localiza a face mais próxima, bem como o ponto mais próximo na superfície da face. As coordenadas da face local usam as arestas da face como os vetores de base.
A saída é do tipo Complex = {vetor + integral + tempo} onde Integer e Vector têm o mesmo significado, como de instância acima, e o Time é o tempo de colisão.
A opção pode ser usada para calcular a área da face de um objeto (ou o status de seleção de uma face). E parece que é suficiente para fornecer o índice composto como um índice de objetos (índice de objeto + índice de face). No entanto, o suboperator tem uma entrada de tipo Pair. Isso é feito para simplificar a fiação a partir da opção Closest Point que tem Pair como resultado de saída. Se o índice de objeto + índice de face são criados de forma diferente então você pode usar um suboperator Convert para criar um tipo Pair; use apenas um vetor zero como outro componente do tipo Pair.
Uma das entradas do tipo Pair = {Vector + Integer} onde o Vector e Integer têm o mesmo significado como na opção Closest Point.
A saída é do tipo Pair; o mesmo significado como na opção Closest Point.
A saída é do tipo Pair = {Vector + Integer} onde vetor é a posição em coordenadas universais e Número inteiro é o índice do objeto utilizado como um volume de espaço.
O único suboperator que produz o tipo de dados Equal é suboperator Parameter. O suboperator Parameter é particularmente útil para configurar (ou permitir que o usuário defina) o mesmo valor de parâmetro para diversos suboperators. Muito frequentemente, este parâmetro comum é exposto mais tarde na interface.
Um exemplo simples: você gostaria de fazer um Data Operator que coloca as partículas aleatoriamente na superfície de um objeto, e define uma velocidade aleatória inicial. É possível utilizar o suboperator Geometry aleatório (Random Surface Point) para a posição e o suboperator Vector para definir a velocidade de desvio para 360 graus para uma disseminação aleatória de direção.
Ambos suboperators têm o parâmetro Random Seed. Portanto, naturalmente, você gostaria de exibir o parâmetro Ramdom Seed para que o usuário possa brincar com a configuração caótica. Mas pode parecer estranho ter dois parâmetros Random Seed na interface. Portanto, é possível ligar ambos os parâmetros Seed nos suboperadores Geometry e Vector em um único suboperador Parameter com o tipo Uniqueness Seed. É possível expor Random Seed do suboperator Parameter.
O tipo de dado Equal tem subtipos: Real, Integer, Time, Sync e Seed. Cada um utiliza um tom de verde. O suboperador Parameter tem vários tipos de saída: Angle, Float, Percent, World (todos são tipos Real), Integer, Time, Animation Sync (como Sync) e o Uniqueness Seed (como Seed). Angle, Float, Percent e World apenas diferem em como eles são exibidos ao usuário na UI, todos eles são Real. É possível ligar a saída do Parameter somente para a correspondência de entradas E, que normalmente são bastante óbvias—se você vincula o Random Seed de um suboperador, o suboperador Parameter deve ter um tipo Uniqueness Seed também.
É possível viver sem o suboperador Parameter usando a técnica padrão 3ds Max de script-wiring, e fazendo script-wiring dos parâmetros dos suboperadores, ao invés de vinculá-los a um suboperador Parameter. No entanto, a montagem de script é mais demorada para configurar, não tem uma boa referência visual como o suboperator Parameter e está sujeito aos problemas de salvamento/carregamento e duplicação.
Às vezes é necessário colocar dois valores de integrais em um único valor, quando, por exemplo, uma integral é utilizada como um índice composto = {índice de objeto e índice de vértice/face}. Você pode utilizar o suboperador Convert para a) criar um índice composto de dados integrais; ou b) dividir o índice de objeto ou índice de face/vértice de um índice composto. Um índice composto não é um novo tipo de dado — uma forma de juntar mais informações em um canal de dados integral.