feat(node_assets): add image plane geometry nodes and validation scripts
- 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.
This commit is contained in:
44
tools/node_assets/depth_plane_camera.py
Normal file
44
tools/node_assets/depth_plane_camera.py
Normal file
@@ -0,0 +1,44 @@
|
||||
"""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
|
||||
Reference in New Issue
Block a user