[shader]直方图/柱状图

本文介绍了如何在Unity中利用Shader创建直方图和柱状图的效果,包括最终呈现的视觉效果展示,实现该效果的思路解析,详细Shader源码的分享,以及配合Shader使用的脚本控制代码的介绍。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最终效果


思路

根据uv中的x取数组中的对应下标和uv中的y比较取色。
shader中只支持固定数组,请保持脚本和shader中的数组长度一致

shader源码

Shader "QQ/Histogram"
{
	Properties
	{
		_BarColor("Bar Color",Color) = (0.0,0.8,0.0,1.0)
		_BackColor("Back Color",Color) = (0.4,0.4,0.0,0.2)
		_BarSpace("Bar Space",Range(0,1)) = 0.8
	}
		SubShader
	{
		Tags {
		"RenderType" = "Transparent"
		"Queue" = "Transparent"
	}
		LOD 100

		Pass
		{
			Zwrite Off
			Blend SrcAlpha OneMinusSrcAlpha
			CGPROGRAM

			#pragma vertex vert
			#pragma fragment frag
			#include "UnityCG.cginc"

			#define Length 20 //定义你需要多少个数据

			uniform	fixed4 _BarColor;
			uniform	fixed4 _BackColor;
			uniform float _BarSpace;
			uniform float _Values[Length];
			struct appdata
			{
				float4 vertex : POSITION;
				float2 uv : TEXCOORD0;
			};

			struct v2f
			{
				float4 vertex : SV_POSITION;
				float2 uv : TEXCOORD0;
			};

			v2f vert(appdata v)
			{
				v2f o;
				o.vertex = UnityObjectToClipPos(v.vertex);
				o.uv = v.uv;
				return o;
			}

			fixed4 frag(v2f i) : SV_Target
			{
				float center = 1.0 / Length;
				int index = i.uv.x / center;
				fixed4 col = _BackColor;
				if (abs(i.uv.x % center / center - 0.5) / 0.5 < _BarSpace)
					if (i.uv.y < _Values[index])
					{
						//柱颜色的控制
						col = _BarColor;
						col.rgb *= _Values[index]*2;
					}
				return col;
			}
			ENDCG
		}
	}
}

脚本控制代码

public class HistogramControl : MonoBehaviour
{
    //数组长度要符合shader中定义的
    public float[] values;
    Material mat;
    void Start()
    {
        mat = GetComponent<MeshRenderer>().material;
    }
    void Update()
    {
        SetData(values);
    }
    public void SetData(float[] values)
    {
        mat.SetFloatArray("_Values", values);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值