【光照】[高光反射specular]以UnityURP为例

news/2025/9/23 11:56:13/文章来源:https://www.cnblogs.com/SmalBox/p/19106927

【从UnityURP开始探索游戏渲染】专栏-直达

高光反射的基本流程

经验光照模型中的高光反射通常遵循以下流程:

  • 入射光计算‌:确定光源方向和强度
  • 视角向量计算‌:确定观察者方向
  • 反射向量计算‌:根据表面法线计算理想反射方向
  • 高光强度计算‌:使用特定模型计算高光反射强度
  • 最终合成‌:将高光反射与漫反射和环境光结合

主要高光反射模型及实现

Phong模型 (1975) -经验模型

1975 裴祥风(Bui Tuong Phong)剔除了标准光照模型背后的基本理念。标准光照只关心直接光照direct light。

  • Phong模型计算高光反射:

    Phong.png

    • 反射方向:$r=2(n·I)n-I$
    • $C_{specular}=(C_{light}·M_{specular})max(0,v·r)^{M_{gloss}}$
    fixed3 reflectDir = normalize(reflect(-worldLightDir, worldNormal));
    fixed3 viewDir = normalize(_WorldSpaceCameraPos.xyz - i.worldPos.xyz);
    fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(saturate(dot(reflectDir, viewDir)), _Gloss);
    
    • Mgloss 材质光泽度,也称为反光度shininess。控制高光区域亮点有多宽,Mgloss越大,亮点越小。

特点‌:

  • 计算反射向量需要额外步骤
  • 高光边缘过渡较硬
  • 计算成本中等

Unity URP应用‌:

  • 早期移动端简化着色器中使用
  • 现在主要用于教学演示目的

Blinn-Phong模型 (1977) -经验模型

  • Blinn提出简单方法得出类似效果(Blinn-Phong高光反射光照)

    Blinn-Phong.png

    • $h=\frac{(v+I)}{|v+I|}$
    • $C_{specular}=(C_{light}·M_{specular})max(0,n·h)^{M_{gloss}}$
    fixed3 viewDir = normalize(_WorldSpaceCameraPos.xyz - i.worldPos.xyz);
    fixed3 halfDir = normalize(worldLightDir + viewDir);
    fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(max(0, dot(worldNormal, halfDir)), _Gloss);
    
    • 摄像机和光源距离物体足够远时,可认为v和I是定值,Blinn模型会快于Phong模型。
    • 当v和I不定时,Phong可能更快。

特点‌:

  • 比Phong模型计算效率更高
  • 高光过渡更柔和自然
  • 成为游戏行业长期标准

Unity URP选用方案‌:

  • URP内置的SimpleLit着色器使用此模型
  • 移动端默认高光方案

Ward各向异性模型 (1992)

实现原理‌:

$高光 = 光源强度 × 特殊BRDF × exp(-tan²θ/(α²))$

其中:

  • θ:微表面法线偏差角
  • α:表面粗糙度参数

特点‌:

  • 模拟金属/毛发等各向异性材质
  • 计算复杂度较高
  • 需要切线空间信息

Unity URP应用‌:

  • 不直接内置,需要自定义着色器
  • 常用于头发/丝绸等特殊材质
  • 实现示例:
hlsl
float3 T = i.tangent;
float3 B = cross(N, T);
float dotTH = dot(T, H);
float dotBH = dot(B, H);
float spec = exp(-2.0*(dotTH*dotTH + dotBH*dotBH)/(1.0 + dotNH));

Cook-Torrance模型 (1982)

实现原理‌:

$高光 = (D × F × G) / (4 × (N·V) × (N·L))$

包含三个函数:

  • D (微表面分布):Beckmann/GGX
  • F (菲涅尔反射):Schlick近似
  • G (几何遮蔽):Smith函数

特点‌:

  • 物理基础渲染(PBR)核心模型
  • 计算成本最高
  • 需要更多材质参数

Unity URP选用方案‌:

  • URP的Lit着色器使用简化版
  • 主要采用GGX分布+Schlick菲涅尔
  • 实现核心:
hlsl
float D = GGXDistribution(N, H, roughness);
float F = SchlickFresnel(dot(H, V));
float G = SmithGeometry(N, V, L, roughness);
float spec = (D * F * G) / (4 * max(dot(N,V), 0.01) * max(dot(N,L), 0.01));

Unity URP的高光实现策略

多级高光系统

URP采用分层的高光处理方案:

质量等级 使用模型 目标平台 特性
Low Blinn-Phong 低端移动 单光源简化
Medium 改进Blinn-Phong 主流移动 多光源支持
High Cook-Torrance PC/主机 PBR工作流
Ultra 完整PBR 高端设备 多散射支持

URP核心实现

Shader架构‌:

graph TDA[URP输入] --> B{质量设置}B -->|Low| C[Blinn-Phong]B -->|Medium| D[优化Cook-Torrance]B -->|High| E[完整PBR]C --> F[光照累加]D --> FE --> FF --> G[输出合成]

关键代码片段‌:

hlsl
// URP的BRDF处理 (BRDF.hlsl)
half3 BRDF_Simple(half3 albedo, half3 specular,half smoothness, half3 normal,half3 lightDir, half3 viewDir)
{half3 halfVec = SafeNormalize(lightDir + viewDir);half NdotH = saturate(dot(normal, halfVec));half modifier = pow(NdotH, smoothness * smoothness * 50.0);return specular * modifier;
}// URP的PBR BRDF (BRDF_PBR.hlsl)
half3 BRDF_PBR(half3 albedo, half metallic,half smoothness, half3 normal,half3 lightDir, half3 viewDir)
{half perceptualRoughness = 1.0 - smoothness;half roughness = perceptualRoughness * perceptualRoughness;half3 halfVec = SafeNormalize(lightDir + viewDir);half NdotV = saturate(dot(normal, viewDir));half NdotL = saturate(dot(normal, lightDir));// GGX分布half D = DistributionGGX(normal, halfVec, roughness);// 菲涅尔Schlick近似half3 F = FresnelSchlick(halfVec, viewDir, metallic);// 几何遮蔽half G = GeometrySmith(normal, viewDir, lightDir, roughness);return (D * F * G) / (4.0 * NdotV * NdotL + 0.0001);
}

移动端优化技巧

  • 近似计算‌:
    • 使用半精度浮点(half)
    • 预计算菲涅尔项
    • 简化几何函数
  • 纹理烘焙‌:
    • 粗糙度映射使用LUT
    • 环境反射使用立方体贴图
  • 着色频率控制‌:
    • 顶点着色器计算低频高光
    • 像素着色器处理细节

方案选型原因分析

为什么URP选择混合方案?

  • 性能与质量平衡‌:
    • 低端设备:Blinn-Phong (60%性能提升)
    • 高端设备:PBR (100%物理准确)
  • 美术工作流统一‌:
    • 统一的光滑度参数(0-1)
    • 自动模型切换无感知
  • 平台适应性‌:
    • 根据GPU能力动态调整
    • 保留核心视觉一致性

技术对比数据

模型 计算周期 内存访问 视觉保真度
Phong 18 5 70%
Blinn-Phong 15 4 75%
Cook-Torrance 35 8 95%
URP优化版 22 6 88%

实际项目建议

  • 移动游戏‌:

    hlsl
    // 使用SimpleLit着色器
    Shader "Universal Render Pipeline/Simple Lit"
    
  • AAA级项目‌:

    hlsl
    // 使用完整PBR管线
    Shader "Universal Render Pipeline/Lit"
    
  • 风格化渲染‌:

    hlsl
    // 自定义高光形状
    float spec = pow(dotNH, _Glossiness) * step(0.9, dotNH);
    

Unity URP的高光反射实现体现了现代渲染引擎的设计哲学:在物理精确性与实时性能之间寻找最佳平衡点,通过分层架构满足不同项目需求,同时保持美术工作流的一致性。这种灵活而高效的设计使URP成为跨平台开发的理想选择。


【从UnityURP开始探索游戏渲染】专栏-直达

(欢迎点赞留言探讨,更多人加入进来能更加完善这个探索的过程,🙏)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/912459.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国外网站打开很慢安阳网站设计哪家专业

PPSSPPSDL for Mac是一款模拟器软件,它允许用户在Mac上运行PSP(PlayStation Portable)游戏。通过这款模拟器,用户可以体验到高清甚至更高的分辨率的游戏画面,同时还能够升级纹理以提升清晰度,并启用后处理着…

民宿网站建设问卷调查重庆建设监理协会

写在前面 工作需要遇到,简单整理理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对…

做网站的岗位好吗wordpress 云落git最新版

实模式:(即实地址访问模式)它是Intel公司80286及以后的x86(80386,80486和80586等)兼容处理器(CPU)的一种操作模式。实模式被特殊定义为20位地址内存可访问空间上,这就意味着它的容量是2的20次幂&#xff08…

网站用vps做dns东莞app下载安装

本篇博客将详细讲解二叉树 文章目录 树型结构简介基本概念表示形式 二叉树概念两种特殊的二叉树二叉树的性质二叉树的存储二叉树的简单创建二叉树的遍历前中后序遍历层序遍历 结尾 树型结构 简介 树是一种非线性的数据结构,它是由n(n>0&#xff09…

网站建设一般用什么语言php网站开发有前景吗

文章目录 一、为什么使用token口令二、登录注册功能2.1 登录表单提交后端代码: 2.2 根据token获取完整用户信息代码实现: 2.3 注册时用户名占用校验代码实现: 2.4 注册表单提交代码实现: 三、头条首页功能3.1 查询所有头条分类3.2…

redis-list类型基本命令

redis-list类型基本命令redis存储数据的value可以是一个String类型的列表。列表中的数据会按照插入顺序进行排序,不过,该列表的底层实际上是一个没有 头节点的双向链表,所以对列表表头和表尾操作性能较高,但是对中…

游戏性能优化与逆向分析技术

【USparkle专栏】如果你深怀绝技,爱“搞点研究”,乐于分享也博采众长,我们期待你的加入,让智慧的火花碰撞交织,让知识的传递生生不息!一、前言一直以来性能优化的工作,非常依赖于工具,从结果反推过程,采集产品…

vue2 项目实例 动态路由菜单(四)

vue2 项目实例 动态路由菜单(四)动态路由涉及到 router、 store、 beforeEach、 permission权限1、触发登录事件Login.vue 监听路由变化,下次登录重定向上次页面watch: {$route: {handler: function(route) {this.r…

政务网站建设的三大核心功能是什么建设自己网站软件下载

一、简述静态网页和动态网页的区别。 静态网页: 静态网页是指运行于客户端的程序、网页、组件、纯粹HTML格式的网页; 如果有涉及网页内容的修改,就要修改源文件,重新上传到服务器。而且当网站信息量很大的时候,网页制作和维护都非常困…

重庆百度推广seo长春seo

很多同学不止一次和我反馈,我们的系统很混乱,主要表现在:应用的层次结构混乱:不知道应用应该如何分层、应该包含哪些组件、组件之间的关系是什么;缺少规范的指导和约束:新加一段业务逻辑不知道放在什么地方…

对于网站建设提出建议网站做APP麻烦吗

在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码…

网站后台链接怎么做平面设计手绘网站

原标题:个税起征点上调至5000,用Python算一算少交多少税今天出了一个重磅消息,个税起征点从3500上调到5000啦! 广大IT农民工的生活压力又减轻了一些,有没有 晚上加一个鸡腿,要不要~ 开心归开心,…

气血不足做网站网站收索流量

不能过帐凭证:本币计的税基为0 消息编号 FF759 诊断 尝试步成本币中计税基数为零的凭证,尽管外币中税金额和计税基数不为零, 系统响应 拒绝凭证输入。 步骤 再次输入凭证。 这个错误的原因,是因为四舍五入导致的税为零。根据百度的反馈&…

网站开发公司名单网站托管团队

1 需求 我们需要实现携带时间头的一系列照片如下显示,现在我们拿到了图片集合,肯定需要对图片根据实现进行分组显示 date picture picture picture picture picture picture picture picture picturedate picture picture picture picture picture 2 代码实现 fun getImag…

网站建设需要哪些企业资料石家庄校园兼职网站建设

8月26日,2023未来产业发展大会在杭州未来科技城国际会议中心开幕!会上,发布了未来科技城培育发展未来产业行动计划,启动了未来产业发展共同体,进行了未来产业公共服务平台签约仪式。未来科技城与加速科技签约共建集成电…

复古风格网站git做网站根目录

🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:数据结构 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进…

app 微信 网站三合一企业宣传册模版

花了几天的时间,整出个 “hello spring boot”,并且把它从 2 搞到了 3。 纸上得来终觉浅!自己实践出真知!现在再回头来囫囵一遍,加深下印象。回想下从前自觉某一编程语言大都如此,先找到简单示例照着画一遍…

使用 feign 调用时对微服务实例进行选择

使用 feign 调用时对微服务实例进行选择1.概述 在 微服务 调用的时候,我们会需要将微服务实例进行分组的情况,我们有订单和库存服务,订单服务 和库存服务 分别 为 A,B两组服务实例。 A 服务分组服务A用户,B服务分组…

EI目录今年第3次更新!55本中国期刊被收录,附完整版下载

8月,EI Compendex数据库发布了最新版收录期刊目录。 目录实际更新时间为2025年7月24日 2025年截止8月份EI数据库已更新3次,更新时间分别为2025年1月、2025年4月和2025年7月。 本次目录共收录期刊5702本,其中包含Jou…

友点企业网站管理系统3d全屋定制设计软件

1.没镜像就拉取镜像 dockerhub中查看版本 官网 docker pull zookeeper:3.4.14 不加版本号也行,默认拉取最新版 创建并启动容器 docker run -p 2181:2181 --privilegedtrue --name zookeeper01 -d zookeeper –privilegedtrue 容器内用户开启root权限 docker ps…