当前位置: 首页 > news >正文

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是否统一。

相关文章:

2.2 模型与材质基础

一、渲染管线与模型基础 1. 渲染管线 可编程阶段(蓝色区域): 1顶点着色器 2几何着色器 3片元着色器 2. 模型的实现原理 UV:在建模软件中,进行UV展开,UV会放在一个横向为U纵向为V,范围&#xff0…...

什么是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 子句中使用,可以在查询结果中生成多级汇总数据。它会根据指定的列进行分组&#xff0…...

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…...

golang循环变量捕获问题​​

在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下: 问题背景 看这个代码片段: fo…...

【Oracle APEX开发小技巧12】

有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

【位运算】消失的两个数字(hard)

消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

ios苹果系统,js 滑动屏幕、锚定无效

现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

【Oracle】分区表

个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...