Unity3d Unity Cg着色器:着色器错误:分析第87行时内存不足(在金属上) “Unlight/SphereCalMap”中的着色器错误:在第87行(在金属上)进行分析时内存不足

Unity3d Unity Cg着色器:着色器错误:分析第87行时内存不足(在金属上) “Unlight/SphereCalMap”中的着色器错误:在第87行(在金属上)进行分析时内存不足,unity3d,hlsl,cg,Unity3d,Hlsl,Cg,大家好,我在Unity Cg着色器中遇到错误,我想寻求帮助。。。 我在下面有这个函数 float GetLatLongDist(float lat1, float long1, float lat2, float long2){ float R = 6371; float dLat = deg2rad(lat2-lat1); float dLon = deg2rad(long2-long1); float a = sin(dLat/2) * sin(dLa

大家好,我在Unity Cg着色器中遇到错误,我想寻求帮助。。。 我在下面有这个函数

float GetLatLongDist(float lat1, float long1, float lat2, float long2){
    float R = 6371;
    float dLat  = deg2rad(lat2-lat1);
    float dLon  = deg2rad(long2-long1);
    float a =   sin(dLat/2) * sin(dLat/2) + 
                cos(deg2rad(lat1)) * cos(deg2rad(lat2)) *
                sin(dLon/2) * sin(dLon/2);
    float c = 2 * atan2(sqrt(a),sqrt(1-a))
    float d = R * c;
    return d;
}
出于某种原因,它会导致错误的说法

Shader error in 'Unlit/SphericalMap': out of memory while parsing at line 87 (on metal)

Compiling Vertex program
Platform defines: UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR
我对着色器编程非常陌生,我不知道这段代码有什么问题。 有人能帮我吗?提前谢谢

整个着色器

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'


Shader "Unlit/SphericalMap"
{
    Properties
    {
        _MainTex("Texture", 2D) = "white" {}
        _Depth("Depth", Float) = 0
        _Lat("Latitude", Range(-90,90)) = 0
        _Long("Londitude", Range(-180,180)) = 0
        _Rad("Radius", Range(0.1,1)) = 1
    }
        SubShader
    {
        Tags { "RenderType" = "Transparent" "Queue"="Transparent" }
        LOD 100
        Cull Front
        
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            // make fog work
            #pragma multi_compile_fog

            #include "UnityCG.cginc"

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

            //Vertex Output
            struct v2f
            {
                float2 uv : TEXCOORD0;
                UNITY_FOG_COORDS(1)
                float4 vertex : SV_POSITION;
                float3 normal : TEXCOORD1;
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;

            float _Lat;
            float _Long;
            float _Rad;

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

                return o;
            }

            #define PI 3.141592653589793

            float deg2rad(float val){
                return val * PI / 180;
            }

            inline float2 RadialCoords(float3 a_coords)
            {
                float3 a_coords_n = normalize(a_coords);
                
                //Converting IN.normal to lat lon coordinate
                float lon = atan2(a_coords_n.z, a_coords_n.x);
                float lat = acos(a_coords_n.y);

                //Lat long to equirect UV
                float2 sphereCoords = float2(lon, lat) * (1.0 / PI);
                return float2(sphereCoords.x * 0.5 + 0.5, 1 - sphereCoords.y);

            }

            float GetLatLongDist(float lat1, float long1, float lat2, float long2){

                float R = 6371;
                float dLat  = deg2rad(lat2-lat1);
                float dLon  = deg2rad(long2-long1);
                float a =   sin(dLat/2) * sin(dLat/2) + 
                            cos(deg2rad(lat1)) * cos(deg2rad(lat2)) *
                            sin(dLon/2) * sin(dLon/2);
                float c = 2 * atan2(sqrt(a),sqrt(1-a))
                float d = R * c;
                return d;

            }

            
            inline float2 GetLatLong(float3 a_coords)
            {
                float3 a_coords_n = normalize(a_coords);
                
                //Converting IN.normal to lat lon coordinate
                float lon = atan2(a_coords_n.z, a_coords_n.x);
                float lat = acos(a_coords_n.y);
                return float2(lat,lon);
            }


            float4 frag(v2f IN, out float depth : DEPTH) : COLOR
            {
                float2 equiUV = RadialCoords(IN.normal);
                float2 latLong = GetLatLong(IN.normal);
                depth = 0;
                equiUV.x = 1 - equiUV.x;

                float4 col = tex2Dlod(_MainTex, float4(equiUV.x,equiUV.y,0,0));
                col.r += GetLatLongDist(latLong.x,latLong.y, _Lat,_Long);

                return col;
            }

            ENDCG
        }
    }
}



我知道是什么导致了这个问题,但我仍然不知道为什么

看起来当我使用名为
long1
的参数时,它开始导致此问题,尽管
lat1
很好。。。而且
long
很好。我不知道为什么。如果有人知道真正的原因,请告诉我

谢谢大家