10大主流3D建模技术-程序员宅基地

技术标签: 3d  数字孪生  

在本文中,我将列出 10 种不同类型的 3D 建模。也许可以了解下一个项目将走向何方,或者你可能会像我一样惊讶,究竟有多少 3D 被用作以多种方式进行可视化的工具。这些是我们将讨论和探索的建模类型:

  • 盒子造型
  • 多边形建模
  • Nurbs 和曲线建模
  • 数字3D雕刻
  • 摄影测量
  • 模拟
  • 程序建模
  • 布尔建模
  • Kit Bashing
  • 模块化建模

你可能会争辩说,建模的类型与工具的数量一样多。然而,我选择将自己限制在比我自己更广泛的观众所认可的技术上。我发现有些技术似乎被普遍接受为 3D 建模的技术或类型。

它们都以一种或另一种方式可行。这完全取决于你想要创造什么样的形状和细节。这些类型中的大多数都可以在 Blender 中使用。但这不是 Blender 的独家文章,即使那是我选择的工具。相反,我想鼓励更广阔的视野,看看每种类型的建模带来了什么。

1、盒建模

让我们从盒建模(Box Modeling)开始。使盒建模成为自己的类型的原因是我们从一些原始对象开始,例如立方体或球体,我们使用经典的建模工具从中创建形状。

相关内容:30多种Blender建模工具讲解

我们有一个起点,我们使用低多边形形状来创建我们的对象。这是一种非常机械的常见建模方式,因为我们控制各个面、边和顶点。通过盒建模,我们强调一次操作对象的整个形状和较大部分。

大多数时候,我们处理有四个边的面,我们称它们为四边形。这些很容易使用,因为大多数建模工具都是为使用四边形而设计的。但是在我们使用模型之前,它通常是由用户预先或由后台软件自动进行三角测量的。

这种类型的建模往往最适用于硬表面对象,例如建筑可视化和人造对象或产品。

我们使用挤压、创建循环切割和斜切等工具。箱形建模经常与细分曲面一起使用。

细分曲面是一种在我们使用传统建模工具操作的边、顶点和面之间添加额外几何图形的技术。我们控制的几何形状就像一个笼子,我们用来塑造对象的细分版本。

根据 catmull-clark 算法,细分的低多边形对象变得更加圆润。这可能听起来很技术,但本质上我们只是添加了围绕对象表面的几何形状。

关于如何使用细分曲面有不同的流派。由于这是在我们原始几何体之上添加的一种层,因此有些人说你永远不应该在细分曲面可见的情况下进行建模,因为如果没有添加细分曲面,原始网格可能会变得不可用。限制我们对原始网格的使用。

其他人则认为,更容易看到你在做什么,并且意图仍然是使用具有细分曲面的对象。

2、多边形建模

Polygon Modeling(多边形建模)是一种与盒建模非常相似的 3D 建模。这里的不同之处在于,我们通常从单个顶点或简单形状开始,没有深度。然后我们一块一块地构建我们的模型。我们经常使用与盒建模相同的工具,但我们以一种细节化的方式使用它们。

这里的重点是更多地使用边和顶点。我们使用这种技术创建的对象类型仍然经常是坚硬的表面,但具有更多的有机形状。

多边形建模与盒建模一样,通常强调在拓扑中使用四边形。这是因为许多工具被设计为使用四边形拓扑。

我们用多边形建模创建的这个可能属于硬表面类别。但很多时候,我们创建的模型具有一些有机特征。例如,它可以是雕像或建筑装饰品。

但它也可以是我们用这种技术创造的一些配件、工具或其他装备。

此处也经常使用细分曲面来平滑对象的几何形状。

本质上,盒建模和多边形建模使用的工具是相同的,只是使用方式不同。

3、Nurbs 和曲线建模

Nurbs 代表非均匀有理 b 样条。难怪我们有一个首字母缩略词。通过这种建模,我们切换到一种完全不同的建模。我们创建基于控制点控制的曲面。我们可以用它来创建非常光滑的曲面。

我们既可以在同一曲线内的点之间进行解释,也可以在多条曲线之间建立桥梁。我们可以设置一个曲线网络,充当对象的边缘,然后填充其间的几何形状以创建对象。

这种建模主要用于工程和类似CAD的软件中。说到视觉特效和 3D 的艺术方面,就没有那么多了。

想象一下,如果你有一个想要 3D 打印的对象。在这种情况下,如果你有一个多边形模型,我们使用盒或多边形建模创建了它,然后将其放大。所有这些面和三角形都将开始变得可见,就像你放大基于光栅的图像时一样。

另一方面,使用 nurbs,我们可以放大和缩小模型,曲线将保持平滑。这可以说是相当于二维图形中的矢量图。

因为我们不再使用顶点、面或边,而是使用曲线。这意味着这些工具非常不同。

我们可能有工具可以打开或关闭一条曲线,或者创建一条在另外两条曲线之间进行解释的新曲线。但我们也有非常相似的工具,例如移动控制点、缩放和旋转。

4、数字3D雕刻

雕刻将我们从 3D 建模的工程部分带回到通常更具艺术性的方面。雕刻使用顶点、面和边,就像盒和多边形建模一样。我们使用雕刻将塑造过程与担心单个元素的更多技术细节分开。我们没有根据选择进行操作,而是使用画笔。画笔具有影响区域,并根据画笔类型和设置更有机地重塑几何形状。

雕刻通常与角色、动物或生物设计一起使用。但也可用于雕刻传统盒子和多边形建模难以创建的细节。

有不同类型的雕刻。我们可以按原样在网格上雕刻,这将根据画笔移动顶点、边缘和面以形成形状。使用这种方法,我们需要从一开始就有很多可用的几何图形,否则我们很快就会达到几何图形可以容纳多少细节的极限。

我们称之为多分辨率的下一个技术。它类似于细分曲面,不同之处在于我们可以在多分辨率的每一层之间存储雕刻。一旦我们达到几何体可以容纳多少细节的极限,我们就将多分辨率级别提高。通过这种方式,我们可以根据需要获得更多几何图形,并且可以将雕刻存储在多个细节级别上。

下一个技术迭代称为动态拓扑。至少在Blender中。当我们根据缩放级别或预定义的绝对级别进行绘制时,此功能会动态地将网格细分为三角形。这样,我们只需继续雕刻,几何形状就会适应。

当我们完成雕刻后,我们需要使网格再次可用。在雕刻会话之后,网格在性能和可加工性方面通常处于非常糟糕的状态。

有时我们可以通过不同的重新网格算法自动完成更好的网格,这些算法可以在对象的表面上并在其上应用新的网格。很多时候认为我们必须经历一个称为重新拓扑的过程,并在雕刻对象的顶部手动重新创建网格。

5、摄影测量

摄影测量是另一种生成 3D 模型的完全不同的方式。通过这种技术,我们使用相机并在尽可能均匀的照明条件下从各个角度多次拍摄对象。然后我们将这些图像输入到一个程序中,该程序解释它们并生成对象的 3D 表示。

这里有明显的优点和缺点。我们得到真实世界的数据,这意味着我们创造的任何东西都必然接近现实。很多时候,我们会在此过程中生成纹理和 UV 贴图,因此我们也不必在这些区域上花费太多时间。

然而,就像雕刻网格一样,需要通过重新网格或重新拓扑来重新加工。这意味着我们可能还需要重新创建 UV 贴图。

由于相机不仅可以捕捉到有问题的物体,还可以捕捉到周围的环境,因此还将进行大量的清理工作。

另一个缺点是我们需要有可用的对象来拍摄它,并且我们需要将它放在一个表面上,这意味着我们无法到达对象的一部分。例如,当我们拍摄一块岩石时,它必须躺下,并且在单次拍摄期间无法触及其底部。这将导致我们的网格中出现洞,我们必须以某种方式处理这些洞。

摄影测量是一项相对较新的发明,最近获得了很多关注。我们不能只拍摄小物体。我们还可以使用无人机拍摄整个区域并重建更大的结构。

这对于保护旧建筑或更快地研究一个地区是个好消息。

还有一些扫描仪可用于扫描物体或区域,就像声纳工作一样。然后可以通过软件输入数据以重新创建 3D 地图。

6、模拟

数字模拟有很多种。这里我将列出一些。

  • 物理
  • 柔软的身体
  • 体液
  • 火与烟
  • 海洋
  • 粒子

每一个都有自己的目的。正如你可能想象的那样,它们中的大多数还具有多种用途。当我们模拟某些东西时,我们会创建一个具有不同对象和参数的设置,这些对象和参数将随着时间的推移相互交互。计算机计算事物将如何移动以及我们运行模拟的每一帧会发生什么。

然后,我们可以使用结果来创建动画,也可以基于模拟而不是来自其他建模技术的原始手动输入来创建场景或对象。想象一下,如果你要在岩石上创造一个飞溅的波浪。您可以建模或使用摄影测量来创建岩石,但波浪更难。你也许可以雕刻它,但运行模拟并让它自己飞溅在岩石上会更方便,它会根据诸如波浪撞击岩石的角度、波浪的大小和速度等参数创建形状。波等。

同样,我们可以将物理模拟与软体对象结合使用来创建车祸。无需手动建模每一帧。

另一个例子是布料模拟。你可以为下一个建筑可视化场景雕刻枕头,也可以使用布料模拟来创建包含所有皱纹的枕头。

模拟比 nurbs 更倾向于 VFX。但是我们仍然可以将其视为一种建模技术,因为我们使用它来创建或变形对象。

模拟是一种技术含量更高的 3D 建模类型。因为我们主要是调整和微调参数,而不是直接关注形状。

7、程序化建模

程序化建模有多种形状和大小。我将其分为两种不同类型的建模。第一个是基于工具的。我们或其他人创建了一个工具,旨在通过程序生成一堆相似的对象。例如,我们可以有一个建筑物生成器。然后我们可以输入一堆参数,比如有多少层、天花板应该有多高以及应该有什么样的屋顶形状。然后我们多次运行该程序,每次运行时,都会吐出一个符合我们标准的新模型。

对于特定类型的模型,有很多这样的工具,我们还可以创建自己的模型生成器,并为我们希望工具输出的模型类型公开某些参数。

下一种程序建模与着色密切相关。着色器可以有一个位移输出,通过这个位移我们可以得到一个简单的基元,比如一个球体或一个平面,然后我们使用数学公式将表面变形为一个复杂的对象或表面。

随着越来越多更好的工具可用于通过着色置换几何体,这种趋势已经发展。可以使用在单个上下轴上工作的传统位移和矢量位移。矢量置换可以在所有方向上置换几何,从简单的几何创建非常高级的对象。

8、布尔建模

使用布尔建模,我们从模型开始,然后切掉或添加其他对象以创建新形状。这与盒子建模密切相关,我们经常将这两种技术结合使用。

通常我们用盒子建模来建模基本形状,然后用布尔运算组合不同的形状。我们必须使用的操作是:

  • 区别
  • 联合
  • 相交

差分算子是最常见的。这是从另一个对象中去除一个对象的形状和体积的运算符。

Union 会将两个对象合并在一起,并且 intersect 将仅保存两个对象共享的几何图形。

布尔值可以帮助我们创建形状,否则用其他建模技术模仿这些形状会很耗时。我们可以将圆形或弯曲形状与方形硬表面形状相结合,并将它们切掉或添加在一起。

9、Kit Bashing

这是另一种类型的建模,我们从一组对象开始,我们将这些对象组合成更详细的对象。或者我们可以使用工具包来详细说明使用其他类型建模制作的对象。

在创建坚硬的表面物体时,kit bashing也很常见。它使我们能够探索不同的部分如何组合在一起,而无需完整了解最终部分的外观。

Kit bashing 非常适合详细说明场景。使用kit bashing时,应注意高频细节、中频和低频细节的比例。合成良好的镜头通常在不同的细节分布之间具有良好的混合和排列。

对于硬表面和有机建模都是如此。例如,一个虚构的机器人可能有更多关于应该被视为头部或焦点的细节,而森林可能有不同的植物、树木和蘑菇分布,这取决于每种香料最有效地生长的地方。有些在场景中均匀分布,而另一些则聚集在一起或集中在场景的特定区域。

10、模块化建模

这并不是真正的建模技术,而是一种很好的实践。在创建 3D 资产时,最好记住模块化。我们可能正在创造一个城市景观。我们可能需要对多个看起来相似的建筑物进行建模。在这种情况下,我们应该考虑模块化,以便我们可以在下一栋建筑物中重用建筑物的某些部分。

我们甚至可以对不同的建筑部分进行建模,我们可以以不同的方式重新排列以创造变化。

11、最后的想法

在决定使用哪种类型的建模时,我们需要考虑我们的最终目标是什么。但在大多数情况下,这将是一个组合。特别是如果我们正在创建一个场景。在这些情况下,我们可能有一些对象需要一些技术,而其他对象则需要其他技术。

如果你是初学者,我建议你从盒子建模和多边形建模开始,因为它们使用的工具相同,并且这些技术是所有建模的基础。但是,例如,如果想在 3D 打印领域占据一席之地,那么你应该从 nurbs 建模开始。


原文链接:10 种3D 建模技术 — BimAnt

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shebao3333/article/details/126082097

智能推荐

JWT(Json Web Token)实现无状态登录_无状态token登录-程序员宅基地

文章浏览阅读685次。1.1.什么是有状态?有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session。例如登录:用户登录后,我们把登录者的信息保存在服务端session中,并且给用户一个cookie值,记录对应的session。然后下次请求,用户携带cookie值来,我们就能识别到对应session,从而找到用户的信息。缺点是什么?服务端保存大量数据,增加服务端压力 服务端保存用户状态,无法进行水平扩展 客户端请求依赖服务.._无状态token登录

SDUT OJ逆置正整数-程序员宅基地

文章浏览阅读293次。SDUT OnlineJudge#include<iostream>using namespace std;int main(){int a,b,c,d;cin>>a;b=a%10;c=a/10%10;d=a/100%10;int key[3];key[0]=b;key[1]=c;key[2]=d;for(int i = 0;i<3;i++){ if(key[i]!=0) { cout<<key[i.

年终奖盲区_年终奖盲区表-程序员宅基地

文章浏览阅读2.2k次。年终奖采用的平均每月的收入来评定缴税级数的,速算扣除数也按照月份计算出来,但是最终减去的也是一个月的速算扣除数。为什么这么做呢,这样的收的税更多啊,年终也是一个月的收入,凭什么减去12*速算扣除数了?这个霸道(不要脸)的说法,我们只能合理避免的这些跨级的区域了,那具体是那些区域呢?可以参考下面的表格:年终奖一列标红的一对便是盲区的上下线,发放年终奖的数额一定一定要避免这个区域,不然公司多花了钱..._年终奖盲区表

matlab 提取struct结构体中某个字段所有变量的值_matlab读取struct类型数据中的值-程序员宅基地

文章浏览阅读7.5k次,点赞5次,收藏19次。matlab结构体struct字段变量值提取_matlab读取struct类型数据中的值

Android fragment的用法_android reader fragment-程序员宅基地

文章浏览阅读4.8k次。1,什么情况下使用fragment通常用来作为一个activity的用户界面的一部分例如, 一个新闻应用可以在屏幕左侧使用一个fragment来展示一个文章的列表,然后在屏幕右侧使用另一个fragment来展示一篇文章 – 2个fragment并排显示在相同的一个activity中,并且每一个fragment拥有它自己的一套生命周期回调方法,并且处理它们自己的用户输_android reader fragment

FFT of waveIn audio signals-程序员宅基地

文章浏览阅读2.8k次。FFT of waveIn audio signalsBy Aqiruse An article on using the Fast Fourier Transform on audio signals. IntroductionThe Fast Fourier Transform (FFT) allows users to view the spectrum content of _fft of wavein audio signals

随便推点

Awesome Mac:收集的非常全面好用的Mac应用程序、软件以及工具_awesomemac-程序员宅基地

文章浏览阅读5.9k次。https://jaywcjlove.github.io/awesome-mac/ 这个仓库主要是收集非常好用的Mac应用程序、软件以及工具,主要面向开发者和设计师。有这个想法是因为我最近发了一篇较为火爆的涨粉儿微信公众号文章《工具武装的前端开发工程师》,于是建了这么一个仓库,持续更新作为补充,搜集更多好用的软件工具。请Star、Pull Request或者使劲搓它 issu_awesomemac

java前端技术---jquery基础详解_简介java中jquery技术-程序员宅基地

文章浏览阅读616次。一.jquery简介 jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互 jQuery 的功能概括1、html 的元素选取2、html的元素操作3、html dom遍历和修改4、js特效和动画效果5、css操作6、html事件操作7、ajax_简介java中jquery技术

Ant Design Table换滚动条的样式_ant design ::-webkit-scrollbar-corner-程序员宅基地

文章浏览阅读1.6w次,点赞5次,收藏19次。我修改的是表格的固定列滚动而产生的滚动条引用Table的组件的css文件中加入下面的样式:.ant-table-body{ &amp;amp;::-webkit-scrollbar { height: 5px; } &amp;amp;::-webkit-scrollbar-thumb { border-radius: 5px; -webkit-box..._ant design ::-webkit-scrollbar-corner

javaWeb毕设分享 健身俱乐部会员管理系统【源码+论文】-程序员宅基地

文章浏览阅读269次。基于JSP的健身俱乐部会员管理系统项目分享:见文末!

论文开题报告怎么写?_开题报告研究难点-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏15次。同学们,是不是又到了一年一度写开题报告的时候呀?是不是还在为不知道论文的开题报告怎么写而苦恼?Take it easy!我带着倾尽我所有开题报告写作经验总结出来的最强保姆级开题报告解说来啦,一定让你脱胎换骨,顺利拿下开题报告这个高塔,你确定还不赶快点赞收藏学起来吗?_开题报告研究难点

原生JS 与 VUE获取父级、子级、兄弟节点的方法 及一些DOM对象的获取_获取子节点的路径 vue-程序员宅基地

文章浏览阅读6k次,点赞4次,收藏17次。原生先获取对象var a = document.getElementById("dom");vue先添加ref <div class="" ref="divBox">获取对象let a = this.$refs.divBox获取父、子、兄弟节点方法var b = a.childNodes; 获取a的全部子节点 var c = a.parentNode; 获取a的父节点var d = a.nextSbiling; 获取a的下一个兄弟节点 var e = a.previ_获取子节点的路径 vue