Unity中URP下的指数雾

2024-01-04


前言

在之前的文章中,我们实现了URP下的雾效支持 和 在计算雾效时的Z值统一。

  • Unity中URP下的添加雾效支持
  • Unity中URP下统一不同平台下的z值

我们在这篇文章中,来看一下URP下的指数雾是怎么实现的。


一、指数雾 雾效因子

在这里插入图片描述

  • 主要使用之前文章中统一好的z值,来计算来计算雾效混合因子。
  • 传入上一篇文章中,统一好的[0,Far]之间的z值。
  • unity_FogParams.x:就是公式中雾的浓度 d e n s i t y density d e n s i t y
  • 最后,该函数返回的,只是雾效混合因子公式中的 d e n s i t y ∗ z density*z d e n s i t y z

1、FOG_EXP

  • 公式: f o g F a c t o r = e − d e n s i t y ∗ z fogFactor = e^{-density*z} f o g F a c t or = e d e n s i t y z
    density:雾的浓度值
    z:物体的深度值
    在这里插入图片描述
    请添加图片描述
  • 定义域[0,1]
  • 可以由函数看出雾浓度越大,雾效混合因子越小,在线性插值时,雾就越浓。

2、FOG_EXP2

  • 公式: f o g F a c t o r = e − ( d e n s i t y ∗ z ) 2 fogFactor = e^{-(density*z)^2} f o g F a c t or = e ( d e n s i t y z ) 2
    density:雾的浓度值
    z:物体的深度值
    在这里插入图片描述
    请添加图片描述
  • 定义域[0,1]
  • 可以由函数看出雾浓度越大,雾效混合因子越小,在线性插值时,雾就越浓。

二、MixFog

  • 在片元着色器中,在 雾颜色 和 物体实际颜色之间,使用雾效混合因子控制线性插值
    在这里插入图片描述

1、ComputeFogIntensity 雾效强度计算

  • exp2(x) 代替 exp(x)
    exp2(x) 是 2 x 2^x 2 x
    exp(x)是 e x e^x e x

使用exp2(x) 代替 exp(x) 的原因:
这两个函数在[0,1]之间函数值近似,用 2 x 2^x 2 x 代替 e x e^x e x 可以节省性能
在这里插入图片描述

  1. FOG_EXP
  • 公式 f o g F a c t o r = e − d e n s i t y ∗ z fogFactor = e^{-density*z} f o g F a c t or = e d e n s i t y z
  • 上面计算出了 fogFactor = density*z
  • 带入后: e x p 2 ( − f o g F a c t o r ) exp2(-fogFactor) e x p 2 ( f o g F a c t or )
  • saturate:限制结果在0 ~ 1之间
    在这里插入图片描述
  1. FOG_EXP2
  • 公式: f o g F a c t o r = e − ( d e n s i t y ∗ z ) 2 fogFactor = e^{-(density*z)^2} f o g F a c t or = e ( d e n s i t y z ) 2
  • 上面计算出了 fogFactor = density*z
  • 带入后: e x p 2 ( − f o g F a c t o r ∗ f o g F a c t o r ) exp2(-fogFactor*fogFactor) e x p 2 ( f o g F a c t or f o g F a c t or )
  • saturate:限制结果在0 ~ 1之间
    在这里插入图片描述

2、lerp(fogColor, fragColor, fogIntensity);雾效颜色混合

在这里插入图片描述
这里线性插值顺序有点反直觉
雾效强度越大,越偏向物体实际颜色
雾效强度越小,越偏向雾的颜色

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity中URP下的指数雾 的相关文章

  • Unity 分块延迟渲染01 (TBDR)

    现代移动端图形体系结构的概述 现代SoC通常会同时集成CPU和GPU CPU被用于处理需要低内存延迟的序列 大量分支的数据集 其晶体管用于流控制和数据缓存 GPU为处理大型 未分支的数据集 如3D渲染 晶体管专用于寄存器和算术逻辑单元 而不
  • Unity中级客户端开发工程师的进阶之路

    上期UWA技能成长系统之 Unity高级客户端开发工程师的进阶之路 得到了很多Unity开发者的肯定 通过系统的学习 可以掌握游戏性能瓶颈定位的方法和常见的CPU GPU 内存相关的性能优化方法 UWA技能成长系统是UWA根据学员的职业发展
  • FBX导入Unity中模型没有材质的处理

    一 3dMax导出FBX时的注意事项 导出时 确保maps文件存在 里面放着fbx用到的image 二 在Unity中的设置 1 文件拖入Unity的Assets文件夹中 2 查看模型的材质是否存在 如下所示 材质为None 此时拖入sce
  • Unity动画控制器animator.CrossFade

    需要特别注意 1 CrossFade虽然可以不用任何逻辑来链接而直接跳转 但是CrossFade只能覆盖其他动画 当当前动画播放完毕而没有跳出这个动画时再次调用CrossFade将会失败 造成动画依旧停在原位 参数animator Cros
  • Unity中按钮检测鼠标状态

    改方法主要是用于按钮检测鼠标的进入 滑出 点击 抬起 长按 长按停止 1 先将下面这个脚本挂载到需要检测鼠标状态的按钮上 using System Collections using System Collections Generic u
  • Unity与Android的Back键冲突解决

    Unity与Android的Back键冲突解决 上一篇的最后留下了两个问题 Unity视图下横屏闪退 Unity视图下Android无法响应back返回上一activity 对于第一个问题 应该是Unity横屏下视图的某些设置跟Androi
  • Unity 键盘控制人物移动——之输入方式代码的编写

    键盘输入 控制人物移动 在我们制作游戏中最常见的需求之一就是使用键盘移动游戏角色 那么我们首先需要获取键盘输入 以下提供两种方法获取键盘 这里尽量通过截图解释让大家理解代码的含义 GetInput void FixedUpdate Move
  • Unity打开工程时卡住的问题

    自从Unity升级了一个版本后 Unity打开工程卡住的问题越来越严重了 具体表现为 选择工程后 Unity窗口消失 但进程还在 有时候等个几分钟能出来 有时候等10分钟都不见得能出来 直观感受上看 似乎是Unity加载工程的时候某一步卡了
  • Unity保存图片到相册

    Unity保存图片到Android相册 Java 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
  • unity 性能查看工具Profiler

    文章目录 前言 profiler工具介绍 菜单栏 帧视图 模块视图 模块详细信息 通过profiler分析优化游戏性能 最后 前言 每次进行游戏优化的时候都用这个工具查看内存泄漏啊 代码优化啊之类的东西 真的好用 但是之前也就是自己摸索一下
  • 【Unity步步升】监控与检测物体的各种方案,如:射线、碰撞、挂载等...

    在制作AR模型数值控制方案的时候遇到了检测的问题 学习过程受益匪浅 故今天为大家整理带来一篇监控与检测物体的参考方案集合 目录 一 射线检测 二 物体存在检测 三 碰撞检测 一 射线检测 单射线检测 首先完成搭建场景如下图1 1 我这里用到
  • unity3d切换场景Application.LoadLevel(1)含义

    Application LoadLevel 1 场景ID
  • unity3d image组件不显示

    需要将UI组件放到画布下面
  • 【转载】【Unity】WebSocket通信

    1 前言 Unity客户端常用的与服务器通信的方式有socket http webSocket 本文主要实现一个简单的WebSocket通信案例 包含客户端 服务器 实现了两端的通信以及客户端向服务器发送关闭连接请求的功能 实现上没有使用U
  • Unity学习笔记

    一 旋转欧拉角 四元数 Vector3 rotate new Vector3 0 30 0 Quaternion quaternion Quaternion identity quaternion Quaternion Euler rota
  • VS2022 | 显示Unreal Engine日志

    VS2022 显示Unreal Engine日志 视图 gt 其他窗口 gt Unreal Engine日志 视图 gt 其他窗口 gt Unreal Engine日志
  • 游戏开发常见操作梳理之NPC任务系统

    多数游戏存在任务系统 接下来介绍通过NPC触发任务的游戏制作代码 using System Collections using System Collections Generic using UnityEngine
  • 游戏开发创建操作之玩家信息系统的建立

    游戏一般都需要玩家信息系统 那么我们应该如何搭建玩家信息系统 接下来我将展示一种简单的方法 完整代码如下 using System Collections using System Collections Generic using Uni
  • 游戏开发常见操作梳理之NPC药品商店系统(NGUI版)

    后续会出UGUI Json的版本 敬请期待 游戏开发中经常会出现药品商店 实际操作与武器商店类似 甚至根据实际情况可以简化设置 废话不多说 直接上代码 药品商店的源码 using System Collections using Syste
  • 游戏开发常用实践操作之按动任意键触发

    接下来一些笔记会对于一些大大小小的实践操作进行记录 希望对你有所帮助 在游戏中 我们经常会遇到一些按动任意键触发的操作 接下来展示核心代码 以下是对于Unity中的操作 使用的UI是NGUI 对于核心操作没有影响 你可以自己置换 void

随机推荐

  • element ui backTop源码解析-逐行逐析

    backTop 回到顶部 组件简介 基础概念 返回页面顶部的操作按钮 代码
  • (vue)el-popover鼠标移入提示效果

    vue el popover鼠标移入提示效果 效果 代码
  • Cannot locate tasks that match ‘:shared:testClasses‘ as task ‘testClasses‘ not found in project

    问题 在使用Gradle构建项目时 遇见了一个奇怪的问题 运行报错如下 Cannot locate tasks that match shared testClasses as task testClasses not found in p
  • Multipath多路径管理基础介绍与安装配置使用

    0x00 前言简述 Q 什么是Multipath多路径 答 Multipath I O 电脑储存技术 指利用两个以上的路径同时在CPU与储存设备之间传送讯号 以达到侦错与强化效能的目的 简单的说当 服务器 到某一存储设备有多条路径时 每条路
  • @AutoConfigurationPackage,@ComponentScan注解,bean的注册

    一 AutoConfigurationPackage ComponentScan注解 二 spring加载流程之ConfigurationClassPostProcessor 三 判断是否是配置类 四 扫描配置类 五 注册bean
  • 天翼运行高校云盘在线扩容

    天翼云文档地址 https www ctyun cn document 10027696 10169558 1 输入 growpart命令 检查此云主机是否已安装growpart扩容工具 若出现图中回显信息 则说明已经安装 无需手动安装 注
  • 说说Java对象创建过程

    Java对象创建过程主要包括以下几个步骤 分配内存 Java虚拟机 JVM 为新对象分配内存 这通常涉及到在堆内存中分配一块足够大的空间来存储对象 构造函数调用 在分配内存后 Java对象的构造函数被调用 这是Java对象的一个特殊方法 它
  • 任意版本JLink驱动官方下载详解

    任意版本JLink驱动官方下载详解 csdn song123 于 2023 09 21 09 19 07 发布 阅读量1 5k 收藏 3
  • 看这里!分享3个有关iPhone照片恢复的好用方法!

    手机照片可以记录下我们所经历的点点滴滴 为我们留下宝贵的生活记忆 因此 我们应该珍惜并妥善保管这些照片 但在使用手机的过程中难免会发生意外 手机照片丢失了怎么办 别着急 今天 小编将为大家介绍有关iPhone照片恢复的3种简单方法 有需要的
  • openEuler NFS多路径

    简介 网络文件系统 NFS 是一种分布式文件系统协议 最初由 Sun Microsystems Sun 于 1984 年开发 允许NFS客户端上的用户通过计算机网络访问NFS服务端上文件 随着NFS服务广泛应用于金融 EDA AI 容器等行
  • 105.mysql8.0.30之后REDO日志的管理有所不同-#innodb_redo 目录

    1 mysql8 0 30之后REDO日志的管理有所不同 innodb redo 目录 1 mysql8 0 30之前 redo日志由两个参数管理 innodb log file size 100M innodb log files in
  • brew 安装使用 mysql、redis、mongodb

    在 Mac 生态中 brew 真是个万能神器 今天就来介绍一下怎么使用 brew 安装 mysql redis mongodb 以及如何使用 brew 启动 关闭 重启这些服务 前言 brew 常用命令 查看brew的版本 brew v 更
  • 基于SpringBoot的社区医院管理系统

    文章目录 项目介绍 主要功能截图 部分代码展示 设计总结 项目获取方式 作者主页 超级无敌暴龙战士塔塔开 简介 Java领域优质创作者 简历模板 学习资料 面试题库 关注我 都给你 文末获取源码联系 项目介绍 基于SpringBoot的社区
  • 【操作系统xv6】学习记录4-一级页表与二级页表

    占位
  • java SSM图片管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

    一 源码特点 java SSM图片管理系统是一套完善的web设计系统 系统采用SSM框架进行设计开发 spring springMVC mybatis 对理解JSP java编程开发语言有帮助 系统具有完整的源代码和 数据库 系统主要采用B
  • Linux习题2

    解析 虚拟内存是计算机系统内存管理的一种技术 它使得应用程序认为它拥有连续可用的内存 使得每个进程看到的内存空间一致 解析 所谓系统调用 就是内核提供的 功能十分强大的一系列的函数 这些系统调用是在内核中实现的 再通过一定的方式把系统调用给
  • 基于WEB的教学辅助系统的设计与实现

    随着计算机和网络技术的飞速发展 人们传统的生活 工作和学习方式正在发生深刻变革 长久以来 各行各业的教学以传统的课堂讲授为主 效果受到诸多限制 因此 随着在线辅助教学及行业信息化的普及 构建信息交互平台的重要性日益凸显 为了提高教育质量 充
  • 可狱可囚的爬虫系列课程 09:通过 API 接口抓取数据

    前面已经讲解过 Requests 结合 BeautifulSoup4 库抓取数据 这种方式在抓取数据时还是比较方便快捷的 但是这并不意味着所有的网站都适合这种方式 并且这也不是抓取数据的最快方式 今天我们来讲一种更快速的获取数据的方式 通过
  • SSM知识点铺垫--Http工作原理?

    HTTP Hypertext Transfer Protocol 是一种用于在网络上传输超文本的协议 它是一个无状态的协议 意味着每次请求之间没有保留状态 HTTP的工作原理涉及客户端和服务器之间的通信 主要包括请求 Request 和响应
  • Unity中URP下的指数雾

    文章目录 前言 一 指数雾 雾效因子 1 FOG EXP 2 FOG EXP2 二 MixFog 1 ComputeFogIntensity 雾效强度计算 2 lerp fogColor fragColor fogIntensity 雾效颜