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渲染管线

    教程地址: 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日
    浏览(46)
  • 使用团结引擎开发Unity 3D射击游戏

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

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

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

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

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

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

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

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

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

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

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

    2024年02月14日
    浏览(88)
  • Unity和UE4两大游戏引擎,你该如何选择?

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

    2023年04月08日
    浏览(73)
  • 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日
    浏览(63)
  • Unity 开发人员转CGE(castle Game engine)城堡游戏引擎指导手册

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

    2024年02月07日
    浏览(79)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包