Render.ru

Просьба помочь в запуске скрипта Vertex Renderer

Oleg Preston

Активный участник
Рейтинг
7
#1
Доброго всем здравия, уважаемые профессионалы!

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

Не нашел другого способа рендера только вершин объектов (модификатор Lattice совсем не понравился).

Посмотрите, пожалуйста, что необходимо подправить в приложенном скрипте
(описание его здесь: https://help.autodesk.com/view/3DSM...GUID_853014AC_9DC8_4F5C_B14B_3643E5925AD8_htm).

Спасибо заранее огромное.

Скрипт приложен к сообщению и расположен здесь (для удобства):

----------------------

macroScript VertexRender category:"HowTo"
(
local VertexRendererEnabled = false
local screen_width, screen_height, back_vfb, front_vfb
fn VertexRendererFunction =
(
st = timestamp()
copy back_vfb front_vfb
for o in geometry where classof o != TargetObject do
(
theMesh = snapshotAsMesh o
dot_color = #(o.wirecolor)
theVertCount = theMesh.numverts
for v = 1 to theVertCount do
(
thePos = (getVert theMesh v)* viewport.getTM()
screen_origin = mapScreenToView [0,0] (thePos.z) [screen_width,screen_height]
end_screen = mapScreenToView [screen_width,screen_height] (thePos.z) [screen_width,screen_height]
world_size = screen_origin-end_screen
x_aspect = screen_width/(abs world_size.x)
y_aspect = screen_height/(abs world_size.y)
screen_coords = point2 (x_aspect*(thePos.x-screen_origin.x)) (-(y_aspect*(thePos.y-screen_origin.y)))
setPixels front_vfb screen_coords dot_color
)--end v loop
)--end o loop
display front_vfb
et = timestamp()
pushPrompt ("VertRender "+(1000.0/(et-st)) as string +" fps")
)--end fn

on isChecked return VertexRendererEnabled

on execute do
(
VertexRendererEnabled =not VertexRendererEnabled

if VertexRendererEnabled then
(
screen_width=RenderWidth
screen_height=RenderHeight
back_vfb = bitmap screen_width screen_height
front_vfb = bitmap screen_width screen_height
registerRedrawViewsCallback VertexRendererFunction
RedrawViews()
)
else
(
unRegisterRedrawViewsCallback VertexRendererFunction
close front_vfb
)
)--end on execute
)--end script


-----------------
 

Вложения

  • 1,5 КБ Просмотров: 156

LastJedi

Знаток
Рейтинг
27
#4
Понятно.
Скрипт не влияет на основной рендер. Чтобы увидеть результат его работы, после запуска надо вытащить на панель инструментов или в меню его кнопочку и включить. Сделать это можно, например, так:
  1. Меню Custimize -> Customize User Interface…
  2. Закладка Toolbars -> Category: HowTo
  3. Перетащить мышкой строку VertexRender на удобное место в панели инструментов.
  4. Включить кнопку VertexRender.

1618922501569.png
 

Oleg Preston

Активный участник
Рейтинг
7
#5
Понятно. Спасибо большое. Я хотел анимацию в точках отрендерить. Видать, этот скрипт не подходит... Ещё раз спасибо большое! Есть ли способ сделать рендер анимации в точках иным способом? (модификатор Lattice совсем не понравился).
 

Арт.К

Знаток
Рейтинг
65
#6
Почему не подходит? Впрочем, можно установить Krakatoa рендер. Кроме основной функции (быстро рендерить много частиц), он может рендерить и вершины геометрии, если включить опцию "гео.вртс", а при черном окружении (в темноте) не забыть добавить освещение.
 

Oleg Preston

Активный участник
Рейтинг
7
#7
Почему не подходит? Впрочем, можно установить Krakatoa рендер. Кроме основной функции (быстро рендерить много частиц), он может рендерить и вершины геометрии, если включить опцию "гео.вртс", а при черном окружении (в темноте) не забыть добавить освещение.
Спасибо большое Вам за ответ
 

LastJedi

Знаток
Рейтинг
27
#8
Можно и этот скрипт «допилить» :)
Если не особо стараться, то получится как-то так:
Код:
screen_width = 1920
screen_height = 1080

fileName = @"C:\RenderOut\Frame_"
fileExt = ".png"

for t in animationRange.start to animationRange.end do
(
    sliderTime = t
    vfb = bitmap screen_width screen_height

    for o in geometry where classof o != TargetObject do
    (
        theMesh = snapshotAsMesh o
        dot_color = #(o.wirecolor)
        theVertCount = theMesh.numverts
        for v = 1 to theVertCount do
        (
            thePos = (getVert theMesh v)* viewport.getTM()
            screen_origin = mapScreenToView [0,0] (thePos.z) [screen_width,screen_height]
            end_screen = mapScreenToView [screen_width,screen_height] (thePos.z) [screen_width,screen_height]
            world_size = screen_origin-end_screen
            x_aspect = screen_width/(abs world_size.x)
            y_aspect = screen_height/(abs world_size.y)
            screen_coords = point2 (x_aspect*(thePos.x-screen_origin.x)) (-(y_aspect*(thePos.y-screen_origin.y)))
            setPixels vfb screen_coords dot_color
        )
    )

    vfb.filename = fileName + (t as string) + fileExt

    save vfb
    close vfb
)
Корявенько, но работает…
В начале скрипта надо задать размеры кадра и имя файла. Рендерит весь таймлайн для активного вьюпорта.
 

Oleg Preston

Активный участник
Рейтинг
7
#9
Можно и этот скрипт «допилить» :)
Если не особо стараться, то получится как-то так:
Код:
screen_width = 1920
screen_height = 1080

fileName = @"C:\RenderOut\Frame_"
fileExt = ".png"

for t in animationRange.start to animationRange.end do
(
    sliderTime = t
    vfb = bitmap screen_width screen_height

    for o in geometry where classof o != TargetObject do
    (
        theMesh = snapshotAsMesh o
        dot_color = #(o.wirecolor)
        theVertCount = theMesh.numverts
        for v = 1 to theVertCount do
        (
            thePos = (getVert theMesh v)* viewport.getTM()
            screen_origin = mapScreenToView [0,0] (thePos.z) [screen_width,screen_height]
            end_screen = mapScreenToView [screen_width,screen_height] (thePos.z) [screen_width,screen_height]
            world_size = screen_origin-end_screen
            x_aspect = screen_width/(abs world_size.x)
            y_aspect = screen_height/(abs world_size.y)
            screen_coords = point2 (x_aspect*(thePos.x-screen_origin.x)) (-(y_aspect*(thePos.y-screen_origin.y)))
            setPixels vfb screen_coords dot_color
        )
    )

    vfb.filename = fileName + (t as string) + fileExt

    save vfb
    close vfb
)
Корявенько, но работает…
В начале скрипта надо задать размеры кадра и имя файла. Рендерит весь таймлайн для активного вьюпорта.
Супер! Спасибо Вам большое!
 

Oleg Preston

Активный участник
Рейтинг
7
#10
Можно и этот скрипт «допилить» :)
Если не особо стараться, то получится как-то так:
Код:
screen_width = 1920
screen_height = 1080

fileName = @"C:\RenderOut\Frame_"
fileExt = ".png"

for t in animationRange.start to animationRange.end do
(
    sliderTime = t
    vfb = bitmap screen_width screen_height

    for o in geometry where classof o != TargetObject do
    (
        theMesh = snapshotAsMesh o
        dot_color = #(o.wirecolor)
        theVertCount = theMesh.numverts
        for v = 1 to theVertCount do
        (
            thePos = (getVert theMesh v)* viewport.getTM()
            screen_origin = mapScreenToView [0,0] (thePos.z) [screen_width,screen_height]
            end_screen = mapScreenToView [screen_width,screen_height] (thePos.z) [screen_width,screen_height]
            world_size = screen_origin-end_screen
            x_aspect = screen_width/(abs world_size.x)
            y_aspect = screen_height/(abs world_size.y)
            screen_coords = point2 (x_aspect*(thePos.x-screen_origin.x)) (-(y_aspect*(thePos.y-screen_origin.y)))
            setPixels vfb screen_coords dot_color
        )
    )

    vfb.filename = fileName + (t as string) + fileExt

    save vfb
    close vfb
)
Корявенько, но работает…
В начале скрипта надо задать размеры кадра и имя файла. Рендерит весь таймлайн для активного вьюпорта.
Отлично работает!
 

Oleg Preston

Активный участник
Рейтинг
7
#11
Можно и этот скрипт «допилить» :)
Если не особо стараться, то получится как-то так:
Код:
screen_width = 1920
screen_height = 1080

fileName = @"C:\RenderOut\Frame_"
fileExt = ".png"

for t in animationRange.start to animationRange.end do
(
    sliderTime = t
    vfb = bitmap screen_width screen_height

    for o in geometry where classof o != TargetObject do
    (
        theMesh = snapshotAsMesh o
        dot_color = #(o.wirecolor)
        theVertCount = theMesh.numverts
        for v = 1 to theVertCount do
        (
            thePos = (getVert theMesh v)* viewport.getTM()
            screen_origin = mapScreenToView [0,0] (thePos.z) [screen_width,screen_height]
            end_screen = mapScreenToView [screen_width,screen_height] (thePos.z) [screen_width,screen_height]
            world_size = screen_origin-end_screen
            x_aspect = screen_width/(abs world_size.x)
            y_aspect = screen_height/(abs world_size.y)
            screen_coords = point2 (x_aspect*(thePos.x-screen_origin.x)) (-(y_aspect*(thePos.y-screen_origin.y)))
            setPixels vfb screen_coords dot_color
        )
    )

    vfb.filename = fileName + (t as string) + fileExt

    save vfb
    close vfb
)
Корявенько, но работает…
В начале скрипта надо задать размеры кадра и имя файла. Рендерит весь таймлайн для активного вьюпорта.
Зашел на Ваш сайт! http://www.lastjedioutpost.ru/ Отличные плагины!
 

ЛМА

Смотритель
Рейтинг
1 181
#13
А зачем вообще нужен скрипт на такую ерунду? Выделил все объекты (ну или какие нужны), открыл редактор материалов и кинул на них все нужный материал и всего делов. Чего тут автоматизировать то? Три движения мышкой всего то. Дольше будешь вспоминать где этот скрипт включается.
 

Юрий DomoVoy (DomoVoy)

Пользователь сайта
Рейтинг
4
#14
Спасибо :)
Раньше было больше времени ими заниматься. Столько идей осталось так и не опубликовано…
Так же нашел на Вашей страничке полезный для себя скрипт. Спасибо огромное.
 
Сверху