首页 > 编程知识 正文

unity3d(unity着色器)

时间:2023-05-05 14:40:44 阅读:73542 作者:3714

通常,用于纹理的颜色数量会减少,以达到某些特殊的渲染效果。 无论是在后处理中安装,还是在各个物体上安装,想法都是一样的。

在unity中,色值分量可被视为[ 0,1 ]的连续值,但实际上只能获得256个值,因此可以将[ 0,1 ]的值直接映射到256个网格上,并且根据需要将这256个网格统一。 例如,[ 0,9 ]原本是10种颜色,现在被以0为代表的颜色取代。 替换为[ 10,19 ] 10这一颜色,依次类推。

键码,_DiscreteLevel是所需的颜色数。 此处使用向下广播。 因此,此区间中的所有颜色都将替换为区间开头的颜色。 如果需要,还可以使用上广播、使用此部分中间的颜色,以及使用调色板指定颜色。

brightness=floor (brightness * 256/(256/_discretelevel ) )/_ discrete level )/256; 代码中备有灰度和彩色两种方式,如果是灰度,则根据像素的亮度判断位置的区间,如果是彩色,则分别对三个颜色成分进行该处理。

效果如下,原图

_DiscreteLevel=4效果

灰度模式

完整的代码shader ' LX/reduce color ' { properties } _ color (' color ',color )=(1,1,1 ) _maintex ) (albedo ) RGB 范围(0(0, 1 )=0.5_metallic (、range )、1 )=0.0_discretelevel (、range ) )1)=0.5 ) sub shader (tags (渲染类型) (; half _Glossiness; half _Metallic; fixed4 _Color; int _DiscreteLevel; float _GrayScale; voidsurf(inputin,inout SurfaceOutputStandard o ) float4c=tex2d(_maintex,IN.uv_MainTex ) * _Color; //首先计算亮度混合亮度=亮度(c.RGB ); //灰度离散化brightness=floor (brightness * 256/) * (256/_DiscreteLevel ) ) * (256/_DiscreteLevel )/256; fixed3gray color=fixed3(brightness,brightness,brightness ); //彩色离散化fixedr=floor(c.r*256/) * (256/_DiscreteLevel ) ) (* (256/_DiscreteLevel )/256; fixedg=floor(c.g*256/) * (256/_DiscreteLevel ) ) (* (256/_DiscreteLevel )/256; fixedb=floor(c.b*256/) * (256/_DiscreteLevel ) ) (* (256/_DiscreteLevel )/256; fixed3color=fixed3(r、g、b ); //插值o.albedo=lerp (颜色,灰色颜色,_GrayScale ); o.Metallic=_Metallic; o.Smoothness=_Glossiness; 奥法丙甲; } ENDCG } FallBack 'Diffuse'}另外代码也送到了github仓库,请大家也关注一下哦~

我的github

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。