首页 > 其他分享 >URP管线全解析

URP管线全解析

时间:2023-01-20 11:34:55浏览次数:55  
标签:内置 渲染 SRP Unity URP 解析 管线

未来,URP管线将取代内置渲染管线,成为Unity中的默认渲染管线。Unity历经几年的专注开发,URP技术现已十分可靠,可以投入生产。   本教程介绍了内置渲染管线到URP管线的迁移,使用具体案例结合具体代码,详细分析如何在具体URP管线的项目中做渲染,从光照到阴影(通过修改源码来支持多光源阴影),再到后处理。渲染案例分析之后又深入性能优化部分详细介绍SRP Batcher、GPU Instancing如何在具体项目中做优化以及它们是如何给项目带来性能提升的。   1. 可编程渲染管线概念 2. 探究SRP Batcher(生效,失效条件以及性能优化) 3. URP 和 内置渲染管线的光照 4. URP管线下的效果实现(使用Renderer Feature) 5. URP管线下的GPU Instancing(生效,失效条件以及和SRP Batcher的关系)   作者于洋,Unity技术专家、引擎组组长。曾就职于人人网、Kabam、竞技世界。从事游戏开发十余年,经历了从Flash到Unity的游戏开发过程,长期从事游戏渲染和性能优化相关工作,对PBR、云、雾、地形、URP管线等有深入研究,曾参与过《Legacy of Zeus》、《荒岛求生》、《mythwar puzzle》等游戏的渲染和性能优化工作,乐于分享渲染和优化的相关技术。  


  目录 1|可编程渲染管线简介 2|如何将Built-in管线升级为URP管线 3|探究SRP Batcher 4|URP和内置渲染管线的光照 5|URP管线下的效果实现 6|URP管线下使用GPU Instancing(附demo下载)  
  本篇转载自《URP管线全解析》的第1节。   1|可编程渲染管线简介   1.1 SRP是什么? Unity的渲染管线可以分为Built-in内置渲染管线和SRP可编程渲染管线,其中SRP可编程渲染管线又可分为HDRP和URP,如下图所示(图片来自网络): ​ SRP全称为Scriptable Render Pipeline(即可编程渲染管线/脚本化渲染管线),是Unity提供的新渲染系统,是可以在Unity通过C#脚本调用一系列API配置和执行渲染命令的方式来实现的渲染流程,SRP将这些命令传递给Unity底层图形体系结构,然后再将指令发送给图形API。   简单来说,就是我们可以用SRP的API来创建自定义的渲染管线,用来调整渲染流程或修改或增加功能。   它主要把渲染管线拆分成二层: 一层是比较底层的渲染API层,像OpenGL,D3D等相关的都封装起来; 另一层是渲染管线上层,上层代码使用C#来编写。在C#这层不需要关注底层在不同平台上渲染API的差别,也不需要关注具体如何做一个DrawCall。  
  1.2 HDRP是什么? 它的全称为High Definition Render Pipeline(高清晰度渲染管线),是Unity官方基于SRP提供的模板,更多是针对高端设备,如游戏主机和高端台式机,同时更关注于真实感图形和渲染。   该管线仅与以下平台兼容:
  • Windows和Windows Store,带有DirectX 11或DirectX 12和Shader Model 5.0
  • 现代游戏机(Sony PS4和Microsoft Xbox One)
  • 使用金属图形的MacOS(最低版本10.13)
  • 具有Vulkan的Linux和Windows平台
 
  1.3 URP是什么? 它的全称为Universal Render Pipeline(通用渲染管线),也是Unity官方基于SRP提供的模板,它的前身是LWRP(Lightweight RP即轻量级渲染管线),在2019.3版本开始改名为URP,它涵盖了范围广泛的不同平台,是针对跨平台开发而构建的,性能比内置管线要好,另外可以进行自定义、实现不同风格的渲染,通用渲染管线未来将成为在Unity中进行渲染的基础 。   平台范围:可以在Unity当前支持的任何平台上使用。   以上基本梳理了一些基本概念。  
  1.4 为什么诞生SRP? 内置渲染管线的缺陷 定制性差:Unity的内置渲染管线,渲染管线全部写在引擎的源码里。大家基本上不能改动,当然大部分开发者是不会去改源码,所以过去的管线对开发者来说,很难进行定制。想要有特殊订制的Unity引擎,需要高额跟Unity购买服务,Unity的工作人员会按照客户的需求去修改管线,为客户量身定做一款引擎。   研究过Unity源代码的同学应该会知道,其代码极其臃肿,效果效率无法做到最佳:内置渲染管线在一个渲染管线里面支持所有的平台,包括非常高端的PC平台,也包括非常低端的平台,很老的手机也要支持,所以代码越来越臃肿,很难做到使效率和效果都做到最佳。  
为了解决仅有一个默认渲染管线,造成的可配置型、可发现性、灵活性等问题。决定在C++端保留一个非常小的渲染内核,让C#端可以通过API暴露出更多的选择性,也就是说,Unity会提供一系列的C# API以及内置渲染管线的C#实现;这样一来,一方面可以保证C++端的代码都能严格通过各种白盒测试,另一方面C#端代码就可以在实际项目中调整。(摘自网络)
   
  以上就是《URP管线全解析》的第1节,此篇文章比较适合从事游戏开发的Unity客户端开发人员、希望提升渲染和性能优化能力的人以及对可编程渲染管线感兴趣的读者。   读完全篇后你会深入了解URP管线的具体案例实操以及性能优化相关分析;并掌握如何将内置管线提升为可编程渲染管线;如何在URP管线中做光照以及通过修改源码来支持多光源阴影及如何使用SRP Batcher以及 GPU Instancing等技能。

标签:内置,渲染,SRP,Unity,URP,解析,管线
From: https://www.cnblogs.com/uwatech/p/17062594.html

相关文章

  • js解析Json字符串的方法
    要把一个xml字符串转(“1,2,3,4,5,6,7,8,1,2”)换成数组的形式,每个值都应该是number类型的,想当然的就用了split方法,结果。。。问题来了,服务器要求数组的值是数字,而split是字......
  • 将错就错:借助 YARP 转发 DNS 错乱解析造成的错误请求
    最近园子在部署IPv6时遇到了一个非常奇怪的dns解析问题,当给非www二级域名(比如q.cnblogs.com)添加AAAA(IPv6)记录后,部分用户访问q.cnblogs.com时会被错误地解析为......
  • 如何提升企业组网管理能力?贝锐蒲公英监控告警与管理审计能力解析
    在企业协同办公需求日益增多的今天,组网已经成为了一种企业常用的技术方案,通过专业的企业网络解决方案,实现异地互访,数据互通,进而实现总部-分部、总部-一线门店/厂区的高......
  • Unity URP Shader之如何获取屏幕纹理
    UnityURP获取屏幕纹理方法不同于传统管线,GrabPass已经失效,而是已经提供了这张纹理,如下图: 这张纹理是在渲染完所有Opaque物体之后提供了,所以shader中要获取这张纹......
  • webFlux routers 嵌套路由解析规则
    有下列路由publicRouterFunction<ServerResponse>doctorRoutes(DoctorHandlerhandler){returnRouterFunctions.route().path("/doctors"......
  • 使用 Burpsuite 测试的常用操作(一)
    大家好啊,我是大田。今天分享一下Burpsuite在工作中常用操作,本文先说说其中两个操作。一、了解一下Burpsuite做什么1、Burpsuite是一个黑客工具、安全测试工具、半......
  • 坑!你不知道的JSON解析
    背景最近在对接国内的外卖平台,代码啥的正常开发、测试、上线都没发现什么异常的。突然,最近有运维反馈说漏了单据,一开始我以为是外卖平台那边接口异常,拉单延迟导致的,就没怎......
  • 广工Anyview【DC02PE97】解析
    前言由于是出成绩后一段时间写的,已经有点遗忘当时遇到的情况,同时该代码不是最优解,需要精简代码的同学可以想想办法解决奇偶长度和有时候头结点不为空的问题,这样就可以极大......
  • 《ClickHouse原理解析与应用实践》关于P239[分片规则]错误的地方
     《ClickHouse原理解析与应用实践》关于P239[分片规则]错误的地方 快过年了,坚守到最后一天。刚好开发有新的想法,需要用到ReplacingMergeTree引擎实现去重或删除数据......
  • 微信小程序 wx.chooseLocation定位获取地址,并解析省市区
      1、申请开通 操作:小程序后台管理-开发-开发管理-接口设置--申请开通 2、调用wx.chooseLocation(Objectobject)    wx.chooseLocation({s......