Doc > Nodes > SOP > AttribCreate

Doc > Nodes > SOP > AttribCreate

Creates an attribute on the geometry or object.

Description

This allows you to create an attribute and define the following: - the group this applies to - the name - the type (numeric or string) - the size (float, vector2, vector3 or vector4) - the class (geometry or object attribute) - the value

Note that you can also given an expression to set the value of the attribute, such as sin(2*@P.z)

Parameters

Name Type Description
group string the group this applies to
class integer the attribute class (geometry or object)
type integer the attribute type (numeric or string)
name string the attribute name
size integer the attribute size (1 for float, 2 for vector2, 3 for vector3, 4 for vector4)
value1 float the value for a float attribute
value2 vector2 the value for a vector2
value3 vector3 the value for a vector3
value4 vector4 the value for a vector4
string string the value for a string attribute

Edit code in JsFiddle , Codepen , view in a new tab or Open in the Editor


// create a scene
const scene = new PolyScene();
const root = scene.root();

const geo = root.createNode('geo');
// create a line
const line = geo.createNode('line');
line.p.pointsCount.set(50);

// add an attribute 'amp'
// which we can later use in a noise SOP
// by giving an expression to set its value
// the amp value will be:
// - 0 for the first point
// - 1 for the last point
// - and a smooth gradient in between
const attribCreate = geo.createNode('attribCreate');
attribCreate.setInput(0, line);
attribCreate.p.name.set('amp');
attribCreate.p.value1.set('@ptnum / (pointsCount(0)-1)');

// create a noise SOP
const noise = geo.createNode('noise');
noise.setInput(0, attribCreate);
noise.p.tamplitudeAttrib.set(true);
// init with a non-zero offset to better see the noise
noise.p.offset.set([4.3, 0, 0]);
noise.p.useRestAttributes.set(false);
noise.p.computeNormals.set(false);

// add a material to see the line
const materials = root.createNode('materialsNetwork');
const lineBasic = materials.createNode('lineBasic');
lineBasic.p.color.set([0, 0, 1]);
// assign the material
const material = geo.createNode('material');
material.setInput(0, noise);
material.p.material.setNode(lineBasic);
material.flags.display.set(true);

// create a camera
const perspectiveCamera1 = root.createNode('perspectiveCamera');
perspectiveCamera1.p.t.set([5, 5, 5]);
// add orbitControls
const events1 = perspectiveCamera1.createNode('eventsNetwork');
const orbitsControls = events1.createNode('cameraOrbitControls');
perspectiveCamera1.p.controls.setNode(orbitsControls);

// mount the viewer
const element = document.getElementById('app');
perspectiveCamera1.createViewer(element);