Unity Shader总结(十六)——PBS(环境光照、实时光源、反射探针 )


要先在Edit–Project Settings–Player–Other Settings–Color Space中选择Linear,因为基于物理的渲染需要使用线性空间;
金属高光反射强,非金属漫反射强

金属工作流

在这里插入图片描述
Albedo对应物体的整体颜色

高光反射工作流

在这里插入图片描述

Albedo定义了表面的漫反射强度;

光照面板

在这里插入图片描述
mode中实时光照比较耗费性能,改为baked会将光照效果烘焙到光照纹理(lightmap)中,但动态的物体的阴影无法改变,最好用在静态物体上,使用mixed会混合实时模式和烘焙模式,勾选静态的物体会使用烘焙;
bounce intensity控制间接光照的强度,0时只有直接光照,意味着光线只会反射一次;

反射探针

在这里插入图片描述

在场景中特定的位置上对整个场景的环境反射进行采样,并把采样结果存储在每个探针上;当包含反射效果的物体经过探针时,unity会把探针存储的反射结果传递给物体使用的反射纹理,如果物体周围存在多个探针,unity会在这些反射结果之间进行插值,来得到平滑渐变的反射效果;

探针类型

Baked:提前烘焙来得到该位置使用的Cubemap,游戏运行时Cubemap不会变化,适用于静态物体(被标识为Reflection Probe Static);
Realtime:实时更新当前的Cubemap,不受静态还是动态物体的影响;可以通过触发来精确控制反射探针的更新;
Custom:既可以从编辑器中烘焙它,也可以使用一个自定义的Cubemap来作为反射映射,但自定义的Cubemap不会被实时更新;

反射探针应该放置在具有明显反射现象的物体旁边,或者是墙角等容易发生遮挡的物体周围;反射探针有影响区域,进入该区域的反射物体就会被影响,多个反射探针的影响区域往往有所重叠。unity会进行混合,实现平滑过渡;

互相反射

因为之前使用的Cubemap不允许互相反射,比如两个面对面的镜子,一个镜子只会反射另一个镜子,但不会反射另一个镜子里的图像
在这里插入图片描述
该场景模拟了两次互相反射,在每个金属球的位置各放置一个探针,并把球的mesh renderer中的reflection probes设置为simple,这样保证它们使用离自己最近的探针
在这里插入图片描述
改变其中的Bounces可以控制反射次数;

本章为《Unity Shader入门精要》总结的最后一章,详细内容查阅书籍;

猜你喜欢

转载自blog.csdn.net/memory_MM_forever/article/details/118542712
今日推荐