【光照】[环境光ambient]以UnityURP为例

news/2025/9/24 17:27:51/文章来源:https://www.cnblogs.com/SmalBox/p/19109623

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

环境光的基本处理流程

$Cambient$

  • 环境光采集‌:获取场景环境光照信息
  • 环境光遮蔽‌:计算环境光遮挡关系
  • 环境光反射‌:根据材质属性反射环境光
  • 环境光混合‌:与其他光照成分合成最终颜色

主要环境光模型及实现

恒定环境光(Constant Ambient)

  • 实现原理‌:
    • $环境光 = 环境光颜色 × 环境光强度$
  • 最简单的环境光模型
  • 全局统一的环境光值
  • 不考虑任何空间变化

Unity URP应用‌:

  • 早期移动设备的基础方案

  • 在URP中作为最低质量级别选项

  • 实现示例:

    hlsl
    half3 ambient = unity_AmbientSky * _AmbientScale;
    

球谐光照(Spherical Harmonics, SH)

实现原理‌:

  • 使用低阶球谐函数(通常3阶9系数)编码环境光
  • 在顶点着色器中重建环境光
  • 公式:
    • $环境光 = Σ(球谐系数 × 基函数(N))$

特点‌:

  • 低频光照近似
  • 内存占用小(每个顶点9个float)
  • 计算成本低

Unity URP选用方案‌:

  • URP默认环境光方案

  • 从Light Probe或Lightmap采样

  • 实现核心:

    hlsl
    half3 ambient = SampleSH(normalWS);
    

环境光遮蔽(Ambient Occlusion)

  • 实现原理‌:
    • $有效环境光 = 基础环境光 × AO因子$
  • AO因子通过预计算或实时计算
  • 常见技术:
    • SSAO (屏幕空间AO)
    • HBAO (水平基准AO)
    • GTAO (地面真实AO)

Unity URP实现‌:

  • 内置SSAO后处理效果

  • 通过_MainLightOcclusionProbes控制

  • 实现示例:

    hlsl
    half ao = SampleAmbientOcclusion(positionCS);
    ambient *= ao;
    

反射探针(Reflection Probes)

实现原理‌:

  • 预先生成立方体贴图(Cubemap)

  • 根据表面粗糙度进行模糊采样

  • 公式:

    $镜面环境光 = textureLod(cubemap, R, roughness * MAX_MIP_LEVEL)$

Unity URP应用‌:

  • 高质量环境反射方案
  • 支持混合探针和平面反射
  • 实现核心:
hlsl
half3 reflection = GlossyEnvironmentReflection(reflect(-viewDir, normalWS),perceptualRoughness,ao
);

Unity URP的环境光系统架构

graph TDA[环境光源] --> B{质量等级}B -->|Low| C[恒定环境光]B -->|Medium| D[球谐光照+AO]B -->|High| E[反射探针+SH]C --> F[光照合成]D --> FE --> FF --> G[最终颜色]

URP环境光混合策略

hlsl
// URP环境光处理 (Lighting.hlsl)
half3 MixEnvironmentLighting(half3 diffuse,half3 specular,half3 normalWS,half3 viewDirWS,half roughness,half occlusion)
{// 漫反射环境光half3 sh = SampleSH(normalWS) * occlusion;// 镜面反射环境光half3 reflection = GlossyEnvironmentReflection(reflect(-viewDirWS, normalWS),roughness,occlusion);return diffuse * sh + specular * reflection;
}

方案选型原因分析

为什么URP选择混合环境光系统?

  • 性能分级控制‌:
    • 低端设备:恒定环境光(节省50%计算)
    • 中端设备:球谐光照(平衡质量性能)
    • 高端设备:完整PBR环境光(物理精确)
  • 内存效率优化‌:
    • 球谐系数仅占用36字节/顶点
    • 反射探针使用渐进式更新
  • 美术工作流统一‌:
    • 统一的环境光强度参数
    • 自动探针混合过渡

技术对比数据

模型 内存占用 计算成本 视觉保真度
恒定环境光 12B 1周期 30%
球谐光照 36B 15周期 65%
反射探针 2-10MB 50周期 90%
URP混合方案 动态调整 20-80周期 75-95%

实际项目建议

移动端优化‌:

hlsl
// 简化环境光计算
half3 ambient = unity_AmbientSky * occlusion;

开放世界游戏‌:

csharp
// 使用混合探针
reflectionProbe.blendDistance = 10.0f;
reflectionProbe.mode = ReflectionProbeMode.Blended;

室内场景‌:

hlsl
// 增强AO效果
ambient *= pow(occlusion, _AOPower);

Unity URP的环境光系统通过分层架构实现了跨平台的高效渲染,在保持物理合理性的同时,针对不同硬件能力提供最优解决方案。这种灵活的设计使开发者能够在各种项目规模中取得理想的视觉效果与性能平衡。


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

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

本文由博客一文多发平台 OpenWrite 发布!

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

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

相关文章

浅谈当前时代下大学生的就业择业及人生规划

浅谈当前时代下大学生的就业择业及人生规划: 叠甲阶段: 我不是专业的人生规划师,也不是手握各大厂资源和offer的人脉大佬。我只是一个在芸芸大学生中的其中一个小透明。眼界与资源都具有局限性。各位佬,同学权当汲…

网站备案一般要多久pr免费模板网站

转载自Thrift在Windows及Linux平台下的安装和使用示例 thrift介绍 Apache Thrift 是 Facebook 实现的一种高效的、支持多种编程语言的RPC(远程服务调用)框架。 本文主要目的是分别介绍在Windows及Linux平台下的Thrift安装步骤,以及实现一个简单的demo演示Thrif…

手把手教你做网站做网站设计的都转行干啥了

一、前言 spring为开发人员提供了两个搜索注解的工具类,分别是AnnotatedElementUtils和AnnotationUtils。在使用的时候,总是傻傻分不清,什么情况下使用哪一个。于是我做了如下的整理和总结。 二、AnnotationUtils官方解释 功能 用于处理注解&…

唐山网站专业制作网站的整体规划怎么写

重要: schema-defined aspects只支持singleton model,即 基于配置文件的aspects只支持单例模式 转载于:https://www.cnblogs.com/JsonShare/p/4638475.html

上传图片做网站维护微信公众号网页授权登录wordpress

题目:从一个由N个整数排列组成的整数序列中,自左向右不连续的选出一组整数,可以组成一个单调减小的子序列(如从{68 69 54 64 68 64 70 67 78 62 98 87}中我们可以选取出{69 68 64 62}这个子序列;当然,这里还有很多其他…

实用指南:玳瑁的嵌入式日记---0923(ARM)

实用指南:玳瑁的嵌入式日记---0923(ARM)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

个人博客搭建记录【hexo】

安装hexo 部署环境Node.js GitNode.js 部署,建议版本大于 12.0Node.js 安装中步骤中需要注意其中两处:Add to PATH 选上,使其集成到系统环境中: ​此处勾选会安装各种编程环境和软件,这对于安装hexo是不必要的: …

喵喵喵

笨蛋循环。笨蛋黑白染色。笨蛋欧拉回路。笨蛋欧拉回路!!笨蛋性质。笨蛋反图。笨蛋典题。笨蛋困难难题目。笨蛋猫猫。笨蛋煎蛋。笨蛋,眼睛瞎了。

Ansible自动化管理 - 指南

Ansible自动化管理 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &…

flink不同环境切换 - --

代码: package com.yourcompany.flink; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;import java.util.Properties; /** * 最简版 - 所有代码在一个文件中 */public class Minima…

网站原则广州网站开发公司

RabbitMQ:高效的消息队列中间件及其 PHP 实现 一、什么是 RabbitMQ? RabbitMQ 是一个开源的消息队列中间件,使用 Erlang 编写,遵循 AMQP(Advanced Message Queuing Protocol)协议。它的主要功能是提供一种…

ps-填充色

ps-填充色一、填充颜色用矩形选框选中范围; Ctrl + delete:填充背景色; Alt + delete:填充前景色;不将就,不强求!

PythonStudio_圆的面积demo源代码

# Powered By Python Studio, The best Python GUI IDE to download from glsite.com. import os from glcl import *class Form1(Form):def __init__(self, owner):self.Button3 = Button(self)self.Button2 = Button…

HarmonyOS 5分布式数据同步实战:跨设备待办事项应用

🔧 一、前期准备:配置与权限 在开始编码前,需要进行一些基础配置。模块配置 (module.json5): 在 module.json5文件中申请分布式数据同步权限。 {"module": {"requestPermissions": [{"na…

深入理解HarmonyOS 5的AVSession:构建跨设备媒体播放器

🎯 一、AVSession 概述与核心价值 AVSession(媒体会话)是HarmonyOS分布式媒体控制的核心框架。它允许应用程序将本地播放的媒体信息和控制能力暴露给系统,使得其他设备(如手机、平板、智慧屏)可以发现、查看和控…

Extjs小例子

Extjs小例子 1.监听文本框是否已经修改过xtype : textfield,  fieldLable : 标题,  listeners : {     change : function(field,newValue,oldValue){ alert(newValue+---+oldValue);  …

郑州网站建设怎么样短视频推广方案怎么做

随着半导体技术的不断进步,晶圆制造作为集成电路产业的核心环节,对生产过程的精密性和洁净度要求日益提高。在众多晶圆制造工具中,PFA(全氟烷氧基)晶圆夹以其独特的材质和性能,在近年来逐渐受到业界的广泛关…

HT-AD4PS-1+ 一分四射频功分器:1-500 MHz 小尺寸/低插损,通信、医疗全能打

HT-AD4PS-1+ 一分四射频功分器:1-500 MHz 小尺寸/低插损,通信、医疗全能打成都恒利泰(HenryTech)HT-AD4PS-1+ 是一款全国产化的一分四表贴功分器/合路器,频率覆盖 1-500 MHz,插入损耗≤1.8 dB,体积小巧,可直接…

HarmonyOS资源管理与访问:多分辨率与多语言适配

本文将深入探讨HarmonyOS应用开发中的资源管理机制,重点介绍多分辨率适配和多语言本地化的完整解决方案。1. 资源管理系统架构 HarmonyOS提供了统一的资源管理框架,支持应用资源的分类、访问和适配。资源管理系统采用…

面试官:为什么没有虚拟线程池?

Java 官方文档明确指出:Do not pool virtual threads. 虚拟线程不是昂贵资源,永远不应该被池化。 应该为每个任务创建一个新的虚拟线程,它们应该是短暂的、任务级别的。这是为什么呢?为什么只有虚拟线程 Virtual T…