changeNumericAttr creates it if empty; check in api
raytrace -> no recursion
return recursion to raytrace cause it's faster
type in api