You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让标准管线的自定义纹理重复Shader适配URP管线?

适配URP管线的RepeatShader修改方案

你的自定义Shader在URP中显示粉色,是因为标准管线的Surface Shader依赖内置渲染管线的光照实现,URP不兼容这套逻辑。以下是修改后的完整URP兼容版本:

Shader "Custom/URP_RepeatShader" {
    Properties{
        _Color("Main Color", Color) = (1,1,1,1)
        _MainTex("Base (RGB)", 2D) = "white" {}
        _Scale("Texture Scale", Float) = 1.0
    }
    SubShader{
        Tags{ 
            "RenderType" = "Opaque"
            "RenderPipeline" = "UniversalPipeline" // 标记适配URP
        }
        LOD 200

        HLSLPROGRAM
        #pragma surface surf Standard fullforwardshadows // 使用URP支持的Standard光照模型
        #pragma target 3.0

        #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"

        sampler2D _MainTex;
        fixed4 _Color;
        float _Scale;

        struct Input {
            float3 worldNormal;
            float3 worldPos;
        };

        void surf(Input IN, inout SurfaceOutputStandard o) {
            float2 UV;
            fixed4 c;

            if (abs(IN.worldNormal.x) > 0.5) {
                UV = IN.worldPos.yz; // 侧面UV
                c = tex2D(_MainTex, UV * _Scale);
            }
            else if (abs(IN.worldNormal.z) > 0.5) {
                UV = IN.worldPos.xy; // 正面UV
                c = tex2D(_MainTex, UV * _Scale);
            }
            else {
                UV = IN.worldPos.xz; // 顶部UV
                c = tex2D(_MainTex, UV * _Scale);
            }

            o.Albedo = c.rgb * _Color;
            o.Alpha = c.a * _Color.a;
        }
        ENDHLSL
    }
    FallBack "Hidden/Universal Render Pipeline/FallbackError"
}

关键修改点说明:

  • 添加URP管线标记:在SubShader的Tags中加入"RenderPipeline" = "UniversalPipeline",明确告知Unity该Shader适配URP。
  • 替换光照模型与编译指令:
    • 将#pragma surface surf Lambert改为#pragma surface surf Standard fullforwardshadows,Standard是URP支持的PBR光照模型,fullforwardshadows启用完整前向阴影支持。
    • 把CGPROGRAM/ENDCG替换为HLSLPROGRAM/ENDHLSL,URP推荐使用HLSL语法规范。
  • 引入URP核心库:添加#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl",获取URP的内置函数与定义。
  • 更新SurfaceOutput结构:将SurfaceOutput改为SurfaceOutputStandard,这是URP中用于PBR材质的标准输出结构。
  • 修正Fallback:替换原Legacy管线的Fallback为URP专用的"Hidden/Universal Render Pipeline/FallbackError",避免加载不兼容的降级Shader。
  • 补充Alpha通道处理:添加o.Alpha = c.a * _Color.a,保证材质透明通道正常工作。

内容的提问来源于stack exchange,提问作者erenjeager

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 02:15:34