From 37f65e9dc4bcfa5225a114feabac753e342bb201 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Tue, 13 Feb 2018 14:20:47 +0100 Subject: Cycles: Implement index output for hair node This is like the only way to add variety to hair which is created using simple children. Used here for the hair. Maybe not ideal, but the time will show. --- intern/cycles/render/attribute.cpp | 5 +++++ intern/cycles/render/nodes.cpp | 9 +++++++++ 2 files changed, 14 insertions(+) (limited to 'intern/cycles/render') diff --git a/intern/cycles/render/attribute.cpp b/intern/cycles/render/attribute.cpp index 95e69df6885..2d1100c9d88 100644 --- a/intern/cycles/render/attribute.cpp +++ b/intern/cycles/render/attribute.cpp @@ -267,6 +267,8 @@ const char *Attribute::standard_name(AttributeStandard std) return "particle"; case ATTR_STD_CURVE_INTERCEPT: return "curve_intercept"; + case ATTR_STD_CURVE_INDEX: + return "curve_index"; case ATTR_STD_PTEX_FACE_ID: return "ptex_face_id"; case ATTR_STD_PTEX_UV: @@ -451,6 +453,9 @@ Attribute *AttributeSet::add(AttributeStandard std, ustring name) case ATTR_STD_CURVE_INTERCEPT: attr = add(name, TypeDesc::TypeFloat, ATTR_ELEMENT_CURVE_KEY); break; + case ATTR_STD_CURVE_INDEX: + attr = add(name, TypeDesc::TypeFloat, ATTR_ELEMENT_CURVE); + break; case ATTR_STD_GENERATED_TRANSFORM: attr = add(name, TypeDesc::TypeMatrix, ATTR_ELEMENT_MESH); break; diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp index cb884ba9231..d2a03ceb76a 100644 --- a/intern/cycles/render/nodes.cpp +++ b/intern/cycles/render/nodes.cpp @@ -3572,6 +3572,7 @@ NODE_DEFINE(HairInfoNode) #if 0 /*output for minimum hair width transparency - deactivated */ SOCKET_OUT_FLOAT(fade, "Fade"); #endif + SOCKET_OUT_FLOAT(index, "Index"); return type; } @@ -3588,6 +3589,9 @@ void HairInfoNode::attributes(Shader *shader, AttributeRequestSet *attributes) if(!intercept_out->links.empty()) attributes->add(ATTR_STD_CURVE_INTERCEPT); + + if(!output("Index")->links.empty()) + attributes->add(ATTR_STD_CURVE_INDEX); } ShaderNode::attributes(shader, attributes); @@ -3623,6 +3627,11 @@ void HairInfoNode::compile(SVMCompiler& compiler) compiler.add_node(NODE_HAIR_INFO, NODE_INFO_CURVE_FADE, compiler.stack_assign(out)); }*/ + out = output("Index"); + if(!out->links.empty()) { + int attr = compiler.attribute(ATTR_STD_CURVE_INDEX); + compiler.add_node(NODE_ATTR, attr, compiler.stack_assign(out), NODE_ATTR_FLOAT); + } } void HairInfoNode::compile(OSLCompiler& compiler) -- cgit v1.2.3