精华内容
下载资源
问答
  • unity Reflection Probe

    千次阅读 2017-09-08 16:30:48
    Reflection Probe

    Reflection Probe相关

    天空盒的信息不可能包含所有的场景对象,在许多情况下,对象从天空搜集反射信息时可能会被遮蔽,像是室内对象或是在类似桥或是隧道等建筑物里的对象,为了要准确反射这些对象,必须用反射探头针对这些对象取样,这种探头从他们的位置对周围取样并把结果写到方体贴图,可以让周围经过的物体得到环境的反射影像。可以透过GameObject->Light->Reflection Probe来新增一个反射探头,反射探头的位置会决定方体贴图取样的内容,以及反射所看起来的样子,基于效能考虑反射探头越少越好,反射探头并非用来让物理得到精确结果,而是让游戏世界有更好的反射,大多数情况下几个安排妥当的反射探头就很足够了。

    Reflection Probe种类

    1. Baked:在编辑器里存储一个生成的反射cubemap。可以点inspector窗口下面的bake按钮或者light窗口下边的bake按钮进行烘焙生成反射cubemap。跟烘焙lightmap差不多,如果light窗口Auto勾选上了,会自动更新cubemap。baked探头只能显示标记为Reflection Probe Static的物体。一旦烘焙完后,cube map就不会变化,所以不会受移动物体实时变化的影响。消耗比实时的小很多。可以更进一步,通过culling mask和clipping plane属性(像摄像机一样)将不想要的物体屏蔽出reflection probe。
    2. Realtime:在运行时实时生成cubemap,也就是说反射不局限于静态物体,而且在场景中会实时更新。然而,需要花费大量的处理时间刷新光探头,unity允许你通过脚本触发刷新。同时,有选项控制刷新,这样就可以好几帧刷新一次。也可以通过culling mask和clipping plane控制哪些物体加入反射cubemap。
    3. Custom:这种也可以在场景中烘焙,像Baked探头一样,但是你可以设置一个自定义的反射cubemap,自定义的也不会实时更新。但有动态物体选项,勾选上后,允许没有标记为Reflection Probe Static的物体加入反射cubemap中。

    Reflection Probe的使用

    1. 首先我们在场景中添加两个游戏对象,一个Sphere,一个Cube。然后再创建两个材质球。
      第一个命名为Green_Metalic。用shader是standard;第二个命名为Mirror,shader是standard(Specular setup),Specular下的Smoothness设为1.Green_metalic给Sphere,Mirror给Cube;
    2. 将cube放大,把sphere放在cube前面,添加Reflection Probe。调成RealTime类型,cube上就会看到绿色的影子;
    3. 将类型设为bake,将sphere设为Reflection Probe static,点击烘焙,cube上能看到绿色的影子;
    4. 将类型设为custom,将之前生成的reflection cubemap设到cubemap那儿,将sphere的reflect probe static勾选去掉,勾选probe上的dynamic object,cube上会看到绿色的影子。

    重叠的Reflection Probe

    当一个物体横跨了多个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.用在外部物体上,当物体离开反射探头的包围盒时,会渐变到天空盒的反射。

    几个属性

    1. 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会进行一个混合.

    2. Box Size—该Reflection Probe的影响范围. 进入这个范围的MeshRenderer会自动和这个Reflection Probe产生关联. 同时, 当Box Projection开启的时候, 这个Size也会影响Reflection Probe的UV映射.

    3. Box Offset—取样点相对于影响范围中心的偏移. 当勾选了Box Projection的时候, Box Offset会影响Reflection Probe的UV映射.

    4. Box projection:一般情况下,反射cubemap是被假设在无限远出投射出来的图像,不同的角度都能看到反射的团,但是当你距离反射物体远近改变时,这个反射的图案不会发生改变,这个特性,一般情况下,在室外场景很适用,但是到了室内就不行了,开启Box projection 选项,(支持Shader Model3以上平台可用)允许我们创建一个投射有限距离内的物体,当我们与反射物体距离发生变化时,反射图案的尺寸也同样发生变化,Probe Size以及Probe Origin会影响Reflection Probe的映射图案的效果.

    5. Shadow Distance—反射阴影距离, 特性和Quality Setting中的特性一样, 数值越小, 在反射画面中阴影显示越近, 但阴影越精细, 调成0会完全关闭阴影.

    6. 相互反射:有一种情况,两个镜子离得很近,相对放着,每个镜子都不仅反射镜子的反面,还反射了这个镜子产生的折射。结果是无尽的两者间的反射,这个就叫做相互反射。反射探头通过从他们的位置获取镜头快照来创建cubemap,然而,只有要给镜头快照是无法实现相互反射的效果,所以,相互反射阶段需要额外的快照。反射可以在两个物体间反弹的次数可以通过light窗口,environment->environment reflections->bounces属性设置。这个会对所有探头全局变化。bounce为1,光探头看到的反射物体是黑的,为2,第一次相互反射的物体可见,为2,第二层反射的物体可见。注意,反射的反弹数和探头在整个烘焙过程中被递增再次烘焙的次数。

    Reflection Probe性能和优化

    渲染一个反射探头的cubemap会消耗大量时间是由于:

    1. 需要在探头的起始位置分别渲染6个cubemap面;
    2. 这些探针需要为每个反射级别单独花费时间渲染;
    3. cubemap的不同mipmap需要一个混合的过程;
      渲染probe的时间既影响编辑器内部烘焙,又影响实时性能。下面是一些性能优化的建议。

    统一的建议

    1. 分辨率:当反射细节不是很重要(反射物体很小或很远)时,可以将分辨率设置小点儿;
    2. culling mask:用这个可以避免渲染一些不重要的物体,比如一些小物体可以放到一个layer中,用culling mask避免在反射中渲染他们;
    3. 贴图压缩:可以通过控制烘焙反射探头贴图的压缩减少gpu消耗:在light窗口,Environment Lighting->Reflection,压缩下拉列表。注意,实时反射探头在内存中没有压缩,他们在内存的大学取决于分辨率和HDR设置。所以,实时反射探头分辨率更敏感;

    实时探头优化

    实时探头的渲染负载比编辑器里烘焙的影响更大。更新比较频繁,如果不正确管理会对帧率影响较大。以下几个属性可以让你有效率地控制探头渲染:

    1. 刷新模式

      • 控制什么时候刷新探头,最费的是逐帧,需要的代码最少,但如果每个探头都用这个,将会有很大的性能问题。
      • On Awake,探头只是在运行,启动场景的时候刷新一次。可以用于探头在运行时安装,再也不修改的情况;
      • via Scripting, 让你通过脚本来控制光探头的更新。尽管需要编写脚本,但确实考虑到了性能优化。比如,根据表面上的大小更新探头。
    2. 时间分段

    当刷新模式设置为每帧,处理负载会很大。时间分段让你将更新消耗扩散到好几帧,从而减小给定时间的负载。这个属性有3种选择:

    • 所有面一次:使6个cubemap的面(在同一帧)立即渲染,但这6个第一级mipmap的混合放在不同帧进行。剩下mipmap的混合放在同一帧,结果在另一帧中被拷贝到cubemap。整个更新花费9帧,性能消耗中等(9帧之内再次通过Via Scripting调用刷新是无效的);

    • 单独面:跟所有面一次差不多,只是最初每个面的渲染放在单独的帧(而不是同一帧)。整个update花费14帧。这个选项对帧率的影响最小,但较长的更新时间会比较明显。比如灯立马就亮了(14帧之内再次通过Via Scripting调用刷新是无效的);

    • 没有时间分段:每个探针的更新在一个单独的帧里完成,保证了反射与物体的表现精确地同步,但成本很高 (1帧之内再次通过Via Scripting调用刷新是无效的)。

    • 参考:http://blog.csdn.net/yy763496668/article/details/52815579
      http://blog.csdn.net/yupu56/article/details/53487216
      https://docs.unity3d.com/Manual/ReflectionProbes.html

    展开全文
  • unity提供的reflectionProbe可以提供反射周围真实环境的伪反射; 下面先从属性功能上解释一二: bake类型的type,其作用就是烘焙出反射贴图(cubemap)。烘焙的时候注意如果想把某物体烘焙进去,该物体应该...

    反射探头最主要的作用:模拟反射; 
    举个例子:在大型场景中,需要作出建筑物的外表玻璃的反射效果,这种效果可以使用镜子shader来做实时真实反射,但是性能开销太大。unity提供的reflectionProbe可以提供反射周围真实环境的伪反射; 


    下面先从属性功能上解释一二: 
    bake类型的type,其作用就是烘焙出反射贴图(cubemap)。烘焙的时候注意如果想把某物体烘焙进去,该物体应该勾选reflectionProbe static。当你需要反射贴图时,自己生成一个,多好。。。 
     
     


    custom类型的type,用你指定的cubemap来反射周围环境,营造氛围不错。。。 
    上图: 
     
    着重讲讲realtime类型的type,refreshMode分三类:on awake/every frame/via scripting。on wake 就是程序开始运行时获取周围环境生成的一张反射贴图,之后你再改变外部环境,反射贴图不会有变化,还是这个样。。。。(当然如果你是改变reflectionProbe的某些参数还是会变的);every frame ,顾名思义就是每一帧都会获取周围环境来生成反射贴图。在该模式下,相应的time slicing 有三种类型:all faces at once/individual faces/no time slicing,效果上区别不大,性能上有些许区别。比如当你移动反射探头的时候,no time slicing如丝滑般过渡,all face at once 就有一点卡顿的感觉,individual faces 卡顿感更强。。。;via scripting 这个没发现有啥特别的。。。。。。。 
    然后是importance,这个主要是在决定一个物体同时受到几个reflectionProbe影响时的优先级。举个例子:一个物体在两个反射探头的范围之内,那个权重就是各0.5,如图: 
    当我把其中一个reflectionProbe的importance改成2(默认是1),那么权重分配就成这样了: 
     
    intensity :在反射探头的范围内控制环境亮度大小,如同光源一样照亮周围; 
    box projection :最上面的动态图中,从不同角度看镜面有不同的景象,但是你把摄像头拉远,在反射平面上看到的景象大小并不会改变。如果你想让反射的景象随距离发生变化,那么久勾选box projection; 
    box size : 反射探头影响范围大小; 
    box offsize :box的偏移; 
    reselution:值越大,反射的景象越清晰; 
    shadow distance :反射景象中阴影的有或无,明显后者不明显; 
    clear flags :skybox则反射天空盒,solid color 反射背景颜色; 
    culling mask :指定反射哪一层的物体; 
    clipping planes :控制反射探头反射环境的远近,near仅far远;

    最后说一下,上面的动图怎么来的:在reflectionProbe的范围内,将物体材质选为standard,然后将smoothness调为1(可以是多个物体,为解决大范围多楼层的反射提供思路);
    ————————————————
    版权声明:本文为CSDN博主「差点忘记打铁了」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/Fenglele_Fans/article/details/81029265

    展开全文
  • srp中使用Reflection Probe

    2020-07-06 19:44:39
    Reflection Probe——反射探针 1、功能:用来反射天空盒或者反射某一个块的场景。 2、表现: 在物体上加入了周围场景的颜色。 3、实现方式 在场景的某个位置创建一个Reflection Probe 调整好位置,ok此时如果有...

    Reflection Probe——反射探针
    1、功能:用来反射天空盒或者反射某一个块的场景。
    2、表现:
    在这里插入图片描述
    在物体上加入了周围场景的颜色。

    3、实现方式
    在场景的某个位置创建一个Reflection Probe
    在这里插入图片描述
    调整好位置,ok此时如果有天空盒的话:
    在这里插入图片描述
    则可以进行bake了:
    在这里插入图片描述

    在这里插入图片描述

    ok,这是bake天空盒。
    那么场景的物价也是可以bake的,只要把要bake的物价设置为:
    在这里插入图片描述
    即可,连同物价一起bake。

    4、采样reflection probe

    TEXTURECUBE(unity_SpecCube0); //环境贴图
    SAMPLER(samplerunity_SpecCube0);
    float4 unity_SpecCube0_HDR;
    
    
    float3 SampleEnvironment(SurfaceProperty sp, BRDFProperty brdf)
    {
    	float3 uvw = reflect(-sp.viewDir, sp.normal);
    	float4 environment = SAMPLE_TEXTURECUBE_LOD(unity_SpecCube0, samplerunity_SpecCube0, uvw, 0.0); //这里的0.0为考虑mip
    	return DecodeHDREnvironment(environment, unity_SpecCube0_HDR);
    }
    

    ok,下面就是C#要注意的地方:
    在这里插入图片描述

     DrawingSettings drawingSettings = new DrawingSettings(m_shaderTagId, sortingSettings);
            drawingSettings.perObjectData = 
            PerObjectData.Lightmaps | 
            PerObjectData.LightProbe | 
            PerObjectData.LightProbeProxyVolume | 
            PerObjectData.ReflectionProbes; //这里要或一个标志位,让其能够将reflection probe的图传入shader中去
    

    ok,最终效果:
    在这里插入图片描述

    展开全文
  • 利用ReflectionProbe实现镜面效果

    千次阅读 2019-10-19 11:24:53
    实施步骤1.1 新建Plane作为镜面1.2 放置模型1.3 新建ReflectionProbe1.4 反射求简易说明 前言 ReflecitonProbe 反射球(又叫反射探针)可以实现特定区域的镜面反射效果,可以做出更逼真的效果。 1.实施步骤 1.1 新建...

    前言

    ReflecitonProbe 反射球(又叫反射探针)可以实现特定区域的镜面反射效果,可以做出更逼真的效果。

    1.实施步骤

    1.1 新建Plane作为镜面

    新建一个材质,并添加给Plane,材质为标准材质,并调节Metallic和Smoothness属性,如下图所示,这两个参数并非要如图所示数值,根据不同的地面颜色调节。
    在这里插入图片描述

    1.2 放置模型

    将模型放置在Plane上,并给模型设置层,如Reflection。

    1.3 新建ReflectionProbe

    新建一个反射球,并将CullingMask设置为Reflection,并将BoxSize设置为包括地面等需要接受反射的元素。其实此时已经有反射效果,只是反射球位置问题并未显示,将反射球放置在摄像机关于反射面Plane的对称位置上,即可显示,如下图所示:
    在这里插入图片描述
    效果如下:
    在这里插入图片描述

    1.4 反射求简易说明

    当模型表面金属性和光滑度属性设置较高时,模型表面应该有镜子的效果。但是在3D环境下模拟此效果是比较消耗性能的,所以可以通过ReflecitonProbe来实现。

    如果要想镜面效果跟随车移动则需要把反射球的Type改为RealTime,如下图所示。Type为Baked表示烘培一次形成的反射效果,custom为自定义反射效果,即通过环境球(360°全景图)代替baked类型烘培一次的反射效果,Realtime则为实时反射,即每次Awake时或者每一帧都去生成当时反射范围内的环境,如果反射球Box范围内均为静态的则不需要此模式

    展开全文
  • 在部分Unity2020版本中Reflection Probe中的Box Projection默认是禁用的。 解决方法 Edit——Prohcet Settings——Graphics中的Tier Settings按照下图设置一下就可以了。
  • unity中的reflectionProbe的使用

    千次阅读 2017-09-05 14:23:04
    下面说一下Reflection Probe, 大家都知道:当使用标准着色器时,每一个材质都会具有一定程度的镜面反射(specularity)和金属反射 (metalness)属性,在没有强大的硬件来处理即时光迹追踪反射的情况下,我们得仰赖预先...
  • 我们可以在场景中放置ReflectionProbe,但是如果不放置,也不至于完全没有效果,当场景有天空盒并且开启了Refrection,Unity默认会给我们一个天空盒的ReflectionProbe的效果,在烘焙的时候就会生成这个信息,与...
  • Unity Reflection Probe 烘焙Skybox时的模糊问题 我们有时候会利用Reflection Probe来烘焙一个Cubemap出来,然后赋给Material作为天空盒填入Lighting设置中,但默认的流程会出现一个奇怪的现象:画面存在一些模糊感...
  • Unity5.x Reflection Probe反射探针

    万次阅读 2016-12-06 15:31:58
    下面说一下Reflection Probe, 这东西很扯, 工作原理在这里摆着呢, 显然Reflection无论怎么调节Bound的或者采样点的位置, 都无法适应一个”房间”或者一个”地板”, 他只适用于一个玻璃球, 一个杯子, 或者是其他的...
  • Unity 反射shader ...reflection probe,bake场景为cubemap的组件 cubemap, 一种纹理格式,用于天空盒子 基础的shader知识 反射shader Shader "DC/Lighting/Reflect" { Properties { _Environment ("Env...
  • ReflectionProbe 烘焙

    2020-06-06 21:10:49
    } foreach (Object obj in Selection.objects) { if (((GameObject)obj).GetComponent()) { ReflectionProbe reflectionProbe = ((GameObject)obj).GetComponent(); Lightmapping.BakeReflectionProbe(reflection...
  • 设置物体为static,支持reflection probe 设置物体Renderer支持reflection probe bake设置,选Custom,bake出cubemap 说明 最后bake出来的文件会被保存到用户指定的位置,拖到material中即可使用 ...
  • Unity Reflection Probe 测试

    万次阅读 2016-01-21 14:50:02
    unity升级到5.0版本以后,新加了很多东西,如果你还陷在老项目的泥潭中无法升级,就只能自己装个5.x体验了。...同时使用了一个Reflection Probe,就是一个反射探头,能记录一定空间的环境。如果使用了standard这
  • 如上图中右下部分所示 (2)在移动端采样cubeMap的注意点: (3)全局设置中影响CubeMap的参数: 在lighting设置全局反射探针,unity中一个Shader中最多混合两个cubeMap的影响 (4)使用Reflection Probe,需要先 ...
  • Reflection Probe 这个和我之前插件效果是同时使用的,主要是以调节场景效果为主的。 一:添加反射球 在场景当中创建一个空物体Empty 在这个空...Importance:主要是在决定一个物体同时受到几个reflectionProbe影响时
  • 1)如何动态使用烘焙出来的ReflectionProbe-0.exr信息 ​2)相机拉远后,SpriteRenderer图有明显的锐利 3)Unity版本升级后Text的颜色修改无效 4)Shader中UNITY_REVERSED_Z的含义 这是第273篇UWA技术知识分享的推...
  • private ReflectionProbe probe; void Start() { this.probe = GetComponent(); } void Update() { if(reflectionPlane == null) { return; } Camera camera = Camera.main; if(camera == null) { return; } float ...
  • deferred 和forward reflection probe 的差别 deferred ref是逐像素的 forward是逐 obj 但我还遇到一个问题就是box projection reflection probe 就是parallax corrected cubemap 测下来的结果是 deferred下...
  • unity_SpecCube0这里如果在reflectionprobe范围内就传reflectionprobe 如果在probe范围外这里就传environmap 在GI的间接光照specular计算里面 那张黎曼积分 它用 cubemap的lod给近似了。。。。。用gloss来取...
  • 给standardShader加上镜面反射(非ssr,非ReflectionProbe) 1:ssr不稳定,且看不到的地方不能发射。 2:反射探头(reflectionProbe)性能开销大。
  • reflection Probe是一个反射探头,它也是用于环境反射,但是他不需要我们手动写shader。具体原理:给物体加上该组件后,它会自动或者手动烘焙一块指定的区域,他会把它从环境中因反射接受到的信息存到一个cubeMap中...
  • (1) ReflectionProbe 的参数说明:*** Specualr: 采样cubeMap的MipMap的lod,实现模糊效果 Diffuse: 采样cubeMap的MipMap的lod,实现模糊效果 1.此参数控制使用的是哪个级别的MipMap 2.specualr 的采样是 texCUBElod(_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 965
精华内容 386
关键字:

reflectionprobe