feat: add tests for outline points and thickness handling in depth surface
This commit is contained in:
@@ -240,13 +240,21 @@ def split_depth_surface(group, geometry, face_camera, strength, reference_depth,
|
||||
return choose.outputs["Output"], face_camera, cut
|
||||
|
||||
|
||||
def build_surface_camera(group, original, separated, cut_vertex, strength):
|
||||
def build_surface_camera(group, original, separated, cut_vertex, strength, *, always_vertex=None):
|
||||
"""Change cut depth along the original ray, preserving every other vertex."""
|
||||
enabled = group.nodes.new("GeometryNodeSwitch")
|
||||
enabled.input_type = "BOOLEAN"
|
||||
group.links.new(_math(group, "GREATER_THAN", strength, 0.0), enabled.inputs["Switch"])
|
||||
enabled.inputs["False"].default_value = False
|
||||
group.links.new(cut_vertex, enabled.inputs["True"])
|
||||
if always_vertex is not None:
|
||||
combined = group.nodes.new("FunctionNodeBooleanMath")
|
||||
combined.operation = "OR"
|
||||
group.links.new(enabled.outputs["Output"], combined.inputs[0])
|
||||
group.links.new(always_vertex, combined.inputs[1])
|
||||
enabled = combined.outputs["Boolean"]
|
||||
else:
|
||||
enabled = enabled.outputs["Output"]
|
||||
original_axes = group.nodes.new("ShaderNodeSeparateXYZ")
|
||||
separated_axes = group.nodes.new("ShaderNodeSeparateXYZ")
|
||||
group.links.new(original, original_axes.inputs[0])
|
||||
@@ -260,7 +268,7 @@ def build_surface_camera(group, original, separated, cut_vertex, strength):
|
||||
group.links.new(ratio, projected.inputs[3])
|
||||
choose = group.nodes.new("GeometryNodeSwitch")
|
||||
choose.input_type = "VECTOR"
|
||||
group.links.new(enabled.outputs["Output"], choose.inputs["Switch"])
|
||||
group.links.new(enabled, choose.inputs["Switch"])
|
||||
group.links.new(original, choose.inputs["False"])
|
||||
group.links.new(projected.outputs[0], choose.inputs["True"])
|
||||
return evaluate_field(group, choose.outputs["Output"], "FLOAT_VECTOR", "POINT")
|
||||
@@ -275,7 +283,7 @@ def thicken_depth_surface(group, geometry, thickness, normal_smooth=None, *,
|
||||
# Encode identity in the construction geometry before extrusion. The source
|
||||
# surface remains a separate sampling input; no position or ID is stored.
|
||||
identity = nodes.new("ShaderNodeCombineXYZ")
|
||||
for operation, axis in (("MODULO", "X"), ("DIVIDE", "Y")):
|
||||
for operation, axis in (("MODULO", "X"), ("DIVIDE", "Z")):
|
||||
part = nodes.new("FunctionNodeIntegerMath")
|
||||
part.operation = operation
|
||||
part.inputs[1].default_value = 4096
|
||||
|
||||
Reference in New Issue
Block a user