前向渲染路径

news/2024/9/17 8:20:56/ 标签: unity

1、前向渲染路径处理光照的方式

前向渲染路径中会将光源分为以下3种处理方式:

  • 逐像素处理(需要高等质量处理的光)
  • 逐顶点处理(需要中等质量处理的光)
  • 球谐函数(SH)处理(需要低等质量处理的光)

球谐函数处理光照的方式是将光照场景投影到球谐函数的空间中,通过一组球谐系数来表示光照。
内存换性能,细节表现效果差(不需要我们自己书写,Unity底层会帮助我们进行处理)

场景当中的各种光源将采用哪种方式处理?

在前向渲染中,一部分最亮的灯光以逐像素处理,然后4个点光源以逐顶点方式处理,其余的灯光以SH处理
一个光源是逐像素、逐顶点还是SH处理主要取决于以下几点:

  • 渲染模式设置为Not Important(不重要)的灯光始终以逐顶点或者SH的方式渲染
  • 渲染模式设置为Important(重要)的灯光始终是逐像素渲染
  • 最亮的平行光总是逐像素渲染
  • 如果逐像素光照的灯光数量少于项目质量设置中的Pixel Light Count(像素灯光计数)的数量,那么其余比较亮的灯光将会被逐像素渲染

注意:如果灯光渲染模式设置为Auto(自动),Unity会根据灯光的亮度以及与物体的距离自动判断重要性

 前向渲染路径处理光照的方式

Unity当中有一套划分光源“三六九等”的规则,主要通过 灯光渲染模式、项目质量设置中的像素灯光计数的数量、光照强度、距离物体距离来综合判定

在前向渲染路径中,会将光源分成所谓的逐像素、逐顶点、SH三种处理类型,有了对光源的“高中低”的身份认知,Unity底层就可以将这些光源的数据存储到Shader中对应的内置变量中,我们就可以通过这些内置变量获取到对应“身份”的光源数据,从而进行差异化的处理

2、前向渲染路径在哪里进行光照计算 

要进行光照计算,那肯定是在Shader当中的Pass渲染通道中进行计算。但是对于前向渲染来说,有两种Pass可以用来进行光照处理:
(1)Base Pass(基础渲染通道)
渲染物体的主要光照通道,用于处理主要的光照效果,主要用于计算逐像素的平行光以及所有逐顶点和SH光源
可实现的效果:漫反射、高光反射、自发光、阴影、光照纹理等
(2)Additional Pass(附加渲染通道)
渲染物体额外的光照通道,用于处理一些附加的光照效果,主要用于计算其他影响物体的逐像素光源,每个光源都会执行一次该Pass
可实现的效果:描边、轮廓、辉光等

对于一个前向渲染路径下的Unity Shader,通常会定义一个Base Pass(基础渲染通道)以及一个Additional Pass(附加渲染通道)
每次渲染时,一个Base Pass仅会执行一次(多个Base Pass情况除外)主要用于渲染环境光或自发光等
一个Additional Pass会根据影响该物体的其他逐像素光源的数量被多次调用,每个逐像素光源都会调用一次Additional Pass,由于开启了混合,渲染结果会和之前的光照颜色进行混合

注意:

  • Base Pass也可以有多个,比如需要双面渲染的情况
  • Base Pass默认支持阴影, Additional Pass默认不支持,可以通过添加#pragma multi_compile_fwdadd_fullshadows编译指令开启阴影
  • 这些Pass当中我们具体处理光照的方式是由我们自己决定的,使用逐顶点光照还是逐像素光照的计算方式,都根据我们的具体实现而定,前文提到的逐像素光源只是按照期望处理类型来分的而已

简而言之:
Base Pass(基础渲染通道):
主要用于处理影响该物体的一个高质量光源(如平行光)、所有中(逐顶点处理)低质量(SH处理)光源 等


Additional Pass(附加渲染通道):
主要用于处理影响该物体的除平行光以外的其它高质量光源(每个高质量光源都会调用)

3、前向渲染路径的内置光照变量和函数

常用内置光照变量

 常用内置光照函数


通过这些内置光照变量,我们便可以获取到前向渲染路径当中,对渲染质量有不同要求的光源们的相关数据。
只需要利用这些数据和函数在Base Pass(基础渲染通道)和 Additional Pass(附加渲染通道)中按照需求进行相关的逻辑处理即可


http://www.ppmy.cn/news/1522811.html

相关文章

如何使用 PHP 函数与其他 Web 服务交互?

在 PHP 中,我们可以使用 cURL 或者 file_get_contents 函数与其他 Web 服务进行交互。 使用 cURL 函数 cURL 是一个库,它允许你使用各种类型的协议来发送数据,并从服务器获取数据。 $curl curl_init(‘http://example.com/api’); curl_s…

SprinBoot+Vue漫画天堂网的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…

前端框架有哪些?以及每种框架的详细介绍

目录 前言1. React2. Vue.js3. Angular4. Bootstrap5. Foundation总结 前言 前端框架是Web开发中不可或缺的工具,它们为开发者提供了丰富的工具和抽象,使得构建复杂的Web应用变得更加容易。当前,前端框架种类繁多,其中一些最受欢…

【全网最全】2024年数学建模国赛A题30页完整建模文档+17页成品论文+保奖matla代码+可视化图表等(后续会更新)

您的点赞收藏是我继续更新的最大动力! 一定要点击如下的卡片那是获取资料的入口! 【全网最全】2024年数学建模国赛A题30页完整建模文档17页成品论文保奖matla代码可视化图表等(后续会更新)「首先来看看目前已有的资料&#xff0…

应用开发“取经路”,华为应用市场送出全周期服务“助攻”

最近大量国内外玩家被西游神话圈粉,化身游戏人物角色,踏上了充满冒险的取经路。如果让莘莘学子或创业者们,在自己的职业生涯中,也选一个机遇跟挑战并存的角色,“开发者”一定榜上有名。 智能手机和移动互联网的普及&am…

30天pandas挑战

大的国家 挑选出符合要求的行 def big_countries(world: pd.DataFrame) -> pd.DataFrame:df world[(world[area] > 3000000) | (world[population] > 25000000)]return df[[name,population,area]] 在Pandas中,当你使用条件过滤时,应该使用 …

记一次升级 Viper、ETCD V3操作Toml

前一阵子碰到Go写的一项目,使用viper和ETCD进行Toml文件的存储与写入。在当我安装新版本的ETCD和升级Go依赖包之后出现了不兼容的问题。旧版viper为1.10版本,使用github.com/coreos/go-etcd v2.0.0incompatible 作为请求包。看了源码之后发现新的版本中废…

HashMap 底层原理解析

HashMap 是 Java 中非常常用的一个数据结构,它基于哈希表实现,提供了快速的键值对存储和检索。本文将深入探讨 HashMap 的底层实现原理,包括其数据结构、哈希函数、冲突解决机制以及扩容机制。 1. 哈希表基础 哈希表是一种通过哈希函数将键…

【重学 MySQL】二十、运算符的优先级

【重学 MySQL】二十、运算符的优先级 MySQL 运算符的优先级(由高到低)注意事项示例 在 MySQL 中,运算符的优先级决定了在表达式中各个运算符被计算的先后顺序。了解运算符的优先级对于编写正确且高效的 SQL 语句至关重要。以下是根据高权威性…

C++学习笔记(13)

203、文件操作-写入二进制文件 二进制文件以数据块的形式组织数据&#xff0c;把内存中的数据直接写入文件。 包含头文件&#xff1a;#include <fstream> 类&#xff1a;ofstream&#xff08;output file stream&#xff09; ofstream 打开文件的模式&#xff08;方式&am…

代理模式(权限、远程调用、延迟加载、日志和缓存)

1、权限保护代理模式 使用 代理模式 实现一个“干饭村约会系统服务”的示例&#xff0c;能够通过代理控制对实际对象&#xff08;比如用户的约会资料&#xff09;访问、保护隐私、限制不正当操作等。 需求分析&#xff1a; 用户&#xff08;Person&#xff09;&#xff1a;干…

自我指导:提升语言模型自我生成指令的能力

人工智能咨询培训老师叶梓 转载标明出处 传统的语言模型&#xff0c;尤其是经过指令微调的大型模型&#xff0c;虽然在零样本&#xff08;zero-shot&#xff09;任务泛化上表现出色&#xff0c;但它们高度依赖于人类编写的指令数据。这些数据往往数量有限、多样性不足&#xf…

uniapp+vue+ts开发中使用signalR实现客户端和服务器通讯

SignalR SignalR 面向 ES6。 对于不支持 ES6 的浏览器&#xff0c;请将库转译为 ES5。 SignalR 支持以下用于处理实时通信的技术&#xff08;按正常回退的顺序&#xff09;&#xff1a; WebSocketsServer-Sent Events长轮询SignalR 自动选择服务器和客户端能力范围内的最佳传输…

如何在极狐GitLab中添加 SSH Key?

本文分享如何生成 SSH Key 并添加到极狐GitLab 中&#xff0c;然后用 SSH Key 进行代码拉取。 极狐GitLab 是 GitLab 在中国的发行版&#xff0c;可以私有化部署&#xff0c;对中文的支持非常友好&#xff0c;是专为中国程序员和企业推出的企业级一体化 DevOps 平台&#xff0…

路由器的固定ip地址是啥意思?固定ip地址有什么好处

‌在当今数字化时代&#xff0c;‌路由器作为连接互联网的重要设备&#xff0c;‌扮演着举足轻重的角色。‌其中&#xff0c;‌路由器的固定IP地址是一个常被提及但可能让人困惑的概念。‌下面跟着虎观代理小二一起将深入探讨路由器的固定IP地址的含义&#xff0c;‌揭示其背后…

图文解析保姆级教程:Postman专业接口测试工具的安装和基本使用

文章目录 1. 引入2. 介绍3. 安装4. 使用 此教程摘选自我的笔记&#xff1a;黑马JavaWeb开发笔记16——请求&#xff08;postman、简单参数、实体参数、RequestParam映射&#xff09;想要详细了解更多有关请求各种参数介绍的知识可以移步此篇笔记。 1. 引入 在当前最为主流的开…

营养餐共享网站:项目规划Plan1

缘起 一些小众的项目&#xff0c;可能还没有较好的网站服务。一些APP项目&#xff0c;受限于支付宝和微信等的限制&#xff0c;只能很简单的在搜索框查找&#xff0c;不能像网站那样在公开引擎上搜索&#xff0c;那个范围更广&#xff0c;搜索到的结果更多。 所以我们想做一个…

数据结构代码集训day15(适合考研、自学、期末和专升本)

本份题目来自B站up&#xff1a;白话拆解数据结构 今日题目如下; &#xff08;1&#xff09;编写算法&#xff0c;实现十进制转十六进制&#xff1b; &#xff08;2&#xff09;汉诺塔&#xff08;Hanoi Tower&#xff09;&#xff0c;又称河内塔&#xff0c;源于印度一个古老…

TCP协议多进程多线程并发服务器

TCP多进程多线程并发服务器 1.多进程并发服务器 #include <myhead.h>#define SERPORT 6666 #define SERIP "192.168.0.136" #define BLACKLOG 10void hande(int a) {if(aSIGCHLD){while(waitpid(-1,NULL,WNOHANG)!-1);//回收僵尸进程} }int main(int argc, c…

深度学习(一)-感知机+神经网络+激活函数

深度学习概述 深度学习的特点 优点 性能更好 不需要特征工程 在大数据样本下有更好的性能 能解决某些传统机器学习无法解决的问题 缺点 小数据样本下性能不如机器学习 模型复杂 可解释性弱 深度学习与传统机器学习相同点 深度学习、机器学习是同一问题不同的解决方法 …