Unity中URP下额外灯的距离衰减

文章目录

  • 前言
  • 一、额外灯的距离衰减
  • 二、DistanceAttenuation函数的传入参数
    • 1、distanceSqr
    • 2、distanceAndSpotAttenuation
    • 3、_AdditionalLightsAttenuation
    • 4、GetPunctualLightDistanceAttenuation函数
    • 三、DistanceAttenuation函数的程序体


前言

在上一篇文章中,我们分析了额外灯的方向怎么计算。

  • Unity中URP下计算额外灯的方向

在这篇文章中,我们来分析一下额外灯的距离衰减。


一、额外灯的距离衰减

  • 在上一篇文章中,完成了额外灯方向计算后,来到了计算额外光的衰减部分
  • 衰减包括:距离衰减 和 角度衰减
  • 我们这篇文章主要分析 距离衰减

DistanceAttenuation(distanceSqr, distanceAndSpotAttenuation.xy)

在这里插入图片描述


二、DistanceAttenuation函数的传入参数

  • 调用

DistanceAttenuation1(distanceSqr, distanceAndSpotAttenuation.xy)

1、distanceSqr

  • 这个计算光线向量后的点积结果

// Directional lights store direction in lightPosition.xyz and have .w set to 0.0.
// This way the following code will work for both directional and punctual lights.
float3 lightVector = lightPositionWS.xyz - positionWS * lightPositionWS.w;
float distanceSqr = max(dot(lightVector, lightVector), HALF_MIN);

2、distanceAndSpotAttenuation

  • 该参数是通过内置变量获取的
    在这里插入图片描述
  • 该参数是通过C#脚本提前计算好的
    在这里插入图片描述

3、_AdditionalLightsAttenuation

  • 我们来看一下C#是怎么计算得出该参数的

在这里插入图片描述
在这里插入图片描述

  • 衰减默认值(平行光)
    在这里插入图片描述

  • k_DefaultLightAttenuation,默认值为(0,0,0,1)
    在这里插入图片描述

  • 非平行光下,会对衰减值进行修改
    在这里插入图片描述

  • 该函数对衰减值,做出了修改。使衰减值在灯光限制处刚好为0
    在这里插入图片描述

4、GetPunctualLightDistanceAttenuation函数

该函数为以下参数做出准备:

  • Unity使灯光限制处为0的公式:
  • 移动平台(Unity2022已经舍弃): s m o o t h F a c t o r = l i g h t R a n g e S q r − d i s t a n c e T o L i g h t S q r l i g h t R a n g e S q r − f a d e S t a r t D i s t a n c e S q r smoothFactor=\frac{lightRangeSqr - distanceToLightSqr}{lightRangeSqr -fadeStartDistanceSqr} smoothFactor=lightRangeSqrfadeStartDistanceSqrlightRangeSqrdistanceToLightSqr
  • 非移动平台: s m o o t h F a c t o r = ( 1 − ( d i s t a n c e T o L i g h t S q r 1 l i g h t R a n g e S q r ) 2 ) 2 smoothFactor=(1-(distanceToLightSqr\frac{1}{lightRangeSqr})^2)^2 smoothFactor=(1(distanceToLightSqrlightRangeSqr1)2)2

我们来看一下该公式实现了什么

  • l i g h t R a n g e S q r = l i g h t R a n g e ∗ l i g h t R a n g e lightRangeSqr = lightRange * lightRange lightRangeSqr=lightRangelightRange
  • f a d e S t a r t D i s t a n c e S q r = 0.8 f ∗ 0.8 f ∗ l i g h t R a n g e S q r ; fadeStartDistanceSqr = 0.8f * 0.8f * lightRangeSqr; fadeStartDistanceSqr=0.8f0.8flightRangeSqr;(0.8指的是80%开始衰减)
  • d i s t a n c e T o L i g h t S q r :灯光的衰减距离的平方 distanceToLightSqr:灯光的衰减距离的平方 distanceToLightSqr:灯光的衰减距离的平方
    在这里插入图片描述

三、DistanceAttenuation函数的程序体

在这里插入图片描述

  • 移动平台(Unity2022已经舍弃): s m o o t h F a c t o r = l i g h t R a n g e S q r − d i s t a n c e T o L i g h t S q r l i g h t R a n g e S q r − f a d e S t a r t D i s t a n c e S q r smoothFactor=\frac{lightRangeSqr - distanceToLightSqr}{lightRangeSqr -fadeStartDistanceSqr} smoothFactor=lightRangeSqrfadeStartDistanceSqrlightRangeSqrdistanceToLightSqr

  • 可以看出经过该公式计算后,我们的灯光强度在灯光距离限制处刚好为零
    请添加图片描述

  • 非移动平台: s m o o t h F a c t o r = ( 1 − ( d i s t a n c e T o L i g h t S q r 1 l i g h t R a n g e S q r ) 2 ) 2 smoothFactor=(1-(distanceToLightSqr\frac{1}{lightRangeSqr})^2)^2 smoothFactor=(1(distanceToLightSqrlightRangeSqr1)2)2
    请添加图片描述

  • 这样就实现了额外灯的距离衰减效果了
    请添加图片描述

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

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

相关文章

【MAC】Multi-Level Monte Carlo Actor-Critic阅读笔记

基本思想: 利用多层次蒙特卡洛方法(Multi-Level Monte Carlo,MLMC)和Actor-Critic算法,解决平均奖励强化学习中的快速混合问题。 快速混合? 在强化学习中,当我们说一个策略"混合得快"…

HTTP连接池在Java中的应用:轻松应对网络拥堵

网络拥堵是现代生活中无法避免的问题,尤其是在我们这个“点点点”时代,网页加载速度直接影响到我们的心情。此时,我们需要一位“救世主”——HTTP连接池。今天,就让我们一起探讨一下,这位“救世主”如何在Java中大显神…

MongoDB集群搭建(三节点副本集)

软件包安装 0、主机规划 IP地址访问端口10.0.0.2012701710.0.0.2022701810.0.0.20327019 1、MongoDB安装包下载 下载地址:https://www.mongodb.com/try/download/community 版本根据需求选择,Mongodb6.0及以上的版本没有mongo命令 2、上传至服务器&…

el-tree基础的树形节点设置节点不能选中高亮出来,对已经选中的节点设置disabled,对当前节点刚选中后设置禁用disabled

一、 el-tree基础的树形节点设置节点不能选中高亮出来 需求 我们使用element-ui或者element-plus的时候会遇到树形控件的使用,我们使用树形控件会限制有的节点不让选中和高亮出来,这个时候需要我们做限制。在实现中我们发现了element-ui和element-plus…

什么工具能将视频转成gif?分享一个在线制作gif网站

Gif动图看起来效果非常的炫酷,也很复杂。这种gif动图制作起来是不是也很麻烦呢?其实制作gif动画的方法非常的简单,不用下载软件,小白也能操作。只需要使用在线制作gif(https://www.gif.cn/)工具-GIF中文网&…

大数据学习之Flink算子、了解(Source)源算子(基础篇二)

Source源算子(基础篇二) 目录 Source源算子(基础篇二) 二、源算子(source) 1. 准备工作 2.从集合中读取数据 可以使用代码中的fromCollection()方法直接读取列表 也可以使用代码中的fromElements()方…

手机视频压缩怎么压缩?一键瘦身~

现在手机已经成为我们日常生活中必不可少的工具,而在手机的应用领域中,文件的传输和存储是一个非常重要的问题。很多用户都会遇到这样一个问题,那就是在手机上存储的文件太多太大,导致手机存储空间不足,那么怎么在手机…

Flink实现数据写入MySQL

先准备一个文件里面数据有: a, 1547718199, 1000000 b, 1547718200, 1000000 c, 1547718201, 1000000 d, 1547718202, 1000000 e, 1547718203, 1000000 f, 1547718204, 1000000 g, 1547718205, 1000000 h, 1547718210, 1000000 i, 1547718210, 1000000 j, 154771821…

ubuntu1604安装及问题解决

虚拟机安装vmbox7 虚拟机操作: 安装增强功能 sudo mkdir /mnt/share sudo mount -t vboxsf sharefolder /mnt/share第一次使用sudo提示is not in the sudoers file. This incident will be reported 你的root需要设置好密码 sudo passwd root 输入如下指令&#x…

华为ensp--NAT实验

实验拓扑图及实验要求 实验相关配置 为保证可以登录防火墙web界面,需要对FW1、FW2以及Cloud1进行相关配置 Cloud1配置 需绑定网卡(建议新建虚拟网卡),并且与防火墙管理口(默认g0/0/0)属于同一网段 FW1 F…

缓存问题 | 缓存穿透,缓存击穿,缓存雪崩

缓存穿透 关键字:强调缓存和数据库都没有数据并发访问 缓存穿透是指数据库和缓存都没有的数据,每次都要经过缓存去访问数据库,大量的请求有可能导致DB宕机。 应对策略: 使用布隆过滤器(Bloom Filter)&am…

C++力扣题目62--不同路径 63--不同路径II 343--整数拆分 96--不同的二叉搜索树

62.不同路径 力扣题目链接(opens new window) 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。…