首页 > 其他分享 >UnityShader入门精要第十四章-非真实感渲染原理总结

UnityShader入门精要第十四章-非真实感渲染原理总结

时间:2023-11-01 20:22:49浏览次数:35  
标签:渲染 模型 UnityShader 风格 真实感 轮廓线 精要 轮廓 方法

前言

开发中常常遇到的一个问题就是画面风格。接下来要介绍的就是统一修改画面风格的手段:非真实感渲染。这里同样只总结原理。

非真实感渲染

非真实感渲染 (Non-Photorealistic RenderingNPR) 的方法来渲染游戏画面。非真实感渲染的一个主要目标是,使用一些渲染方法使得画面达到和某些特殊的绘画风格相似的效果,如卡通、水彩风格等。

卡通风格

使用这种风格的游戏画面通常有些共有的特点,例如物体都被黑色的线条描边,以及分明的明暗变化等。

实现卡通风格的方式有很多,其中之一就是使用基干色调的着色技术。Gooch 等人在他们 1998 年的一篇论文中提出并实现了基于色调的光照模型。在实现中,常使用漫反射系数对一维纹理进行采样,以控制漫反射的色调;其高光效果也和我们之前学习的光照不同,在卡通风格中,模型的高光往往是一块块分界明显的纯色区域。

......

除了光照模型不同外,卡通风格通常还需要在物体边缘部分绘制轮廓。在之前的章节中,我们曾介绍使用屏幕后处理技术对屏幕图像进行描边。在本节,我们将会介绍基于模型的描边方法,这种方法的实现更加简单,而且在很多情况下也能得到不错的效果。

渲染轮廓线

书中提到五种方案:

  1. 基于观察角度和表面法线的轮廓线渲染。这种方法使用视角方向和表面法线的点乘结果来得到轮廓线的信息。这种方法简单快速,可以在 Pass 中就得到渲染结果,但局限性很大,很多模型渲染出来的描边效果都不尽如人意。

  2. 过程式几何轮廓线渲染。这种方法的核心是使用两个Pass渲染。第一个Pass 渲染背面的面片,并使用某些技术让它的轮廓可见(常常是法线外扩);第二个Pass再正常渲染正面的面片。这种方法的优点在于快速有效,并且适用于绝大多数表面平滑的模型,但它的缺点是不适合类似于立方体这样平整的模型。

  3. 基于图像处理的轮廓线渲染。在第12、13章介绍的边缘检测的方法就属于这个类别。这种方法的优点在于可以适用于任何种类的模型。但它也有局限,一些深度和法线变化很小的轮廓无法被检测出来,例如桌子上的纸张。

  4. 基于轮廓边检测的轮廓线渲染。上面提到的各种方法,一个最大的问题是,无法控制轮廓线的风格渲染。对于一些情况,我们希望可以渲染出独特风格的轮廓线,例如水墨风格等。为此,我们希望可以检测出精确的轮廓边,然后直接渲染它们。检测一条边是否是轮廓边的公式很简单,只需要检查和这条边相邻的两个三角面片是否满足以下公式。

    \[(n_{0}·v > 0)≠(n_{1}·v > 0) \]

    其中n0n1分别表示两个相邻三角面片的法向,v是从视角到该边上任意顶点的方向。上述公式的本质在于检查两个相邻的三角面片是否一个朝正面、一个朝背面。这种方法也有缺点,除了实现起来相对复杂外,它还会有动画连贯性的问题。也就是说,由于是逐帧单独提取轮廓,所以在帧与帧之间会出现跳跃性。

  5. 最后一个种类就是混合了上述的几种渲染方法。例如,首先找到精确的轮廓边,把模型和轮廓边渲染到纹理中,再使用图像处理的方法识别出轮廓线,并在图像空间下进行风格化渲染。

书中给出的描边代码示例正是使用了法线外扩来实现的,但要注意此方案不适用于棱角分明的物体,比如立方体,应用时会发现各个描边面之间出现空隙。

高光反射

Blinn-Phong模型不同,卡通风格的高光反射在计算normalhalfDir的点乘结果后,会把该值和一个阈值进行比较,如果小于该阈值,则高光反射系数为0,否则返回1

素描风格

需要一组素描风格的多级渐远纹理。
在顶点着色器中,根据光照结果来决定这一组纹理的混合权重;
在片元着色器中,根据混合权重来混合这组纹理的采样结果。

参考资料

法线外扩法-白泽图博客园

标签:渲染,模型,UnityShader,风格,真实感,轮廓线,精要,轮廓,方法
From: https://www.cnblogs.com/OtusScops/p/17804017.html

相关文章

  • unity shader入门精要第六章原理总结
    前言开发中常常有一些画面表现上的需求,但苦于不会写Shader,没办法实现,现在特地来学习相关原理知识。UnityShader入门精要的第六章前的内容已经很详尽了,在此不做记录。但第六章中的基础光照模型比较常见,这部分内容在GAMES101中也有讲解,可见其重要性,在此记录一下。标准光照模型(Bli......
  • 线程同步精要
    并发编程有两种基本模型:messagepassing&sharedmemory。线程同步的四项原则:首要原则是最低限度的共享对象,减少需要同步的场合,一个对象能不暴露给别的线程就不要暴露,如果要暴露,优先考虑immutable对象,实在不行才暴露可修改的对象,并用同步措施来充分保护它。其次是使用高级......
  • [6月摸鱼计划] 微机原理的一些精要概念
    微机原理是指微型计算机的基本原理和工作原理。以下是微机原理的一些精要概念: 1.中央处理器(CPU):微型计算机的核心部件,负责执行指令和控制计算机的运行。存储器:用于存储数据和指令的设备,包括主存储器(RAM)和辅助存储器(硬盘、固态硬盘等)。输入设备:用于将外部数据输入到计算机中的设备......
  • 报告PPT(123页):Python编程基础精要
    本文所发PPT是董付国老师2018年5月份在成都第二届全国高校“数据科学与大数据技术”专业教学研讨会(电子工业出版社)上作报告用的。......
  • Java 向 Word 模板插入数据(精要)
    PageOffice是一款实用的在线文档编辑工具,它让开发者能够轻松地向Word文档的特定部分动态地插入数据。在PageOffice中,这类特定部分主要涉及两个关键概念:数据区域(DataRegion)和数据标签(DataTag)。1.基本理念数据区域:数据区域实际上是一种特殊的Word书签对象,它位于Word文档......
  • 第2章 线程同步精要
    第2章线程同步精要线程同步的四项原则,按重要性排列:1.首要原则是尽量最低限度地共享对象,减少需要同步的场合。一个对象能不暴露给别的线程就不要暴露;如果要暴露,优先设置对象不可更改;实在不行才暴露可修改的对象,并用同步措施来充分保护它。2.其次是使用高级的并发编程构件,如TaskQ......
  • Shader入门精要笔记 - CH10.1_环境映射之折射
    折射:光线从一种介质进入另一种介质,传播方向会发生改变  Cubemap是在Teapot_Refract的位置拍摄的Shader"My/Tex2/RefractCubeMap"{Properties{......
  • 真实感渲染:训练营2
    大家好~本课程为“真实感渲染”的线上课程,从0开始,介绍相关的图形学算法和数学基础,给出详细的数学推导、伪代码和实现代码,最终带领大家开发出基于物理的渲染器线上课程资料......
  • Unity Shader 真实感水体渲染
    这两周用UnityShader做了点简单的水体渲染,有真实感的也有非真实感的,打算这几天总结整理一下贴出来。毛星云大牛有一篇详细的真实感水体渲染介绍:https://zhuanlan.zhihu.c......
  • Shader入门精要笔记 - CH10_物体表面照出周围环境
     要点1)漫反射和高光发射都是光照到物体表面,然后光反射到人眼2)环境反射是周边环境的画面照到物体表面, 然后环境的画面反射到人眼 贴图漫反射(MainTex)+ 高光......