Blender 插件:GLTF 2.0 导入 / 导出工具
![Blender插件:GLTF 2.0 导入/导出工具](https://static001.geekbang.org/infoq/cf/cfbdea17eba70dcbba8cbdf24dc21d02.webp)
推荐:使用NSDT场景编辑器快速搭建 3D 应用场景
用法
glTF™(GL 传输格式)用于 3D 模型的传输和加载 在 Web 和本机应用程序中。glTF 减小了 3D 模型的大小和 解包和呈现这些模型所需的运行时处理。 这种格式在网络上常用,并且在各种3D引擎中都有支持。 比如 Unity3D、虚幻引擎 4 和 Godot。
此导入器/导出器支持以下 glTF 2.0 功能:
网 格
材料(原理 BSDF)和无阴影(无照明)
纹理
相机
准时灯光(点、点和方向)
动画(关键帧、形状关键帧和外观)
网 格
glTF 的内部结构模仿了图形芯片常用的内存缓冲区 实时渲染时,以便可以将资产交付到桌面、Web 或移动客户端 并以最少的处理及时显示。结果,四边形和 n 边形 导出为 glTF 时自动转换为三角形。 不连续的 UV 和平坦的阴影边缘可能会导致 glTF 中的顶点计数略高 与搅拌机相比,因为这样的顶点是分开的。 同样,曲线和其他非网格数据也不会保留, 并且必须在导出之前转换为网格。
材料
glTF 中的核心材料系统支持金属/原石 PBR 工作流程 具有以下信息渠道:
基色
金属
粗糙度
烘烤环境光遮蔽
法线贴图
发射的
![](https://static001.geekbang.org/infoq/bd/bd2806ef6a71330c2f95551a102520ca.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1)
glTF 2.0 核心格式中可用的各种图像映射的示例。这是 水瓶示例模型与其各种图像映射的切片一起显示。
进口材料
glTF 材料系统与 Blender 自己的材料不同。导入 glTF 文件时, 该插件将构建一组 Blender 节点,以尽可能接近地复制每个 glTF 材料。
导入器支持金属/原石 PBR (核心 glTF)、规格/光泽 PBR () 和无阴影 () 材料。KHR_materials_pbrSpecularGlossinessKHR_materials_unlit
提示
检查材料导入过程的结果是查看示例的好方法 可导出到 glTF 的材质节点和设置的类型。
出口材料
导出器支持金属/粗糙 PBR(核心 glTF)和无阴影()材料。 它将根据它在 Blender 材质中识别的节点构建 glTF 材质。 材料导出过程处理下述设置。KHR_materials_unlit
注意
当材质使用图像纹理时,glTF 要求图像采用 PNG 或 JPEG 格式。 该插件将自动转换其他格式的图像,从而增加导出时间。
提示
要创建无阴影(无光照)材质,请使用背景材质类型。
基色
glTF 基色是通过在原则 BSDF 节点上查找基色输入来确定的。 如果输入未连接,则输入的默认颜色(未连接的套接字旁边的色域) 用作 glTF 材质的基色。
![](https://static001.geekbang.org/infoq/16/16df20239b27821b03b287005acb021c.png)
可以直接在节点上指定纯基色。
如果发现图像纹理节点连接到基色输入, 该图像将用作 glTF 基色。
![](https://static001.geekbang.org/infoq/fd/fdea67630c61b1b729dbe78f54cd2a23.png)
图像用作 glTF 基色。
金属和粗糙度
这些值是从原则 BSDF 节点读取的。如果这两个输入都未连接, 节点将显示滑块以控制它们在 0.0 和 1.0 之间的相应值, 这些值将被复制到 glTF 中。
使用图像时,glTF 期望金属值在蓝色 () 通道中编码, 以及在同一图像的绿色()通道中编码的粗糙度。 如果图像以不遵循此约定的方式连接到 Blender 节点, 加载项可能会尝试在导出过程中将图像调整为正确的形式(增加导出时间)。BG
在 Blender 节点树中,建议使用单独的 RGB 节点 将通道与图像纹理节点分开,以及 将绿色 () 通道连接到粗糙度,将蓝色 () 连接到金属。 glTF 导出商将识别此安排与 glTF 标准匹配,并且 这将允许它在导出过程中简单地将图像纹理复制到 glTF 文件中。GB
此时的“图像纹理”节点应将其“颜色空间”设置为“非颜色”。
![](https://static001.geekbang.org/infoq/f4/f407f0bc91d4757cefa8a5807699fa22.png)
以符合 glTF 标准的方式连接的金属/粗糙度图像, 允许在导出的 glTF 文件中逐字使用它。
烘烤环境光遮蔽
glTF 能够存储烘焙的环境光遮蔽贴图。 目前没有导致 Blender 的节点排列 以与 glTF 中完全相同的方式使用此类映射。 但是,如果导出程序找到名为 和 的自定义节点组 查找在该节点组上命名的输入, 它将查找附加在那里的图像纹理,以用作 glTF 中的遮挡贴图。 效果不需要在 Blender 中显示,因为 Blender 还有其他显示环境光遮蔽的方式, 但此方法将允许导出器将遮挡图像写入 glTF。 这对于实时 glTF 查看器非常有用,尤其是在存在 可能不是在渲染时计算这些东西的备用电源。glTF SettingsOcclusion
![](https://static001.geekbang.org/infoq/61/6102f78c05dedfd5e9a48dc52e5d411f.png)
预烘焙的环境光遮蔽贴图,连接到不渲染但将导出到 glTF 的节点。
提示
创建自定义节点组的最简单方法是导入现有的 glTF 模型 包含遮挡贴图,例如 水瓶或其他现有模型。也可以使用手动创建的自定义节点组。
glTF 将遮挡存储在红色 () 通道中,允许其选择性共享 具有粗糙度和金属通道的图像相同。R
![](https://static001.geekbang.org/infoq/cb/cbd982e4b35abc02c43ff34080bf4831.png)
这种节点组合模仿了 glTF 包装遮挡、粗糙度和 金属值到单个图像中。
提示
循环渲染引擎有一个烘焙面板,可用于烘焙 环境光遮蔽贴图。生成的图像可以保存和连接 直接到节点。glTF Settings
法线贴图
要在 glTF 中使用法线贴图,请连接图像纹理节点的颜色输出 连接到法线贴图节点的颜色输入,然后将法线贴图法线输出连接到 原则 BSDF 节点的正常输入。“图像纹理”节点 为此,应将其“颜色空间”属性设置为“非颜色”。
法线贴图节点必须保留在其默认属性“切线空间”上,作为 这是 glTF 目前支持的唯一法线贴图类型。 法线贴图的强度可以在此节点上进行调整。 导出器不会直接导出这些节点,而是会使用它们来定位 正确的图像,并将强度设置复制到 glTF 中。
![](https://static001.geekbang.org/infoq/5c/5cb9d9110abc17d69de91b8537d119df.png)
连接了一个法线地图图像,以便导出器能够找到并复制它 到 glTF 文件。
提示
循环渲染引擎有一个烘焙面板,可用于烘焙 来自几乎任何其他法线向量节点排列的切空间法线贴图。 将烘焙类型切换为正常。保留默认空间设置 (空格:切线,R: +X,G:+Y,B:+Z)当将此烘焙面板用于 glTF 时。 生成的烘焙图像可以保存并插入到新材料中 如上所述的法线贴图节点,允许其正确导出。
请参见:循环渲染烘焙
发射的
图像纹理节点可以连接到发光着色器节点,并且 可以选择通过添加着色器节点与原则 BSDF 节点的属性组合。
如果 glTF 导出器找到连接到发光着色器节点的图像, 它会将该图像导出为 glTF 材质的自发光纹理。
![](https://static001.geekbang.org/infoq/c5/c52c5b898331b94b211e3ae5969ee1ff.png)
可以将排放节点添加到现有节点。
注意
此导出器尚不支持原则 BSDF 节点的发射输入。 这可能会在将来的版本中更改。
双面/背面剔除
对于仅可以看到正面的材质,请打开背面剔除 Eevee 材质的“设置”面板。使用其他发动机(循环、工作台)时 您可以暂时切换到 Eevee 来配置此设置,然后切换回来。
对于双面材料,请取消选中此框。
![](https://static001.geekbang.org/infoq/ed/ed816cc9b94c44f0e73e9dddcc00dcb9.png)
此设置的反转控制 glTF 的标志。
混合模式
基色输入可以选择提供 alpha 值。 glTF 如何处理这些值取决于所选的混合模式。
选择 Eevee 渲染引擎后,每个材质都有一个混合模式 材质设置面板。使用此设置定义 alpha 值如何从 基色通道在 glTF 中处理。glTF 支持三种设置:不透明字母值将被忽略(默认值)。阿尔法混合较低的 Alpha 值会导致与背景对象混合。阿尔法剪辑低于“剪辑阈值”设置的 Alpha 值将导致部分 根本不要渲染的材料。其他所有内容都呈现为不透明。
![](https://static001.geekbang.org/infoq/04/0457f247586da7d54a8814e6d97e2fdc.png)
选择 Eevee 引擎后,材质的混合模式是可配置的。
注意
请注意,透明度(或 Alpha 混合模式)对于实时引擎来说很复杂 进行渲染,并且在导出后可能会以意外的方式运行。在可能的情况下, 改用 Alpha 裁剪模式,或仅将不透明多边形放在后面 阿尔法混合多边形的单个图层。
紫外线贴图
通过连接 UV 贴图节点可以控制 UV 贴图的选择和变换 以及将节点映射到任何图像纹理节点。
“映射”节点中的设置使用名为 的 glTF 扩展名导出。 顶部有一个映射类型选择器。点是建议导出的类型。还支持纹理和矢量。支持的偏移量包括:KHR_texture_transform
位置 - X 和 Y
旋转 - 仅 Z 轴
比例 - X 和 Y
对于纹理类型,缩放 X 和 Y 必须相等(均匀缩放)。
![](https://static001.geekbang.org/infoq/58/58a1b9a6f96c3a58162bfafbed87b3b0.png)
深思熟虑的 UV 贴图选择。
提示
这些节点是可选的。并非所有 glTF 读取器都支持多个 UV 贴图或纹理变换。
因素
任何图像纹理节点都可以选择与常量颜色或标量相乘。 这些将作为因子写入 glTF 文件中,它们是相乘的数字 使用指定的图像纹理。这些并不常见。
例
如果需要,单一材料可以同时使用上述所有材料。此图显示 同时应用上述多个选项时的典型节点结构:
![](https://static001.geekbang.org/infoq/5e/5efd406c98e32d9c715ec394a1e9c745.png)
具有自发光纹理的原则 BSDF 材质。
扩展
核心 glTF 2.0 格式可以使用 glTF 扩展扩展使用额外信息进行扩展。 这允许文件格式保存首次发布时不被视为通用的详细信息。 并非所有 glTF 阅读器都支持所有扩展,但有些扩展相当常见。
某些 Blender 功能只能通过这些扩展导出到 glTF。 此附加组件直接支持以下 glTF 2.0 扩展:
进口
KHR_materials_pbrSpecularGlossiness
KHR_lights_punctual
KHR_materials_unlit
KHR_texture_transform
出口
KHR_draco_mesh_compression
KHR_lights_punctual
KHR_materials_unlit
KHR_texture_transform
动画
glTF 允许每个文件有多个动画,动画目标为 导出时的特定对象。为了确保包含动画, (a) 使其成为对象上的活动操作,(b) 创建单条带 NLA 轨道, 或 (c) 隐藏操作。
支持
仅支持某些类型的动画:
关键帧(平移、旋转、缩放)
形状键
电枢/蒙皮
其他属性(如光源或材质)的动画将被忽略。
自定义属性
大多数对象的自定义属性都保留在 glTF 导出/导入中,并且 可用于用户特定目的。
版权声明: 本文为 InfoQ 作者【3D建模设计】的原创文章。
原文链接:【http://xie.infoq.cn/article/d8d2ff321a5db0bc878566d60】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论