Unity shader Unity Shader BRDF光照模型的构成项 每一项的含义是什么

【Unity Shader】(三) ------ 漫反射和高光反射的实现 【Unity Shader】(三) ------ 漫反射和高光反射的实现 【Unity Shader】(四) ------ 纹理之法线纹理、单张纹理及遮罩纹理的实现 【Unity Shader】(五) ------ 透明效果之半透明效果的实现及原理 【Unity Shader】(六) ------ 复杂的光照(上) 【Unity Shader】(七) ------ 复杂的光照(下... 阅读详情

在Unity中,一个完整的PBR (Physically Based Rendering, 基于物理的渲染) BRDF光照模型由两个核心部分组成:漫反射项和基于微表面理论 (Microfacet Theory, 微表面理论) 的镜面反射项。

它的工作原理可以这样理解:当一束光线照射到物体表面时,BRDF会同时计算并整合两部分的光线贡献,一部分是光线进入材质内部后又散射出来的漫反射光 (Diffuse),另一部分是直接在物体表面发生的镜面反射光 (Specular)。

以物理精确著称的Cook-Torrance BRDF模型(在Unity URP(通用渲染管线)和HDRP(高清渲染管线)中广泛使用)的核心,就是计算镜面反射光的那部分,它由三个关键函数构成。我们可以用一个公式来清晰地展现它:

总体构成:漫反射 + 镜面反射

首先,我们把BRDF拆解为两大组成部分:

  1. 漫反射项 (Diffuse Term):对应公式中的 kd * (c/π),它模拟光线进入材质内部,经过多次散射后从不同方向射出表面的现象。这构成了物体表面均匀、柔和的底色部分,与观察角度无关,通常使用经典的兰伯特模型 (Lambertian Model) 来近似,其反射率是一个恒定值 c/π,并根据能量守恒由系数 kd 控制其强度。

  2. 镜面反射项 (Specular Term):对应公式中复杂的分数部分 ks * (...) / ...,它模拟光线直接在物体表面发生的反射,形成了我们常说的“高光”。这是BRDF模型中最复杂的部分,用来生动地表现从光滑的镜面到粗糙的金属等不同材质的光泽特性。

在实际应用中,kd 和 ks 这两个系数由一个名为 “金属度工作流 (Metalness Workflow)” 的参数系统决定,确保了漫反射和镜面反射的能量此消彼长,符合物理规律。

深入解析镜面反射项:D、F、G三项

镜面反射项是整个BRDF的精华,它基于微表面理论 (Microfacet Theory, 微表面理论),将物体表面想象成由无数朝向各异的微小镜面组成。这个项由三个核心函数共同作用:

函数名称中文名称核心作用
D(h) - Normal Distribution Function (法线分布函数)法线分布函数描述所有微表面中,朝向恰好能将光线反射到观察者眼中的那一部分的比例
F(l,h) - Fresnel Function (菲涅尔函数)菲涅尔函数决定有多少光线被反射(产生高光),多少光线被折射(进入材质内部成为漫反射)
G(l,v,h) - Geometry Function (几何函数)几何函数/遮蔽-阴影函数修正微表面之间的自遮挡(阴影)和自遮蔽(掩蔽)造成的能量损失

D项:法线分布函数 (Normal Distribution Function, NDF)

它回答了“有多少微表面正好能把光线反射到你眼睛里?”这个问题。这个函数直接决定了高光区域的大小、形状和亮度。

  • 粗糙的表面:微表面朝向非常混乱,只有少数恰好对齐的微表面能反射光线,结果就是黯淡、弥散的高光。

  • 光滑的表面:微表面朝向非常统一,大量微表面能同时将光线反射入眼,结果就是集中、明亮的高光。

  • 常见模型:现代PBR管线中最常用的是 GGX (Trowbridge-Reitz) 模型。它与经典的Beckmann模型相比,在光滑表面上能产生更自然的“尾巴”效果,即从高光中心到边缘的亮度衰减更平滑,更贴近真实世界中的材质(尤其是金属)。

F项:菲涅尔函数 (Fresnel Function)

它基于菲涅尔效应 (Fresnel Effect),描述了反射强度随观察角度变化的规律。这个函数解释了为什么一些表面在垂直看时很暗淡,但在掠射角(接近90度)时会像镜子一样明亮。

  • 表现:当你从近乎与水面平行的方向看去,水面会像一面明亮的镜子,反射出天空和景物;而当你从正上方垂直看下去,却可以直接看到水底。这就是菲涅尔效应的直观体现。

  • Unity的实现:Unity中的BRDF实现通常会使用性能高效的 Schlick菲涅尔近似算法 (Schlick Fresnel Approximation) 来计算此项。

  • 重要参数:F0,即法线入射时的反射率(垂直观察时)。它决定了材质的基础高光强度。例如,绝大多数非金属(电介质)的F0约为0.04,而金属的F0则更高,且通常带有颜色。

G项:几何函数 (Geometry Function)

它也常被称为遮蔽-阴影函数 (Shadowing-Masking Term),它的作用是修正微表面间的自遮挡。当光线以近乎平行的角度入射或观察时,一些微表面会被相邻的“凸起”挡住,导致能量损失。如果缺少G项,在物体边缘处的高光会异常明亮、不自然。

  • 常见模型:在URP等现代渲染管线中,通常会使用效果较好的 Smith联合遮蔽-阴影函数 (Smith Joint Shadowing-Masking Function)。

关键参数与Unity中的对应关系

在Shader代码层面(如Unity内置的 UnityStandardBRDF.cginc 文件),一个典型的BRDF函数会接收以下几个关键参数,它们直接控制着材质的外观:

  • diffColor (漫反射颜色):材质的基础颜色或反照率 (Albedo)。

  • specColor (镜面反射颜色):对于非金属,通常是灰度值;对于金属,则是金属的颜色。

  • oneMinusReflectivity (1减去反射率):这是一个辅助值,帮助计算漫反射的强度,满足能量守恒定律。

  • smoothness (光滑度):一个逆反参数,光滑度越高,表面越像镜面,高光越集中;反之则越粗糙,高光越分散。它会被转换成粗糙度 (Roughness) 供D、G函数使用。

  • metallic (金属度):在PBR工作流中,通过这个参数在0(非金属,电介质)和1(金属,导体)之间平滑过渡,动态地混合diffColor和specColor。

总结:BRDF vs. 经验光照模型

为了更好地理解BRDF的优势,可以将它与过去的经验模型(如Phong或Blinn-Phong)进行对比:

模型类型特点优势劣势
BRDF (基于物理)基于微表面理论、能量守恒和菲涅尔效应真实感极强,材质表现统一,在不同光照环境下效果稳定计算性能消耗较高
经验模型 (如Phong)由简单的数学公式直接构成性能消耗很低,对于老旧设备或简单的卡通风格渲染足够使用真实性不足,在掠射角等情况下表现不自然,不符合物理规律

总的来说,Unity中的BRDF模型通过精确控制漫反射与镜面反射的平衡,并利用D(法线分布)、F(菲涅尔)、G(几何) 这三个核心函数,共同定义了材质表面的高光形态、反射强度和微观自遮挡,从而在数字世界中高效地模拟出令人信服的物理真实感。

第六章 Unity中的基础光照 阅读详情

相关推荐

深入解析Unity Standard Shader核心:UNITY_BRDF_PBS函数原理与实战

基于物理的渲染(PBR)是现代实时渲染的基石技术,它通过模拟光线与材质的物理交互来产生逼真的视觉效果。其核心原理在于使用微表面理论和Cook-Torrance BRDF模型,将材质属性(如粗糙度、金属度)与光照环境结合,精确计算每个像素的漫反射与高光反射。这项技术的核心价值在于确保了渲染结果的能量守恒和物理一致性,使其能够广泛应用于游戏开发、影视特效和数字孪生等对真实感要求极高的场景。在Unity引擎中,这一复杂计算被封装于`UNITY_BRDF_PBS`函数内,它是Standard Shader实现高质量

weixin_33726313的博客 454

Unity 的基础光照

Unity 的基础光照

YF云飞的博客 1612

Unity Shader入门:Lambert光照模型原理、实现与实战优化

在计算机图形学中,光照模型是决定三维物体表面明暗和颜色的核心算法,它模拟了光线与材质交互的物理过程。Lambert漫反射模型基于余弦定律,通过计算表面法线与光线方向的点积来确定光照强度,其原理简单、计算高效,是理解复杂渲染技术的基石。该模型在游戏开发、实时渲染等领域具有重要价值,尤其适用于构建基础的漫反射效果和风格化渲染。在Unity Shader编程中,开发者需要掌握从逐顶点计算到逐像素计算的演进,并运用半兰伯特等技巧解决背光面死黑问题,以平衡视觉质量与性能。本文聚焦Lambert模型在Unity中的实现

weixin_34408717的博客 781

Unity中Shader的BRDF解析(三)

在上篇文章中,我们解析了BRDF的漫反射项,这篇文章我们继续解析BRDF中的镜面反射

楠溪泽岸的博客 1671

NI-HIL学习开篇

自我介绍下,四年零部件厂工作经验,一年(至今)主机厂工作经验,负责BMS/VCU方向软硬件测试。 学习目的:把握新能源汽车的测试发展趋势,顺应历史的洪流。 学习目标:1.掌握HIL开发测试流程中的IO配置、开环验证、闭环模型开发及调试、自动化测试 2.掌握第三方模型的搭建及simulink关联仿真(2019.05.21新增:需巩固练习matlab基础——2...

masonson的专栏 4177

USB HID虚拟电池:Windows零驱动电源状态模拟方案

虚拟电池是一种在硬件测试与功耗分析中替代真实电池、实现可控电源状态注入的关键技术。其核心原理是通过标准USB HID协议(特别是UPS设备类)向操作系统上报可编程的AC/DC状态、剩余电量、容量参数等,绕过内核驱动限制,达成毫秒级响应与跨Windows版本兼容。该技术显著提升SoC能效验证、电池健康度校准及低电量行为触发等场景的可重复性与精度。本文基于CH554微控制器实现符合HID UPS规范的物理层虚拟电池设备,支持零驱动安装、USB原生识别与实时参数调控,适用于笔记本平台功耗建模、电源管理策略验证及自

weixin_35755188的博客 354

Unity中Shader的BRDF解析(四)

在上一篇文章中,我们解析了BRDF中的 镜面反射,这篇文章我们继续解析BRDF中的 IBL(Image Based Lighting 基于图像的光照)

楠溪泽岸的博客 2057

DNS入侵检测 datacon2020

DNS入侵检测 datacon2020。

weixin_51491521的博客 523

Unity中Shader的BRDF解析(二)

我们在这篇文章中,继续来继续解析BRDF中的高配置情况( UNITY_PBS_USE_BRDF1)下,迪士尼的漫反射计算Unity中Shader的BRDF解析(一)

楠溪泽岸的博客 1640

Cursor Agent模式下如何优雅切换conda环境运行Python脚本?3种实用方法实测

本文针对Cursor Agent模式下运行Python脚本时环境错配的痛点,实测了三种优雅切换conda环境的实用方法。通过Shell全局配置、项目级.cursorrc文件定制以及对话中直接指令,开发者可以确保AI助手在正确的虚拟环境中执行代码,从而提升开发效率和协作流畅度。

redis7keeper的博客 597

《YOLOv8:从入门到实战》专栏介绍 & 专栏目录

本专栏涵盖了丰富的YOLOv8算法从入门到实战系列教程,专为学习YOLOv8的同学而设计,堪称全网最详细的教程!🌈🌈🌈

小哥谈 6488

【Unity Shader入门】Shader基础光照:光照模型

光照介绍 BRDF 标准光照模型 自发光 漫反射 Lambert光照模型 Half Lambert光照模型 高光反射 Phong光照模型 Blinn-Phong光照模型 环境光 光照模型实现 漫反射 Lambert光照模型 逐顶点光照 逐像素光照 Half Lambert光照模型 高光反射 Phong光照模型 逐顶点光照 逐像素光照

承续缘 3067

YOLOv11【第一章:零基础入门篇·第1节】YOLOv11核心架构深度解析与环境配置,一文搞定!

🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。 本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。

**My Coding Family** 5508

局部光照模型及其BRDF

提要常见的光照模型一般包括四个部分ambient, diffuse, specular, 和emitted light. 即:vertex color = ambient + diffuse + specular + emitted light当有多个光源的时候,最后的颜色就是多个结果的叠加。Ambient light:环境光,通常定义在光源的中,注意每个光源的衰减量。Diffuse:漫反射部分,

爱冒险的技术宅 1万+

30、模态组合规则在振动分析中的应用

本文详细介绍了模态组合规则在振动分析中的应用,重点讨论了绝对峰值叠加法(SRSS)和完全二次组合(CQC)的理论基础、应用场景及优缺点。通过具体工程实例,展示了模态组合规则在地震载荷下结构响应分析中的实际效果,并提供了应用步骤和注意事项,为结构设计和安全评估提供了科学依据。

nice1的博客 221

[QMT量化交易小白入门]-六十九、ETF动量评分策略,历史年化收益率107%

C . bar_date } 跳过') returnC . bar_date } 跳过') returnC . bar_date } 跳过') return作用:如果当前不是回测模式且不是最后一根K线,则记录日志并跳过本次任务。这是为了避免在实时交易中对尚未完成的数据进行处理。

木头大左的博客 2227

Unity Shader 简单实现一个PBR光照模型

这次用Unity Shader自己实现一个简单PBR光照模型

游戏入选者的博客 2784

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Unity Shader中的基础光照与标准光照模型(自发光、环境光、高光反射、漫反射)、BRDF光照模型

我们是如何看到这个世界的 从宏观上来说,渲染包含了两大部分 决定一个像素的可见性 决定这个像素上的关照计算 而光照模型就是用于决定一个像素上进行怎样的光照计算 通常来讲,我们要模拟真实的光照环境来生成一张图片,需要考虑以下3种物理现象 光线从光源中被发射出来 光线和场景中的一些物体相交:一些管线被物体吸收了,二另一些被散射到其他方向 摄像机吸收了一些光,产生了一张图像 下面我们会针对每个部分进行解释 光源 在光学里,我使用辐照度来量化光。对于平行光来说,它的辐照度课通过计算在垂直于l的单位面积上单位

weixin_50617270的博客 5250

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

unity shader 之基础六 光照模型

1.基本的光照模型 光照:在物理学上,光是太阳发出的一种电磁波,光照射到物体表面,会发生散射,一部分反射出去,一部分折射到物体内部,再散射出去 1.1 光强(衡量光大小的变量) 光的方向:用l(light)表示 辐射度:垂直于 l 的平面单位面积上单位时间内通过的光的能量 因为大多数物体表面和光照方向并不垂直,所以使用表面法线的余弦值,来表示辐射度,这里的法线和光照方向都是单位向量 1.2反射和折射 前面说的散射有两种方式,一种反射,一种折射,在shader中分别用 漫反射 和 高光.

qq_37672438的博客 1580

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Unity中Shader双向反射分布函数BRDF

Unity中Shader双向反射分布函数BRDF。

楠溪泽岸的博客 1495

Unity内部pbr实现1——框架及内部直接光照公式

目的    PBR(Physical Based Rendering) 可以说是很多游戏开发的标配了,理解Unity内部PBR的实现,对我们来说有几点意义: 可以让我们对Unity内部材质各种参数的调节有个 更理性的认识 ; 可以在其它建模工具中进行此 PBR的插件实现 ,使得建模时就能看到Unity引擎中的光照效果; 可以让我们对PBR关照有个系统的认识,便于对其进行 改进(估计要读好几篇论文...

起步 3493

Unity 内置Standard Shader UNITY_BRDF_PBS函数分析 (一)

改定义在UnityPBSLighting.cginc文件里。都在UnityStandardBRDF.cginc里。

yasin的博客 652

unity shader——BRDF分析

在这个文件中,我们先来看一个函数: // Based on Minimalist CookTorrance BRDF // Implementation is slightly different from original derivation: http://www.thetenthplanet.de/archives/255 // * NDF (depending on UNITY_BR...

小孔明的专栏 1404

【光照】Unity[经验模型]和[物理模型]

BRDF模型发展与应用:从理论到UnityURP实现 本文系统梳理了BRDF模型的发展历程,从1971年Bouknight的Lambert漫反射模型,到1982年Cook-Torrance基于微表面理论的突破,最终形成现代PBR渲染体系。重点解析了BRDF的核心理论,包括微表面理论、能量守恒和菲涅尔效应,详细介绍了Cook-Torrance模型的数学公式构成(D/F/G三项)。在UnityURP中的实际应用方面,展示了如何通过Shader代码实现标准光照模型和PBR材质系统,对比了BRDF与Phong模型在

设计 AI 玩游戏🎮 1344

从一个shader剖析unity混合光照和pbr

从unity5.6自带的代码来看。 下面是standard.shader的面板 shader结构图: subShader的区别,先看两个pass的区别: 然后我们先看第一个forward pass,“UnityStandardCoreForward.cginc”里查看,vertBase和fragBase又根据是否定义simple而执行不同的分支: 定义了si

阿拉平平的专栏 6581

Unity 内置Standard Shader UNITY_BRDF_PBS函数分析 (二)

BRDF1_Unity_PBS 的实现基于 Disney 工作,并以 Torrance-Sparrow 微面模型为基础,使用了多种不同的组件来计算最终的 BRDF(双向反射分布函数)。

yasin的博客 1018
上一篇: Unity Shader 冰面 Shader 制作原理与流程
下一篇: Unity Shader 法线贴图跟切线空间有什么关系
mxwin
博客等级 码龄19年 22粉丝 151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值