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

文章目录

  • 前言
  • 一、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.mzph.cn/news/595210.shtml

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

相关文章

电动汽车BMS PCB制板的技术分析与可制造性设计

随着电动汽车行业的迅猛发展,各大厂商纷纷投入巨资进行技术研发和创新。电动汽车的核心之一在于其电池管理系统(Battery Management System, BMS),而BMS的心脏则是其印刷电路板(PCB)。通过这篇文章探讨电动…

Graphics Control

Graphics Control提供了一个易于使用的图形设置管理解决方案,帮助您加快开发。它附带了一个常用设置库,如分辨率、垂直同步、全屏模式、光晕、颗粒、环境光遮挡等。我们的可自定义设置面板UI预制件为您提供了一个可用的UI面板,支持完整的游戏手柄和键盘输入。图形控制还附带…

Spark---RDD介绍

文章目录 1.Spark核心编程2.RDD介绍2.1.RDD基本原理2.2 RDD特点1.弹性2.分布式 :数据存储在大数据集群的不同节点上3.数据集 :RDD封装了计算逻辑,并不保存数据4.数据抽象 :RDD是一个抽象类,具体实现由子类来实现5. 不可…

CCF模拟题 202312-1 仓库规划

问题描述 试题编号: 202312-1 试题名称: 仓库规划 时间限制: 1.0s 内存限制: 512.0MB 问题描述: 输入格式 输出格式 样例输入 4 2 0 0 -1 -1 1 2 0 -1样例输出 3 1 0 3样例解释 Java实现代码: import …

macbook录屏快捷键大全,教你快速录制视频

“有人知道macbook电脑有录屏快捷键吗,现在录屏的速度太慢了,每次打开都要浪费不少时间,要是有录屏快捷键,应该会快很多,有哪位大佬知道吗?教教我!” 无论是在工作还是生活中,电脑已…

生活中危险的气体:一氧化碳与二氧化碳中毒的症状及安全预防措施

一氧化碳和血红蛋白亲和力超过氧气,会占用血红蛋白,导致缺氧。 二氧化碳会和血浆结合,导致血液pH值不正常,抑制呼吸,导致窒息。 通俗点说:一氧化碳是中毒,二氧化碳则是窒息。 一氧化碳中毒 …

通过Vue自定义指令实现前端埋点

在营销活动中,通过埋点可以获取用户的喜好及交互习惯,从而优化流程,进一步提升用户体验,提高转化率。 在之前的埋点方案实现中,都是在具体的按钮或者图片被点击或者被曝光时主动通过事件去上报埋点。这种方法在项目中…

K8Spod组件

一个pod能包含几个容器 一个pause容器(基础容器/父容器/根容器) 一个或者多个应用容器(业务容器) 通常一个Pod最好只包含一个应用容器,一个应用容器最好也只运行一个业务进程。 同一个Pod里的容器都是运行在同一个node节点上的,并且共享 net、…

javaweb学习笔记

JSP 动态网页,指的是随时间、地点、用户操作改变的网页 架构 CS架构 client-server 缺点:每一台客户端都需要安装客户端软件,如果升级全要升级,如果坏了就得维护 优点:响应快,界面美观 BS架构 browser-…

以STM32为例,实现按键的短按和长按

以STM32为例,实现按键的短按和长按 目录 以STM32为例,实现按键的短按和长按1 实现原理2 实现代码3 测试结束语 1 实现原理 简单来说就是通过设置一个定时器来定时扫描几个按键的状态,并分别记录按键按下的持续时间,通过时间的长短…

后端杂七杂八系列篇一

后端杂七杂八系列篇一 ① MySQL选择合适的数据类型① Char与Varchar② Text与Blob ② EqualsAndHashCode(callSuper true)的作用③ mybatis-plus 相关① 主键生成策略② 使用Model实现CRUD③ Wrapper的用法① Wrapper的继承关系② 项目中最常用的warpper [LambdaQueryWrapper]…

[NISACTF 2022]level-up

[NISACTF 2022]level-up wp level 1 robots.txt 通过目录爆破,发现存在 robots.txt 文件(或者说查看源码,源码中有 disallow 提示,说明存在 robots.txt 文件): dirsearch -u "http://node5.anna.n…

Docker入门教程(详解)

Docker容器化 一 入门 1. 引言 (1)单机部署 场景: 将多个应用部署一台服务器上。 问题 每个应用软件,都会消耗物理资源,共用计算机资源,彼此之间会形成竞争关系。 (2)多机部署 …

python django 生鲜商城管理系统

python django 生鲜商城管理系统,包含用户端和管理端 功能: 用户端:商城主页展示,登录,注册,用户中心,购物车,我的订单,购物车结算 管理端:登录,商品&…

SpringBoot: 通过MyBatis访问ClickHouse

一、ClickHouse中建表&#xff0c;添加数据 二、SpringBoot项目添加mybatis、clickhouse、druid相关依赖 <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.6</version></dependency>…

opencv入门到精通——Canny边缘检测

目录 理论 OpenCV中的Canny Edge检测 附加资源 在本章中&#xff0c;我们将学习 Canny边缘检测的概念 OpenCV函数: cv.Canny() 理论 Canny Edge Detection是一种流行的边缘检测算法。它由John F. Canny发明 1.这是一个多阶段算法&#xff0c;我们将经历每个阶段。 2.降…

原生JS调用OpenAI GPT接口并实现ChatGPT逐字输出效果

效果&#xff1a; 猜你感兴趣&#xff1a;springbootvue实现ChatGPT逐字输出打字效果 附源码&#xff0c;也是小弟原创&#xff0c;感谢支持&#xff01; 没废话&#xff0c;上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><me…

09、docker 安装nacos并配置mysql存储配置信息

docker 安装nacos并配置mysql存储配置信息 1、docker启动nacos的各种方式2、Docker安装nacos3、MySQL中新建nacos的数据库4、挂载数据or配置目录5、运行 1、docker启动nacos的各种方式 内嵌derby数据源 docker run -d \ -e PREFER_HOST_MODEhostname \ -e SPRING_DATASOURCE_…

软件测试技术复习点

1 术语含义&#xff08;故障、错误、失效、测试用例&#xff09; 故障&#xff08;Fault&#xff09;&#xff1a;故障是软件中的静态缺陷&#xff1b; 故障屏蔽&#xff1a;软件中的某个故障可能被其他一个或多个故障屏蔽&#xff1b; 错误&#xff08;Error&#xff09;&…

1 电科院FTU检测标准学习笔记-外观检查

作者简介&#xff1a; 本人从事电力系统多年&#xff0c;岗位包含研发&#xff0c;测试&#xff0c;工程等&#xff0c;具有丰富的经验 在配电自动化验收测试以及电科院测试中&#xff0c;本人全程参与&#xff0c;积累了不少现场的经验 目录 **前言****检测大纲****外观与结构…