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

可编程阶段(蓝色区域):
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格式对比

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

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

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

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


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

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

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

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

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

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

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

因为四边面本质上还是三角面组合而成,所以在绘制时会出现三角形的分界。
FragColor = FinalColor * VertexColor;
●可以通过判断顶点色,来做一些操作
○例如,顶点色到达一定的值,就可以做阴影
●Maya中顶点色的绘制

4.重心坐标


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


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

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

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

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


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


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

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

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

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

③光滑组对法线的影响
法线
●烘焙发现的意义,就是把高模的法线方向,用一张图(RGB)来存储法线信息,存到低模的表面上。贴上法线贴图的低模,就会在视觉上产生凹凸不平、增加细节的渲染效果,从而看起来像高模一样。Normal Mapping法线贴图本质上就是一种图片,只是这样图片的用途比较特殊而已。
●没有光滑组的话,烘出来的法线贴图是一棱一棱的。一般情况华至少也要给一个光滑组。
光滑组(软硬边)和UV对法线的影响
●光滑组相连接的模型,法线贴图都存在打渐变色,导致魔性的法线效果会很奇怪(平面上有法案发凉的光影)。当你发现模型出现这种渐变时,一定是出现了光滑组的问题。
●中间的两个模型出现了不同程度的接缝(第三个模型的接缝非常明显,第二个模型则弱一些)。光滑组和UV统一相连或断开,是不会出现明显接缝的,当遇到解封问题,优先考虑模型的光滑组和UV是否统一。

相关文章:
2.2 模型与材质基础
一、渲染管线与模型基础 1. 渲染管线 可编程阶段(蓝色区域): 1顶点着色器 2几何着色器 3片元着色器 2. 模型的实现原理 UV:在建模软件中,进行UV展开,UV会放在一个横向为U纵向为V,范围࿰…...
什么是Docker
一 、什么是Docker 1.1 简介 Docker 使用 Google 公司推出的 Go 语言 (opens new window)进行开发实现,基于 Linux 内核的 cgroup (opens new window),namespace (opens new window),以及 OverlayFS (opens new window)类的 Union FS (open…...
1109. 航班预订统计
这里有 n 个航班,它们分别从 1 到 n 进行编号。 有一份航班预订表 bookings ,表中第 i 条预订记录 bookings[i] [firsti, lasti, seatsi] 意味着在从 firsti 到 lasti (包含 firsti 和 lasti )的 每个航班 上预订了 seatsi 个座…...
[SQL挖掘机] - 窗口函数 - 合计: rollup
介绍: rollup 是一种用于在 sql 查询中生成聚合数据的特殊操作。它可以创建包含子总计和总计的结果集,并可用于生成层次化报表或汇总数据。 rollup 操作在 group by 子句中使用,可以在查询结果中生成多级汇总数据。它会根据指定的列进行分组࿰…...
2022年全国硕士研究生入学统一考试管理类专业学位联考写作试题——解析版
四、写作:第56~57小题,共65分。其中论证有效性分析30分,论说文35分。 56.论证有效性分析:分析下述论证中存在的缺陷和漏洞,选择若干要点,写一篇600字左右的文章,对该论证的有效性进…...
元类在测试框架中的运用
元类在测试框架中的运用 书接上回 我们知道了元类的基本用法,也写了一个小demo,接下来我们就尝试运用进我们测试框架。 #一款无需编码且易用于二次开发的接口测试框架。 #我写的我写的我写的我写的 pip install mwj-apitest #这里面就用到了元类&…...
VBA快速交叉分段标记字符颜色
实例需求:A列中有不确定行数的数据,现在需要将数据按照每4位一组间隔标记颜色,如下图所示。 示例代码如下。 Sub Demo()Dim rngCell As RangeDim rngData As RangeDim i, res, intLenSet rngData Range("A1").CurrentRegionrngDa…...
根据Pytorch源码实现的 ResNet18
一,类模块定义: import torch import torch.nn as nn import torch.nn.functional as F from torch import Tensorclass ResBlock(nn.Module):def __init__(self, inchannel, outchannel, stride1) -> None:super(ResBlock, self).__init__()# 这里定义了残差块…...
药品管理系统servlet+jsp+sql医院药店仓库进销存java源代码mysql
本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 药品管理系统servletjspsql 系统有1权限:…...
这9个UI设计工具一定码住!非常好用
对于设计师来说,好用的UI设计工具无疑会对设计工作起到事半功倍的作用,今天本文与大家分享9个好用的UI设计工具,一起来看看吧! 1、即时设计 即时设计是一个能在网页中直接使用,且支持团队协作的国产UI设计工具&#…...
gin通过反射来执行动态的方法
在gin中,可以通过反射来执行对应的方法。下面是一个示例: package mainimport ("fmt""github.com/gin-gonic/gin""reflect" )type UserController struct{}func (uc *UserController) GetUser(c *gin.Context) {userId :…...
java高并发系列 - 第23天:JUC中原子类,一篇就够了
java高并发系列 - 第23天:JUC中原子类 这是java高并发系列第23篇文章,环境:jdk1.8。 本文主要内容 JUC中的原子类介绍介绍基本类型原子类介绍数组类型原子类介绍引用类型原子类介绍对象属性修改相关原子类预备知识 JUC中的原子类都是都是依靠volatile、CAS、Unsafe类配合…...
《HeadFirst设计模式(第二版)》第一章源码
代码文件目录结构: FlyBehavior.java package Chapter1_StrategyPattern.ch1_3_behavior.behaviors.fly;public interface FlyBehavior {void fly(); } FlyNoWay.java package Chapter1_StrategyPattern.ch1_3_behavior.behaviors.fly;public class FlyNoWay imp…...
insert into select用法
文章目录 一、insert into select二、insert into select插入失败 本篇文章主要讲解insert into select 的用法,以及insert into select的坑或者注意事项。本篇文章中的sql基于mysql8.0进行讲解 一、insert into select 该语法常用于从另一张表查询数据插入到某表中…...
图像识别技术:计算机视觉的进化与应用展望
导言: 图像识别技术是计算机视觉领域的重要研究方向,它使计算机能够理解和解释图像内容,从而实现自动化和智能化的图像处理。随着深度学习等技术的快速发展,图像识别在诸多领域取得了重大突破,如自动驾驶、医疗影像分析…...
【免费送书】重新定义Python学习!
欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…...
Qt 4. 发布exe
把ex2.exe放在H盘Ex2文件夹下,执行 H:\Ex2>windeployqt ex2.exe H:\Ex2>windeployqt ex2.exe H:\Ex2\ex2.exe 64 bit, release executable Adding Qt5Svg for qsvgicon.dll Skipping plugin qtvirtualkeyboardplugin.dll due to disabled dependencies (Qt5…...
消息队列的使用场景以及优缺点
消息队列是一种在应用系统之间传递消息的通信模式。它允许发送者将消息发布到一个队列中,而接收者则从队列中获取消息进行处理。 消息队列的主要特点包括: 异步通信:消息的发送和接收是异步进行的,发送者无需等待接收者的即时响应…...
掌握Python的X篇_17_循环语句(while;for var in ;range)
文章目录 1. 为什么需要循环2. while循环3. for...in循环4. range函数 1. 为什么需要循环 循环语句方便我们做重复的事情,比如: for i in range (0,3):print("重要的事情说三遍")运行效果如下: Python中有while循环和for循环两…...
IDEA maven 报错 malformed \uxxx encoding
IDEA maven 报错 malformed \uxxx encoding 最近搞几个JAVA项目总是出现上面错误,在网上搜的大部分都是删maven库,删jar包等等,每次都搞了好久才解决,今天无意中发现并不是包的问题, 解决办法 1.点击 idea 右侧的ma…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
Vue3 PC端 UI组件库我更推荐Naive UI
一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用,前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率,还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库(Naive UI、Element …...

