Конверсия Instancer’а в геометрию|Convert Instancer into geometry


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 для размножения геометрии по частицам, в итоге неминуемо хочется перевести полученный результат в обычные объекты с ключевой анимацией, дабы подправить отдельные из них или удалить вовсе.

Almost every time I use instancer to duplicate geometry via particles, I inevitably want to convert it’s result into standard keyframed objects to modify or simply delete specific ones.

Вот наконец-то собрался и написал утилиту для решения этой задачи.

At last I’ve put myself together and have written a tool for this task.

sag_instancerToGeometry Interface

Read the rest of this post »

Posted on November 14, 2009 at 20:37 by · Permalink · 59 Comments
In: FX · Tagged with: , , , , , , ,

Добавлена Галерея|Gallery added

В правом верхнем углу блога уже довольно давно располагается кнопочка на галерею моих последних работ, но вот только сейчас я довел последнюю до презентабельного состояния. Без лишних разглагольствований – приглашаю надавить на упомянутую кнопочку или проследовать по этой ссылке – Галерея 🙂

There’s a button to the gallery of my recent works in the top right corner of the blog page. Actually, for a pretty long time already, but only today I’ve finally made it presentable. So, without further ado – you’re welcome to push the mentioned button or the following link – Gallery 🙂

Posted on August 10, 2009 at 22:05 by · Permalink · Leave a comment
In: Misc

Initial значения партикловых атрибутов|Initial values of particle attributes

Предположим, мы установили частицам initial state или попросту создали их с определенными значениями атрибутов кропотливо вымученным скриптом, а потом захотели изменить некоторые из этих значений… Допустим, спрайты дыма имеют разный начальный скейл и увеличиваются относительно него со временем, и мы хотим их сделать в два раза меньше… Или попросту изменить в несколько раз массу осколков разлетающегося объекта (которая, предположим, предварительно высчитана с учетом объема осколка), но не производя заново вычислений, сетапов и т.п.

Let’s say, we’ve set initial state for our particles or just have created them with some defined attribute values via meticulously crafted script, and now we want to change some of them… For example, smoke sprites have various starting scale and then they grow larger with time from it, and we want to make them half their size… Or we simply want to modify mass of exploding object‘s shards (that, let’s say, has been precalculated with respect to the volume of the shard), but without recalculations, re-setups and so on.

Particles with inital mass for each shard

Particles with initial mass for each shard

Read the rest of this post »

Posted on August 9, 2009 at 22:02 by · Permalink · Leave a comment
In: FX · Tagged with: , , , , , ,

Новые старые статьи|New old articles

Я закрываю свой старый сайт (теперь http://www.sigillarium.com/ ведет прямо в этот блог) и, в связи с этим, переношу сюда задним числом несколько старых статей, которые еще содержат ценную информацию (а так же для сохранения работоспособности линков на них с других ресурсов). За неоценимую помощь в технической стороне дела хочу поблагодарить Rastler, чей блог по фотографии можно посетить тут – Rastler Blog

I’m closing my old site (now http://www.sigillarium.com/ leads right into this blog) and thereby moving several old articles that still have valuable info (and also to keep links from other resources working) as backdated posts here. For invaluable help in technical aspects of this deal I want to thank Rastler – check his photography blog here – Rastler Blog

Posted on July 10, 2009 at 05:08 by · Permalink · Leave a comment
In: Misc

Тайлинг процедурных текстур и Placement mapping|Tiling procedurals and Placement mapping

Небольшой трюк, вполне простой, но возможно не совсем очевидный. Для создания шероховатостей, детальной фактуры и прочей высокочастотности обычно используется какой-нить fractal или noise с большим числом repeat, что приводит к явному тайлингу:

A little trick, pretty simple, but maybe not very obvious. To create coarse surfaces, detailed textures and other high frequency stuff we often use fractal or noise with high value of repeat, that leads to visible tiling:

Fractal with high repeat value reveals tiling

Fractal with high repeat value reveals tiling

Можно попытаться разбавить другими нойзами, но есть решение куда лучше…

We can try to mix it with other noises, but there is a better solution…

Read the rest of this post »

Posted on July 5, 2009 at 03:15 by · Permalink · 12 Comments
In: Render · Tagged with: , , , , , , , , ,

Проверка Нахождения частицы внутри объема и Влияния поля|Particle inside a volume and Field Influence checks

Довольно часто возникает задача – определить находится ли частица внутри объекта и в зависимости от этого что-то с ней сделать (обычно убить 🙂 )

Often there’s a need to check whether a particle is inside an object or not and based on that to make something with it (usually kill 🙂 )

Можно проверять нормаль ближайшей точки на поверхности меша, но такая проверка для каждой частицы в каждом фрейме становится крайне медленной при большом их числе. Мой приятель написал плагин, который сразу возвращает внутри ли объема координата или нет, но все равно из-за скорости калькуляций часто приходилось отказываться от этого варианта.

We can check the normal of nearest point on mesh, but such a calculation for each particle in each frame becomes very slow with increase of their amount. My friend has written a plugin that returns right away whether a coordinate is inside or outside the volume, but anyway due to slow speed of calculations I often had to avoid this method.

Решение заключается в следующем – так как различные volume fields влияют на частицу, когда та попадает в их объем, если представить объект набором таких полей и проверять действует ли хоть одно из них на частицу, можно узнать внутри ли она объекта. Разумеется, для сложных форм результат будет неточным, но можно создать стопку полей, достаточно аккуратно их передающую. В любом случае, это будет сильно быстрее 🙂

The solution is this – since various volume fields affect a particle when it gets inside their volume, if we can represent the object with a number of such fields and check whether any of them influence a particle, we can find out if it is inside the object. Of course, for difficult forms the result will be inaccurate, but we can create a pack of fields that represent them pretty closely. In any case, that’d be much faster 🙂

Read the rest of this post »

miLabel для контроля mib_amb_occlusion|miLabel to control mib_amb_occlusion

В шейдере mib_amb_occlusion имеются два уродливых, но полезных атрибута: id_inclexcl и id_nonself. Вкупе с кастомным атрибутом miLabel они позволяют определять какие именно объекты могут затенять, а какие нет, а так же определять затеняет ли объект сам себя. Ключевой для понимания момент – речь идет только о способности затенять, а не о способности принимать затенение.

There’re two ugly but useful attributes in mib_amb_occlusionid_inclexcl and id_nonself. Along with custom miLabel attribute they can define which objects can occlude, which ones can’t and whether objects self-occlude or not. Key thing to understand here – it is question of just an ability to occlude, not of ability to receive occlusion.

Disabling self-occlusion with miLabel attribute

Disabling self-occlusion with miLabel attribute

Read the rest of this post »

Posted on June 6, 2009 at 23:24 by · Permalink · 2 Comments
In: Render · Tagged with: , , , , , , , ,

Равномерные трейлы частиц|Uniform Particle Trails

Когда возникает задача получить партиклами какие-то гладкие линии, трейлы или струи, обычно надежды возлагаются на Blobby Surface или новый Output Mesh для nParticles. У обоих есть свои достоинства и недостатки, общий из которых – как добиться ровного трейла – при минимуме использованых частиц получить максимально гладкий результат.

When the task becomes to get smooth lines, trails or flows/streams via particles, most hopes are put upon Blobby Surface or new Output Mesh for nParticles. Both have their own advantages and problems, a mutual one is how to generate a uniform trail – to get smoothest result with smallest amount of particles used.

Первым решением наверняка будет – генерить трейлы из основных частиц обычным emitter. Как раз при таком варианте трейлы будут получаться неравномерными – в зависимости от скорости движения основной частицы-генератора участки трейла будут состоять из разного количества частиц, где-то скучкованы, где-то значительные промежутки, для устранения которых придется увеличивать радиус blobby, что в свою очередь приведет к общему утолщению трейла, лишним вычислениям и т.п. Гораздо более эффективный способ, о котором и пойдет речь в данном посте – генерить частицы трейла партикловым экспрешеном в зависимости от расстояния, которое базовая частица-генератор проходит за фрейм, и располагать их равномерно между этими двумя позициями.

First decision that comes to mind is to generate particle trails from base particles using standard emitter. Actually, exactly this way trails would be non-uniform – depending on the speed of main particle-generator, sections of it’s trail would consist of different amount of particles, clumps here, breaks there. To eliminate them you’d need to increase blobby radius that’d thicken overall trail etc. Much more efficient method that I’m going to describe in this post – to generate particle trail via particle expression based on distance that basic particle-generator moves per frame and place them uniformly between this two positions.

Read the rest of this post »

Posted on May 24, 2009 at 21:37 by · Permalink · 13 Comments
In: FX · Tagged with: , , , , , , , , ,

decomposeMatrix plugin

В стандартной поставке майи (как минимум начиная с 8.5), есть плагин с наверняка туманным для многих названием decomposeMatrix. Плагин добавляет довольно полезную ноду с одноименным названием, предназначенную для разложения стандартной 4×4 transform matrix на translation, rotation, scale и shear.

In a standard maya package (at least since 8.5) there’s plugin with a rather foggy for a lot of people name decomposeMatrix. This plugin adds a pretty useful node with the same title that could be used to convert standard 4×4 transform matrix to translation, rotation, scale and shear.

decomposeMatrix Interface

decomposeMatrix Interface

Read the rest of this post »

Posted on May 23, 2009 at 03:33 by · Permalink · 4 Comments
In: Rigging · Tagged with: , , , , , , ,

Совокупление mip_matteshadow и IBL|Copulating mip_matteshadow & IBL

Недавно немало помучался с тем как же заставить mip_matteshadow шейдер отображать сквозь себя текстуру IBL. В примерах повсеместно используется mip_mirrorball и mip_cameramap, но чего делать с обычным latlong изображением – ничего не нашел. Хотя видел предложение воспользоваться mib_lookup_spherical, но по-моему синхронизировать этот шейдер с вращениями IBL – большое западло. Сейчас опишу наденное мною простое и полезное решение.

Just recently had a lot of headache trying to force mip_matteshadow shader to reveal IBL texture through itself. Multiple examples on the web utilize mip_mirrorball and mip_cameramap, but what to do with simple latlong image – found nothing. Actually, there were suggestions to use mib_lookup_spherical, but in my opinion synchronizing it with IBL rotations is a pain in the ass. I’ll describe a simple and useful solution I’ve found.

IBL and ground plane to catch shadows

IBL and ground plane to catch shadows

Read the rest of this post »