ASG сказал(а):
Воспользовавшись MacroRecorder-ом получил:
Все теперь ясно.
)) Это не Shellac, a Shell_Material!
то есть добавьте в цикл:
if (classof sceneMaterials[m]) == Shell_Material do
(
sceneMaterials[m].bakedMaterial.useSelfIllumColor = on
sceneMaterials[m].bakedMaterial.selfIllumColor = white
)
ASG сказал(а):
В сцене 183 материалов: первым идет VrayMtl, затем около 40 Shellac, один Standard, еще около 60 Shellac, остальные вперемешку.
Задача несколько сложнее, чем кажется на первый взгляд. Self-Illumination есть только у стандартного материала. У всех прочих материалов таких как Multi/SubObject, Double-Sided, Shellac и т.д. его нет. Поэтому просто так не установишь - придется их просматривать в поиске свойства типа material, проверять, что свойству назначен стандартный материал, и только после этого устанавливать уже ему selfIllumColor = white. Учитывая то, что сами свойства также могут содержать нестандартные материалы, свойства которых также могут содержать материалы-"контейнеры" и так далее до бесконечности, получим сумашедшую иерархию, которую придется просматривать рекурсивно. Не говоря уже о том, что у каждого материала эти своства называются по разному (например, у материала doubleSided, это - .material1 и .material2).
То есть если материалы в сцене слишком сложные, то написание универсального скрипта может превратится в настоящий гемор.
Может Вам в действительности и не нужно менять Self-Illumination у всех материалов, а только у стандартных назначенных Шеллу?
ASG сказал(а):
Может в условии использовать не do, а then вместе с else?
Это без разницы. if можно писать с do, если он используется без else.
ASG сказал(а):
Этот скрипт я хотел бы использовать для нормального использования RenderToTexture в связке с Vray для сохранения сцены, например в Cult3D или ViewPoint, с использованием "запеченных" текстур (GI).
С Vray не очень знаком, но помоему у VRayMtl вроде же даже нет такого параметра Self-Illumination. (Да и с Viewpoint'ом тоже). То есть вы хотите экпортнуть сцену?