Параметры доступа Softimage в C++
Я немного отчаялся здесь... Я пытаюсь получить доступ к одному параметру света в Softimage.
Во-первых, когда мы делаем это:
light.GetParameterValue(L"LightExponent")
оно работает!
Но когда мы пытаемся:
light.GetParameterValue(L"soft_light.atten")
это терпит неудачу полностью!
Я пытался найти документацию, но единственный код, который я мог найти, находится на Python, и нет указаний на эквивалент в C++. В python им удается сделать что-то вроде:
xsi = Application
test = xsi.GetValue("LightName.point.soft_light.atten")
Но я не могу понять, что такое Application, и это не то же самое, что XSI::Application в API.
Итак, есть идеи, как получить доступ к этому значению? Кроме того, если бы я мог найти эквивалент Application.GetValue (в скрипте вы можете увидеть Application.SetValue... так что я представляю, что GetValue существует в некоторой форме!) В C++, это было бы неплохо... Я мог бы просто используйте имя источника света, а затем добавьте информацию, которая мне нужна для доступа к этому значению, например:
SomeUnknownClassForNow::GetValue(light.GetName() + ".point.soft_light.atten");
Любая идея?
1 ответ
С помощью нашего клиента мне наконец удалось найти правильное решение для этого.
Во-первых, есть несколько прямых параметров, таких как "LightExponent". Но есть другие параметры, связанные с объектом, например свет, в других категориях, называемых шейдерами.
С источником света или, по крайней мере, точечным источником света, есть только один шейдер, называемый "soft_light". Доступ к нему можно получить:
light.GetShaders()[0]
Можно проверить его имя с помощью GetName(). Который в данном случае будет "LightName.point.soft_light".
Наконец, для доступа к параметру "soft_light.atten":
light.GetShaders()[0].GetParameterValue("atten")
Таким образом, в Softimage есть своего рода Иерархия в объектах, и все они разделены как шейдеры. Для более сложного объекта просто найдите подходящий шейдер и извлеките его параметр.