При написании скриптов в Blender часто нужно узнать полный список свойств какого-либо объекта для того, чтобы обращаться к ним в дальнейшем через Blender API. Рассмотрим, как можно получить список свойств и методов, доступных для исследуемого объекта.
- Команда dir
Самый простой способ быстро получить полную структуру нужного объекта – выполнить в Python-консоли команду dir, указав в качестве аргумента исследуемый объект.
Например, чтобы получить свойства и методы нода Glossy BSDF, нужно выделить его и в Python-консоли выполнить команду dir, указав в качестве аргумента активный выделенный нод:
1 |
dir(bpy.context.active_object.active_material.node_tree.nodes.active) |
После выполнения команды в окне консоли будет выведен список свойств и методов выделенного нода:
Команда dir дает полное представление о структуре объекта, но не показывает текущие значение его свойств.
- Сохранение структуры rna в файл
Как можно заметить по результатам выполнения команды dir, в исследуемом ноде присутствуют структуры bl_rna и rna_type. Это значит, что rna-структуру данного нода можно удобно выгрузить в файл.
Для этого создадим следующий простой скрипт:
1 2 3 4 5 6 7 8 9 |
import bpy import os from rna_xml import rna2xml file = open(os.path.dirname(bpy.data.filepath) + os.sep + 'glossy_rna.xml', 'w') rna2xml(file.write, root_node = 'glossy_bsdf', root_rna = bpy.context.active_object.active_material.node_tree.nodes.active) file.close() |
Скрипт создает файл с именем glossy_rna.xml в директории blender-проекта и с помощью модуля rna_xml и команды rna2xml выводит в этот файл структуру выделенного нода, который указан в параметре root_rna команды.
В результате содержание файла glossy_rna.xml выглядит так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
<glossy_bsdf> <inputs> <NodeSocketColor name="Color" identifier="Color" is_output="FALSE" hide="FALSE" enabled="TRUE" link_limit="1" is_linked="FALSE" show_expanded="FALSE" hide_value="FALSE" node="ShaderNodeBsdfGlossy::Glossy BSDF" type="RGBA" bl_idname="NodeSocketColor" default_value="0.8 0.8 0.8 1"> </NodeSocketColor> <NodeSocketFloatFactor name="Roughness" identifier="Roughness" is_output="FALSE" hide="FALSE" enabled="TRUE" link_limit="1" is_linked="FALSE" show_expanded="FALSE" hide_value="FALSE" node="ShaderNodeBsdfGlossy::Glossy BSDF" type="VALUE" bl_idname="NodeSocketFloatFactor" default_value="0.2"> </NodeSocketFloatFactor> <NodeSocketVector name="Normal" identifier="Normal" is_output="FALSE" hide="FALSE" enabled="TRUE" link_limit="1" is_linked="FALSE" show_expanded="FALSE" hide_value="TRUE" node="ShaderNodeBsdfGlossy::Glossy BSDF" type="VECTOR" bl_idname="NodeSocketVector" default_value="0 0 0"> </NodeSocketVector> </inputs> <internal_links> </internal_links> <outputs> <NodeSocketShader name="BSDF" identifier="BSDF" is_output="TRUE" hide="FALSE" enabled="TRUE" link_limit="4095" is_linked="FALSE" show_expanded="FALSE" hide_value="FALSE" node="ShaderNodeBsdfGlossy::Glossy BSDF" type="SHADER" bl_idname="NodeSocketShader"> </NodeSocketShader> </outputs> </glossy_bsdf> |
В файл сохранена структура свойств исследуемого нода с указанием их текущих значений.
Комбинируя оба рассмотренных варианта можно получить полную информацию о методах, свойствах и их текущем значении для объектов Blender.
Привет! Можно еще добавить дополнение 3. API Navigator
Привет! Интересная штука, не знал о нем.