Читайте также:
|
|
Ключевую роль при написании этих плугинов обычно играет обработчик события apply или preApply. После объявления, описанный эффект доступен через диалог Render Effects > Add
Событие apply генерируется применением написанного Вами фильтра к результату рендеринга
on apply Параметр do
Когда написанный Вами эффект добавлен к списку эффектов и нажата кнопка Update Scene или Update Effect, обработчик события apply получает управление. В качестве параметра ему передается готовая битовая карта – результат рендеринга, со всеми эффектами, которые находятся в списке перед Вашим. В этом месте программы можно отредактировать полученное изображение (обычно при этом используются функции getPixel () и setPixel ()). Полученное в результате изображение переходит для обработки к следующим эффектам.
Чтобы написанный Вами эффект мог использовать данные канала g-буфера, необходимо определить обработчик события
on channelsRequired do
Этот обработчик должен возвращать массив имен каналов g-буфера. Допускаются следующие имена.
#zDepth
#matID
#objectID
#UVCoords
#normal
#unClamped
#coverage
#node
#shaderColor
#shaderTransparency
#velocity
#weight
Имеется еще одно событие, которое может понадобиться Вам при написании плугинов данного класса.
on preApply Параметр do
Его обработчик позволяет Вам анализировать результат рендеринга до применения к нему эффекта делегата. В приведенном ниже примере обработчик channelsRequired определяет необходимость в каналах #node и #coverage, а preApply использует информацию канала #node в качестве маски для эффекта делегата, что позволяет ограничить эффект пределами одного объекта сцены.
При разработке эффектов следует учитывать, что нельзя использовать в обработчике их событий функцию render, так как это приведет к зацикливанию программы.
Пример:
-- Данный эффект расширяет свойства эффекта Blur, позволяя
-- ограничить область действия эффекта пределами выбранного
-- объекта сцены.
plugin RenderEffect myBlurFX name:"Super Blur FX" classID:#(6545,456581)
extends:Blur version:1
(-- Локальные переменные
local tx = bitmaptexture()
local cm
local g_channels = #(#node, #coverage)
-- Свиток для дополнительных параметров эффекта
-- (Выбор объекта, к которому применяется фильтр)
rollout params "Super Blur FX Parameters"
(label nn align:#center
pickbutton nodepick "Pick Node"
)
-- Блок параметров
parameters main rollout:params
(thenode type:#node ui:nodepick
on thenode set nd do
params.nn.text = if nd = = undefined then "" else nd.name
)
-- Определение используемых каналов g-буфера
on channelsRequired do g_channels
-- Получение маски для применения фильтра
on preApply map do if theNode!= undefined then
(if cm = = undefined then
(cm = getChannelAsMask map #node node:theNode \
fileName:(scriptsPath + "__fxtmp.bmp")
save cm
tx.bitmap = cm
)
else
getChannelAsMask map #node node:theNode to:cm
)
-- Определение маски фильтра
on create do
(delegate.selMaskActive = true
delegate.selImageActive = false
delegate.selMaskMap = tx
)
)
Пример
-- Данный скрипт упрощает фильтр цветового баланса, позволяя
-- регулировать только красный цвет
plugin renderEffect myColorBalanceFx name:"Super Color Balance FX"
classID:#(64425,45761) extends:Color_Balance version:1
replaceUI:true
(-- Блок параметров
parameters main rollout:params
(redness type:#integer animatable:true ui:redness default:0.0
on redness set val do delegate.red = val
)
-- Свиток
rollout params "Super Color Balance Parameters"
(spinner redness "Redness: " type:#integer range:[-100,100,0]
)
)
Пример
-- Данный скрипт позволяет формировать изображение,
-- напоминающее негатив
plugin renderEffect Negative name:"Negative"
classID:#(0xb7aa794c, 0xc3bd78ab)
(-- Блок параметров содержит обращаемый цвет
parameters main rollout:params
(Color type:#color default:blue ui:Color
)
-- Свиток, в котором определен компонент выбора цвета
rollout params "Negative Parameters"
(colorpicker Color "Base color: " align:#center
)
-- Обращение цвета пересмотром всех точек
on apply bmp do
(for h = 0 to (bmp.height-1) do
(local sline = getPixels bmp [0,h] bmp.width
for i = 1 to sline.count do sline[i] = Color - sline[i]
setPixels bmp [0,h] sline
)
)
)
Дата добавления: 2015-10-31; просмотров: 62 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Скрипт плугины класса SimpleMod | | | Объекты 3ds max |