一个unity3d lightmap问题
上周美术同学在使用unity3d制作lightmap的过程中,发现部分被lightmap影响的模型在移动端上效果与pc端不一致。当时我大概看了下,分析后,得到一个结论是“在移动端上lightmap的hdr格式转换到ldr格式后,着色时没有进行tonemap的还原”。因此效果就是曝光度>1的部分,最多只能显示出原本模型diffuse贴图的色调,而不是达到曝光的色调。所以当时我给出的解决办法就是将hdr->ldr转换时的压缩比列得到,最后在shader采样出ldr光照贴图后使用这个比例值还原hdr的效果。当然具体怎么做,还必须参考unity3d内部的要求。
到了本周,得知进展不大。于是自己深入了解了一下unity3d的shader。
unity3d的shader其实是广义上的,包含了部分render state的描述,具体可以使用三种描述方式:
<1> surface shader:它是untiy3d的一种shader描述脚本,其作用就是通过untiy3d定义好的描述语法,将引擎内部已经实现好了的着色代码组合起来。从而简化了大量重复代码的书写,以及屏蔽一些具体的3d图形实现细节。我们可以理解为这是一种傻瓜式的shader。
<2> vertex and fragment shaders:普通的着色语言,hlsl,cg,glsl等。
<3> fixed function shader:一种描述脚本,用来操作固定管线的state。
如果要解决上面这个问题,第一步我们需要得到hdr->ldr的比例。虽说unity3d lightmap烘焙使用的是beast,但是具体这个比例是多少,存放在哪里,这些细节无法查到。似乎引擎封装了它,但没有暴露出来。好在它提供了DecodeLightmap这个函数来还原,这个函数内部在移动端和gles下将亮度*2,在pc端下将亮度*8*light_alpha通道。这样看来在pc端下,ldr的还原程度更高,有8的亮度值,而移动端只有2。第二步就是将这个函数计算的还原值作为lightmap的亮度值*diffuse贴图就可以了。
由于在移动端只有2倍,因此当烘焙时灯光强度大于2时,还是有问题。这时可以通过一些简单的tone map算法对light map的值进行一些调整,使其尽可能达到美术想要的效果。最简单的方式就是将lightmap的灰度调低,然后在shader中对lightmap的值乘上更大的比例。
一个unity3d lightmap问题的更多相关文章
- 第一个Unity3D脚本
学习就该简单粗暴,看了一天Unity3d的教程加文档,尝试一个小练习,再快速写个博客加深印象. 一:首先建立一个空白工程,创建一个空GameObject,在Assets Pannel中创建一个名为Le ...
- 分享一个Unity3D小作品,源码地址已公布在文章开头!
Update:回复量有点大,楼主工作期间可能无暇向童鞋们发送源码,为了不让童鞋们久等,现公布源码地址. 链接: http://pan.baidu.com/s/1sjpYW4d 密码: zhp9 请注 ...
- 我的第一个unity3d Shader, 很简单,基本就是拷贝
Shader "Castle/ColorMix" { Properties { // 基本贴图 _MainTex ("Texture Image", 2D) = ...
- 简单实现一个Unity3d的Timer
数量使用的不太多,没有实现对象池. using System.Collections; using System.Collections.Generic; using UnityEngine; usi ...
- PureMVC和Unity3D的UGUI制作一个简单的员工管理系统实例
前言: 1.关于PureMVC: MVC框架在很多项目当中拥有广泛的应用,很多时候做项目前人开坑开了一半就消失了,后人为了填补各种的坑就遭殃的不得了.嘛,程序猿大家都不喜欢像文案策划一样组织文字写东西 ...
- Unity3D移动平台动态读取外部文件全解析
前言: 一直有个想法,就是把工作中遇到的坑通过自己的深挖,总结成一套相同问题的解决方案供各位同行拍砖探讨.眼瞅着2015年第一个工作日就要来到了,小匹夫也休息的差不多了,寻思着也该写点东西活动活动大脑 ...
- Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生
一.Unity3D平台简介 Unity是由Unity Technologies开发的一个让轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的 ...
- Unity3D游戏开发初探—2.初步了解3D模型基础
一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被. ...
- 用DropBox分享Unity3D的Web应用
用U3D做好游戏好想分享给亲朋好友体验怎么办?导出exe,apk都可以,只是下载始终是个门槛. 幸好还可以导出web版(虽然要安装unity3d的插件),但自己没有服务器怎么办,没关系~,现 在是云时 ...
随机推荐
- 树莓派+百度api实现人脸识别
title: 树莓派+百度api实现人脸识别 tags: 树莓派 date: 2018-5-31 20:06:00 --- 树莓派对接百度api 我以前玩安卓的时候一直用的讯飞的平台和api,对于百度 ...
- 在自学css开始就遇到问题,“链入外部样式表”在多浏览器显示问题
在自学css开始就遇到问题,“链入外部样式表”的习题,代码如下:A.被链入的CSS文件代码.css<style type="text/css"><!--h1{b ...
- Python之字符串的特性及常用方法
字符串的特性 索引: (索引是从0开始) s='hello'print(s[0])print(s[4])print(s[-1]) #拿出最后一个字符 hoo12345678截取s[start:stop ...
- Mybatis学习总结一
一.Mybatis架构 JAR包下载地址 1. mybatis配置 SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息. mapper. ...
- 怎么让Eclipse对html和js代码自动提示
使用eclipse自带的插件,无需另外安装插件,具体步骤如下1.打开eclipse→Windows→Preferences→Java→Editor→Content Assist修改Auto Activ ...
- nginx+tomcat+memcache
tomcat1和tomcat2都需要安装以下配置[root@tomcat-1 ~]# yum -y install gcc openssl-devel pcre-devel zlib-devel[ro ...
- spring cloud feign 坑
feign是啥? 很多人可能对于feign 不是很熟悉,可以看一下其他网友的实例分享:spring cloud feign简介 如果觉得上面这个比较难的话,还有一个简单入门的:spring cplou ...
- 【10】AngularJS SQL
AngularJS SQL 使用 PHP 从 MySQL 中获取数据 <div ng-app="myApp" ng-controller="customersCtr ...
- Leetcode 115.不同的子序列
不同的子序列 给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数. 一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串.(例 ...
- CentOS服务器上部署 oracle10gr2
1.下载Centos系统 Linux 镜像文件. 推荐使用 CentOS5.4,下载地址:http://isoredirect.centos.org/centos/5/isos/i38 ...