Sort决定方向:
UV:
vector rel = relbbox(0,@P);
float x = rel.x;
float z = rel.z;
int invertu = chi("invertu");
int invertv = chi("invertv");
float scaleu = chf("scaleu");
float scalev = chf("scalev");
float scale = chf("scale");
if(invertu==1) x=1-x;
if(invertv==1) z=1-z;
x *= scaleu * scale;
z *= scalev * scale;
@Cd = texture(chs("tex"),x,z);
拉伸:
1.
int length = chi("length");
float threshold = chf("threshold");
float brightness = 0.299 * @Cd.r + 0.587 * @Cd.g + 0.114 * @Cd.b;
int idx = @primnum;
int seed = chi("seed");
vector mixcolor = prim(0,"Cd",idx+seed);
if(brightness>=threshold)
{
for(int i=0;i<length;++i)
{
if(inprimgroup(0,"border",idx+i)==1) break;
vector color = prim(0,"Cd",idx+i);
float ratio = i*1.0/length;
color = lerp(@Cd,mixcolor,1-ratio);
setprimattrib(0,"Cd",idx+i,color);
}
}
2.
1-ratio会让偏移的最后一个颜色等于拉伸的颜色;替换成ratio则会使偏移的第一个颜色等于拉伸的颜色。
int length = chi("length");
float threshold = chf("threshold");
float brightness = 0.299 * @Cd.r + 0.587 * @Cd.g + 0.114 * @Cd.b;
int idx = @primnum;
int seed = chi("seed");
vector mixcolor = prim(0,"Cd",idx+seed);
if(brightness>=threshold)
{
for(int i=0;i<length;++i)
{
if(inprimgroup(0,"border",idx+i)==1) break;
float ratio = i*1.0/length;
vector color = lerp(@Cd,mixcolor,ratio);
setprimattrib(0,"Cd",idx+i,color);
}
}
3.
不使用mixcolor混合,而使用自己原本的颜色混合,可以使尾部变柔和。
int length = chi("length");
float threshold = chf("threshold");
float brightness = 0.299 * @Cd.r + 0.587 * @Cd.g + 0.114 * @Cd.b;
int idx = @primnum;
int seed = chi("seed");
vector mixcolor = prim(0,"Cd",idx+seed);
if(brightness>=threshold)
{
for(int i=0;i<length;++i)
{
if(inprimgroup(0,"border",idx+i)==1) break;
vector col = prim(0,"Cd",idx+i);
float ratio = i*1.0/length;
vector color = lerp(@Cd,col,ratio);
setprimattrib(0,"Cd",idx+i,color);
}
}
4.
对ratio进行映射。
int length = chi("length");
float threshold = chf("threshold");
float brightness = 0.299 * @Cd.r + 0.587 * @Cd.g + 0.114 * @Cd.b;
int idx = @primnum;
int seed = chi("seed");
vector mixcolor = prim(0,"Cd",idx+seed);
if(brightness>=threshold)
{
for(int i=0;i<length;++i)
{
if(inprimgroup(0,"border",idx+i)==1) break;
vector col = prim(0,"Cd",idx+i);
float ratio = i*1.0/length;
ratio = chramp("ratio",ratio);
vector color = lerp(@Cd,col,ratio);
setprimattrib(0,"Cd",idx+i,color);
}
}
评论前必须登录!
注册