《Unity的URP项目中使用自定义shader导致材质消失的解决办法》

这篇具有很好参考价值的文章主要介绍了《Unity的URP项目中使用自定义shader导致材质消失的解决办法》。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        在Unity中使用URP时,会有需求使用自定义的一些shader来实现特殊效果,这时如果我们直接使用新建材质与无光照着色器(Unlit shader),可能会发生一个对于新手而言意料之外的问题——物体!消失了!

《Unity的URP项目中使用自定义shader导致材质消失的解决办法》

解决办法:

        打开你正在使用的的通用渲染器(Universal Renderer Data),找到渲染(Rendering)->深度引动模式(Depth Priming Mode),将其从默认的“自动”修改为“已禁用”。

《Unity的URP项目中使用自定义shader导致材质消失的解决办法》


如果你的问题解决了并且想知道为什么的话,请接着往下阅读。

        什么是深度引动模式?深度引动技术是Unity2021.2中URP管线的新增功能。在Unity的文档中是这样解释的:“The feature uses a depth prepass to determine which pixel shader invocations Unity can skip”,通过使用一种用于预处理深度信息的Pass来帮助Unity跳过对部分片元的渲染。而在使用Unity2021默认的URP项目时,其自动生成的通用渲染器文件(Universal Renderer Data)会默认开启这一项技术,而这也是问题的根源。

        为什么深度引动模式会导致我们的物体消失?首先必须澄清的是,这并不是Unity的什么Bug,而是很典型的新手效应事件,对不熟悉技术的使用导致了意料之外的错误。深度引动模式需要使用一种LightMode为DepthOnly的特殊Pass来生成场景中不透明物体的深度图,而我们所创建的无光照着色器是不具有该类型Pass的(因为压根就没写这东西),这就导致在开启了该技术的渲染流程中,这些使用了“不具备DepthOnlyPass的shader”的物体无法生成深度信息从而被Unity过早剔除无法进行后续的渲染,造成了物体的消失。

        因此若想在URP项目中同时使用深度引动技术与自定义shader,则务必注意需要在自定义shader中向Unity声明DepthOnlyPass用于执行深度引导。幸运的是Unity在Universal Render Pipeline内置的Unlit shader中已经实现了该Pass,在自定义shader中使用以下语句即可直接使用。

UsePass "Universal Render Pipeline/Unlit/DepthOnly

对比使用前后:

《Unity的URP项目中使用自定义shader导致材质消失的解决办法》

       左侧未使用DepthOnlyPass,右侧则添加了DepthOnlyPass,两者均在前向渲染的情况下开启了深度引动模式。可见在使用了DepthOnlyPass的情况下,Unity通过DepthPrepass记录了我们Sphere的深度信息,从而保证了后续DrawOpaqueObjects的正确执行。

Tips:

  • 深度引动模式只工作在前向渲染的情况下,因此在通用渲染器中为你的项目选择延迟渲染路径的话就能绕过这个问题。
  • 深度引动模式只针对不透明物体进行优化,因此如果你将物体的渲染队列设置为“透明”,那么即使不添加DepthOnlyPass也能正常渲染,不过代价是什么呢?
  • 更多参考资料可以查看官方文档,以及Unity工程师NicoLeyman在论坛中的一些回答。

"The more you know, the more you know you don't know."

——Daniel Kahneman文章来源地址https://www.toymoban.com/news/detail-456031.html

到了这里,关于《Unity的URP项目中使用自定义shader导致材质消失的解决办法》的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity极坐标Shader特效,以及使用Instanced Property实现相同材质不同参数

    先看看效果 Unity极坐标Shader特效 有时候我们需要在场景中摆放一些热点,用户点击之后出现互动,当然实现这个功能的方法有很多,作为一名程序员,当然是要用最简单的实现。用shader程序化实现它。 啥是极坐标 极坐标,又称极座标系。它是一种表示平面直角坐标系中点的

    2024年02月09日
    浏览(29)
  • Unity中Shader URP 简介

    在这篇文章中,我们主要介绍一下Unity中的URP(通用渲染管线)是什么 Unity帮助文档 Windows and UWP Mac and IOS Android Xbox One PlayStation4 Nintendo Switch WebGL All current VR platforms 在Unity2018以前,Unity使用的一直都是Build-in Render Pipeline(内置渲染管线) 在早期使用内置渲染管线时,Unity为了适配

    2024年01月16日
    浏览(37)
  • Unity Shader从内置渲染管线迁移到URP

    Unity 在URP中将shader更新为了HLSL语言,使用build-in shader 无法直接在URP中使用 这里讲一下关于shader的更新方法 参考 From Built-in to URP Tags 添加 \\\"RenderPipeline\\\" = \\\"UniversalPipeline\\\" CGPROGRAM ENDCG 改变为 HLSLPROGRAM ENDHLSL #include \\\"UnityCG.cginc\\\" 更改为 #include \\\"Packages/com.unity.render-pipelines.universal/Sh

    2024年02月05日
    浏览(31)
  • Unity URP Shader(HLSL)踩坑日记(一)

    最近开始转TA,刚开始学习,资料比较杂乱,其中遇到的问题和一些计算方式,记录一下,后续会一直完善补充。 注意此时Properties中的属性,如果要开启SRP合批,需要放到CBUFFER代码块中。 应用阶段准备的数据---- 顶点着色处理数据(返回值为处理后的数据)---- ------ 片元着色器

    2024年01月17日
    浏览(36)
  • Unity Spine 3.8 (URP) 踩坑(Shader报错修改)

    今天搜索spine优化,看到一篇文章项目导入多个Spine动画 合批 降低DrawCall -- UWA问答 | 游戏开发者互动问答社区 | 侑虎科技 提供了新思路,打算尝试一下URP。但美术使用的spine版本是3.8,项目用的Unity2021.3.11f1c2,直接导入spine URP包,shader报错:half4 不能转成 SurfaceData2D;遂改下

    2024年02月12日
    浏览(32)
  • Unity URP Shader “Redefinition of _Time“ error

    强烈建议先尝试阅读本文之后自行解决:https://zhuanlan.zhihu.com/p/360566324 我这里记录一下我的思路: 首先检查URP升级是否正确,主要看Asset是否设置,ShaderGraph表现是否正常 尝试排除是否是未定义宏导致的问题,主要是对比ShaderGraph自动生成的代码 确认自己的代码是否使用了

    2024年02月15日
    浏览(28)
  • unity URP 利用particle system制作简单的shader交互

    首先这里制作了一个简单交互,使用shader grapgh,根据计算距离和变化数值的差实现交互后的扩散,同时计算消散遮罩让它逐渐谈去。 将他赋予材质物体,根据脚本传入位置和逐渐变化的大小后,呈现这样的效果。 但是,shader graph这样的工具,在做这种效果非常快的同时,也

    2024年02月07日
    浏览(31)
  • 【Unity Shader】从入门到着魔(1)基本概念:什么是网格?材质?Shader?

    如上图,模型的三角形面就叫做网格(Mesh),网格的本质是一堆顶点数据的规则排序,在Unity和UE中由三角形表示,Maya等DCC软件(Digital Content Creation)中则通常由四边形表示(俩个三角形刚好组成一个四边形)。 在Unity中我们新建一个Cube,

    2024年02月09日
    浏览(30)
  • Unity中Shader的Standard材质解析(二)

    Unity中Shader的Standard材质解析(二),对 Standard 的 PBR 的 GI 进行解析 Unity中Shader的Standard材质解析(一) #include “CGInclude/MyPhysicallyBasedRendering.cginc” 整理 LightingStandard_GI1(o, giInput, gi); 中的数据 Unity_GlossyEnvironmentData表示GI中的反射准备数据 准备好反射数据后,计算得出GI中的

    2024年02月04日
    浏览(29)
  • unity build-in 渲染管线升级urp渲染 shader篇

            由于工作原因需要对项目进行升级,从build-in渲染管线升级到urp渲染管线,我自己对应的unity版本是2018.版本升级到2021.3.2版本,由于最近几年unity版本升级比较快,个体版本差异有所不同,如遇与版本不一致问题敬请谅解。以下是根据官网等系列网站整理的内容

    2023年04月16日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包