Доброго времени суток) Впечатленный работой abnoksius полез ковырять партиклы, а русскоязычных туторов для соурс не нашел. По крайней мере "партиклы source" ведут на страницу сталкера.
Решил перевести кусок валв-вики.
(
http://developer.valvesoftware.com/...System_Overview)
И еще. Я не шибко крутой переводчик, поэтому более или менее технически грамотно написано только то, что я уже сам проверил
Создание первой системы частиц.
Часто проще взять готовую систему и модифицировать ее под свои нужды. Чтобы создать систему достаточно нажать кнопку "Create" и ввести название системы.
Сейчас вы создали полностью пустую систему. Без каких-либо плагинов она не будет ничего делать. Существуют несколько основных компонентов, которые нужно добавить. Итак, начнем.
Для начала нужно добавить "Animated Sprite Renderer" - он будет рендерить систему.
Далее, нам захочется указать где будут создаваться партиклы. Идем в "Initiolizers" добавляем "Position Within Sphere Initializer". Установим максимальную и минимальную скорость на 64. Без установки начальной позиции партиклы не будут знать откуда им начинать появляться.
Далее добавим "Continious Emitter". Должен появиться белый квадрат. Будет изучаться целая туча партиклов (1000/1004) с текстурой по умолчанию.
Не смотря на то, что для партиклов была установлена минимальная и максимальная скорость, они не движутся. Также они постоянно создаются и никуда не исчезают. Это потому, что у них нет оператора. Даже не смотря на то, что у них установлена начальная позиция и скорость, ничего не будет происходить.
Нам нужно два оператора. Первый - "Movement Basic". Он позволяет партиклам двигаться. Второй - "Lifespan Decay". Этот оператор будет убивать партиклы по истечению срока жизни. Сейчас вы должны наблюдать как движутся партиклы и исчезают через секунду. По дефолту срок жизни партикла - 1 секунда.
Срок жизни партикла устанавливается во время создания, для того чтобы его имзенить добавим "Lifespan Random Initializer".
Почти все инициализаторы и операторы поддерживают случайные значения в заданном интервале. Если нужно, чтобы частицы жили от 2х до 4х секунд, установим соответсвующие значение в поля min/max рандомного инициализатора.
Теперь поменяем текстуру. Зайдем в "Properties" и установим другой материал для нашего спрайта. Материал партикла должен использовать SpriteCard шейдер (ищите текстуры имеющие в названии пути до них particle).
Теперь добавим "Alpha Fade Out Random" оператор. Партиклы будут "испаряться" в течение промежутка их жизни. По умолчанию - это последние 25% жизни.
Партиклы и производительность
Максимальное количество партиклов
По умолчанию система может содержать не более 1004 партиклов. Память выделяется статически под систему целиком, т.е. под 1004 партикла. Так что, после настройки системы стоит посмотреть на счетчик реально ипользуемых партиклов и ограничить их максимальное число реально используемым.
Поточность.
Партиклы используют многопоточность посистемно. Если у вас много систем, то каждая система будет помещена в свой поток (?). Так что стоит разделять сложные системы на множества, дабы ощутить всю радость поточности. Также, система и ее дети находятся в одном потоке, поскольку должны обмениваться данными. И не стоит забывать о ряде ограничений, делающим подобный подход не всегда оправданным, например в случае не шибко больших систем. (?)
SIMD
В данным момент большинство операторов, инициализаторов и т.д. работают в "SIMD" (Single instruction, multiple data;
http://ru.wikipedia.org/wiki/SIMD). Это означает, что на текущем железе партиклы обсчитываются по 4 штуки за раз (?)
Поэтому стоит ограничивать кол-во партиклов значением кратным четырем (например, округлять максимальное кол-во партиклов в меньшую сторону), таким образом система частиц будет использоваться более эффективно. Это не даст огромного прироста производительности, но все же.
Перерисовка (overdraw)
Перерисовка вызвана наложением слоев друг на друга. В vmt есть полезные параметры: - $minfadesize && $maxfadesize. Партикл начинает появляться/исчезать в зависимости от использованного места на экране (?)
- $maxsize - максимальный размер, которого может достигнуть партикл
- $minsize
- $blendframes 0/1. По умолчанию анимированные текстуры смешиваются из кадров попарно (?).
/*
Тут мне стало лень это переводить.
*/
Рендеры системы частиц.
render_animated_sprites
Рендерит анимированные спрайты в различных ориентациях.
animation rate
Скорость анимации
orientation_type
Тип ориентации:
0 - Billboarded (направлены на камеру)
1 - фиксированное значение по оси Z и вращение вокруг x/y
2 - фиксированное значение по оси X и Y и вращение вокруг Z (лицом наверх
)
orientation_control_point
Позволяет установить ориентацию, но не работает (с).
render_rope
Рендерит все партиклы системы как одну длинную веревку. Сглаженность регулируется через изменение texel_size и subdivision_count. Уничтожение партиклов будет сопровождаться перерисовкой веревки для достижения ее непрерывности, а это в свою очередь будет сопровождаться миганием. Поэтому случайный срок жизни частицы для этого случая - ад.
render_screen_velocity_rotate
В валв-вики на этом месте ничего нет. Эксперименты ничего не дали.
render_sprite_trail
Рендеринг анимированных спрайтов со следами, длина которых (?) основана на их скорости.
(я лично докрутился до эффекта "через звезды", как в ласт главе хл2)
Излучатели частиц.
emit_instantaneously
Излучает частицы вспышкой.
emission_start_time
Время начала излучения.
num_to_emit
Количество партиклов в вспышке.
num_to_emit_minimum
The minimum number of particles to emit in a burst.
Минимальное количество партиклов.
Любое значение, отличное от -1 будет означать излучение случайного числа частиц в диапазоне между указанным в этом поле значением и num_to_emit
maximum emission per frame
Максимальное число партиклов на фрейм. Например, если фпс=30, а max_emission_per_frame=1, то за секунду будет создано 30 партиклов.
emit_continuously
Продолжительное излучение частиц в течение указанного периода времени.
emission_start_time
Время начала излучения частиц (секунды)
emission_rate
Количество создаваемых партиклов в секунду
emission_duration
Время излучения частиц.
emit noise
(пустота)
п.с. пока больше ничего не смотрел, может потом еще чего-то переведу своим надмозгом, если конечно такой перевод устраивает кого-то