Shader实现城市建筑整体流光效果

本文详细介绍了一种在城市建筑模型上实现流光效果的方法,通过Pixshader计算像素点的世界坐标,利用比例值与流光位置差映射颜色,展示了Shader代码及动图效果。

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

城市建筑整体流光效果

在做可视化城市项目的时候,要实现城市整体流光效果,如下图参考:

在这里插入图片描述
实现功能参考图:

在这里插入图片描述

实现原理

  • Pixshader中计算每个像素点在世界坐标系中的位置
  • 像素点的世界坐标位置与地图范围的比例值
  • 像素点的世界坐标位置与地图范围的比例值与流光所在位置的比例值做减法,算出比值差值范围
  • 通过比值差值范围映射出流光宽度内的颜色值

材质实现

Shader "Custom/WorldFlow" {
    Properties {
        _FlowValue("value",Range(0,1)) = 1
    }
    SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 200
        
        Pass{
            CGPROGRAM

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


            struct v2f {
                float4 pos: SV_POSITION;
                float4 worldpos : TEXCOORD0;
            };

            v2f vert( appdata_img v ) 
            {
                v2f o;
                o.pos = UnityObjectToClipPos( v.vertex ) ;
                o.worldpos = mul(unity_ObjectToWorld, v.vertex);
    ![result](D:\UnityPro\SamrtCity\DOC\城市建筑整体流光效果\result.gif)            // o.wo![result](D:\UnityPro\SamrtCity\DOC\城市建筑整体流光效果\result.gif)rldpos.w = o.pos.z / o.pos.w;
                return o;
            }
            fixed _FlowValue;
            float4 frag( v2f o ) : COLOR
            {
                fixed currentValue = o.worldpos.x / 500;//地形的长度500
                fixed absValue = abs(currentValue - _FlowValue)/0.05;//0.05为流光的宽度,以500米的地形则为500 * 0.05 = 25宽度(对应在世界坐标系下),左右对半为50宽度
                fixed range =1 - saturate(absValue);//5米只有有的闪亮值

                return fixed4(1,1,1, 1.0) * range; // o.worldpos.xyz/255 是为了颜色输出。 
            }

            ENDCG
        }
    } 
    FallBack "Diffuse"
}

动图展示

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值