Конверсия Instancer’а в геометрию
Type: Python Script (py) Name: sag_instancerToGeometry Version: 1.4 Released: 2012.05.05 NEW REWORKED VERSION IS CALLED ark_instToGeo AND AVAILABLE HERE
v1.4 - corrected GUI for older maya versions v1.3: - doesn't set visibility to off prior to the starting frame of conversion - doesn't pay attention to 'start from current frame' if custom range is defined v1.2: - reworked GUI - uses long names correctly (no problems with objects of the same name anymore) - doesn't freeze source objects' rotations or error if channels have keyframes - keeps input connections for instances also - works with different rotation orders of source objects and instancer itself - each baked object is inside it's own group which actually gets all keyframes - works with any linear units of the scene (switches to cm and back, actually) v1.1: - duplicates now maintain original input connections - only translate, rotate, scale and visibility are keyframed now
Практически каждый раз когда использую instancer для размножения геометрии по частицам, в итоге неминуемо хочется перевести полученный результат в обычные объекты с ключевой анимацией, дабы подправить отдельные из них или удалить вовсе.
Вот наконец-то собрался и написал утилиту для решения этой задачи.
In: FX · Tagged with: instancer, maya, particles, python, sag_instancerToGeometry, script, tool, utility
Добавлена Галерея
В правом верхнем углу блога уже довольно давно располагается кнопочка на галерею моих последних работ, но вот только сейчас я довел последнюю до презентабельного состояния. Без лишних разглагольствований – приглашаю надавить на упомянутую кнопочку или проследовать по этой ссылке – Галерея 🙂
Initial значения партикловых атрибутов
Предположим, мы установили частицам initial state или попросту создали их с определенными значениями атрибутов кропотливо вымученным скриптом, а потом захотели изменить некоторые из этих значений… Допустим, спрайты дыма имеют разный начальный скейл и увеличиваются относительно него со временем, и мы хотим их сделать в два раза меньше… Или попросту изменить в несколько раз массу осколков разлетающегося объекта (которая, предположим, предварительно высчитана с учетом объема осколка), но не производя заново вычислений, сетапов и т.п.
In: FX · Tagged with: expression, initial state, maya, particle attribute, particles, runtimeAfterDynamics, runtimeBeforeDynamics
Новые старые статьи
Я закрываю свой старый сайт (теперь http://www.sigillarium.com/ ведет прямо в этот блог) и, в связи с этим, переношу сюда задним числом несколько старых статей, которые еще содержат ценную информацию (а так же для сохранения работоспособности линков на них с других ресурсов). За неоценимую помощь в технической стороне дела хочу поблагодарить Rastler, чей блог по фотографии можно посетить тут – Rastler Blog
Тайлинг процедурных текстур и Placement mapping
Небольшой трюк, вполне простой, но возможно не совсем очевидный. Для создания шероховатостей, детальной фактуры и прочей высокочастотности обычно используется какой-нить fractal или noise с большим числом repeat, что приводит к явному тайлингу:
Можно попытаться разбавить другими нойзами, но есть решение куда лучше…
In: Render · Tagged with: fractal, maya, noise, pattern, place2dTexture, placement, procedural, remap, texture, tiling
Проверка Нахождения частицы внутри объема и Влияния поля
Довольно часто возникает задача – определить находится ли частица внутри объекта и в зависимости от этого что-то с ней сделать (обычно убить 🙂 )
Можно проверять нормаль ближайшей точки на поверхности меша, но такая проверка для каждой частицы в каждом фрейме становится крайне медленной при большом их числе. Мой приятель написал плагин, который сразу возвращает внутри ли объема координата или нет, но все равно из-за скорости калькуляций часто приходилось отказываться от этого варианта.
Решение заключается в следующем – так как различные volume fields влияют на частицу, когда та попадает в их объем, если представить объект набором таких полей и проверять действует ли хоть одно из них на частицу, можно узнать внутри ли она объекта. Разумеется, для сложных форм результат будет неточным, но можно создать стопку полей, достаточно аккуратно их передающую. В любом случае, это будет сильно быстрее 🙂
In: FX · Tagged with: collision, expression, field, inputForce, maya, normal, particle attribute, particles, perfomance, runtimeAfterDynamics, runtimeBeforeDynamics, volume, volumeAxisField
miLabel для контроля mib_amb_occlusion
В шейдере mib_amb_occlusion имеются два уродливых, но полезных атрибута: id_inclexcl и id_nonself. Вкупе с кастомным атрибутом miLabel они позволяют определять какие именно объекты могут затенять, а какие нет, а так же определять затеняет ли объект сам себя. Ключевой для понимания момент – речь идет только о способности затенять, а не о способности принимать затенение.
In: Render · Tagged with: id_inclexcl, id_nonself, maya, mentalray, mib_amb_occlusion, miLabel, occlusion, shading, shadow
Равномерные трейлы частиц
Когда возникает задача получить партиклами какие-то гладкие линии, трейлы или струи, обычно надежды возлагаются на Blobby Surface или новый Output Mesh для nParticles. У обоих есть свои достоинства и недостатки, общий из которых – как добиться ровного трейла – при минимуме использованых частиц получить максимально гладкий результат.
Первым решением наверняка будет – генерить трейлы из основных частиц обычным emitter. Как раз при таком варианте трейлы будут получаться неравномерными – в зависимости от скорости движения основной частицы-генератора участки трейла будут состоять из разного количества частиц, где-то скучкованы, где-то значительные промежутки, для устранения которых придется увеличивать радиус blobby, что в свою очередь приведет к общему утолщению трейла, лишним вычислениям и т.п. Гораздо более эффективный способ, о котором и пойдет речь в данном посте – генерить частицы трейла партикловым экспрешеном в зависимости от расстояния, которое базовая частица-генератор проходит за фрейм, и располагать их равномерно между этими двумя позициями.
In: FX · Tagged with: age, birthTime, blobby, emit, expression, maya, oversampling, particle attribute, particle trail, particles
decomposeMatrix plugin
В стандартной поставке майи (как минимум начиная с 8.5), есть плагин с наверняка туманным для многих названием decomposeMatrix. Плагин добавляет довольно полезную ноду с одноименным названием, предназначенную для разложения стандартной 4×4 transform matrix на translation, rotation, scale и shear.
In: Rigging · Tagged with: choice, constraint, decomposeMatrix, matrix, maya, plugin, pointMatrixMult, worldPosition
Совокупление mip_matteshadow и IBL
Недавно немало помучался с тем как же заставить mip_matteshadow шейдер отображать сквозь себя текстуру IBL. В примерах повсеместно используется mip_mirrorball и mip_cameramap, но чего делать с обычным latlong изображением – ничего не нашел. Хотя видел предложение воспользоваться mib_lookup_spherical, но по-моему синхронизировать этот шейдер с вращениями IBL – большое западло. Сейчас опишу наденное мною простое и полезное решение.
In: Render · Tagged with: alpha, environment, ibl, image based lighting, maya, mentalray, mia_envblur, mib_color_mix, mib_opacity, mib_transparency, mip_matteshadow, shading, shadow