Unity - 从RG中解压法线贴图
文章目录
- 环境
- 目的
- 问题
- 解决
- nVidia texture tools - normal map 也有类似说明
- References
环境
Unity : 2020.3.37f1
Pipeline : BRP
目的
备忘便于索引
问题
之前使用 GPA 还原一些效果的时候,发现 法线贴图的 Y 通道数值不对,感觉被 翻转了
比方说,下面是 GPA 中的法线
这个法线是 DX 方式的,不是 OpenGL 的,如何辨别 法线是属于 DX 还是 OpenGL 的,可以参考:快速判断OpenGL和DirectX法线的技巧
具体我们打开 PS 来查看差异
可总结为:
- GL 的 凸面
- 正X 是向右的
- 正Y 是向上的 (绿色向上)
- DX 的 凸面
- 正X 是向右的
- 正Y 是向下的 (绿色向下)
解决
我们在 BRP 管线中,可以看到类似的 解释方式
已知 normal.rg
那么 normal.z = sqrt(1 - dot(normal.rg, normal.rg))
然后如果要 scale
的话还可以这样: normal.xy *= scale
因此我们自己的想就可以按自己的方式来处理
不用判断 DX 或是 GL,反正我们自己限制好使用 GL 的规格,即可
这样法线贴图只使用到两个通道,然后 BA
通道还可以放其他的数据
如果是要是需要你也可以整一个参数控制 normal flipping
...
half3 raw_normal = tex2D(_BumpMap, uv);
raw_normal.y = lerp(raw_normal.y, raw_normal.y * -1, _NormalY_Flipping);
raw_normal.z = sqrt(1 - dot(raw_normal.xy, raw_normal.xy));
half3 normalWS = T2W(raw_normal, xxx);
...
最终我们还原了 GPA 的大概效果:
nVidia texture tools - normal map 也有类似说明
nvidia-texture-tools-exporter
视频直达传送门: NVIDIA_Texture_Tools_Normalmap_Overview_embed_2
留意:
这里头有将怎么计算 b 通道
b = 0.5 * sqrt(1 - (2r - 1)^2 - (2g - 1)^2 + 0.5
其中:-1~+1
的 b 为: b = sqrt(1 - (2r - 1)^2 - (2g - 1)^2
然后我们通过 val * 0.5 + 0.5
转为 0~1
所以上述公式可以看成是:b = 0.5 * b + 0.5
这个式子是来自于 单位向量公式:(x,y,z)
x^2 + y^2 + z^2 = 1
References
- 快速判断OpenGL和DirectX法线的技巧
Unity - 从RG中解压法线贴图相关推荐
- Linux服务器中解压zip包
Linux服务器中解压zip包 Linux下解压zip文件,就一个命令行. Unzip [文件名] 示例: unzip {you file name} 我现在要解压datamaster.zip这个文件 ...
- linux解压7z文件,linux 中解压7z文件
linux 中解压7z文件 更新时间:2017-03-26 00:13:50 linux 解压.解压7z文件方法 安装7z源[root@VM_18_10_centos ~]# sudo yum ins ...
- Ubuntu中解压出现:bzip2: (stdin) is not a bzip2 file.
在Ubuntu中解压一个文件,文件后缀名是.tar.bz2 用tar -jxvf rootfs.tar.bz2命令解压,出现错误提示 用tar -zxvf dir.tar.gz命令解压即可.
- Linux中解压zip包的命令是什么?
Linux系统里的zip是一种创建压缩存档文件的常用方式,同时也是一种传统的文件归档文件格式,那么Linux中解压zip包的命令是什么?Linux解压zip包的命令是:unzip,该命令主要用于查看和 ...
- java中解压tar.gz文件
在开发中我们经常需要对gz文件进行解压缩,在java中解压gz文件还是比较繁琐的,为此写了一个工具类方便需要的时候可以直接拿过来用.代码如下: package com.eggsl.utils;impo ...
- ubuntu中解压.tgz
ubuntu中解压.tgz 我有一个 cudnn-11.2-linux-x64-v8.1.1.33.tgz 文件 需要解压 如图 输入代码 tar zxvf cudnn-11.2-linux-x64- ...
- python extractall函数_python zipfile extract 解压 中文文件名[图]
python zipfile extract 解压 中文文件名[图] 08-01栏目:技术 TAG:extractall extractall Python zipfile模块官网 copyright ...
- unity 中解压zip的方法
之前用的下边这种方法,发现在工程中没有问题,打包出来之后抛出异常,看了日志,发现是解压的问题 /// <summary>/// 解压的方法,打包抛出异常/// </summary&g ...
- 【Unity】Zip压缩 解压 文件介绍
写在前面 我们在打包的时候unity会自动的把我们在场景中用到的资源与一些特殊文件夹中的资源压缩,但是如果我们需要做热更或者还想减少包的大小,虽然AssetBundles是可以为我们压缩的,但是可以把 ...
最新文章
- Linux进程间通信二 System V 消息队列简介与示例
- tcp/ip 协议栈Linux内核源码分析七 路由子系统分析二 策略路由
- 统计插件_CG Teamwork统计提交量插件制作思路
- B - Greg's Workout CodeForces - 255A(思维)
- SQLSERVER2014集群实战——IP引发的坑
- 怎么在虚拟机上安装linux mint,如何在VirtualBox上安装Linux Mint?
- wtforms Form实例化流程(源码解析)
- python中关于图例legend在图外的画法简析
- xp计算机位数,XP查看电脑系统版本是32位还是64位的方法
- 模型预测控制的缺点_模型预测控制MPC的通俗解释
- IPC网络高清摄像机基础知识1(IPC芯片市场分析以及“搅局者”华为海思 “来自2013年”)
- SV学习(8)——随机约束和分布、约束块控制
- pass语句|python
- LED的闪烁频率设定
- java计算机毕业设计技术旅游平台源码+mysql数据库+系统+lw文档+部署
- 视频讲解Agora视频通话SDK| 掘金技术征文
- YUV Player Deluxe 注册
- 【2023 年第十三届 MathorCup 高校数学建模挑战赛】 B 题 城市轨道交通列车时刻表优化问题 42页论文及代码
- SQL不允许保存更改,阻止保存要求重新创建表的更改
- 【路由交换】思科5506防火墙三区域互通
热门文章
- 北京尚学堂JAVA开发学习 MYSQL笔记
- Linux 搭建本地镜像源(CentOS 离线 yum)
- Java类变量和实例变量
- 计算机英语forward,英语forward是什么中文意思
- ICASSP2023 | 基于多任务学习的保留背景音的语音转换
- 宝付上海宝付商家吐槽自动扣费的真面目
- Linux串口c_cc[VTIME]和c_cc[VMIN]属性设置的作用
- android keyevent列表,Android KeyEvent KeyCode 原生安卓代码对照表
- QUI操作超时弹出登录窗口登录的处理方式
- STP 4 - MST 和 PVST 对比 (侧重MST)