渲染8——反射

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wodownload2/article/details/82260868

采样环境光
使用反射探针
创建粗糙和光滑表面
执行立方体盒采样
混合反射探针
本节是渲染课程的第八节。前一小结介绍的是阴影,本节主要介绍间接反射。
本课程使用unity版本5.4.0f3
这里写图片描述

1 环境映射
当前的shader对每个像素着色使用了环境光、漫反射、以及镜面反射。使用这三种技术,可以创建出很逼真的画面了,但是这仅仅是对比较暗,不是光滑的表面有效果,但是对于特别光滑锃亮的物体表面就不那么理想了。

锃亮的表面就像镜子那样。一块完美的镜子会反射所有的光线。这意味着没有任何的漫反射,仅仅有镜面反射。接下来把金属特性调节为1,光滑度调节为0.95,其效果如下:
这里写图片描述
这个球的表面全部是黑色,除了一点的亮色。这不是我们要的镜子,镜子不应该是黑色的,他应该反射的是天空的颜色。

1.1 间接光反射
上面的球体全部变黑了,是因为它仅仅包含了直接光线。为了反射环境光,他必须包含间接光的计算。
在CreateIndirectLight中,我们把specular置为0,这样球体就变黑了。

我们把环境光的强度调整为0,这样比较方便观察反射。把材质球的smoothness设置为0.5 and Metallic为1,把间接光的颜色改为红色,看看其反射的效果:
这里写图片描述

1.2 采样环境光
为了反射环境光,我们得从天空盒对应的立方体盒采样。unity把这个数据存储在unity_SpecCube0,此变量定义在UnityShaderVariables中。

采样立方体贴图,要使用一个3D向量,这个标记的是采样的方向向量。
具体的书写方式为:

#if defined(FORWARD_BASE_PASS)
        indirectLight.diffuse += max(0, ShadeSH9(float4(i.normal, 1)));
        float3 envSample = UNITY_SAMPLE_TEXCUBE(unity_SpecCube0, i.normal);
        indirectLight.specular = envSample;
#endif

这样我们的球体就变为了:
这里写图片描述

这个球体有点太亮了,原因是立方体贴图包含了hdr颜色,hdr颜色的值是可以大于1的,所以会感觉更亮,于是我们需要把hdr映射到rgb。
unity提供了DecodeHDR方法,如下所示:

float4 envSample = UNITY_SAMPLE_TEXCUBE(unity_SpecCube0, i.normal);
indirectLight.specular = DecodeHDR(envSample, unity_SpecCube0_HDR);

改了之后,我这里看了下没有什么变化。

1.3 跟踪反射
反射天空做得很好,但是能够反射周围的实际场景就更好了。于是建立如下的场景:
这里写图片描述

为了反射建筑物,我们必须首先要抓取一个贴图。这个利用的是反射探针的方式,你可以通过GameObject/Light/Refection Probe创建。创建一个它,然后把它放在球体的相同位置。
这里写图片描述

反射探针把环境渲染到了一个立方体贴图中。那就意味着它渲染场景六次,每个面一次。默认的模式,反射探针为Baked。在这种模式下,编辑器自动构建。
这里写图片描述

这个构建出来的贴图只包含静态物体,所以我们的建筑物要设置为静态的。
我们当然可以选择Type为Realtime或者Custom模式。

尽管实时模式下更方便,但是会更耗时。实时的模式下在编辑器下是不会更新的,而baked模式,当静态物体有变化的时候会自动被编译,但是有时候会失效,所以还是手动bake下比较好:

设置静态可以很方便的设置为everything,但是也可以有针对的勾选Reflection Probe Static,如下所示:
这里写图片描述

这里写图片描述

2 不太完美的反射
只有非常光滑的表面才能有强烈的反射。物体表面越粗糙,镜面反射就越少,而与此同时漫反射就会越多。暗淡的镜子,会反射出模糊的效果,那么我们怎么做到这个模糊的反射呢?

我们知道贴图是有mipmap的,就是低采样,产生mipmap的好处是内存减少,但是精度降低。
我们在哪里设置呢?我找了下Reflection Probe面板:
这里写图片描述

这里你可以设置下bake处理的贴图的精度。
精度为16的效果:
这里写图片描述

精度为128的效果:
这里写图片描述

2.1

猜你喜欢

转载自blog.csdn.net/wodownload2/article/details/82260868