前段时间在公司的项目中为人物和一些地上物增加了normalmap,使用的是DXT5压缩的dds纹理。不过当时没有考虑太多,直接让美术导出的是R5G6B5的正常格式,没有进行其他的处理。今天从BOSS那知道NV上给出了一种提高精度的方法。将normal的X、Y、Z3个分量中的2个存放在G通道和alpha通道中,能得到更高的精度。因为正常R5G6B5格式的话,X、Y、Z分量分别对应5、6、5位,如果用G通道6位来存放X,用8位alpha通道来存放Y,再通过公式计算出Z就行了。可能有人会疑惑,开方算出来的Z有正负两个方向该用哪一个。一个顶点的法向量肯定是冲正方向的啊= =#。

以下为转载类容,因为原始链接已失效,不知道作者是谁,所以抱歉没能给出更多标注信息。   我们知道游戏中对于3D物体表面细节的表现最重要的还是靠贴图来实现的,那么越是高分辨率越是真彩色的贴图自然表现力也是越强,但是同时带来的问题是所需占用的内存会成倍的上升,而节省内存这一点在目前的游戏中还是非常非常重要的。 所以各个平台上都在使用纹理压缩的技术,让纹理贴图在内存占用和显示效果能达到一个尽可能的平衡。在DirectX中,使用一种叫做DXT的纹理压缩技术,目前这种技术被大部分显卡所支持,通过对DXT的了解,我们可以对纹理压缩技术管中窥豹。 DXT是一种DirectDraw表面,它以压缩形式存储图形数据,该表面可以节省大量的系统带宽和内存。即使不直接使用DXT表面渲染,也可以通过 DXT格式创建纹理的方法节省磁盘空间。Direct3D提供了D3DFMT_DXT1 ~ D3DFMT_DXT5共5种压缩纹理格式。其中,D3DFMT_DXT1支持15位RGB和1位alpha图形格式,D3DFMT_DXT2、D3DFMT_DXT3支持12位RGB和4位alpha,D3DFMT_DXT4、D3DFMT_DXT5则采取了线性插值方式生成alpha。

DXT1 
    DXT1格式主要适用于不具透明度的贴图或仅具一位Alpha的贴图(非完全透明则即完全不透明),对于完全RGB565格式的贴图,DXT1具有4:1的压缩比,即平均每个像素颜色占4位,虽然压缩比并不是很好,但是DXT的特性使得它更适合用于实时游戏之中。 
    DXT1将每4×4个像素块视为一个压缩单位,压缩后的4×4个像素块占用64位,其中有2个16位的RGB颜色和16个2位索引,格式描绘如下图所示:

DXT1中的两个RGB颜色负责表示所在压缩的4×4像素块中颜色的两个极端值,然后通过线性插值我们可以再计算出两个中间颜色值,而16个2位索引则表明了这4×4个像素块所在像素的颜色值,2位可以表示4种状态,刚好可以完整表示color_0,color_1以及我们通过插值计算出的中间颜色值color_2和color_3,而对于具有一位Alpha的贴图,则只计算一个中间颜色值,color_3用来表示完全透明。 
    对于如何判断DXT1格式是表示不透明还是具有1位alpha的贴图,则是通过两个颜色值color_0和color_1来实现的,如果color_0的数值大于color_1则表示贴图是完全不透明的,反之则表示具有一位透明信息。 
DXT2、DXT3 
    DXT2和DXT3可以表示具有更复杂的透明信息的贴图,这两种格式采用的是显式的Alpha表示,我们知道了在DXT1中,我们使用64位数据来描述4*4的像素块的颜色信息,在DXT2和DXT3中,这部分颜色信息是不变的,而是通过另附加64位数据也就是每个像素4位来表示他们的Alpha透明信息,而这4位的Alpha的信息通常情况下我们可以采用直接编码的方式来表示即可。 
    这样每个4×4像素块占用128位也就是8个字,0~3字表示透明信息;4~7表示前面描述的颜色的信息。 
    DXT2和DXT3的不同之处在于,DXT2中颜色是已经完成了Premultiplied by alpha操作(已完成颜色与alpha的混合,当透明度发生改变时,直接改变整体颜色值,不必再单独复合),DXT3的Alpha信息则是相对独立的,之所以要区分开了则是为了适应不同的需要,因为有些场合需要独立的Alpha信息。

DXT4、DXT5 
    DXT4、DXT5也是用于表示具有复杂的透明信息的贴图,与2和3不同的是4和5的Alpha信息是通过线性插值计算所得,类似于DXT1的颜色信息。同样的,每4×4的像素块的透明信息占用64位,所不同的是,64位中采用了2个8位的alpha值和16个3位的索引值,既然每个像素的索引占3位,那么可以表示8种不同的透明状态。 
    在这里插值的方法有两种,一种用于表示具有完全透明和完全不透明的状态,另一种则是仅在给出的极端值alpha_0和alpha_1中进行插值。区分的方法也是通过比较alpha_0和alpha_1的大小来实现的,如果alpha_0大于alpha_1,则通过插值计算剩下的6个中间alpha值;否则,只通过插值计算4个中间alpha值,alpha_6直接赋值0,alpha_7直接赋值255。 
    DXT4和DXT5的区别同DXT2和DXT3的区别相同,DXT4的颜色值是理解为已经完成Premultiplied by alpha操作的。 
    另外需要注意的是,所有的压缩纹理格式都是2的幂,因为纹理压缩的单位是4×4像素,所以如果贴图的大小位16×2或者8×1这样的比例,系统会同样采用4×4的单位进行压缩,会造成一定的空间浪费,同样的大小会被占用,只是不会参与使用而已。

使用DXT5纹理作为normalmap提高精度的方法相关推荐

  1. 新思路!商汤开源利用无标注数据大幅提高精度的人脸识别算法

    出处"来自微信公众号:我爱计算机视觉" 新思路!商汤开源利用无标注数据大幅提高精度的人脸识别算法 这篇论文解决的问题与现实中的人脸识别应用场景密切相关,其假设已经有了少量已经标注的 ...

  2. 为什么一些机器学习模型需要对数据进行归一化?——1)归一化后加快了梯度下降求最优解的速度;2)归一化有可能提高精度...

    为什么一些机器学习模型需要对数据进行归一化? http://www.cnblogs.com/LBSer/p/4440590.html 机器学习模型被互联网行业广泛应用,如排序(参见:排序学习实践).推 ...

  3. 模型质量控制管理2——提高精度解决模型非实体不封闭破面等问题

    当在三维空间画了一条线无法分割平面,这时可以考虑这条线是不是在此二维面了.但是通过放大并不能发现问题所在,可能就是精度出现偏差,也可以理解为都是"四舍五入"惹的祸.如果差1毫米,甚 ...

  4. 深度学习提高模型准确率方法

    这里写目录标题 深度学习 数据 使用更多数据 更改图像大小 减少颜色通道 算法 模型改进 增加训练轮次 迁移学习 添加更多层 调整超参数 总结 深度学习 我们已经收集好了一个数据集,建立了一个神经网络 ...

  5. 施工控制网的精度确定方法?

    施工控制网的精度确定方法? 问题1?现在比如说给了你验收误差为Δ,需要你计算出放样误差 在一般情况下,我们都会取2倍中误差来作为极限误差,这个是什么意思呢? 简单点儿说,Δ现在就是你的极限误差,也就是 ...

  6. 一文详解双目立体视觉系统的精度提升方法!

    作者丨李迎松@知乎 来源丨https://zhuanlan.zhihu.com/p/160946661 编辑丨3D视觉工坊 双目立体视觉(Binocular Stereo Vision)是机器视觉的一 ...

  7. [css] 列举CSS优化、提高性能的方法

    [css] 列举CSS优化.提高性能的方法 加载性能压缩CSS通过link方式加载,而不是@import复合属性其实分开写,执行效率更高,因为CSS最终也还是要去解析如 margin-left: le ...

  8. 2016年程序员如何提高自己的方法有哪些?

    作为软件开发行业,新技术在不断的更新,如何在新的时代实现自己的人生价值,唯一的办法就是为自己树立一个更高的目标,一个人有了目标后就会有了努力的方向,那么在2016年程序员如何提高自己的方法有哪些?新霸 ...

  9. c++ 无法读取内存_为什么内存频率只有2133比实际低?开XMP提高内存频率方法

    如今新装机,DDR4主流内存频率主要是2400MHz和2666MHz,不少用户还会配备更的高频率内存,例如3000MHz.3200MHz.3600MHz,甚至更高的4000+MHz内存,电脑做好系统之 ...

最新文章

  1. 在.NET2.0中解析Json和Xml
  2. linux内核经常用到的 一个概念“原子操作“
  3. C++程序的多文件组成
  4. java swing 案例详解_《Java Swing图形界面开发与案例详解》PDF_IT教程网
  5. trie树 Codeforces Round #367 D Vasiliy's Multiset
  6. 国庆七天乐——第三天
  7. 快速上手,教你开发第一个基于 AutoML 的量化投资决策应用
  8. 说明Android应用调用全屏方式
  9. Java编程:约瑟夫问题——单向环形链表
  10. Gaussian Mixture Model
  11. html5用户输入后自动显示用户名已重复_IT兄弟连 HTML5教程 HTML5表单 HTML5新增表单元素...
  12. 解释PBR纹理贴图(texture-maps)
  13. QtreeView 树形结构
  14. 知识驱动的主动式开放域对话系统 by 车万翔 2020/4/11
  15. Ubuntu18.04运行QQ音乐
  16. Intellij Idea 所有快捷键列表,工欲善其事必先利其器。
  17. 数据库substr……in……
  18. 文件改名,如何将简体中文文件翻译成繁体中文,并复制到指定文件夹里保存。
  19. php 缓冲区溢出漏洞,在Linux 容器中对php-fpm缓冲区溢出漏洞的复现分析 ( CVE-2019-11043 )...
  20. 風の記憶 - 熊木杏里

热门文章

  1. 【Android 性能优化】应用启动优化 ( Trace 文件分析 | 结合代码分析 Trace 文件 )
  2. MySQL基础篇 | 聚合(分组)函数 、分组查询
  3. 《动手学ROS2》4.4话题小练习-李三借钱吃麻辣烫
  4. 每日一学—vue prop属性
  5. canvas小球连线碰撞效果 html+css+js
  6. 영어 단어 읽기 규칙 - 모음편
  7. “赌徒”泡泡玛特转身
  8. 2022年淘宝618预售付了定金不想要了怎么可以退?
  9. 2021,你年终结算了吗? | 佛系理财
  10. 塔望·食业研究|轻食代餐行业市场竞争品牌分析