百人计划 图形2.2 模型与材质基础
渲染流水线大致过程
1、顶点数据输入到顶点着色器中进行相关的顶点计算,然后进行图元装配,通过点与点之间的关系将点进行连接。2、再到几何着色器(可选着色器)进行图元的增加,再到光栅化通过遍历像素点将一个图元覆盖的像素进行绘制。3、再通过片元着色器对片元进行着色或者添加效果,最后通过测试与混合输入到屏幕上。(其中顶点着色器、几何着色器、片元着色器都称为可编程着色器,都为可编程)
UV
形象地说,UV是物体表面的皮肤,将皮肤划开平铺到二维坐标系中就得到了UV。平铺出二维空间与三维空间中物体表面的点都是一一对应的。因此每个顶点都能用纹理坐标获取到贴图储存的信息。
模型UV
再建模软件中进行UV展开,UV会被放在一个横向为U,纵向为V范围为(0,1)的二维坐标系中。展开后的UV在SP(Substance Paniter)中绘制贴图(漫反射贴图,法线贴图,高度贴图,金属度贴图,AO贴图)。*可以通过将一些通道不够占满RGBA的贴图进行整合,放在一张贴图的不同通道中达到一次采样获取多个信息的目的(可有效提高性能)。
一个模型包含的信息(.obj)
Vertex(顶点)、VertexNormal(顶点法线)、VertexTexcord(顶点纹理坐标),导出.obj用VSCode打开得到下图:
其中:V顶点坐标数据(模型中单个顶点D XYZ坐标)、VT贴图坐标(水平方向是U,垂直方向是V,范围在0~1之间)、VN顶i但法线。并不包括RGBA(顶点色)的通道的颜色信息。
.obj与.fbx格式
漫反射
漫反射是最容易模拟的模型。最简单得Lambertian简单粗暴的认为光线均匀的反射出去。
数学公式:
代码:
镜面反射
光滑镜面反射。镜面反射就是将入射光线根据表面法线进行反射,并且只有在反射方向有能量,其他地方能量均为0。
经典的用例就是Phong和Blinn-Phong光照模型用来计算高光,此代码为实现Blinn-Phong光照模型。
折射
对于玻璃这种电介质,除了反射之外还有根据物体的折射率一部分光线进入物体之中,反射和折射能量的多少是根据菲尼尔定律决定。
粗糙镜面反射
法线偏移较小,反射依然集中在一个区域,形成磨砂质感。
粗糙镜面折射
与粗糙镜面反射相似,不过相对粗糙镜面反射,粗糙镜面折射中有一部分可以用透过去发生折射。
多层材质
涂漆的地板上有木纹,油漆面的质感。
此表面反射
如皮肤、牛奶、玉石的制作在实践中以调子映射制作,皮肤则是使用Lut图。
多层皮肤模型
皮肤可以看成三层:油脂、表皮、真皮。油脂层直接把光反射出去,所以皮肤上才出现高光,未被反射的光通过折射进入子表面层。进入该层,部分被吸收和散射,再从皮肤中入射点附近出射点射出,从而形成此表面散射效果。
改变材质表面
现实中不存在完美平滑的表面,并且一个模型顶点携带的法线也有限。因此使用法线贴图能做到补充!
漫反射、高光、折射的计算都与法线相关。因此对发现做出调整就能影响其对光照计算的结果。虽然材质特别重要,但是没有一个好的模型,依然不会有好的结果。有时候模型就能表现出它的金属感和布料感。材质在这基础上能够给更加直观的感受。
模型数据在渲染中的作用
纹理动画
在片元着色器中,修改模型的UV的信息。使得采样贴图时发生位移儿产生运动的效果。UV坐标动画或UV平移的含义是:水平(U)和/或 垂直(V)移动纹理的UV坐标,以产生复杂动画的错觉。
原理1:利用法线贴图改变反射或折射的朝向。修改前,使用1这个法线,反射出去的就是1;修改后,使用2这个法线,反射出去的就是2(修改的是法线信息,因此其他数据还是保持修改前的样子)。
原理2:改变UV采样的位置,产生动画效果。
顶点动画
在顶点着色器中,修改模型的顶点位置进而达到模拟运动的效果。顶点动画就是在顶点着色器中对模型的顶点进行操作而产生动画效果。顶点着色器计算的是模型的每一个顶点,计算出来的结果也是不同的。在一些三维模型软件中,动画k帧也是一种顶点动画。
原理:顶点动画需要一定数量的顶点,效果才会比较明显。一个顶点传入一个顶点着色器,顶点着色器控制顶点位置时所有的顶点都会进行也一样的算法。获取顶点UV坐标,控制移动数值的大小(UV范围0~1)
顶点色
在渲染时影响输出结果,控制颜色范围。
在绘制顶点色的时候,我们可以明显看到三角面,因为模型的渲染是从三角面开始,然后在引擎或渲染中四边面会被转成三角形计算。三角形内像素点的色彩会在光栅化时进行插值混合。插值原理:根据重心坐标计算。
顶点法线与面法线
从本质上来说,面法线也是顶点法线,只是储存方式有所差异。
当前像素点的法线是通过周围顶点法线插值获得,儿从下图中可以明显看到法线与顶点法线因为反向不同,插值结果也不同。其中面法线三个顶点共用一个法线。
原理:面法线有多少面储存多少法线,顶点法线则是有多少顶点存多少法线。在卡通渲染中做描边效果时:通常使用Backfacing外扩边描边法(也就是在顶点着色器中将法线方向偏移)该方法在处理硬表面时会出现断裂情况,折射因为没有对法线进行平滑导致法线不连续进而描边不连续。也就是说将模型的法线偏移,整体让模型大一圈,通过剔除与模型混合实现描边效果。
作业
1、顶点色还可以做什么?
作为一种储存mask使用(可以少使用一张贴图):把脸涂黑乘上顶点色(消除菲尼尔现象)、同样方式可以消除描边、把信息塞入顶点色(*塞入顶点色的信息必须是线性变化的,若不是则需要做好精度打折的准备);可用于预先指定照明、阻光和其他视觉效果;把颜色信息放在顶点里,但是在低模情况下效果很差;3dsmax中所有对象都具有贴图通道,其中保存关于纹理贴图以及顶点颜色、照明和Alpha的信息。网格对象同样具有几何体和顶点选择通道(主通道为顶点颜色,这可以使对象中的每个顶点都有其自己的颜色,并且在顶点之前自动渐变。此着色默认情况下不可见,但您可以通过“对象属性”设置切换其显示。哈可以通过“顶点绘制”修改器等各种功能查看和编辑顶点着色。他可用于预先指定照明、阻光和其他视觉效果。贴图通道数据也可由如游戏引擎等外部应用程序使用)。
2、模型光滑组对法线有什么影响?
光滑组是什么?没有真正的光滑,所有面都是三角形。光滑组的含义:光滑组处理面之间的光照信息,提高他们的亮度、饱和度(光滑组:通过处理面之间的光照信息来达到光滑效果,是用来设置边缘线的光滑显示的;网格平滑和涡轮平滑:通过增加面,把面分得更细腻来表达曲度)。
法线:法线烘焙的意义是把高模的法线方向用一张图(RGB)来储存法线信息,存到低模的表面。贴上法线贴图的低模就会在视觉上产生凹凸不平、增加细节的渲染效果,从而看起来像高模一样。(没有光滑组的话,烘焙出来的贴图是一棱一棱的,一般情况下最少要给一个光滑组)
使用光滑组平滑之后,可使模型着色不那么僵硬、断裂、可以更平滑、更自然的表现材质的颜色。
百人计划 图形2.2 模型与材质基础相关推荐
- 图形 2.2 模型与材质基础
参考视频:图形 2.2 模型与材质基础 渲染管线与模型基础 1.图形渲染管线 顶点着色器,几何着色器,片元着色器均是可编程部分,渲染流水线流程在1.1中已有介绍不再赘述 2.模型uv 展uv就是将一个 ...
- 百人计划 图形2.1 色彩空间
色彩发送器 色彩认知:光源是出生点,光源发出光线,光线通过直射反射折射等路径最终进入人眼.在接收到光线后,人眼产生了一系列化学反应.由此把产生的信号传入大脑,大脑对颜色产生了认知感知. 光的要素: 光 ...
- 百人计划 图形1.4 PC手机图形API介绍
前言 电脑工作原理:电脑是有各种不同的硬件组成,由驱动软件驱使硬件进行工作.所有的如软件工程师都会直接或间接使用到驱动. 定义:是一个针对GPU的图形库,用于渲染2D.3D矢量图形的跨语言.跨平台的应 ...
- 百人计划 图形 2.5 BUMP图改进
基础感念 凹凸贴图技术是对物体表面贴图进行变化然后再进行光照计算的一种技术.例如给法线分量添加噪音,或者在一个保存扰动值的纹理图中进行查找,这是一种提升物体真实感的有效办法,但却不需要额外的提升物体的 ...
- 【技术美术图形部分】2.2 模型与材质基础
记录之前膜拜一下这节课的大佬,才大三,我一个研二菜狗留下不学无术的泪水! May佬提到,这次课程安排的目的是给美术同学一个缓冲的空间,我的话在写这篇学习笔记就尽量加入一些自己的理解. 友情提示!才发现 ...
- 【TA-霜狼_may-《百人计划》】图形3.7.2 command buffer简
[TA-霜狼_may-<百人计划>]图形3.72command buffer 及urp概述 @[TOC]([TA-霜狼_may-<百人计划>]图形3.72command buf ...
- 【TA-霜狼_may-《百人计划》】图形2.7.2 GPU硬件架构概述
[TA-霜狼_may-<百人计划>]图形2.7.2 GPU硬件架构概述 @[TOC]([TA-霜狼_may-<百人计划>]图形2.7.2 GPU硬件架构概述 GPU是什么 GP ...
- 技美 百人计划 (图形)1.1渲染流程
技美 百人计划 (图形) 图形 1.1 渲染流水管线2.1数学基础 很早之前就有关注百人计划这个系列的课程,也跟着看到了2.几的教学但是一直没有写笔记,最近看到百人计划已经快更新完毕了,决定从头看一遍 ...
- 个人学习笔记 ——【技术美术百人计划】图形 2.1 色彩空间介绍
个人学习笔记 --[技术美术百人计划]图形 2.1 色彩空间介绍 图形 2.1 色彩空间介绍 个人学习笔记 --[技术美术百人计划]图形 2.1 色彩空间介绍 图形 2.1 色彩空间介绍 一.色彩发送 ...
最新文章
- linux-常用命令-iostatvmstat
- CAPI3 HTTP文件服务器搭建(共享目录版)
- ftp java listfiles_Java FTPClient.listFiles()不能获取目录里的文件
- UTF-8编码规则(转)
- ubuntu下对Atom配置python的虚拟环境
- C# WPF抽屉效果实现
- 一步步手动实现热修复(一)-dex文件的生成与加载
- 腾讯和阿里巴巴考虑互相开放生态,是真开放还是新的垄断?
- linux(cat,more,less,head)——对文件显示进行查看操作
- 前端工程师需要懂的前端面试题(c s s方面)总结(二)
- 文件系统与linux相关知识点
- ActiveMQ发布订阅模式
- 数字信号处理----数字上变频和下变频都FPGA实现
- 如何使用Arduino开发板和ADXL345加速度计跟踪方向
- Java读取ID卡卡号源码
- 低延时直播系统开发技术方案
- android 气泡.9,Android 三种方式实现三角形气泡效果、自定义View、shape、点9图
- 转贴:关于克尔凯郭尔
- JavaWeb项目案例(一)
- 图(graph)的基本知识