Unity shader Fit函数重映射

顺便再加一个Toggle开关
shader feature 比 muti更省,muti一般用于代码动态开关
https://zhuanlan.zhihu.com/p/158039963 这里有推导过程

在这里插入图片描述

关键函数

half remap(half x, half t1, half t2, half s1, half s2)
{
    
    
    return (x - t1) / (t2 - t1) * (s2 - s1) + s1;
}

使用方法


[Toggle(_IS_GRADIENT)] _IsGradient("IsGradient", Float) = 0
...


#pragma shader_feature _ _IS_GRADIENT

.....

// height gradient
float gradient = remap(IN.modelPos.y, _RemapMin, _RemapMax, 0, 1);
gradient = saturate(gradient);
half4 r = 1;

#if defined(_IS_GRADIENT)
	r = r * _Scale + r * lerp(_DarkCol * 2, _LitCol * 2, gradient);
#endif

注意

记得要saturate一下,不然会有负值和颜色调整不正常的问题

// height gradient
float gradient = remap(IN.modelPos.y, _RemapMin, _RemapMax, 0, 1);
gradient = saturate(gradient);
half4 r = half4(tree,1);

#if defined(_IS_FLIPY)
	gradient = 1 - gradient;
#endif



#if defined(_IS_GRADIENT)
	r = r * _Scale + r * lerp(_DarkCol * 2, _LitCol * 2, gradient);
	r = saturate(r);
#endif

return r;

猜你喜欢

转载自blog.csdn.net/A13155283231/article/details/116597015