0

我创建了一个光球并在球内添加了一个等距矩形着色器,然后我添加了图像。问题是(“图像上显示了虚线如何解决?)你可以看到虚线

图像有失真

我使用的着色器的源代码是

Shader "Unlit/rect"{
Properties {

    _MainTex (" Base (RGB)", 2D) = "gray" {}
}

SubShader{
    Pass {
        Tags {"RenderType"="Opaque" }
     cull front
        CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #pragma fragmentoption ARB_precision_hint_fastest
            #pragma glsl
            #pragma target 3.0

            #include "UnityCG.cginc"

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

            struct v2f
            {
                float4    pos : SV_POSITION;
                float3    normal : TEXCOORD0;
            };

            v2f vert (appdata v)
            {
                v2f o;
                o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
                o.normal = v.normal;
                return o;
            }

            sampler2D _MainTex;

            #define PI 3.141592653589793

            inline float2 RadialCoords(float3 a_coords)
            {
                float3 a_coords_n = normalize(a_coords);
                float lon = atan2(a_coords_n.z, a_coords_n.x);
                float lat = acos(a_coords_n.y);
                float2 sphereCoords = float2(lon, lat) * (1.0 / PI);
                return float2(sphereCoords.x * 0.5 + 0.5, 1 - sphereCoords.y);
            }

            float4 frag(v2f IN) : COLOR
            {
                float2 equiUV = RadialCoords(IN.normal);
                return tex2D(_MainTex, equiUV);
            }
        ENDCG
    }
}
FallBack "VertexLit"

}

4

2 回答 2

1

这可能是由几个原因造成的。我头顶的两个是:

  1. Project图像因 Unity 的导入设置而降级:在这种情况下,请在选项卡中选择图像,Inspector取消选中Generate Mip-Maps并确保底部的导入分辨率Inspector设置为高于实际图像分辨率(例如图像为 1480x1480,然后将导入设置设置为 2048x2048)

  2. 您在其上映射图像的球体网格存在 UV 问题。我的意思是,不同程序中的默认球体具有不同的 UV 贴图。Unity 的默认球体与 Blender 或 Maya 的球体不同。如果你在你的 3D 建模软件中测试了这个图像并且它在那里工作,那么导出那个球体并在 Unity 中为你的图像使用它。

于 2017-05-10T07:10:36.793 回答
1

此着色器可以很好地渲染图像,但图像会像镜像一样翻转。改变

float2 equiUV = RadialCoords(IN.normal); 

到:

float2 equiUV = RadialCoords(-IN.normal); 

把它倒过来。我怎么能反过来呢?

于 2018-06-06T14:59:40.247 回答