Unity开发者3D模型基础

术语“3D 建模”是指使用特殊软件创建对象或表面的 3D 数字表示的过程。 3D 模型可用于各种不同的目的,包括电影、视频游戏、建筑和工程。 3D 建模也是创建虚拟现实 (VR) 和增强现实 (AR) 体验工作的重要组成部分。

我们通常通过构建或获取 3D 模型并将其导入 Unity(一个 3D 游戏引擎)来创建虚拟现实场景。 在 Unity 中构建场景时,用户查看的每个组件都具有计算机图形管道中的资源遵循的特定层次结构。 他们是:

  • 网格 - 实际的几何形状
  • 纹理 - 位图图像
  • 材质 - 表面的外观(即反光或哑光以及纹理的链接位置)。 这也是着色器应用的区域。
  • 着色器 - 实际发生的计算。 将其视为一个小程序(脚本),帮助获取所有输入项(例如纹理、网格和照明数据)并将它们输出为最终图像

为了进一步解释每个组件,让我们看一下美国最大的电力公司之一创建的虚拟智能家居体验的一些示例。 在这种 VR 体验(及其配套的 AR 体验)中,消费者学习如何通过在整个家庭中进行节能改造来减少碳足迹。

我们要看到的主要模型是下图所示的餐厅。 最终渲染是所有四个组件(网格、纹理、材质和着色器)协同工作的示例。 现在让我们分解每个组件。

Unity 内的最终渲染

1、网格

首先是模型或网格。 这部分很容易理解。 3D 艺术家将在他们选择的建模程序中创建它。 我们使用 Blender,但 Maya、3DS Max 或 C4D 等其他软件也非常合适。3D 模型由众多顶点组成,这些顶点构成多边形,从而赋予 3D 模型形状。 更多的多边形可以帮助使模型更加真实,但太多也会对您正在开发的平台上的性能产生负面影响。

鉴于这是为实时应用程序创建的,多边形数量应保持尽可能低,以帮助最大限度地提高性能。 这对于桌面和移动 VR 来说尤其重要,因为在打造引人入胜的 VR 体验时保持稳定的帧速率至关重要。 这也有助于减少某些人可能经历的晕动病的感觉。

模型完成后,将对其进行 UV 处理、从建模程序导出并导入到 Unity 中。

显示拓扑的模型线框

2、纹理

在我们进一步讨论之前,让我们先退后一步。 创建模型后,必须对其进行 UV 展开。 这只是获取 3D 对象表面并将其放置在 2D 空间中的过程。

Blender 内的 UV 布局

从这里,你可以将模型带入 Substance Painter 等纹理程序中来创建纹理。 使用 Substance Painter 等程序的好处是它允许你导出各种图像,这些图像稍后在 Unity 中设置材质时会很有用。 这些图像可以更轻松地遵循基于物理的渲染(或 PBR),这是一种用于创建更准确渲染的工作流程。

对于标准的 PBR 工作流程,有 4 个主要组成部分:反照率(基色)、粗糙度(光泽程度)、金属性(是否是金属物体)和法线贴图(在不添加更多几何体的情况下伪造细节)。 此外,您还可以使用其他图像,例如环境光遮挡(一种模拟对象之间阴影的方法,在角落和其他紧密区域尤其明显)、发射和高度。

PBR贴图

3、材质

回到 Unity,在我们从纹理程序导出不同的图像后,是时候将它们连接到材质上了。 这些在下面的屏幕截图中进行了说明。 此外,如果你计划在纹理中使用透明度,则可以将表面类型从不透明更改为透明。 一个很好的例子是,如果你正在为游戏制作植物。 可以简单地使用一个平面并应用具有 Alpha 或透明度的叶子纹理,而不是对单个叶子进行建模。

Unity 内部材质和 URP/lit 着色器的一些输入

4、着色器

上面的屏幕截图还显示了方程式的最后一部分 - 使用哪个着色器。 对于 Unity 中的任何材质,你可以指定要使用的着色器(即使用哪种算法或程序来生成最终图形)。 对于我们的餐厅场景,我们使用了通用渲染管道/光照,它使用上一节中描述的 PBR 管道的所有输入。

为了更进一步,你甚至可以使用 Unity 中名为 Shader Graph 的新功能创建自己的着色器! 使用 Shader Graph,用户无需知道如何编码,而是可以通过放置称为节点的预定义代码位来直观地动态构建相同的逻辑。 如果想为特定用例构建特定着色器,这会很有帮助。 下面是两个这样的例子。

  • 示例1

在清洁能源智能家居体验中,我们需要模拟在电磁炉上烹饪汉堡肉饼。对于该模块,用户的任务是将汉堡放在炉子上,以演示电磁炉的特性并展示它如何 只烹饪平底锅上的食物。 为了完成此任务,需要半个煎锅的 3D 模型,以及一个自定义着色器来模拟这种过渡。

演示在电磁炉上烹饪肉饼的着色器示例

  • 示例2

我们在清洁能源智能家居体验中加入的一个设计元素是让全息图在某些时刻淡入和淡出,以帮助说明某些概念。 为了实现这一目标,我们再次需要自定义效果。 为了简洁起见,下面的溶解效果是各种节点的组合,这些节点创建了驱动着色器的 Alpha 透明度阈值的黑白蒙版。

全息图着色器示例

我们使用模型创建、纹理和着色器的工作流程来构建清洁能源智能家居体验中的所有模块和环境。 房子里的一些模块包括:

  • 电动汽车模块,将常规内燃汽车的效果与电动汽车的优点进行比较
  • 暖通空调模块,用户可以观察房屋内空气泄漏对能源效率的影响。
  • 电磁炉模块,比较了电磁炉和传统燃气灶的成本节约和碳排放量

创建或使用 3D 模型时需要考虑和学习的东西还有很多——本文仅触及皮毛。 然而,了解网格、纹理、材质和着色器如何协同工作是开始掌握创建真实 3D 对象和表面所需内容的好方法。 就该项目而言,我们构建了一种体验,允许用户在节能的虚拟智能家居中参与学习模块。 但掌握这四个组件可以让设计师创造出数量难以想象的动态 3D 场景,让用户眼花缭乱、沉浸其中。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设置win32程序的窗口过程为自定义的窗口过程

Win32 SetWindowLong函数的第二个参数是一个整型,可以取不同的值,根据此值设置窗口的不同的属性;如果设为 GWL_WNDPROC 则可以为窗口设置一个另外的窗口过程; VC6新建一个win32项目,类型选为 典型helloworld 程序; 资源中添加一个菜单, 总的代码如下; // setproc.cp…

NineData云原生智能数据管理平台新功能发布|2024年3月版

数据库 DevOps - 大功能升级 SQL 开发早期主要提供 SQL 窗口(IDE)功能,在产品经过将近两年时间的打磨,新增了大量的企业级功能,已经服务了上万开发者,覆盖了数据库设计、开发、测试、变更等生命周期的功能…

正则表达式完全指南:语法、用法及JavaScript实例

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

K8s Deployment 滚动更新、金丝雀发布、自定义钩子、生命周期解析

🐇明明跟你说过:个人主页 🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅 🔖行路有良友,便是天堂🔖 目录 一、Deployment的高级特性 1、滚动更新 2、金丝雀…

harmonyOS的客户端存贮

什么是客户端存贮 在harmonyOS中,客户端存贮是指将数据存贮在本地设备以供应用程序使用; 注: 和feaureAblity搭配使用,content上下文的获取依赖该API如下: // 引入: import featureAbility from ohos.ability.featureAbility;// 使用: let content featureAbility.getConten…

STM32串口认识

常用函数介绍 串口发送/接收函数 HAL_UART_Transmit(); 串口发送数据,使用超时管理机制(即在发送成功前一直阻塞,相当于有个delay()在卡住主函数) HAL_UART_Receive(); 串口接收数据,使用超时…

极简云验证 download.php 文件读取漏洞复现

0x01 产品简介 极简云验证是一款开源的网络验证系统,支持多应用卡密生成:卡密生成 单码卡密 次数卡密 会员卡密 积分卡密、卡密管理 卡密长度 卡密封禁 批量生成 批量导出 自定义卡密前缀等;支持多应用多用户管理:应用备注 应用版…

Android JNI基础

目录 一、JNI简介1.1 什么是JNI1.2 用途1.3 优点 二、初探JNI2.1 新建cpp\cmake2.2 build.gradle配置2.3 java层配置2.4 cmake和c 三、API详解3.1 JNI API3.1.1 数据类型3.1.2 方法 3.2 CMake脚本 四、再探JNI 一、JNI简介 1.1 什么是JNI JNI(Java Native Interfa…

开源软件技术社区方案

开源软件技术社区是一个由开发者、贡献者、用户和维护者组成的共享平台,主要目的是打造技术、软件产品良性互动、开源技术安全可控的软件生态环境,实现可复用应用或服务的快速部署与使用、完成资源与能力的高度共享、促进社区成员的共建共赢,…

面试复盘1 - 测试相关(实习)

写在前:hello,大家早中晚上好~这里是西西,最近有在准备测试相关的面试,特此开设了新的篇章,针对于面试中的问题来做一下复盘,会把我自己遇到的问题进行整理,除此之外还会进行对一些常见面试题的…

什么是异地组网?

在当今互联网普及的背景下,异地组网已成为许多企业和个人日常工作中不可或缺的一部分。异地组网的核心目的是实现不同地区间的快速、高效的局域网连接。在这个过程中,延迟(即网络数据传输的时间延迟)是一个关键影响因素。我们来看…

还得是抖音,字节推出竖屏视频理解数据集,入选CVPR2024

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站https://ai.hzytsoft.cn/ 更多资源欢迎关注 短视频在当下社交媒体逐渐成为主导的视频格式。传统视频处理技术和研究一般都专注于横屏视频…

【快速解决】python缺少了PyQt5模块的QtMultimedia子模块

目录 问题描述 问题原因 解决方法 成功示范 问题描述 Traceback (most recent call last): File "d:\桌面\python项目\DesktopWords-master\main.py", line 4, in <module> from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent ModuleNotFoundEr…

Unity自定义icon

Unity自定义icon 1. 新建文件夹 OfficeFabricIconSet2. 新建Iconset3. 新建子文件夹Textures并添加icon图片4. 向iconset添加Quad Icons5. 最终效果 教程来源处&#xff1a; https://365xr.blog/build-your-own-button-icon-set-for-microsoft-hololens-2-apps-with-mrtk-using…

stm32之基本定时器的使用

在上文我们使用到了HAL库的自带的延时函数&#xff0c;HAL_Delay&#xff08;&#xff09;&#xff1b;我们来看一下函数的原型 __weak void HAL_Delay(uint32_t Delay) {uint32_t tickstart HAL_GetTick();uint32_t wait Delay;/* Add a freq to guarantee minimum wait */…

程序员为什么不能一次性写好,需要一直改Bug?

程序员为什么不能一次性写好&#xff0c;需要一直改Bug&#xff1f; 我有一问&#xff1a; 你为什么不上清华呢&#xff0c;高考答满分不就行了&#xff1f; 程序员在软件开发过程中可能会遇到需要不断修改Bug的情况&#xff0c;这主要是由以下几个原因造成的&#xff1a; 复杂…

5.3.1 配置交换机 SSH 管理和端口安全

5.3.1 实验1:配置交换机基本安全和 SSH管理 1、实验目的 通过本实验可以掌握&#xff1a; 交换机基本安全配置。SSH 的工作原理和 SSH服务端和客户端的配置。 2、实验拓扑 交换机基本安全和 SSH管理实验拓扑如图所示。 交换机基本安全和 SSH管理实验拓扑 3、实验步骤 &a…

FreeBSD下如何进行添加路由等配置?

FreeBSD系统可以当作一台路由器来使用&#xff0c;实际上当年路由器刚刚出来的时候&#xff0c;有很大一部分就是用主机安装FreeBSD来提供路由功能的。 路由的基础知识 路由&#xff0c;就是计算机网络中决定数据包从源地址到目的地址路径的一种传输过程。路由表&#xff0c;就…

基于Springboot学生考勤管理系统

采用技术 基于Springboot学生考勤管理系统的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBootMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 功能清单 系统登录注册 系统登录 学生注册 管理员功能模…