Докуметация Cтарт Статьи Форум Лента Вход
Не официальное русскоязычное сообщество
Главная
    Документация jMonkeyEngine
        jMonkeyEngine Уроки и Документация
            Документация для продвинутых пользователей
                Настройки излучателя частиц

Настройки излучателя частиц

Опубликованно: 22.06.2017, 14:02
Последняя редакция, Andry: 22.06.2017 16:02

Вы не можете создать 3D-модель для таких деликатных вещей как огонь, дым или взрывы. Излучатели частиц представляют собой довольно эффективное решение для создания таких эффектов: излучатель отображает серию плоских ортогональных изображений и манипулирует ими таким образом, что создает иллюзию чего-либо от тонкого облака дыма до отдельного огонька пламени и.т.д. Создание эффекта требует некоторых проб и ошибок, чтобы получить настройки что будет в самый раз, и стоит изучить экспрессию вариантов, описанных ниже.

Используйте Scene Explorer в SDK для разработки и предварительного просмотра эффектов.

explosion-5
butterfly-particle-emitter beginner-effect-fire particle

Создание излучателя

  1. Создайте один излучатель для каждого эффекта:
    ParticleEmitter explosion = new ParticleEmitter(
    "My explosion effect", Type.Triangle, 30);
  2. Прикрепите излучатель к rootNode и поместите его в сцену:
    rootNode.attachChild(explosion);
    explosion.setLocalTranslation(bomb.getLocalTranslation());
  3. Запустить эффект, вызвав
    explosion.emitAllParticles()
  4. Завершить эффект, вызвав
    explosion.killAllParticles()

Выберите одну из следующих фигур сетки

  • Type.Triangle
  • Type.Point

Настройка параметров

Не все эти параметры необходимы для всех видов эффектов. Если вы не укажете один из них, то будет использоваться значение по умолчанию.

Параметр  Метод По умолчанию  Описание
Количество  setNumParticles()   Максимальное количество частиц, видимых одновременно. Указывается пользователем в конструкторе.
Интенсивность выбросов  setParticlesPerSec() 20  Плотность эффекта, количество новых частиц в секунду.
Установите ноль для управления началом/концом эффекта.
Установите число для непрерывно действующего эффекта.
Размер  setStartSize(), setEndSize() 0.2f, 2f  Радиус масштабированного изображения спрайта. Установите оба значения одинаковыми для эффекта с постоянным размером.
Установите разных значений для эффектов уменьшающихся/увеличивающихся.
Цвет  setStartColor(), setEndColor() gray(серый)  Контролирует, как окрашиваются непрозрачные (не черные) части текстуры.
Установите одинаковый цвет для одноцветных эффектов (например, туман, мусор).
Установите оба цвета для эффектов с градиентом (например, огонь).
Направление/скорость  getParticleInfluencer(). setInitialVelocity(initialVelocity) Vector3f(0,0,0)  Вектор, определяющий начальное направление и скорость частиц. Чем длиннее вектор, тем быстрее.
Направление раздувания  getParticleInfluencer(). setVelocityVariation(variation) 0.2f  Какое направление (setInitialVelocity()) может варьироваться между частицами. Используйте значение от 1 до 0, чтобы создать направленное роевое облако частиц.
1 = Максимальное изменение, частицы испускаются в случайных направлениях на 360 ° (например, взрыва, бабочки).
0.5f = частицы испускаются в пределах 180 ° от начального направления.
0 = нет изменений, частицы летят по прямой в направлении старта (например, брызги лазеров).
Направление
(Выбери одно) 
setFacingVelocity() false  true = тангаж летающих частиц в направлении, в котором они вылетают (например, ракета).
false = Частицы продолжают летать, так как они начали (например, мусор).
Направление
(Выбери одно) 
setFaceNormal() Vector3f.NAN  Vector3f = Летающие частицы обращены в заданном направлении (например, горизонтальные ударные волны вверх = Vector3f.UNITY).
Vector3f.NAN = Летающие частицы обращены к камере.
Продолжительность жизни
 
setLowLife(), setHighLife() 3f, 7f  Времени, по истечении которого частица исчезает присваивается случайное значение между минимальным и максимальным; минимальная должна быть меньше, чем максимальная. Минимум <1f делает эффект более насыщенным, более высокий минимум выглядит более устойчивым. Используйте максимум <1f для коротких всплесков, и более высокие максимумы на длительные таких туч или дыма. Установите максимальный и минимальный значения одинаковыми значениями для создания равномерно распределенного эффекта (например, фонтана), установите очень разные значения для создания искаженного эффекта (например, огонь с индивидуально длинным языками пламени).
Вращение  setRotateSpeed()
0f 
0 = Летящие частицы не вращаются во время полета (например, дым, насекомые, контролируемые снаряды).
> 0 = Как быстро частицы вращаются во время полета (например, обломки, сюрикены, ракеты выходят из-под контроля).
Поворот  setRandomAngle() false  true = Спрайт частиц вращается под случайным углом, когда он испускается (например, взрыв, мусор).
false = Частицы летают прямо, как вы и нарисовали их в текстуре спрайта (например, насекомых).
Гравитация  setGravity() Vector3f(0.0f,0.1f,0.0f)  Частицы падают в направлении вектора (например, обломки, искры).
(0,0,0) = Частицы продолжают летать в направлении пуска (например, пламя, взрыв с нулевой гравитацией).
Площадка начала  setShape(new EmitterSphereShape( Vector3f.ZERO, 2f)); EmitterPointShape()  По умолчанию частицы выбрасываются из местоположения излучателей (точки). Вы можете увеличить размер фигуры излучателя, так что начальная точка новых частиц может находиться где угодно внутри сферы, что делает эффект немного более нерегулярным.

Создайте эффекты, указывая один параметр за другим. Если вы одновременно меняете несколько параметров, трудно определить, какое из значений вызвало результат.

Создание материала эффектов

flash

Используйте общее Описание Материала Particle.j3md и текстуру, чтобы указать форму частиц. Форма определяется текстурой, которую вы предоставляете, и может быть чем угодно: обломки, пламя, дым, москиты, листья, бабочки … проявите изобретательность.

    Material flash_mat = new Material(
        assetManager, "Common/MatDefs/Misc/Particle.j3md");
    flash_mat.setTexture("Texture",
        assetManager.loadTexture("Effects/Explosion/flash.png"));
    flash.setMaterial(flash_mat);
    flash.setImagesX(2); // столбцы
    flash.setImagesY(2); // строки
    flash.setSelectRandomImage(true);

Эффектная текстура может быть одним изображением или содержать анимацию спрайта — серию немного разных изображений в одинаково расположенных рядах и столбцах. Если вы выбрали анимацию спрайта:

  • Укажите количество строк и столбцов, используя setImagesX(2) и setImagesY().
  • Укажите, хотите ли вы воспроизводить серию спрайтов по порядку (анимацию) или произвольно (взрыв, пламя), установив setSelectRandomImage() true или false.

Примеры: Посмотрите на следующие текстуры по умолчанию, и вы увидите, как вы можете создавать свои собственные текстуры спрайтов по тому же принципу.

Текстуры частиц по умолчанию

Материал используется вместе с оттенками серого: черные части будут прозрачными, а белые части будут непрозрачными (цветными). По умолчанию из test-data.jar доступны следующие текстуры эффектов. Вы также можете загрузить свои собственные текстуры из своей папки игровых ресурсов.

Путь к текстуре Размер  Пред-просмотр
Effects/Explosion/Debris.png 3*3  Debris
Effects/Explosion/flame.png 2*2  flame
Effects/Explosion/flash.png 2*2  flash
Effects/Explosion/roundspark.png 1*1  roundspark
Effects/Explosion/shockwave.png 1*1  flame
Effects/Explosion/smoketrail.png 1*3  smoketrail
Effects/Explosion/spark.png 1*1  spark
Effects/Smoke/Smoke.png 1*15  Smoke
Используйте настройки setStartColor()/setEndColor(), описанные выше, для раскрашивания белых и серых частей текстур.

Пример использования

    ParticleEmitter fire = new ParticleEmitter("Emitter", Type.Triangle, 30);
    Material mat_red = new Material(assetManager, "Common/MatDefs/Misc/Particle.j3md");
    mat_red.setTexture("Texture", assetManager.loadTexture("Effects/Explosion/flame.png"));
    fire.setMaterial(mat_red);
    fire.setImagesX(2); fire.setImagesY(2); // 2x2 текстура анимации
    fire.setEndColor(  new ColorRGBA(1f, 0f, 0f, 1f));   // красный
    fire.setStartColor(new ColorRGBA(1f, 1f, 0f, 0.5f)); // желтый
        fire.getParticleInfluencer().setInitialVelocity(new Vector3f(0,2,0));
    fire.setStartSize(1.5f);
    fire.setEndSize(0.1f);
    fire.setGravity(0,0,0);
    fire.setLowLife(0.5f);
    fire.setHighLife(3f);
    fire.getParticleInfluencer().setVelocityVariation(0.3f);
    rootNode.attachChild(fire);

Просмотрите полный исходный код всех примеров эффектов.

См. Также: Обзор эффектов


Переведено для jmonkeyengine.ru, оригинал
Автор перевода: Andry

Добавить комментарий

jMonkeyEngine.ru © 2017. Все права сохранены.