1
我有一个着色器函数,其功能类似于Blender3D中的“色彩渐变”节点。它输入零和一之间的浮动,并输出颜色,是按照指定的顺序任意数量的颜色的共混物:色彩渐变着色器(cg/shaderlab)
这是我的代码:
fixed4 ColorRamp(float factor){
float positions[5] = {_Pos0, _Pos1, _Pos2, _Pos3, _Pos4};
fixed4 colors[5] = {_Color0, _Color1, _Color2, _Color3, _Color4};
fixed4 outColor = _Color0;
for(int i = 0; i <4; i++){
if(factor >= positions[i] && factor <positions[i+1]){
fixed localFactor = (factor - positions[i])/(positions[i+1] - positions[i]);
outColor = lerp(colors[i], colors[i+1], localFactor);
}else if (factor > positions [_NumColors-1]){
outColor = colors[_NumColors -1];
}
}
return outColor;
}
它的工作原理。但它很糟糕,原因如下:
- 斜坡中的颜色数是硬编码的。在Unity编辑器中添加它们的列表会更好。
- if/else语句。我知道这些表现很糟糕,应该避免。
- 颜色数组在函数中声明,这意味着必须为每个片段创建一个新数组(我认为)。
我的主要问题是第一个问题:如何在不需要编辑硬编码值的情况下更改斜坡中的颜色数量?
谢谢!你能否提供一个在属性块中声明数组的例子?我遇到了麻烦,无论是从Unity编辑器传递数组还是从可以从Unity编辑器传递的属性创建数组。 – dixiepig