Difference between revisions of "Template:LSL Function/ParticleSystem/ru"

From Second Life Wiki
Jump to navigation Jump to search
Line 245: Line 245:
{{!}}- style="background-color:#e0e0e0;"
{{!}}- style="background-color:#e0e0e0;"
{{!}}colspan="2"{{!}}PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY
{{!}}colspan="2"{{!}}PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY
{{!!}}(''incomplete implementation'') acts the same as the PSYS_SRC_PATTERN_DROP pattern, it is believed that the original intention for this pattern was to invert the effect of the ANGLE parameters, making them delineate an area where particles were NOT to be sprayed. (effectively the inverse or opposite of the behavior of the ANGLE_CONE pattern).
{{!!}}(''введено не полностью'')
{{!}}align="center"{{!}}{{LSL_Hex|0x10|16}}
{{!}}align="center"{{!}}{{LSL_Hex|0x10|16}}
{{!}}-
{{!}}-
{{!}}colspan="2"{{!}}PSYS_SRC_BURST_RADIUS
{{!}}colspan="2"{{!}}PSYS_SRC_BURST_RADIUS
{{!!}}[[float]] {{LSL Param|radius}}
{{!!}}[[float]] {{LSL Param|radius}}
{{!!}}Specifies the distance from the emitter where particles will be created. This rule is ignored when the PSYS_PART_FOLLOW_SRC_MASK flag is set. A test in http://forums-archive.secondlife.com/327/f5/226722/1.html indicates that the maximum value is 50.00
{{!!}}Обозначает расстояние от эмиттера, на котором происходит образование частиц. Это правило игнорируется, когда установлен флаг PSYS_PART_FOLLOW_SRC_MASK. Испытания (http://forums-archive.secondlife.com/327/f5/226722/1.html) показывают, что максимальное значение параметра равно 50.0 .
{{!}}align="center"{{!}}16
{{!}}align="center"{{!}}16
{{!}}-
{{!}}-

Revision as of 09:26, 27 July 2012

spec

Определяет систему испускания частиц, которая устанавливает состояние испускателя (эмиттера) внутри примитива, в котором содержится скрипт. Другие скрипты, находящиеся в данном примитиве и вызывающие эту функцию, будут изменять состояние этого эмиттера. По сути, система испускания частиц, определённая данной функцией, является свойством примитива, как, например, цвет, форма, размеры, и т.д. . В каждом примитиве может быть только один эмиттер, расположенный в геометрическом центре и выровненный вдоль локальной оси Z в положительном направлении.

Это одна из нескольких функций, которые изменяют состояние эмиттера в примитиве; так, если вы хотите изменить состояние эмиттера (поменять систему частиц или вовсе выключить эмиттер), достаточно вызвать эту функцию с параметрами новой системы. Задание пустого списка правил ( {{{1}}}; ) выключит эмиттер.

По существу, частицы являются двумерными спрайтами, они всегда направлены в сторону камеры.

Значения правил и данных описаны ниже.

caveats

  1. При использовании системы частиц с ненулевым значением срока жизни эмиттера (PSYS_SRC_MAX_AGE) можно заметить, что система частиц иногда перезапускается самовольно, без вызова из скрипта. Это связано с глюком, который заставляет эмиттер "перезапускаться", когда какое-то свойство примитива обновляется или как-либо еще передаётся программе-просмотрщику (вьюверу). Для обхода этой ошибки вы можете воспользоваться таймером или принудительным вызовом llSleep, а потом, по прошествии нужного времени, отключить эмиттер. Пользователь Debbie Trilling опубликовал метод обхода здесь: http://forums-archive.secondlife.com/54/fa/260031/1.html#post1996465
  2. Вращение, запущенное посредством PSYS_SRC_OMEGA осуществляется относительно региональных координат, а не локальных координат примитива.
  3. Когда эмиттер создан в примитиве, его угол поворота устанавливается на нулевое значение (ZERO_ROTATION). При использовании PSYS_SRC_OMEGA эмиттер поворачивается. Если вы измените значение вектора при PSYS_SRC_OMEGA, эмиттер не вернется к нулевому углу, а останется в том значении угла вращения, в котором он был при остановке/изменении. Это может привести к тому, что частицы в примитиве с повернутым эмиттером будут отображаться отлично от таковых в "свежем" примитиве со "свежим" эмиттером.
  4. Частицы, движущиеся в сторону гуманоидного аватара, обозначенного при правиле PSYS_SRC_TARGET_KEY (при условии наличия флага PSYS_PART_TARGET_POS_MASK), будут попадать в центр его граничной рамки, который, к сожалению, находится в области паха. Если вы хотите, чтобы они попадали в другую часть тела аватара, вам придется расположить целевой примитив в требуемом месте назначения и использовать ключ этого примитива при правиле PSYS_SRC_TARGET_KEY.
  5. Программа-просмотрщик (вьювер), для улучшения своей работы, выбрасывает маленькие объекты из поля зрения на некотором расстоянии. Если примитив с эмиттером достаточно мал, чтобы быть вырезанным из поля зрения таким образом, испускаемые им частицы также не будут отображаться.


notes

  • По умолчанию, количество частиц выставлено на 4096. Это максимальное число частиц, которое будет отображено для всех активных систем испускания в радиусе зрения. При создании системы частиц желательно создавать их так, чтобы частиц было не слишком много и чтобы они не "захламляли" поле зрения, "вытесняя" другие испускатели. По существу, если вам не удается заставить свой эмиттер испускать столько частиц, сколько вам нужно, то возможно вас "вытесняют" другие эмиттеры в поле зрения. "Тормоза" программы-просмотрщика (малое число кадров в секунду) также могут послужить причиной этой неприятности, поскольку частицы визуализируются с относительно низким приоритетом. Наилучшее решение - при создании своей системы частиц найдите место, где мало других источников частиц, а также вещей, "тормозящих" ваш просмотрщик.
  • Когда частица сгенерирована, направление ее движения можно контролировать только посредством правила PSYS_SRC_ACCEL и флагов PSYS_PART_TARGET_POS_MASK и PSYS_PART_FOLLOW_SRC_MASK. Соответственно, сделать эмиттер, который будет создавать эффект "водоворота" (который вы можете наблюдать когда какой-то объект удаляется или что-то произносит, или когда аватар покидает сим) не представляется возможным. Однако, его можно воссоздать, используя движущийся примитив с эмиттером.

helpers

Полезные функции для сохранения/извлечения значений цвета и прозрачности в/из целых чисел:
<lsl>integer ColorAlphatoRGBA(vector color, float alpha) {

   return (((integer)(alpha   * 255.0) & 0xFF) << 24)

constants_nb

Правило Параметр правила Описание Значение
System Behavior
PSYS_PART_FLAGS integer flags Различные флаги, контролирующие поведение системы частиц. Значения флагов могут быть представлены в виде целых чисел в десятичном или шестнадцатеричном формате, или посредством перечисления через оператор | (ИЛИ) одной или нескольких флаговых констант, приведенных ниже: 0
V
a
l
u
e
s
PSYS_PART_BOUNCE_MASK Этот флаг заставляет частицы "отскакивать" от воображаемой горизонтальной плоскости, находящейся на высоте эмиттера. При "отскоке" частица поворачивает в противоположном направлении скорость и угол движения. Это работает только с частицами, находящимися над плоскостью и падающими на нее сверху. 0x004
PSYS_PART_EMISSIVE_MASK Частицы становятся максимально освещенными и независящими от окружающего освещения. Без этого флага освещенность частиц будет зависеть от окружающего освещения, в том числе и от точечных источников света. 0x100
PSYS_PART_FOLLOW_SRC_MASK Частицы будут двигаться относительно позиции эмиттера. Без этого флага частицы не зависимы от расположения или движения самого эмиттера. Следует учесть, что этот флаг отключает правило PSYS_SRC_BURST_RADIUS. 0x010
PSYS_PART_FOLLOW_VELOCITY_MASK Частицы поворачиваются своим "верхом" по направлению движения. Без этого флага частицы показаны так, как выглядят их текстуры (верх смотрит вверх, левая сторона - влево). 0x020
PSYS_PART_INTERP_COLOR_MASK Частицы изменяют свой цвет и прозрачность на протяжении жизни от стартовых значений (обозначенных при правилах PSYS_PART_START_ALPHA и PSYS_PART_START_COLOR) к конечным значениям (при PSYS_PART_END_ALPHA и PSYS_PART_END_COLOR). Изменение цвета/прозрачности представляет собой плавную интерполяцию. (Без этого флага конечные значения игнорируются, и частица на протяжении всей жизни имеет один и тот же цвет и прозрачность, заданные стартовыми параметрами -- прим. пер.) 0x001
PSYS_PART_INTERP_SCALE_MASK Размеры частицы на протяжении ее жизни изменяются от стартового значения (при PSYS_PART_START_SCALE) к конечному (при PSYS_PART_END_SCALE). (Без этого флага конечные значения игнорируются, и частица на протяжении всей жизни имеет один и тот же размер, заданный стартовым параметром -- прим. пер.) 0x002
PSYS_PART_TARGET_LINEAR_MASK Частицы двигаются по прямой в сторону цели, обозначенной при правиле PSYS_SRC_TARGET_KEY. В этом режиме правила PSYS_SRC_ACCEL, PSYS_SRC_BURST_RADIUS и некоторые другие игнорируются. 0x080
PSYS_PART_TARGET_POS_MASK Частицы во время своей жизни изменяют направление движения в сторону цели, обозначенной при правиле PSYS_SRC_TARGET_KEY, стараясь достичь ее в момент гибели. Следует учитывать, что если цель не обозначена, обозначена неправильно или выходит из поля видимости эмиттера, то целью становится сам примитив, содержащий эмиттер. 0x040
PSYS_PART_WIND_MASK На движение частиц влияет ветер. Он применяется к ним как вторичная сила. 0x008
PSYS_PART_BEAM_MASK (не введено) 0x200
LL_PART_HUD (устарело) 0x40000000
LL_PART_DEAD_MASK (устарело) 0x80000000
LL_PART_RANDOM_ACCEL_MASK (не введено) -
LL_PART_RANDOM_VEL_MASK (не введено) -
LL_PART_TRAIL_MASK (не введено) -
System Presentation
PSYS_SRC_PATTERN integer pattern Обозначает общую модель испускания частиц. 9
V
a
l
u
e
s
PSYS_SRC_PATTERN_EXPLODE Распыляет частицы вокруг эмиттера по сфере. Начальная скорость определяется правилами PSYS_SRC_BURST_SPEED_MIN и PSYS_SRC_BURST_SPEED_MAX. Угловые (ANGLE) параметры игнорируются. 0x02
PSYS_SRC_PATTERN_ANGLE_CONE Распыляет частицы по сфере, полусфере, конусу, кольцу, в зависимости от параметров при правилах PSYS_SRC_ANGLE_BEGIN и PSYS_SRC_ANGLE_END. Данная модель может имитировать модель EXPLODE, если задать параметры при правилах PSYS_SRC_ANGLE_BEGIN на 0.00000 и PSYS_SRC_ANGLE_END на 3.14159 (или PI) (или наоборот). 0x08
PSYS_SRC_PATTERN_ANGLE Распыляет частицы по плоскому кругу, полукругу, сектору или линии, в зависимости от параметров при правилах PSYS_SRC_ANGLE_BEGIN и PSYS_SRC_ANGLE_END. Круговая модель распыляет частицы в плоскости, перпендикулярной локальной оси X примитива. 0x04
PSYS_SRC_PATTERN_DROP Создает частицы, не имеющие изначальной скорости. Данная модель не принимает во внимание параметры при правилах PSYS_SRC_BURST_RADIUS, PSYS_SRC_BURST_SPEED_MIN и PSYS_SRC_BURST_SPEED_MAX, делает их равными 0. (Любая другая модель может вести себя как эта, если выставить значения PSYS_SRC_BURST_SPEED_MIN и PSYS_SRC_BURST_SPEED_MAX на 0). 0x01
PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY (введено не полностью) 0x10
PSYS_SRC_BURST_RADIUS float radius Обозначает расстояние от эмиттера, на котором происходит образование частиц. Это правило игнорируется, когда установлен флаг PSYS_PART_FOLLOW_SRC_MASK. Испытания (http://forums-archive.secondlife.com/327/f5/226722/1.html) показывают, что максимальное значение параметра равно 50.0 . 16
PSYS_SRC_ANGLE_BEGIN float angle_begin Specifies a half angle, in radians, of a circular or spherical "dimple" or conic section (starting from the emitter facing) within which particles will NOT be emitted. Valid values are the same as for PSYS_SRC_ANGLE_END, though the effects are reversed accordingly. If the pattern is PSYS_SRC_PATTERN_ANGLE, the presentation is a 2D flat circular section. If PSYS_SRC_PATTERN_ANGLE_CONE or PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY is used, the presentation is a 3D spherical section. Note that the value of this parameter and PSYS_SRC_ANGLE_END are internally re-ordered such that this parameter gets the smaller of the two values. 22
PSYS_SRC_ANGLE_END float angle_end Specifies a half angle, in radians, of a circular or spherical "dimple" or conic section (starting from the emitter facing) within which particles will NOT be emitted. Valid values are 0.0, which will result in particles being emitted in a straight line in the direction of the emitter facing, to PI, which will result in particles being emitted in a full circular or spherical arc around the emitter, not including the "dimple" or conic section defined by PSYS_SRC_ANGLE_BEGIN. If the pattern is PSYS_SRC_PATTERN_ANGLE, the presentation is a 2D flat circular section. If PSYS_SRC_PATTERN_ANGLE_CONE or PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY is used, the presentation is a 3D spherical section. Note that the value of this parameter and PSYS_SRC_ANGLE_BEGIN are internally re-ordered such that this parameter gets the larger of the two values. 23
PSYS_SRC_INNERANGLE float angle_inner DEPRECATED: Use PSYS_SRC_ANGLE_BEGIN instead. Works similar to its replacement rule, except the edge of the section is aligned with the emitter facing, rather than its center. 10
PSYS_SRC_OUTERANGLE float angle_outer DEPRECATED: Use PSYS_SRC_ANGLE_END instead. Works similar to its replacement rule, except the edge of the section is aligned with the emitter facing, rather than the section's center. 11
PSYS_SRC_TARGET_KEY key target Specifies the key of a target object, prim, or agent towards which the particles will change course and move. They will attempt to end up at the geometric center of the target at the end of their lifetime. Requires the PSYS_PART_TARGET_POS_MASK flag be set. caveat 4 20
Particle Appearance
PSYS_PART_START_COLOR vector color_start A vector specifying the color of the particles upon emission. 1
PSYS_PART_END_COLOR vector color_end A vector specifying the color the particles transition to during their lifetime. Only used if the PSYS_PART_INTERP_COLOR_MASK flag is set. 3
PSYS_PART_START_ALPHA float alpha_start Specifies the alpha of the particles upon emission. Valid values are in the range 0.0 to 1.0. Lower values are more transparent; higher ones are more opaque. 2
PSYS_PART_END_ALPHA float alpha_end Specifies the alpha the particles transition to during their lifetime. Only used if the PSYS_PART_INTERP_COLOR_MASK flag is set. Valid values are the same as PSYS_PART_START_ALPHA. 4
PSYS_PART_START_SCALE vector scale_start Specifies the scale or size of the particles upon emission. Valid values for each direction are 0.03125 to 4.0, in meters. The actual particle size is always a multiple of 0.03125. Smaller changes don't have any effect. Since particles are essentially 2D sprites, the Z component of the vector is ignored and can be set to 0.0. 5
PSYS_PART_END_SCALE vector scale_end Specifies the scale or size the particles transition to during their lifetime. Only used if the PSYS_PART_INTERP_SCALE_MASK flag is set. Valid values are the same as PSYS_PART_START_SCALE. 6
PSYS_SRC_TEXTURE string texture Specifies the name of a texture in the emitter prim's inventory to use for each particle. Alternatively, you may specify an asset key UUID for a texture. If using llLinkParticleSystem and texture is not a UUID, texture must be in the emitter prim (not necessarily with the script). 12
Particle Flow
PSYS_SRC_MAX_AGE float duration_system Specifies the length of time, in seconds, that the emitter will operate upon coming into view range (if the particle system is already set) or upon execution of this function (if already in view range). Upon expiration, no more particles will be emitted, except as specified above. Zero will give the particle system an infinite duration. (caveat 1) 19
PSYS_PART_MAX_AGE float duration_particle Specifies the lifetime of each particle emitted, in seconds. Maximum is 30.0 seconds. During this time, the particle will appear, change appearance and move according to the parameters specified in the other sections, and then disappear. 7
PSYS_SRC_BURST_RATE float burst_sleep Specifies the time interval, in seconds, between "bursts" of particles being emitted. Specifying a value of 0.0 will cause the emission of particles as fast as the viewer can do so. 13
PSYS_SRC_BURST_PART_COUNT integer burst_particle_count Specifies the number of particles emitted in each "burst". 15
Particle Motion
PSYS_SRC_ACCEL vector acceleration Specifies a directional acceleration vector applied to each particle as it is emitted, in meters per second. Valid values are 0.0 to 100.0 for each direction both positive and negative, as region coordinates. 8
PSYS_SRC_OMEGA vector omega Specifies the rotational spin of the emitter in radians per second along each axis. This "unsticks" the emitter facing from the prim's positive Z axis and is noticeable in directional presentations. Prim spin (via llTargetOmega) has no effect on emitter spin. (caveat 2 and caveat 3) 21
PSYS_SRC_BURST_SPEED_MIN float speed_min Specifies the minimum value of a random range of values which is selected for each particle in a burst as its initial speed upon emission, in meters per second. Note that the value of this parameter and PSYS_SRC_BURST_SPEED_MAX are internally re-ordered such that this parameter gets the smaller of the two values. 17
PSYS_SRC_BURST_SPEED_MAX float speed_max Specifies the maximum value of a random range of values which is selected for each particle in a burst as its initial speed upon emission, in meters per second. Note that the value of this parameter and PSYS_SRC_BURST_SPEED_MIN are internally re-ordered such that this parameter gets the larger of the two values. 18
LL_PART_* constants are only found in viewer - indra/llmessage/llpartdata.h , those flags in red have been commented out.


deepnotes

Missing 14

There is a missing constant which would have the value 14, the underlying enumeration LLPSScriptFlags has that as LLPS_SRC_BURST_DURATION, the value is used nowhere else in the client source. This isn't surprising considering that the burst duration is dependent on the values of PSYS_SRC_BURST_PART_COUNT and PSYS_SRC_BURST_RATE.

Signature

integer PSYS_PART_FLAGS = 0;
integer PSYS_PART_BOUNCE_MASK = 0x004;
integer PSYS_PART_EMISSIVE_MASK = 0x100;
integer PSYS_PART_FOLLOW_SRC_MASK = 0x010;
integer PSYS_PART_FOLLOW_VELOCITY_MASK = 0x020;
integer PSYS_PART_INTERP_COLOR_MASK = 0x001;
integer PSYS_PART_INTERP_SCALE_MASK = 0x002;
integer PSYS_PART_TARGET_LINEAR_MASK = 0x080;
integer PSYS_PART_TARGET_POS_MASK = 0x040;
integer PSYS_PART_WIND_MASK = 0x008;
integer PSYS_SRC_PATTERN = 9;
integer PSYS_SRC_PATTERN_EXPLODE = 0x02;
integer PSYS_SRC_PATTERN_ANGLE_CONE = 0x08;  
integer PSYS_SRC_PATTERN_ANGLE = 0x04;
integer PSYS_SRC_PATTERN_DROP = 0x01;
integer PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY = 0x10;
integer PSYS_SRC_BURST_RADIUS = 16;
integer PSYS_SRC_ANGLE_BEGIN = 22;
integer PSYS_SRC_ANGLE_END = 23;
integer PSYS_SRC_INNERANGLE = 10;//deprecated
integer PSYS_SRC_OUTERANGLE = 11;//deprecated
integer PSYS_SRC_TARGET_KEY = 20;
integer PSYS_PART_START_COLOR = 1;
integer PSYS_PART_END_COLOR = 3;
integer PSYS_PART_START_ALPHA = 2;
integer PSYS_PART_END_ALPHA = 4;
integer PSYS_PART_START_SCALE = 5;
integer PSYS_PART_END_SCALE = 6;
integer PSYS_SRC_TEXTURE = 12;
integer PSYS_SRC_MAX_AGE = 19;
integer PSYS_PART_MAX_AGE = 7;
integer PSYS_SRC_BURST_RATE = 13;
integer PSYS_SRC_BURST_PART_COUNT = 15;
integer PSYS_SRC_ACCEL = 8;
integer PSYS_SRC_OMEGA = 21;
integer PSYS_SRC_BURST_SPEED_MIN = 17;
integer PSYS_SRC_BURST_SPEED_MAX = 18;