Render.ru

Как уменьшить или увеличить кол-во сабдивов сразу на всех матах и ИС?

remuhin

Активный участник
Рейтинг
17
#1
Собственно вопрос в названии.Сорри если уже спрашивали,я не нашел. Просто это морока вручную увеличивать сабдивы на всех матах,потом для черновых рендеров опять понижать - тратится куча времени.Наверняка должно быть решение?
 

Лэйн Ивакура

Активный участник
Рейтинг
5
#3
Без плагинов: найди в настройках vray значение Global subdivs multiplier - это некий общий множитель, на который будет умножено количество всех сабдивов сцены при просчете. Минусы этого способа очевидны
Вообще судя по 1му посту тебе понравится плагин solid rocks http://solidrocks.subburb.com/
 

Anton Chernov

Активный участник
Рейтинг
15
#4
А смысл крутить ВСЕ сабдивы сцены, когда можно только для материалов?
 

Лэйн Ивакура

Активный участник
Рейтинг
5
#5
ну на самом деле не все. лайт кеш, фотонные мапы, каустика и антиалиасинг не трогаются, как оказалось.
а смысл может быть в том, что чем меньше плугов, тем обычно стабильней система. и я не пропогандирую ничего. считаю, что знать такие вещи полезно в качестве ликбеза, а там кто что выберет - дело вкуса и навыков
 

remuhin

Активный участник
Рейтинг
17
#6
Да,я тоже сторонник минимализма в этом отношении.Может это и неправильно,но тоже стараюсь лишними плагинами не обрастать.Особенно при переходе на новую версию макса из-за этого начинаются траблы
 

Anton Chernov

Активный участник
Рейтинг
15
#7
Зато влияет на "глубину резкости, смазывание при движении, карту освещенности, прямое вычисление GI, неточечные источники света, размытые тени".. Что, естественно, скажется на времени рендера. А отказываться от скриптов, имхо, неправильно, так как зачастую многие рутинные действия можно на них повесить. Причём обычные скрипты, без использования .NET, обычно прекрасно работают на любых версиях макса. К примеру, вот код для изменения сабдивов на отражения всех материалах (VrayMtl):
Код:
for i in scenematerials do (
	if classof i == VrayMtl then i.reflection_subdivs = 20
)
 

remuhin

Активный участник
Рейтинг
17
#8
Ну да,поспорить трудно.Честно говоря я наверное просто не разбираюсь ,поэтому и сужу опрометчиво.Стоит попробовать расширить свой кругозор
 

Нина Волошина

Пользователь сайта
Рейтинг
2
#9
Я не разбираюсь в программировании но у меня есть задача взять большую библиотеку материалов 3,5Гб и подготовить её для анимации, т.е. надо на всех материалах сделать кол-во сабдивов 8 и на рефлекшн и на рефракшн. В ручную каждый материальчик открывать, менять там сабдивы на 8 и пересохранять и так около 10000 раз это слишком долго...практически не возможно. На форуме нашла скрипт для смены сабдивов на рефлекшн, а что нужно к нему добавить что б он менял оба параметра и рефлект и рефракт и сохранял переделанный материал обратно в библиотеку?

На форуме есть ссылка на подобный скрипт "Vray subdiv optimizer" но с 2009 максом он не работает к сожалению...а мне нужно подготовить материалы как раз к 2009 максу....Помогите не знаю что делать..)
 
Рейтинг
31
#11
К сожалению скрипт из поста #7 работает некорректно. Причины две. (1) Перебираются только материалы сцены (т.е. материалы, которые уже назначены объектам), но игнорируются неназначенные материалы в редакторе материалов и библиотеках материалов. Но это мелочь. (2) Скриптом будут изменены только материалы, имеющие первичный тип VRayMtl. Материалы типа VRayMtl, которые выступают в роли подматериалов, изменены не будут. Например подматериалы в материале типа Multi/Sub-Object или VRayOverrideMtl. Что есть совсем нехорошо.

Я попробовал накидать усовершенствованную версию скрипта, лишённого этих недостатков.
Код:
mat_ary = #()

fn searchMat a_mat a_mary = (
	if classOf a_mat == VRayMtl then (
		append a_mary a_mat
	)
	else (
		if ((isKindOf a_mat material) or (isKindOf a_mat ArrayParameter) or (isKindOf a_mat Array)) do (
			props = getPropNames a_mat
			for p in props do (
				prop_value = getProperty a_mat p
				case of (
					(isKindOf prop_value material): searchMat prop_value a_mary
					((isKindOf prop_value ArrayParameter) or (isKindOf prop_value Array)): for par in prop_value do (searchMat par a_mary)
				)
			)
		)
	)
)

for mat in sceneMaterials do (
	searchMat mat mat_ary
)

for mat in meditMaterials do (
	searchMat mat mat_ary
)

for mat in currentMaterialLibrary do (
	searchMat mat mat_ary
)

for mat in mat_ary do (
	format "\"%\"(%)\n" mat.name ((classOf mat) as string)
--
-- сюда надо добавить осмысленное действие, выполняемое для каждого материала mat, например
--        mat.reflection_subdivs = 20 
--
)
Не могу гарантировать, что скрипт будет корректно обрабатывать абсолютно все случаи - на тщательное тестирование просто нет времени, но, чисто идейно, должен работать :p

Скрипт собирает в массив mat_ary все найденные материалы типа VRayMtl (возможно наличие нескольких инстансов одного материала!) и в последнем цикле for обрабатывает найденные материалы. Сейчас скрипт просто выводит в окно Listener'а для каждого найденного материала его имя и класс.

Материалы ищутся среди материалов сцены (sceneMaterials), материалов в редакторе материалов (meditMaterials) и в текущей библиотеке материалов (currentMaterialLibrary). Если в каком-то из этих мест искать не надо, то можно просто закомментировать нужный цикл.
 
Сверху