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