"""Build the camera-projected branch of the complete-image depth plane.""" from node_graph import group_input as _group_input from depth_surface import project_depth_surface, thicken_depth_surface, remove_surface_attributes def build_camera_plane(group, image_plane_group): nodes, links = group.nodes, group.links controls = _group_input(nodes, (-300, 0), {"Geometry", "Subdivide"}) plane = nodes.new("GeometryNodeGroup") plane.node_tree = image_plane_group plane.inputs["Thickness"].default_value = 0 links.new(controls.outputs["Geometry"], plane.inputs["Geometry"]) links.new(controls.outputs["Subdivide"], plane.inputs["Subdivide"]) texture_input = _group_input(nodes, (-300, 700), {"Depth Image", "Uniform Scale"}) uv = nodes.new("GeometryNodeInputNamedAttribute") uv.data_type = "FLOAT_VECTOR" uv.inputs["Name"].default_value = "UVMap" texture = nodes.new("GeometryNodeImageTexture") texture.interpolation, texture.extension = "Linear", "EXTEND" links.new(uv.outputs["Attribute"], texture.inputs["Vector"]) links.new(texture_input.outputs["Depth Image"], texture.inputs["Image"]) depth_input = _group_input(nodes, (500, 1000), {"Reference Depth", "Depth Scale"}) surface = project_depth_surface( group, plane.outputs["Geometry"], texture.outputs["Color"], texture_input.outputs["Uniform Scale"], depth_input.outputs["Reference Depth"], depth_input.outputs["Depth Scale"], ) shell_input = _group_input(nodes, (2000, 500), {"Camera Thickness", "Normal Smooth"}) shell = thicken_depth_surface( group, surface, shell_input.outputs["Camera Thickness"], normal_smooth=shell_input.outputs["Normal Smooth"], ) positive = nodes.new("ShaderNodeMath") positive.operation = "GREATER_THAN" links.new(shell_input.outputs["Camera Thickness"], positive.inputs[0]) positive.inputs[1].default_value = 0 choose = nodes.new("GeometryNodeSwitch") choose.input_type = "GEOMETRY" links.new(positive.outputs[0], choose.inputs["Switch"]) links.new(surface, choose.inputs["False"]) links.new(shell, choose.inputs["True"]) clean = remove_surface_attributes(group, choose.outputs["Output"]) return clean