urp SpotLight 衰减方式扩展

news2025/1/12 18:17:14

背景

解决默认spotLight 的衰减模式下, 在距离灯光特别近的时候,灯光过爆的情况

解决方法

修改SpotLight的衰减方式

下图是unity给出的几种衰减模式以及图示:

其中InverseSquare是当前2021.2 unity版本中urp(12.1.6)所使用的衰减方案

该衰减方案在图中可以看出 在距离最近的地方, 颜色有点过于爆。

为了方便项目在其他场景的时候, 添加了Legacy和Linear的衰减方案, 以供选择。

核心代码修改:RealtimeLights.hlsl中的DistanceAttenuation方法。

// 在原代码的基础上,添加了attenType , 用来标识当前灯光所使用的衰减方案

// 0 : InverseSquare , 1 : Linear , 2 :Legacy

// 在原代码的基础上,添加了attenType , 用来标识当前灯光所使用的衰减方案
// 0 : InverseSquare , 1 : Linear , 2 :Legacy
float DistanceAttenuation(float distanceSqr, half2 distanceAttenuation, half attenType = 0)
{
    // We use a shared distance attenuation for additional directional and puctual lights
    // for directional lights attenuation will be 1
    float lightAtten = rcp(distanceSqr);
    float2 distanceAttenuationFloat = float2(distanceAttenuation);

#if SHADER_HINT_NICE_QUALITY
    // Use the smoothing factor also used in the Unity lightmapper.
    half factor = half(distanceSqr * distanceAttenuationFloat.x);
    half smoothFactor = saturate(half(1.0) - factor * factor);
    smoothFactor = smoothFactor * smoothFactor;
#else
    // We need to smoothly fade attenuation to light range. We start fading linearly at 80% of light range
    // Therefore:
    // fadeDistance = (0.8 * 0.8 * lightRangeSq)
    // smoothFactor = (lightRangeSqr - distanceSqr) / (lightRangeSqr - fadeDistance)
    // We can rewrite that to fit a MAD by doing
    // distanceSqr * (1.0 / (fadeDistanceSqr - lightRangeSqr)) + (-lightRangeSqr / (fadeDistanceSqr - lightRangeSqr)
    // distanceSqr *        distanceAttenuation.y            +             distanceAttenuation.z
    half smoothFactor = half(saturate(distanceSqr * distanceAttenuationFloat.x + distanceAttenuationFloat.y));
#endif
    if(attenType == 2)
    {
        return smoothFactor * smoothFactor;
    }
    return lerp( lightAtten*smoothFactor, smoothFactor , attenType);
    
}

attenType 怎么来的?

urp工程中每个light组件下都会有一个UniversalAdditionLight的脚本, 我们可以在这个脚本中添加AttenType并且把数值传递到RealtimeLight中。

数值的传递在脚本ForwardLights中,详细的可以看代码进行扩展。

最终结果:

通过挂接脚本, 来修改当前灯光的AttenType,从而实现spotLight衰减方式的更换

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

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

相关文章

相恨见晚的办公插件神器,颠覆我们对辅助工具的认知

不坑盒子 这是一个非常好用的插件工具,专门应用在Word文档和wps,支持Office 2010以上的版本,操作也简单且实用。 不坑盒子下载及使用说明 一键排版功能 像是下面的自动排版功能,可以在配置里面先设定好需要的格式,…

结合java中的锁聊聊锁的本质

在操作系统里面,也会遇到什么信号量、互斥量,然后说利用互斥量、信号量可以实现锁的功能,而操作系统提供的原语有又mutex锁在学习数据库的时候,什么表锁、行锁、读锁、写锁、排它锁、意向锁、meta锁等等,各种各样的锁的…

mysql数据库limit的四种用法

文章目录前言一、语法二、参数说明三、常用示例-4种用法总结前言 mysql数据库中limit子句可以被用于强制select语句返回指定的记录数。limit接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量&#xff0c…

实践数据湖iceberg 第四十一课 iceberg的实时性-业界的checkpoint配置

系列文章目录 实践数据湖iceberg 第一课 入门 实践数据湖iceberg 第二课 iceberg基于hadoop的底层数据格式 实践数据湖iceberg 第三课 在sqlclient中,以sql方式从kafka读数据到iceberg 实践数据湖iceberg 第四课 在sqlclient中,以sql方式从kafka读数据到…

硬件系统工程师宝典(12)-----EMC应该知道的事

各位同学大家好,欢迎继续做客电子工程学习圈,今天我们继续来讲这本书,硬件系统工程师宝典。上篇我们说到在做电源完整性分析时去耦电容要遵循的规则,大电容的去耦半径大,小电容的去耦半径小,电容焊盘扇出时…

2023年java春招面试题及答案

2023年java春招面试题1、下面有关jdbc statement的说法错误的是?2、下面有关JVM内存,说法错误的是?3、下面有关servlet service描述错误的是?4、下面有关servlet和cgi的描述,说法错误的是?5、下面有关SPRIN…

Radio Link Monitoring(RLM)

欢迎关注微信同步公众号“modem协议笔记”。 这篇看下radio link monitoring相关的内容,就是UE进行DL radio link quality监听的规定,这部分与RLF的判定息息相关。市面上讲NR相关的书籍,多少都会涉及这部分内容,可能spec上这块的…

pdf免费转换工具,只需记住这3款就够了

PDF格式的文档在人们的办公过程中扮演着非常重要的角色,而PDF格式的文档之所以受到人们的青睐,是因为它不容易被篡改,可以用多种阅读器打开浏览。然而,在实际的应用过程中,我们不仅需要阅读PDF文档,也经常还…

HTTP压力测试概论

常用的HTTP服务压测工具介绍 在项目正式上线之前,我们通常需要通过压测来评估当前系统能够支撑的请求量、排查可能存在的隐藏bug,同时了解了程序的实际处理能力能够帮我们更好的匹配项目的实际需求,节约资源成本。 HTTP服务压力测试工具 在…

如何使用403bypasser绕过目标页面上的访问控制限制

关于403bypasser 403bypasser是一款自动化工具,该工具能够以自动化的形式实现针对目标页面的访问控制限制绕过技术。403bypasser项目目前仍处于积极开发阶段,并且还会增加新的功能。 该工具基于Python语言开发,因此具备良好的跨平台特性。 …

最好的 QML 教程,让你的代码飞起来!

想必大家都知道,亮哥一直深耕于 CSDN,坚持了好很多年,目前为止,原创已经 500 多篇了,一路走来相当不易。当然了,中间有段时间比较忙,没怎么更新。就拿 QML 来说,最早的一篇文章还是 …

基于云服务器的hexo博客搭建(稳)

文章目录序一、前置工具的准备域名购买及服务器购买二、搭建步骤1.配置服务器环境2.nginx 的配置4.git 及node.js安装1.安装node.js:2.安装Git及配置仓库1.安装git:5.本地主机配置(这里winr ,cmd,打开命令行操作)1.安装node.js2.安…

c++11 标准模板(STL)(std::unordered_set)(十二)

定义于头文件 <unordered_set> template< class Key, class Hash std::hash<Key>, class KeyEqual std::equal_to<Key>, class Allocator std::allocator<Key> > class unordered_set;(1)(C11 起)namespace pmr { templ…

【计算机二级python】综合题目

计算机二级python真题 文章目录计算机二级python真题文本文件“红楼梦. txt”中包含了《红楼梦》小说前20章内容&#xff0c;“ 停用词. txt”包含了需要排除的词语。请修改模板&#xff0c;实现以下功能。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪…

【安卓】安卓设备实现wifi display解决方案

看文章前&#xff0c;我们需要知道的几个概念&#xff1a; 1、Wifi Direct技术&#xff1b; 2、Wifi Display技术&#xff1b; 3、Miracast标准&#xff1b; 安卓手机用户都知道我们的安卓手机有一个wifi直连功能&#xff0c;在点击设置–》WIFI–》更多Wifi设置–》Wifi直连&a…

回顾2-JAVA的标识符和关键词

JAVA的标识符和关键词 标识符概念: 所有地方都需要名称 如: 类的名字>类名 如:变量的名字,方法的名字,特殊关键词语的名字 这些符号就是一种标识, 涵盖一些意思 简单理解, 就是一种标记,识别,的符号关键词 这些词语, 在JAVA程序中, 被赋予了特殊的意义, 使用时候要避开同名…

编写SPI设备驱动程序

编写SPI设备驱动程序 文章目录编写SPI设备驱动程序参考资料&#xff1a;一、 SPI驱动程序框架二、 怎么编写SPI设备驱动程序2.1 编写设备树2.2 注册spi_driver2.3 怎么发起SPI传输2.3.1 接口函数2.3.2 函数解析致谢参考资料&#xff1a; 内核头文件&#xff1a;include\linux\s…

Python实现GWO智能灰狼优化算法优化BP神经网络回归模型(BP神经网络回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。1.项目背景灰狼优化算法(GWO)&#xff0c;由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种群智能优…

Shell高级——Linux中的文件描述符的本质(数组的下标)

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 前言 Linux中一切接文件&#xff0c;比如 C 源文件、视频文件、Shell脚本、可执行文件等&#xff0c;就连键盘、显示器、鼠标等硬件设备也都是文件。 一个 Linux 进程可以打开成百上…

第15天-商城系统架构,首页渲染三级分类及搭建域名访问商城

1.商城系统介绍 1.1.技术方案 前后端分离服务端模板渲染&#xff08;选择&#xff09;商品详情页面静态化改造&#xff08;优化&#xff09; 1.2.动静分离架构 2.模板引擎Thymeleaf 2.1.Thymeleaf介绍 官方文档&#xff1a;https://www.thymeleaf.org/doc/tutorials/3.0/usin…