Shader简介

着色器(Shader)在Unity中是一个脚本,它会应用材质中所包含的属性用来将3D物体的mesh渲染成屏幕上显示的2D图像。Shander的代码和对应的渲染管线是相关的。

    在Unity中,具体使用的shader依赖于所选择的渲染管线。 

Shader的类型

    Shader大体上可以粗略的分成两种操作类型:片元着色(Fragment Shading)和顶点着色(Vertex Shading)。

    片元着色,也称为像素着色,用于进行逐像素计算颜色的操作。顶点着色操作mesh的顶点,典型地操作是改变顶点的位置使得表面发生变化。

    执行这种两种操作的着色器通常被称为片元着色器和顶点着色器。

基于物理的着色器和渲染(Physically based shaders & rendering)

    随着计算机性能变强以及渲染技术的进化,基于物理的渲染PBR(Physically Based Rendering)的使用变得更加广泛。PBR模拟了真实世界的物理和光线,用来实现具有真实感的阴影、反射 、环境光等。

    PBR中光源和表面的属性保持分离。光源通过它们的亮度、颜色和范围进行定义。表面使用材质来定义,通过颜色,反射性以及其它真实世界中光在表面上如何表现的特性来描述。

    下图显示了场景中不同光照下相同的表面所呈现的样子,这些表面的属性在不同的图像中是一样的,只有光源的颜色和方向在发生变化。

    当使用non-PBR(non-Physically Based Rendering)时,所得到的颜色、阴影和反射效果要么是近似的结果,要么就没有进行渲染。对于某个non-PBR着色器来说,一个红色的材质可能渲染为平坦的红色或者带有简单的反射和阴影。Non-PBR通常看起来不如PBR真实,但它可以做出期望的风格化效果。比如卡通着色器(Toon shaders)会让一个3D场景中的表面看起来有2D卡通效果。如下图的绯红结系:

URP(Universal Rendering Pipeline)中的shader

    一个项目中,shader必须和所使用的渲染管线兼容。Unity的URP工程中,会看到有许多shader的名字中带有Lit或Unlit。Lit shaders会响应场景中的光源,Unlit shaders则不会。Unlit shaders在某些艺术风格中非常有用,也能通过不使用光源来优化项目使其更高效。

猜你喜欢

转载自blog.csdn.net/vivo01/article/details/128927604