Unity——URP & HDRP 渲染模式学习笔记

目录

HDRP和UPR是两种完全不同的渲染模式,不能混用,只能选择其中一种,最好在项目刚开始的时候就确定好。否则后期所有模型的材质都要改变非常麻烦。

修改渲染模式方法:

HDRP, URP, BRP区别

备注


HDRP和UPR是两种完全不同的渲染模式,不能混用,只能选择其中一种,最好在项目刚开始的时候就确定好。否则后期所有模型的材质都要改变非常麻烦。

修改渲染模式方法:

project settins:
1. graphics->Scriptable render pipeline settings 要修改,假如从hdrp改为upr那么在asset里首先创建一个upr 渲染assets(with universal renderer即可),然后再添加进去。

2. player->webgl格式 里other setting gamma\linear要修改,linear对应hdrp,gamma 对应 urp,hdrp不能使用gamma;publishing settings->decompression fallback 使用render streaming 方便在浏览器查看时要勾选

3. Quality里render pipleline assets 需要修改,这个过程时间比较长,修改渲染管线的方式好像主要就是这个。


4. 创建材质时,不同的渲染模式要选择不同的shader,hdrp只能选择hdrp/lit的那个,普通的选择standard即可

HDRP, URP, BRP区别

在创建Unity项目时,你可以选择使用不同的渲染管线,如HDRP(High Definition Render Pipeline)、URP(Universal Render Pipeline)或普通项目(通常指的是使用内置渲染管线)。

这些渲染管线之间存在一些区别,主要涉及到渲染质量、性能、功能和兼容性等方面。以下是它们的一些主要区别:

HDRP(High Definition Render Pipeline):

渲染质量: HDRP专注于提供高质量的渲染效果,包括逼真的光照、阴影、反射和全局照明等,适用于需要高度逼真视觉效果的项目。
功能: HDRP提供了更多高级的图形特效和渲染功能,如体积雾、透明度抗锯齿、透射、真实材质等。
性能: 由于提供了更高质量的渲染效果,HDRP在性能方面可能相对较高,需要更强大的硬件支持。
URP(Universal Render Pipeline):

渲染质量: URP平衡了渲染质量和性能,适用于中等和较低性能设备,并提供了一定程度的图形效果。
功能: URP提供了一些常用的渲染特效,同时也具有一定的可定制性,开发者可以根据项目需求进行调整。
性能: URP相对于HDRP来说在性能方面更轻量级,适用于移动设备和性能有限的平台。
普通项目(Built-in Render Pipeline):

渲染质量: 内置渲染管线提供了基本的渲染功能,适用于简单的项目或者对渲染质量要求不高的项目。
功能: 内置渲染管线的功能相对较少,但在一些简单的项目中可能足够使用。
性能: 内置渲染管线通常较轻量级,适用于性能较低的设备和平台。
选择合适的渲染管线取决于你的项目需求、目标平台以及你愿意在渲染质量和性能之间进行的权衡。如果你希望项目具有逼真的视觉效果并愿意在性能上付出一些代价,可以考虑使用HDRP。如果你需要在不同平台上取得良好的性能表现,可以考虑使用URP。对于较简单的项目或者对性能要求较低的项目,内置渲染管线也是一个选择。

备注

修改custom Evenet System后

要安装input system package

并且在project setting-> player->

允许enter unsafe mode

Custom Event System 脚本内容如下:
 

using UnityEngine.EventSystems;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.LowLevel;

public class CustomEventSystem : EventSystem
{
    protected override void Awake()
    {
        base.Awake();
        unsafe
        {
            InputSystem.onDeviceCommand += InputSystemOnDeviceCommand;
        }
    }

    private static unsafe long? InputSystemOnDeviceCommand(InputDevice device, InputDeviceCommand* command)
    {
        if (command->type != QueryCanRunInBackground.Type)
        {
            // return null is skip this evaluation
            return null;
        }

        ((QueryCanRunInBackground*)command)->canRunInBackground = true;
        return InputDeviceCommand.GenericSuccess;
    }

    protected override void OnApplicationFocus(bool hasFocus)
    {
        //Do not change focus flag on eventsystem
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_46149667/article/details/132411734