Unity Shdaer 前向渲染与延时渲染

这篇具有很好参考价值的文章主要介绍了Unity Shdaer 前向渲染与延时渲染。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.前向渲染Forward

1.1 渲染设置

1.2 两个pass块

1.3 Unity如何判断光源类型

1.4 性能影响

2.延时渲染Deffered

2.1 原理

2.2 两部分Shdaer

2.3 性能影响

2.4 不足


Unity中的渲染路径有多种,可以在Editor/ProjectSetting中的Graphics中进行调整。当取消掉Use Defaults时,可以在Rendering Path中进行切换,这里是控制整个项目的渲染路径,其中主要有Forward和Deffered两种,也就是前向渲染和延时渲染

1.前向渲染Forward

1.1 渲染设置

摄像机渲染路径的设置:摄像机也能改变自己的渲染路径,可以直接使用项目中的,也能自己设置单独。
Shader中渲染路径的设置:在Pass块中的Tags中的LightMode设置为ForwardBase或者ForwardAdd
具体为Tags{ "LightMode" = "ForwardBase}和Tags{"LightMode" = "ForwardAdd"}
设置之后同时要添加#pragma multi_compile_fwdbase和#pragma multi_compile_fwdadd

1.2 两个pass块

前向渲染通常使用两个Pass块,一个是ForwardBase,用于计算最重要的光照(一般默认为创建项目时自带的直线光照)以及顶点光照和球谐光照
另一个Pass块是ForwardAdd,用于计算逐像素光源。这个Pass块必须开启Blend混合,如果不开启的话,颜色缓冲区的颜色值就会被覆盖了,这样只会呈现最后一个灯光的ForwardAddPass块(这里可以试一下将Blend One One注释掉,然后再Frame Debug中逐帧查看渲染顺序)

1.3 Unity如何判断光源类型

Unity如何判断哪个光源是逐像素,还是逐顶点,还是球谐的。再光源的面板中可以再RenderMode中看到。它有三个选项,分别是Auto,Important,Not Important。如果某个光源是Important,那么它一定是逐像素的。如果Important的数量大于项目设置的最大逐像素光源数,它仍然会被按照逐像素光源处理。如果是Not Important,它一定是逐顶点的或者球谐的。

如果是Auto的话,那么要看项目设置中的最大逐像素光源数,这个可以在Editor/Project Settings的Quality中的Pixel Light Count中设置,一般默认是4(这里也假设是4)。如果灯光的数量小于4,且都是Auto,那么它们一定会在ForwardAdd中进行计算,也就是会被处理为逐像素。如果Auto的数量大于4,假如有5个,那么其中一个就会被按照顶点光照计算,也就是走ForwardBase的Pass块。那么超过4个的话,Unity如何确定哪些光源会被处理为逐像素或者顶点呢?这里说的是光源对物体的影响程度,包括远近,到物体的强度以及颜色等。但具体如何计算,官网也没给出详细的说明

1.4 性能影响

其中,ForwardBase的Pass块会先被调用,然后是调用ForwardAdd的Pass块,且有几个逐像素光源对这个物体起作用,就会调用几次ForwardAdd的Pass块,如果有多个物体m,n个逐像素光源,且这n个光源对m个物体都起作用,那么就会渲染m*n次,如果项目中m和n过多,项目会非常卡。

2.延时渲染Deffered

2.1 原理

为了解决当逐像素光源过多使用前向渲染的性能问题,延时渲染被重新提了出来。(据说延时渲染提出的要早,不知真假)它的原理很简单。与前向渲染不同,延时渲染在渲染过程中开始并不会直接计算光照,而是会按照正常流程将物体呈现到屏幕像素中去(这里并不会呈现),同时将与光照有关的信息(比如漫反射颜色,高光颜色,法线,切线,深度等)存入G-Buffer缓冲区。这些信息是关于最终呈现到屏幕中的像素的,已经脱离了原来的物体信息了。当存入之后才会进行一系列与光照反射阴影等过程的具体计算,这些计算是根据屏幕上的像素点的信息进行计算的。

2.2 两部分Shdaer

第一部分的Shader是正常的shdaer编写,它应该与材质相关联。但与前向渲染的shdaer不同,在这个shader中,逐片元函数返回的是4个4维向量,一般用一个结构体存储。也就是存储的漫反射与遮罩,高光反射与平滑度,法线,自发光lightmap反射等信息。
第二部分的Shdaer是作为模板来具体计算光照的,它是可选的(Unity有默认模板),它会根据第一部分Shdaer的G-Buffer值来具体计算光照。它在Editor/Project Settings/Graphics中的Deferred中设置的,它可以是Built-in shader,也可以是自己编写的Custom shdaer

2.3 性能影响

宏观上来看(排除反射阴影等造成的影响),如果场景中有m个物体,那么它会先调用m次drawcall将这些物体(无光照计算)呈现到屏幕像素中,同时计算这些像素的光照信息到缓冲区。之后根据这些信息与场景中的n个光源(对m个物体都产生了影响)进行光照计算(其实是根据像素的信息进行计算的)。一共是m + n。也就是与物体和光源数量分别成正比

微观上看,由于只与像素有关,那么它只跟屏幕分辨率有关,像素固定,那么只与光源数量成正比(一台设备)。

2.4 不足

它并不能支持半透明物体的渲染,如果出现半透明物体的渲染,它会另外在ForwardBase中去渲染,具体可以在Frame Debug中查看
它需要非常多的内存来存储G-Buffer
当然它的效果不如前向渲染细致
它不能实现基于硬件的抗锯齿效果文章来源地址https://www.toymoban.com/news/detail-805663.html

到了这里,关于Unity Shdaer 前向渲染与延时渲染的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Unity-3DRPG游戏 学习笔记(1)--使用URP渲染管线

    Unity-3DRPG游戏 学习笔记(1)--使用URP渲染管线

    教程地址: Unity2020 3DRPG游戏开发教程|Core核心功能01:Create Project 创建项目导入素材|Unity中文课堂_哔哩哔哩_bilibili 创建URP通用渲染管线(2021版本) 1. 打开:Windows--Package Manager--左上角下拉选择Unity Registry--搜索Universal RP--Install 2. Project窗口--Assets--右键Create--Rendering--URP Asstes

    2024年02月11日
    浏览(9)
  • 使用团结引擎开发Unity 3D射击游戏

    使用团结引擎开发Unity 3D射击游戏

           本案例是初级案例,意在引导想使用unity的初级开发者能较快的入门,体验unity开发的方便性和简易性能。       本次我们将使用团结引擎进行开发,帮助想体验团结引擎的入门开发者进行较快的环境熟悉。      本游戏是一个俯视角度的射击游戏。主角始终位于屏幕

    2024年01月19日
    浏览(39)
  • Unity、UE、Cocos游戏开发引擎的区别

    Unity、Unreal Engine(UE)和Cocos引擎是三个常用的游戏开发引擎,它们在功能和特性上有一些区别。以下是它们之间的主要区别: 编程语言:Unity使用C#作为主要的编程语言,开发者可以使用C#脚本进行游戏逻辑编写。Unreal Engine主要使用C++作为编程语言,但也支持蓝图系统,允许

    2024年02月22日
    浏览(39)
  • Unity vs Godot :哪个游戏引擎更适合你?

    Unity vs Godot :哪个游戏引擎更适合你?

    游戏引擎的选择对开发过程和最终产品质量有着重大影响。近年来,Godot和Unity这两款引擎受到广泛关注。本文将从多个维度对两者进行比较,以期为开发者提供正确的选择建议。 Godot和Unity都有各自的优势,没有绝对的好坏之分。Godot开源免费,上手简单,更适合2D和小型游戏

    2024年01月23日
    浏览(43)
  • 30分钟了解所有引擎组件,132个Unity 游戏引擎组件速通!【收藏 == 学会】

    30分钟了解所有引擎组件,132个Unity 游戏引擎组件速通!【收藏 == 学会】

    🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN 🙉 🎄 学习专栏推荐:Unity系统学习专栏 🌲 游戏制作专栏推荐:游戏制作 🌲Unity实战100例专栏推荐:Unity 实战100例 教程 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长

    2024年02月11日
    浏览(53)
  • Unity Physics2D 2d物理引擎游戏 笔记

    Unity Physics2D 2d物理引擎游戏 笔记

    2d 材质 里面可以设置 摩擦力 和 弹力 Simulated:是否在当前的物理环境中模拟,取消勾选该框类似于Disable Rigidbody,但使用这个参数更加高效,因为Disable会销毁内部产生的GameObject,而取消勾选Simulated只是禁用。 Kinematic 动力学刚体 动力学刚体不受重力和力的影响,而受用户的

    2023年04月24日
    浏览(37)
  • Unity和UE4两大游戏引擎,你该如何选择?

    Unity和UE4两大游戏引擎,你该如何选择?

    目录 游戏引擎 2 —— 难易区别 编程语言 3 —— 游戏产品 UE4制作的游戏产品  Unity制作的游戏产品  产品类型 5 —— 资源商店 6 —— 人才需求 平均薪资 总结      Unity和UE4都是游戏引擎,所谓游戏引擎就是集成了复杂功能的游戏开发软件,他们帮我们实现了复杂的底层逻

    2023年04月08日
    浏览(43)
  • GODOT游戏引擎简介,包含与unity性能对比测试,以及选型建议

    GODOT游戏引擎简介,包含与unity性能对比测试,以及选型建议

    GODOT,是一个免费开源的3D引擎。本文以unity作对比,简述两者区别和选型建议。由于是很久以前写的ppt,技术原因视频和部分章节丢失了。建议当做业务参考。 GODOT目前为止遇到3个比较重大的机遇,第一个是oprea的合作奖,第二个是用支持c#换来的微软的投资,第三个是虚幻

    2024年02月14日
    浏览(93)
  • Unity3D学习记录01:URP渲染管线以及3D游戏场景设置

    Unity3D学习记录01:URP渲染管线以及3D游戏场景设置

    以下内容所使用的版本均为Unity2022.3 先在 Window-Package Manager-Unity Registry 里面搜索添加Universal RP   Unity中,创建渲染管线的方式为Asset文件夹下右键 Create-Readering-URP Asset(with Universal Asset) 会创建以下两个Pipeline:  接着在图中的设置里添加这两个渲染管线(Project Setting在Edit窗口下

    2024年02月08日
    浏览(43)
  • Unity 开发人员转CGE(castle Game engine)城堡游戏引擎指导手册

    Unity 开发人员转CGE(castle Game engine)城堡游戏引擎指导手册

    一、简介 2. Unity相当于什么GameObject? 3. 如何设计一个由多种资产、生物等组成的关卡? 4. 在哪里放置特定角色的代码(例如生物、物品)?Unity 中“向 GameObject 添加 MonoBehaviour”相当于什么? 5.Unity子目录相当于什么Assets? 6. 支持哪些模型格式? 7. 支持FBX模型格式吗? 8.

    2024年02月07日
    浏览(16)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包