在 Unity 中将自定义着色器转换为 URP

问题描述 投票:0回答:1

我正在 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的兼容性,但我不确定如何解决这个问题。任何有关如何调整 URP 着色器或在 URP 中的球体游戏对象内渲染 360 度视频的替代方法的见解或建议将不胜感激!

unity-game-engine shader urp
1个回答
0
投票

您有几个选择:

  • 在搅拌机中创建一个球体网格,法线反转。
  • 创建一个材质,将着色器设置为
    Univeral Render Pipeline / Unlit
    并将“渲染面”设置为“背面”。然后您需要更新 任何在本材料上引用
    _MainTex
    的代码都指向
    _BaseMap
  • 使用未照亮的着色器图重新创建着色器。
© www.soinside.com 2019 - 2024. All rights reserved.