Относится к Blender v2.31
#include <plugin.h>
Любой плагин Blender'а должен включать этот заголовочный файл, который содержит все структуры и определения, необходимые для того, чтобы плагин правильно работал с Blender'ом.
char name[]="Tiles";
Символьная строка содержит название плагина, это значение будет показано в заголовке текстуры в окне текстурных кнопок.
#define NR_TYPES 2 char stnames[NR_TYPES][16]= {"Square", "Deformed"};
Плагины могут иметь отдельные подтипы алгоритмов, например, текстура clouds в Blender'е имеет подтипы "Default" и "Color".
NR_STYPES должна содержать число подтипов вашего плагина, а также должны быть заданы имена для каждого подтипа. Каждый плагин должен иметь по крайней мере один подтип.
VarStruct varstr[]= {...};
Переменная varstr содержит всю необходимую Blender'у информацию для того, чтобы отобразить кнопки плагина. Кнопки плагина могут быть как цифровые, так и текстовые. Плагины ограничены максимальным количеством переменных, которое равно 32.
Каждый элемент VarStruct состоит из типа, названия, информации диапазона, и подсказки.
Тип определяет тип данных для каждой кнопки, и способ отображения этой кнопки. Для числовых кнопок это значение должно быть комбинацией (ORed) INT или FLO для числового формата, и NUM, NUMSLI, или TOG, для типа кнопки. Текстовые кнопки должны иметь тип ярлыка (LABEL).
Название - это то, что будет показано на (или рядом) кнопке. Оно ограничено 15 символами.
Информация диапазона состоит из трёх действительных значений для кнопки: по умолчанию, минимальное и максимальное. Для TOG кнопок минимальное задаёт нажатое состояное, а максимальное отжатое.
Подсказка - это строка, которая будет показана, когда мыш будет находиться над кнопкой (если пользователь включил подсказки). Она имеет ограничение в 80 символов, и должна быть установлена в нулевую строку (""), если не используется.
typedef struct Cast {...};
Структура cast используется в вызове функций, и служит как способ простого доступа ко всем данным плагина.
Cast должен содержать целое или действительное число для каждой кнопки в массиве varstr, вкючая текстовые. Обычно они имеют тоже самое имя, что и кнопки для простой справки.
float result[8];
Массив результатов, используемый для отправки информации в плагин и для получения результатов обработки. Значение результатов могут быть следующими:
Индекс результата |
Значение |
Диапазон |
result[0] | Значение интенсивности | 0.0 - 1.0 |
result[1] |
Значение красного | 0.0 - 1.0 |
result[2] |
Значение зелёного | 0.0 - 1.0 |
result[3] |
Значение синего | 0.0 - 1.0 |
result[4] |
Значение альфа-канала |
0.0 - 1.0 |
result[5] | Смещение по оси X | -1.0 - 1.0 |
result[6] |
Смещение по оси Y | 1.0 - 1.0 |
result[7] |
Смещение по оси Z | -1.0 - 1.0 |
Плагин всегда должен возвращать значение интенсивности. Возвращение значений RGB или нормали не обязательно, и должно индицироваться возвращаемым значением функции doit(), "1" для RGB или "2" для нормалей (Normal).
Перед вызовом плагина, Blender включает текущие нормали в result[5], result[6] и result[7].
float cfra
Значение cfra устанавливается Blender'ом в текущее каждый проход рендеринга. Это значение номера кадра +/- .5, что зависит от настройки.
plugin_tex_doit prototype
Функция plugin_tex_doit должна иметь прототип для использования фйнкцией getinfo. Вам не нужно изменять эту строку.
plugin_tex_getversion
Этя функция должна присутствовать в каждом плагине, чтобы он загружался корректно. Вам не нужно её изменять.
plugin_but_changed
Эта функция используется для обработки информации о том, какие кнопки изменяет пользователь. Многим плагинам не нужно использовать эту функцию, только когда интерфейс позволяет пользователю изменять какие-либо переменные, она используется для перерасчёта значений плагина (например, хэш-таблица случайных чисел).
plugin_init
Если необходимо, плагин может использовать эту функцию для инициализации внутренних данных. Примечание: Эта функция может быть вызвана несколько раз, если плагин копируется. Не инициализируйте глабальные данные с помощью этой функции.
plugin_getinfo
Эта функция используется для передачи Blender'у информации. Вам не нужно её изменять.
plugin_tex_doit
Эта функция отвечает за возврат в Blender значений о запрошенных пикселах.
Аргументы
int stype
Это число выбранных подтипов, смотрите NR_TYPES и char stypes выше.
Cast *cast
Структура Cast содержит данные плагина, смотрите элемент Cast выше.
float *texvec
Это указатель на три значения float, которые являются координатами текстуры для которых возвращается значение текстуры.
float *dxt float *dyt
Если эти указатели не равны NULL, то они указывают на два вектора (два массива по три заначения float), которые определяют размер запрошенной текстуры в пространстве пикселов. Они не равны NULL, только когда включён оверсэмплинг (OSA), и используются для расчёта правильного антиалиасинга.
Функция doit должна заполнять результирующий массив и возвращает 0,1,2, или 3, в зависимости от получаемого значения. Она всегда должна всегда заполнять значение интенсивности. Если функция заполняет значение цвета, то она возвращает 1. Если значение нормали, то 2. А если всё подряд, то 3.
Взаимодействие текстуры с материалом
Blender отчасти отличается от многих 3D пакетов логическим разделением между текстурой и материалом. В Blender'е текстуры это объекты, которые возвращают определённые значения, т.е. являются генераторами сигналов. Материалы управляют расположением текстуры на объектах, на которые воздействует, сколько, каким образом, и т.д. Правильно спроектированный плагин включать только те переменные, которые управляют возвращаемыми сигналами, но не их применением к объектам. Кнопки для контроля значений scale, range, axis, и т.д. лучше включать только, когда они позволяют легче управлять текстурой (в случае кнопки размера в плагине черепицы) или ускорить расчёт (подтипы Intensity/Color/Bump subtypes в плагине Clouds2). Иначе кнопки материала делают их ненужными, и интерфейс становится сложным без необходимости.