当前位置:网站首页>8个问题轻松掌握Unity前向渲染
8个问题轻松掌握Unity前向渲染
2022-08-10 05:37:00 【优梦创客】
版权申明:
- 本文为“优梦创客”原创文章,您可以自由转载,但必须加入完整的版权声明
- 更多学习资源请加QQ:1517069595获取(企业级性能优化/热更新/Shader特效/服务器/商业项目实战/每周直播/一对一指导)
- 本文视频链接 https://www.bilibili.com/video/BV1mr4y1P7ZV
引言
今天想给大家分享的主题是8个问题轻松掌握Unity前向渲染。网上的很多资料或多或少讲到了前向渲染的用法,却没有讲到根本的问题:前向渲染路径是用来干什么的?它是用来解决什么样的图形问题?Unity为什么要在引擎中集成前向渲染路径这种光照渲染的解决方案?
这里做下自问自答,前向渲染路径是Unity为了解决多光源条件下,正确表现多光源光照效果而设置的一种解决方案。大家都知道多光源环境效果是很复杂的,首先要考虑多种不同的光源类型,还需要考虑诸如光源数量,不同光源效果的叠加,以及由于这些光源效果的叠加,所产生的阴影效果的叠加,最后还需要考虑进行全局光照的烘培和全局实时光照的渲染,需要让逐色器/渲染程序适配前向渲染引擎,设计来解决多光源环境下前向渲染的解决方案。
下面我就以技术问答的形式,为大家详解前向渲染的前世今生。只有我们理解了这种渲染路径的设计思路,才能把前向渲染正确地运用在项目之中;相反的,对于程序同学,如果不能正确使用前向渲染,对于程序的性能所造成的损失是无法估量的。对于技术美术同学,如果不能正确考虑光照的各种因素,正确地开发基于前向渲染的Shader,也不能称之为合格的技术美术。
今天的课程同时适用于,有一定Unity基础想进阶游戏开发主程的同学,也适用于想要从Unity基础的美术开发进阶游戏技术美术的同学。
8个问题轻松掌握Unity前向渲染
主题:
什么是前向渲染路径
如何正确理解和运用前向渲染路径
如何在前向渲染路径下实现光照效果
1。 场景内有多盏灯光,应该如何渲染每盏灯光对物体的影响?
大家可以假设你要去做一个游戏引擎,这个引擎需要考虑场景内多盏灯光对一个物体照射的情况,每盏灯光都会对这个物体造成影响,你会怎样设置引擎的算法呢?
前向渲染的解决方案是:把每个物体用每盏灯光渲染一边,再将渲染结果混合起来
2。 Unity有几种光照渲染模式?
首先给大家看个图,大家觉得图上左右两边哪个更细腻呢?实际上右边的光照效果更细腻些。在蓝色灯光和红色灯光的过渡细节比较丰富。而左边的图在地面上所呈现的光照并没有亮暗的变化,在蓝色和白色的交界处,细节也很不明显。
实际上这就反映了Unity中两种不同的光照渲染模式:逐像素和逐顶点。
而另一种渲染方式球谐函数的光照渲染效果更差,采样率更低。
总结:Unity对物体进行光照渲染的时候有三种方式:逐像素/逐顶点/球谐函数
3。 每种渲染方式的性价比如何?
逐像素的效果最好,逐顶点次之,球谐函数最差。性能开销则反之。
3。1 逐像素/逐顶点光照在前向路径种的渲染算法
逐顶点分别计算三角形三个顶点的光照值,三角形最后呈现的颜色通过颜色差值进行过渡。逐像素一个像素一个像素渲染,效果比逐顶点精细得多。
对模型中的每一个三角形,三角形中的每一个片元进行运算,进行深度测试判断像素点是否需要运算,如果需要就进行光照运算。传入一些物体的材质信息、法线信息、光照信息、摄像机方向的信息等,算出一个颜色,最后更新到帧缓存中。
- 逐顶点 就是将片元运算 改为顶点运算
4。 Unity对每盏灯光都采用逐像素渲染吗?
以上图为例,我们假设八盏灯光都可以照射到这个白球上。如果场景里有2个物体,那么需要渲染8X2遍;3个物体8X3遍。。。。100个物体8X100遍,这样渲染显然是不可能的。
实际上Unity不会每盏灯光都去逐像素渲染,而是允许我们在项目设置里设置下最大允许像素光数量。默认设置为4盏,一般在开发手机游戏等商业项目时,我们仅设置为1盏,甚至通过优化和替代的方式,设置为0盏。以得到更低的性能开销和更好的渲染效果。
5。 Unity如何确定哪些灯光是逐像素的?
Unity是通过参加光照的灯光照到物体表面的亮度来确定哪些灯光是需要逐像素渲染的。
以上图为例,A-H八盏灯光亮度相等的情况下,假设设置了4盏像素光的话,很显然ABCD会作为逐像素进行渲染。
6。 顶点光照也有一定开销,Unity在这块有没有限制
那么剩下的灯光会怎么进行渲染呢?我们知道Unity还有逐顶点和球谐函数两种渲染方式。球谐函数的性能开销几乎可以忽略不记,但是逐定点是有性能开销的,那么Unity对此有没有限制呢?
实际上Unity默认Built-in管线采用的光照渲染方式是顶点光照最多4盏,其余统一按照球谐处理。
以上图灯光为例,ABCD逐像素,DEFG逐顶点,GH球谐处理。通过这样的渲染方式处理,来保证渲染效能只是与设置的像素光数量紧密相关。
7。 一个物体同时受到像素和顶点光照如何处理?
假设在基础通道里对所以物体用红色进行渲染,逐像素的光照在额外的绿色的叠加通道进行渲染,最终我们的物体最终渲染出的结果是黄色。
在图形学上红色(1,0,0) + 绿色(0,1,0) =黄色(1,1,0)
总结:Unity会先走基础通道渲染顶点光照,再通过叠加通道渲染像素光照
8。 能否强制Unity采用像素光照或顶点光照?
假设某一盏灯光在场景里很重要,能否强制Unity将它设置为逐像素光照;或者某盏灯光在场景里无关紧要,能否强制设置为逐顶点以节省性能开销呢?
实际上是可以的,设置灯光为Import(会采用像素光照)或Not Import(会采用顶点光照或球谐光照),可以实现所需要的效果。
需要注意的是:
假设只设置了一盏像素灯光,又采用了默认4盏像素灯光的设置,那么此时会有3盏灯光加入到逐像素光照,直到达到最少的像素光照数量要求。而不管设置多少Not Important灯光,Unity最多只会选择4盏最亮的或者Unity自己决定的4盏灯光进行顶点光照处理,剩下的灯光都走球谐函数处理。这就是Unity为了防止滥用像素或顶点光照而做的数量限制。
Unity官方使用的判断规则
渲染路径的设置
project setting - graphics - rendering path 设置 forward 前向渲染(取消勾选use default)
主角模型可以在camera - rendering 单独设置、
课程宣传与VIP服务
- Unity小白的游戏梦:面向零基础、想要入行游戏的同学
- Unity主程进阶之路:面向有开发基础、工作几年寻求突破的开发者
- Unity小白的TA之路:面向想要成长为技术美术的开发者
- Cocos小白的游戏梦:面向想要开发微信、抖音等平台小游戏,赚第一桶金的同学
- 专属定制学习计划
- 讲师一对一指导解决学习与开发过程中遇到的问题
- 思路、架构、性能优化、源码管理。。。等方面指导
- 每周直播工坊项目实战
- 单一方向课程2年一对一服务,大师课程4年一对一服务
- VIP同学圈与企业内推
- 就业与创业指导
想要了解课程详情领取福利,可以扫艾莉丝老师的二维码
想要交流技术问题,可以扫雷蒙德老师的二维码
,大师课程4年一对一服务
- VIP同学圈与企业内推
- 就业与创业指导
想要了解课程详情领取福利,可以扫艾莉丝老师的二维码
想要交流技术问题,可以扫雷蒙德老师的二维码
想要进群与其他小伙伴一起学习,可以扫交流群的二维码
边栏推荐
- AR Foundation Editor Remote插件使用方法
- 51单片机AD590温度测量ADC0832运放2.73V减法电压变换
- Pytorch配置与实战--Tips
- 常用模块封装-csv文件操作封装
- STM32单片机LORA无线远程火灾报警监控系统DS18B20MQ2火焰检测
- LeetCode 292. Nim Game (Simple)
- STM32单片机OLED经典2048游戏单片机小游戏
- pytorch-10.卷积神经网络
- 开源游戏服务器框架NoahGameFrame(NF)客户端环境搭建(三)
- LeetCode 1894. Find the student number that needs to be supplemented with chalk
猜你喜欢
随机推荐
STM32F407ZG GPIO输出相关实验
电池级碳酸锂除杂质钙镁离子工艺原理
深度学习TensorFlow入门环境配置
LeetCode 938.二叉搜索树的范围和(简单)
Unity中采用二进制存档与读档
I don't like my code
LeetCode 100.相同的树(简单)
LeetCode refers to the offer 21. Adjust the order of the array so that the odd numbers are in front of the even numbers (simple)
LeetCode 1351. Counting Negative Numbers in Ordered Matrices (Simple)
2021-04-15 jacoco代码覆盖率统计和白盒测试
51单片机智能远程遥控温控PWM电风扇系统红外遥控温度速度定时关机
【简易笔记】PyTorch官方教程简易笔记 EP1
Notes for Netual Network
LeetCode 292. Nim Game (Simple)
电路分析中的电容器的基本知识
以STM32F103C6TA为例通过配置CubeMX实现GPIO输出完成点灯实例
pytorch-10.卷积神经网络(作业)
LeetCode Interview Question 17.14 Minimum k Number (Moderate)
pytorch-09. Multi-classification problem
STM32单片机RGB红蓝调光植物补光系统红光蓝光PWM调色调节亮度