基于许可证的 WebRTC 全球分布式架构
随着在线教育行业的兴起, 许多人把目光投向了国外市场,而如何搭建全球化的音视频网络就成为了其中的关键问题。百家云研发工程师陈聪详细介绍了如何利用Licode 开源服务器搭建全球分布式架构以解决常见的教育场景的问题。本文来自陈聪在LiveVideoStackCon 2018上的演讲,由LiveVideoStack整理而成。
文 / 陈聪
整理 / LiveVideoStack
大家好,我是来自百家云的陈聪,今天我将为大家带来与Licode的WebRTC全球分布式架构相关的技术分享。之所以想为大家介绍这个架构,是因为我在使用WebRTC开源服务器时发现WebRTC并没有提供类似于分布式或集群的整体解决方案,希望百家云在此领域的探索能为大家带来有价值的帮助。
1. SFU
1.1 SFU简介
SFU全称为Selective Forwarding Unit,我们可以将其原理简单理解为将一条流推给多个端并且在整个过程中不对视频进行编解码处理。相对于其他传统的需要重新编解码的解决方案而言,其优点在于低延迟、低消耗。当然,单SFU的缺点也显而易见。
1.2 单SFU问题
1)人数限制
单SFU面临的第一个问题是人数限制,主要出现在像“双师课堂”这种较为常见的教育场景中。在此场景中,一位老师为多名学生教学,多名学生接收由老师端发送的流。有时在“双师课堂”中容易出现老师端码率较高的情况,以1080p、30FPS的情形为例,此时一位学生所需带宽为3.5MB;如果有两百位学生在线观看则单个服务器的出口带宽就会达到700MB左右,并且随着学生人数的增加,所需出口带宽越来越多;而单个SFU的带宽是有限制的,如我们常用的阿里云、腾讯云的带宽在300~500MB左右。由于单个服务器的带宽限制,单节课同时在线人数便无法达到一个较为理想的规模。
2)地理分布,就近接入
地理分布与就近接入是我们在探索单SFU中面临的第二大问题,此问题主要出现在“小班课”的教育场景。虽然与“双师课堂”相比“小班课”在人数上没有那么大的规模,一般情况下一节课在线人数为6~15人,但由于在此场景中老师与学生的地理跨度较大,也许分布在世界各地。这就使得我们必须选择质量高扩展广的服务器作为接入点。可由于单SFU的原因,我们只能选用相对于所有用户较好的服务器,如上图我们选用上海的服务器。但这也导致距离服务器较远位置的用户相对于服务器所在地的用户其感受到的延迟更为明显。
如果将用户拓展到全球范围来看的话,那么由其造成的延迟问题就更为明显。如上图情况,学生在中国而老师在美国的话,学生看老师就会增加2倍的跨洲延迟。同时,高延迟除了造成视频的卡顿、丢包,还会造成流量的浪费。如果不解决这些问题,我们便无法部署一个性能优异的全球化分布式网络架构,那么如何解决这些问题呢?
2. 解决方案:级联SFU
我们的思路是通过级联SFU而非单SFU解决上述问题,也就是将SFU相互级联后,使客户端发布的流经过另一个SFU转发,其它客户端再从另一个SFU订阅。
2.1 解决人数限制
级联SFU解决的第一项问题是人数限制,受单服务器的出口带宽所限,如果在线人数达到一定规模那么学生就无法成功订阅来自老师的视频。此时如果通过级联SFU把来自老师端的流通过下一层服务器进行转发和路由,不仅可解决人数限制的问题,还可增加动态扩展的功能,也就是根据新加入学生的人数动态扩建服务器,从而实现节省资源的目的。
2.2 解决地理分布与就近接入问题
单服务器造成的跨地域用户延迟问题,可通过级联服务器解决。通过对每位用户的IP进行解析,系统就可获知此用户所在地理位置并根据地理位置信息为用户就近分配可用服务器节点,从而尽可能降低由于地理跨度带来的视频延迟。
而对于全球化来部署来说,由于一个洲所拥有的一般为一整个服务器集群,有可能此服务器集群下有多个SFU进行多层级联,这就便于我们搭建起一个简单的全球化分布式网络架构。
3. Licode介绍
接下来我将为大家介绍Licode,上图展示的是部分Licode官方介绍。Licode相当于一个部分基于WebRTC源代码但完全兼容WebRTC的开源SFU服务器,具有简单可用易伸缩的优点,也支持视频会议,推流和录制等功能。
从底层到上层,我们来看一下Licode的各个模块。最底层的Erizo模块实现WebRTC的基本协议如(ICE,SDP,DTLS等),实现WebRTC协议栈后Licode就可和浏览器进行通讯并把浏览器的视频流上传至服务器;再上一层是ErizoAPI,相当于一层封装,通过NodeJS的封装层封装C++使得上层可通过NodeJS调用相应模块;ErizoAPI上一层是Erizo Controller,这部分通过JS实现的代码相当于封装下一层的调用,开发者可通过JS对其进行快速开发并实现特殊逻辑如房间逻辑、发布者逻辑、订阅者逻辑等或实现类似于(Token)验证等功能;最顶层的Nuve则主要用于通过API调用多项功能如API创建房间,API管理用户等等。
上图展示的是Licode模块的整体架构。由上至下,第一层的CustomServerApp通过创建的Port3000调用Nuve API,而数据则通过MogonDB存储;第二层的RabbitMQ会处理相应的信令并分布式;图中红框标示的部分是ErizoJS与WebRTC,此部分代码使用JS进行封装,这个模块主要封装了发布者、订阅者等逻辑。开发者可通过这里的代码直接创建一个发布者或订阅者从而实现与前端浏览器之间的通讯。
4. 基于Licode级联实现
百家云将Licode ErizoJS 模块单独提取并使其直接与信令通讯,这里给大家详细描述一下流程。信令会和ErizoJS与客户端连接,信令会根据客户端的ip,给客户端选择就近的ErizoJS,同时将视频流发布至此服务器上;假若此时有一位于上海的客户端接入而视频流来自北京,那么信令就可侦测到二者不在同一区域,就会把北京的视频流推至上海的ErizoJS;与此同时,我们也会在上海的服务器端创建一个Router,此Router同样也是Publisher,上海的客户就可以使用这个Publisher 创建一个 Subscriber 来订阅视频。
4.1单节点Docker化
除了实现Licode级联,百家云也对Licode部分代码进行了优化,首先是单节点Docker化。这里的ErizoJS相当于一个SFU服务器,我们所做的就是将此模块Docker化从而组成一个新的模块,此Docker化的模块可实现动态扩展、快速部署等功能。由于教育场景下,在某些时间段,如工作日晚6点至9点或周末部分时段出现流量与视频流的高并发现象,同样在凌晨时段访问量较少,一直开着一定数量的服务器并不是经济实惠的选择。Docker化之后根据需求动态调动部署服务器,既达到动态扩容的效果又节省了流量和开销,可谓两全其美。
4.2级联间去加密
百家云在细节上的优化也值得分享,比如说级联之间去加密。大家应该知道WebRTC本身是基于加密传输,其会实现一层DTLS SRTP加密,而此加密对于服务器和服务器直接传输来说是不必要的,因此我们取消了这一层代码并重新实现了Licode::Transpore类,实现ICE传输。因为DTLS SRTP加密之前本身会有一个(握手)过程,如果我们去掉此加密层就会加快连接速度,同时也节省了加密计算的资源。
4.3其他级联优化
其他的一些优化如ICE也必不可少。因为Licode基于Libnice开发,而Libnice本身存在一个全局锁问题。我们在开发的过程中发现当并发或流量达到一定高度时就会出现严重的丢包阻塞问题。我们的解决方案相是自己重新实现ICE并替换原来的Libnice数据包。除了ICE,我们还进行了Simulcast、FEC、NACK等优化。由于Licode本身是客户端与服务器之间的通信,并没有实现服务器与服务器之间的功能。我们在此基础上进行优化从而实现了服务器与服务器之间的传输。
4.4全球化
最后我想为大家简单介绍一下教育场景全球化部署实例。我们主要针对三个区域进行全球化部署:东南亚、美国与欧洲。为了保障东南亚国家如菲律宾等的接入稳定,会选择从香港或新加坡接入,有时出于优化网络的目的还需拉专线或通过就近运营商接入优;而对于美国,由于其网络质量相对于东南亚国家更好,与中国连接的线路相对于中欧或东南亚的条件更好,所以不需要花费太多时间进行优化;中东欧国家一般通过国内常用的位于法兰克福的节点进行传输,再通过爱尔兰、英国等国家与地区接入从而尽可能优化网络质量。
精品文章推荐
技术干货:
谁是最好的WebRTC SFU?
2018:视频标准混战的元年序幕
BBR如何让Spotify流媒体更流畅?
不需要SFU实现WebRTC联播实践
使用级联SFU改善媒体质量和规模
Netflix:我们是如何评估Codec性能的?
CoNEXT 2018:在Facebook上部署IETF QUIC
下一代低延时直播CDN:HLS、RTMP 与UDP +WebRTC
推荐阅读
-
Spring Cloud项目源码:基于微服务和分布式架构的Activiti 6工作流实现,结合Vue.js、HTML构建跨域前后端分离应用
-
Java 使用定时任务 - 前言:Java 开发过程中经常会遇到使用定时任务的情况,如在某个活动结束时自动生成获奖者名单、导出 excel 等。常见的有以下四种方式:Timer、ScheduledExecutorService、SpringTask、Quartz。 实现 Java 定时任务的四种方法 (1) JDK 自带定时器实现 (2) Spring Task @Scheduled 注解任务调度 (3) Quartz 定时器实现 (4) Elastic-job 分布式任务调度框架 JDK 自带 .NET Framework 2.0JDK 自带 Timer 和 JDK1.5 + 新 ScheduledExecutorService; Spring3.0自带的任务调度工具:它可以看做是一个轻量级的Quartz,而且使用起来比Quartz简单得多,一般可以直接用@Scheduled+corn表达式来注解实现; Quartz:简单但功能强大的 JAVA 作业调度框架; Elastic-job分布式作业调度框架:是当当网架构师基于Zookepper、Quartz开发并开源的一个Java分布式定时任务,解决了Quartz不支持分布式的缺点。 JDK自带的java.util. JDK 自带的 java.util.Import 是 JDK 的一部分。 java.util.import import java.util. import java.util. public class Test { /** * 第一个方法:设置在指定时间执行指定任务,只执行一次 * schedule(TimerTask task, Date time) */ public static void timer1 { Timer timer = new Timer; timer.schedule(new Timer) timer.schedule(new 定时任务) public void run { System.out.println(new Date + "\t "+"--specify the task to be run---"); } }, new Date(System.currentTimeMillis + 2000)); } } } /** * 第二个方法:设置指定任务在延迟后执行,只执行一次 * schedule(TimerTask task, long delay) * 延迟单位毫秒 */ public static void timer2{ Timer timer = new Timer; timer.schedule(new Timer) timer.schedule(new 定时任务) public void run { system.out.println(new Date + "\t "+"--specify the task to be run---"); } }, 2000); } /** * 第三个方法:设置指定的任务在指定的延迟时间后周期性执行,周期时间为 period * schedule(TimerTask task, long delay, long period) * scheduleAtFixedRate(TimerTask task, long delay, long period) * 延迟,周期以毫秒为单位 */ public static void timer3 { Timer timer = new Timer; timer.schedule(new Timer) timer.schedule(new 定时任务) public void run { system.out.println(new Date + "\t "+"--specify the task to be run---"); } }, 1000, 1000); } /** * 第四种方法:设置指定任务 task 在指定时间 firstTime 开始重复循环执行,循环时间为周期 * schedule(TimerTask task, Date firstTime, long period) * scheduleAtFixedRate(TimerTask task, Date firstTime, long period) * 以毫秒为单位的周期 */ public static void timer4 { Calendar calendar = Calendar.getInstance; calendar.set(Calendar.HOTIME) */ calendar.set(Calendar.HOUR_OF_DAY, 12); // 控制时间 calendar.set(Calendar.MINUTE, 0); // 控制分钟数 calendar.set(Calendar.SECOND, 0); // 控制秒数 Date time = calendar.getTime; // 推导出执行任务的时间,本例中为今天 12:00:00。 Timer timer = new Timer; timer.schedule(new Timer) timer.schedule(new 定时任务) public void run { System.out.println(new Date +"\t "+"--- 指定要执行的任务 ---"); } }, time, 1000); } /** * schedule 方法和 scheduleAtFixedRate 方法的区别: * (1) schedule 方法:如果第一次执行时间延迟,则根据上次实际执行完成时间点计算后续执行时间,即:下一次执行时间点 = 上次程序执行完成时间点 + 间隔时间 * (2) scheduleAtFixedRate 方法:如果第一次执行时间延迟,则根据上次开始时间点计算后续执行时间,即:下次执行时间点=上次程序执行时间点+间隔时间,*且前一个任务的执行时间延迟,则根据上次实际执行完成时间点计算后续执行时间,即:下次执行时间点=上次程序执行完成时间点+间隔时间。 *而上一个任务的执行时间大于间隔时间,就会与当前任务重叠,TimerTask 在执行时需要考虑线程同步的问题 */ } 计时器的缺陷:
-
基于许可证的 WebRTC 全球分布式架构
-
基于 NFC 的无线电池管理 BMS - ● 主动读取内部传感器:利用 NFC 技术,BMS 能够主动读取内部传感器的数据 [... 考虑车辆外使用案例中的空闲状态场景:NFC 技术可用于处理闲置状态下的电池组读取,例如在第二次生命转移期间进行存储。 主动诊断读取:在邻近系统中部署了 BMS 的情况下,使用 NFC 技术进行主动诊断读取。 (ii) 系统结构 系统架构如图所示,在建立安全通道之前,需要对设备进行身份验证。数据链路通信层由 NDEF 记录处理,而数据存储可以是离线的,也可以是数据库中的在线存储。活动和空闲状态的诊断读数取决于设备和数据方向,需要与外部 NFC 阅读器进行通信。软件架构分为三层,包括硬件抽象层(HAL)、中间层(中间件)和应用层。HAL 处理硬件驱动组件,中间件执行设备验证,而应用层则由开发人员根据安全漏洞和格式扩展*定义。 为确保安全,系统采用了一个安全模型,为 BMS 和主动诊断读取情况格式化应用数据。安全考虑因素包括设备相互验证、使用安全通道(加密和防篡改)以及确保电池组内读数的安全。 考虑到不同的 BMS 拓扑,包括集中式、调制式、分布式和分散式,系统需要满足设备相互验证和使用安全通道的要求。对于每种拓扑结构,都必须考虑将性能开销降至最低。电池是封闭的,对其进行物理攻击不可行或成本太高。外部攻击可能也很困难。基于对称或非对称加密技术的自动验证可用于保护电池组读数。安全协议在验证阶段和会话密钥确认阶段采用双密钥加密,以抵御攻击。中间件在数据格式验证、确认和处理中发挥关键作用,确保数据传输安全。 (iii) 唤醒模型设计
-
实时音频和视频技术的发展与应用-1.1 双重音频和视频 从架构上看,双人音视频系统相对简单明了。红点代表房间信令服务,房间信令服务的主要功能是管理房间信息,实现容量协商和上下行链路的质量调节,例如当下行信道发生拥塞时,上行线路的码率和分辨率会降低。 在传输信道层面,我们的策略是优先直连,在跨区域、跨运营商的情况下,我们会选择单中转或双中转信道,在策略上尽量保持直连和中转信道同时存在,当其中一个信道的质量不好时,系统会自动切断到另一个信道的流量。 1.2 多人音视频 多人视频通话的产品形态是整个房间不超过 50 人,大盘平均房间规模约为 4.x 人,房间内部最多满足一个大视频和三个小视频(四屏)。根据这一条件,我们在架构中采用了典型的 SFU 小房间设计。 上图中的红点代表房间信令服务,主要用于房间管理和状态信息同步。房间管理主要包括用户列表的管理,例如哪些用户打开了视频/音频,我看了谁,谁看了我,这些都是基于房间管理的信息,然后房间信令服务会将这些信息同步到媒体传输服务进行数据分发。 房间服务的另一个作用是房间级容量协商和质量控制,例如,房间里的每个人一开始都支持 H.265 编码,当某个时刻进来一个只支持 H.264 编码的用户时,房间里所有的上游主播就必须把 H.265 切成 H.264。还有一种情况是,房间里有一定比例的人下行链路信道质量较差,这会导致上行链路房间质量下降。 在传输层面,我们采用的是单层分布式媒体传输网络,大家都选择中转方式,不区分双人和多人,采用 Full-Mesh 传输机制将所有数据推送过去,比如一个节点上的人并不都看另外两个人的视频,但还是会将视频推送给他们。
-
41 个下载免费 3D 模型的最佳网站-使用说明:使用权限可能因型号而异。因此,在下载文件之前,请仔细检查每个下载页面上的许可证和使用权限。 17. Clara.io Clara.io 是一个创建 3D 内容的全球平台,也是一个培养新 3D 艺术家的社区。Clara.io 提供+100,000个免费的3D模型,包括OBJ,Blend,STL,FBX,DAE,Babylon.JS,Three.JS格式,用于 Clara.io,Unity 3D,Blender,Sketchup,Cinema 4D,3DS Max和Maya。 使用说明:免费,标准和专业帐户仅供个人使用,如果您需要将 clara.io 用于商业用途,请与销售团队联系。 18. 3DExport 3DExport是一个市场,您可以在其中购买和销售用于CG项目的3D模型,3D打印模型和纹理。它提供15 +不同的3D格式供下载,如3DS MAX(.max),Cinema4D(.c4d),Maya(.mb,.ma),Lightwave(.lwo),Softimage(.xsi),Wavefront OBJ(.obj),Autodesk FBX(.fbx)等。它还提供15种不同的语言! 使用说明:免费下载仅供个人和非商业用途。 19. 3D Warehouse 3D Warehouse是一个开放的库,允许用户共享和下载SketchUp 3D模型,用于建筑,设计,施工和娱乐!任何人都可以免费制作,修改和重新上传内容到3D仓库,您可以找到任何您能想到的东西,如家具,电子产品,室内产品等。 使用说明:3D Warehouse中的所有模型都是免费的,因此任何人都可以下载文件以用于SketchUp甚至其他软件,如AutoCAD,Revit和ArchiCAD。 20. CadNav.com CadNav是CGI平面设计师和CAD / CAM / CAE工程师的在线3D模型库,我们提供超过50000 +免费3D模型和CAD模型下载。在CadNav网站上,您可以下载高质量的多边形网格3D模型,3D CAD实体对象,纹理,Vray材料,3D作品,CAD图纸等。 使用说明:免费下载仅供个人和非商业用途。 21. All3dfree.net 就像网站名称一样,它提供免费的3D模型,还包括Vray材料,CAD块,2d和3d纹理集合,无需注册即可免费下载。它是不断更新的,因此您可以查找或请求3DS,MAX,C4D,skp,OBJ,FBX,MTL等格式的模型。 使用说明:所有资源均不允许用于商业用途,否则您将承担责任。 22. Hum3D 自2005年以来,Hum3D帮助来自3多个国家的80D艺术家节省3D建模时间,并制作逼真的3D模型,用于电影,视频游戏,AR应用程序和可视化。所有模型均由首席3D艺术家进行验证,他们检查其是否符合专业要求和最新的3D建模标准。 使用说明:免费下载仅供个人和非商业用途。 23. Artist-3D.com 艺术家-3D 库存的免费 3D 模型下载按通用类别排序。它为人体解剖学、汽车、家具、火箭、卫星等模型提供 AutoDesk 3DS Max 格式。您还可以在浏览他们的网站时找到教程和类似类型的建模。 使用说明:使用权限可能因型号而异。因此,在下载文件之前,请仔细检查每个下载页面上的许可证和使用权限。 24. Free the models 就像本网站的标题一样,它为3d应用程序和3d游戏引擎提供免费的内容模型。您可以为您的任何项目找到许多有趣且有用的模型!它提供3ds,wavefront,bryce,poser,lightwave,md2和unity3d格式的模型。还有一个很棒的纹理集合,可以在您最喜欢的建模和渲染程序中使用。 使用说明:您从这里下载的所有内容都可以免费使用,除非它不能包含在另一个免费的网络或CD收藏中,也不能单独出售。否则,您可以在商业游戏,3D应用程序或渲染作品中使用它。您不必提供信用,但如果您这样做,那就太好了。 25. Resources.blogscopia 本网站由一家名为Scopia的公司创建。他们制作3D图像和视频,您可以找到许多为CGI工作的信息架构设计的模型,所有这些都可以在现实生活中使用。您可以免费下载它们,但是,如果您想一次下载它们,您可以支付 3 到 9 欧元。 使用说明:您可以免费下载模型部分的所有文件。每个压缩文件都包含您也可以在此处找到的许可证。基本上,您可以对文件执行任何操作。唯一的限制是不归属于Scopia的重新分发。 26.ambientCG 1000+公共领域PBR材料适合所有人!环境CG是使用许多不同的方法和资产类型创建的,例如照片纹理(PBR),贴花(PBR),图集(PBR),照片纹理(普通),物质存档(SBSAR),雕刻画笔,3D模型和地形。您可以在所有项目中*使用它们! 使用说明:在 ambientCG 上提供下载的所有 PBR 材料、画笔、照片和 3D 模型均根据知识共享 CC0 1.0 通用许可提供。您可以复制、修改、分发和执行作品,即使是出于商业目的,也无需征得许可。信用将不胜感激。 不要满足于平庸的大理石纹理 - 立即使用我们的免费PBR大理石纹理升级您的3D设计。 27.Pixar One Twenty Eight 这是一个提供官方动画行业经典纹理的网站:皮克斯,创建于 1993 年,该纹理库包括 128 个重复纹理,现在免费提供。 它包含您来到的纹理,包括砖块和动物毛皮。肯定会有一些你可以使用的东西。 使用说明:皮克斯动画工作室的《Pixar One Twenty Eight》根据知识共享署名4.0国际许可协议进行许可。即使出于商业目的,您也可以重新混合、调整和构建您的作品,只要您以相同的条款对新创作进行信用和许可。 访问数以千计的免费纹理并提升您的设计游戏 - 立即开始下载! 28. 3DXO 即使有近 620 个免费贴纸可供下载,3DXO 也不是最大的资源,但它的内容非常有用,不需要注册。无论是简单的墙壁或地板,还是一些奇怪的小东西,您都需要的纹理都可以在此网站上看到。 使用说明:使用权限可能因型号而异。因此,在下载文件之前,请仔细检查每个下载页面上的许可证和使用权限。 29. 3DModelsCC0 3DModelsCC0 与其他产品的不同之处在于它包含超过 250+ 个高质量 3D 模型,并且本网站上的所有内容都是免费的,完全是公共领域!使用我们的模型时无需信用或归属! 使用说明:为每个人提供完全免费的公共领域内容。 30.Sketch up texture club Sketchup Texture Club是一个非营利性的教育和信息门户网站,由3D社区的图像促进协会管理,特别强调面向学生和建筑和室内设计专业人士的可视化和渲染技术,以及所有正在学习3D可视化的人。 使用说明:您无需支付版税或使用费。纹理可以免费下载和使用。不允许将纹理作为竞争产品出售或重新分发,即使图像被修改也是如此。 31. FlippedNormals FlippedNormal 是一个提供计算机图形和 3D 资产的市场,您可以找到许多用于雕刻、建模、纹理、概念艺术、3D 模型、游戏资产或课程的高级资产! 使用说明:使用权限可能因型号而异。因此,在下载文件之前,请仔细检查每个下载页面上的许可证和使用权限。 32. NASA 3D NASA 3D网站是一个在线门户,提供与太空和各种NASA任务相关的大量三维模型和模拟。该网站是用户友好的,并提供有关每个型号的详细信息。该网站允许用户探索和下载几种不同格式的模型,包括 OBJ、STL 和 FBX,只需单击下载按钮即可。 使用说明: 要下载模型,只需单击模型页面上的下载按钮并选择所需的格式。 33. 3DAGOGO (Astroprint) 3DAGOGO 是一个提供广泛 3D 模型的网站,包括角色、车辆和建筑物。3DAGOGO 的独特功能之一是它专注于适合 3D 打印的模型,使其成为希望创建物理原型或模型的设计师的绝佳资源。要使用 3DAGOGO,设计师只需在网站上搜索他们正在寻找的模型类型,然后下载 STL 格式的文件。 使用说明: 要使用 3DAGOGO,只需搜索所需的 3D 模型类型并下载 STL 格式的文件。根据需要自定义模型,并确保在将其用于商业目的之前检查使用权限。 34. FreeCAD FreeCAD是一款了不起的3D建模软件,可让您在计算机上创建令人难以置信的3D设计。该软件可免费下载和使用,它提供了广泛的工具和功能,可用于创建用于各种目的的3D模型。 该网站易于浏览,您可以找到开始使用FreeCAD的所有必要信息。此外,该网站还提供一系列教程和指南,可帮助您了解 3D 建模的来龙去脉。 使用说明: 要下载模型,请访问网站并从库中选择所需的模型。该网站还提供了一系列使用该软件的教程和指南。 35. Pinshape Pinshape是一个提供一系列3D打印模型的网站。网站上提供的型号质量很高,因此您可以确保您的最终印刷产品看起来很棒。该网站提供了广泛的模型,包括从家居用品到小雕像和珠宝的所有物品。 但这还不是Pinshape所能提供的全部!该网站还允许用户上传和共享自己的3D模型。这意味着您不仅可以下载出色的模型,还可以通过分享自己的设计为社区做出贡献。此外,Pinshape 提供了一系列自定义选项,因此您可以调整和调整模型以满足您的特定需求。 使用说明: 要下载模型,请在网站上创建一个帐户,搜索所需的模型,然后单击下载按钮。该网站还为每种型号提供了一系列定制选项。 36.Yeggi Yeggi 提供了大量免费的 3D 模型,您可以下载各种格式的模型,例如 STL、OBJ 和 FBX。该网站易于使用,您可以按关键字、类别或特定网站搜索模型。 Yeggi 对于任何寻找 3D 模型的人来说都是一个很好的资源。它提供了大量的模型集合,从日常物品到复杂的机械,以及介于两者之间的一切。该网站的收藏量在不断增长,每天都有新的型号增加。 使用说明: 要下载模型,请在网站上搜索所需的模型,然后单击下载按钮。该网站还提供指向托管模型的原始网站的链接。 37. Open3DModel 来自开放3D模型的图像 Open3DModel具有各种类别的模型,包括建筑,车辆和角色。无论您需要建筑物,汽车还是人的3D模型,都可以在此网站上找到。 该网站易于浏览,您可以按类别或关键字搜索模型。每个模型都附带预览图像和详细信息,例如文件格式、大小和多边形数量。此信息可以帮助您选择适合您需求的模型。 使用说明: 要下载模型,请访问网站,从库中选择所需的模型,然后单击下载按钮。 使用最好的 3D 资产管理工具简化您的 3D 制作流程。立即试用它们,将您的 3D 项目提升到一个新的水平! 38. 3DExport 对于那些为其 3D 设计项目寻找 3D 模型、纹理和其他资源的人来说,该平台是一个很好的资源。该网站有大量模型可供选择,包括 3D 打印对象、游戏资产等。用户可以按类别、文件格式或价格范围浏览,以找到适合其项目的完美资源。此外,3DExport 还提供一系列教程和其他 3D 资源,以帮助用户提高技能并创建更令人印象深刻的设计。 使用说明: 要使用 3DExport,只需创建一个帐户并浏览可用型号。您可以按类别、格式和价格进行搜索,以找到所需的型号。找到喜欢的模型后,只需下载它并开始在您的项目中使用它。 39.Blend Swap Blend Swap是一个社区驱动的市场,提供与Blender软件兼容的各种免费3D模型。该平台允许用户共享和下载模型、纹理和其他资产,以便在他们的项目中使用。 使用说明: 创建免费帐户后,您可以浏览社区上传的大量3D模型。当您找到要使用的一个时,只需下载它并将其导入您选择的 3D 软件即可。 40. 3DShook 3DShook 是一个高级 3D 模型市场,提供一系列用于建筑、游戏等各个行业的高质量模型。该平台提供基于订阅的模型,具有不同的定价计划,允许用户访问一系列模型。 使用说明: 注册免费帐户后,只需浏览3D模型库,选择您喜欢的模型,然后以您需要的格式下载它们。 41. Smithsonian X 3D 史密森尼 X 3D 对于正在寻找历史文物和文物的高质量 3D 模型的设计师来说,这是一个独特的资源。该平台提供了大量3D模型,这些模型是根据史密森尼博物馆和研究中心中的真实物体扫描创建的。 使用说明: