GOOENGINE: Twirl Node
Patches originally written by Joseph and Thorn. Thank you! Adds a twirl vector node
This commit is contained in:
@@ -348,6 +348,7 @@ class NODE_MT_category_goo_engine(Menu):
|
||||
node_add_menu.add_node_type(layout, "ShaderNodeSdfOp")
|
||||
node_add_menu.add_node_type(layout, "ShaderNodeSdfVectorOp")
|
||||
node_add_menu.add_node_type(layout, "ShaderNodeSdfNoise")
|
||||
node_add_menu.add_node_type(layout, "ShaderNodeTwirl")
|
||||
|
||||
|
||||
class NODE_MT_category_shader_script(Menu):
|
||||
|
||||
@@ -1012,6 +1012,7 @@ void node_tree_remove_layer_n(bNodeTree *ntree, Scene *scene, int layer_index);
|
||||
#define SH_NODE_COLOR_PALETTE 900
|
||||
#define SH_NODE_LIGHT_INFO 901
|
||||
#define SH_NODE_TEX_HEXAGON 902
|
||||
#define SH_NODE_TWIRL 903
|
||||
|
||||
/** \} */
|
||||
|
||||
|
||||
@@ -629,6 +629,7 @@ set(GLSL_SRC
|
||||
shaders/material/gpu_shader_material_texture_coordinates.glsl
|
||||
shaders/material/gpu_shader_material_tex_voronoi.glsl
|
||||
shaders/material/gpu_shader_material_tex_hexagon.glsl
|
||||
shaders/material/gpu_shader_material_twirl.glsl
|
||||
shaders/material/gpu_shader_material_tex_wave.glsl
|
||||
shaders/material/gpu_shader_material_tex_white_noise.glsl
|
||||
shaders/material/gpu_shader_material_toon.glsl
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
#pragma BLENDER_REQUIRE(gpu_shader_common_math_utils.glsl)
|
||||
|
||||
void node_twirl(vec3 vector, vec3 center, float amount, out vec3 result)
|
||||
{
|
||||
/* Only use X/Y for 2D twirl, Z is passed through. */
|
||||
float uv_x = vector.x - center.x;
|
||||
float uv_y = vector.y - center.y;
|
||||
float radius = sqrt(uv_x * uv_x + uv_y * uv_y);
|
||||
float angle = atan(uv_y, uv_x); // Changed from atan2 to atan
|
||||
angle += radius * amount;
|
||||
float shifted_x = cos(angle) * radius;
|
||||
float shifted_y = sin(angle) * radius;
|
||||
result.x = shifted_x + center.x;
|
||||
result.y = shifted_y + center.y;
|
||||
result.z = vector.z;
|
||||
}
|
||||
@@ -1538,6 +1538,13 @@ typedef struct NodeTexHexagon {
|
||||
int use_clamp;
|
||||
} NodeTexHexagon;
|
||||
|
||||
typedef struct NodeTwirl {
|
||||
NodeTexBase base;
|
||||
float amount;
|
||||
float center[2];
|
||||
char _pad[4];
|
||||
} NodeTwirl;
|
||||
|
||||
typedef struct NodeSunBeams {
|
||||
float source[2];
|
||||
|
||||
|
||||
@@ -5778,6 +5778,12 @@ static void def_sh_shader_info(StructRNA *srna)
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
|
||||
}
|
||||
|
||||
static void def_sh_twirl(StructRNA *srna)
|
||||
{
|
||||
RNA_def_struct_sdna_from(srna, "NodeTwirl", "storage");
|
||||
def_sh_tex(srna);
|
||||
}
|
||||
|
||||
static void def_sh_tex_hexagon(StructRNA *srna)
|
||||
{
|
||||
static const EnumPropertyItem prop_hexagon_coords_items[] = {
|
||||
|
||||
@@ -131,11 +131,11 @@ DefNode(ShaderNode, SH_NODE_SEPARATE_COLOR, def_sh_combsep_color, "SEP
|
||||
DefNode(ShaderNode, SH_NODE_MIX, def_sh_mix, "MIX", Mix, "Mix", "Mix values by a factor")
|
||||
DefNode(ShaderNode, SH_NODE_SHADER_INFO, def_sh_shader_info, "SHADERINFO", ShaderInfo, "Shader Info", "Separate internal lighting into multiple outputs, and allow for per-node light-groups.")
|
||||
DefNode(ShaderNode, SH_NODE_TEX_HEXAGON, def_sh_tex_hexagon, "TEX_HEXAGON", TexHexagon, "Hex Grid Texture", "" )
|
||||
DefNode(ShaderNode, SH_NODE_TWIRL, def_sh_twirl, "TWIRL", Twirl, "Twirl", "Twirl the input vector around a center point by a specified amount")
|
||||
DefNode(ShaderNode, SH_NODE_SCREENSPACE_INFO, 0, "SCREENSPACEINFO", ScreenspaceInfo, "Screenspace Info", "Sample internal colour and depth buffers")
|
||||
DefNode(ShaderNode, SH_NODE_SET_DEPTH, 0, "SET_DEPTH", SetDepth, "Set Depth", "Pixel depth offset")
|
||||
DefNode(ShaderNode, SH_NODE_CURVATURE, 0, "CURVATURE", Curvature, "Curvature", "" )
|
||||
DefNode(ShaderNode, SH_NODE_CURVATURE, 0, "CURVATURE", Curvature, "Curvature", "" )
|
||||
DefNode(ShaderNode, SH_NODE_SDF_NOISE, 0, "SDF_NOISE", SdfNoise, "Sdf Noise", "" )
|
||||
|
||||
DefNode(CompositorNode, CMP_NODE_VIEWER, def_cmp_viewer, "VIEWER", Viewer, "Viewer", "Visualize data from inside a node graph, in the image editor or as a backdrop")
|
||||
DefNode(CompositorNode, CMP_NODE_RGB, 0, "RGB", RGB, "RGB", "A color picker")
|
||||
DefNode(CompositorNode, CMP_NODE_VALUE, 0, "VALUE", Value, "Value", "Input numerical values to other nodes in the node graph")
|
||||
|
||||
@@ -49,6 +49,7 @@ set(SRC
|
||||
nodes/node_shader_clamp.cc
|
||||
nodes/node_shader_color_ramp.cc
|
||||
nodes/node_shader_tex_hexagon.cc
|
||||
nodes/node_shader_twirl.cc
|
||||
nodes/node_shader_common.cc
|
||||
nodes/node_shader_curvature.cc
|
||||
nodes/node_shader_curves.cc
|
||||
|
||||
@@ -40,6 +40,7 @@ void register_shader_nodes()
|
||||
register_node_type_sh_combrgb();
|
||||
register_node_type_sh_combxyz();
|
||||
register_node_type_sh_tex_hexagon();
|
||||
register_node_type_sh_twirl();
|
||||
register_node_type_sh_curvature();
|
||||
register_node_type_sh_curve_float();
|
||||
register_node_type_sh_curve_rgb();
|
||||
|
||||
@@ -36,6 +36,7 @@ void register_node_type_sh_combhsv();
|
||||
void register_node_type_sh_combrgb();
|
||||
void register_node_type_sh_combxyz();
|
||||
void register_node_type_sh_tex_hexagon();
|
||||
void register_node_type_sh_twirl();
|
||||
void register_node_type_sh_curvature();
|
||||
void register_node_type_sh_curve_float();
|
||||
void register_node_type_sh_curve_rgb();
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
#include "node_shader_util.hh"
|
||||
|
||||
namespace blender::nodes::node_shader_twirl_cc {
|
||||
|
||||
static void node_declare(NodeDeclarationBuilder &b)
|
||||
{
|
||||
b.add_input<decl::Vector>("Vector").default_value({0.0f, 0.0f, 0.0f});
|
||||
b.add_input<decl::Vector>("Center").default_value({0.5f, 0.5f, 0.0f}).min(0.0f).max(1.0f);
|
||||
b.add_input<decl::Float>("Amount").default_value(0.0f).min(-10.0f).max(10.0f);
|
||||
b.add_output<decl::Vector>("Vector");
|
||||
}
|
||||
|
||||
static int gpu_shader_twirl(GPUMaterial *mat,
|
||||
bNode *node,
|
||||
bNodeExecData * /*execdata*/,
|
||||
GPUNodeStack *in,
|
||||
GPUNodeStack *out)
|
||||
{
|
||||
return GPU_stack_link(mat, node, "node_twirl", in, out);
|
||||
}
|
||||
|
||||
} // namespace blender::nodes::node_shader_twirl_cc
|
||||
|
||||
void register_node_type_sh_twirl(void)
|
||||
{
|
||||
namespace file_ns = blender::nodes::node_shader_twirl_cc;
|
||||
|
||||
static blender::bke::bNodeType ntype;
|
||||
|
||||
sh_node_type_base(&ntype, SH_NODE_TWIRL, "Twirl", NODE_CLASS_OP_VECTOR);
|
||||
ntype.declare = file_ns::node_declare;
|
||||
ntype.gpu_fn = file_ns::gpu_shader_twirl;
|
||||
|
||||
node_register_type(&ntype);
|
||||
}
|
||||
Reference in New Issue
Block a user