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

Обзор специальных эффектов jME3

Опубликованно: 15.06.2017, 19:22
Последняя редакция, Andry: 30.09.2017 23:00

JME3 поддерживает несколько типов специальных эффектов: Фильтры постпроцессора, SceneProcessors и Particle Emitters (также известные как системы частиц). Этот список содержит скриншоты и ссылки на образцы кода, который демонстрирует, как добавить эффект в сцену.

Примеры кода

  • Существует один класс com.jme3.effect.ParticleEmitter для всех систем частиц.
  • Существует один класс com.jme3.post.FilterPostProcessor и несколько com.jme3.post.filters. (Все фильтры имеют Filter в своих именах).
  • Существует несколько классов SceneProcessor в различных пакетах, включая, например, com.jme3.shadow. И com.jme3.water. (SceneProcessor имеют Processor или Renderer в своих именах).

Излучатель частиц(Particle Emitter)

public class MyGame extends SimpleApplication {
  public void simpleInitApp() {
    ParticleEmitter pm = new ParticleEmitter("my particle effect", Type.Triangle, 60);
    Material pmMat = new Material(assetManager, "Common/MatDefs/Misc/Particle.j3md");
    pmMat.setTexture("Texture", assetManager.loadTexture("Effects/spark.png"));
    pm.setMaterial(pmMat);
    pm.setImagesX(1);
    pm.setImagesY(1);
    rootNode.attachChild(pm); // присоединить один или несколько излучателей к любому узлу
  }
}

Обработка Сцены(Scene Processor)

public class MyGame extends SimpleApplication {
    private BasicShadowRenderer bsr;

    public void simpleInitApp() {
        bsr = new BasicShadowRenderer(assetManager, 1024);
        bsr.setDirection(new Vector3f(.3f, -0.5f, -0.5f));
        viewPort.addProcessor(bsr); // Добавить один или больше sceneprocessor в viewport
    }

Фильтр постобработка(Post-Processor Filter)

public class MyGame extends SimpleApplication {
    private FilterPostProcessor fpp; // один FilterPostProcessor для app
    private SomeFilter sf;           // один или больше Filters для app

    public void simpleInitApp() {
        fpp = new FilterPostProcessor(assetManager);
        viewPort.addProcessor(fpp); // добавить один FilterPostProcessor в viewPort

        sf = new SomeFilter();
        fpp.addFilter(sf);  // добавить один или больше Filters в FilterPostProcessor
    }

Вода

water-post
water water-reflection-muddy underwater2

«SeaMonkey WaterFilter» от jMonkeyEngine имитирует океанские волны, пену, в том числе прохладные подводные каустики.
Используйте SimpleWaterProcessor (SceneProcessor) для небольших ограниченных водоемов, таких как лужи, питьевые лотки, бассейны, фонтаны.

Смотрите так же

Эффекты окружающей среды(Environment Effects)

dof-blur light-scattering-filter

Глубина размытия(Depth of Field Blur)

Туман(Fog)

Рассеивание света(Light Scattering)

Растительность(Vegetation)

Свет и Тень(Light and Shadows)

tanlglow1 shadow-sponza-ssao

Свечение и Отблеск(Bloom and Glow)

Свет(Light)

Тень(Shadow)

shadow light-sources

  • TestShadow.java – BasicShadowRenderer. (SceneProcessor)
  • TestPssmShadow.java – PssmShadowRenderer (SceneProcessor), также известный как Parallel-Split Shadow Mapping (PSSM).
  • TestSSAO.java
  • TestSSAO2.java – SSAOFilter, также известный как Screen-Space Ambient Occlusion тени (SSOA).
  • TestTransparentSSAO.java – SSAOFilter, также известный как Screen-Space Ambient Occlusion тени (SSOA), плюс прозрачность.
  • Больше подробностей: Свет и Тень

Специально: Стекло, Металл, Растворение, Мультяшность(Special: Glass, Metal, Dissolve, Toon)

Эффект мультяшности(Toon Effect)

toon-dino

Fade in / Fade out

  • Fade – FadeFilter

Внесенный пользователями вклад

shaderblow_light1 shaderblow_glass shaderblow_matcap shaderblow_light2

ShaderBlow — Библиотека GLSL шейдеров

  • Шейдер LightBlow – Смесь материалов текстурных карт.
  • Шейдер FakeParticleBlow – Струя, огня.
  • Шейдер ToonBlow – Шейдер мультяшности, мультяшность границ объекта.
  • Шейдер Dissolve – Научная фантастика эффект телепортации/растворения.
  • Шейдер MatCap – Золото, металлы, стекло, мультяшность…!
  • Шейдер Glass – Стекло.
  • Шейдер Force Shield – Научная фантастика эффект воздействия на силовое поле.
  • Шейдер SimpleSprite – Анимированные текстуры.
  • Шейдер SimpleSpriteParticle – Библиотека спрайтов.
  • Шейдер MovingTexture – Анимированная текстура облаков/тумана.
  • Шейдер SoftParticles – Огонь, облака, дым и.т.д.
  • Шейдер Displace – Деформационный эффект: пульсация, волна, пульс, набухание!

Спасибо за ваш потрясающий вклад! Держите их!

Излучатели частиц: взрывы, огонь, дым(Particle Emitters: Explosions, Fire, Smoke)

explosion-5 particle

Эффекты излучателя частиц очень настраиваемы и могут иметь любую текстуру. Они могут имитировать дым, пыль, листья, метеоры, снежинки, москитов, огонь, взрывы, рой, угли, искры …

Создание собственных фильтров

Вот выдержка от @nehon в теме форума (Форум: Как именно работают фильтры)

Методы вызываются в этом порядке (примерно в том же потоке, что и processor): — initFilter() вызывается один раз, когда инициализируется FilterPostPorcessor или когда фильтр добавляется в processor, а этот, как уже было инициализирован.

Для каждого кадра методы вызываются в этой последовательности: — preFrame() встречается до того, как что-либо происходит — postQueue() происходит после заполнения очередей (есть одна очередь за bucket и две дополнительные очереди для теней, casters и recievers). Обратите внимание, что геометрия в очередях находится в усеченном виде. — postFrame происходит после того, как основной кадр был отображен (back buffer)

Эти методы являются необязательными в фильтре, они доступны только в том случае, если вы хотите подключиться к процессу рендеринга.

Переменная материала здесь для удобства. У вас есть метод getMaterial, который возвращает материал, который будет использован для рендеринга полноэкранного квадрата. Та случилось, что в каждой реализации у меня был атрибут материала во всех моих подклассах, поэтому я просто вернул его в абстрактный класс. В большинстве случаев getMaterial возвращает этот атрибут.

Forced-technique может быть любой technique действительно, они больше связаны с системой материалов, чем с фильтрами, но в любом случае. Когда вы используете Forced-technique, рендеринг пытается выбрать ее на материале каждой геометрии, если technique не существует для материала, геометрия не отображается. Вы хорошо относитесь к фильтру SSAO, нормальная сцена отображает текстуру в предварительном проходе.

Passes: это фильтры в фильтрах. Сначала они являются удобным способом инициализации FrameBuffer и связанных с ним текстур, которые вам нужны, и вы можете использовать их для чего угодно. Например, Pass может быть (как и в SSAO-фильтре) дополнительной визуализацией сцены с Forced-technique, и вам придется обрабатывать рендеринг самостоятельно в методе postQueue. Это может быть сообщение, которое нужно выполнить после того, как основной фильтр был отображен на экране (например, снова используется дополнительный размытие, используемое в SSAO). У вас есть список проходов, называемых postRenderPass в абстрактном классе Filter. Если вы добавите проход в этот список, он будет автоматически отображаться FilterPostProcessor во время цепочки фильтров.

bloom Filter интенсивно использует проходы.

Фильтры в двух словах.

Смотрите так же


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

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

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