Shader学习笔记(九)

Shader 高级篇(五)

非真实感渲染

尽管游戏渲染一般都是以**照相写实主义(photorealism)作为主要目标,但也有许多游戏使用了非真实渲染(Non-Photorealistic Rendering,NPR)**的方法来渲染游戏画面。非真实感渲染的一个主要目标是,使用一些渲染方法使得画面达到和某些特殊的绘画风格类似的效果,例如卡通、水彩风格等。

卡通风格的渲染

其中之一就是使用基于色调的着色技术(tone-based shading),往往会使用漫反射系数对一张一维纹理进行采样,以控制漫反射的色调。使用渐变纹理实现过这样的效果。

实现

ToonShading

  1. 声明属性
    在这里插入图片描述
  2. 顶点和片元着色器
    在这里插入图片描述
  3. 定义光照模型所在的Pass
    在这里插入图片描述
  4. 定义顶点和片元着色器
    在这里插入图片描述
  5. 片元着色器中包含了计算光照模型的关键代码:
    在这里插入图片描述

最终效果

在这里插入图片描述

素描风格的渲染

另一种非常流行的非真实感渲染是素描风格的渲染。使用了提前生成的素描纹理来实现实时的素面风格渲染,这些纹理组成了一个色调艺术映射(Tonal Art Map,TAM),如图,从左到右纹理中的笔触逐渐增多,用于模拟不同光照下的漫反射效果,从上到下则对应了每张纹理的多级渐远纹理(mipmaps)。这些多级渐远纹理的生成并不是简单的一层纹理进行降采样,而是需要保持笔触之间的间隔,以便更真实地模拟素描效果。
在这里插入图片描述
本节先不考虑多级渐远纹理的生成,而直接使用6张素描纹理进行渲染。在渲染阶段,首先在顶点着色阶段计算逐顶点的光照,根据光照结果来决定6张纹理的混合权重,并传递给片元着色器。然后,在片元着色器中根据这些权重来混合6张纹理的采样结果。

实现

  1. 声明属性
    在这里插入图片描述
  2. 定义顶点和片元着色器
    在这里插入图片描述

最终效果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42050609/article/details/125017775