对于数据压缩,其实就是把浮点的32位精度,改用16位定点数来表达。

例如0.0 = 0,1.0 = 32767,-1.0 = -32767

这是一种有损压缩,会丢失一些精度,一般情况下是可以接受的。

当浮点数是-1至+1的范围,即-32767至+32767。

这时问题出现了,如果浮点的范围是几万,那么一些浮点如果是小数位后几位的数值,压缩后会变成0。

例如:0.0123,在上述情况下,最终存在unsigned short中其实是0或者1,解压后也是0。

发现问题的起因是手上有一个奇葩的模型数据,它的某一组UV竟然有3千万的大小,而其他的UV则是正常范围的几十或者是0-1。

压缩后,出现大面积的纹理走样。

通过思考后,发现原因是美术手上有一张大小可能是几十的贴图,他想贴到一个几十万甚至几百万单位大小的模型上,于是就简单粗暴得将UV值设置为很大。

但是其实想一想,即使再大一点的贴图,例如1000x1000大小的图,这时使用3千万的UV数值,这张图最后在屏幕上显示时只会变成纯色。

于是解决办法是在导出时,如果发现有这种奇葩数值,首先是红色LOG警告,然后将UV数值钳制在100以内,这样就不会因为变态数值而影响到正常的数值了。

vertex compression所遇到的问题的更多相关文章

  1. 实施vertex compression所遇到的各种问题和解决办法

    关于顶点压缩,好处是可以减少带宽,一定程度提高加载速度,可以提高约5-10%的fps,特别是mobile上,简单描述就是: 压缩之前(32字节) position float3 12normal fl ...

  2. Unity的Mesh压缩:为什么我的内存没有变化?

    0x00 前言 最近和朋友聊天,谈到了Mesh的内存优化问题,他发现开启Model Importer面板上的Mesh Compression选项之后,内存并没有什么变化.事实上,期望开启Mesh Co ...

  3. Unity 5 Game Optimization (Chris Dickinson 著)

    1. Detecting Performance Issues 2. Scripting Strategies 3. The Benefits of Batching 4. Kickstart You ...

  4. Unity引擎的Player Settings介绍

    我用的是unity5.4.3版本的 一.窗口打开: 从菜单栏查看播放器设置,选择 Edit->Project Settings->Player 二.全局设置 第一部分: Company N ...

  5. Graphics-Processing Architecture Based on Approximate Rendering

    BACKGROUND The present invention generally relates to the processing of graphics data, and particula ...

  6. [IR] Graph Compression

    Ref: [IR] Compression Ref: [IR] Link Analysis Planar Graph From: http://www.csie.ntnu.edu.tw/~u91029 ...

  7. CSharpGL(38)带初始数据创建Vertex Buffer Object的情形汇总

    CSharpGL(38)带初始数据创建Vertex Buffer Object的情形汇总 开始 总的来说,OpenGL应用开发者会遇到为如下三种数据创建Vertex Buffer Object的情形: ...

  8. OpenGL中glVertex、显示列表(glCallList)、顶点数组(Vertex array)、VBO及VAO区别

    OpenGL中glVertex.显示列表(glCallList).顶点数组(Vertex array).VBO及VAO区别 1.glVertex 最原始的设置顶点方法,在glBegin和glEnd之间 ...

  9. 集合覆盖 顶点覆盖: set cover和vertex cover

    这里将讲解一下npc问题中set cover和vertex cover分别是什么. set cover: 问题定义: 实例:现在有一个集合A,其中包含了m个元素(注意,集合是无序的,并且包含的元素也是 ...

随机推荐

  1. redhat 5 中文乱码及中文输入法解决方法

    安装redhat时中文显示乱码(小方框)解决方法 在安装linux的时候,安装完了中文出现乱码或者是当时选错了选成了英文的,到时候中文显示乱码,下面说一下问题的解决: 在首次安装RHEL5时,如果选择 ...

  2. Hibernate使用count(*)取得表中记录总数

    /** * @TODO:查询某一年度的所有计划数量 */ public int findCountByYear(String currYear) { String hqlString = " ...

  3. [[4], [5, 6, 7]](Python)list的方法

    现在我们要学习一些Python的数据结构了,本节将主要学习列表(list)的用法 1.list的方法 list.append(x) 在list的末尾添加一个元素 >>> a=[1,2 ...

  4. 【Java学习笔记】Map集合的keySet,entrySet,values的用法例子

    import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.M ...

  5. Linux -- Centos 下配置LNAMP 服务器环境

    1.Mysql centos 7 下mysql被替换掉,如有需要请看另一篇: centos 6.5下: yum install mysql mysql-server mysql-devel 启动mys ...

  6. MySQL日期时间函数大全(转)

    MySQL日期时间函数大全 DAYOFWEEK(date)  返回日期date是星期几(1=星期天,2=星期一,……7=星期六,ODBC标准)mysql> select DAYOFWEEK('1 ...

  7. iOS开发 multipart 上传多张图片

    - (void)uploade:(NSDictionary *)dic pic:(NSArray *)picArray {    NSString *hyphens = @"--" ...

  8. GridView获取当前行

    int row = ((GridViewRow)((DropDownList)sender).NamingContainer).RowIndex; //获取GridView里的DropDownList ...

  9. Linux下好玩的命令

    1.yes命令,输出很多个y,可以用来对付选择很多y/n的应用. 2.banner命令,打印字符标题,就是用字符拼出大字来: 3.ddate命令,把日历转换成其他的什么历: 4.fortune命令,随 ...

  10. spinner与arrays.xml的使用

    在Android中,用string-array是一种简单的提取XML资源文件数据的方法. 例: 把相应的数据放到values/arrays.xml文件里 <?xml version=" ...