当前位置: 首页 > news >正文

4.10 顶点光源

1.逐顶点渲染简介

2.One Vertex Light


1.逐顶点渲染简介

逐顶点渲染意味着在顶点着色器中进行光照计算, 计算得出的颜色随后被插值处理并传递给片元着色器, 这种方式性能消耗低; Unity将这类光源包含在base pass中, 使用该方式时,Unity会寻找带有VERTEXLIGHT_ON关键词的着色体变体; 顶点光照仅适用于点光源, 定向光和聚光灯无法作为顶点光照使用 

要使用顶点光照, 我们必须在基础通道中添加一个多重编译指令; 它只需一个关键字VERTEXLIGHT_ON; 另一个选项则是完全不使用关键字, 为此我们需要使用 _ 

在这里插入图片描述


2.One Vertex Light

要将顶点光的颜色传递给片元着色器, 我们需要将其添加到v2f结构体中

在这里插入图片描述

我们创建一个单独的函数来计算该颜色, 该函数从v2f中读取数据和写入数据, 因此将其设置inout参数

在这里插入图片描述

我们仅传递第一个顶点光的颜色, 只有当光源存在时才能执行

在这里插入图片描述


1).PBR中将顶点光照的颜色作为间接光a.Unity的现代着色器(Standard Shader, URP/Lit Shader)都使用基于物理的渲染, 其核心BRDF光照模型(直接光部分)必须在像素级别计算才能得到正确的结果b.不能简单丢掉顶点光照, 确保物体在最差的情况下(无法获得像素光时)也能有一个基础的, 可接受的照明效果,避免场景中出现难看的黑色物体, unity将顶点光照降级为间接光c.打个比方像素光BRDF = 米其林大厨精心烹饪的主菜(精确火候,复杂调味)顶点光照 = 快餐汉堡(快速简单,能填饱肚子)虽然汉堡也是正餐(直接光), 但在米其林餐厅的菜单上, 它不会被当作主菜, 而是可能被归类为简餐或备用选择(间接光); 当客人太多(性能压力大), 大厨忙不过来时, 至少还有汉堡可以供应, 确保客人不会饿肚子(物体不会变黑)

2).PBR中将顶点光照作为漫反射a.顶点光照高光反射效果很差, 因为高光反射的核心是视角方向和法线方向的精确关系- 在顶点级别: 我们只在三角形的三个顶点计算高光- 在像素级别: 我们在每个像素点计算高光b.想象一个三角形平面- 顶点处的法线是已知的- 但三角形内部每个点的法线应该是平滑过渡的- 高光反射需要非常精确的法线信息才能形成光滑、连续的高光区域c.如果用顶点光照计算高光, 你会得到- 高光只出现在顶点位置- 三角形内部通过颜色插值来模拟高光- 结果就是高光会破碎、不连续、形状扭曲,看起来非常假既然顶点高光效果这么差, 那为什么还要计算它? 与其计算一个效果很差的高光, 不如把宝贵的性能用来确保漫反射保底照明更有意义

在这里插入图片描述

在这里插入图片描述


Unity最多支持四个顶点光源, 这些光源的位置存储在四个float4变量中, 每个坐标对应一个变量; 它们分别是unity_4LightPosX0、unity_4LightPosY0和unity_4LightPosZ0, 并在 UnityShaderVariables中定义; 这些变量的前几个分量包含第一个顶点光源的位置

在这里插入图片描述

接下来, 我们计算光线向量、光线方向以及ndotl因子; 此处无法使用 UNITY_LIGHT_ATTENUATION宏; 在顶点光照计算中, 我们通常只计算光照的贡献(包括光强、漫反射系数等), 而不乘以材质颜色(例如漫反射颜色); 这是因为在后续的片段着色器中, 我们还会进行更精确的光照计算, 并且在那里会结合材质颜色

在这里插入图片描述

在Unity中,unity_4LightAtten0是一个包含4个顶点光源的衰减参数的向量; 通常, 衰减公式会使用距离的平方乘以一个衰减系数来计算, unity_4LightAtten0帮助我们手动调整衰减系数

在这里插入图片描述

http://www.dtcms.com/a/395062.html

相关文章:

  • 深度学习---PyTorch 神经网络工具箱
  • 第九篇:静态断言:static_assert进行编译期检查
  • 第10讲 机器学习实施流程
  • tablesample函数介绍
  • 机器学习-单因子线性回归
  • android pdf框架-14,mupdf重排
  • 借助VL模型实现一个简易的pdf书签生成工具
  • 78-数据可视化-折线图
  • 静默安装 Oracle Database 21c on CentOS 7.9
  • DINOv3详解+实际下游任务模型使用细节(分割,深度,分类)+ Lora使用+DINOv1至v3区别变换分析(可辅助组会)
  • Linux编译SRS并测试RTMP流
  • 【完整源码+数据集+部署教程】遥感温室图像分割系统: yolov8-seg-slimneck
  • Apache 生产环境操作与 LAMP 搭建指南
  • 11种数据库类型详解:数据库分关系数据库、非关系数据库、时序数据库、向量数据库等
  • UVa12180/LA4300 The Game
  • Kafka 核心原理、架构与实践指南
  • Tesollo展示灵巧手自动化精准测量系统
  • 11MySQL触发器实战:用户操作日志审计系统
  • 【深度学习计算机视觉】06:目标检测数据集
  • visual studio 2019离线安装
  • 【Unity笔记】Unity 模型渲染优化:从 Batching 到 GI 设置的完整指南
  • 【AI领域】如何写好Prompt提示词:从新手到进阶的完整指南
  • Unity 性能优化 之 内存优化
  • PCB 通孔技术全解析:结构参数、制造工艺与质量控制指南
  • 1.13-Web身份鉴权技术
  • 【完整源码+数据集+部署教程】水母图像分割系统: yolov8-seg-rtdetr
  • 《从零到精通:PyTorch (GPU 加速版) 完整安装指南
  • B站的视频资源转换为可用的MP4文件
  • 5. 数据类型转换
  • 有没有更多Java进阶项目?