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

Сохранение и загрузка материалов с помощью файлов .j3m

Опубликованно: 18.05.2017, 13:23
Последняя редакция, Andry: 18.05.2017 18:43

В статье «Описания материала» вы узнали, как настроить материалы программно в Java коде. Если у вас есть некоторые наиболее часто используемые Материалы, которые никогда не меняются, вы можете уменьшить количество Java-кода, загромождающего ваш метод init, перемещая настройки материалов в файлы .j3m. Затем позже в вашем коде вам нужно будет вызвать всего один сеттер вместо нескольких, чтобы применить материал.

Если вы хотите раскрасить простые фигуры (одна текстура округлости), то .j3m — это наиболее легко настраиваемое решение. Файлы J3m могут содержать текстурированное отображение материала, но, как всегда, вам необходимо создать текстуры во внешнем редакторе, особенно если вы используете текстуры с UV-отображением.

Создание файла .j3m

  1. Для каждого материала создайте файл и укажите его имя, например: SimpleBump.j3m
  2. Поместите файл в каталог assets/Materials/, например. MyGame/src/assets/Materials/SimpleBump.j3m
  3. Отредактируйте файл и добавьте содержание с помощью следующего синтаксиса, например:
Material shiny bumpy rock : Common/MatDefs/Light/Lighting.j3md {
     MaterialParameters {
         Shininess: 8.0
         NormalMap: Textures/bump_rock_normal.png
         UseMaterialColors : true
         Ambient  : 0.0 0.0 0.0 1.0
         Diffuse  : 1.0 1.0 1.0 1.0
         Specular : 0.0 0.0 0.0 1.0
     }
}

Как этот файл структурирован:

  1. Заголовок
    1. Material — фиксированное ключевое слово, оставьте его.
    2. shiny bumpy rock — это описательная строка, которую вы можете составить сами. Выберите имя, которое поможет вам запомнить, для чего вы собираетесь использовать этот материал.
    3. После двоеточия укажите, по какому описанию материала вы основываете этот Материал.
  2. Теперь найдите выбранные параметры описания материала и их типы параметров из таблицы Material. Добавьте по одной строке для каждого параметра.
    • Например: серия из четырех чисел в приведенном выше примере представляет значения цветов RGBA.
  3. Если вы не уверены, обратитесь к подробному описанию синтаксиса ниже.
В SDK jMonkeyEngine используйте File → New File → Material → Empty Material File для создания файлов .j3m. Вы можете редактировать файлы .j3m непосредственно в SDK. С другой стороны, они представляют собой текстовые файлы, поэтому вы можете также создавать их в любом текстовом редакторе.

Как использовать материалы .j3m

Вот как вы используете подготовленный .j3m материал на Spatial. Поскольку вы сохранили файл .j3m в папке Assets вашего проекта, путь .j3m относится к MyGame/src/assets/….

myGeometry.setMaterial(assetManager.loadMaterial("Materials/SimpleBump.j3m"));
В SDK jMonkeyEngine откройте Windows>Palette и перетащите фрагмент JME Material: Set J3M в свой код.

Справочник по синтаксису файлов .j3m

Пути

Убедитесь, что пути к текстурам (.png, .jpg) и описаниям материалов (.j3md) установлены правильно.

  • Пути к встроенным файлам .j3md относятся к каталогу Core Data jME3. Просто скопируйте путь, указанный в таблице Материал.
    Common/MatDefs/Misc/Unshaded.j3md is resolved to jme3/src/src/core-data/Common/MatDefs/Misc/Unshaded.j3md.
  • Пути к вашим текстурам относятся к каталогу ресурсов вашего проекта.
    Textures/bump_rock_normal.png is resolved to MyGame/src/assets/Textures/bump_rock_normal.png

Типы данных

Все типы данных (кроме цвета) указаны в com.jme3.shader.VarType. «Цвет указан как Vector4 в J3MLoader.java.

Название  jME Java класс  .j3m синтаксис файла
Float  (базовый Java тип)  float (например, 0,72), без запятых или скобок
Vector2  com.jme3.math.Vector2f  Два float, без запятых или скобок
Vector3  com.jme3.math.Vector3f  Три float, без запятых или скобок
Vector4  com.jme3.math.Vector4f  Четыре float, без запятых или скобок
Texture2D  com.jme3.texture.Texture2D  Путь к текстуре в каталоге ресурсов, без кавычек
Texture3D  com.jme3.texture.Texture3D  То же, что и для текстуры 2D, за исключением того, что она интерпретируется как трехмерная текстура
TextureCubeMap  com.jme3.texture.TextureCubeMap  То же, что и для текстуры 2D, за исключением того, что она интерпретируется как текстура куба-карты
Boolean  (базовый Java тип)  true или false
Int  (базовый Java тип)  Целое число, без запятых или скобок
Color  com.jme3.math.ColorRGBA  Четыре float, без запятых или скобок
FloatArray    (В настоящее время не поддерживается в J3M)
Vector2Array    (В настоящее время не поддерживается в J3M)
Vector3Array    (В настоящее время не поддерживается в J3M)
Vector4Array    (В настоящее время не поддерживается в J3M)
Matrix3    (В настоящее время не поддерживается в J3M)
Matrix4    (В настоящее время не поддерживается в J3M)
Matrix3Array    (В настоящее время не поддерживается в J3M)
Matrix4Array    (В настоящее время не поддерживается в J3M)
TextureBuffer    (В настоящее время не поддерживается в J3M)
TextureArray    (В настоящее время не поддерживается в J3M)

Синтаксис переворота(Flip) и повтора(Repeat)

  • Текстуру можно перевернуть, используя следующий синтаксис NormalMap: Flip Textures/bump_rock_normal.png
  • Текстуре можно установить повторение, используя следующий синтаксис NormalMap: Repeat Textures/bump_rock_normal.png
  • Если текстура установлена на то, что бы она была перевернута и повторена, перевернутость должна появиться перед повторением

Синтаксис для дополнительных состояний визуализации

  • Логическое значение может быть «On» Или «Off»
  • Float значит “123.0 и.т.д.
  • Enum — значения зависят от типа enum

См. javadoc RenderState для подробного объяснения состояний визуализации.

Название  Тип  Назначение
Wireframe  (Boolean)  Включить режим визуализации Wireframe
FaceCull  (Enum: FaceCullMode)  Установите режим отсечения граней (Off, Front, Back, FrontAndBack)
DepthWrite  (Boolean)  Включить запись глубины в буфер глубины
DepthTest  (Boolean)  Включить проверку глубины
Blend  (Enum: BlendMode)  Установите режим смешивания
AlphaTestFalloff  (Float)  Установите значение альфа-тестирования альфа-спада (если оно установлено, оно включит альфа-тестирование)
PolyOffset  (Float, Float)  Установите коэффициент смещения полигона и единицы измерения
ColorWrite  (Boolean)  Включить запись цвета
PointSprite  (Boolean)  Включить точечный спрайт для точечных сеток

Примеры

Пример 1: блестящий

Spatial signpost = (Spatial) assetManager.loadAsset(
    new OgreMeshKey("Models/Sign Post/Sign Post.mesh.xml", null));
signpost.setMaterial( assetManager.loadMaterial(
    new AssetKey("Models/Sign Post/Sign Post.j3m")));
TangentBinormalGenerator.generate(signpost);
rootNode.attachChild(signpost);

В файле assets/Models/Sign Post/Sign Post.j3m содержатся:

Material Signpost : Common/MatDefs/Light/Lighting.j3md {
    MaterialParameters {
         Shininess: 4.0
         DiffuseMap:  Models/Sign Post/Sign Post.jpg
         NormalMap:   Models/Sign Post/Sign Post_normal.jpg
         SpecularMap: Models/Sign Post/Sign Post_specular.jpg
         UseMaterialColors : true
         Ambient  : 0.5 0.5 0.5 1.0
         Diffuse  : 1.0 1.0 1.0 1.0
         Specular : 1.0 1.0 1.0 1.0
    }
}

Файлы JPG находятся в том же каталоге, assets/Models/Sign Post/….

Пример 2: Повторяющаяся текстура

Material mat = assetManager.loadMaterial(
    "Textures/Terrain/Pond/Pond.j3m");
mat.setColor("Ambient", ColorRGBA.DarkGray);
mat.setColor("Diffuse", ColorRGBA.White);
mat.setBoolean("UseMaterialColors", true);

Файл assets/Textures/Terrain/Pond/Pond.j3m содержит:

Material Pong Rock : Common/MatDefs/Light/Lighting.j3md {
     MaterialParameters {
         Shininess: 8.0
         DiffuseMap: Repeat Textures/Terrain/Pond/Pond.png
         NormalMap:  Repeat Textures/Terrain/Pond/Pond_normal.png
     }
}

Файлы PNG находятся в том же каталоге, assets/Textures/Terrain/Pond/

Пример 3: Прозрачный

В файле assets/Models/Tree/Leaves.j3m содержатся:

Material Leaves : Common/MatDefs/Light/Lighting.j3md {

    Transparent On

    MaterialParameters {
        DiffuseMap : Models/Tree/Leaves.png
        UseAlpha : true
        AlphaDiscardThreshold : 0.5
        UseMaterialColors : true
        Ambient : .5 .5 .5 .5
        Diffuse : 0.7 0.7 0.7 1
        Specular : 0 0 0 1
        Shininess : 16
    }
    AdditionalRenderState {
        Blend Alpha
        AlphaTestFalloff 0.50
        FaceCull Off
    }
}

Файл PNG находится в том же каталоге, assets/Models/Tree/…

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

  • Спецификация разработчика системы материалов jME3 (.j3md, .j3m)

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

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

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