- Implemented `image_plane.py` to build the Image Plane Geometry Nodes group with customizable parameters for geometry, subdivide, and thickness. - Created `image_plane_validation.py` to validate the functionality of the image plane, ensuring correct geometry generation and material assignment. - Developed `material_layers.py` to construct shader node groups for image materials, including depth and normal handling. - Authored `plane_layouts.py` to define node arrangements for image geometry assets. - Introduced `shadeless.py` to create a shadeless shader node group that displays color without scene lighting while preserving shadows and reflections.
45 lines
2.2 KiB
Python
45 lines
2.2 KiB
Python
"""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
|