C4D -> Three.js资产制作与导入流程
这篇文章介绍从 Cinema 4D 中的 UV 模型到用于 Three.js 的 .glb/.gltf 资产和纹理的整个过程,该网格将依赖 MeshStandardMaterial 来复制你在 Redshift 中看到的内容, 没有由 Three.js 处理的任何照明。
推荐:用 NSDT场景设计器 快速搭建3D场景。
如果你正在寻找一种方法来导出具有可在 Three.js 中主动点亮的纹理的 .glb/.gltf 资产,请查看我关于从 Redshift 烘焙 PBR 样式贴图的另一篇文章。 因为这篇文章主要关注导出过程,所以我不会讨论如何对模型进行 UV或如何将 .glb/.gltf 导入 Three.js 并分配纹理。
本系列的后续文章将包括优化流程和资产的重要方法、此方法的缺点以及其他提示和技巧。
1、从任何UV 模型开始
你要导出的任何模型都需要有一组合适的 UV。 虽然我知道使用 Redshift 有时会使应用着色器不需要此过程,但你计划导出为 glb/gltf 的模型必须经过 UV。 这就是 C4D/Redshif 知道如何将材质/纹理烘焙到图像中,所以 Three.js 知道如何将该纹理应用于模型顶点。
记住要保持你的模型的几何体低多边形,毕竟这是一个 Three.js 场景。
2、添加 Redshift 材质并照亮场景
通过在 Redshift 中添加材质/纹理等来完成场景并照亮。请记住,最后我们将烘烤出一个单一的平面pass以应用于模型,而无需在 Three.js 中处理任何照明,因此有些东西不会转换(即凹凸/移位) 会影响烘焙的外观(即裂缝会有阴影),但你不会在模型本身上看到任何凹凸/位移。
3、检查Redshift 渲染设置并添加 AOV
当我们烘焙纹理时,我们希望在 exr 文件中使用 ACEScg 和原始颜色,这样我们就可以确保保留所有可能的颜色信息。 在“颜色管理”部分的“全局”选项卡中对 Redshift 渲染设置进行一些调整:
- 确保渲染色彩空间设置为 ACEScg,
- 将视图设置为“原始”
- 关闭“补偿视图变换”
如果打开 Redshift RenderView/IPR,你会注意到颜色看起来不对。 这是可以预料的。
你还需要在 Redshift AOV 管理器中为 Beauty pass 设置 AOV。 添加通道,然后确保选中“Direct”(可以取消选中“Multi-pass”),并在右侧的“Direct Output”部分下:
- 将格式设置为“OpenEXR”,
- 将每通道位数设置为“浮动(32 位)”
- 将压缩设置为“DWAA”。
如果需要,你可以选择导出其他 AOV,这些 AOV 也将在我们烘焙时输出到它们自己的图像文件中。 然而,由于我们只是希望将我们在 Redshift 中看到的准确结果转化为 Three.js,所以我们只需要 Beauty。
4、合并烘焙
合并使用相同UV/Texture空间的几何体,添加一个RS BakeSet,然后烘焙!
因为钳子有三个独立的几何体,但我把它们放在同一个 UV/Texture 空间,我想使用这个工作流程临时组合它们:
- 复制组。
- 关闭原始组的编辑器可见性/渲染可见性。
- 对副本执行“连接对象并删除”。 我将其重命名为 Tongs-Combined。
这将确保当我们进行烘焙时,它会将所有 tong geo 的烘焙纹理输出到一个图像文件中,而不是基于每个 几何体 的单独图像文件。 虽然你可以在 Photoshop 中单独组合这些文件,但这会使它更容易,并在纹理图像中为你提供漂亮的边缘绘画/UV 边缘扩展。
现在通过以下方式创建你的 RS BakeSet:
- 选择要烘焙的所有几何体(我的是 Tongs-Combined、GroundPlane 和 CuttingBoard)。
- 转到 Redshift 菜单 -> 工具 -> 纹理烘焙 -> 从选择创建烘焙集。
现在在大纲中选择 BakeSet 并更新宽度和高度。 我做了 2K,这可能有点矫枉过正,但你可以随时根据 Three.js 中场景的需要缩小它们。 如果设置了另一个想要烘焙的 UV 空间,你可以在 UV 源字段中指定它,尽管由于我们所有人都使用默认的 UVW,你可以将其留空。 你还可以验证要烘焙的所有对象是否都列在“对象”字段中。 如果有任何遗漏,可以将它们拖到这里。
现在你可以单击 BakeSet 上的 Bake 按钮。 它会给你一个弹出窗口,你可以在其中设置:
- 纹理的输出文件夹
- 取消选中“Default Beauty AOV”,因为我们已经在 AOV 管理器中配置了一个。
单击“烘焙”,渲染纹理需要一段时间。 你会得到类似下面的东西。
5、对纹理进行颜色校正
因为我们想要我们可以获得的所有颜色信息并且我们在 Redshift 中使用了 ACEScg 颜色空间,所以我们需要对我们的 OpenEXR 进行一些颜色转换,以便通过确保它们在 sRGB 颜色空间中,它们在 Three.js 中看起来是正确的。 我知道如何做到这一点的方法是使用 After Effects:
确保项目设置中的颜色设置使用:32 bps、sRGB,并选中“线性化工作空间”。
将你的 OpenEXR 作为合成导入 After Effects。 确保作为合成导入,但不需要联系表。
将所有 OpenEXR 放入一个合成中。 将它们每个修剪为 1 帧,并及时将它们的位置偏移 1 帧,这样就可以看到它们并使用当前时间指示器擦洗它们。
现在将一个调整层添加到此合成的顶部,并将 OpenColorIO 效果(在此处可用)添加到该层。 从 Configuration 下拉列表中,添加 Redshift 的配置文件,该文件位于 Applications/redshift/Data/OCIO 目录中,名为 config.ocio。
现在将 OpenColorIO 效果设置为“显示”模式。 将输入空间设置为“ACEScg”,并将显示设置为“sRGB”。 颜色还是不对,我们首先需要在 OpenColorIO 效果下面添加一个 Color Profile Converter 效果。 将输入配置文件设置为“sRGB”。最后,我们的颜色应该与我们在 Redshift 中设置材质和灯光时的外观完全一样! 如果你想尽可能地编辑纹理,只需在顶部颜色转换层下方添加任何调整,以确保利用 OpenEXR 中的所有颜色信息。
接下来我们可以将时间轴(所有三个帧)渲染为 PNG 序列,并且我们将准备好在 Three.js 中使用的纹理文件。 现在,以高位深度和全分辨率 (2048) 渲染它们。 输出后,可以降低分辨率或将它们压缩为 jpg 等。它们应该如下所示。
6、将 Cinema 4D 场景导出为 glb/gltf。
切换回你的 Cinema 4D 文件,并准备好导出到 glb/gltf。 你可能希望将场景保存为“-JustGeo”之类的副本,因为我们将清除 Three.js 不需要的东西。
移除所有灯光、相机和你制作的重复几何图形以促进纹理烘焙。 大纲中唯一剩下的东西应该是空值、几何体,如果你有一些被操纵的东西,可能还有骨骼(尽管导出一个被操纵/蒙皮的对象有很多复杂的事情,所以在依赖这个工作流程进行任何动画或操纵之前做一些实验)。 也可以移除材质标签,但保留 UV 标签和 Phong 标签。
现在转到文件 -> 导出 -> glTF 并使用以下设置对其进行配置,然后将其保存。
7、将 .glb 和纹理导入 Three.js
基本上有 4 件事你需要做才能让你的场景在 Three.js 中工作
- 使用基本样板创建通用场景三样东西。画布、场景、相机、轨道控件、渲染器、浏览器窗口的调整大小事件、初始化纹理加载器和 gltf 加载器,以及添加动画循环。
- 从它们的 URI 加载三个纹理文件,将它们的每个编码更新为 THREE.sRGBEncoding,并将它们的每个 flipY 属性设置为 false。
- 创建三个 MeshBasicMaterials(每个纹理一个)并将它们的贴图属性设置为上面的纹理对象。
- 加载 gltf。 在加载过程中,遍历 gltf 并将正确的材质应用于每个几何体(Cinema 4D 导出的命名将保留,因此只需搜索具有这些名称的网格)。 并将 gltf 添加到 Three.js 场景中。
好了!3D 模型将以你在 Redshift 和 Cinema 4D 中开发的相同高质量外观在浏览器中运行。
原文链接:C4D->Three.js流程 — BimAnt
相关文章:

C4D -> Three.js资产制作与导入流程
这篇文章介绍从 Cinema 4D 中的 UV 模型到用于 Three.js 的 .glb/.gltf 资产和纹理的整个过程,该网格将依赖 MeshStandardMaterial 来复制你在 Redshift 中看到的内容, 没有由 Three.js 处理的任何照明。 推荐:用 NSDT场景设计器 快速搭建3D场…...
【博学谷学习记录】大数据课程-学习十三周总结
Hive的交互方式 第一种交互方式:bin/hive hive 创建一个数据库 create database mytest; show databases; 第二种交互方式:使用sql语句或者sql脚本进行交互 不进入hive的客户端直接执行hive的hql语句 hive -e “create database mytest2” 或者我们…...

Spring Cloud快速入门
文章目录Spring Cloud快速入门一、基础概念1、微服务架构2、微服务技术栈3、什么是Spring Cloud?4、Spring Cloud和Spring Boot的联系?5、比较成熟的互联网架构二、Rest环境搭建1、搭建提供者1.1、创建一个父工程1.2、创建一个springcloud-api模块1.3、创建一个spr…...

论文学习——VideoGPT
论文学习——VideoGPT: Video Generation using VQ-VAE and Transformers 原文链接:https://arxiv.org/abs/2104.10157 1. 设计思路 不同种类的生成模型在一下多个维度各有权衡:采样速度、样本多样性、样本质量、优化稳定性、计算需求、评估难易程度等…...
Flutter系列(五)底部导航详解
Flutter系列(四)底部导航顶部导航图文列表完整代码,如下: Flutter系列(四)底部导航顶部导航图文列表完整代码_摸金青年v的博客-CSDN博客 目录 一、前言 二、Scaffold组件 三、BottomNavigationBar组件 …...

『pyqt5 从0基础开始项目实战』02. 页面布局设计(保姆级图文)
目录弹性布局介绍导包和框架代码布局框架搭建1. 总体布局框架2. 顶部菜单布局3. form添加内容布局4. table数据展示布局5. footer底部菜单完整项目代码总结欢迎关注 『pyqt5 从0基础开始项目实战』 专栏,持续更新中 欢迎关注 『pyqt5 从0基础开始项目实战』 专栏&am…...
【Python机器学习】——平均中位数模式
Python机器学习——平均中位数模式 文章目录 Python机器学习——平均中位数模式一、Python 平均中位数模式一、Python 平均中位数模式 均值、中值和众数 从一组数字中我们可以学到什么? 在机器学习(和数学)中,通常存在三中我们感兴趣的值: 均值(Mean) - 平均值 中值(M…...

Windows窗口
Windows窗口 Unit01注册窗口类 01窗口类的概念 窗口类是包括了窗口的各种参数信息的数据结构每个窗口都具有窗口类,基于窗口类创建窗口每个窗口都具有一个名称,使用前必须注册到系统 02窗口类的分类 系统窗口类 系统已经定义好的窗口类,…...

Spring Transaction 源码解读
Spring Transaction 规范的maven坐标如下: <dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>...</version></dependency>该包提供了spring事务规范和默认的jta(ja…...

[Netty] Channel和ChannelFuture和ChannelFutureListener (六)
文章目录1.Channel介绍2.ChannelFuture接口介绍3.GenericFutureListener接口介绍1.Channel介绍 NIO的Channel与Netty的Channel 不一样 Netty重新设计了Channel接口,并且给予了很多不同的实现, Channel是Netty网络的抽象类, 除了NIO中Channel所包含的网络I/O操作, 主动建立和关…...

条件渲染
组件经常需要根据不同条件显示不同内容。在React中,你可以使用类似于if语句、&&和?:运算符的JavaScript语法有条件地呈现JSX。你将学到:如何根据条件返回不同的JSX如何有条件地包含或排除一段JSX在React代码库中常见的条件语法快捷方式有条件地…...
springboot(10)异步任务
文章目录1、SpringBoot异步任务1.1使用注解EnableAsync开启异步任务支持1.2使用Async注解标记要进行异步执行的方法1.3controller测试2.异步任务相关限制3.1自定义 Executor3.1.1应用层级:3.1.2方法层级:3.2自定义 Executor (第二种方式)4.1异常处理4.1.…...
清华大学开源的chatGLM-6B部署实战
Windows部署 win10 通过wsl部署 常见问题: torch.cuda.OutOfMemoryError: CUDA out of memory. 在Windows的系统环境变量中增加 变量名:PYTORCH_CUDA_ALLOC_CONF 变量值:max_split_size_mb:32 文档书写时使用3090 24G显存配置,其他规格酌情调整 32 至其他值,如未设置变…...
通过矩阵从整体角度搞懂快速傅里叶变换原理
离散傅里叶变换公式 公式 f[k]∑n0N−1g[n]e−i(2π/N)kn,其中(0<n<N)f[k]\sum_{n0}^{N-1}g[n]e^{-i(2\pi/N)kn}, 其中(0<n<N) f[k]n0∑N−1g[n]e−i(2π/N)kn,其中(0<n<N) 逆变换公式 g[n]1N∑k0N−1f[k]ei(2π/N)kn,其中(0<k<N)g[n]\frac{1}{N}\…...
【C++从0到1】25、C++中嵌套使用循环
C从0到1全系列教程 1、实例代码 #include <iostream> // 包含头文件。 using namespace std; // 指定缺省的命名空间。int main() {// 超女分4个小组,每个小组有3名超女,在控制台显示每个超女的小组编号和组内编号。// 用一个循环…...

FastDFS与Nginx结合搭建文件服务器,并内网穿透实现公网访问
文章目录前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.1 …...

密集场景下的行人跟踪替代算法,头部跟踪算法 | CVPR 2021
一个不知名大学生,江湖人称菜狗 original author: Jacky LiEmail : 3435673055qq.com Time of completion:2023.4.8 Last edited: 2023.4.8 目录 摘要 主要内容 结果 这篇文章是CVPR 2021 的最新论文,文章的标题: 文章的主要内…...

Matlab与ROS(1/2)---服务端和客户端数据通信(五)
0. 简介 在前几讲我们讲了Matlab中的Message以及Topic的相关知识。而ROS主要支持的通信机制还有服务这一类。服务通过允许请求以及响应的通信方式,来给整个系统完成更紧密的耦合。服务客户端向服务服务器发送请求消息并等待响应。服务器将使用请求中的数据构造响应…...
数字化转型的避坑指南:细说数字化转型十二大坑
随着信息技术的快速发展,数字化转型已经成为许多企业发展的必经之路。然而,数字化转型过程中也存在许多坑,如果不谨慎处理,就可能导致企业陷入困境。本文将细说数字化转型的十二大坑,并提供相应的避坑指南。 1、不了解…...
pt05Encapsulationinherit
Encapsulation &inherit 封装继承 封装 向类外提供必要的功能,隐藏实现的细节, 代码可读性更高优势:简化编程,使用者不必了解具体的实现细节,只需要调用对外提供的功能。私有成员:作用:无需向类外提供…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...