OGRE Manual / Руководство OGRE: 3.1 Material Scripts

Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

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

Elrick 08.07.08 в 08:37

0

Скрипты материалов дают возможность задавать множество материалов, которые просто использовать в дальнейшем. В принципе, вы можете настроить все материалы сцены в коде, используя методы классов Material и TextureLayer. На практике, это слишком громоздко. Вместо этого вы можете хранить определения материалов в текстовых файлах, подгружая их при необходимости.

jfox 08.07.08 в 10:35

0

Загрузка скриптов

Elrick 07.07.08 в 17:40

1

Скрипты материалов загружаются после инициализации групп ресурсов: OGRE осматривает все локации с ресарсами, связанными с группой (смотрите Root::addResourceLocation) для нахождения всех файлов с расширением '.material' и разбирает их. Если вы хотите разобрать файлы вручную, используйте функцию MaterialSerializer::parseScript.

Elrick 08.07.08 в 08:42

0

Скрипты материалов загружаются после инициализации ресурсных групп. OGRE ищет файлы с расширением .material во всех местах ресурсов, ассоциированных с группой, а потом анализирует их. Если нужно проанализировать файлы вручную, используйте MaterialSerializer::parseScript

jfox 08.07.08 в 10:43

0

Важно понимать, что материалы не загружаются полностью при процессе парсирования: загружаются только определения, а не текстур и другие загружаемые ресурсы. Это потому, что он имеет большую общую библиотеку материалов, но использует только относительно небольшую часть из них в какой-либо сцены. Для того чтобы загрузить любой материал полностью в каждый скрипт потребуются ненужные затраты памяти. Вы можете получить доступ к "отложению загрузки" материала обычным путём (MaterialManager::getSingleton().getByName()), но вы должны вызвать метод "load", прежде чем пытаться его использовать. OGRE сделает это за вас, при использование обычных методов определения объектов материала и т.д.

DCamer 24.05.10 в 15:08

0

Другой важный момент - все имена материалов должны быть уникальными везде во всех загружаемых системой скриптах, после чего все материалы распознаются по именам.

Elrick 08.07.08 в 08:56

0
+3

Формат

Elrick 08.07.08 в 08:48

1

Несколько материалов могут быть определены в одном скрипте. Формат скриптового представляет собой псевдо-С++, с секциями разделёнными фигурными скобками и комментариями начинающимися на '//' (будьте внимательными - многострочные комментарии неподдерживаются). Общий формат показан в следующем примере (пояснение к данному примеру - мы только рассматриваем fixed-function материалы, которые не используют вертексы или фрмагменты программы):

Elrick 09.07.08 в 06:07

0
+1

// Это комментарий
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
}
}
}

Elrick 08.07.08 в 08:48

0

<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>

DCamer 19.05.10 в 19:30

0
+1

Каждому материалу в скрипте должно быть дано имя в строке "material &lt;такой-то>" до открытия первой фигурной скобки. Это имя должно быть глобально уникальным, оно может включать символы пути (как в примере) для логического разделения материалов, а так же для избежания повторения имен. При этом движок не рассматривает их как иерархию, только как строку

jfox 08.07.08 в 10:19

0

Замечание. Двоеточие является разделителем при описании копии материала, поэтому его нельзя использовать при именовании материалов.

jfox 08.07.08 в 10:22

0

Материал можно копировать из ранее определенного материала с помощью двоеточия после имени материала, связывая имя материала для копирования. Если связанный материал не может быть найден, то он будет проигнорирован. (Смотрите раздел 3.1.11 Копирование материалов)

DCamer 24.05.10 в 15:11

0

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

DCamer 24.05.10 в 15:13

0

Каждый метод может состоять из множества проходов (смотрите раздел 3.1.2 "Проходы"), то есть полный рендер объекта может быть выполнено несколько раз с разными настройками для получения композитных эффектов. OGRE может разделить проходы, которые вы определили на множество проходов во время выполнения, если вы определяете проход, который использует слишком много текстур для платы на текущий момент (отметим, что он может сделать это только если вы не используете фрагмент программы). Каждый проход имеет ряд основных атрибутов, таких как "ambient", чтобы установить размер и цвет окружающего света, отраженного от материала. Некоторые из этих параметров не применяются, если вы используете вершинные программы, смотрите раздел 3.1.2 "Проходы" для более подробной информации.

DCamer 24.05.10 в 15:18

0

В каждом проходе, текстурные блоки не могут отсуствовать или их не может быть много (смотрите раздел 3.1.3 "Текстурные блоки"). Эти текстурные определения, будут использоваться, возможно, и с некоторыми операциями блендинга (которые используют мультитекстурирование) и текстурными эффектами.

DCamer 24.05.10 в 15:22

0

Вы также можете связывать вершины и фрагменты программ (или вершинные и пиксельные шейдеры, если вы хотите использовать эту терминологию) в проход с заданным набором параметров. Программы сами объявляются в отдельном скрипте .program (см. раздел 3.1.4 "Объявление вершин и фрагментов программ") и могут быть использованы, как описано в разделе 3.1.9 "Использование вершин и фрагментов программ в проходе".

DCamer 24.05.10 в 15:26

0

<i><b>Атрибуты материалов верхнего уровня</b></i>
Внешняя часть определения материала имеет не очень много признаков его собственных (большинство из них настраиваемые) параметров внутри дочерних разделов. Однако, есть некоторые из них, вот они:

DCamer 24.05.10 в 15:29

0

<i><b>lod_distances</b></i>
Этот атрибут контролирует расстояния, на которых различные методы могут вступить в силу. Смотрите раздел 3.1.1 "Методы" для всестороннего обсуждения этого параметра.

DCamer 24.05.10 в 15:30

0

<i><b>receive_shadows</b></i>
Этот атрибут управляет объектами использующими этот материала, и включает на них тени.

DCamer 24.05.10 в 15:32

0

Формат: receive_shadows
По умолчанию: on

Elrick 18.09.08 в 09:32

0

Формат: receive_shadows "on|off"
По умолчанию: on

DCamer 24.05.10 в 15:32

0

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

DCamer 24.05.10 в 15:35

0

<i><b>transparency_casts_shadows</b></i>
Этот атрибут управляет прозрачными материалами, на которых можно привести некоторые виды теней.

DCamer 24.05.10 в 15:36

0

Формат: transparency_casts_shadows "on|off"
По умолчанию: off

DCamer 24.05.10 в 15:36

0

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

DCamer 24.05.10 в 15:41

0

<i><b>set_texture_alias</b></i>
Этот атрибут связывает псевдоним текстуры с именем текстуры.

DCamer 24.05.10 в 15:42

0

Формат: set_texture_alias "псевдоним" "имя"

DCamer 24.05.10 в 15:43

0

Этот атрибут используется для установки текстур, используемых в текстурном блоке, которые были скопированы из другого материала. (См. раздел 3.1.11 "Копирование материалов")

DCamer 24.05.10 в 15:48

0
Минутку...