andreyvoroncov
@andreyvoroncov
мечтатель

Как в созданном материале сделать каналы активными?

У меня Cinema 4D R23. Пытаюсь создать материал в скрипте на питоне таким образом:
import c4d

def main():
    material = c4d.BaseMaterial(c4d.Mmaterial)

    bc = material.GetDataInstance() # получаем живой контейнер
    bc.SetBool(c4d.MATERIAL_USE_COLOR,True) # активируем канал цвета
    bc.SetBool(c4d.MATERIAL_USE_DIFFUSION,True) # активируем канал диффузии
    bc.SetFloat(c4d.MATERIAL_DIFFUSION_BRIGHTNESS,0.25) # меняем интенсивность на 25%
    bc.SetBool(c4d.MATERIAL_USE_LUMINANCE,True) # активируем канал свечения
    bc.SetBool(c4d.MATERIAL_USE_REFLECTION,True) # активируем канал отражений
    bc.SetBool(c4d.MATERIAL_USE_NORMAL,True) # активируем канал нормалей

    doc.InsertMaterial(material) # вставили материал в документ
    c4d.EventAdd() # обновили изменения

if __name__=='__main__':
    main()

Материал создается, но почему то у него активированы только каналы цвет и отражение. Хотя интенсивность канала диффузии изменилась на 25% - сам канал остался выключенным. Это баг или я что-то делаю неправильно?
  • Вопрос задан
  • 87 просмотров
Решения вопроса 1
black1277
@black1277
Вольный стрелок
Да, скорее всего баг. У меня ваш пример тоже криво срабатывает. Но помимо установки свойств через объект контейнера, можно в некоторых случаях обращаться напрямую к свойствам объекта вот так:
material[c4d.MATERIAL_USE_COLOR] = True
material[c4d.MATERIAL_USE_DIFFUSION] = True
material[c4d.MATERIAL_DIFFUSION_BRIGHTNESS] = 0.25
material[c4d.MATERIAL_USE_LUMINANCE] = True
material[c4d.MATERIAL_USE_REFLECTION] = True
material[c4d.MATERIAL_USE_NORMAL] = True
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы