首页 > blender > blender透明材质渲染不出来-【技术美术图形部分】2.2 模型和材质基础
2023
12-06

blender透明材质渲染不出来-【技术美术图形部分】2.2 模型和材质基础

录制之前,先向这堂课的老师致以崇高的敬意。 我只是一名大三学生,我一个二流研究生,流下了无知的泪水! May先生提到,这次课程安排的目的是为了给艺术类学生一个缓冲空间。 我在写这篇学习笔记的时候,尝试加入一些自己的理解。

温馨的提示! 我发现不需要把目录放在前面,右边有一个滑动目录! ! !

视频地址

【工艺美术百人计划】图形学2.2模型材质基础

1 渲染管线和模型基础知识

伟大的! 这其实就是对之前知识的回顾! (不)

本课之所以提到渲染管线是——从管线入手,看看和模型、材质有什么关系?

1.1 顶点着色器

进行顶点计算,接下来我们将介绍如何改变顶点坐标位置来实现动画效果。

1.2 片段着色器

光照模型的计算,如PBR光照模型等

1.3 模型UV

在建模软件中,执行UV扩展–>扩展后的UV在SP或PS中映射-漫反射贴图、法线贴图、高度图、金属度贴图、AO贴图等。

1.4 模型包含的信息 模型包含的内容 – 从应用程序阶段传递到顶点着色器的数据

我在【技术美术知识储备】纹理基础1.0——纹理管线中讲到纹理管线时,提到过将空间中的点坐标转换为纹理坐标是由建模者完成然后开发的。

5.2.2《Unity Shader入门》书中——模型数据从哪里来? 还提到:除了使用 POSITION 语义来定义传入的模型顶点位置之外,如果想要获取模型上每个顶点的纹理坐标和法线方向,还需要为顶点定义一个新的输入参数着色器并安排一个结构来定义它:

//声明一个结构体a2v,其中包含顶点着色器所需的模型数据

结构a2v {

//POSITION语义告诉Unity用模型空间的顶点坐标填充顶点变量

float4 顶点:位置;

//NORMAL语义告诉Unity用模型空间的法线方向填充法线变量

float3 正常:正常;

//TEXCOORD0语义告诉Unity用模型的第一组纹理坐标填充texcoord变量

float4 texcoord : TEXCOORD0;

};

——Unity支持的语义有:POSITION、TANGENT、NORMAL、TEXCOORD0、TEXCOORD1、TEXCOORD2、TEXCOORD3、COLOR等。

因此,当开发人员获得模型时,它包含:

Vertex – 基于模型空间的顶点坐标信息

Vertex Norma – 基于模型空间的顶点法线信息

Vertex Texcoord 顶点纹理坐标——对应的纹理坐标信息

顶点颜色 – 单个顶点的 RGBA 通道颜色信息。 其中,obj格式的模型文件没有顶点颜色信息,只有fbx格式有。

.obj 与 .fbx

2 材质基础 2.1 材质、纹理和着色之间的关系 2.1.1 材质和纹理之间的区别

通常,当谈到纹理时,我们往往更关注图片,而当谈到材质时,我们往往更关注属性。 例如:

我个人认为添加属性增加了与外界(比如光)的交互感,而纹理实际上是静态的表面外观。

2.1.2 材质与着色的关系

着色是一个包含材料属性的过程。 在这个过程中,需要根据材料属性(漫反射等)和光源信息(光源方向、角度等),用方程计算出某个观察方向的出射(exitance),用于描述出射光的数量和方向。 )。

2.2 亮点? – 分散

有些物体反射光线时散射并不多,高光点很小,比如下图左上角的那些; 有些物体比较粗糙并且分散很多,这会产生更大的半径。 高亮点,例如右下角高亮点越高,范围越宽。

讲完了亮点项,我们就开始粗略的介绍一下——漫反射、镜面反射、折射,还有粗镜面反射、粗镜面折射,然后到多层材质、次表面散射和蒙皮模型。这些都是非常熟悉的灯光。 这里我会简单介绍一下各个概念,但是会更详细的划分,比如

2.3 光照模型——计算阴影的方程

上述方程通常称为光照模型。 光照模型是我们非常熟悉的!

2.3.1 标准照明模型-经验模型

最开始提出的是最基本的标准光照模型,只考虑直接光照。 它并不完全符合现实世界的光照现象,但由于其使用方便、计算速度快、效果较好,仍然被广泛使用。

标准光照模型有很多名称,Phong光照模型就是其中之一:1975年,Bui Tuong Phong提出了使用兰伯特光照模型和计算漫射光照的镜面反射来建模反射光的想法。 后来Blinn提出了进一步简化的计算方法,因此也被称为Blinn-Phong光照模型。

2.3.2 PBS——基于物理的着色

为了渲染更高质量的图像,基于经验的标准光照模型已经不再适用,因此实时渲染中逐渐采用基于物理的渲染技术(Physically Based Shading,PBS),该技术可以控制光与材质之间的行为。 以获得更真实的建模。

还记得101中,沉彦在介绍BRDF之前先介绍了辐射测量学的知识。 为了说明这一点,辐射率的概念可以用来量化光。 于是引入了BRDF(双向反射分布函数),用数学表达式来描述物体表面上的点与光相互作用的过程。

BRDF又分为漫反射项和镜面反射项:

其中,BRDF的大部分镜面反射项都是基于Microfacet理论的假设,因此Microfacet模型可以模拟粗糙的镜面反射和多层材料。

2.3.3 PBR和BPS有什么关系? Unity 中的 PBS?

哇,其实我在看完《The Essentials》之后才发现:说实话,PBS 和 PBR 并不完全是一回事。

PBR(Physically Bsed Rendering)是一种渲染方式,PBS就是PBR使用的材质。 PBS只考虑真实物理场景中材质的效果,而PBR则考虑全局照明(GI)、环境光遮挡(Ambient Occlusion,AO)等复杂的东西。 这些加上 PBS 就是 PBR。

受迪士尼的 BRDF 启发,Unity 中的 PBS 封装了 PBR 算法。 修改PBS的参数就可以达到PBR的效果,相当于提供了一个通用的Shader。 Unity 支持两种流行的基于物理的工作流程:

这里仅简单提及这一点。 至于如何实现,我稍后会写博客介绍。

2.4 几种材质(光照模型)

这部分指的是:

基于物理的着色(2) – Microfacet材质和多层材质 – 知乎()

基于物理着色(4)-次表面散射-知乎()

2.4.1 漫反射

漫反射是最容易模拟的,比如石头、水泥、砖块等。最简单的朗伯模型简单粗暴地假设光线必须均匀反射。

2.4.2 平滑镜面反射

将入射光按表面法线反射,仅在反射方向有能量。

2.4.3 折射

像玻璃一样? 反射和折射光能量的量由菲涅耳定律决定。

2.4.4 粗糙镜面反射

这里我们来到可以用前面提到的微表面模型来表示的粗糙镜面反射材料。 该材料根据表面粗糙度将入射光分散并反射到镜面反射方向周围的方向。 表面粗糙度决定反射的分布。 表面越粗糙,分布范围越广。

这种材质在现实中也很常见,比如各种磨砂质感、粗糙的金属表面。

2.4.5 粗糙镜面折射

这种材料将入射光同时反射和折射到镜面和折射方向周围的方向,分布的大小仍然取决于表面粗糙度。

现实中这种材料的一个例子是毛玻璃。

2.4.6 多层材料

多层材料。 现实中,许多材料都有不止一层,例如彩绘木地板、塑料、大理石、浅河、瓷器等。

材料模型通常是在考虑多层信息的情况下构建的。 对于大多数材质,透明镜面层将直接添加到漫反射表面。 该层可以是粗糙的或光滑的。 效果如下:(图片来自参考文章)

但对于像车漆这样的材质,除了金属质感之外,还有一层光滑透明的清漆,就需要更复杂的模拟方法。

2.4.7 次表面散射

这种材料的光不仅在物体表面发生散射,而是先折射到内部,在内部多次散射,然后从表面发射出去。 这些材质大多是半透明的,比如玉石、蜡烛、牛奶等,在物体内部经过多次反射,最终反射出去。

关于次表面散射的理论和算法,可以先看看Physical Coloring(4)-次表面散射-知乎()

2.4.8 多层皮肤模型

皮肤实际上是一种次表面散射。

皮肤可以被认为是三层:油层、表皮层和真皮层。 油层直接将光线反射出去,形成肌肤亮点; 其余的光线会进入表皮和真皮,一部分被吸收(获得颜色),一部分被散射,最后从皮肤发射出去。

2.5 改变材质表面-法线贴图

您可以使用法线贴图来调整法线,通过影响光照计算的结果来改变最终的渲染效果。

(法线贴图简直就是一个伟大的发明!

3 模型数据在渲染中的作用

函数大致分为三类:纹理动画、顶点动画和顶点颜色。

3.1 纹理动画

这在纹理基础知识文章中有所体现! 【技术美术知识储备】纹理基础2.0-凹凸贴图_flashinggg的博客-CSDN博客

存储在切线空间中的法线信息可以进行 UV 动画 – 移动效果是通过移动纹理的 U/V 坐标来实现的,以创建复杂动画的幻觉。 例如blender透明材质渲染不出来,百人计划课程中介绍了火焰和水面波动的效果。

水面波动效应原理1-光计算

通过改变通过法线贴图计算光照时使用的法线,可以改变光反射的方向,进而改变反射和折射的方向。

水面波动原理2-水面反光物体动画

这部分是通过改变UV采样点的位置来实现动画效果,可以展现水面倒映的物体随水面起伏的动画效果。

3.2 顶点动画

虽然同一个Shader中的顶点计算方法是相同的,但是顶点数据不同,实现的效果是不同的。 3D软件中动画的“K帧”是顶点动画的一种。

例如blender透明材质渲染不出来,在上面的例子中,顶点着色器在控制所有顶点的位置时会执行相同的算法——示例中给出了一个 sin 函数来获取顶点坐标 ✖ sin 函数的值来控制顶点的大小顶点运动值,实现“飞毯飘动”的动画效果。

特别说明:顶点动画需要一定数量的顶点才能达到想要的明显效果。

3.3 顶点颜色

通过在渲染期间控制颜色范围,您可以影响输出结果、控制线条粗细、绘制阴影等。

绘制顶点颜色-插值

这部分其实讲的是通过重心坐标进行颜色插值的原理。 由于101中已经解释过了,我自己也明白了,所以这里简单展示一下!

3.4 顶点法线和曲面法线

注意:表面法线本质上是顶点法线ip形象,但它们的存储方式不同。

着色时需要设置三角形三个顶点的属性。 三角形除三个顶点外的其他点的颜色有三种不同的着色方法:

综上所述吉祥物,平面着色相当于纯粹使用表面法线。 我认为Gouraud和Phong着色都是顶点法线,但前者是先计算顶点颜色然后插值,而后者是先从顶点法线插值。 然后计算像素的法线(更恰当地称为片段)。

一般情况下,顶点法线可以设置为与表面法线相同。 然而,当使用三角形来近似曲面时,使用曲面法线而不是顶条法线会导致渲染结果不均匀,如下图:

可以发现表面法线(平面着色)效果会有突出的边缘。 顶点法线(平滑后)更加平滑。

同样的对比效果可以看出:Face Normals & Vertex Normals(面法线和顶点法线的区别)——翻译

所以为什么?

简单解释解释

表面法线(不进行平滑)相当于说三角形的三个顶点共用一个表面,因此三点插值结果是相同的,无法实现平滑过渡。 顶点法线(平滑后)是每个法线一个点,因此如果三角形每个顶点的法线不同,插值结果就会不同,以达到颜色过渡的效果。

示例 1 – Blender 中的平面着色和平滑着色

例如,如果您将两个球放入搅拌机中,则左侧的球为纯色(默认),右侧的球为平滑色。

示例 2 – 卡通渲染中的平滑

在NPR渲染中,颜色会向法线方向扩展(偏移),以达到卡通笔画的效果。 如果着色不平滑,法线向外扩展时就不会连续,会出现断裂的情况。

作业 1. 顶点颜色的其他函数 2. 模型平滑组对法线有什么影响?

最后编辑:
作者:nuanquewen
吉祥物设计/卡通ip设计/卡通人物设计/卡通形象设计/表情包设计