Готовый перевод OGRE Manual / Руководство OGRE: 3.1 Material Scripts
Скрипты материалов дают возможность задавать множество материалов, которые просто использовать в дальнейшем. В принципе, вы можете настроить все материалы сцены в коде, используя методы классов Material и TextureLayer. На практике, это слишком громоздко. Вместо этого вы можете хранить определения материалов в текстовых файлах, подгружая их при необходимости.
Загрузка скриптов
Скрипты материалов загружаются после инициализации ресурсных групп. OGRE ищет файлы с расширением .material во всех местах ресурсов, ассоциированных с группой, а потом анализирует их. Если нужно проанализировать файлы вручную, используйте MaterialSerializer::parseScript
Важно понимать, что материалы не загружаются полностью при процессе парсирования: загружаются только определения, а не текстур и другие загружаемые ресурсы. Это потому, что он имеет большую общую библиотеку материалов, но использует только относительно небольшую часть из них в какой-либо сцены. Для того чтобы загрузить любой материал полностью в каждый скрипт потребуются ненужные затраты памяти. Вы можете получить доступ к "отложению загрузки" материала обычным путём (MaterialManager::getSingleton().getByName()), но вы должны вызвать метод "load", прежде чем пытаться его использовать. OGRE сделает это за вас, при использование обычных методов определения объектов материала и т.д.
Другой важный момент - все имена материалов должны быть уникальными везде во всех загружаемых системой скриптах, после чего все материалы распознаются по именам.
Формат
Несколько материалов могут быть определены в одном скрипте. Формат скриптового представляет собой псевдо-С++, с секциями разделёнными фигурными скобками и комментариями начинающимися на '//' (будьте внимательными - многострочные комментарии неподдерживаются). Общий формат показан в следующем примере (пояснение к данному примеру - мы только рассматриваем fixed-function материалы, которые не используют вертексы или фрмагменты программы):
<pre>
// Это комментарий
material walls/funkywall1
{
// первая, предпочтительный метод
technique
{
// первый проход
pass
{
ambient 0.5 0.5 0.5
diffuse 1.0 1.0 1.0
// Текстурный блок 0
texture_unit
{
texture wibbly.jpg
scroll_anim 0.1 0.0
wave_xform scale sine 0.0 0.7 0.0 1.0
}
// Текстурный блок 1 (мультитекстурный проход)
texture_unit
{
texture wobbly.png
rotate_anim 0.25
colour_op add
}
}
}</pre>
Каждому материалу в скрипте должно быть дано имя в строке "material <такой-то>" до открытия первой фигурной скобки. Это имя должно быть глобально уникальным, оно может включать символы пути (как в примере) для логического разделения материалов, а так же для избежания повторения имен. При этом движок не рассматривает их как иерархию, только как строку
Замечание. Двоеточие является разделителем при описании копии материала, поэтому его нельзя использовать при именовании материалов.
Материал можно копировать из ранее определенного материала с помощью двоеточия после имени материала, связывая имя материала для копирования. Если связанный материал не может быть найден, то он будет проигнорирован. (Смотрите раздел 3.1.11 Копирование материалов)
Материал может быть составлен из многих методов (смотрите раздел 3.1.1 "Методы") - метод является одним из способов достижения эффекта, которого вы ищете. Вы можете поставить больше, чем один метод для того, чтобы обеспечить запасные подходы, при которых плата не обладает способностью оказывать предпочтительный метод, или когда вы хотите определить нижний уровень детализации материала в целях сохранения мощности рендеринга, если объекты более отдалены.
Каждый метод может состоять из множества проходов (смотрите раздел 3.1.2 "Проходы"), то есть полный рендер объекта может быть выполнено несколько раз с разными настройками для получения композитных эффектов. OGRE может разделить проходы, которые вы определили на множество проходов во время выполнения, если вы определяете проход, который использует слишком много текстур для платы на текущий момент (отметим, что он может сделать это только если вы не используете фрагмент программы). Каждый проход имеет ряд основных атрибутов, таких как "ambient", чтобы установить размер и цвет окружающего света, отраженного от материала. Некоторые из этих параметров не применяются, если вы используете вершинные программы, смотрите раздел 3.1.2 "Проходы" для более подробной информации.
В каждом проходе, текстурные блоки не могут отсуствовать или их не может быть много (смотрите раздел 3.1.3 "Текстурные блоки"). Эти текстурные определения, будут использоваться, возможно, и с некоторыми операциями блендинга (которые используют мультитекстурирование) и текстурными эффектами.
Вы также можете связывать вершины и фрагменты программ (или вершинные и пиксельные шейдеры, если вы хотите использовать эту терминологию) в проход с заданным набором параметров. Программы сами объявляются в отдельном скрипте .program (см. раздел 3.1.4 "Объявление вершин и фрагментов программ") и могут быть использованы, как описано в разделе 3.1.9 "Использование вершин и фрагментов программ в проходе".
<i><b>Атрибуты материалов верхнего уровня</b></i>
Внешняя часть определения материала имеет не очень много признаков его собственных (большинство из них настраиваемые) параметров внутри дочерних разделов. Однако, есть некоторые из них, вот они:
<i><b>lod_distances</b></i>
Этот атрибут контролирует расстояния, на которых различные методы могут вступить в силу. Смотрите раздел 3.1.1 "Методы" для всестороннего обсуждения этого параметра.
<i><b>receive_shadows</b></i>
Этот атрибут управляет объектами использующими этот материала, и включает на них тени.
Формат: receive_shadows "on|off"
По умолчанию: on
Тень получения, сочетает в себе целый ряд факторов, смотрите раздел 7. "Тени" для подробной информации; однако можно отлючить получения тени материалом, если требуется. Обратите внимание, что прозрачные материалы таким образом никогда не получат тени, это влияет на твердые материалы.
<i><b>transparency_casts_shadows</b></i>
Этот атрибут управляет прозрачными материалами, на которых можно привести некоторые виды теней.
Формат: transparency_casts_shadows "on|off"
По умолчанию: off
Тень, сочетает в себе целый ряд факторов, смотрите раздел 7. "Тени" для подробной информации; однако это позволяет заставить прозрачный материал отбрасывать тень. Например, при использовании текстурных теней, прозрачный материал, как правило, не оказывается в тени текстуры, поскольку они не должны блокировать свет. Этот флаг отменяет это.
<i><b>set_texture_alias</b></i>
Этот атрибут связывает псевдоним текстуры с именем текстуры.
Формат: set_texture_alias "псевдоним" "имя"
Этот атрибут используется для установки текстур, используемых в текстурном блоке, которые были скопированы из другого материала. (См. раздел 3.1.11 "Копирование материалов")
Переведено на Нотабеноиде
http://notabenoid.org/book/137/1521
Переводчики: DCamer, jfox, Elrick
Настройки
Готово:
