Houdini的ramp就是一个可曲线调控的0-1值重映射分布工具。常用在值的平滑过渡和变化的生命周期上。
使用ramp需要了解如下基本知识:
-
ramp的原理是将某个值进行0-1的重映射。注意重映射不等同于乘以一个0-1范围的值。
-
一个值要能被正确ramp,前提必须是——该值自身范围是0-1。
-
ramp处理的值是独立的,它只跟该值所在0-1初始分布有关,也就是说如果该值是点属性值,那么每个点进行ramp时它们各自的值进行重映射时都是相互独立的,相互之间是没有关系的。
-
默认ramp图形是一个对角线,表示的是0-1的值空间分布,其水平方向即X轴上的值表示该值的初始值大小,而其垂直方向即Y轴上的值表示其重映射后的输出值大小。
-
由于被ramp的值必须是0-1,所以被ramp的值在ramp坐标系初始时都会在该对角线上有一个点的位置与其大小对应,即每个值都在该对角线上都有一个初始位置分布。对角线的调整意味Y轴输出值的变换。
-
关于X轴的输入值与Y轴的输出值可以这么理解,假如初始化有4个值a=0.1,b=0.2,c=0.3,d=0.4,其在ramp坐标系中可以表示为以初始值为key,以输出值为value的字典映射。即{0.1:0.1,0.2:,0.2,0.3:0.3,0.4:0.4},我如果要<=0.2的值都变成0,>=0.3的值都变成1,则最终输出为{0.1:0,0.2:0,0,3:1,0.4:1},表示原值是0.1与0.2的值重映射后变成了0,原值是0.3与0.4的值重映射后变成了1.
例:超过1的值进行ramp导致的错误结果
float a =float(@ptnum);
@b=a;
f@a = chramp("ramp",a);
这里变量a的值等于点序号值,属性b的值是a重映射之前的值,而属性@a是变量a经过ramp后的值。结果如下
可以发现当被ramp的值a超过1时,永远为1。之所以为1是因为ramp的最大值是1。
ramp坐标图解释:
- 红色框:水平线上,或称X轴,表示原值的大小分布。
- 绿色框:垂直线上,或称Y轴,表示重映射后的大小分布。
- 默认起始是一个对角线,原值在该对角线上有且仅有一个唯一位置。比如:点A的属性值a=0.8.即上图黄色框的点。默认X值=0.8,Y值=0.8。
- 最终输出值为绿色框,也就是Y轴的值。
- ramp所做的运算,类似clamp(原值,min,max)或者fit01(原值,min,max),只不过min与max都变成了曲线所控制的Y值范围。
上图表示,超过0.82的值,都视作为1,即最终输出值为1.
动图说明,为什么ramp的区间范围或者生命周期只跟自身值在0-1区间分布有关系
下图演示,当值超过0.8的值被ramp重映射为1的过程
关于ramp区间生命周期问题
ramp区间常用来表示值的生命周期,比如增强与衰减。而要使得ramp区间有指定的生命周期,前提条件是对值先进行规律化的操作。
比如按索引序号赋值。@age = float(@ptnum)/@numpt;
当然也可以是其他规律处理,根据实际要求来。
网友评论