Houdini的ramp就是一個可曲線調(diào)控的0-1值重映射分布工具式镐。常用在值的平滑過渡和變化的生命周期上诵次。
使用ramp需要了解如下基本知識:
ramp的原理是將某個值進行0-1的重映射既鞠。注意重映射不等同于乘以一個0-1范圍的值。
一個值要能被正確ramp紧卒,前提必須是——該值自身范圍是0-1师妙。
ramp處理的值是獨立的,它只跟該值所在0-1初始分布有關(guān)镀虐,也就是說如果該值是點屬性值星爪,那么每個點進行ramp時它們各自的值進行重映射時都是相互獨立的,相互之間是沒有關(guān)系的粉私。
默認ramp圖形是一個對角線顽腾,表示的是0-1的值空間分布,其水平方向即X軸上的值表示該值的初始值大小诺核,而其垂直方向即Y軸上的值表示其重映射后的輸出值大小抄肖。
由于被ramp的值必須是0-1,所以被ramp的值在ramp坐標(biāo)系初始時都會在該對角線上有一個點的位置與其大小對應(yīng)窖杀,即每個值都在該對角線上都有一個初始位置分布漓摩。對角線的調(diào)整意味Y軸輸出值的變換。
關(guān)于X軸的輸入值與Y軸的輸出值可以這么理解入客,假如初始化有4個值a=0.1,b=0.2,c=0.3,d=0.4,其在ramp坐標(biāo)系中可以表示為以初始值為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導(dǎo)致的錯誤結(jié)果
float a =float(@ptnum);
@b=a;
f@a = chramp("ramp",a);
這里變量a的值等于點序號值,屬性b的值是a重映射之前的值铆隘,而屬性@a是變量a經(jīng)過ramp后的值卓舵。結(jié)果如下
可以發(fā)現(xiàn)當(dāng)被ramp的值a超過1時,永遠為1膀钠。之所以為1是因為ramp的最大值是1掏湾。
ramp坐標(biāo)圖解釋:
- 紅色框:水平線上裹虫,或稱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的區(qū)間范圍或者生命周期只跟自身值在0-1區(qū)間分布有關(guān)系
下圖演示扼脐,當(dāng)值超過0.8的值被ramp重映射為1的過程
關(guān)于ramp區(qū)間生命周期問題
ramp區(qū)間常用來表示值的生命周期,比如增強與衰減奋刽。而要使得ramp區(qū)間有指定的生命周期瓦侮,前提條件是對值先進行規(guī)律化的操作。
比如按索引序號賦值佣谐。@age = float(@ptnum)/@numpt;
當(dāng)然也可以是其他規(guī)律處理肚吏,根據(jù)實際要求來。