unity3d绘画手册-------灯光之反射及各个参数解释
下面说一下Reflection Probe, 大家都知道:当使用标准着色器时,每一个材质都会具有一定程度的镜面反射(specularity)和金属反射
(metalness)属性,在没有强大的硬件来处理即时光迹追踪反射的情况下,我们得仰赖预先计算著色反射,我们使用了一个由六张描
述天空的图片所组成的方体贴图(Cubemap)然后在和其他光和地表信息混合运算来仿真如同我们真实世界看到的反射效果。
从Unity 5.x开始,我们可以反射探头(Reflection Probe)产生贴图来模拟反射,
工作原理:在某个定点搜集环境信息,动态生成cubemap 反射贴图。
当一个物体横跨了多个Reflection Probe的时候, 他的Mesh Renderer中会自动加入所有他触及到的Reflection Probe. Weight是通
过计算每个他触及的Reflection Probe和这个物体之间距离来得出的. 另外还可以单独调节Reflection Probe的”Importance”这
个参数来手动干预这个计算结果.
Mesh Renderer的Reflection Probes选项能够选择四种使用Reflection Probe的方法,
1.Off:代表不使用Reflection Probe.
2.Simple:代表只使用列表中Weight值最大的那个ReflectionProbe.
3.Blend Probes:should be used for interior objects, that way you’ll ensure that object won’t accidentally
use reflections from skybox (a.k.a default reflection).
4.Blend Probes And Skybox:should be used for exterior objects, that way when object leaves the bounding box
of reflection probe, it will gradually switch reflections from reflection probe to skybox.
下面我们讲一下Refelection Probe的面板参数,这里只讲无法第一时间测试出意义的参数. 其他参数都比较简单.
Type选择类型, 三种可选.
Baked:用于烘焙模式的,在Lighting面板下点击Bake进行烘焙光照贴图时,生成对应的反射贴图。
Custom:自定义一个cubeMap来指定反射贴图,选择Dynamic Objects可将非静态物体也给Bake出来.
Realtime:实时生成反射贴图,但是和实时光照一样的消耗性能,
详细参数见下:
Time Slicing---官方文档上说这个选项仅仅针对于当我选择了Every frame作为刷新模式的情况, 实则不然, 因为不管是On Awake还是Every frame还是
Via scripting, 这个Time Slicing都是有效果的, 要了解这个选项. 首先要了解一下Reflection Probe的内部生成机制, 一个Realtime的Reflection的生成有三个步骤:第一个步骤要计算一个Cubemap的六个面, 第二步要考虑这个Cubemap的mipmap(文档上说为了支持Glossy Reflections, mipmap是必要的, 而Glossy Reflections对于调节不同程度的Smoothness时是有一定效果上的提升的), 第三步是将计算结果拷贝到Cubemap中.
那么TimeSlicing的三个选项分别有不同的三步计算所需帧数:
All faces at once---9帧, 性能消耗中等. (9帧之内再次通过Via Scripting调用刷新是无效的)
Individual faces---14帧(在9帧的基础上加了将六个面分为六帧的那多出来的五帧), 性能消耗最低.(14帧之内再次通过Via Scripting调用刷新是无效的)
No time slicing---1帧. 所有动作都在同一帧执行, 这种性能消耗最大. (1帧之内再次通过Via Scripting调用刷新是无效的)
Importance---影响了一个MeshRenderer中的多个ReflectionProbe的Weight的自动混合比例. 当一个物体处在多个Reflection Probe的”领地”内的时候, 首先会考虑每个Reflection Probe的Importance, 之后, 在此基础上才会考虑每个Reflection Probe与该物体之间的分别的交叉的体积的大小. 也就是说Importance的优先级高于交叉体积的计算.
关于交叉体积的计算: For ex., if the first volume is 1.0 and the second is 2.0, then first probe’s influence will be 1.0 / (1.0 + 2.0) = 0.33, the second probe’s influence will be 2.0 / (1.0 + 2.0) = 0.67. 还有一种特殊情况, 就是就是一个小的Probe套在一个大的Probe里面, 而一个物体又完全在这个小的Probe里面, 那么对这个物体来说, 小的Probe的Weight会是1, 大的会是0. 而当这个物体逐渐脱离这个小的Probe的时候, 那么小的Probe和大的Probe对于这个物体的Weight会进行一个混合.
Size---该Reflection Probe的影响范围. 进入这个范围的MeshRenderer会自动和这个Reflection Probe产生关联. 同时, 当Box Projection开启的时候, 这个Size也会影响Reflection Probe的UV映射.
Probe Origin---取样点相对于影响范围中心的偏移. 当勾选了Box Projection的时候, Probe Origin的位置会影响Reflection Probe的UV映射.
Box projection:一般情况下,反射cubemap是被假设在无限远出投射出来的图像,不同的角度都能看到反射的团,但是当你距离反射物体远近改变时,这个反射的图案不会发生改变,这个特性,一般情况下,在室外场景很适用,但是到了室内就不行了,
开启Box projection 选项,(支持Shader Model3以上平台可用)允许我们创建一个投射有限距离内的物体,当我们与反射物体距离发生变化时,反射图案的尺寸也同样发生变化,Probe Size以及Probe Origin会影响Reflection Probe的映射图案的效果.
Shadow Distance---反射阴影距离, 特性和Quality Setting中的特性一样, 数值越小, 在反射画面中阴影显示越近, 但阴影越精细, 调成0会完全关闭阴
影.
unity3d绘画手册-------灯光之反射及各个参数解释的更多相关文章
- unity3d绘画手册-------地形各个参数解释
关于Unity3D是什么.我就不多做解释了.由于工作原因,该系列原创教程不定期更新.每月必然有更新.谢谢各位. Unity地形:: 新建地形: <ignore_js_op> 如图在菜单中新 ...
- unity3D绘画手册-----地形及术语解释
Unity3D教程:设置地形(Terrain) Posted on 2013年04月18日 by U3d / Unity3D 基础教程 /被围观 1,901 次 新建地形: 在菜单中新建一个地形. U ...
- unity3d绘画手册-------地形高度调节
高度 所有地形 (terrain) 编辑工具的使用都很简单.您可以在场景视图 (scene view)中逐步绘制地形 (terrain).对于高度工具和其他所有工具,您只需选中工具,然后在场景视图 ( ...
- Unity3D ShaderLab 立方体图的反射遮罩
Unity3D ShaderLab 立方体图的反射遮罩 上一篇,简单的介绍了立方体图的反射,那么我们能不能使用一张纹理对其进行指定遮罩呢?这样美工可以更好的控制图像的效果. 我们接着使用上一篇的sha ...
- 【Unity Shaders】Reflecting Your World —— Unity3D中简单的Cubemap反射
本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...
- Unity 琐碎5 : 利用反射设置编辑器参数
问题 最近处理unity资源打包问题时候经常遇到的一个问题就是平台切换和Bundle编译.一般情况下,平台转换我需要依赖Cache Serbver加快转换速度,但是在Build Bundle的时候我又 ...
- Unity3D 脚本手册
1.private Ray ray; --定义射线 ray = Camera.main.ScreenPointToRay(Input.mousePosition); --摄像机发出的射线投射鼠标到 ...
- wrong number of arguments,java方法反射时数组参数的坑
java方法中只有一个参数是数组,反射的时候我们不能想当然的传歌数组进去,传数组进去的时候表示多个参数. 两个数组不是一个意思啊. 我们应该把数组转为objet,这样才表示一个参数. import j ...
- java反射机制 + Method.invoke解释 getMethod + 反射理解
功能: 通过读取另一个Dll去创建一个控件(Form,Button,TextBox,DataGridView),然后对当中一些属性进行检查. 创建控件的大致流程是,Assembly->Modul ...
随机推荐
- 云从科技 OCR任务 pixel-anchor 方法
云从科技提出了一种端到端的深度学习文本检测框架Pixel-Anchor,通过特征共享的方式高效的把像素级别的图像语义分割和锚检测回归放入一个网络之中, 把像素分割结果转换为锚检测回归过程中的一种注意力 ...
- PHP利用MySQL保存session(php5.4之前的处理)
简介 使用MySQL保存session,需要保存三个关键性的数据:session id.session数据.session生命期. 考虑到session的使用方式,没必要使用InnoDB引擎,MyIS ...
- java.lang.IllegalStateException: The specified child already has a parent. You must call removeView
java.lang.IllegalStateException: The specified child already has a parent. You must call removeVi ...
- android发送短信样例
Android应用开发中我们经常须要发送手机短信.这对于android平台来说,是最简单只是的功能了,无需太多代码,也无需自己定义代码,仅仅须要调用android提供的消息管理类SmsManager就 ...
- JS教程:window.location使用方法的区别
介绍了window.location使用方法的区别. window.location.href=&http://www.jbxue.com/javascript/ldquo;url”:改变ur ...
- Java并发:volatile内存可见性和指令重排
volatile两大作用 1.保证内存可见性 2.防止指令重排 此外需注意volatile并不保证操作的原子性. (一)内存可见性 1 概念 JVM内存模型:主内存和线程独立的工作内存 Java内存模 ...
- 经纬度、时分秒转换的C#类
一:新建一个包含经纬度.时间转换的类optaDataConvert public class optaDataConvert { /// <summary> /// 时间转换 /// &l ...
- Python框架级编程的能力要求
说在前面:比较基础的就不说 1.装饰器熟练掌握 2.内建函数,内建变量.下划线函数之类的东西要搞明白 3.一定Python数据接口和算法实现能力 4.内省 5.元编程
- angular学习笔记(十九)-指令修改dom
本篇主要介绍angular使用指令修改DOM: 使用angular指令可以自己扩展html语法,还可以做很多自定义的事情.在后面会专门讲解这一块的知识,这一篇只是起到了解入门的作用. 与控制器,过滤器 ...
- 【DSP】CCS中.dat文件的格式
转自“http://e2e.ti.com/support/development_tools/code_composer_studio/f/81/t/168292” Here is the infor ...