Unity 3D柱状图效果

1.单个柱状效果展示

2.从上到下渐变透明材质Shader

cs 复制代码
Shader "Unlit/NewUnlitShader"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _Color("Color",Color) = (1,1,1,1)
        _Alpha("Alpha",Range(0,1) ) = 0.2
        _Alpha2("Alpha2",Range(0,1) ) = 0.2
        _Power("Power",range(0,10)) = 1
    }
    SubShader
    {
              Pass
        {
            Tags { "RenderType"="Transparent" }
            Cull Front
            Blend SrcAlpha One
            
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

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

            sampler2D _MainTex;
            float4 _MainTex_ST;
            fixed4 _Color;
            float _Alpha2;
            
            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                UNITY_TRANSFER_FOG(o,o.vertex);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                // sample the texture
                //fixed4 col = tex2D(_MainTex, i.uv);
                float v = i.uv.y;
                //float v = 1 - pow((1 - i.uv.y), 4);
                fixed4 c = fixed4(_Color.xyz ,v * _Alpha2);
                return c;
            }
            ENDCG
        }

        Pass
        {
            Tags { "RenderType"="Transparent" }
             Cull Back
            Blend SrcAlpha One 
            
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            // make fog work
            #pragma multi_compile_fog

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

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

            sampler2D _MainTex;
            float4 _MainTex_ST;
            fixed4 _Color;
            float _Alpha;


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

            fixed4 frag (v2f i) : SV_Target
            {
                // sample the texture
                //fixed4 col = tex2D(_MainTex, i.uv);
                float y = i.uv.y;
                float v = 1 - pow(1 - (1 - y ), 4);
                fixed4 c = fixed4(_Color.xyz * _Alpha, (1 - v) *_Alpha);
                return c;
            }
            ENDCG
        }

      Pass
        {
            Tags { "RenderType"="Transparent" }
            Blend SrcAlpha One 
            
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            // make fog work
            #pragma multi_compile_fog

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float3 normal : NORMAL;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                float3 viewDir : TEXCOORD1;
                float4 vertex : SV_POSITION;
                float3 normal : normal;
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;
            fixed4 _Color;
            float _Alpha;
            float _Power;

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                o.viewDir = ObjSpaceViewDir(v.vertex);
                o.normal = v.normal;
                UNITY_TRANSFER_FOG(o,o.vertex);
                return o;
            }


            fixed4 frag (v2f i) : SV_Target
            {
                // sample the texture
                float y2 = i.uv.y;
                float v = 1 - pow(1 - (1 - y2 ), 4);
                //float y =  i.uv.y +  _Time.y * _Speed;
                //float sy = (sin(_Time.y) + 1) / 2;
                float fresnel = pow(1 - saturate(dot(normalize(i.viewDir), normalize(i.normal))), _Power);
                for(int m = 0; m <= 10; m++)
                {
                        if(i.uv.y <= (m + 1) / 10  && i.uv.y >= m / 10)
                        {
                            return float4(_Color.rgb *_Alpha * fresnel,_Alpha * ((m + 1) / 10)) ;
                        }
                }
               
                return _Color * fresnel;
                // if(i.uv.y <= sy && i.uv.y >= sy - 0.1)
                // {
                //     return float4(_Color.rgb,_Alpha * 2) ;
                // }
                // else
                // {
                    
                //     fixed4 c = fixed4(_Color.xyz * _Alpha, (1 - v) *_Alpha);
                //     return c;
                // }
                //fixed4 col = tex2D(_MainTex, uv * _Alpha);

               
            }
            ENDCG
        }

    }
}

3.效果用例

unity 新建柱状体,赋予上面材质,调整合适参数。

相关推荐
3DVisionary2 小时前
捕捉亚毫米级裂纹演化!DIC技术为裂纹扩展与抗裂研究带来全新方案
人工智能·python·3d·应变测量·金属3d打印·dic精度检验方法·各向异性
Yasin Chen4 小时前
Unity TMP_SDF 分析(二)数据来源2
unity·游戏引擎
Mao_Hui4 小时前
Unity3d实时读取Modbus RTU数据
开发语言·嵌入式硬件·unity·c#
相信神话20214 小时前
《酒魂》游戏开发实战——从设计思想到 Godot 实现(单机完整版)
游戏引擎·godot
心疼你的一切7 小时前
【Unity-MCP完全指南:从零开始构建AI游戏开发助手】
人工智能·unity·ai·游戏引擎·aigc·mcp
示申○言舌7 小时前
基于知识库(RAG)系统打造由大模型(LLM)驱动NPC游戏的技术设想
游戏·unity·大模型·知识库·rag·智能npc·npc记忆
xChive8 小时前
ECharts3D图表 | 3D柱状图和3D饼图实现思路
前端·3d·echarts
云飞云共享云桌面9 小时前
SolidWorks云电脑如何多人共享访问?
运维·服务器·人工智能·3d·自动化·云计算·电脑
cy_cy00211 小时前
巨型水幕与细腻全息,有何技术区别?
科技·3d·人机交互·交互·软件构建
V搜xhliang024612 小时前
目标检测YOLOv9、语义分割、3D点云PCL、SLAM、手眼标定
人工智能·深度学习·目标检测·计算机视觉·3d·知识图谱