p Custom
Пользовательские выражения частиц
pCustom — программируемый particle-процессор: через выражения он напрямую пересчитывает position, velocity, rotation, spin, size, color и другие свойства уже существующих частиц, а два отдельных image-входа позволяют читать пиксели внутри формул.
Particle data от pEmitter, pImageEmitter, pMerge или другой particle-ноды.
pCustom
Обзор
Что делает pCustom
pCustom ставится внутри particle-цепочки между pEmitter/pImageEmitter и pRender. Он не создаёт частицы и не является обычным image-effect: нода получает существующий particle-stream, вычисляет выражения и записывает новые значения в свойства каждой подходящей частицы.
Главное отличие от pCustomForce — уровень вмешательства. pCustomForce добавляет вычисляемую силу/torque к симуляции, а pCustom может напрямую переписывать particle state: position, velocity, rotation, spin, size, color и другие доступные каналы. Поэтому pCustom мощнее, но гораздо легче случайно сделать движение нестабильным или неестественным.
У pCustom три постоянных входа: оранжевый Particles, зелёный Image 1 и magenta Image 2. Image 1/2 существуют специально для custom image calculations и pixel-read functions. Это реальные 2D image inputs, а не маски и не particle-потоки.
Четвёртый вход появляется условно. При Region = Bitmap или Mesh Fusion создаёт dynamic Region socket: для Bitmap он принимает 2D image/selectable channel, для Mesh — 3D mesh. Resolve 21 описывает цвет этого входа как teal или white в зависимости от порядка/режима его появления.
Numbers дают восемь анимируемых Number In 1–8. В выражениях текущие значения доступны как n1…n8. Руководство также документирует time-sampling форму n#_at(t), поэтому Number In можно использовать как публичные art-directable controls вместо зашитых констант.
Positions фактически представлены четырьмя 3D-контролами Position 1–4 с X/Y/Z. В актуальном Resolve 21 manual заголовок раздела ошибочно написан как Position 1–8, но снимок Inspector и таблица переменных показывают Position 1–4 и p1x/p1y/p1z … p4x/p4y/p4z. На странице фиксируем именно проверяемые четыре позиции.
Setup 1–8 предназначены для вычислений, которые не зависят от конкретной частицы и могут быть посчитаны один раз за кадр перед остальными выражениями. Это подходящее место для глобальных коэффициентов, времени, общей математики и других повторно используемых значений.
Intermediate 1–8 выполняются после Setup и используются как следующий слой промежуточной математики перед Particle expressions. Так длинную формулу можно разложить на понятные этапы вместо одного нечитаемого выражения в Position или Velocity.
В тексте Resolve 21 есть внутреннее несоответствие по диапазонам переменных результатов: Inspector предлагает восемь Setup и восемь Intermediate полей, prose явно называет i1…i8 для Intermediate, а сводная таблица местами сокращает Setup/Intermediate до первых четырёх. Поэтому первые четыре переменные считаются бесспорно документированными, а обращения к 5–8 лучше проверить на целевой сборке Resolve перед публикацией production-rig.
Particle tab — основной слой pCustom. В нём доступны выражения для position px/py/pz, velocity vx/vy/vz, rotation rx/ry/rz и spin sx/sy/sz. Важный принцип: выражение вычисляет новое значение свойства; если написать `vx + n1`, текущее vx участвует в следующем пересчёте и эффект может накапливаться по кадрам.
Кроме трансформационных свойств pCustom предоставляет текущие size, id и цвет r/g/b/a, а также time, age и lifespan. Это позволяет связывать вид или движение частицы с её возрастом, уникальным идентификатором, текущим размером или временем композиции.
Image 1/2 имеют собственные aspect-corrected particle coordinates pxi1/pyi1 и pxi2/pyi2, а w1/h1 и w2/h2 дают размеры подключённых изображений. Все операторы, функции и conditional statements класса Custom применимы и к pCustom, включая pixel-read функции вроде getr1w(x,y) или getz2b(x,y).
Region предоставляет не только фильтр Conditions. В expressions доступны rgnhit, rgndist, condscale, координаты пересечения rgnix/rgniy/rgniz и surface normal rgnnx/rgnny/rgnnz. Благодаря этому можно строить математическое поведение, которое знает о контакте с областью, расстоянии до неё и направлении поверхности.
mass присутствует в официальном списке exposed particle properties, но руководство прямо отмечает, что сейчас это значение ничем не используется. Не стройте рабочую физику вокруг mass без отдельной проверки конкретной версии.
Conditions применяются до пользовательского изменения: Probability рассчитывается для каждой частицы на каждом кадре; Start/End Age ограничивают нормализованную долю lifespan; Set Mode и Set 1–32 фильтруют уже назначенные upstream Sets.
Region Mode и Region добавляют пространственное условие. Встроенные Bezier, Cube, Line, Rectangle и Sphere не требуют внешнего кабеля. Bitmap и Mesh создают dynamic Region input и не должны путаться с постоянными Image 1/Image 2 — image inputs дают данные формулам, Region определяет, где действует сама нода.
pCustom не обязан использовать все уровни одновременно. Для простой формулы достаточно Particles + одного Particle expression. Numbers, Positions, Images, Setup/Intermediate, Conditions и Region подключайте только тогда, когда они действительно упрощают или делают управляемой задачу.
Разрабатывать pCustom безопаснее на маленьком предсказуемом particle-stream. Сначала измените один канал, зафиксируйте Probability = 1 и отключите пространственные ограничения. Затем добавляйте Inputs, Conditions и Region по одному и проверяйте playback, потому что состояние частиц развивается во времени.
Финальный результат оценивайте после pRender. pCustom сам не создаёт RGBA-кадр: он меняет данные частиц. Image 1/Image 2 могут быть обычными изображениями, но это вспомогательные источники для вычислений, а не изображение на выходе pCustom.
Когда применять
Пересчитать траекторию частицы точной математической формулой вместо набора готовых force-нод.
Управлять velocity, rotation или spin через собственные выражения.
Связать движение/вид с age, lifespan, id, time или текущим particle state.
Вынести коэффициенты эффекта в Number In 1–8 и анимировать их как обычные controls.
Использовать Position 1–4 как 3D-опорные точки для процедурного движения.
Сэмплировать Image 1/Image 2 через pixel-read functions и менять свойства частиц по содержимому изображения.
Реагировать на пересечение Region через rgnhit, rgndist и normal/intersection variables.
Ограничить custom-логику по Probability, возрасту, Sets или пространственной Region.
pCustom в контексте
Скриншоты из статьи. Откройте изображение, чтобы рассмотреть его крупнее.
Пример для pCustom.
Оригинальное изображениеПример для pCustom.
Оригинальное изображениеПример для pCustom.
Оригинальное изображениеПример для pCustom.
Оригинальное изображениеПример для pCustom.
Оригинальное изображениеПример для pCustom.
Оригинальное изображениеПример для pCustom.
Оригинальное изображение