2.2 模型与材质基础

 

一、渲染管线与模型基础
1. 渲染管线

image.png


可编程阶段(蓝色区域):
1顶点着色器
2几何着色器
3片元着色器
2. 模型的实现原理
UV:在建模软件中,进行UV展开,UV会放在一个横向为U纵向为V,范围(0~1)的二维坐标系中。
展开后的UV在SP中绘制贴图(漫反射贴图、法线贴图、高度贴图、金属度贴图、AO贴图)


一个模型包含的信息(OBJ文件)


Vertex顶点


Vertex Normal顶点法线


Vertex Texcoord顶点纹理坐标
1V:顶点坐标数据(模型空间中单个顶点的XYZ坐标)
2VT:贴图坐标(水平方向是U,垂直方向是V,范围0~1之间)
3VN:顶点法线
4顶点色(FBX格式才有):单个顶点的RGB颜色信息。一个顶点包含了法线,纹理坐标,顶点色等信息。
OBJ和FBX格式对比

image.png


总结下,FBX相较于OBJ多支持了骨骼动画相关的东西,同时也可以存储顶点色和LOD。
二、材质基础
1.漫反射

image.png


最容易模拟的模型。比如现实中的石头,水泥,砖块等。
光线均匀的反射出去。
Diffuse = baseColor * LightColor * dot(LightDir, Normal);
2.(光滑)镜面反射

image.png


镜面反射就是将入射光线根据表面发现进行反射,入射角等于出射角。
Specular = Pow(saturate(dot(RefDir,ViewDir,32)))* LightColor;
3.粗糙镜面反射


法线偏移较小。反射依然集中在一个区域,形成磨砂的质感。
4.折射


对于玻璃这种介质,除了反射之外还有根据物体的折射率折射一部分光线进入物体中,反射和折射能量的多少是根据菲尼尔定律决定的。
R = refract(View,Normal,ration);
ReflColor = tex2D(skybox,R);
5.粗糙镜面折射

image.png


毛玻璃会有这种现象。
6.多层材质

image.png


涂了透明油漆的木地板,上层是油漆,下层是地板,同时油漆还会反射上部的物体。
7.次表面散射

image.png


半透明的物体,例如玉石、蜡烛、牛奶、皮肤等。
以皮肤为例:光进入皮肤后照亮了毛细血管,因此在明暗分界的位置,反射出的红光就更容易被看到。
8.改变材质表面
现实世界中不存在完美平滑的表面,因此需要对模型表面的发现进行扰动。其中一个方法是使用法线贴图。
漫反射,高光,折射都与法线有关,因此改变法线,就能改变其光照结果。
三、模型数据在渲染中的作用
1.顶点动画
在顶点着色器中,修改模型的顶点位置,进而达到模型运动的效果。
○顶点着色器计算的是模型的每一个顶点,每一个顶点的数据是不同的,因此同一个计算公式在不同的顶点上计算出来的结果也是不同的。
○需要一定数量的顶点,顶点动画的效果才会明显。
○在一些三维建模软件中,动画的k帧也是一种顶点动画
2.纹理动画
在片段着色器中,修改模型的UV信息,使得采样贴图时发生位置而产生的运动效果。
效果:

image.png


利用法线贴图,改变反射与折射的朝向。
原理1:
○修改前,使用1这个法线,反射出去的就是1。
○修改后,使用2这个法线,反射出去的就是2.
○修改的只是法线信息,因此其他数据还是保持修改前的样子。


对背部画面采样的部分
原理2:
○改变UV采样点的位置,产生动画效果

image.png


3.顶点色
在渲染时,影响输出结果。控制颜色范围。

image.png


因为四边面本质上还是三角面组合而成,所以在绘制时会出现三角形的分界。
FragColor = FinalColor * VertexColor;

●可以通过判断顶点色,来做一些操作
○例如,顶点色到达一定的值,就可以做阴影
●Maya中顶点色的绘制


4.重心坐标

image.png

image.png


●具体可以参考下GAMES101—L9部分
5.顶点与面法线

image.png

image.png


原理:
面法线
○未使用平滑时,三角形三个顶点公用一个法线,那么插值时,因为三个顶点的法线相同,所以插值的结果相同。


顶点法线
○使用平滑后,一个顶点一个法线。三角形三个顶点的法线就不相同,插值结果也就不同。


平滑/未使用平滑,在模型文件内部存储方式

image.png


扩展
在NPR渲染中
○通常在顶点着色器中,将顶点往法线方向偏移。然后再在片段着色器中直接输出一个颜色,达到描边的效果。
○BackFacing描边时,描边线条断开就是因为没有平滑顶点之间的法线导致的。


作业
1.顶点色的其他作用
1.作为一种存储的mask使用(这样可以少使用一张图)
●不想让连上有菲尼尔效应,就把脸涂黑,乘上顶点色
●不想让某些地方有描边,同上
●拿到顶点色后可以做一些其他操作,塞入顶点色的信息必须是线性变化的,如果不是,就要做好精度打折的准备
●可用于预先指定光照、阻光和其他视觉效果
●可以把颜色信息存在顶点里,但是在低模的情况下效果很差。
简单说顶点色相当于一个数据存储的地方,你可以将任何数据塞到此处,然后利用这些数据进行操作,考虑优化时更应注重顶点色的应用。
2.模型光滑组对法线有什么影响
在模型上没有真正的光滑面,也没有真正的四边形面,所有面都是三角形组成的。
平常说的布线合理,拓扑其实是保持两个三角形面的一致性(构成一个四边面的两个三角形面)

image.png

image.png


①光滑组的含义
下图标出了面的亮度,纯打比方不是确切数字。
光滑组处理面之间的光照信息,提高它们的亮度、饱和度,两面之间的过渡就是两面亮度和平均值。

image.png


②光滑组如何计算?
如果一个面的光滑组是1,一个是2,那么他们之间不存在计算。

image.png


如果它们光滑组都是1,就会进行光照计算,并且影响最终渲染,也就是说他们光滑组一样的话,就会进行光照计算,产生光滑效果。
下图为不同数值下的光滑效果,数值一致就会有平滑效果。

image.png




网格平滑和涡轮平滑:通过增加面,把面分的更细腻来表达曲度。
自动平滑默认所有面的夹角小于45°的进行光滑,默认创建的球面的夹角都小于45°所以都平滑了,下图为数值为10的时候。

image.png



③光滑组对法线的影响
法线
●烘焙发现的意义,就是把高模的法线方向,用一张图(RGB)来存储法线信息,存到低模的表面上。贴上法线贴图的低模,就会在视觉上产生凹凸不平、增加细节的渲染效果,从而看起来像高模一样。Normal Mapping法线贴图本质上就是一种图片,只是这样图片的用途比较特殊而已。
●没有光滑组的话,烘出来的法线贴图是一棱一棱的。一般情况华至少也要给一个光滑组。

光滑组(软硬边)和UV对法线的影响
●光滑组相连接的模型,法线贴图都存在打渐变色,导致魔性的法线效果会很奇怪(平面上有法案发凉的光影)。当你发现模型出现这种渐变时,一定是出现了光滑组的问题。
●中间的两个模型出现了不同程度的接缝(第三个模型的接缝非常明显,第二个模型则弱一些)。光滑组和UV统一相连或断开,是不会出现明显接缝的,当遇到解封问题,优先考虑模型的光滑组和UV是否统一。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/47319.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】深入理解缓冲区

目录 什么是缓冲区 为什么要有缓冲区 缓冲区刷新策略 缓冲区在哪里 手动设计一个用户层缓冲区 什么是缓冲区 缓冲区本质上一块内存区域,用来保存临时数据。缓冲区在各种计算任务中都广泛应用,包括输入/输出操作、网络通信、图像处理、音频处理等。 …

【前端笔记】本地运行cli项目报错ERR_OSSL_EVP_UNSUPPORTED

报错原因 Node版本>17.x,本地npm run 起项目后会发现终端报错,具体有以下2块关键信息: Error: error:0308010C:digital envelope routines::unsupported和 opensslErrorStack: [ error:03000086:digital envelope routines::initializa…

Python补充笔记5-模块化、文件

目录 一、模块 二、模块的导入 三、python中的包​编辑 四、常用的内容模块 五、第三方模块的安装与使用 六、编码格式的介绍 七、文件读写的原理 八、常用的文件打开模式 ​九、文件对象的常用方法 十、with语句​编辑 十一、os模块的常用函数 十二、os.path模块的常用方法​编…

TCP协议如何实现可靠传输

TCP最主要的特点 TCP是面向连接的运输层协议,在无连接的、不可靠的IP网络服务基础之上提供可靠交付的服务。为此,在IP的数据报服务基础之上,增加了保证可靠性的一系列措施。 TCP最主要的特点: TCP是面向连接的输出层协议 每一条…

如何启用路由器dhcp?快解析如何内网穿透?

一、什么是DHCP? 动态主机设置协议(DHCP)是一种使网络管理员能够集中管理和自动分配 IP 网络地址的通信协议。在网络中,每个联网设备都需要分配独有的 IP 地址。并当有新计算机移到网络中的其它位置时,能自动收到新的…

微服务——http客户端Feign

目录 Restemplate方式调用存在的问题 Feign的介绍 基于Feign远程调用 Feign自定义配置 修改日志方式一(基于配置文件) 修改日志方式二(基于java代码) Feign的性能优化 连接池使用方法 Feign_最佳实践分析 方式一: 方式二 实现Feign最佳实践(方式二) 两种解决方案 Re…

【数据结构】实验九:二叉树

实验九 二叉树 一、实验目的与要求 1)理解二叉树的类型定义; 2)掌握二叉树的存储方式及基于存储结构的基本操作实现; 二、 实验内容 1. 二叉树的结点定义如下: struct TreeNode { int m_nvalue; TreeNode* m_…

【梯度下降在波士顿房价预测中的应用】

数据准备 我们首先需要加载波士顿房价数据集。该数据集包含房屋特征信息和对应的房价标签。 import pandas as pd import numpy as npdata_url "http://lib.stat.cmu.edu/datasets/boston" raw_df pd.read_csv(data_url, sep"\s", skiprows22, headerN…

“可以黑掉整个宇宙”的Metasploit Framework

0x01、 简述 Metasploit Framework(MSF)是一款开源安全漏洞检测工具,他带有数千个已知的软件漏洞,目前人在持续更新。Metasploit可以用来信息收集、漏洞探测、漏洞利用等渗透测试的全流程,被安全社区冠以“可以黑掉整个宇宙”之名。在普通的…

又一“邪恶版”ChatGPT出现,专为网络犯罪而生

最近,Hackread 分享了一个恶意聊天机器人 WormGPT 的详细信息,该聊天机器人是为帮助网络犯罪分子进行非法活动而创建的。现在,暗网上又出现了一个名为 FraudGPT 的聊天机器人。这是一个基于订阅的人工智能聊天机器人,可以为网络犯…

解密C++多态机制:发挥对象的多样性,实现更加智能的程序设计

目录 一.多态1.多态的用处2.多态的实现3.虚函数4.override 和 final5.重载重写与重定义6.虚函数表 一.多态 1.多态的用处 众所周知C语言的三大特性:封装、多态、继承。其中多态就是去完成某个行为,但是会根据不同的对象产生不同的状态,所以…

C语言每天一练:输出杨辉三角

题目:请输出以下杨辉三角(要求输出前10行) 列: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 ...... 题解析:不了解杨辉三角的可以百度看一下,大概是这样的,咱们就可以解…

SpringBoot集成kafka全面实战

本文是SpringBootKafka的实战讲解,如果对kafka的架构原理还不了解的读者,建议先看一下《大白话kafka架构原理》、《秒懂kafka HA(高可用)》两篇文章。 一、生产者实践 普通生产者 带回调的生产者 自定义分区器 kafka事务提交…

微信联系人批量删除功能如何操作?删除的联系人如何恢复?

继微信推出了朋友圈置顶功能后,微信又推出了"批量删除好友的功能" ,具体的操作步骤如下: 第一步 是点击聊天界面上的搜索框"搜索" 第二步 "搜索"排序字母,点击"更多联系人" 第三步 搜…

openEuler 22.03 LTS系统搭建局域网上网代理服务器

生产网环境的一个痛点就是与外网隔离,内网的服务器如果需要进行补丁升级或者下载更新软件,比较困难,本文讲解在生产网中能访问公网的openEuler 22.03 LTS系统服务器上搭建代理服务器,供内网其它服务器连接公网,同时介绍…

SpringBoot实战(二十三)集成 SkyWalking

目录 一、简介二、拉取镜像并部署1.拉取镜像2.运行skywalking-oap容器3.运行skywalking-ui容器4.访问页面 三、下载解压 agent1.下载2.解压 四、创建 skywalking-demo 项目1.Maven依赖2.application.yml3.DemoController.java 五、构建启动脚本1.startup.bat2.执行启动脚本3.发…

hive之文件格式与压缩

hive文件格式: 概述: 为Hive表中的数据选择一个合适的文件格式,对提高查询性能的提高是十分有益的。Hive表数据的存储格式,可以选择text file、orc、parquet、sequence file等。 文本文件: 文本文件就是txt文件&…

【SpirngCloud】分布式事务解决方案

【SpirngCloud】分布式事务解决方案 文章目录 【SpirngCloud】分布式事务解决方案1. 理论基础1.1 CAP 理论1.2 BASE 理论1.3 分布式事务模型 2. Seata 架构2.1 项目引入 Seata 3. 强一致性分布式事务解决方案3.1 XA 模式3.1.1 seata的XA模式3.1.2 XA 模式实践3.1.3 总结 4. 最终…

JavaScript --简介

目录 JS可以用来做什么? JS在前端中几种写法: 1. 文件引用: 2. 页面样式 3. 行内样式 集中常见的弹框: JS基本语法: 变量: 常量: 数据类型: 基本数据类型: 引用数据类型&#xff1a…

微信批量删除好友怎么删除

微信好友太多想要批量删除不知道怎么删除,相信这个问题也困扰了不少人。那么怎样才能批量的删除微信好友?其实不难,可以通过新建标签删除的方式来实现批量删除好友。 怎么批量删除 微信批量删除好友的具体步骤如下: 1、新建标签 首…