Unity中URP下统一不同平台下的z值

news2025/5/28 6:43:54

文章目录

  • 前言
  • 一、ComputeFogFactor 来计算雾效混合因子
  • 二、UNITY_Z_0_FAR_FROM_CLIPSPACE 来统一计算不同平台下的Z值
    • 1、DirectX平台
    • 2、GL平台下(在Unity.2022.LTS下,该功能没有完善)
    • 3、Opengl下


前言

在之前的文章中,我们实现了URP下的雾效。

  • Unity中URP下的添加雾效支持

我们在这篇文章中,看一下Unity在URP下,计算雾效因子时是怎么统一Z值的。


一、ComputeFogFactor 来计算雾效混合因子

在这里插入图片描述


二、UNITY_Z_0_FAR_FROM_CLIPSPACE 来统一计算不同平台下的Z值

在这里插入图片描述

  • UNITY_REVERSED_Z(DX类平台都为1,其他平台都为0)
  • UNITY_UV_STARTS_AT_TOP(DX类平台都为1,其他平台都为0)
    (这个的作用应该是防止出现什么奇怪的平台时,对传入的Z值不做处理)

1、DirectX平台

  • 我们看一下反转过Z值的类DirectX平台,在处理雾效因子时,Z值是怎么处理的。
  • [near, 0] -> remapping to [0, far]

//D3d with reversed Z => z clip range is [near, 0] -> remapping to [0, far]
//max is required to protect ourselves from near plane not being correct/meaningful in case of oblique matrices.
#define UNITY_Z_0_FAR_FROM_CLIPSPACE(coord) max(((1.0-(coord)/_ProjectionParams.y)*_ProjectionParams.z),0)

n ≤ z ≤ 0 n \leq z \leq0 nz0

n − n ≤ z − n ≤ 0 − n n - n \leq z - n\leq0 - n nnzn0n

0 ≤ z − n ≤ − n 0 \leq z - n\leq- n 0znn

0 ≤ ( z − n ) 1 − n ≤ − n 1 − n 0 \leq (z - n)\frac{1}{-n}\leq- n\frac{1}{-n} 0(zn)n1nn1

0 ≤ z − n − n ≤ 1 0 \leq \frac{z - n}{-n}\leq1 0nzn1

0 ≤ z − n − n f ≤ f 0 \leq \frac{z - n}{-n}f\leq f 0nznff

0 ≤ n − z n f ≤ f 0 \leq \frac{n - z}{n}f\leq f 0nnzff

0 ≤ ( n n − x n ) f ≤ f 0 \leq (\frac{n}{n}-\frac{x}{n})f\leq f 0(nnnx)ff

0 ≤ ( 1 − x n ) f ≤ f 0 \leq (1-\frac{x}{n})f\leq f 0(1nx)ff

  • 最后得出的公式是和我们Unity中使用的公式是一致的
    0 ≤ ( 1 − x n ) f ≤ f 0 \leq (1-\frac{x}{n})f\leq f 0(1nx)ff

max(((1.0-(coord)/_ProjectionParams.y)*_ProjectionParams.z),0)

  • _ProjectionParams在Unity中的定义
    在这里插入图片描述

2、GL平台下(在Unity.2022.LTS下,该功能没有完善)

  • 在GL平台下,我们也需要对Z值进行重映射
  • [near, -far] -> remapping to [0, far]

//GL with reversed z => z clip range is [near, -far] -> remapping to [0, far]
#define UNITY_Z_0_FAR_FROM_CLIPSPACE(coord) max((coord - _ProjectionParams.y)/(-_ProjectionParams.z-_ProjectionParams.y)*_ProjectionParams.z, 0)

n ≤ z ≤ − f n \leq z \leq-f nzf

n − n ≤ z − n ≤ − f − n n -n\leq z -n \leq-f - n nnznfn

0 ≤ z − n ≤ − f − n 0\leq z -n \leq-f - n 0znfn

0 ≤ ( z − n ) 1 − f − n ≤ − ( f + n ) 1 − f − n 0\leq (z -n) \frac{1}{-f-n}\leq-(f + n)\frac{1}{-f-n} 0(zn)fn1(f+n)fn1

0 ≤ z − n − f − n ≤ 1 0\leq \frac{z-n}{-f-n}\leq1 0fnzn1

0 ≤ z − n − f − n f ≤ f 0\leq \frac{z-n}{-f-n}f\leq f 0fnznff

  • 最后得出的公式是和我们Unity中使用的公式是一致的
    0 ≤ z − n − f − n f ≤ f 0\leq \frac{z-n}{-f-n}f\leq f 0fnznff

max((coord - _ProjectionParams.y)/(-_ProjectionParams.z-_ProjectionParams.y)*_ProjectionParams.z, 0)

3、Opengl下

  • 在OpenGL平台下,我们
  • [-near, far] -> remapping to [0, far]

//Opengl => z clip range is [-near, far] -> remapping to [0, far]
#define UNITY_Z_0_FAR_FROM_CLIPSPACE(coord) max(((coord + _ProjectionParams.y)/(_ProjectionParams.z+_ProjectionParams.y))*_ProjectionParams.z, 0)

− n ≤ z ≤ f -n \leq z \leq f nzf

− n + n ≤ z + n ≤ f + n -n +n \leq z+n \leq f+n n+nz+nf+n

0 ≤ z + n ≤ f + n 0\leq z+n \leq f+n 0z+nf+n

0 ≤ z + n 1 f + n ≤ ( f + n ) 1 f + n 0\leq z+n\frac{1}{f+n}\leq (f+n)\frac{1}{f+n} 0z+nf+n1(f+n)f+n1

0 ≤ ( z + n ) 1 f + n ≤ 1 0\leq (z+n)\frac{1}{f+n}\leq 1 0(z+n)f+n11

0 ≤ ( z + n ) 1 f + n f ≤ f 0\leq (z+n)\frac{1}{f+n}f\leq f 0(z+n)f+n1ff

  • 最后得出的公式是和我们Unity中使用的公式是一致的
    0 ≤ ( z + n ) 1 f + n f ≤ f 0\leq (z+n)\frac{1}{f+n}f\leq f 0(z+n)f+n1ff

max(((coord + _ProjectionParams.y)/(_ProjectionParams.z+_ProjectionParams.y))*_ProjectionParams.z, 0)

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

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

相关文章

企业培训系统开发:构建灵活高效的学习平台

企业培训系统的开发在当今数字化时代是至关重要的。本文将介绍一些关键技术和代码示例,以帮助您构建一个灵活、高效的企业培训系统。 1. 技术选型 在开始企业培训系统的开发之前,首先需要选择合适的技术栈。以下是一个基本的技术选型示例:…

【mars3d】FixedRoute的circle没有跟polyline贴着模型的解决方案

问题:【mars3d】官网的贴模型示例中,参考api文档增加了circle的配置,但是FixedRoute的circle没有跟polyline贴着模型 circle: { radius: 10, materialType: mars3d.MaterialType.CircleWave, materialOptions: { color: "#ffff00"…

柱面,盘片,盘面,扇面,磁头,磁道,扇区,CHS地址,LAB地址

柱面,盘片,盘面,扇面,磁头,磁道,扇区,CHS地址,LAB地址1 CHS地址 CHS地址指的是柱面(Cylinder)、磁头(Head)、扇区(Secto…

新年话节能 电梯也减排

小伍恭祝大家2024年元旦快乐!! 目前,电梯的节能已经得到业界的广泛重视,积极推动相关的节能技术的实施,努力宣传和倡导规范的电梯的使用行为,将极大地改变我国电梯的耗能状况,为节能减排做出较大…

Linux进程管理和计划任务

前言 上篇关于进程管理命令使用说明尚未完结,本篇将继续介绍相关命令以及计划任务管理。 目录 前言 一、控制进程 1. vmstat 2. free 3. iostat 4. iotop/iftop 5. uptime 6. mpstat 7. dstat 8. webadin 9. 服务器五大性能 二、进程管理 1. 手动…

SemCms外贸网站商城系统 SQL注入漏洞复现(CVE-2023-50563)

0x01 产品简介 SemCms是国内团队打造的专门针对外贸网站的开源CMS,主要用于外贸企业,兼容IE,Firefox等主流浏览器。建设商城性质的外贸网站,多语言(小语种)网站。 0x02 漏洞概述 SemCms外贸网站商城系统SEMCMS_Function.php 中的 AID 参数存在SQL注入漏洞,未经身份认…

Zuul相关面试题及到案(2024)

1、什么是Zuul?它在微服务架构中有什么作用? Zuul是Netflix开源的一种提供API网关服务的应用程序,它在微服务架构中扮演着流量的前门角色。主要功能包括以下几点: 路由转发:Zuul网关将外部请求转发到具体的微服务实例…

【QT】中英文切换

很高兴在雪易的CSDN遇见你 前言 本文分享QT中如何进行中英文切换,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U&#xff3e…

EtherCAT FP介绍系列文章—热插拔

EtherCAT主站能够顺利初始化和操作网络,离不开EtherCAT网络信息文件(ENI),它包含与EtherCAT主站本机以及连接到主站上每个从站设备的配置一般性信息。该文件由配置工具创建,并由EtherCAT主站程序加载,如下图…

由于无法找到mfc100u.dll怎么解决,mfc100u.dll丢失的6个解决方法分享

本文将为您详细介绍mfc100u.dll文件以及丢失时的六个不同解决方法,帮助您更好地了解和解决这一问题。 一、mfc100u.dll是什么文件? mfc100u.dll是Microsoft Foundation Classes(微软基础类库)中的一个动态链接库文件。它是Visua…

AI的突破与融合:2024年中国智能技术的新纪元_光点科技

随着人工智能领域的不断突破,2024年注定将成为中国智能技术发展的一个新纪元。当下,AI技术不仅在理论研究上取得了重大进展,其在商业应用、社会服务等领域的融合也日益深入。本文将结合近期网络上的AI热点,展望中国在AI技术方面的…

印象笔记03 衍生软件使用

印象笔记03 衍生软件使用 Verse 以下内容来源于官方介绍 VERSE是一款面向未来的智能化生产力工具,由印象笔记团队诚意推出。 你可以用VERSE: 管理数字内容,让信息有序高效运转;搭建知识体系,构建你的强大知识库&am…

SwiftUI 打造一款“可收缩”的 HStack(一)

概览 拥有雄心壮志(亦或是自我感觉良好)的秃头码农们都喜欢接受编程上各种颇有难度的挑战,比如刷刷力扣(LeetCode)或 codeforces 上难题啥的。 为了满足小伙伴们的“冒险精神”(亦或是“自虐癖”),加上这篇博文我们会用连续 4 篇系列文章通过不同的方式来解决同一道与…

倍思科技红海突围要义:紧随新趋势,“实用而美”理念从一而终

移动数码周边市场始终不缺热度。 销售端是业绩的节节高升,如在2023年京东双十一,移动数码周边产品销售成果丰硕,根据京东战报,大功率充电器成交额同比提升 200%,65W以上移动电源成交额同比提升 150%,自带线…

[实用小知识]:Google浏览器添加代理SwitchyOmega

Google浏览器添加代理SwitchyOmega 1. 下载插件到本地 SwitchyOmega_2.5.21.crx OmegaOptions_20230615.bak 2. 开始配置Google代理 1、打开Google浏览器,点开右上角三个点,在更多工具里选择扩展程序 2、在扩展程序里打开开发者模式 3、将Google文件…

世微AP5125 外置MOS管5-100V 8A平均电流型LED降压恒流驱动器 SOT23-6

产品描述 AP5125 是一款外围电路简单的 Buck 型平均电流检测模式的 LED 恒流驱动器,适用于 8-100V 电压范围的非隔离式大功率恒流 LED 驱动领域。芯片采用固定频率 140kHz 的 PWM 工作模式, 利用平均电流检测模式,因此具有优异的负载调整 率特…

windows x86 calling convention

stdcall 全部压入栈里面 第一个参数最后一个入栈(在栈顶) fastcall ecx edx前两个 后面的压栈,顺序和stdcall一样

【代数学作业1-python实现GNFS一般数域筛】构造特定的整系数不可约多项式:涉及素数、模运算和优化问题

代数学作业1-完整版:python实现GNFS一般数域筛 写在最前面背景在GNFS算法中选择互质多项式时,需要考虑哪些关键因素,它们对算法的整体运行时间有何影响? 练习1题目题目分析Kleinjung方法简介通用数域筛法(GNFS)中的多…

Linux——搭建KVM环境

KVM虚拟化 一、安装所需软件 1、yum安装软件 [rootlocalhost ~]# yum -y install qemu-kvm qemu-kvm-tools virt-install qemu-img bridge-utils libvirt virt-manager 重新启动 [rootlocalhost ~]reboot 2、查看CPU是否支持虚拟化 [rootlocalhost ~]# cat /proc/cpuinf…

清风数学建模笔记-时间序列分析

内容:时间预测分析 一.时间序列 1.时点时间序列 2.时期时间序列:可相加 二.时间趋势分解 1.季节趋势 拓展:百度指数: 2.循环变动趋势(和季节很像但是是以年为单位) 3.不规则变动趋势(像扰…