From af1711fdccb1c039032629586e80031ef2ea7ddd Mon Sep 17 00:00:00 2001 From: BrendanParmer <51296046+BrendanParmer@users.noreply.github.com> Date: Mon, 22 Jan 2024 18:37:37 -0600 Subject: [PATCH] feat: node settings now have version numbers --- compositor/node_settings.py | 935 +++++++++++++++++++++--------------- compositor/operator.py | 22 +- geometry/node_settings.py | 673 +++++++++++++++++--------- geometry/operator.py | 4 +- material/node_settings.py | 545 +++++++++++++-------- material/operator.py | 4 +- ntp_operator.py | 59 ++- utils.py | 16 +- 8 files changed, 1366 insertions(+), 892 deletions(-) diff --git a/compositor/node_settings.py b/compositor/node_settings.py index e4ae8ac..8034b30 100644 --- a/compositor/node_settings.py +++ b/compositor/node_settings.py @@ -1,447 +1,580 @@ -from ..utils import ST +from ..utils import ST, NTPNodeSetting -compositor_node_settings : dict[str, list[(str, ST)]] = { +compositor_node_settings : dict[str, list[NTPNodeSetting]] = { # INPUT - 'CompositorNodeBokehImage' : [("angle", ST.FLOAT), - ("catadioptric", ST.FLOAT), - ("flaps", ST.INT), - ("rounding", ST.FLOAT), - ("shift", ST.FLOAT)], - - 'CompositorNodeImage' : [("frame_duration", ST.INT), - ("frame_offset", ST.INT), - ("frame_start", ST.INT), - ("image", ST.IMAGE), - ("layer", ST.ENUM), - ("use_auto_refresh", ST.BOOL), - ("use_cyclic", ST.BOOL), - ("use_straight_alpha_output", ST.BOOL), - ("view", ST.ENUM)], - - 'CompositorNodeMask' : [("mask", ST.MASK), - ("motion_blur_samples", ST.INT), - ("motion_blur_shutter", ST.FLOAT), - ("size_source", ST.ENUM), - ("size_x", ST.INT), - ("size_y", ST.INT), - ("use_feather", ST.BOOL), - ("use_motion_blur", ST.BOOL)], - - 'CompositorNodeMovieClip' : [("clip", ST.MOVIE_CLIP)], - - 'CompositorNodeTexture' : [("node_output", ST.INT), #TODO: ?? - ("texture", ST.TEXTURE)], + 'CompositorNodeBokehImage' : [ + NTPNodeSetting("angle", ST.FLOAT), + NTPNodeSetting("catadioptric", ST.FLOAT), + NTPNodeSetting("flaps", ST.INT), + NTPNodeSetting("rounding", ST.FLOAT), + NTPNodeSetting("shift", ST.FLOAT) + ], + + 'CompositorNodeImage' : [ + NTPNodeSetting("frame_duration", ST.INT), + NTPNodeSetting("frame_offset", ST.INT), + NTPNodeSetting("frame_start", ST.INT), + NTPNodeSetting("image", ST.IMAGE), + NTPNodeSetting("layer", ST.ENUM), + NTPNodeSetting("use_auto_refresh", ST.BOOL), + NTPNodeSetting("use_cyclic", ST.BOOL), + NTPNodeSetting("use_straight_alpha_output", ST.BOOL), + NTPNodeSetting("view", ST.ENUM) + ], + + 'CompositorNodeMask' : [ + NTPNodeSetting("mask", ST.MASK), + NTPNodeSetting("motion_blur_samples", ST.INT), + NTPNodeSetting("motion_blur_shutter", ST.FLOAT), + NTPNodeSetting("size_source", ST.ENUM), + NTPNodeSetting("size_x", ST.INT), + NTPNodeSetting("size_y", ST.INT), + NTPNodeSetting("use_feather", ST.BOOL), + NTPNodeSetting("use_motion_blur", ST.BOOL) + ], + + 'CompositorNodeMovieClip' : [ + NTPNodeSetting("clip", ST.MOVIE_CLIP) + ], + + 'CompositorNodeTexture' : [ + NTPNodeSetting("node_output", ST.INT), #TODO: ?? + NTPNodeSetting("texture", ST.TEXTURE) + ], # Input > Constant - - 'CompositorNodeRGB' : [], - 'CompositorNodeValue' : [], + 'CompositorNodeRGB' : [], + 'CompositorNodeValue' : [], # Input > Scene + 'CompositorNodeRLayers' : [ + NTPNodeSetting("layer", ST.ENUM), + NTPNodeSetting("scene", ST.SCENE) + ], - 'CompositorNodeRLayers' : [("layer", ST.ENUM), - ("scene", ST.SCENE)], - - 'CompositorNodeSceneTime' : [], + 'CompositorNodeSceneTime' : [], - 'CompositorNodeTime' : [("curve", ST.CURVE_MAPPING), - ("frame_end", ST.INT), - ("frame_start", ST.INT)], + 'CompositorNodeTime' : [ + NTPNodeSetting("curve", ST.CURVE_MAPPING), + NTPNodeSetting("frame_end", ST.INT), + NTPNodeSetting("frame_start", ST.INT) + ], # OUTPUT - 'CompositorNodeComposite' : [("use_alpha", ST.BOOL)], - - 'CompositorNodeOutputFile' : [("active_input_index", ST.INT), #TODO: probably not right at all - - ("base_path", ST.STRING), - ("file_slots", ST.FILE_SLOTS), - ("format", ST.IMAGE_FORMAT_SETTINGS), - ("layer_slots", ST.LAYER_SLOTS)], - - 'CompositorNodeViewer' : [("center_x", ST.FLOAT), - ("center_y", ST.FLOAT), - ("tile_order", ST.ENUM), - ("use_alpha", ST.BOOL)], - - 'CompositorNodeSplitViewer' : [("axis", ST.ENUM), - ("factor", ST.INT)], + 'CompositorNodeComposite' : [ + NTPNodeSetting("use_alpha", ST.BOOL) + ], + + 'CompositorNodeOutputFile' : [ + NTPNodeSetting("active_input_index", ST.INT), #TODO: probably not right at all + NTPNodeSetting("base_path", ST.STRING), + NTPNodeSetting("file_slots", ST.FILE_SLOTS), + NTPNodeSetting("format", ST.IMAGE_FORMAT_SETTINGS), + NTPNodeSetting("layer_slots", ST.LAYER_SLOTS) + ], + + 'CompositorNodeViewer' : [ + NTPNodeSetting("center_x", ST.FLOAT), + NTPNodeSetting("center_y", ST.FLOAT), + NTPNodeSetting("tile_order", ST.ENUM), + NTPNodeSetting("use_alpha", ST.BOOL) + ], + + 'CompositorNodeSplitViewer' : [ + NTPNodeSetting("axis", ST.ENUM), + NTPNodeSetting("factor", ST.INT) + ], # COLOR - 'CompositorNodePremulKey' : [("mapping", ST.ENUM)], - - 'CompositorNodeValToRGB' : [("color_ramp", ST.COLOR_RAMP)], + 'CompositorNodePremulKey' : [ + NTPNodeSetting("mapping", ST.ENUM) + ], - 'CompositorNodeConvertColorSpace' : [("from_color_space", ST.ENUM), - ("to_color_space", ST.ENUM)], + 'CompositorNodeValToRGB' : [ + NTPNodeSetting("color_ramp", ST.COLOR_RAMP) + ], + 'CompositorNodeConvertColorSpace' : [ + NTPNodeSetting("from_color_space", ST.ENUM, min_version=(3, 1, 0)), + NTPNodeSetting("to_color_space", ST.ENUM, min_version=(3, 1, 0)) + ], - 'CompositorNodeSetAlpha' : [("mode", ST.ENUM)], + 'CompositorNodeSetAlpha' : [ + NTPNodeSetting("mode", ST.ENUM) + ], - 'CompositorNodeInvert' : [("invert_alpha", ST.BOOL), - ("invert_rgb", ST.BOOL)], - - 'CompositorNodeRGBToBW' : [], + 'CompositorNodeInvert' : [ + NTPNodeSetting("invert_alpha", ST.BOOL), + NTPNodeSetting("invert_rgb", ST.BOOL) + ], + 'CompositorNodeRGBToBW' : [], # Color > Adjust - 'CompositorNodeBrightContrast' : [("use_premultiply", ST.BOOL)], - - 'CompositorNodeColorBalance' : [("correction_method", ST.ENUM), - ("gain", ST.COLOR), - ("gamma", ST.COLOR), - ("lift", ST.COLOR), - ("offset", ST.COLOR), - ("offset_basis", ST.FLOAT), - ("power", ST.COLOR), - ("slope", ST.COLOR)], - - 'CompositorNodeColorCorrection' : [("red", ST.BOOL), - ("green", ST.BOOL), - ("blue", ST.BOOL), - #master - ("master_saturation", ST.FLOAT), - ("master_contrast", ST.FLOAT), - ("master_gamma", ST.FLOAT), - ("master_gain", ST.FLOAT), - ("master_lift", ST.FLOAT), - #highlights - ("highlights_saturation", ST.FLOAT), - ("highlights_contrast", ST.FLOAT), - ("highlights_gamma", ST.FLOAT), - ("highlights_gain", ST.FLOAT), - ("highlights_lift", ST.FLOAT), - #midtones - ("midtones_saturation", ST.FLOAT), - ("midtones_contrast", ST.FLOAT), - ("midtones_gamma", ST.FLOAT), - ("midtones_gain", ST.FLOAT), - ("midtones_lift", ST.FLOAT), - #shadows - ("shadows_saturation", ST.FLOAT), - ("shadows_contrast", ST.FLOAT), - ("shadows_gamma", ST.FLOAT), - ("shadows_gain", ST.FLOAT), - ("shadows_lift", ST.FLOAT), - #midtones location - ("midtones_start", ST.FLOAT), - ("midtones_end", ST.FLOAT)], - - 'CompositorNodeExposure' : [], - 'CompositorNodeGamma' : [], - - 'CompositorNodeHueCorrect' : [("mapping", ST.CURVE_MAPPING)], - - 'CompositorNodeHueSat' : [], - - 'CompositorNodeCurveRGB' : [("mapping", ST.CURVE_MAPPING)], - - 'CompositorNodeTonemap' : [("adaptation", ST.FLOAT), - ("contrast", ST.FLOAT), - ("correction", ST.FLOAT), - ("gamma", ST.FLOAT), - ("intensity", ST.FLOAT), - ("key", ST.FLOAT), - ("offset", ST.FLOAT), - ("tonemap_type", ST.ENUM)], + 'CompositorNodeBrightContrast' : [ + NTPNodeSetting("use_premultiply", ST.BOOL) + ], + + 'CompositorNodeColorBalance' : [ + NTPNodeSetting("correction_method", ST.ENUM), + NTPNodeSetting("gain", ST.COLOR), + NTPNodeSetting("gamma", ST.COLOR), + NTPNodeSetting("lift", ST.COLOR), + NTPNodeSetting("offset", ST.COLOR), + NTPNodeSetting("offset_basis", ST.FLOAT), + NTPNodeSetting("power", ST.COLOR), + NTPNodeSetting("slope", ST.COLOR) + ], + + 'CompositorNodeColorCorrection' : [ + NTPNodeSetting("red", ST.BOOL), + NTPNodeSetting("green", ST.BOOL), + NTPNodeSetting("blue", ST.BOOL), + #master + NTPNodeSetting("master_saturation", ST.FLOAT), + NTPNodeSetting("master_contrast", ST.FLOAT), + NTPNodeSetting("master_gamma", ST.FLOAT), + NTPNodeSetting("master_gain", ST.FLOAT), + NTPNodeSetting("master_lift", ST.FLOAT), + #highlights + NTPNodeSetting("highlights_saturation", ST.FLOAT), + NTPNodeSetting("highlights_contrast", ST.FLOAT), + NTPNodeSetting("highlights_gamma", ST.FLOAT), + NTPNodeSetting("highlights_gain", ST.FLOAT), + NTPNodeSetting("highlights_lift", ST.FLOAT), + #midtones + NTPNodeSetting("midtones_saturation", ST.FLOAT), + NTPNodeSetting("midtones_contrast", ST.FLOAT), + NTPNodeSetting("midtones_gamma", ST.FLOAT), + NTPNodeSetting("midtones_gain", ST.FLOAT), + NTPNodeSetting("midtones_lift", ST.FLOAT), + #shadows + NTPNodeSetting("shadows_saturation", ST.FLOAT), + NTPNodeSetting("shadows_contrast", ST.FLOAT), + NTPNodeSetting("shadows_gamma", ST.FLOAT), + NTPNodeSetting("shadows_gain", ST.FLOAT), + NTPNodeSetting("shadows_lift", ST.FLOAT), + #midtones location + NTPNodeSetting("midtones_start", ST.FLOAT), + NTPNodeSetting("midtones_end", ST.FLOAT) + ], + + 'CompositorNodeExposure' : [], + 'CompositorNodeGamma' : [], + + 'CompositorNodeHueCorrect' : [ + NTPNodeSetting("mapping", ST.CURVE_MAPPING) + ], + + 'CompositorNodeHueSat' : [], + + 'CompositorNodeCurveRGB' : [ + NTPNodeSetting("mapping", ST.CURVE_MAPPING) + ], + + 'CompositorNodeTonemap' : [ + NTPNodeSetting("adaptation", ST.FLOAT), + NTPNodeSetting("contrast", ST.FLOAT), + NTPNodeSetting("correction", ST.FLOAT), + NTPNodeSetting("gamma", ST.FLOAT), + NTPNodeSetting("intensity", ST.FLOAT), + NTPNodeSetting("key", ST.FLOAT), + NTPNodeSetting("offset", ST.FLOAT), + NTPNodeSetting("tonemap_type", ST.ENUM) + ], # Color > Mix - 'CompositorNodeAlphaOver' : [("premul", ST.FLOAT), - ("use_premultiply", ST.BOOL)], - - 'CompositorNodeCombineColor' : [("mode", ST.ENUM), - ("ycc_mode", ST.ENUM)], + 'CompositorNodeAlphaOver' : [ + NTPNodeSetting("premul", ST.FLOAT), + NTPNodeSetting("use_premultiply", ST.BOOL) + ], - 'CompositorNodeSeparateColor' : [("mode", ST.ENUM), - ("ycc_mode", ST.ENUM)], + 'CompositorNodeCombineColor' : [ + NTPNodeSetting("mode", ST.ENUM, min_version = (3, 3, 0)), + NTPNodeSetting("ycc_mode", ST.ENUM, min_version = (3, 3, 0)) + ], - 'CompositorNodeMixRGB' : [("blend_type", ST.ENUM), - ("use_alpha", ST.BOOL), - ("use_clamp", ST.BOOL)], #TODO: what is update() method for? + 'CompositorNodeSeparateColor' : [ + NTPNodeSetting("mode", ST.ENUM, min_version = (3, 3, 0)), + NTPNodeSetting("ycc_mode", ST.ENUM, min_version = (3, 3, 0)) + ], - 'CompositorNodeZcombine' : [("use_alpha", ST.BOOL), - ("use_antialias_z", ST.BOOL)], + 'CompositorNodeMixRGB' : [ + NTPNodeSetting("blend_type", ST.ENUM), + NTPNodeSetting("use_alpha", ST.BOOL), + NTPNodeSetting("use_clamp", ST.BOOL) + ], + 'CompositorNodeZcombine' : [ + NTPNodeSetting("use_alpha", ST.BOOL), + NTPNodeSetting("use_antialias_z", ST.BOOL) + ], # FILTER - 'CompositorNodeAntiAliasing' : [("contrast_limit", ST.FLOAT), - ("corner_rounding", ST.FLOAT), - ("threshold", ST.FLOAT)], + 'CompositorNodeAntiAliasing' : [ + NTPNodeSetting("contrast_limit", ST.FLOAT), + NTPNodeSetting("corner_rounding", ST.FLOAT), + NTPNodeSetting("threshold", ST.FLOAT) + ], - 'CompositorNodeDenoise' : [("prefilter", ST.ENUM), - ("use_hdr", ST.BOOL)], - - 'CompositorNodeDespeckle' : [("threshold", ST.FLOAT), - ("threshold_neighbor", ST.FLOAT)], - - - 'CompositorNodeDilateErode' : [("distance", ST.INT), - ("edge", ST.FLOAT), - ("falloff", ST.ENUM), - ("mode", ST.ENUM)], - - 'CompositorNodeInpaint' : [("distance", ST.INT)], - - - 'CompositorNodeFilter' : [("filter_type", ST.ENUM)], - - 'CompositorNodeGlare' : [("angle_offset", ST.FLOAT), - ("color_modulation", ST.FLOAT), - ("fade", ST.FLOAT), - ("glare_type", ST.ENUM), - ("iterations", ST.INT), - ("mix", ST.FLOAT), - ("quality", ST.ENUM), - ("size", ST.INT), - ("streaks", ST.INT), - ("threshold", ST.FLOAT), - ("use_rotate_45", ST.BOOL)], + 'CompositorNodeDenoise' : [ + NTPNodeSetting("prefilter", ST.ENUM), + NTPNodeSetting("use_hdr", ST.BOOL) + ], + + 'CompositorNodeDespeckle' : [ + NTPNodeSetting("threshold", ST.FLOAT), + NTPNodeSetting("threshold_neighbor", ST.FLOAT) + ], + + 'CompositorNodeDilateErode' : [ + NTPNodeSetting("distance", ST.INT), + NTPNodeSetting("edge", ST.FLOAT), + NTPNodeSetting("falloff", ST.ENUM), + NTPNodeSetting("mode", ST.ENUM) + ], + + 'CompositorNodeInpaint' : [ + NTPNodeSetting("distance", ST.INT) + ], + + 'CompositorNodeFilter' : [ + NTPNodeSetting("filter_type", ST.ENUM) + ], + + 'CompositorNodeGlare' : [ + NTPNodeSetting("angle_offset", ST.FLOAT), + NTPNodeSetting("color_modulation", ST.FLOAT), + NTPNodeSetting("fade", ST.FLOAT), + NTPNodeSetting("glare_type", ST.ENUM), + NTPNodeSetting("iterations", ST.INT), + NTPNodeSetting("mix", ST.FLOAT), + NTPNodeSetting("quality", ST.ENUM), + NTPNodeSetting("size", ST.INT), + NTPNodeSetting("streaks", ST.INT), + NTPNodeSetting("threshold", ST.FLOAT), + NTPNodeSetting("use_rotate_45", ST.BOOL) + ], - 'CompositorNodeKuwahara' : [("eccentricity", ST.FLOAT), - ("sharpness", ST.FLOAT), - ("size", ST.INT), - ("uniformity", ST.INT), - ("variation", ST.ENUM)], - - 'CompositorNodePixelate' : [], - 'CompositorNodePosterize' : [], - - 'CompositorNodeSunBeams' : [("ray_length", ST.FLOAT), - ("source", ST.VEC2)], + 'CompositorNodeKuwahara' : [ + NTPNodeSetting("eccentricity", ST.FLOAT, min_version = (4, 0, 0)), + NTPNodeSetting("sharpness", ST.FLOAT, min_version = (4, 0, 0)), + NTPNodeSetting("size", ST.INT, min_version = (4, 0, 0)), + NTPNodeSetting("uniformity", ST.INT, min_version = (4, 0, 0)), + NTPNodeSetting("variation", ST.ENUM, min_version = (4, 0, 0)) + ], + + 'CompositorNodePixelate' : [], + 'CompositorNodePosterize' : [], + + 'CompositorNodeSunBeams' : [ + NTPNodeSetting("ray_length", ST.FLOAT), + NTPNodeSetting("source", ST.VEC2) + ], # Filter > Blur - 'CompositorNodeBilateralblur' : [("iterations", ST.INT), - ("sigma_color", ST.FLOAT), - ("sigma_space", ST.FLOAT)], - - 'CompositorNodeBlur' : [("aspect_correction", ST.ENUM), - ("factor", ST.FLOAT), - ("factor_x", ST.FLOAT), - ("factor_y", ST.FLOAT), - ("filter_type", ST.ENUM), - ("size_x", ST.INT), - ("size_y", ST.INT), - ("use_bokeh", ST.BOOL), - ("use_extended_bounds", ST.BOOL), - ("use_gamma_correction", ST.BOOL), - ("use_relative", ST.BOOL), - ("use_variable_size", ST.BOOL)], - - 'CompositorNodeBokehBlur' : [("blur_max", ST.FLOAT), - ("use_extended_bounds", ST.BOOL), - ("use_variable_size", ST.BOOL)], - - 'CompositorNodeDefocus' : [("angle", ST.FLOAT), - ("blur_max", ST.FLOAT), - ("bokeh", ST.ENUM), - ("f_stop", ST.FLOAT), - ("scene", ST.SCENE), - ("threshold", ST.FLOAT), - ("use_gamma_correction", ST.BOOL), - ("use_preview", ST.BOOL), - ("use_zbuffer", ST.BOOL), - ("z_scale", ST.FLOAT)], - - 'CompositorNodeDBlur' : [("angle", ST.FLOAT), - ("center_x", ST.FLOAT), - ("center_y", ST.FLOAT), - ("distance", ST.FLOAT), - ("iterations", ST.INT), - ("spin", ST.FLOAT), - ("zoom", ST.FLOAT)], + 'CompositorNodeBilateralblur' : [ + NTPNodeSetting("iterations", ST.INT), + NTPNodeSetting("sigma_color", ST.FLOAT), + NTPNodeSetting("sigma_space", ST.FLOAT) + ], + + 'CompositorNodeBlur' : [ + NTPNodeSetting("aspect_correction", ST.ENUM), + NTPNodeSetting("factor", ST.FLOAT), + NTPNodeSetting("factor_x", ST.FLOAT), + NTPNodeSetting("factor_y", ST.FLOAT), + NTPNodeSetting("filter_type", ST.ENUM), + NTPNodeSetting("size_x", ST.INT), + NTPNodeSetting("size_y", ST.INT), + NTPNodeSetting("use_bokeh", ST.BOOL), + NTPNodeSetting("use_extended_bounds", ST.BOOL), + NTPNodeSetting("use_gamma_correction", ST.BOOL), + NTPNodeSetting("use_relative", ST.BOOL), + NTPNodeSetting("use_variable_size", ST.BOOL) + ], + + 'CompositorNodeBokehBlur' : [ + NTPNodeSetting("blur_max", ST.FLOAT), + NTPNodeSetting("use_extended_bounds", ST.BOOL), + NTPNodeSetting("use_variable_size", ST.BOOL) + ], + + 'CompositorNodeDefocus' : [ + NTPNodeSetting("angle", ST.FLOAT), + NTPNodeSetting("blur_max", ST.FLOAT), + NTPNodeSetting("bokeh", ST.ENUM), + NTPNodeSetting("f_stop", ST.FLOAT), + NTPNodeSetting("scene", ST.SCENE), + NTPNodeSetting("threshold", ST.FLOAT), + NTPNodeSetting("use_gamma_correction", ST.BOOL), + NTPNodeSetting("use_preview", ST.BOOL), + NTPNodeSetting("use_zbuffer", ST.BOOL), + NTPNodeSetting("z_scale", ST.FLOAT) + ], + + 'CompositorNodeDBlur' : [ + NTPNodeSetting("angle", ST.FLOAT), + NTPNodeSetting("center_x", ST.FLOAT), + NTPNodeSetting("center_y", ST.FLOAT), + NTPNodeSetting("distance", ST.FLOAT), + NTPNodeSetting("iterations", ST.INT), + NTPNodeSetting("spin", ST.FLOAT), + NTPNodeSetting("use_wrap", ST.BOOL, max_version = (3, 4, 0)), + NTPNodeSetting("zoom", ST.FLOAT) + ], - 'CompositorNodeVecBlur' : [("factor", ST.FLOAT), - ("samples", ST.INT), - ("speed_max", ST.INT), - ("speed_min", ST.INT), - ("use_curved", ST.BOOL)], + 'CompositorNodeVecBlur' : [ + NTPNodeSetting("factor", ST.FLOAT), + NTPNodeSetting("samples", ST.INT), + NTPNodeSetting("speed_max", ST.INT), + NTPNodeSetting("speed_min", ST.INT), + NTPNodeSetting("use_curved", ST.BOOL) + ], # KEYING - 'CompositorNodeChannelMatte' : [("color_space", ST.ENUM), - ("limit_channel", ST.ENUM), - ("limit_max", ST.FLOAT), - ("limit_method", ST.ENUM), - ("limit_min", ST.FLOAT), - ("matte_channel", ST.ENUM)], - - 'CompositorNodeChromaMatte' : [("gain", ST.FLOAT), - ("lift", ST.FLOAT), - ("shadow_adjust", ST.FLOAT), - ("threshold", ST.FLOAT), - ("tolerance", ST.FLOAT)], - - 'CompositorNodeColorMatte' : [("color_hue", ST.FLOAT), - ("color_saturation", ST.FLOAT), - ("color_value", ST.FLOAT)], - - 'CompositorNodeColorSpill' : [("channel", ST.ENUM), - ("limit_channel", ST.ENUM), - ("limit_method", ST.ENUM), - ("ratio", ST.FLOAT), - ("unspill_blue", ST.FLOAT), - ("unspill_green", ST.FLOAT), - ("unspill_red", ST.FLOAT), - ("use_unspill", ST.BOOL)], - - 'CompositorNodeDiffMatte' : [("falloff", ST.FLOAT), - ("tolerance", ST.FLOAT)], - - 'CompositorNodeDistanceMatte' : [("channel", ST.ENUM), - ("falloff", ST.FLOAT), - ("tolerance", ST.FLOAT)], - - 'CompositorNodeKeying' : [("blur_post", ST.INT), - ("blur_pre", ST.INT), - ("clip_black", ST.FLOAT), - ("clip_white", ST.FLOAT), - ("despill_balance", ST.FLOAT), - ("despill_factor", ST.FLOAT), - ("dilate_distance", ST.INT), - ("edge_kernel_radius", ST.INT), - ("edge_kernel_tolerance", ST.FLOAT), - ("feather_distance", ST.INT), - ("feather_falloff", ST.ENUM), - ("screen_balance", ST.FLOAT)], - - 'CompositorNodeKeyingScreen' : [("clip", ST.MOVIE_CLIP), - ("tracing_object", ST.STRING)], - - 'CompositorNodeLumaMatte' : [("limit_max", ST.FLOAT), - ("limit_min", ST.FLOAT)], + 'CompositorNodeChannelMatte' : [ + NTPNodeSetting("color_space", ST.ENUM), + NTPNodeSetting("limit_channel", ST.ENUM), + NTPNodeSetting("limit_max", ST.FLOAT), + NTPNodeSetting("limit_method", ST.ENUM), + NTPNodeSetting("limit_min", ST.FLOAT), + NTPNodeSetting("matte_channel", ST.ENUM) + ], + + 'CompositorNodeChromaMatte' : [ + NTPNodeSetting("gain", ST.FLOAT), + NTPNodeSetting("lift", ST.FLOAT), + NTPNodeSetting("shadow_adjust", ST.FLOAT), + NTPNodeSetting("threshold", ST.FLOAT), + NTPNodeSetting("tolerance", ST.FLOAT) + ], + + 'CompositorNodeColorMatte' : [ + NTPNodeSetting("color_hue", ST.FLOAT), + NTPNodeSetting("color_saturation", ST.FLOAT), + NTPNodeSetting("color_value", ST.FLOAT) + ], + + 'CompositorNodeColorSpill' : [ + NTPNodeSetting("channel", ST.ENUM), + NTPNodeSetting("limit_channel", ST.ENUM), + NTPNodeSetting("limit_method", ST.ENUM), + NTPNodeSetting("ratio", ST.FLOAT), + NTPNodeSetting("unspill_blue", ST.FLOAT), + NTPNodeSetting("unspill_green", ST.FLOAT), + NTPNodeSetting("unspill_red", ST.FLOAT), + NTPNodeSetting("use_unspill", ST.BOOL) + ], + + 'CompositorNodeDiffMatte' : [ + NTPNodeSetting("falloff", ST.FLOAT), + NTPNodeSetting("tolerance", ST.FLOAT) + ], + + 'CompositorNodeDistanceMatte' : [ + NTPNodeSetting("channel", ST.ENUM), + NTPNodeSetting("falloff", ST.FLOAT), + NTPNodeSetting("tolerance", ST.FLOAT) + ], + + 'CompositorNodeKeying' : [ + NTPNodeSetting("blur_post", ST.INT), + NTPNodeSetting("blur_pre", ST.INT), + NTPNodeSetting("clip_black", ST.FLOAT), + NTPNodeSetting("clip_white", ST.FLOAT), + NTPNodeSetting("despill_balance", ST.FLOAT), + NTPNodeSetting("despill_factor", ST.FLOAT), + NTPNodeSetting("dilate_distance", ST.INT), + NTPNodeSetting("edge_kernel_radius", ST.INT), + NTPNodeSetting("edge_kernel_tolerance", ST.FLOAT), + NTPNodeSetting("feather_distance", ST.INT), + NTPNodeSetting("feather_falloff", ST.ENUM), + NTPNodeSetting("screen_balance", ST.FLOAT) + ], + + 'CompositorNodeKeyingScreen' : [ + NTPNodeSetting("clip", ST.MOVIE_CLIP), + NTPNodeSetting("tracking_object", ST.STRING) + ], + + 'CompositorNodeLumaMatte' : [ + NTPNodeSetting("limit_max", ST.FLOAT), + NTPNodeSetting("limit_min", ST.FLOAT) + ], + # MASK - 'CompositorNodeCryptomatteV2' : [("add", ST.COLOR), - ("entries", ST.CRYPTOMATTE_ENTRIES), - ("frame_duration", ST.INT), - ("frame_offset", ST.INT), - ("frame_start", ST.INT), - ("image", ST.IMAGE), - ("layer", ST.ENUM), - ("layer_name", ST.ENUM), - ("matte_id", ST.STRING), - ("remove", ST.COLOR), - ("scene", ST.SCENE), - ("source", ST.ENUM), - ("use_auto_refresh", ST.BOOL), - ("use_cyclic", ST.BOOL), - ("view", ST.ENUM)], - - 'CompositorNodeCryptomatte' : [("add", ST.COLOR), #TODO: may need special handling - ("matte_id", ST.STRING), - ("remove", ST.COLOR)], - - - 'CompositorNodeBoxMask' : [("height", ST.FLOAT), - ("mask_type", ST.ENUM), - ("rotation", ST.FLOAT), - ("width", ST.FLOAT), - ("x", ST.FLOAT), - ("y", ST.FLOAT)], - - 'CompositorNodeEllipseMask' : [("height", ST.FLOAT), - ("mask_type", ST.ENUM), - ("rotation", ST.FLOAT), - ("width", ST.FLOAT), - ("x", ST.FLOAT), - ("y", ST.FLOAT)], - - - 'CompositorNodeDoubleEdgeMask' : [("edge_mode", ST.ENUM), - ("inner_mode", ST.ENUM)], - - 'CompositorNodeIDMask' : [("index", ST.INT), - ("use_antialiasing", ST.BOOL)], + 'CompositorNodeCryptomatteV2' : [ + NTPNodeSetting("add", ST.COLOR), + NTPNodeSetting("entries", ST.CRYPTOMATTE_ENTRIES), + NTPNodeSetting("frame_duration", ST.INT), + NTPNodeSetting("frame_offset", ST.INT), + NTPNodeSetting("frame_start", ST.INT), + NTPNodeSetting("image", ST.IMAGE), + NTPNodeSetting("layer", ST.ENUM), + NTPNodeSetting("layer_name", ST.ENUM), + NTPNodeSetting("matte_id", ST.STRING), + NTPNodeSetting("remove", ST.COLOR), + NTPNodeSetting("scene", ST.SCENE), + NTPNodeSetting("source", ST.ENUM), + NTPNodeSetting("use_auto_refresh", ST.BOOL), + NTPNodeSetting("use_cyclic", ST.BOOL), + NTPNodeSetting("view", ST.ENUM) + ], + + 'CompositorNodeCryptomatte' : [ + NTPNodeSetting("add", ST.COLOR), #TODO: may need special handling + NTPNodeSetting("matte_id", ST.STRING), + NTPNodeSetting("remove", ST.COLOR) + ], + + 'CompositorNodeBoxMask' : [ + NTPNodeSetting("height", ST.FLOAT), + NTPNodeSetting("mask_type", ST.ENUM), + NTPNodeSetting("rotation", ST.FLOAT), + NTPNodeSetting("width", ST.FLOAT), + NTPNodeSetting("x", ST.FLOAT), + NTPNodeSetting("y", ST.FLOAT) + ], + + 'CompositorNodeEllipseMask' : [ + NTPNodeSetting("height", ST.FLOAT), + NTPNodeSetting("mask_type", ST.ENUM), + NTPNodeSetting("rotation", ST.FLOAT), + NTPNodeSetting("width", ST.FLOAT), + NTPNodeSetting("x", ST.FLOAT), + NTPNodeSetting("y", ST.FLOAT) + ], + + 'CompositorNodeDoubleEdgeMask' : [ + NTPNodeSetting("edge_mode", ST.ENUM), + NTPNodeSetting("inner_mode", ST.ENUM) + ], + + 'CompositorNodeIDMask' : [ + NTPNodeSetting("index", ST.INT), + NTPNodeSetting("use_antialiasing", ST.BOOL) + ], # TRACKING - 'CompositorNodePlaneTrackDeform' : [("clip", ST.MOVIE_CLIP), - ("motion_blur_samples", ST.INT), - ("motion_blur_shutter", ST.FLOAT), - ("plane_track_name", ST.STRING), - ("tracking_object", ST.STRING), - ("use_motion_blur", ST.BOOL)], - - 'CompositorNodeStabilize' : [("clip", ST.MOVIE_CLIP), - ("filter_type", ST.ENUM), - ("invert", ST.BOOL)], - - 'CompositorNodeTrackPos' : [("clip", ST.MOVIE_CLIP), - ("frame_relative", ST.INT), - ("position", ST.ENUM), - ("track_name", ST.STRING), #TODO: probably not right - ("tracking_object", ST.STRING)], - + 'CompositorNodePlaneTrackDeform' : [ + NTPNodeSetting("clip", ST.MOVIE_CLIP), + NTPNodeSetting("motion_blur_samples", ST.INT), + NTPNodeSetting("motion_blur_shutter", ST.FLOAT), + NTPNodeSetting("plane_track_name", ST.STRING), + NTPNodeSetting("tracking_object", ST.STRING), + NTPNodeSetting("use_motion_blur", ST.BOOL) + ], + + 'CompositorNodeStabilize' : [ + NTPNodeSetting("clip", ST.MOVIE_CLIP), + NTPNodeSetting("filter_type", ST.ENUM), + NTPNodeSetting("invert", ST.BOOL) + ], + + 'CompositorNodeTrackPos' : [ + NTPNodeSetting("clip", ST.MOVIE_CLIP), + NTPNodeSetting("frame_relative", ST.INT), + NTPNodeSetting("position", ST.ENUM), + NTPNodeSetting("track_name", ST.STRING), #TODO: probably not right + NTPNodeSetting("tracking_object", ST.STRING) + ], # TRANSFORM - 'CompositorNodeRotate' : [("filter_type", ST.ENUM)], - - 'CompositorNodeScale' : [("frame_method", ST.ENUM), - ("offset_x", ST.FLOAT), - ("offset_y", ST.FLOAT), - ("space", ST.ENUM)], - - - 'CompositorNodeTransform' : [("filter_type", ST.ENUM)], - - 'CompositorNodeTranslate' : [("use_relative", ST.BOOL), - ("wrap_axis", ST.ENUM)], - - - 'CompositorNodeCornerPin' : [], - - 'CompositorNodeCrop' : [("max_x", ST.INT), - ("max_y", ST.INT), - ("min_x", ST.INT), - ("min_y", ST.INT), - ("rel_max_x", ST.FLOAT), - ("rel_max_y", ST.FLOAT), - ("rel_min_x", ST.FLOAT), - ("rel_min_y", ST.FLOAT), - ("relative", ST.BOOL), - ("use_crop_size", ST.BOOL)], - - - 'CompositorNodeDisplace' : [], - - 'CompositorNodeFlip' : [("axis", ST.ENUM)], - - 'CompositorNodeMapUV' : [("alpha", ST.INT)], - - - 'CompositorNodeLensdist' : [("use_fit", ST.BOOL), - ("use_jitter", ST.BOOL), - ("use_projector", ST.BOOL)], - - 'CompositorNodeMovieDistortion' : [("clip", ST.MOVIE_CLIP), - ("distortion_type", ST.ENUM)], - + 'CompositorNodeRotate' : [ + NTPNodeSetting("filter_type", ST.ENUM) + ], + + 'CompositorNodeScale' : [ + NTPNodeSetting("frame_method", ST.ENUM), + NTPNodeSetting("offset_x", ST.FLOAT), + NTPNodeSetting("offset_y", ST.FLOAT), + NTPNodeSetting("space", ST.ENUM) + ], + + 'CompositorNodeTransform' : [ + NTPNodeSetting("filter_type", ST.ENUM) + ], + + 'CompositorNodeTranslate' : [ + NTPNodeSetting("use_relative", ST.BOOL), + NTPNodeSetting("wrap_axis", ST.ENUM) + ], + + 'CompositorNodeCornerPin' : [], + + 'CompositorNodeCrop' : [ + NTPNodeSetting("max_x", ST.INT), + NTPNodeSetting("max_y", ST.INT), + NTPNodeSetting("min_x", ST.INT), + NTPNodeSetting("min_y", ST.INT), + NTPNodeSetting("rel_max_x", ST.FLOAT), + NTPNodeSetting("rel_max_y", ST.FLOAT), + NTPNodeSetting("rel_min_x", ST.FLOAT), + NTPNodeSetting("rel_min_y", ST.FLOAT), + NTPNodeSetting("relative", ST.BOOL), + NTPNodeSetting("use_crop_size", ST.BOOL) + ], + + 'CompositorNodeDisplace' : [], + + 'CompositorNodeFlip' : [ + NTPNodeSetting("axis", ST.ENUM) + ], + + 'CompositorNodeMapUV' : [ + NTPNodeSetting("alpha", ST.INT) + ], + + 'CompositorNodeLensdist' : [ + NTPNodeSetting("use_fit", ST.BOOL), + NTPNodeSetting("use_jitter", ST.BOOL), + NTPNodeSetting("use_projector", ST.BOOL) + ], + + 'CompositorNodeMovieDistortion' : [ + NTPNodeSetting("clip", ST.MOVIE_CLIP), + NTPNodeSetting("distortion_type", ST.ENUM) + ], # UTILITIES - 'CompositorNodeMapRange' : [("use_clamp", ST.BOOL)], - - 'CompositorNodeMapValue' : [("max", ST.VEC1), - ("min", ST.VEC1), - ("offset", ST.VEC1), - ("size", ST.VEC1), - ("use_max", ST.BOOL), - ("use_min", ST.BOOL)], - - 'CompositorNodeMath' : [("operation", ST.ENUM), - ("use_clamp", ST.BOOL)], - - - 'CompositorNodeLevels' : [("channel", ST.ENUM)], + 'CompositorNodeMapRange' : [ + NTPNodeSetting("use_clamp", ST.BOOL) + ], + + 'CompositorNodeMapValue' : [ + NTPNodeSetting("max", ST.VEC1), + NTPNodeSetting("min", ST.VEC1), + NTPNodeSetting("offset", ST.VEC1), + NTPNodeSetting("size", ST.VEC1), + NTPNodeSetting("use_max", ST.BOOL), + NTPNodeSetting("use_min", ST.BOOL) + ], + + 'CompositorNodeMath' : [ + NTPNodeSetting("operation", ST.ENUM), + NTPNodeSetting("use_clamp", ST.BOOL) + ], + + 'CompositorNodeLevels' : [ + NTPNodeSetting("channel", ST.ENUM) + ], - 'CompositorNodeNormalize' : [], + 'CompositorNodeNormalize' : [], - 'CompositorNodeSwitch' : [("check", ST.BOOL)], + 'CompositorNodeSwitch' : [ + NTPNodeSetting("check", ST.BOOL) + ], 'CompositorNodeSwitchView' : [], @@ -451,19 +584,27 @@ 'CompositorNodeSeparateXYZ' : [], 'CompositorNodeNormal' : [], - 'CompositorNodeCurveVec' : [("mapping", ST.CURVE_MAPPING)], + 'CompositorNodeCurveVec' : [ + NTPNodeSetting("mapping", ST.CURVE_MAPPING) + ], # MISC - 'CompositorNodeGroup' : [("node_tree", ST.NODE_TREE)], + 'CompositorNodeGroup' : [ + NTPNodeSetting("node_tree", ST.NODE_TREE) + ], - 'NodeFrame' : [("label_size", ST.INT), - ("shrink", ST.BOOL), - ("text", ST.TEXT)], + 'NodeFrame' : [ + NTPNodeSetting("label_size", ST.INT), + NTPNodeSetting("shrink", ST.BOOL), + NTPNodeSetting("text", ST.TEXT) + ], 'NodeGroupInput' : [], - 'NodeGroupOutput' : [("is_active_output", ST.BOOL)], + 'NodeGroupOutput' : [ + NTPNodeSetting("is_active_output", ST.BOOL) + ], 'NodeReroute' : [] } diff --git a/compositor/operator.py b/compositor/operator.py index 8078912..afe2d62 100644 --- a/compositor/operator.py +++ b/compositor/operator.py @@ -13,7 +13,7 @@ END_NAME = "end_name" NODE = "node" -comp_op_reserved_names = {SCENE, BASE_NAME, END_NAME, NODE} +COMP_OP_RESERVED_NAMES = {SCENE, BASE_NAME, END_NAME, NODE} class NTPCompositorOperator(NTP_Operator): bl_idname = "node.ntp_compositor" @@ -34,7 +34,7 @@ class NTPCompositorOperator(NTP_Operator): def __init__(self): super().__init__() self._settings = compositor_node_settings - for name in comp_op_reserved_names: + for name in COMP_OP_RESERVED_NAMES: self._used_vars[name] = 0 @@ -87,16 +87,16 @@ def _set_color_balance_settings(self, node: CompositorNodeColorBalance node (CompositorNodeColorBalance): the color balance node """ if node.correction_method == 'LIFT_GAMMA_GAIN': - lst = [("correction_method", ST.ENUM), - ("gain", ST.COLOR), - ("gamma", ST.COLOR), - ("lift", ST.COLOR)] + lst = [NTPNodeSetting("correction_method", ST.ENUM), + NTPNodeSetting("gain", ST.COLOR), + NTPNodeSetting("gamma", ST.COLOR), + NTPNodeSetting("lift", ST.COLOR)] else: - lst = [("correction_method", ST.ENUM), - ("offset", ST.COLOR), - ("offset_basis", ST.FLOAT), - ("power", ST.COLOR), - ("slope", ST.COLOR)] + lst = [NTPNodeSetting("correction_method", ST.ENUM), + NTPNodeSetting("offset", ST.COLOR), + NTPNodeSetting("offset_basis", ST.FLOAT), + NTPNodeSetting("power", ST.COLOR), + NTPNodeSetting("slope", ST.COLOR)] self._settings['CompositorNodeColorBalance'] = lst diff --git a/geometry/node_settings.py b/geometry/node_settings.py index d637180..ffa30c6 100644 --- a/geometry/node_settings.py +++ b/geometry/node_settings.py @@ -1,190 +1,271 @@ -from ..utils import ST +from ..utils import ST, NTPNodeSetting -geo_node_settings : dict[str, list[(str, ST)]] = { +geo_node_settings : dict[str, list[NTPNodeSetting]] = { # ATTRIBUTE - 'GeometryNodeAttributeStatistic' : [("data_type", ST.ENUM), - ("domain", ST.ENUM)], + 'GeometryNodeAttributeStatistic' : [ + NTPNodeSetting("data_type", ST.ENUM), + NTPNodeSetting("domain", ST.ENUM) + ], - 'GeometryNodeAttributeDomainSize' : [("component", ST.ENUM)], + 'GeometryNodeAttributeDomainSize' : [ + NTPNodeSetting("component", ST.ENUM, min_version = (3, 1, 0)) + ], - 'GeometryNodeBlurAttribute' : [("data_type", ST.ENUM)], + 'GeometryNodeBlurAttribute' : [ + NTPNodeSetting("data_type", ST.ENUM, min_version = (3, 5, 0)) + ], - 'GeometryNodeCaptureAttribute' : [("data_type", ST.ENUM), - ("domain", ST.ENUM)], + 'GeometryNodeCaptureAttribute' : [ + NTPNodeSetting("data_type", ST.ENUM), + NTPNodeSetting("domain", ST.ENUM) + ], - 'GeometryNodeRemoveAttribute' : [], + 'GeometryNodeRemoveAttribute' : [], - 'GeometryNodeStoreNamedAttribute' : [("data_type", ST.ENUM), - ("domain", ST.ENUM)], + 'GeometryNodeStoreNamedAttribute' : [ + NTPNodeSetting("data_type", ST.ENUM, min_version = (3, 2, 0)), + NTPNodeSetting("domain", ST.ENUM, min_version = (3, 2, 0)) + ], - 'GeometryNodeAttributeTransfer' : [("data_type", ST.ENUM), - ("domain", ST.ENUM), - ("mapping", ST.ENUM)], + 'GeometryNodeAttributeTransfer' : [ + NTPNodeSetting("data_type", ST.ENUM), + NTPNodeSetting("domain", ST.ENUM), + NTPNodeSetting("mapping", ST.ENUM) + ], # INPUT # Input > Constant - 'FunctionNodeInputBool' : [("boolean", ST.BOOL)], + 'FunctionNodeInputBool' : [ + NTPNodeSetting("boolean", ST.BOOL) + ], - 'FunctionNodeInputColor' : [("color", ST.VEC4)], + 'FunctionNodeInputColor' : [ + NTPNodeSetting("color", ST.VEC4) + ], - 'GeometryNodeInputImage' : [("image", ST.IMAGE)], + 'GeometryNodeInputImage' : [ + NTPNodeSetting("image", ST.IMAGE, min_version = (3, 5, 0)) + ], - 'FunctionNodeInputInt' : [("integer", ST.INT)], + 'FunctionNodeInputInt' : [ + NTPNodeSetting("integer", ST.INT) + ], - 'GeometryNodeInputMaterial' : [("material", ST.MATERIAL)], + 'GeometryNodeInputMaterial' : [ + NTPNodeSetting("material", ST.MATERIAL) + ], - 'FunctionNodeInputString' : [("string", ST.STRING)], + 'FunctionNodeInputString' : [ + NTPNodeSetting("string", ST.STRING) + ], - 'ShaderNodeValue' : [], + 'ShaderNodeValue' : [], - 'FunctionNodeInputVector' : [("vector", ST.VEC3)], + 'FunctionNodeInputVector' : [ + NTPNodeSetting("vector", ST.VEC3) + ], #Input > Group 'NodeGroupInput' : [], # Input > Scene - 'GeometryNodeTool3DCursor' : [], + 'GeometryNodeTool3DCursor' : [], - 'GeometryNodeCollectionInfo' : [("transform_space", ST.ENUM)], + 'GeometryNodeCollectionInfo' : [ + NTPNodeSetting("transform_space", ST.ENUM) + ], - 'GeometryNodeImageInfo' : [], - 'GeometryNodeIsViewport' : [], + 'GeometryNodeImageInfo' : [], + 'GeometryNodeIsViewport' : [], - 'GeometryNodeObjectInfo' : [("transform_space", ST.ENUM)], + 'GeometryNodeObjectInfo' : [ + NTPNodeSetting("transform_space", ST.ENUM) + ], - 'GeometryNodeSelfObject' : [], + 'GeometryNodeSelfObject' : [], 'GeometryNodeInputSceneTime' : [], # OUTPUT - 'GeometryNodeViewer' : [("data_type", ST.ENUM), - - ("domain", ST.ENUM)], + 'GeometryNodeViewer' : [ + NTPNodeSetting("data_type", ST.ENUM), + NTPNodeSetting("domain", ST.ENUM, min_version = (3, 4, 0)) + ], # GEOMETRY - 'GeometryNodeJoinGeometry' : [], + 'GeometryNodeJoinGeometry' : [], 'GeometryNodeGeometryToInstance' : [], # Geometry > Read - 'GeometryNodeInputID' : [], - 'GeometryNodeInputIndex' : [], + 'GeometryNodeInputID' : [], + 'GeometryNodeInputIndex' : [], - 'GeometryNodeInputNamedAttribute' : [("data_type", ST.ENUM)], + 'GeometryNodeInputNamedAttribute' : [ + NTPNodeSetting("data_type", ST.ENUM, min_version = (3, 2, 0)) + ], - 'GeometryNodeInputNormal' : [], - 'GeometryNodeInputPosition' : [], - 'GeometryNodeInputRadius' : [], - 'GeometryNodeToolSelection' : [], + 'GeometryNodeInputNormal' : [], + 'GeometryNodeInputPosition' : [], + 'GeometryNodeInputRadius' : [], + 'GeometryNodeToolSelection' : [], # Geometry > Sample - 'GeometryNodeProximity' : [("target_element", ST.ENUM)], + 'GeometryNodeProximity' : [ + NTPNodeSetting("target_element", ST.ENUM) + ], 'GeometryNodeIndexOfNearest' : [], - 'GeometryNodeRaycast' : [("data_type", ST.ENUM), - ("mapping", ST.ENUM)], + 'GeometryNodeRaycast' : [ + NTPNodeSetting("data_type", ST.ENUM), + NTPNodeSetting("mapping", ST.ENUM) + ], - 'GeometryNodeSampleIndex' : [("clamp", ST.BOOL), - ("data_type", ST.ENUM), - ("domain", ST.ENUM)], + 'GeometryNodeSampleIndex' : [ + NTPNodeSetting("clamp", ST.BOOL, min_version = (3, 4, 0)), + NTPNodeSetting("data_type", ST.ENUM, min_version = (3, 4, 0)), + NTPNodeSetting("domain", ST.ENUM, min_version = (3, 4, 0)) + ], - 'GeometryNodeSampleNearest' : [("domain", ST.ENUM)], + 'GeometryNodeSampleNearest' : [ + NTPNodeSetting("domain", ST.ENUM, min_version = (3, 4, 0)) + ], # Geometry > Write - 'GeometryNodeSetID' : [], - 'GeometryNodeSetPosition' : [], + 'GeometryNodeSetID' : [], + 'GeometryNodeSetPosition' : [], 'GeometryNodeToolSetSelection' : [], # Geometry > Operations - 'GeometryNodeBoundBox' : [], - 'GeometryNodeConvexHull' : [], + 'GeometryNodeBoundBox' : [], + 'GeometryNodeConvexHull' : [], - 'GeometryNodeDeleteGeometry' : [("domain", ST.ENUM), - ("mode", ST.ENUM)], + 'GeometryNodeDeleteGeometry' : [ + NTPNodeSetting("domain", ST.ENUM), + NTPNodeSetting("mode", ST.ENUM) + ], - 'GeometryNodeDuplicateElements' : [("domain", ST.ENUM)], + 'GeometryNodeDuplicateElements' : [ + NTPNodeSetting("domain", ST.ENUM, min_version = (3, 2, 0)) + ], - 'GeometryNodeMergeByDistance' : [("mode", ST.ENUM)], + 'GeometryNodeMergeByDistance' : [ + NTPNodeSetting("mode", ST.ENUM, min_version = (3, 1, 0)) + ], - 'GeometryNodeTransform' : [], + 'GeometryNodeTransform' : [], 'GeometryNodeSeparateComponents' : [], - 'GeometryNodeSeparateGeometry' : [("domain", ST.ENUM)], + 'GeometryNodeSeparateGeometry' : [ + NTPNodeSetting("domain", ST.ENUM) + ], # CURVE # Curve > Read 'GeometryNodeInputCurveHandlePositions' : [], - 'GeometryNodeCurveLength' : [], - 'GeometryNodeInputTangent' : [], - 'GeometryNodeInputCurveTilt' : [], - 'GeometryNodeCurveEndpointSelection' : [], + 'GeometryNodeCurveLength' : [], + 'GeometryNodeInputTangent' : [], + 'GeometryNodeInputCurveTilt' : [], + 'GeometryNodeCurveEndpointSelection' : [], - 'GeometryNodeCurveHandleTypeSelection' : [("handle_type", ST.ENUM), - ("mode", ST.ENUM_SET)], + 'GeometryNodeCurveHandleTypeSelection' : [ + NTPNodeSetting("handle_type", ST.ENUM), + NTPNodeSetting("mode", ST.ENUM_SET) + ], - 'GeometryNodeInputSplineCyclic' : [], - 'GeometryNodeSplineLength' : [], - 'GeometryNodeSplineParameter' : [], - 'GeometryNodeInputSplineResolution' : [], + 'GeometryNodeInputSplineCyclic' : [], + 'GeometryNodeSplineLength' : [], + 'GeometryNodeSplineParameter' : [], + 'GeometryNodeInputSplineResolution' : [], # Curve > Sample - 'GeometryNodeSampleCurve' : [("data_type", ST.ENUM), - ("mode", ST.ENUM), - ("use_all_curves", ST.BOOL)], + 'GeometryNodeSampleCurve' : [ + NTPNodeSetting("data_type", ST.ENUM, min_version = (3, 4, 0)), + NTPNodeSetting("mode", ST.ENUM), + NTPNodeSetting("use_all_curves", ST.BOOL, min_version = (3, 4, 0)) + ], # Curve > Write - 'GeometryNodeSetCurveNormal' : [("mode", ST.ENUM)], + 'GeometryNodeSetCurveNormal' : [ + NTPNodeSetting("mode", ST.ENUM, min_version = (3, 4, 0)) + ], - 'GeometryNodeSetCurveRadius' : [], - 'GeometryNodeSetCurveTilt' : [], + 'GeometryNodeSetCurveRadius' : [], + 'GeometryNodeSetCurveTilt' : [], - 'GeometryNodeSetCurveHandlePositions' : [("mode", ST.ENUM)], + 'GeometryNodeSetCurveHandlePositions' : [ + NTPNodeSetting("mode", ST.ENUM) + ], - 'GeometryNodeCurveSetHandles' : [("handle_type", ST.ENUM), - ("mode", ST.ENUM_SET)], + 'GeometryNodeCurveSetHandles' : [ + NTPNodeSetting("handle_type", ST.ENUM), + NTPNodeSetting("mode", ST.ENUM_SET) + ], - 'GeometryNodeSetSplineCyclic' : [], - 'GeometryNodeSetSplineResolution' : [], + 'GeometryNodeSetSplineCyclic' : [], + 'GeometryNodeSetSplineResolution' : [], - 'GeometryNodeCurveSplineType' : [("spline_type", ST.ENUM)], + 'GeometryNodeCurveSplineType' : [ + NTPNodeSetting("spline_type", ST.ENUM) + ], # Curve > Operations - 'GeometryNodeCurveToMesh' : [], + 'GeometryNodeCurveToMesh' : [], - 'GeometryNodeCurveToPoints' : [("mode", ST.ENUM)], + 'GeometryNodeCurveToPoints' : [ + NTPNodeSetting("mode", ST.ENUM) + ], 'GeometryNodeDeformCurvesOnSurface' : [], - 'GeometryNodeFillCurve' : [("mode", ST.ENUM)], + 'GeometryNodeFillCurve' : [ + NTPNodeSetting("mode", ST.ENUM) + ], - 'GeometryNodeFilletCurve' : [("mode", ST.ENUM)], + 'GeometryNodeFilletCurve' : [ + NTPNodeSetting("mode", ST.ENUM) + ], - 'GeometryNodeInterpolateCurves' : [], + 'GeometryNodeInterpolateCurves' : [], - 'GeometryNodeResampleCurve' : [("mode", ST.ENUM)], + 'GeometryNodeResampleCurve' : [ + NTPNodeSetting("mode", ST.ENUM) + ], - 'GeometryNodeReverseCurve' : [], - 'GeometryNodeSubdivideCurve' : [], + 'GeometryNodeReverseCurve' : [], + 'GeometryNodeSubdivideCurve' : [], - 'GeometryNodeTrimCurve' : [("mode", ST.ENUM)], + 'GeometryNodeTrimCurve' : [ + NTPNodeSetting("mode", ST.ENUM) + ], # Curve > Primitives - 'GeometryNodeCurveArc' : [("mode", ST.ENUM)], + 'GeometryNodeCurveArc' : [ + NTPNodeSetting("mode", ST.ENUM, min_version = (3, 1, 0)) + ], - 'GeometryNodeCurvePrimitiveBezierSegment' : [("mode", ST.ENUM)], + 'GeometryNodeCurvePrimitiveBezierSegment' : [ + NTPNodeSetting("mode", ST.ENUM) + ], - 'GeometryNodeCurvePrimitiveCircle' : [("mode", ST.ENUM)], + 'GeometryNodeCurvePrimitiveCircle' : [ + NTPNodeSetting("mode", ST.ENUM) + ], - 'GeometryNodeCurvePrimitiveLine' : [("mode", ST.ENUM)], + 'GeometryNodeCurvePrimitiveLine' : [ + NTPNodeSetting("mode", ST.ENUM) + ], - 'GeometryNodeCurveSpiral' : [], - 'GeometryNodeCurveQuadraticBezier' : [], + 'GeometryNodeCurveSpiral' : [], + 'GeometryNodeCurveQuadraticBezier' : [], - 'GeometryNodeCurvePrimitiveQuadrilateral' : [("mode", ST.ENUM)], + 'GeometryNodeCurvePrimitiveQuadrilateral' : [ + NTPNodeSetting("mode", ST.ENUM) + ], - 'GeometryNodeCurveStar' : [], + 'GeometryNodeCurveStar' : [], # Curve > Topology 'GeometryNodeOffsetPointInCurve' : [], @@ -193,10 +274,13 @@ # INSTANCES - 'GeometryNodeInstanceOnPoints' : [], - 'GeometryNodeInstancesToPoints' : [], + 'GeometryNodeInstanceOnPoints' : [], + 'GeometryNodeInstancesToPoints' : [], - 'GeometryNodeRealizeInstances' : [("legacy_behavior", ST.BOOL)], + 'GeometryNodeRealizeInstances' : [ + NTPNodeSetting("legacy_behavior", ST.BOOL, min_version = (3, 1, 0), + max_version = (3, 6, 0)) + ], 'GeometryNodeRotateInstances' : [], 'GeometryNodeScaleInstances' : [], @@ -223,58 +307,86 @@ 'GeometryNodeInputMeshVertexNeighbors' : [], # Mesh > Sample - 'GeometryNodeSampleNearestSurface' : [("data_type", ST.ENUM)], + 'GeometryNodeSampleNearestSurface' : [ + NTPNodeSetting("data_type", ST.ENUM, min_version = (3, 4, 0)) + ], - 'GeometryNodeSampleUVSurface' : [("data_type", ST.ENUM)], + 'GeometryNodeSampleUVSurface' : [ + NTPNodeSetting("data_type", ST.ENUM, min_version = (3, 4, 0)) + ], # Mesh > Write 'GeometryNodeToolSetFaceSet' : [], - 'GeometryNodeSetShadeSmooth' : [("domain", ST.ENUM)], + 'GeometryNodeSetShadeSmooth' : [ + NTPNodeSetting("domain", ST.ENUM, min_version = (4, 0, 0)) + ], # Mesh > Operations 'GeometryNodeDualMesh' : [], 'GeometryNodeEdgePathsToCurves' : [], 'GeometryNodeEdgePathsToSelection' : [], - 'GeometryNodeExtrudeMesh' : [("mode", ST.ENUM)], + 'GeometryNodeExtrudeMesh' : [ + NTPNodeSetting("mode", ST.ENUM, min_version = (3, 1, 0)) + ], - 'GeometryNodeFlipFaces' : [], + 'GeometryNodeFlipFaces' : [], - 'GeometryNodeMeshBoolean' : [("operation", ST.ENUM)], + 'GeometryNodeMeshBoolean' : [ + NTPNodeSetting("operation", ST.ENUM) + ], - 'GeometryNodeMeshToCurve' : [], + 'GeometryNodeMeshToCurve' : [], - 'GeometryNodeMeshToPoints' : [("mode", ST.ENUM)], + 'GeometryNodeMeshToPoints' : [ + NTPNodeSetting("mode", ST.ENUM) + ], - 'GeometryNodeMeshToVolume' : [("resolution_mode", ST.ENUM)], + 'GeometryNodeMeshToVolume' : [ + NTPNodeSetting("resolution_mode", ST.ENUM, min_version = (3, 3, 0)) + ], - 'GeometryNodeScaleElements' : [("domain", ST.ENUM), - ("scale_mode", ST.ENUM)], + 'GeometryNodeScaleElements' : [ + NTPNodeSetting("domain", ST.ENUM, min_version = (3, 1, 0)), + NTPNodeSetting("scale_mode", ST.ENUM, min_version = (3, 1, 0)) + ], - 'GeometryNodeSplitEdges' : [], - 'GeometryNodeSubdivideMesh' : [], + 'GeometryNodeSplitEdges' : [], + 'GeometryNodeSubdivideMesh' : [], - 'GeometryNodeSubdivisionSurface' : [("boundary_smooth", ST.ENUM), - ("uv_smooth", ST.ENUM)], + 'GeometryNodeSubdivisionSurface' : [ + NTPNodeSetting("boundary_smooth", ST.ENUM), + NTPNodeSetting("uv_smooth", ST.ENUM) + ], - 'GeometryNodeTriangulate' : [("ngon_method", ST.ENUM), - ("quad_method", ST.ENUM)], + 'GeometryNodeTriangulate' : [ + NTPNodeSetting("ngon_method", ST.ENUM), + NTPNodeSetting("quad_method", ST.ENUM) + ], # Mesh > Primitives - 'GeometryNodeMeshCone' : [("fill_type", ST.ENUM)], + 'GeometryNodeMeshCone' : [ + NTPNodeSetting("fill_type", ST.ENUM) + ], - 'GeometryNodeMeshCube' : [], + 'GeometryNodeMeshCube' : [], - 'GeometryNodeMeshCylinder' : [("fill_type", ST.ENUM)], + 'GeometryNodeMeshCylinder' : [ + NTPNodeSetting("fill_type", ST.ENUM) + ], 'GeometryNodeMeshGrid' : [], 'GeometryNodeMeshIcoSphere' : [], - 'GeometryNodeMeshCircle' : [("fill_type", ST.ENUM)], + 'GeometryNodeMeshCircle' : [ + NTPNodeSetting("fill_type", ST.ENUM) + ], - 'GeometryNodeMeshLine' : [("count_mode", ST.ENUM), - ("mode", ST.ENUM)], + 'GeometryNodeMeshLine' : [ + NTPNodeSetting("count_mode", ST.ENUM), + NTPNodeSetting("mode", ST.ENUM) + ], 'GeometryNodeMeshUVSphere' : [], @@ -290,27 +402,37 @@ # Mesh > UV 'GeometryNodeUVPackIslands' : [], - 'GeometryNodeUVUnwrap' : [("method", ST.ENUM)], + 'GeometryNodeUVUnwrap': [ + NTPNodeSetting("method", ST.ENUM, min_version = (3, 3, 0)) + ], # POINT - 'GeometryNodeDistributePointsInVolume' : [("mode", ST.ENUM)], + 'GeometryNodeDistributePointsInVolume' : [ + NTPNodeSetting("mode", ST.ENUM, min_version = (3, 4, 0)) + ], - 'GeometryNodeDistributePointsOnFaces' : [("distribute_method", ST.ENUM), - ("use_legacy_normal", ST.BOOL)], + 'GeometryNodeDistributePointsOnFaces' : [ + NTPNodeSetting("distribute_method", ST.ENUM), + NTPNodeSetting("use_legacy_normal", ST.BOOL, min_version = (3, 5, 0)) + ], - 'GeometryNodePoints' : [], - 'GeometryNodePointsToCurves' : [], - 'GeometryNodePointsToVertices' : [], + 'GeometryNodePoints' : [], + 'GeometryNodePointsToCurves' : [], + 'GeometryNodePointsToVertices' : [], - 'GeometryNodePointsToVolume' : [("resolution_mode", ST.ENUM)], + 'GeometryNodePointsToVolume' : [ + NTPNodeSetting("resolution_mode", ST.ENUM) + ], - 'GeometryNodeSetPointRadius' : [], + 'GeometryNodeSetPointRadius' : [], # VOLUME 'GeometryNodeVolumeCube' : [], - 'GeometryNodeVolumeToMesh' : [("resolution_mode", ST.ENUM)], + 'GeometryNodeVolumeToMesh' : [ + NTPNodeSetting("resolution_mode", ST.ENUM) + ], # SIMULATION @@ -327,130 +449,203 @@ # TEXTURE - 'ShaderNodeTexBrick' : [("offset", ST.FLOAT), - ("offset_frequency", ST.INT), - ("squash", ST.FLOAT), - ("squash_frequency", ST.INT)], - - 'ShaderNodeTexChecker' : [], - - 'ShaderNodeTexGradient' : [("gradient_type", ST.ENUM)], - - 'GeometryNodeImageTexture' : [("extension", ST.ENUM), - ("interpolation", ST.ENUM)], - - 'ShaderNodeTexMagic' : [("turbulence_depth", ST.INT)], - - 'ShaderNodeTexMusgrave' : [("musgrave_dimensions", ST.ENUM), - ("musgrave_type", ST.ENUM)], - - 'ShaderNodeTexNoise' : [("noise_dimensions", ST.ENUM)], - - 'ShaderNodeTexVoronoi' : [("distance", ST.ENUM), - ("feature", ST.ENUM), - ("voronoi_dimensions", ST.ENUM)], - - 'ShaderNodeTexWave' : [("bands_direction", ST.ENUM), - ("rings_direction", ST.ENUM), - ("wave_profile", ST.ENUM), - ("wave_type", ST.ENUM)], - - 'ShaderNodeTexWhiteNoise' : [("noise_dimensions", ST.ENUM)], + 'ShaderNodeTexBrick' : [ + NTPNodeSetting("offset", ST.FLOAT), + NTPNodeSetting("offset_frequency", ST.INT), + NTPNodeSetting("squash", ST.FLOAT), + NTPNodeSetting("squash_frequency", ST.INT) + ], + + 'ShaderNodeTexChecker' : [], + + 'ShaderNodeTexGradient' : [ + NTPNodeSetting("gradient_type", ST.ENUM) + ], + + 'GeometryNodeImageTexture' : [ + NTPNodeSetting("extension", ST.ENUM, min_version = (3, 1, 0)), + NTPNodeSetting("interpolation", ST.ENUM, min_version = (3, 1, 0)) + ], + + 'ShaderNodeTexMagic' : [ + NTPNodeSetting("turbulence_depth", ST.INT) + ], + + 'ShaderNodeTexMusgrave' : [ + NTPNodeSetting("musgrave_dimensions", ST.ENUM), + NTPNodeSetting("musgrave_type", ST.ENUM) + ], + + 'ShaderNodeTexNoise' : [ + NTPNodeSetting("noise_dimensions", ST.ENUM) + ], + + 'ShaderNodeTexVoronoi' : [ + NTPNodeSetting("distance", ST.ENUM), + NTPNodeSetting("feature", ST.ENUM), + NTPNodeSetting("voronoi_dimensions", ST.ENUM) + ], + + 'ShaderNodeTexWave' : [ + NTPNodeSetting("bands_direction", ST.ENUM), + NTPNodeSetting("rings_direction", ST.ENUM), + NTPNodeSetting("wave_profile", ST.ENUM), + NTPNodeSetting("wave_type", ST.ENUM) + ], + + 'ShaderNodeTexWhiteNoise' : [ + NTPNodeSetting("noise_dimensions", ST.ENUM) + ], # UTILITIES - 'ShaderNodeMix' : [("blend_type", ST.ENUM), - ("clamp_factor", ST.BOOL), - ("clamp_result", ST.BOOL), - ("data_type", ST.ENUM), - ("factor_mode", ST.ENUM)], - - 'FunctionNodeRandomValue' : [("data_type", ST.ENUM)], - - 'GeometryNodeRepeatInput' : [], - 'GeometryNodeRepeatOutput' : [("inspection_index", ST.INT)], - - 'GeometryNodeSwitch' : [("input_type", ST.ENUM)], + 'ShaderNodeMix' : [ + NTPNodeSetting("blend_type", ST.ENUM, min_version = (3, 4, 0)), + NTPNodeSetting("clamp_factor", ST.BOOL, min_version = (3, 4, 0)), + NTPNodeSetting("clamp_result", ST.BOOL, min_version = (3, 4, 0)), + NTPNodeSetting("data_type", ST.ENUM, min_version = (3, 4, 0)), + NTPNodeSetting("factor_mode", ST.ENUM, min_version = (3, 4, 0)) + ], + + 'FunctionNodeRandomValue' : [ + NTPNodeSetting("data_type", ST.ENUM) + ], + + 'GeometryNodeRepeatInput' : [], + + 'GeometryNodeRepeatOutput' : [ + NTPNodeSetting("inspection_index", ST.INT, min_version = (4, 0, 0)) + ], + + 'GeometryNodeSwitch' : [ + NTPNodeSetting("input_type", ST.ENUM) + ], # Utilities > Color - 'ShaderNodeValToRGB' : [("color_ramp", ST.COLOR_RAMP)], - - 'ShaderNodeRGBCurve' : [("mapping", ST.CURVE_MAPPING)], - - 'FunctionNodeCombineColor' : [("mode", ST.ENUM)], - - 'ShaderNodeMixRGB' : [("blend_type", ST.ENUM), - ("use_alpha", ST.BOOL), - ("use_clamp", ST.BOOL)], #legacy - - 'FunctionNodeSeparateColor' : [("mode", ST.ENUM)], + 'ShaderNodeValToRGB' : [ + NTPNodeSetting("color_ramp", ST.COLOR_RAMP) + ], + + 'ShaderNodeRGBCurve' : [ + NTPNodeSetting("mapping", ST.CURVE_MAPPING) + ], + + 'FunctionNodeCombineColor' : [ + NTPNodeSetting("mode", ST.ENUM, min_version = (3, 3, 0)) + ], + + 'ShaderNodeMixRGB' : [ + NTPNodeSetting("blend_type", ST.ENUM), + NTPNodeSetting("use_alpha", ST.BOOL), + NTPNodeSetting("use_clamp", ST.BOOL) + ], #legacy + + 'FunctionNodeSeparateColor' : [ + NTPNodeSetting("mode", ST.ENUM, min_version = (3, 3, 0)) + ], # Utilities > Text - 'GeometryNodeStringJoin' : [], - 'FunctionNodeReplaceString' : [], - 'FunctionNodeSliceString' : [], - 'FunctionNodeStringLength' : [], - - 'GeometryNodeStringToCurves' : [("align_x", ST.ENUM), - ("align_y", ST.ENUM), - ("font", ST.FONT), - ("overflow", ST.ENUM), - ("pivot_mode", ST.ENUM)], + 'GeometryNodeStringJoin' : [], + 'FunctionNodeReplaceString' : [], + 'FunctionNodeSliceString' : [], + 'FunctionNodeStringLength' : [], + + 'GeometryNodeStringToCurves' : [ + NTPNodeSetting("align_x", ST.ENUM), + NTPNodeSetting("align_y", ST.ENUM), + NTPNodeSetting("font", ST.FONT), + NTPNodeSetting("overflow", ST.ENUM), + NTPNodeSetting("pivot_mode", ST.ENUM, min_version = (3, 1, 0)) + ], 'FunctionNodeValueToString' : [], 'FunctionNodeInputSpecialCharacters' : [], # Utilities > Vector - 'ShaderNodeVectorCurve' : [("mapping", ST.CURVE_MAPPING)], + 'ShaderNodeVectorCurve' : [ + NTPNodeSetting("mapping", ST.CURVE_MAPPING) + ], - 'ShaderNodeVectorMath' : [("operation", ST.ENUM)], + 'ShaderNodeVectorMath' : [ + NTPNodeSetting("operation", ST.ENUM) + ], - 'ShaderNodeVectorRotate' : [("invert", ST.BOOL), - ("rotation_type", ST.ENUM)], + 'ShaderNodeVectorRotate' : [ + NTPNodeSetting("invert", ST.BOOL), + NTPNodeSetting("rotation_type", ST.ENUM) + ], - 'ShaderNodeCombineXYZ' : [], - 'ShaderNodeSeparateXYZ' : [], + 'ShaderNodeCombineXYZ' : [], + 'ShaderNodeSeparateXYZ' : [], # Utilities > Field - 'GeometryNodeAccumulateField' : [("data_type", ST.ENUM), - ("domain", ST.ENUM)], + 'GeometryNodeAccumulateField' : [ + NTPNodeSetting("data_type", ST.ENUM), + NTPNodeSetting("domain", ST.ENUM) + ], - 'GeometryNodeFieldAtIndex' : [("data_type", ST.ENUM), - ("domain", ST.ENUM)], + 'GeometryNodeFieldAtIndex' : [ + NTPNodeSetting("data_type", ST.ENUM, min_version = (3, 1, 0)), + NTPNodeSetting("domain", ST.ENUM, min_version = (3, 1, 0)) + ], - 'GeometryNodeFieldOnDomain' : [("data_type", ST.ENUM), - ("domain", ST.ENUM)], + 'GeometryNodeFieldOnDomain' : [ + NTPNodeSetting("data_type", ST.ENUM, min_version = (3, 3, 0)), + NTPNodeSetting("domain", ST.ENUM, min_version = (3, 3, 0)) + ], # Utilities > Math - 'FunctionNodeBooleanMath' : [("operation", ST.ENUM)], - - 'ShaderNodeClamp' : [("clamp_type", ST.ENUM)], - - 'FunctionNodeCompare' : [("data_type", ST.ENUM), - ("mode", ST.ENUM), - ("operation", ST.ENUM)], - - 'ShaderNodeFloatCurve' : [("mapping", ST.CURVE_MAPPING)], - - 'FunctionNodeFloatToInt' : [("rounding_mode", ST.ENUM)], - - 'ShaderNodeMapRange' : [("clamp", ST.BOOL), - ("data_type", ST.ENUM), - ("interpolation_type", ST.ENUM)], - - 'ShaderNodeMath' : [("operation", ST.ENUM), - ("use_clamp", ST.BOOL)], + 'FunctionNodeBooleanMath' : [ + NTPNodeSetting("operation", ST.ENUM) + ], + + 'ShaderNodeClamp' : [ + NTPNodeSetting("clamp_type", ST.ENUM) + ], + + 'FunctionNodeCompare' : [ + NTPNodeSetting("data_type", ST.ENUM, min_version = (3, 1, 0)), + NTPNodeSetting("mode", ST.ENUM, min_version = (3, 1, 0)), + NTPNodeSetting("operation", ST.ENUM, min_version = (3, 1, 0)) + ], + + 'FunctionNodeCompareFloats' : [ + NTPNodeSetting("operation", ST.ENUM, max_version = (3, 0, 0)) + ], + + 'ShaderNodeFloatCurve' : [ + NTPNodeSetting("mapping", ST.CURVE_MAPPING) + ], + + 'FunctionNodeFloatToInt' : [ + NTPNodeSetting("rounding_mode", ST.ENUM) + ], + + 'ShaderNodeMapRange' : [ + NTPNodeSetting("clamp", ST.BOOL), + NTPNodeSetting("data_type", ST.ENUM, min_version = (3, 1, 0)), + NTPNodeSetting("interpolation_type", ST.ENUM) + ], + + 'ShaderNodeMath' : [ + NTPNodeSetting("operation", ST.ENUM), + NTPNodeSetting("use_clamp", ST.BOOL) + ], # Utilities > Rotation - 'FunctionNodeAlignEulerToVector' : [("axis", ST.ENUM), - ("pivot_axis", ST.ENUM)], - - 'FunctionNodeAxisAngleToRotation' : [], - 'FunctionNodeEulerToRotation' : [], - 'FunctionNodeInvertRotation' : [], + 'FunctionNodeAlignEulerToVector' : [ + NTPNodeSetting("axis", ST.ENUM), + NTPNodeSetting("pivot_axis", ST.ENUM) + ], + + 'FunctionNodeAxisAngleToRotation' : [], + 'FunctionNodeEulerToRotation' : [], + 'FunctionNodeInvertRotation' : [], - 'FunctionNodeRotateEuler' : [("space", ST.ENUM), - ("type", ST.ENUM)], + 'FunctionNodeRotateEuler' : [ + NTPNodeSetting("space", ST.ENUM), + NTPNodeSetting("type", ST.ENUM) + ], 'FunctionNodeRotateVector' : [], 'FunctionNodeRotationToAxisAngle' : [], @@ -459,15 +654,21 @@ 'FunctionNodeQuaternionToRotation' : [], # MISC - 'GeometryNodeGroup' : [("node_tree", ST.NODE_TREE)], + 'GeometryNodeGroup' : [ + NTPNodeSetting("node_tree", ST.NODE_TREE) + ], - 'NodeFrame' : [("label_size", ST.INT), - ("shrink", ST.BOOL), - ("text", ST.TEXT)], + 'NodeFrame' : [ + NTPNodeSetting("label_size", ST.INT), + NTPNodeSetting("shrink", ST.BOOL), + NTPNodeSetting("text", ST.TEXT) + ], 'NodeGroupInput' : [], - 'NodeGroupOutput' : [("is_active_output", ST.BOOL)], + 'NodeGroupOutput' : [ + NTPNodeSetting("is_active_output", ST.BOOL) + ], 'NodeReroute' : [] diff --git a/geometry/operator.py b/geometry/operator.py index 9733a15..d88d6cc 100644 --- a/geometry/operator.py +++ b/geometry/operator.py @@ -13,7 +13,7 @@ OBJECT_NAME = "name" OBJECT = "obj" MODIFIER = "mod" -geo_op_reserved_names = {ITEM, +GEO_OP_RESERVED_NAMES = {ITEM, OBJECT_NAME, OBJECT, MODIFIER} @@ -36,7 +36,7 @@ class NTPGeoNodesOperator(NTP_Operator): def __init__(self): super().__init__() self._settings = geo_node_settings - for name in geo_op_reserved_names: + for name in GEO_OP_RESERVED_NAMES: self._used_vars[name] = 0 if bpy.app.version >= (3, 6, 0): diff --git a/material/node_settings.py b/material/node_settings.py index 04ae778..3729d84 100644 --- a/material/node_settings.py +++ b/material/node_settings.py @@ -1,277 +1,396 @@ -from ..utils import ST +from ..utils import ST, NTPNodeSetting -shader_node_settings : dict[str, list[(str, ST)]] = { +shader_node_settings : dict[str, list[NTPNodeSetting]] = { # INPUT - 'ShaderNodeAmbientOcclusion' : [("inside", ST.BOOL), - ("only_local", ST.BOOL), - ("samples", ST.INT)], - - 'ShaderNodeAttribute' : [("attribute_name", ST.STRING), #TODO: separate attribute type? - ("attribute_type", ST.ENUM)], - - 'ShaderNodeBevel' : [("samples", ST.INT)], - - 'ShaderNodeCameraData' : [], - - 'ShaderNodeVertexColor' : [("layer_name", ST.STRING)], #TODO: separate color attribute type? - - 'ShaderNodeHairInfo' : [], - 'ShaderNodeFresnel' : [], - 'ShaderNodeNewGeometry' : [], - 'ShaderNodeLayerWeight' : [], - 'ShaderNodeLightPath' : [], - 'ShaderNodeObjectInfo' : [], - 'ShaderNodeParticleInfo' : [], - 'ShaderNodePointInfo' : [], - 'ShaderNodeRGB' : [], - - 'ShaderNodeTangent' : [("axis", ST.ENUM), - ("direction_type", ST.ENUM), - ("uv_map", ST.STRING)], #TODO: special UV Map type? - - 'ShaderNodeTexCoord' : [("from_instancer", ST.BOOL), - ("object", ST.OBJECT)], - - 'ShaderNodeUVAlongStroke' : [("use_tips", ST.BOOL)], - - 'ShaderNodeUVMap' : [("from_instancer", ST.BOOL), - ("uv_map", ST.STRING)], #TODO: see ShaderNodeTangent - - 'ShaderNodeValue' : [], - 'ShaderNodeVolumeInfo' : [], - - 'ShaderNodeWireframe' : [("use_pixel_size", ST.BOOL)], + 'ShaderNodeAmbientOcclusion' : [ + NTPNodeSetting("inside", ST.BOOL), + NTPNodeSetting("only_local", ST.BOOL), + NTPNodeSetting("samples", ST.INT) + ], + + 'ShaderNodeAttribute' : [ + NTPNodeSetting("attribute_name", ST.STRING), #TODO: separate attribute type? + NTPNodeSetting("attribute_type", ST.ENUM) + ], + + 'ShaderNodeBevel' : [ + NTPNodeSetting("samples", ST.INT) + ], + + 'ShaderNodeCameraData' : [], + + 'ShaderNodeVertexColor' : [ + NTPNodeSetting("layer_name", ST.STRING) #TODO: separate color attribute type? + ], + + 'ShaderNodeHairInfo' : [], + 'ShaderNodeFresnel' : [], + 'ShaderNodeNewGeometry' : [], + 'ShaderNodeLayerWeight' : [], + 'ShaderNodeLightPath' : [], + 'ShaderNodeObjectInfo' : [], + 'ShaderNodeParticleInfo' : [], + 'ShaderNodePointInfo' : [], + 'ShaderNodeRGB' : [], + + 'ShaderNodeTangent' : [ + NTPNodeSetting("axis", ST.ENUM), + NTPNodeSetting("direction_type", ST.ENUM), + NTPNodeSetting("uv_map", ST.STRING) #TODO: special UV Map type? + ], + + 'ShaderNodeTexCoord' : [ + NTPNodeSetting("from_instancer", ST.BOOL), + NTPNodeSetting("object", ST.OBJECT) + ], + + 'ShaderNodeUVAlongStroke' : [ + NTPNodeSetting("use_tips", ST.BOOL) + ], + + 'ShaderNodeUVMap' : [ + NTPNodeSetting("from_instancer", ST.BOOL), + NTPNodeSetting("uv_map", ST.STRING) + ], #TODO: see ShaderNodeTangent + + 'ShaderNodeValue' : [], + 'ShaderNodeVolumeInfo' : [], + + 'ShaderNodeWireframe' : [ + NTPNodeSetting("use_pixel_size", ST.BOOL) + ], # OUTPUT - 'ShaderNodeOutputAOV' : [("name", ST.STRING)], - - 'ShaderNodeOutputLight' : [("is_active_output", ST.BOOL), - ("target", ST.ENUM)], - - 'ShaderNodeOutputLineStyle' : [("blend_type", ST.ENUM), - ("is_active_output", ST.BOOL), - ("target", ST.ENUM), - ("use_alpha", ST.BOOL), - ("use_clamp", ST.BOOL)], - - 'ShaderNodeOutputMaterial' : [("is_active_output", ST.BOOL), - ("target", ST.ENUM)], - - 'ShaderNodeOutputWorld' : [("is_active_output", ST.BOOL), - ("target", ST.ENUM)], + 'ShaderNodeOutputAOV' : [ + NTPNodeSetting("name", ST.STRING) + ], + + 'ShaderNodeOutputLight' : [ + NTPNodeSetting("is_active_output", ST.BOOL), + NTPNodeSetting("target", ST.ENUM) + ], + + 'ShaderNodeOutputLineStyle' : [ + NTPNodeSetting("blend_type", ST.ENUM), + NTPNodeSetting("is_active_output", ST.BOOL), + NTPNodeSetting("target", ST.ENUM), + NTPNodeSetting("use_alpha", ST.BOOL), + NTPNodeSetting("use_clamp", ST.BOOL) + ], + + 'ShaderNodeOutputMaterial' : [ + NTPNodeSetting("is_active_output", ST.BOOL), + NTPNodeSetting("target", ST.ENUM) + ], + + 'ShaderNodeOutputWorld' : [ + NTPNodeSetting("is_active_output", ST.BOOL), + NTPNodeSetting("target", ST.ENUM) + ], # SHADER - 'ShaderNodeAddShader' : [], + 'ShaderNodeAddShader' : [], - 'ShaderNodeBsdfAnisotropic' : [("distribution", ST.ENUM)], + 'ShaderNodeBsdfAnisotropic' : [ + NTPNodeSetting("distribution", ST.ENUM) + ], - 'ShaderNodeBackground' : [], - 'ShaderNodeBsdfDiffuse' : [], - 'ShaderNodeEmission' : [], + 'ShaderNodeBackground' : [], + 'ShaderNodeBsdfDiffuse' : [], + 'ShaderNodeEmission' : [], - 'ShaderNodeBsdfGlass' : [("distribution", ST.ENUM)], + 'ShaderNodeBsdfGlass' : [ + NTPNodeSetting("distribution", ST.ENUM) + ], - 'ShaderNodeBsdfGlossy' : [("distribution", ST.ENUM)], + 'ShaderNodeBsdfGlossy' : [ + NTPNodeSetting("distribution", ST.ENUM) + ], - 'ShaderNodeBsdfHair' : [("component", ST.ENUM)], + 'ShaderNodeBsdfHair' : [ + NTPNodeSetting("component", ST.ENUM) + ], - 'ShaderNodeHoldout' : [], - 'ShaderNodeMixShader' : [], + 'ShaderNodeHoldout' : [], + 'ShaderNodeMixShader' : [], - 'ShaderNodeBsdfPrincipled' : [("distribution", ST.ENUM), - ("subsurface_method", ST.ENUM)], + 'ShaderNodeBsdfPrincipled' : [ + NTPNodeSetting("distribution", ST.ENUM), + NTPNodeSetting("subsurface_method", ST.ENUM) + ], - 'ShaderNodeBsdfHairPrincipled' : [("model", ST.ENUM), - ("parametrization", ST.ENUM)], + 'ShaderNodeBsdfHairPrincipled' : [ + NTPNodeSetting("model", ST.ENUM), + NTPNodeSetting("parametrization", ST.ENUM) + ], - 'ShaderNodeVolumePrincipled' : [], + 'ShaderNodeVolumePrincipled' : [], - 'ShaderNodeBsdfRefraction' : [("distribution", ST.ENUM)], + 'ShaderNodeBsdfRefraction' : [ + NTPNodeSetting("distribution", ST.ENUM) + ], - 'ShaderNodeBsdfSheen' : [("distribution", ST.ENUM)], + 'ShaderNodeBsdfSheen' : [ + NTPNodeSetting("distribution", ST.ENUM, min_version = (4, 0, 0)) + ], - 'ShaderNodeEeveeSpecular' : [], + 'ShaderNodeEeveeSpecular' : [], - 'ShaderNodeSubsurfaceScattering' : [("falloff", ST.ENUM)], + 'ShaderNodeSubsurfaceScattering' : [ + NTPNodeSetting("falloff", ST.ENUM) + ], - 'ShaderNodeBsdfToon' : [("component", ST.ENUM)], + 'ShaderNodeBsdfToon' : [ + NTPNodeSetting("component", ST.ENUM) + ], - 'ShaderNodeBsdfTranslucent' : [], - 'ShaderNodeBsdfTransparent' : [], - 'ShaderNodeBsdfVelvet' : [], - 'ShaderNodeVolumeAbsorption' : [], - 'ShaderNodeVolumeScatter' : [], + 'ShaderNodeBsdfTranslucent' : [], + 'ShaderNodeBsdfTransparent' : [], + 'ShaderNodeBsdfVelvet' : [], + 'ShaderNodeVolumeAbsorption' : [], + 'ShaderNodeVolumeScatter' : [], # TEXTURE - 'ShaderNodeTexBrick' : [("offset", ST.FLOAT), - ("offset_frequency", ST.INT), - ("squash", ST.FLOAT), - ("squash_frequency", ST.INT)], - - 'ShaderNodeTexChecker' : [], - - 'ShaderNodeTexEnvironment' : [("image", ST.IMAGE), - ("image_user", ST.IMAGE_USER), - ("interpolation", ST.ENUM), - ("projection", ST.ENUM)], - - 'ShaderNodeTexGradient' : [("gradient_type", ST.ENUM)], - - 'ShaderNodeTexIES' : [("filepath", ST.STRING), #TODO - ("ies", ST.TEXT), - ("mode", ST.ENUM)], - - 'ShaderNodeTexImage' : [("extension", ST.ENUM), - ("image", ST.IMAGE), - ("image_user", ST.IMAGE_USER), - ("interpolation", ST.ENUM), - ("projection", ST.ENUM), - ("projection_blend", ST.FLOAT)], - - 'ShaderNodeTexMagic' : [("turbulence_depth", ST.INT)], - - 'ShaderNodeTexMusgrave' : [("musgrave_dimensions", ST.ENUM), - ("musgrave_type", ST.ENUM)], - - 'ShaderNodeTexNoise' : [("noise_dimensions", ST.ENUM), - ("normalize", ST.BOOL)], - - 'ShaderNodeTexPointDensity' : [("interpolation", ST.ENUM), - ("object", ST.OBJECT), - ("particle_color_source", ST.ENUM), - ("particle_system", ST.PARTICLE_SYSTEM), - ("point_source", ST.ENUM), - ("radius", ST.FLOAT), - ("resolution", ST.INT), - ("space", ST.ENUM), - ("vertex_attribute_name", ST.STRING), #TODO - ("vertex_color_source", ST.ENUM)], - - 'ShaderNodeTexSky' : [("air_density", ST.FLOAT), - ("altitude", ST.FLOAT), - ("dust_density", ST.FLOAT), - ("ground_albedo", ST.FLOAT), - ("ozone_density", ST.FLOAT), - ("sky_type", ST.ENUM), - ("sun_direction", ST.VEC3), - ("sun_disc", ST.BOOL), - ("sun_elevation", ST.FLOAT), - ("sun_intensity", ST.FLOAT), - ("sun_rotation", ST.FLOAT), - ("sun_size", ST.FLOAT), - ("turbidity", ST.FLOAT)], - - 'ShaderNodeTexVoronoi' : [("distance", ST.ENUM), - ("feature", ST.ENUM), - ("normalize", ST.BOOL), - ("voronoi_dimensions", ST.ENUM)], - - 'ShaderNodeTexWave' : [("bands_direction", ST.ENUM), - ("rings_direction", ST.ENUM), - ("wave_profile", ST.ENUM), - ("wave_type", ST.ENUM)], - - 'ShaderNodeTexWhiteNoise' : [("noise_dimensions", ST.ENUM)], + 'ShaderNodeTexBrick' : [ + NTPNodeSetting("offset", ST.FLOAT), + NTPNodeSetting("offset_frequency", ST.INT), + NTPNodeSetting("squash", ST.FLOAT), + NTPNodeSetting("squash_frequency", ST.INT) + ], + + 'ShaderNodeTexChecker' : [], + + 'ShaderNodeTexEnvironment' : [ + NTPNodeSetting("image", ST.IMAGE), + NTPNodeSetting("image_user", ST.IMAGE_USER), + NTPNodeSetting("interpolation", ST.ENUM), + NTPNodeSetting("projection", ST.ENUM) + ], + + 'ShaderNodeTexGradient' : [ + NTPNodeSetting("gradient_type", ST.ENUM) + ], + + 'ShaderNodeTexIES' : [ + NTPNodeSetting("filepath", ST.STRING), #TODO + NTPNodeSetting("ies", ST.TEXT), + NTPNodeSetting("mode", ST.ENUM) + ], + + 'ShaderNodeTexImage' : [ + NTPNodeSetting("extension", ST.ENUM), + NTPNodeSetting("image", ST.IMAGE), + NTPNodeSetting("image_user", ST.IMAGE_USER), + NTPNodeSetting("interpolation", ST.ENUM), + NTPNodeSetting("projection", ST.ENUM), + NTPNodeSetting("projection_blend", ST.FLOAT) + ], + + 'ShaderNodeTexMagic' : [ + NTPNodeSetting("turbulence_depth", ST.INT) + ], + + 'ShaderNodeTexMusgrave' : [ + NTPNodeSetting("musgrave_dimensions", ST.ENUM), + NTPNodeSetting("musgrave_type", ST.ENUM) + ], + + 'ShaderNodeTexNoise' : [ + NTPNodeSetting("noise_dimensions", ST.ENUM), + NTPNodeSetting("normalize", ST.BOOL, min_version = (4, 0, 0)) + ], + + 'ShaderNodeTexPointDensity' : [ + NTPNodeSetting("interpolation", ST.ENUM), + NTPNodeSetting("object", ST.OBJECT), + NTPNodeSetting("particle_color_source", ST.ENUM), + NTPNodeSetting("particle_system", ST.PARTICLE_SYSTEM), + NTPNodeSetting("point_source", ST.ENUM), + NTPNodeSetting("radius", ST.FLOAT), + NTPNodeSetting("resolution", ST.INT), + NTPNodeSetting("space", ST.ENUM), + NTPNodeSetting("vertex_attribute_name", ST.STRING), #TODO + NTPNodeSetting("vertex_color_source", ST.ENUM) + ], + + 'ShaderNodeTexSky' : [ + NTPNodeSetting("air_density", ST.FLOAT), + NTPNodeSetting("altitude", ST.FLOAT), + NTPNodeSetting("dust_density", ST.FLOAT), + NTPNodeSetting("ground_albedo", ST.FLOAT), + NTPNodeSetting("ozone_density", ST.FLOAT), + NTPNodeSetting("sky_type", ST.ENUM), + NTPNodeSetting("sun_direction", ST.VEC3), + NTPNodeSetting("sun_disc", ST.BOOL), + NTPNodeSetting("sun_elevation", ST.FLOAT), + NTPNodeSetting("sun_intensity", ST.FLOAT), + NTPNodeSetting("sun_rotation", ST.FLOAT), + NTPNodeSetting("sun_size", ST.FLOAT), + NTPNodeSetting("turbidity", ST.FLOAT) + ], + + 'ShaderNodeTexVoronoi' : [ + NTPNodeSetting("distance", ST.ENUM), + NTPNodeSetting("feature", ST.ENUM), + NTPNodeSetting("normalize", ST.BOOL, min_version = (4, 0, 0)), + NTPNodeSetting("voronoi_dimensions", ST.ENUM) + ], + + 'ShaderNodeTexWave' : [ + NTPNodeSetting("bands_direction", ST.ENUM), + NTPNodeSetting("rings_direction", ST.ENUM), + NTPNodeSetting("wave_profile", ST.ENUM), + NTPNodeSetting("wave_type", ST.ENUM) + ], + + 'ShaderNodeTexWhiteNoise' : [ + NTPNodeSetting("noise_dimensions", ST.ENUM) + ], # COLOR 'ShaderNodeBrightContrast' : [], - 'ShaderNodeGamma' : [], - 'ShaderNodeHueSaturation' : [], - 'ShaderNodeInvert' : [], - 'ShaderNodeLightFalloff' : [], - 'ShaderNodeMix' : [("blend_type", ST.ENUM), - ("clamp_factor", ST.BOOL), - ("clamp_result", ST.BOOL), - ("data_type", ST.ENUM), - ("factor_mode", ST.ENUM)], - - 'ShaderNodeRGBCurve' : [("mapping", ST.CURVE_MAPPING)], - - - # VECTOR - 'ShaderNodeBump' : [("invert", ST.BOOL)], - - 'ShaderNodeDisplacement' : [("space", ST.ENUM)], - - 'ShaderNodeMapping' : [("vector_type", ST.ENUM)], - - 'ShaderNodeNormal' : [], + 'ShaderNodeMix' : [ + NTPNodeSetting("blend_type", ST.ENUM, min_version = (3, 4, 0)), + NTPNodeSetting("clamp_factor", ST.BOOL, min_version = (3, 4, 0)), + NTPNodeSetting("clamp_result", ST.BOOL, min_version = (3, 4, 0)), + NTPNodeSetting("data_type", ST.ENUM, min_version = (3, 4, 0)), + NTPNodeSetting("factor_mode", ST.ENUM, min_version = (3, 4, 0)) + ], - 'ShaderNodeNormalMap' : [("space", ST.ENUM), - ("uv_map", ST.STRING)], #TODO + 'ShaderNodeMixRGB' : [ + NTPNodeSetting("blend_type", ST.ENUM), + NTPNodeSetting("use_alpha", ST.BOOL), + NTPNodeSetting("use_clamp", ST.BOOL) + ], - 'ShaderNodeVectorCurve' : [("mapping", ST.CURVE_MAPPING)], + 'ShaderNodeRGBCurve' : [ + NTPNodeSetting("mapping", ST.CURVE_MAPPING) + ], - 'ShaderNodeVectorDisplacement' : [("space", ST.ENUM)], - 'ShaderNodeVectorRotate' : [("invert", ST.BOOL), - ("rotation_type", ST.ENUM)], - - 'ShaderNodeVectorTransform' : [("convert_from", ST.ENUM), - ("convert_to", ST.ENUM), - ("vector_type", ST.ENUM)], + # VECTOR + 'ShaderNodeBump' : [ + NTPNodeSetting("invert", ST.BOOL) + ], + + 'ShaderNodeDisplacement' : [ + NTPNodeSetting("space", ST.ENUM) + ], + + 'ShaderNodeMapping' : [ + NTPNodeSetting("vector_type", ST.ENUM) + ], + + 'ShaderNodeNormal' : [], + + 'ShaderNodeNormalMap' : [ + NTPNodeSetting("space", ST.ENUM), + NTPNodeSetting("uv_map", ST.STRING) #TODO + ], + + 'ShaderNodeVectorCurve' : [ + NTPNodeSetting("mapping", ST.CURVE_MAPPING) + ], + + 'ShaderNodeVectorDisplacement' : [ + NTPNodeSetting("space", ST.ENUM) + ], + + 'ShaderNodeVectorRotate' : [ + NTPNodeSetting("invert", ST.BOOL), + NTPNodeSetting("rotation_type", ST.ENUM) + ], + + 'ShaderNodeVectorTransform' : [ + NTPNodeSetting("convert_from", ST.ENUM), + NTPNodeSetting("convert_to", ST.ENUM), + NTPNodeSetting("vector_type", ST.ENUM) + ], # CONVERTER - 'ShaderNodeBlackbody' : [], - - 'ShaderNodeClamp' : [("clamp_type", ST.ENUM)], + 'ShaderNodeBlackbody' : [], - 'ShaderNodeValToRGB' : [("color_ramp", ST.COLOR_RAMP)], + 'ShaderNodeClamp' : [ + NTPNodeSetting("clamp_type", ST.ENUM) + ], - 'ShaderNodeCombineColor' : [("mode", ST.ENUM)], + 'ShaderNodeValToRGB' : [ + NTPNodeSetting("color_ramp", ST.COLOR_RAMP) + ], - 'ShaderNodeCombineXYZ' : [], + 'ShaderNodeCombineColor' : [ + NTPNodeSetting("mode", ST.ENUM, min_version = (3, 3, 0)) + ], - 'ShaderNodeFloatCurve' : [("mapping", ST.CURVE_MAPPING)], + 'ShaderNodeCombineXYZ' : [], - 'ShaderNodeMapRange' : [("clamp", ST.BOOL), - ("data_type", ST.ENUM), - ("interpolation_type", ST.ENUM)], + 'ShaderNodeFloatCurve' : [ + NTPNodeSetting("mapping", ST.CURVE_MAPPING) + ], - 'ShaderNodeMath' : [("operation", ST.ENUM), - ("use_clamp", ST.BOOL)], + 'ShaderNodeMapRange' : [ + NTPNodeSetting("clamp", ST.BOOL), + NTPNodeSetting("data_type", ST.ENUM, min_version = (3, 1, 0)), + NTPNodeSetting("interpolation_type", ST.ENUM) + ], - 'ShaderNodeRGBToBW' : [], + 'ShaderNodeMath' : [ + NTPNodeSetting("operation", ST.ENUM), + NTPNodeSetting("use_clamp", ST.BOOL) + ], - 'ShaderNodeSeparateColor' : [("mode", ST.ENUM)], + 'ShaderNodeRGBToBW' : [], - 'ShaderNodeSeparateXYZ' : [], + 'ShaderNodeSeparateColor' : [ + NTPNodeSetting("mode", ST.ENUM, min_version = (3, 3, 0)) + ], - 'ShaderNodeShaderToRGB' : [], + 'ShaderNodeSeparateXYZ' : [], + 'ShaderNodeShaderToRGB' : [], - 'ShaderNodeVectorMath' : [("operation", ST.ENUM)], + 'ShaderNodeVectorMath' : [ + NTPNodeSetting("operation", ST.ENUM) + ], - 'ShaderNodeWavelength' : [], + 'ShaderNodeWavelength' : [], # SCRIPT - 'ShaderNodeScript' : [("bytecode", ST.STRING), #TODO: test all that - ("bytecode_hash", ST.STRING), - ("filepath", ST.STRING), - ("mode", ST.ENUM), - ("script", ST.TEXT), - ("use_auto_update", ST.BOOL)], + 'ShaderNodeScript' : [ + NTPNodeSetting("bytecode", ST.STRING), #TODO: test all that + NTPNodeSetting("bytecode_hash", ST.STRING), + NTPNodeSetting("filepath", ST.STRING), + NTPNodeSetting("mode", ST.ENUM), + NTPNodeSetting("script", ST.TEXT), + NTPNodeSetting("use_auto_update", ST.BOOL) + ], # MISC - 'ShaderNodeGroup' : [('node_tree', ST.NODE_TREE)], + 'ShaderNodeGroup' : [ + NTPNodeSetting('node_tree', ST.NODE_TREE) + ], - 'NodeFrame' : [("label_size", ST.INT), - ("shrink", ST.BOOL), - ("text", ST.TEXT)], + 'NodeFrame' : [ + NTPNodeSetting("label_size", ST.INT), + NTPNodeSetting("shrink", ST.BOOL), + NTPNodeSetting("text", ST.TEXT) + ], - 'NodeGroupInput' : [], + 'NodeGroupInput' : [], - 'NodeGroupOutput' : [("is_active_output", ST.BOOL)], + 'NodeGroupOutput' : [ + NTPNodeSetting("is_active_output", ST.BOOL) + ], - 'NodeReroute' : [] + 'NodeReroute' : [] } diff --git a/material/operator.py b/material/operator.py index 485b530..0cc8461 100644 --- a/material/operator.py +++ b/material/operator.py @@ -11,7 +11,7 @@ MAT_VAR = "mat" NODE = "node" -shader_op_reserved_names = {MAT_VAR, NODE} +SHADER_OP_RESERVED_NAMES = {MAT_VAR, NODE} class NTPMaterialOperator(NTP_Operator): bl_idname = "node.ntp_material" @@ -24,7 +24,7 @@ class NTPMaterialOperator(NTP_Operator): def __init__(self): super().__init__() self._settings = shader_node_settings - for name in shader_op_reserved_names: + for name in SHADER_OP_RESERVED_NAMES: self._used_vars[name] = 0 def _create_material(self, indent: str): diff --git a/ntp_operator.py b/ntp_operator.py index a7b1862..732985a 100644 --- a/ntp_operator.py +++ b/ntp_operator.py @@ -21,13 +21,18 @@ IMAGE_PATH = "image_path" BASE_DIR = "base_dir" -reserved_names = { +RESERVED_NAMES = { INDEX, IMAGE_DIR_NAME, IMAGE_PATH, BASE_DIR } +#node input sockets that are messy to set default values for +DONT_SET_DEFAULTS = {'NodeSocketGeometry', + 'NodeSocketShader', + 'NodeSocketVirtual'} + class NTP_Operator(Operator): """ "Abstract" base class for all NTP operators. Blender types and abstraction @@ -96,7 +101,7 @@ def __init__(self): # Dictionary used for setting node properties self._settings: dict[str, list[(str, ST)]] = {} - for name in reserved_names: + for name in RESERVED_NAMES: self._used_vars[name] = 0 def _write(self, string: str, indent: str = None): @@ -273,57 +278,63 @@ def _set_settings_defaults(self, node: Node) -> None: node_var = self._node_vars[node] - for (attr_name, type) in self._settings[node.bl_idname]: + for setting in self._settings[node.bl_idname]: + + attr_name = setting.name + st = setting.st + if not hasattr(node, attr_name): - self.report({'WARNING'}, - f"NodeToPython: Couldn't find attribute " - f"\"{attr_name}\" for node {node.name} of type " - f"{node.bl_idname}") + if (bpy.app.version >= setting.min_version and + bpy.app.version <= setting.max_version): + self.report({'WARNING'}, + f"NodeToPython: Couldn't find attribute " + f"\"{attr_name}\" for node {node.name} of type " + f"{node.bl_idname}") continue attr = getattr(node, attr_name, None) if attr is None: continue setting_str = f"{node_var}.{attr_name}" - if type == ST.ENUM: + if st == ST.ENUM: if attr != '': self._write(f"{setting_str} = {enum_to_py_str(attr)}") - elif type == ST.ENUM_SET: + elif st == ST.ENUM_SET: self._write(f"{setting_str} = {attr}") - elif type == ST.STRING: + elif st == ST.STRING: self._write(f"{setting_str} = {str_to_py_str(attr)}") - elif type == ST.BOOL or type == ST.INT or type == ST.FLOAT: + elif st == ST.BOOL or st == ST.INT or st == ST.FLOAT: self._write(f"{setting_str} = {attr}") - elif type == ST.VEC1: + elif st == ST.VEC1: self._write(f"{setting_str} = {vec1_to_py_str(attr)}") - elif type == ST.VEC2: + elif st == ST.VEC2: self._write(f"{setting_str} = {vec2_to_py_str(attr)}") - elif type == ST.VEC3: + elif st == ST.VEC3: self._write(f"{setting_str} = {vec3_to_py_str(attr)}") - elif type == ST.VEC4: + elif st == ST.VEC4: self._write(f"{setting_str} = {vec4_to_py_str(attr)}") - elif type == ST.COLOR: + elif st == ST.COLOR: self._write(f"{setting_str} = {color_to_py_str(attr)}") - elif type == ST.MATERIAL: + elif st == ST.MATERIAL: name = str_to_py_str(attr.name) self._write((f"if {name} in bpy.data.materials:")) self._write((f"\t{setting_str} = bpy.data.materials[{name}]")) - elif type == ST.OBJECT: + elif st == ST.OBJECT: name = str_to_py_str(attr.name) self._write((f"if {name} in bpy.data.objects:")) self._write((f"\t{setting_str} = bpy.data.objects[{name}]")) - elif type == ST.COLOR_RAMP: + elif st == ST.COLOR_RAMP: self._color_ramp_settings(node, attr_name) - elif type == ST.CURVE_MAPPING: + elif st == ST.CURVE_MAPPING: self._curve_mapping_settings(node, attr_name) - elif type == ST.NODE_TREE: + elif st == ST.NODE_TREE: self._node_tree_settings(node, attr_name) - elif type == ST.IMAGE: + elif st == ST.IMAGE: if self._addon_dir is not None and attr is not None: if attr.source in {'FILE', 'GENERATED', 'TILED'}: self._save_image(attr) self._load_image(attr, f"{node_var}.{attr_name}") - elif type == ST.IMAGE_USER: + elif st == ST.IMAGE_USER: self._image_user_settings(attr, f"{node_var}.{attr_name}") if bpy.app.version < (4, 0, 0): @@ -663,7 +674,7 @@ def _set_input_defaults(self, node: Node) -> None: node_var = self._node_vars[node] for i, input in enumerate(node.inputs): - if input.bl_idname not in dont_set_defaults and not input.is_linked: + if input.bl_idname not in DONT_SET_DEFAULTS and not input.is_linked: # TODO: this could be cleaner socket_var = f"{node_var}.inputs[{i}]" diff --git a/utils.py b/utils.py index 5b3cb5d..84fc729 100644 --- a/utils.py +++ b/utils.py @@ -5,12 +5,7 @@ from enum import Enum, auto import keyword import re -from typing import Tuple - -#node input sockets that are messy to set default values for -dont_set_defaults = {'NodeSocketGeometry', - 'NodeSocketShader', - 'NodeSocketVirtual'} +from typing import NamedTuple class ST(Enum): """ @@ -28,7 +23,7 @@ class ST(Enum): VEC3 = auto() VEC4 = auto() COLOR = auto() - + # Special settings COLOR_RAMP = auto() CURVE_MAPPING = auto() @@ -54,6 +49,13 @@ class ST(Enum): FILE_SLOTS = auto() LAYER_SLOTS = auto() #unimplemented +class NTPNodeSetting(NamedTuple): + name: str + st: ST + min_version: tuple = (3, 0, 0) + max_version: tuple = (4, 1, 0) + + def clean_string(string: str, lower: bool = True) -> str: """ Cleans up a string for use as a variable or file name