UnityShader获得物体顶点到摄像机距离

1.distance函数

      距离=distance(顶点,相机位置)

2.获取顶点位置

      o.WordPos = mul(unity_ObjectToWorld, v.vertex).xyz;

3.获取相机位置

     unityShader内置:_WorldSpaceCameraPos.xyz

4.获取物体顶点到相机距离

     float DistanceRamp = distance(i.WordPos,_WorldSpaceCameraPos.xyz);

5.完整代码

Shader "Test"
{
    Properties
    {
        
    }
    SubShader
    {
        Tags {"RenderType" = "Opaque"  }
        LOD 100

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
                //定义顶点世界变量
                float3 WordPos:TEXCOORD1;
            };


            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                顶点坐标 物体转世界
                o.WordPos = mul(unity_ObjectToWorld, v.vertex).xyz;
                return o;
            }

            fixed4 frag(v2f i) : SV_Target
            {
                获得物体顶点到摄像机距离
                float DistanceRamp = distance(i.WordPos,_WorldSpaceCameraPos.xyz);
                return DistanceRamp*0.1;
            }
            ENDCG
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_26540577/article/details/133907701