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

Свойства Описания Материала

Опубликованно: 18.05.2017, 19:34
Последняя редакция, Andry: 07.07.2017 20:54

В jMonkeyEngine 3 цвета и текстуры представлены как объекты Material.

  • Все Геометрия должны иметь Материалы. Чтобы повысить производительность можно повторно использовать материалы для похожих моделей. Не создавайте новый объект Material для каждой геометрии. (Например, используйте один материал коры для нескольких моделей деревьев.)
  • Каждый материал основан на одном из описаний материала по умолчанию jme3 (файлы .j3md), который включен в движок. Продвинутые пользователи могут создавать дополнительные пользовательские Описания Материалов (см., Как это делается в источниках jme3).
Узнайте быстро, как использовать материалы, включая наиболее часто используемые образцы кода и RenderStates.
Или найдите дополнительную информацию о том, как использовать Описания Материалов.

Все свойства описания материалов

В следующей таблице Материалы представлены описаниями материалов, поддерживаемых jMonkeyEngine 3.

Выглядит сбивающим с толку?
1) Начните изучение Unshaded.j3md и Lighting.j3md, они охватывают 90% случаев.
2) Используйте визуальный редактор материала SDK, чтобы легко проверить и сохранить настройки материала.
3) Подсветка SDK содержит фрагменты кода drag & drop для загрузки материалов.

Большинство параметров Material являются необязательными. Например, при использовании Lighting.j3md можно указать только DiffuseMap и NormalMap, а остальные карты текстур — пустыми. В этом случае вы используете только подмножество возможных функций, но это прекрасно, если оно делает в материале все то, что вам нужно. Вы всегда можете добавить больше карт текстур позже.

Не затененная окраска и текстуры

JMonkeyEngine поддерживает освещенные и не затененные описания материалов.

  • Фонг Освещенные материалы выглядят более естественными.
  • Не затененный материалы выглядят более абстрактными.

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

Таблица 1. Стандартный не затененный

Описание Материала  Применение Параметры Материала
Common/MatDefs/Misc/
Unshaded.j3md 
Стандартные, не освещаемые материалы.
Используйте это для простой окраски и текстурирования, свечения и прозрачности.
См. Также: Hello Material
Texture Maps
setTexture(“ColorMap, assetManager.loadTexture(“));
setBoolean(“SeparateTexCoord,true);
setTexture(“LightMap, assetManager.loadTexture(“));
Colors
setColor(“Color, ColorRGBA.White);
setBoolean(“VertexColor,true);
Glow
setTexture(“GlowMap, assetManager.loadTexture(“));
setColor(“GlowColor, ColorRGBA.White);

Другие полезные, но менее широко используемые описания материалов:

Таблица 2. Специальные не затененные

Описание Материала  Применение Параметры Материала
Common/MatDefs/Misc/
Sky.j3md 
Сплошной skyblue, или использовать с настраиваемой текстурой SkyDome.
Смотри также: Небо
setTexture(“TextureCubeMap, assetManager.loadTexture(“));
setBoolean(“SphereMap,true);
setVector3(“NormalScale, new Vector3f(0,0,0));
Common/MatDefs/Terrain/
Terrain.j3md 
Сплошные текстуры для, например. местности.
См. Также: Hello Terrain
setTexture(“Tex1, assetManager.loadTexture(“));
(red)
setFloat(“Tex1Scale,1f);
setTexture(“Tex2, assetManager.loadTexture(“));
(green)
setFloat(“Tex2Scale,1f);
setTexture(“Tex3, assetManager.loadTexture(“));
(blue)
setFloat(“Tex3Scale,1f);
setTexture(“Alpha, assetManager.loadTexture(“));
Common/MatDefs/Terrain/
HeightBasedTerrain.j3md 
Многослойная текстура для ландшафтов.
Укажите четыре текстуры и Vector3f, описывающие область, в которой должна появляться каждая текстура:
X = начальная высота,
Y = высота торца,
Z = масштаб текстуры.
Области текстуры могут перекрываться.
Например: укажите текстуру морского дна для самых низких областей,
Песчаная текстура для пляжей,
Травянистая текстура для внутренних районов,
И скалистые текстуры для горных вершин.
setFloat(“terrainSize,512f);
setTexture(“region1ColorMap, assetManager.loadTexture(“));
setTexture(“region2ColorMap, assetManager.loadTexture(“));
setTexture(“region3ColorMap, assetManager.loadTexture(“));
setTexture(“region4ColorMap, assetManager.loadTexture(“));
setVector3(“region1, new Vector3f(0,0,0));
setVector3(“region2, new Vector3f(0,0,0));
setVector3(“region3, new Vector3f(0,0,0));
setVector3(“region4, new Vector3f(0,0,0));
Settings for steep areas:
setTexture(“slopeColorMap, assetManager.loadTexture(“));
setFloat(“slopeTileFactor,1f);
Common/MatDefs/Misc/
Particle.j3md 
Используется с текстурными масками для эффектов частиц или для точечных спрайтов.
Квадратичное значение масштабирует частицу для вида в перспективе (формула).
Поддерживает дополнительный цветной эффект свечения.
Смотрите также: Hello Effects
setTexture(“Texture, assetManager.loadTexture(“));
setTexture(“GlowMap, assetManager.loadTexture(“));
setColor(“GlowColor, ColorRGBA.White);
setFloat(“Quadratic,1f);
setBoolean(“PointSprite,true);

Фонг Освещение

JMonkeyEngine поддерживает освещенные и не затененные описания материалов.

  • Фонг Освещенные материалы выглядят более естественными.
  • Не затененные материалы выглядят более абстрактными.

Освещенные материалы требуют, чтобы источник света был добавлен, по крайней мере, к одному из их родительскому узлу! (Например, rootNode). Освещенные материалы темнее на сторонах, обращенных от источников света. Они используют модель подсветки Фонг (по умолчанию) или изотропный гауссовый зеркальный шейдер Ward (WardIso), который больше похож на пластик. Они не бросают тени, если вы не используете FilterPostProcessor.

Таблица 3. Стандартный Освещенный

Описание Материала  Применение Параметры Материала
Common/MatDefs/Light/
Lighting.j3md 
Обычно используемый материал с Фонг подсветкой.
Используйте этот материал вместе с текстурами DiffuseMap, SpecularMap, BumpMap (NormalMaps, ParalaxMap).
Поддерживает блеск, прозрачность и простые цвета материала (диффузный, окружающий, зеркальный цвета).
См. Также: Hello Material
Texture Maps
setTexture(“DiffuseMap, assetManager.loadTexture(“));
setBoolean(“UseAlpha,true); [1]
setTexture(“NormalMap, assetManager.loadTexture(“));
setBoolean(“LATC,true); [2]
setTexture(“SpecularMap, assetManager.loadTexture(“));
setFloat(“Shininess,64f);
setTexture(“ParallaxMap, assetManager.loadTexture(“));
setTexture(“AlphaMap, assetManager.loadTexture(“));
setFloat(“AlphaDiscardThreshold,1f);
setTexture(“ColorRamp, assetManager.loadTexture(“));
Glow
setTexture(“GlowMap, assetManager.loadTexture(“));
setColor(“GlowColor, ColorRGBA.White);
Performance and quality
setBoolean(“VertexLighting,true);
setBoolean(“UseVertexColor,true);
setBoolean(“LowQuality,true);
setBoolean(“HighQuality,true);
Material Colors
setBoolean(“UseMaterialColors,true);
setColor(“Diffuse, ColorRGBA.White);
setColor(“Ambient, ColorRGBA.White);
setColor(“Specular, ColorRGBA.White);
Tangent shading:
setBoolean(“VTangent,true);
setBoolean(“Minnaert,true); [3]
setBoolean(“WardIso,true); [4]


1. UseAlpha указывает, использует ли DiffuseMap альфа-канал
2. LATC указывает, является ли NormalMap BC5/ATI2n/LATC/3Dc-сжатым
3. Minnaert — это шейдерный тип.
4. WardIso — это шейдерный тип.

Таблица 4. Специальное Освещение

Описание Материала  Применение Параметры Материала
Common/MatDefs/Terrain/
TerrainLighting.j3md 
Такая же многослойная структура splat, как Terrain.j3md, но с подсветкой и тенями.
Обычно используется для местности, но работает на любой сетке.
Для каждых 3-х текстур splat вам нужна одна альфа-карта.
Вы можете использовать в общей сложности 11 текстурных карт в текстуре сплайна местности:
Обратите внимание, что диффузные и карты нормали все расчитывают против.
Например, вы можете использовать максимум 9 диффузных текстур, две из которых могут иметь карты нормали;
Или пять текстур диффузных и картами нормали.
Texture Splat Maps
setTexture(“DiffuseMap, assetManager.loadTexture(“));
setFloat(“DiffuseMap_0_scale,1f);
setTexture(“NormalMap, assetManager.loadTexture(“));
setTexture(“DiffuseMap_1, assetManager.loadTexture(“));
setFloat(“DiffuseMap_1_scale,1f);
setTexture(“NormalMap_1, assetManager.loadTexture(“));
setTexture(“DiffuseMap_2, assetManager.loadTexture(“));
setFloat(“DiffuseMap_2_scale,1f);
setTexture(“NormalMap_2, assetManager.loadTexture(“));
setTexture(“DiffuseMap_3, assetManager.loadTexture(“));
setFloat(“DiffuseMap_3_scale,1f);
setTexture(“NormalMap_3, assetManager.loadTexture(“));
etc, up to 11.
Alpha Maps
setTexture(“AlphaMap, assetManager.loadTexture(“));
setTexture(“AlphaMap_1, assetManager.loadTexture(“));
setTexture(“AlphaMap_2, assetManager.loadTexture(“));
Glowing
setTexture(“GlowMap, assetManager.loadTexture(“));
setColor(“GlowColor, ColorRGBA.White);
Miscellaneous
setColor(“Diffuse, ColorRGBA.White);
setColor(“Ambient, ColorRGBA.White);
setFloat(“Shininess,64f);
setColor(“Specular, ColorRGBA.White);
setTexture(“SpecularMap, assetManager.loadTexture(“));
setBoolean(“WardIso,true);
setBoolean(“useTriPlanarMapping,true);
setBoolean(“isTerrainGrid,true);
Common/MatDefs/Light/
Reflection.j3md 
Отражающий стеклянный материал с картой окружения (CubeMap / SphereMap). См. Также: TestCubeMap.java setTexture(“Texture, assetManager.loadTexture(“));
setBoolean(“SphereMap,true);

Прочее: тестирование и отладка

Таблица 5. Тестирование

Описание Материала   Применение
Common/MatDefs/Misc/
ShowNormals.j3md 
Цветовой градиент, рассчитанный из нормалей поверхности модели. Вы можете использовать этот встроенный материал для отладки генерации нормалей в сетках, для предварительного просмотра моделей, которые не имеют материала и без освещения, или в качестве материала для возврата по умолчанию. Этот встроенный материал не имеет параметров.

RenderStates

Таблица 6. Прозрачность

Вариант материала  Описание Пример
getAdditionalRenderState().
setBlendMode(BlendMode.Off); 
Это значение по умолчанию, без прозрачности. Используйте для всех непрозрачных объектов, таких как стены, полы, люди …
getAdditionalRenderState()
.setBlendMode(BlendMode.Alpha); 
Интерполирует фоновый пиксель с текущим пикселем, используя альфа текущего пикселя. Используйте это для нормальной полупрозрачности: матовые оконные стекла, лед, стекло, альфа-смешанные текстуры растительности …
getAdditionalRenderState()
.setDepthWrite(false); 
Отключена запись значения глубины пикселя в буфер глубины. Используйте это в материалах, если у вас есть несколько прозрачных/полупрозрачных объектов, затемняющих друг друга, но вы хотите видеть сквозь них.
getAdditionalRenderState()
.setAlphaFallOff(0.5f);
getAdditionalRenderState()
.setAlphaTest(true) 
Включает альфа-тестирование с помощью «AlphaDiscardThreshold в AlphaMap. Активируйте альфа-тестирование для (частично) прозрачных объектов, таких как листва, волосы и.т.д.
Деактивируйте альфа-тестирование для постепенно просвечивающих объектов, таких как цветное стекло, дымчатое стекло, призраки.
getAdditionalRenderState()
.setBlendMode(BlendMode.Additive); 
Аддитивное альфа-смешение добавляет цвета в коммутативном режиме, т.е. Результат не зависит от порядка прозрачных слоев, так как он добавляет цвет фона пикселя фона к текущему цвету пикселя. Это полезно, если у вас много прозрачных текстур, перекрывающих друг друга и вы не заботитесь о порядке.
Примечание: При просмотре на белом фоне аддитивные текстуры становятся полностью прозрачными!
Это значение по умолчанию для текстур на основе Particle.j3md, имеющих черный цвет фона.
getAdditionalRenderState()
.setBlendMode(BlendMode.AlphaAdditive); 
То же, что и «Additive», кроме первого, он умножает текущий цвет пикселя на пиксель альфа. Это может быть использовано для эффектов частиц, у которых в качестве фона есть альфа.
getAdditionalRenderState()
.setBlendMode(BlendMode.Color); 
Смесь по цвету. Вообще бесполезно.
getAdditionalRenderState()
.setBlendMode(BlendMode.Modulate); 
Умножает фоновый пиксель на текущий пиксель. ?
getAdditionalRenderState()
.setBlendMode(BlendMode.ModulateX2); 
То же, что и «Modulate», за исключением того, что результат удваивается. ?
getAdditionalRenderState()
.setBlendMode(BlendMode.PremultAlpha); 
Предварительное умножение альфа-смешивания. Например. Если цвет объекта уже был умножен на его альфа, это используется вместо «Alpha blend mode». Для использования с текстурами Premult Alpha.

Если DiffuseMap имеет альфа-канал, используйте:

mat.setBoolean("UseAlpha",true);

Позже поместите Геометрию (не Материал!) В соответствующую очередь визуализации.

geo.setQueueBucket(Bucket.Translucent);

или

geo.setQueueBucket(Bucket.Transparent);

Таблица 7. Отсечение

Вариант материала  Применение Пример
getAdditionalRenderState()
.setFaceCullMode(FaceCullMode.Back); 
Активирует отсечение задней грани. Грани сетки, обращенные противоположную сторону от камеры, не отображаются, что экономит время. Отсечение Backface активируется по умолчанию как основная оптимизация. Невидимые задние стороны и внутренности моделей не вычисляются.
getAdditionalRenderState()
.setFaceCullMode(FaceCullMode.Off); 
Нет отсечения сетки. Обе стороны сетки визуализируються, даже если они обращены в противоположную сторону от камеры. Медленный. Иногда используется для отладки пользовательских сеток, если вы испортили некоторые стороны многоугольника или специальные теневые эффекты.
getAdditionalRenderState()
.setFaceCullMode(FaceCullMode.Front); 
Активирует отсечение лицевой стороны. Грани сетки, обращенные к камере, не отображаются. Нет примера. Обычно он не используется, потому что вы не увидите ничего значимого.
getAdditionalRenderState()
.setFaceCullMode(FaceCullMode.FrontAndBack) 
Отсекает обе поверхности и задние и лицевые поверхности. Используйте это как эффективный способ сделать объект временно невидимым, сохраняя при этом все другие его внутриигровые свойства (такие как привязка узлов, формы столкновения, взаимодействия и.т.д.).

Таблица 8. Разное

Вариант материала  Применение Пример
getAdditionalRenderState()
.setColorWrite(false); 
Отключить запись цвета пикселей. Используйте это вместе с setDepthWrite (true) для записи пикселей только в буфер глубины, например.
getAdditionalRenderState()
.setPointSprite(true); 
Включает режим точки-спрайта, например. Сетки с «Mode.Points» будут отображаться как текстурированные спрайты. Обратите внимание, что gl_PointCoord должен быть установлен в шейдере. Точечные спрайты используются внутри для аппаратных ускоренных эффектов частиц.
getAdditionalRenderState()
.setPolyOffset(); 
Включить смещение полигона. Используйте это, когда у вас есть сетки с очень близкими треугольниками (например, Компланарность), они сдвинут значения глубины, чтобы предотвратить Z-fighting.

Ссылки по теме


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

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

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