3D 纹理贴图基础知识

在线工具推荐: 3D数字孪生场景编辑器  -  GLTF/GLB材质纹理编辑器  -  3D模型在线转换  -  Three.js AI自动纹理开发包  -  YOLO 虚幻合成数据生成器  -  三维模型预览图生成器  -  3D模型语义搜索引擎

介绍

纹理贴图是创建模型时离不开的最后一块拼图。同样,如果没有纹理贴图的多样性,任何 3D 可视化或 3D 建模服务都无法提供出色的结果。

它们用于创建特殊效果、重复纹理、图案和精细细节,如头发、皮肤等。如果您有完整的网格和 UV 贴图,则简单地对其应用纹理不会产生结果。

您需要纹理贴图来定义 3D 模型的颜色、光泽度、发光度、透明度和许多其他特征属性。 GLTF 编辑器 -NSDT 是一款在线材质纹理贴图工具,您可以借助此工具完成3D模型的纹理贴图设置工作。

但首先要做的事情,我们将先熟悉 3D 建模中最常见的纹理贴图类型及其类别。

什么是纹理贴图?

纹理贴图本质上是将 2D 图像应用到 3D 对象的表面上,称为 UV 贴图,因此计算机可以在渲染期间在对象上生成该数据。

简单地说:纹理映射就像将图像包裹在对象周围,以将纹理的像素映射到 3D 表面。

它大大减少了创建复杂 3D 场景所需的多边形和闪电计算的数量。

什么是纹理映射

PBR 与非 PBR 建模

你甚至在完成网格之前就开始处理纹理,因为你必须始终牢记它。您为其创建模型的软件决定了您将使用哪些纹理贴图来添加细节

有 PBR 或非 PBR 材质的纹理贴图。两者都提供逼真的纹理,但一个非常适合游戏引擎,另一个用于营销和促销目的。

PBR 是基于物理的渲染的缩写,它使用精确的照明来实现逼真的纹理。虽然它出现在 1980 年代,但现在它已成为所有材料的标准。

使用 PBR 的最佳 3D 建模软件是 Unity、虚幻引擎 4、Painter、Substance 和即将推出的 Blender v2.8。

相反,非PBR也带来了令人惊叹的逼真效果,但价格要高得多。您需要使用更多的贴图和设置才能获得这些结果,即使纹理具有灵活性。

GLTF编辑器支持GLTF/GLB在线预览、材质编辑、重置原点、以及模型轻量化(将相同材质Mesh合并)。GLTF editor supports GLTF/GLB online preview, material editing, reset origin, and model lightweight (merging the same material Mesh)

GLTF 编辑器 -NSDT是使用非 PBR 纹理贴图的最常见应用程序。

话虽如此,如果您为游戏引擎创建 3D 模型,最好使用 PBR 纹理。不过,如果您追求促销目的,则可以使用非 PBR 纹理渲染模型。

专业提示:无论哪种方式,您都必须对模型进行UV展开,以便纹理按照您想要的方式映射到模型上,而不管使用何种纹理类型。

PBR 纹理贴图

不同纹理贴图指南

现在,由于 PBR 变得更加标准化并提供更多种类的纹理贴图,我们将从它们开始。

如前所述,将要放置到 3D 模型上的 2D 图像不足以获得结果。您可以使用多个纹理贴图来调整不同的选项,以增加模型的丰富性和微妙性。因此,每张地图负责不同的效果。

有以下纹理贴图:

1. 反照率

反照率纹理贴图是您在模型中使用的最基本的贴图之一,因为它们定义了模型的基本颜色,没有阴影或眩光。关于这一点,它们可以是要应用于对象的图案的平面光图像,也可以是单一颜色。

注意:为避免 3D 模型不一致,请确保照明是平坦的。闪电可能与源图像不同。它只会产生不必要的阴影。

反照率漫反射基本色彩映射表

反照率贴图

此外,它们通常用于遮蔽反射光,尤其是在金属纹理中。

2. 环境光遮蔽

地图比例尺:灰色 一 黑色表示阴影区域,白色 一 表示最亮的区域。

如果你正在寻找与反照率贴图相反的东西,但找不到它的名字,那就是环境光遮蔽贴图,通常被称为AO。AO 纹理贴图通常由 PBR 引擎与反照率相结合,以定义它对光的反应方式。

AO地图映射

AO贴图

用于通过模拟环境产生的阴影来提高对象的真实感。因此,阴影不是纯黑色,而是更逼真、更柔和,尤其是在光线较少的地方。

环境光遮蔽图

环境光遮蔽贴图

3. 正常

地图比例尺: RGB 值 一 绿色、红色和蓝色,对应于 X、Y 和 Z 轴。

在法线贴图中,RGB 值(绿色、红色和蓝色)用于在模型中创建凹凸和裂缝,以增加多边形网格的深度。R、G 和 B 指示基础网格在三个方向上的 X、Y 和 Z 轴,以确保更高的精度。

Normals 地图对象

法线贴图

此外,需要注意的是,法线贴图不会改变对象的基本几何体。他们只是使用复杂的计算来伪造带有灯光效果的凹痕或凸起

注意:由于法线贴图中使用了大量光线,因此您应该更好地隐藏对象的接缝,除非您希望清楚地看到它们。

法线贴图纹理

通过这种方法,这些凸起在某个观察点之后是不可见的,特别是如果它们被夸大了。但是,它允许在获取真实对象时保持较低的多边形计数。

所以,这是双赢的。

4.粗糙度

地图比例尺: 灰色一黑色代表最大粗糙度,白色一代表表面光滑。

粗糙度或光泽度纹理贴图是不言自明的贴图。因此,它定义了模型的平滑程度,具体取决于光线的反射方式。这张地图至关重要,因为不同的物体具有不同程度的粗糙度。就像,光线不会以同样的方式散射在镜子和橡胶上。

粗糙度贴图纹理

粗糙度贴图

因此,要以最佳方式将其反映在模型中,您必须调整粗糙度值。如果为零,则模型根本不会散射光。在这种情况下,闪电和反射会更亮。

另一方面,如果它已满,您的材料将获得更多的散射光。但是,照明和反射会显得更暗。

粗糙度图示例

5. 金属性

地图比例尺: 灰色一黑色表示非金属色,白色一表示全金属色。

这个很容易猜到。此纹理贴图定义对象是否由金属制成。金属反射光线的方式与其他材料不同,因此它可以对物体的最终外观产生影响。它可以轻松模拟真实材料,并与反照率图紧密相连。

虽然金属贴图是灰度的,但建议仅使用黑白值。

金属地图

金属贴图

在这种情况下,黑色表示贴图的该部分,使用反照率贴图作为漫反射颜色,使用白色 I 来定义反射的亮度和颜色,并将黑色设置为材质的漫反射颜色。

反射为材质提供了细节和颜色,因此在这种情况下,漫反射颜色无关紧要。

金属度分布图

金属度贴图

总的来说,金属地图提供了巨大的价值,但与反照率地图捆绑在一起会给使用它们带来一些限制。

6. 高度

地图比例尺: 灰色一黑色代表网格的底部,白色一代表峰顶。

要从普通纹理贴图更进一步,您必须使用高度贴图。它们为您提供最佳细节,在所有角度和不同的照明下看起来都同样出色

高度地图比例尺

高度贴图

高度图被认为是资源密集型的。它们不是伪造凹痕和凸起,而是实际修改模型的几何形状。在网格中添加小细节似乎没什么大不了的,直到您意识到更精细的细节是有代价的。

专业提示:如果您想在 Web 上使用高度纹理贴图,最好在导出 3D 模型时对其进行烘焙。

Height Map 对象

高度贴图会增加对象的多边形数量。对于高多边形建模来说可能没问题,但这些贴图仍然会减慢渲染时间。这就是为什么它只被高端游戏引擎使用,而其他人则更喜欢普通地图。

7. 镜面反射

地图比例:全RGB一绿、红、蓝(金属色不带反照率)。

金属度贴图的替代方案是镜面贴图,它提供了相同的效果,甚至更好。此纹理贴图负责对象反射的颜色和光量。如果要在非金属材料上创建阴影和反射,这一点很重要

在 PBR 纹理中,镜面反射会影响反照率从所需纹理中渲染的方式,并且可以为此使用全 RGB 颜色。

假设您想使用金属贴图创建黄铜材质。在这种情况下,您只需在反照率中将地图的该部分涂成黄铜色即可。材料会出现黄铜。

镜面贴图与金属性

镜面贴图和金属度贴图比较

相反,如果您使用镜面反射贴图,反照率的黄铜部分将是黑色的。在这里,您需要将黄铜细节绘制到镜面贴图上。结果会是一样的,一材质会出现黄铜。

虽然使用镜面贴图可以获得更大的灵活性,但该过程会增加此方法的复杂性

所以,这取决于你使用哪一个 金属性或镜面反射。

8. 不透明度

地图比例尺: 灰色一黑色定义透明,白色一不透明。

由于金属、木材和塑料不是模型中使用的唯一材质,因此了解不透明度纹理贴图非常重要。它允许您使模型的某些部分透明,尤其是在创建玻璃元素或树枝时。

不透明度贴图

使用不透明度贴图创建立方体

但是,如果您的物体是实心玻璃或由其他半透明材料制成,则最好使用不透明的常量值 0.0 和 1.0。一、透明。

9. 折射

地图比例:常量值。

反射和折射图

应用于对象的折射贴图和反射贴图

物体的材料定义了光线如何从它身上反射。光线会相应地影响物体看起来是否足够真实。这对于某些表面(如玻璃和水)尤为重要,因为它们会影响穿过它们的光的速度。

因此,光在通过气体或液体时会弯曲,这称为折射。这就是为什么某些东西在通过透明物体观察时看起来会失真的原因。折射在现实生活中对此做出了贡献,折射纹理贴图有助于在 3D 空间中复制它。

10. 自发光

地图比例:全RGB。

3ds Max 中的自发光贴图

3d Max 自发光

与物体可以反射“外部”光一样,它也可以发出一些光,在黑暗区域也可以看到。这就是最后一个完整的 PBR 纹理贴图 1 自发光或自发光颜色贴图 1 发挥作用的地方。

它用于创建一些 LED 按钮或模拟建筑物发出的光。基本上,它就像一张反照率图,但是为了光。

专业提示:虽然您可以使用自发光贴图照亮整个场景,但它可以消除 3D 模型的真实感。在这种情况下,最好使用传统照明。

非 PBR 纹理贴图

由于非 PBR 纹理贴图没有标准化或通过各种 3D 建模软件使用,因此有相当多的纹理贴图需要涵盖。

扩散性

漫反射贴图等同于反照率贴图。它们不仅定义了物体的基本颜色,而且被软件用来对反射光进行着色。这实际上就是漫反射贴图与反照率的区别。

漫反射贴图不是使用平面光制作的,而是使用阴影信息为周围的对象着色。你几乎不会注意到它,但它会让你的 3D 对象更加逼真。

碰撞

地图比例尺: 灰色 a 黑色表示几何形状的最低点,白色 a 表示最高点。

凹凸贴图类似于普通的 PBR 贴图,但在这种情况下更基本。它们是资源密集度最低的,并使用简单的算法来改变 3D 模型的外观。

与法线贴图不同,它们不使用 RGB 来指示空间的三维空间。相反,它们利用向上或向下方向工作的灰度贴图,其中黑色是几何图形的最低点,白色是最高点。

但是,有一个缺点。凹凸纹理贴图最适合平面,因为在圆形物体及其边缘上伪造几何图形是摇摇欲坠的。

这种不准确性是比例尺偏向法线贴图的原因。

反射

最后,反射贴图等同于 PBR 工作流程中的光泽度/粗糙度贴图。它们通常是一个常量值,用于定义对象应投射反射的位置。

注意:除非使用不同的材质,否则整个对象上都可以看到反射。

总结

GLTF 编辑器 是一个功能强大、易于使用的在线3D模型编辑和查看工具,它支持多种格式的3D模型导入并将模型导出为GLB格式,除了可以对3D模型进行基本属性的修改之外,还支持对模型原点重置以及模型材质纹理修改。对于3D开发者和设计师来说,GLTF 编辑器 是一个非常有用的工具,可以帮助他们更方便地处理3D模型。

转载:3D 纹理贴图基础知识 (mvrlink.com)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

综合评价---DEA数据包络分析

数据包络分析(Data Envelopment Analysis,DEA),1978年由 Charnes、Cooper和Rhodes创建的一种绩效评价技术(performance technique) 。采用多投入、多产出数据对多个决策单元(Decision Making Unit) 的相对效率进行评价因DEA的诸多优势,被广泛…

JavaScript——数据类型判断方法汇总

1. typeof // 1.typeof 数组、对象和null都会被视为object 其他类型都判定正确 console.log(typeof {}); // object console.log(typeof []); // object console.log(typeof null); // object console.log(typeof function () {}); // function console.log(typeof 1); // num…

【.Net8教程】(一)读取配置文件全面总结

环境:.net8.0 1. 准备条件 先在appsettings.Development.json或appsettings.json添加配置 添加一个DbOption {"DbOption": {"Conn": "foolishsundaycsdn"} }2.直接读取json配置节点的几种写法 在Main函数中读取json配置 方式一 …

Linux环境下通过journal命令查看和管理日志

文章目录 前言问题分析journal 和 syslog 对比journal 和 syslog 配置使用journalctl查看和管理日志查看日志查看指定服务日志查看调整存储 回到文章开头的问题总结 前言 就在半月之前,负责打包更新的服务器突然登录不上去了,赶紧找来运维的同事帮忙解决…

【数据结构之顺序表】

数据结构学习笔记---002 数据结构之顺序表1、介绍线性表1.1、什么是线性表? 2、什么是顺序表?2.1、概念及结构2.2、顺序表的分类 3、顺序表接口的实现3.1、顺序表动态存储结构的Seqlist.h3.1.1、定义顺序表的动态存储结构3.1.2、声明顺序表各个接口的函数 3.2、顺序表动态存储…

b2b订货系统成本是多少

批发贸易企业都上b2b订货系统,b2b订货系统成本究竟是多少,今天我们来算一算,尤其是最后一个大家可能会忽略。 一是b2b订货系统模板的功能费用,这部分一般各大厂家是明码标价,比如易订货12800元/年,核货宝首…

深入理解 Rust 中的容器类型及其应用

Rust 作为一种系统编程语言,提供了丰富的容器类型来处理各种数据结构和算法。这些容器类型不仅支持基本的数据存储和访问,还提供了高效的内存管理和安全性保障。本文将详细介绍 Rust 中的几种主要容器类型,包括它们的用法、特点和适用场景&am…

【IDEA】try-catch自动生成中修改catch的内容

编辑器 --> 文件和代码模板 --> 代码 --> Catch Statement Body

【雷达原理】雷达测速原理及实现方法

一、雷达测速原理 1.1 多普勒频率 当目标和雷达之间存在相对运动时,若雷达发射信号的工作频率为,则接收信号的频率为,其中为多普勒频率。将这种由于目标相对于辐射源运动而导致回波信号的频率发生变化的现象称为多普勒效应。 如图1-1所示&a…

优先级队列与仿函数

优先级队列 优先级队列 priority_queue 是一种容器适配器&#xff0c;听起来是队列&#xff0c;其实它的底层数据结构是堆&#xff0c;所谓的优先级为默认越大的数优先级越高&#xff0c;即默认为大堆。 使用方式如下面的代码&#xff1a; #include<iostream> #includ…

攻防世界——game 游戏

下载下来是一个exe文件&#xff0c;可以用IDA打开 我们先运行一下 这是属于第二种类型&#xff0c;完成一个操作后给你flag 这种题我更倾向于动调直接得到flag 我们查壳 没有保护壳&#xff0c;直接32打开 进入字符串界面&#xff0c;找到显示的那部分 int __cdecl main_0(…

Java经典面试题——手写快速排序和归并排序

题目链接&#xff1a;https://www.luogu.com.cn/problem/P1177 输入模板&#xff1a; 5 4 2 4 5 1快速排序 技巧&#xff1a;交换数组中的两个位置 a[l] a[l] a[r] - (a[r] a[l]); 稳定不稳定&#xff1f;:不稳定 注意找哨兵那里内循环的等于号不能漏&#xff0c;不然…

MyBatis的ORM映射

目录 什么是ORM 一&#xff0c;列的别名 二&#xff0c;结果映射 三&#xff0c;总结 什么是ORM ORM&#xff1a;对象关系映射&#xff08;Object Relational Mapping&#xff0c;简称ORM&#xff09;模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简…

时间与时间戳转换及android和ios对时间识别的区别

注意&#xff1a; "2021-05-01 12:53:59.55" 时间对象在 ios 中会出现 NaN-NaN1-NaN 需要将对象格式化为&#xff1a;"2021/05/01 12:53:59.55" 可同时兼容 android 和 ios。 //将某时间转时间戳 /* var time new Date("2021-05-01 12:53:59.55&qu…

力扣思维题——寻找重复数

题目链接&#xff1a;https://leetcode.cn/problems/find-the-duplicate-number/description/?envTypestudy-plan-v2&envIdtop-100-liked 这题的思维难度较大。一种是利用双指针法进行计算环的起点&#xff0c;这种方法在面试里很难说清楚&#xff0c;也很难想到。大致做…

idea structure视图介绍

作用 idea的Structure视图可以辅助查看代码结构 如何呼出Structure视图&#xff1f; Alt 7 Ctrl F12 侧边栏点Structure 我的常用配置 1、选Show Toolbar&#xff0c;便于使用功能按钮 2、使用Float视图&#xff0c;悬浮于窗口表面&#xff0c;可以使用 ShiftEsc来退出…

C语言初学6:循环

while 循环 一、while 循环的语法&#xff1a; while(condition) {statement(s); } condition 为任意非零值时都为 true。当条件为 true 时执行循环。 当条件为 false 时&#xff0c;退出循环&#xff0c;程序流将继续执行紧接着循环的下一条语句。 二、while 循环举例 #i…

quic协议及核心源码分析

quic协议 1、网络通信时&#xff0c;为了确保数据不丢包&#xff0c;早在几十年前就发明了tcp协议&#xff01;然而此一时非彼一时&#xff0c;随着技术进步和业务需求增多&#xff0c;tcp也暴露了部分比较明显的缺陷&#xff0c;比如: 建立连接的3次握手延迟大&#xff1b; T…

leetcode203题目移除链表元素

涉及递归 比较清晰 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) :…

c语言:文件操作(2),认识各种文件操作函数

fgets 作用 fgets是C语言标准库中用于从文件中读取字符串的函数。 fgets函数从指定的文件流stream中读取最多n-1个字符&#xff0c;或者直到遇到换行符&#xff08;包括换行符在内&#xff09;&#xff0c;并将其存储到以str指向的字符数组中。读取的字符串会以null字符\0结…