先写下原理:
白色:(255,255,255,255)
黑色: (0,0,0,255)
灰色: (x,x,x,255)
灰色的rgb值是相同的,x越大越接近白色。
还有一点(这一段是在网上找的):人眼对绿色的敏感度最高,对红色的敏感度次之,对蓝色的敏感度最低,因此使用不同的权重将得到比较合理的灰度图像。实验和理论推导得出 0.299、 0.587、 0.114。
然后求该值和原颜色的点积,即可得出该点变灰后的rgb值。
片元着色器代码如下
fixed4 frag(v2f IN) : SV_Target { fixed4 c = tex2D(_MainTex, IN.texcoord) * IN.color; c.rgb *= c.a; float gray = dot(c.rgb, float3(0.299, 0.587, 0.114)); c.rgb = float3(gray, gray, gray); return c; }
效果图: