Shader和材质

在模拟物理世界的时候,一个显而易见的问题,图像的仿真。而在计算机中普遍的做法是通过Shader和Material.

通过它们可以做什么?

例如:3D表面的颜色(color)、反射率(reflectivity)、平滑度(smoothness)、透明度(transparency)、表面变化(surface variations)等

网格和渲染

在探究我们的模拟现实之前, 先要知道我们如何建造现实的“物体”。 物体要先要有其形态,在计算机中,我们通过定点和网格数据建造物体的形态,通过法线(normals)将网格渲染为曲面。而我们常常通过一些建模软件(Blender等),来完成这样的“物体”模型的建造。

Mesh of Unity

Unity的网格,通过Mesh Filter组件控制网格形状和 Mesh Render组件控制网格的渲染。 通过在Mesh Render中使用材质(Material)从而控制网格的显示。当然同个网格中可以使用多个材质。

着色器(Shader)

实际上Shader负责控制网格的渲染方式,例如使用颜色,使用那个材质等。Shader将材质中包含的属性(颜色,透明度)赋予3D对象的网格并生成屏幕显示的2D图像。

着色器类型

  1. 片段着色器(fragment)和定点着色器(vertex shading)

需要注意的是在Unity中不同渲染管道支持的Shader是不同的。例如: URP(Universal Render Pipeline)模式下则支持符合该模式规范的内置shader和自定义shader. 特别注意的是URP模式下不支持Unity Standard Shader

PBR, Physically Based Rendering 基于物理的渲染。模拟物理环境下得光照,反射,颜色,阴影,痕迹等等。当然对硬件性能的要求也更高。

Not PBR,只具有特定的风格的模拟,

光的行为方式

  1. 镜面反射(specular reflections)
  2. 漫反射(diffuse reflections) 镜面反射和漫反射构成了物体表面的总反射率(total reflectivity)
Unity漫反射率
  • 漫反射率指物体的可见颜色,即从其表面反射的颜色。 Unity中通过Base Map或者Albedo或Diffuse Map配置漫反射。
  • Albedo(反照率) Albedo描述了漫反射的测量。它通常指定为常规颜色,表示为红色,绿色和蓝色即RGB。RGB值可以转换为色调,饱和度和亮度的值。反照率颜色的亮度对应漫反射的量,色调和饱和度描述从物体表面溢出的光的质量。
镜面反射

镜面反射表示反射的光就像一面镜子一样,一般应用于金属物体。镜面反射不仅仅具有高平滑度Smoothness,还要具有高光Specular.

Unity中通过一下流程调整shader显示为镜面反射
1. Workflow Mode修改为 Specular
2. 修改Specular Map为白色(测试)
3. 将Smoothness调整为1

* 平滑度(Smoothness)也成为光泽度,使镜面反射成为焦点。
凹凸贴图

Unity中通过法线贴图(normal map)和高度贴图(height map)产生物体的凹凸效果。不同于使用网格生成的凹凸效果,使用贴图性能将会更好。

use Shader Graph create shader