【发布时间】:2018-06-05 01:29:32
【问题描述】:
我一直在尝试在具有翻转法线的 Sphere 内投影 360 度视频,以用于 Google Cardboard VR。视频工作正常,只是水平倒置,只有在屏幕上有一些文字时才明显。我在其前面包含了视频的屏幕截图和 UI.Text 元素以进行比较。
我试图通过 projectionMatrix 反转相机的视图,但它最终会出现在空白区域中。截图:
我想不出办法让视频项目以正确的方式制作。请帮忙!
【问题讨论】:
我一直在尝试在具有翻转法线的 Sphere 内投影 360 度视频,以用于 Google Cardboard VR。视频工作正常,只是水平倒置,只有在屏幕上有一些文字时才明显。我在其前面包含了视频的屏幕截图和 UI.Text 元素以进行比较。
我试图通过 projectionMatrix 反转相机的视图,但它最终会出现在空白区域中。截图:
我想不出办法让视频项目以正确的方式制作。请帮忙!
【问题讨论】:
这是一个着色器,可以正确显示内容而无需反转它,我已经使用 Unity 2018.1.1 对其进行了测试,因为我目前在我的项目中使用它:
Shader "InsideVisible" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader {
Tags { "RenderType"="Opaque" }
Cull front // ADDED BY BERNIE, TO FLIP THE SURFACES
LOD 100
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata_t {
float4 vertex : POSITION;
float2 texcoord : TEXCOORD0;
};
struct v2f {
float4 vertex : SV_POSITION;
half2 texcoord : TEXCOORD0;
};
sampler2D _MainTex;
float4 _MainTex_ST;
v2f vert (appdata_t v) {
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
// ADDED BY BERNIE:
v.texcoord.x = 1 - v.texcoord.x;
o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
return o;
}
fixed4 frag (v2f i) : SV_Target {
fixed4 col = tex2D(_MainTex, i.texcoord);
return col;
}
ENDCG
}
}
}
如果您需要有关着色器的更多信息,可以查看this tutorial。
【讨论】:
在球体上翻转法线是不够的,您还需要反转 UV 坐标的 U 部分(即更改所有值 U,使其为 1-U)。设置了一个球体,以便外部从右到左正确呈现文本。当您翻转法线时,从外面看,“右”仍然在右侧......这意味着从里面看它在 左侧。
您要么需要自己手动编辑 UV 坐标,要么从资源商店获取预制的倒置球体(IIRC 有两个免费提供)。
【讨论】: