【问题标题】:fix unity 360photo in sphere在球体中修复统一 360photo
【发布时间】:2021-09-26 18:56:52
【问题描述】:

我想将我的 360 度全景照片固定在一个球体中。如您所见,当我将照片放入球体时,它看起来已损坏。另外我想在我的球体中保持透明度(见窗口。)所以也许着色器应该包括透明度,有人知道如何编码吗?

my sphere

【问题讨论】:

  • 看不出有什么问题 :P 开玩笑,我认为这是由于 Unity 球体与用于创建纹理/视频的任何东西之间的 UV 映射存在差异。在 Unity 中实现视频文件的透明度有点棘手。对于图片,是的,您需要一个支持它的着色器
  • 你好!谢谢你的答复。那么代码应该是?

标签: unity3d shader virtual-reality 360


【解决方案1】:
Shader "Custom/Equirectangular" {
Properties {
    _Color ("Main Color", Color) = (1,1,1,1)
    _MainTex ("Diffuse (RGB) Alpha (A)", 2D) = "gray" {}
}

SubShader{
    Pass {
        Tags {"LightMode" = "Always"}
        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 = UnityObjectToClipPos(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(1 - (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"

}

【讨论】:

    【解决方案2】:
    Shader "Custom/Equirectangular" {
    Properties {
        _Color ("Main Color", Color) = (1,1,1,1)
        _MainTex ("Diffuse (RGB) Alpha (A)", 2D) = "gray" {}
    }
    
    SubShader{
        Pass {
            Tags {"LightMode" = "Always" "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
            ZWrite Off
            Blend SrcAlpha OneMinusSrcAlpha
            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 = UnityObjectToClipPos(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(1 - (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"
    

    }

    【讨论】:

      最近更新 更多