我正在 Unity 中开发一个 VR 项目,该项目涉及在球体 GameObject 内渲染 360 度视频。最初,该设置使用自定义着色器运行良好,该着色器允许材质在游戏对象内部渲染,从而防止当相机在其中移动时材质变得透明。
将项目转换为通用渲染管道 (URP) 并相应更新所有材质后,除了用于显示 360 度视频的材质之外,一切都顺利过渡。这种特定材质现在导致渲染问题,我遇到以下错误:
360Material material was not upgraded. There's no upgrader to convert Custom/InsideOut Shader shader to selected pipeline
这也是着色器的代码:
Shader "Custom/InsideOut Shader" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader {
Tags { "RenderType" = "Opaque" }
Cull Off
CGPROGRAM
#pragma surface surf Lambert vertex:vert
sampler2D _MainTex;
struct Input {
float2 uv_MainTex;
float4 color : COLOR;
};
void vert(inout appdata_full v) {
v.normal.xyz = v.normal * -1;
}
void surf (Input IN, inout SurfaceOutput o) {
fixed3 result = tex2D(_MainTex, IN.uv_MainTex);
o.Albedo = result.rgb;
o.Alpha = 1;
}
ENDCG
}
Fallback "Diffuse"
}
迄今为止采取的步骤:
我怀疑问题在于着色器与URP的兼容性,但我不确定如何解决这个问题。任何有关如何调整 URP 着色器或在 URP 中的球体游戏对象内渲染 360 度视频的替代方法的见解或建议将不胜感激!
您有几个选择:
Univeral Render Pipeline / Unlit
并将“渲染面”设置为“背面”。然后您需要更新
任何在本材料上引用 _MainTex
的代码都指向 _BaseMap
。