Render.ru

Рендер обьектов отдельно от сцены. Проблема

Дядя Миша

Пользователь сайта
Рейтинг
2
#1
Здравствуйте, была необходимость ускорить процесс рендера объектов отдельно от сцены, знаний в макскрипте = 0, но удалось собрать рабочий прототип который все же при выделении нескольких объектов рендерит каждый в отдельном окне отдельно от сцены. Появилась проблема с группами, скрипт их не видит и рендерит все объекты в них отдельно, в итоге имеется куча бесполезного мусора вместо одного скажем диванчика.

Вот собственно сам скрипт (без лишних кнопок,роллаутов, чекеров и сейвера рендера)

Код:
(
        local current_object = 0 
	for i in selection do  
		 (
		myobj = selection as array 
		current_object += 1 
 		if current_object > 0 do
			(
			$*.renderable = on 
			$*.primaryVisibility = off 	-- visible to camera
			myobj[current_object].renderable = on 
			myobj[current_object].primaryVisibility = on 
			render myobj[current_object] 
                          )   
                  )                     
)
Может кто подскажет чем эти каракули подправить чтобы оно группы как отдельный обьект воспринимало?
 

igorznag

Мастер
Рейтинг
103
#2
Простой пример для частного случая:
В новой сцене создаем 2 чайника и группируем их.
Выделяем чайники и группу. Запускаем скрипт.
Код:
( 
local current_object = 0 
for i in selection do 
( 
myobj = selection as array 
current_object += 1 
if current_object > 0 do 
( 
$*.renderable = on 
$*.primaryVisibility = off -- visible to camera 
if isGroupHead  myobj[current_object]  and myobj[current_object].parent==undefined then
(
myobj[current_object].children.renderable = on 
myobj[current_object].children.primaryVisibility = on 
render ()
)
else if( not (isGroupHead  myobj[current_object] or  isGroupMember myobj[current_object]) )then
(
myobj[current_object].renderable = on 
myobj[current_object].primaryVisibility = on 
render ()
)
) 
) 
)
 
Симпатии: nat79

Дядя Миша

Пользователь сайта
Рейтинг
2
#3
Спасибо за помощь, на этом примере понял как с группами можно работать, добавил к нему еще проверку объекта состоит ли он в открытой группе,а то не хотел рендерить. Теперь всё летает :D
 

Дядя Миша

Пользователь сайта
Рейтинг
2
#4
Появилась новая проблема. Он не рендерит группы если в них есть еще группы =\. Можно добавить проверку на группу в группе, но я так понимаю если будет тройная или больше группа (несколько раз группирован обьект) то на каждый новый уровень групп прийдется добавлять новую проверку. Может есть какой-то универсальный способ?

P.S. Мучает чувство что решение элементарное,но знаний пока не хватает самому додумать
 

igorznag

Мастер
Рейтинг
103
#5
Простой пример для частного случая:
В новой сцене создаем 2 чайника и группируем их (Group1).
Создаем 2 сферы и группируем их (Group2).
Выделяем 2 группы и группируем их (Group3).
Выделяем основную группу (Group3), родитель которой является Scene Root.
Запускаем скрипт.
Код:
(
fn group_children_all g &g_c= 
( 
if(g.children.count>0)then 
for obj in g.children do 
(append g_c obj; group_children_all obj &g_c) 
)--fn group_children_all g &g_c= 
 
local current_object = 0 
for i in selection do 
( 
myobj = selection as array 
current_object += 1 
if current_object > 0 do 
( 
$*.renderable = on 
$*.primaryVisibility = off -- visible to camera 
if isGroupHead  myobj[current_object]  and myobj[current_object].parent==undefined then
(
obj_children=#(); group_children_all myobj[current_object] obj_children 
obj_children.renderable = on 
obj_children.primaryVisibility = on 
render ()
)
else if( not (isGroupHead  myobj[current_object] or  isGroupMember myobj[current_object]) )then
(
myobj[current_object].renderable = on 
myobj[current_object].primaryVisibility = on 
render ()
)
) 
) 
)
 
Симпатии: nat79

nat79

Пользователь сайта
Рейтинг
4
#6
Весь мозг сломал - как пакетно сохранять все frame buffer на диск? Когда много элементов в сцене, проблематично вручную сохранять каждый из них.
А если указывать путь в настройках, то последний затирает все предыдущие.
 

igorznag

Мастер
Рейтинг
103
#7
Весь мозг сломал - как пакетно сохранять все frame buffer на диск? Когда много элементов в сцене, проблематично вручную сохранять каждый из них.
А если указывать путь в настройках, то последний затирает все предыдущие.
Пример: В новой сцене создаем 2 чайника и выделяем их.
Открываем окно Render Scene (клавиша F10).
На вкладке Common, в свитке Common Parameters, в группе Render Output нажимаем кнопку Files.
В новом окне указываем нужный путь, название и тип файла (bmp, jpg, png).
Запускаем скрипт.
Код:
(
fn group_children_all g &g_c= 
( 
if(g.children.count>0)then 
for obj in g.children do 
(append g_c obj; group_children_all obj &g_c) 
)--fn group_children_all g &g_c= 

if(rendOutputFilename!="")then
(
renderSceneDialog.close();
render_folder=getFilenamePath rendOutputFilename
render_filename=getFilenameFile rendOutputFilename
render_filename_type=getFilenameType rendOutputFilename
current_object = 0;currrent_render=1
for i in selection do 
( 
myobj = selection as array 
current_object += 1
if current_object > 0 do 
( 
$*.renderable = on 
$*.primaryVisibility = off -- visible to camera
if isGroupHead  myobj[current_object]  and myobj[current_object].parent==undefined then
(
obj_children=#(); group_children_all myobj[current_object] obj_children 
obj_children.renderable = on 
obj_children.primaryVisibility = on
rendOutputFilename=render_folder+render_filename+(currrent_render as string)+render_filename_type
max quick render;currrent_render+=1
)
else if( not (isGroupHead  myobj[current_object] or  isGroupMember myobj[current_object]) )then
(
myobj[current_object].renderable = on 
myobj[current_object].primaryVisibility = on
rendOutputFilename=render_folder+render_filename+(currrent_render as string)+render_filename_type
max quick render;currrent_render+=1
)--else if( not (isGroupHead
)--if current_object > 0 do 
)--for i in selection do 
rendOutputFilename=render_folder+render_filename+render_filename_type
)--if(rendOutputFilename!="")then
)
 
Симпатии: nat79

nat79

Пользователь сайта
Рейтинг
4
#8
Спасибо, работает.
Хотел бы немного отблагодарить. См. личку.
 
Сверху