解决Lightmap在PC上与ios和Android上表现不同的问题
1、 问题描述
相信很多人碰到过Lightmap的一些问题:
烘培好Lightmap之后,在PC上看起来相当给力,而打包成ios或android之后,就傻眼了,Lightmap往往就出现了改变,例如灯光曝光度不够、光照颜色偏冷色调、有时候甚至黄色光也能变成绿色光等等。
2、造成Lightmap在PC、ios和android上表现不同的原因。
在u3d里,Lightmap的格式是.exr(openEXR),exr格式的储存方式是使用4*16Bit RGBA来储存数据的,即是说,它使用四个通道分别为RGB和alpha,每个通道占16位储存空间,每个像素占48位储存空间来储存数据。所以EXR格式的图片颜色值域范围就达到了[-65504,65504],远大于8bit(颜色值域[0,255],用浮点数表示就是[0,1])格式所能储存的数值范围。
但是EXR格式的Lightmap打包成 android或ios之后,就变成LDR格式(可能是单通道8bit)的了,这就丢失的很多光照信息。例如在PC上烘培出的灯光亮度值是2000,转变成LDR格式后,亮度值就变成了255,这就是为什么打包成android或ios后灯光曝光度不够、光照颜色偏冷色调的原因。
3、 解决方法。
HDR有几种比较常见的编码格式,这里用的编码格式是LogLuv,就是将RGBA_FP32bit(每个通道32bit或16bit)的数据编码到RGBA32(每个通道8bit)的图片中。LogLuv算法几乎能100%还原unity切换平台后导致Lightmap丢掉的精度信息,算法如下:
M);
fixed3(1e-6, 1e-6, 1e-6));
Xp_Y_XYZp.z;
log2(Xp_Y_XYZp.y) + 127;
(floor(vResult.w*255.0f)) / 255.0f) / 255.0f;
}
vLogLuv.w;
/ 2);
vLogLuv.y;
Xp_Y_XYZp.z;
InverseM);
return max(vRGB, 0);
}
4、 实现步骤
1、 在PC平台烘培好光照贴图Lightmap_PC(.exr格式)。
2、 通过Lightmap_PC生成新的光照贴图Lightmap_LogLuv(.png格式,RGBA32bit,单通道是8bit)。生成过程就用上面提到的LogLuv算法进行编码。这里用GPU来进行生成,有类似GPGPU的思想。如下:
//用LogLuv算法生成的Lightmap输出到temp上,然后就将temp保存到一张.png格式的图片。
}
//将RenderTexture保存成一张png图片
}
3、 用新生成的光照贴图Lightmap_LogLuv替换原来的光照贴图Lightmap_PC。因为Lightmap_PC在切换android或ios会自动将Lightmap_PC压缩为LDR格式,这就丢失了精度。
http://www.ceeger.com/forum/read.php?tid=24457&fid=2
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
App Inventor for Android初接触
今天收到了App Inventor for Android的注册确认信,可以用我的Gmail来登录App Inventor了。于是,按照手册做了几个小例子。App Inventor使用起来时非常方面的,省去了很多的编程,可以快速的构建应用程序。不过现在App Inventor还是有很多的限制的,比如只能构建单页面的程序、不适合构建复杂的应用程序等。 在Designer中设计界面。 Designer被分为4部分:Viewer编辑组件、Palette显示所有可用的组件、Components List显示了所有的组件和上传的图片声音等资源、Properties属性的设置。 通过拖放的方式摆放组件,在属性中设置其相应的属性就可以了: 在Blocks Editor中编辑事件的处理: 在Blocks Editor中的My Blocks中列出了所有已经添加的组件: 点击相应的组件,即出现与该组件相应的事件,如点击Button1出现下述的列表: 示例程序对上述列表给出了一个说明: l when ... do ... blocks define event handlers, that tell com...
- 下一篇
iOS开发-Bug锦囊
duplicate symbols for architecture armv7 今天修改了自己项目的部分代码,发现XCode编译的时候报错:duplicate symbols for architecture armv7 1.排查是否有名字重复的文件; 2.检查是否在#import头文件的时候,不小心将.h写成了.m(这种情况居多,本人属于此类情况) No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386 App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file. xcode7中苹果不允许使用http协议,需要使用Https协议,如果需要使用http协议,需要在infoList中设...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Hadoop3单机部署,实现最简伪集群
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS关闭SELinux安全模块
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker安装Oracle12C,快速搭建Oracle学习环境
- MySQL8.0.19开启GTID主从同步CentOS8