diff options
author | Brecht Van Lommel <brecht@blender.org> | 2022-01-25 15:25:33 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2022-01-25 19:14:20 +0300 |
commit | c813a1b3583e9a3bf17c75e16995ebadb046361a (patch) | |
tree | 8f5405c7f0a05aef8d43342764fc0a42ef577a54 /intern/cycles/kernel/svm | |
parent | eab066cbf2da1fdb8162d9ed814a9491f9acf02d (diff) |
Cycles: add Point Info node
With (center) position, radius and random value outputs.
Eevee does not yet support rendering point clouds, but an untested
implementation of this node was added for when it does.
Ref T92573
Diffstat (limited to 'intern/cycles/kernel/svm')
-rw-r--r-- | intern/cycles/kernel/svm/geometry.h | 31 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/svm.h | 11 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/types.h | 9 |
3 files changed, 37 insertions, 14 deletions
diff --git a/intern/cycles/kernel/svm/geometry.h b/intern/cycles/kernel/svm/geometry.h index 2bac58b0aa2..225348b1ac2 100644 --- a/intern/cycles/kernel/svm/geometry.h +++ b/intern/cycles/kernel/svm/geometry.h @@ -242,13 +242,6 @@ ccl_device_noinline void svm_node_hair_info(KernelGlobals kg, stack_store_float(stack, out_offset, data); break; } -# if 0 - case NODE_INFO_CURVE_FADE: { - data = sd->curve_transparency; - stack_store_float(stack, out_offset, data); - break; - } -# endif case NODE_INFO_CURVE_TANGENT_NORMAL: { data3 = curve_tangent_normal(kg, sd); stack_store_float3(stack, out_offset, data3); @@ -258,4 +251,28 @@ ccl_device_noinline void svm_node_hair_info(KernelGlobals kg, } #endif +#ifdef __POINTCLOUD__ + +/* Point Info */ + +ccl_device_noinline void svm_node_point_info(KernelGlobals kg, + ccl_private ShaderData *sd, + ccl_private float *stack, + uint type, + uint out_offset) +{ + switch (type) { + case NODE_INFO_POINT_POSITION: + stack_store_float3(stack, out_offset, point_position(kg, sd)); + break; + case NODE_INFO_POINT_RADIUS: + stack_store_float(stack, out_offset, point_radius(kg, sd)); + break; + case NODE_INFO_POINT_RANDOM: + break; /* handled as attribute */ + } +} + +#endif + CCL_NAMESPACE_END diff --git a/intern/cycles/kernel/svm/svm.h b/intern/cycles/kernel/svm/svm.h index b226bc66771..35d4c3f2055 100644 --- a/intern/cycles/kernel/svm/svm.h +++ b/intern/cycles/kernel/svm/svm.h @@ -454,13 +454,14 @@ ccl_device void svm_eval_nodes(KernelGlobals kg, break; #if defined(__HAIR__) case NODE_HAIR_INFO: - IF_KERNEL_NODES_FEATURE(HAIR) - { - svm_node_hair_info(kg, sd, stack, node.y, node.z); - } + svm_node_hair_info(kg, sd, stack, node.y, node.z); + break; +#endif +#if defined(__POINTCLOUD__) + case NODE_POINT_INFO: + svm_node_point_info(kg, sd, stack, node.y, node.z); break; #endif - case NODE_TEXTURE_MAPPING: offset = svm_node_texture_mapping(kg, sd, stack, node.y, node.z, offset); break; diff --git a/intern/cycles/kernel/svm/types.h b/intern/cycles/kernel/svm/types.h index dd1b1f9bc28..16e9fd8862a 100644 --- a/intern/cycles/kernel/svm/types.h +++ b/intern/cycles/kernel/svm/types.h @@ -81,6 +81,7 @@ typedef enum ShaderNodeType { NODE_OBJECT_INFO, NODE_PARTICLE_INFO, NODE_HAIR_INFO, + NODE_POINT_INFO, NODE_TEXTURE_MAPPING, NODE_MAPPING, NODE_MIN_MAX, @@ -176,12 +177,16 @@ typedef enum NodeHairInfo { NODE_INFO_CURVE_INTERCEPT, NODE_INFO_CURVE_LENGTH, NODE_INFO_CURVE_THICKNESS, - /* Fade for minimum hair width transiency. */ - // NODE_INFO_CURVE_FADE, NODE_INFO_CURVE_TANGENT_NORMAL, NODE_INFO_CURVE_RANDOM, } NodeHairInfo; +typedef enum NodePointInfo { + NODE_INFO_POINT_POSITION, + NODE_INFO_POINT_RADIUS, + NODE_INFO_POINT_RANDOM, +} NodePointInfo; + typedef enum NodeLightPath { NODE_LP_camera = 0, NODE_LP_shadow, |