前言
在大数据盛行的现在,大屏数据可视化也已经成为了一个热门的话题。大屏可视化可以运用在众多领域中,比如工业互联网、医疗、交通、工业控制等等。将各项重要指标数据以图表、各种图形等形式表现在一个页面上,各种数据一目了然。随着浏览器不断发展完善,使用 Web 做大屏展示也已经不是新鲜的事了。市面上已有不少的大屏解决方案,大部分是以放各种图表的形式呈现,基本是 2D 的呈现。有些是根据投放屏幕的比例设计出来的,并不能自适应于其它的屏幕比例。最近学习了 Hightopo 的 HT for Web 产品,特有的矢量,在各种比例下不失真,加上布局机制,解决了不同屏幕比例下的展示问题,加上 3D 的呈现部分,可以做出别具一格的大屏系统。在这里与大家分享学习,先来张整体效果图:
本文主要介绍内容如下,文章中以 HT 作为 HT for Web 的简称:
一、页面搭建
在这个系统中,我们需要创建 ht.graph.GraphView 和 ht.graph3d.Graph3dView 来呈现 2D 和 3D 的内容。设计师给到的 display.json 是 2D 图纸的内容,主要是使用矢量绘制呈现,有一些图表是用了 Echarts,HT 也有机制可以让我们使用它们。scene.json 是 3D 场景的内容,大部分模型都是通过 3dMax 建模生成的,该建模工具可以导出 obj 与 mtl 文件,在 HT 中可以通过解析 obj 与 mtl 文件来生成 3d 场景中的所有复杂模型,简单的模型也可以通过 HT 来建模。关键代码如下:
二、数据对接
页面加载出来后,就可以与后台通讯,请求相关数据对接到对应的元素上了。HT 一大强项是作为 Web 组态,所以有很友好的数据绑定方式,我们可以轻松将数据展示到各个节点上。我们这个案例采用随机数模拟的方式模拟展示数据,在 json 中对相应的节点设置唯一标识 tag,在反序列化完成后,通过 g2d.dm().getDataByTag(tag) 来获得相应节点,再根据这个节点的数据绑定来将数据展示到改节点上。
以上表格是一个用 ht 定义的矢量节点,矢量由一个个组件组成,组件不仅可以预定义的矩形,文本等内容,也可以引用其它定义好的矢量,甚至可以自定义绘制逻辑,这个表格就由此而来。矢量不仅可以用在 2D 图纸里,还可以用在 3D 贴图中,在我们 3D 场景中,以下截图的几个面板也是使用矢量实现,
HT 中数据都由 DataModel 驱动,所以 3D 对接数据也是一样的,这里就不再赘述。
三、动画效果实现
这个案例中最明显的动画应该就是铁水罐车的动画了,我们先来聊聊它的实现。基本流程是这样的
如上,我们依然是在反序列化完成后,通过 car = g3d.dm().getDataByTag('car'); 得到铁水罐车的节点对象。
通过 car.s('3d.visible', true | false); 就可以控制它的显隐。
通过不断修改节点的 3D 坐标就可以实现位移效果 car.setPosition3d(x, y, z);
至于铁水罐车上的面板,也是个矢量,将它吸附于铁水罐车节点,它就会跟随车移动,不需要单独控制它的坐标来实现动画。
这部分动画效果,只要不断修改贴图的 uv 值就可以实现,以下是示例代码,node 还是由 getDataByTag 得来
总结
通过 2D 3D 结合的方式的大屏展示,可以非常直观的看到数据呈现,比如在履带出的上料数据,通过它的位置,不需要太多文字描述就知道这里是要展示什么内容。HT 非常轻量,可以结合 2D 3D 呈现数据,矢量在各种屏幕下不失真,还可以适应各种屏幕大小进行展示,用来做大屏可视化再合适不过了。除了在大屏上,电脑上可以展示良好,移动端同样支持,最后放上一张移动端的效果图。
作者:勤劳的搬运工
链接:https://juejin.im/post/5d6c57b1f265da03cd0a97ef
于建模师来说,学软件就是学秘籍,而建模软件就是我们的绝对利器,你是否已经有了自己建模江湖中最称手的武器?本文将为大家叨叨一下,不同行业人士想做3D建模,用哪些软件效果更优。其中包含老手新人都知道的AutoCAD、3Dmax、Maya等,也包括MIMICS、Tinkercad、3Done等专用及平台型三维软件。
博雅仔并非熟知所有软件,错漏处,恳请在公众号留言指正;文末投票你最想学的一门软件,博雅仔将根据投票和微信群互动,选出一门软件,从下周开始,在新的专栏,与大家一同从入门学起。
让3D技能成为开启未来的武林秘籍!
01、可在网页上建模的软件:Tinkercad
Tinkercad软件最大的特点就是可以在 Windows、Mac 或 Linux 上支持 HTML5/WebGL 的任何 Web 浏览器中运行。(据说Chrome和Firefox性能最佳。)也就是说,只要连接 Internet 就可以轻松访问和使用建模能力。
这对于工作电脑性能一般以及难以支付昂贵金钱以提升电脑性能的建模工作者来说是一个救命式的帮手,同时对于不太会建模或者需求频次很低的用户来说,也是一种低成本体验3D建模快乐的方式。
Tinkercad还借助网络优势,使用Gen6集成技术为使用者提供了本地建模软件不具备的建模处理速度(不了解Gen6也不要紧,总之它能让你享受更快更流畅的使用体验)。
软件功能主要分三种:
(1)放置:形状是 Tinkercad 的基本构建块。形状可以添加或删除材料。可以导入您自己的形状,也可以使用现有形状。
(2)调整:在空间中自由地移动、旋转和调整形状。使用标尺等工具可以输入精确的尺寸。
(3)合并:将一组形状组合到一起,以根据需要创建尽可能详细的模型。
博雅仔小结:从上述功能可以看出,Tinkercad定位于一种3D设计辅助软件,它拥有丰富的设计辅助功能,能够帮助用户快速制作、设计三维模型,大大提高制作的效率,在图像制作里面算是佼佼者之一。其功能全面,操作页面简单,颇受好评。但如果你想从线图、线稿开始生成3D立体模型,这个软件并不完全支持。它更倾向于对于已有的一个或多个模型进行修改与组合。
02、医学影像控制系统:MIMICS
MIMICS软件全名很长,大家只需要知道它是Materialise公司发明的一种交互式的医学影像控制系统就可以了。
它有着模块化结构,可以根据使用者的不同需求有不同的搭配,有基础模块、可选模块和附加模块。
基础模块支持图像导入、分割、配准、测量、可视化,能够裁剪三维模型。在可选模块中,MIMICS可以通过点云数据 建立3D模型,并且拥有将模型网格进行重新划分、材质分配的功能(具体位于软件的FEA模块,可半自动或手动划分)。
经过MIMICS处理的模型,还可以输出到有限元分析软件进行针对部位或病变的分析。软件中还可以做手术模拟和牵引等诸多医学方面的交互。
有一些医疗工业者使用它做CT三维建模,利用医疗设备采集影像,导入软件去生成点云并进行其他操作。如图是股骨建模模型(图片源自网络)。
博雅仔小结:作为一款垂直医疗领域的3D软件,MIMICS的模型交互与变化功能不输其他专业3D软件,同时集成了行业常用的场景,真正提高医学工作流畅度。更重要的是,它内置点云建模模块,可搭配量测功能,实际上也是目前领先的逆向工程技术在医疗领域跨界赋能,单纯直接建模这一点就为医疗、研究、诊治争取了大量时间。
如果有需要,还可以将模型进行3D打印,制作出实物。一般来讲,3D打印机都会提供适配的软件进行切片和设置打印详情,这部分操作并不复杂。
03、手机建模软件:易模App
与MIMICS建模方式一样,易模APP内置算法也是以点云建模为基础。用户使用手机拍摄想要建模的物体或场景并上传,可以很快得到全彩色的3D模型。
这种彩色模型是与被拍摄物体纹理映射而来,高保真的,不需要纹理贴图,也不需要自己制作点、线、面,不仅可以直接生成高清模型,还可以用多种格式导出,兼容其他PC软件进行重新构网及展开等操作。
易模App为人脸、人像、小器物、物体、场景五种3D领域最高频使用的模型开发了专门的建模算法模式,使用合适的模式进行将会得到更加精致的模型。其中器物模式还搭配了一件智能硬件RGB3DScanner以提升建模效率与效果。
博雅仔小结:易模App是博雅弘拓公司推出的桌面级三维扫描仪,可为3D初学者提供精致模型,还可以提升建模大师们的建模效率。
04、3D建模体验平台:3Done
很多人说,3Done是青少年建模的启蒙老师,其实很多成熟的从业者也在巧妙使用3Done的一些功能提升自己的工作流。
3Done是一款国产建模软件,具备简单易用的程序环境,并且还支持专业级的涂鸦式平面草图绘制,可进行丰富的3D实体设计,提供多种多样的显示控制,作为平台型的软件,它能通过内嵌于软件的社区网站,下载3D打印模型。
它的程序环境简单易用,操作命令相对简单,孩子能快速上手。不过3Done不适合进行机械等一些领域的设计,局限性很大,因此它应用的最多的还是教育启蒙。
博雅仔小结:3Done简单易上手,并且在操作简单的同时,功能还很强大,作为青少年学习的工具,和建模新人上手的软件来说,是非常不错的。缺点就是局限性有点大,能够胜任的建模需求需要操作者自己探索。
05、数字艺术创造者的左膀右臂:ZBrush
很多三维动画从业者愿意说“ZBrush的建模方式将会是将来CG软件的发展方向。”,原因是其最强的特点:超厉害的雕刻建模功能。
在建模方面,ZBrush 可以说是一个非常高效的建模器。ZBrush模仿了传统的雕刻技术,并且利用数字方式在电脑上展现出来。
通俗地说,就是让你在电脑上,也可以像手工制作一样进行雕塑,以此将三维动画中间最复杂最耗费精力的角色建模和贴图工作,变成了小朋友玩泥巴那样简单有趣——使用ZB球,后台自动完成拓扑结构、网格分布一类的繁琐问题,细腻的笔刷可以轻易塑造出皱纹、发丝、青春痘、雀斑之类的皮肤细节,包括微小细节的凹凸模型和材质。笔刷库与遮罩让使用者“雕刻”时更加得心应手,随心所欲。
实际上,它不仅有雕刻建模,其他软件能导出的法线贴图和展UV,它也可以做;同时还可以给基于像素的作品增加深度,材质,光照和复杂精密的渲染特效;可以完成静帧和制作特效(例如《指环王3》的部分特效是ZB做的,同类应用还有很多)。
从ZB导出的法线贴图和低模可以被所有的大型三维软件 Maya、Max、Softimage|Xsi、Lightwave 等识别和应用。使用者搭配其他软件,如 Max、Maya、XSI 更能做到做出令人瞠目的细节效果。
博雅仔小结:ZBrush 在模型的创造上给予使用者最大的操作自由度和实际有用的工具,因此也被3D艺术工作者视为宝藏软件。在这个意义上,它可以说有极高的审美门槛,也可以说艺术创造本是没有门槛的。
对于想学习ZB的人来说,一大好处是它有很多操作结合实际运用的书籍教材。很多人学起ZB后都会兴趣爆棚一发而不可收拾,为了你的奇思妙想,你也可以试试。
06、草图大师-SketchUp
我们常说的草图大师/SU,全名是Google SketchUp,现在可以下载到免费版和Pro版本。需要付费的Pro版本,除了可以输出更高分辨率的光栅图像、打开更多格式、自带视频输出,对使用者最大的限制是Pro版可用于商业用途,而免费版只可以用于个人用途。
从制作模型的方式、软件功能和组件库看来,这是一个较为垂直的应用软件,与园林、建筑、室内设计领域最为合拍,也可以在机械工程的一些环节起到作用,当然,电影的虚拟场景也是可以通过SU来制作的,和生成装修效果图一样方便快捷。
软件设计的初衷是想让使用者在SketchUp中建立三维模型如同使用铅笔在图纸上作图一样,但是更快更便捷。
SketchUp可以自动识别线条,加以自动捕捉,即画线成面后挤压成型,生成模型;具有草稿,线稿 ,透视,渲染等不同显示模式;准确定位阴影和 日照,设计师可以根据建筑物所在地区和时间实时进行阴影和日照分析;自带大量门、窗、柱、家具等组件库和建筑肌理边线需要的材质库;快速生成任何位置的剖面,使设计者清楚的了解建筑的内部结构,可以随意生成二维剖面图并快速导入AutoCAD进行处理;简便的进行空间尺寸和文字的标注;轻松制作方案演示视频动画。
作为谷歌系软件,SU有着其他软件不具备的优势:可以你使用者的制作成果发布到Google Earth上和其他人共享,或者是提交到Google's 3D Warehouse。当然你也能从Google's 3D Warehouse那儿得到想要的素材,以此作为创作的基础。
博雅仔小结:SketchUp与通常我们过多地让设计过程去配合软件完全不同,它可以说是专门为配合设计过程而研发的。在设计过程中,我们通常习惯从不十分精确的尺度、比例开始整体的思考,随着思路的进展不断添加细节,SU满足这样的工作思维习惯。当然,如果需要,完全可以使用SU进行快速进行精确的绘制。
07、工业建模方面另一实用软件:FormZ
FormZ可为是垂直领域中更加细分的一些行业服务,其与SU一样,可以从面建模,同时不仅有展开等常见的模型编辑功能,还可以做切片,随后连接3D打印机。
因此在制作特殊零件、部件、灯具模型等范工业领域应用广泛。因其应用领域与SU重合度比较大,此处不详述。
08、三维动画制作软件Blender
Blender源于一家位于荷兰的动画工作室NeoGeo,因此它的基本立足点是三维短片动画制作。其在开发后不断结合场景进行迭代,现在已经是专业人士和艺术家们都在使用的3D创作软件。
Blender提供从由“面、边、定点(包括曲线和曲面)”组成的网格进行3D建模、动画、材质、毛发、骨骼、灯光与力场、渲染、摄影,到音频处理、视频剪辑等一系列动画短片制作解决方案。Blender 拥有方便在不同工作下使用的多种用户界面,内置绿屏抠像、摄像机反向跟踪、遮罩处理、后期结点合成等高级影视解决方案。同时还内置有卡通描边(FreeStyle)和基于 GPU 技术 Cycles 渲染器。以 Python 为内建脚本,支持多种第三方渲染器。
要提及的是Blender的“雕刻”与“纹理绘制”这两个模式下的笔刷都是基于"屏幕投影"进行操作的,而非笔刷所在网格的"面法线方向"。因此,由于 Blender 并不存在法线笔刷(笔刷选择也是屏幕投影),所以在操作方式和手感上,会和一般基于法线笔刷的雕刻类软件,或纹理绘制类的软件有所区别。
想要学习和使用Blender的伙伴需要先“调教”一番鼠标的基础设置和数据存储位置等,其部分鼠标操作有些与大众软件相反,初次使用可能不习惯。而数据存储和缓存位置,从安装和保持所有的大型综合软件的使用稳定角度,都需要考虑在内。
安装准备:作为一款开源的跨平台全能三维动画制作软件,有windows 和mac版本。 用于两种硬件架构的不同版本,一种是针对英特尔和 AMD 处理器的 x86 架构,另外一种是PowerPC架构。下载前需要了解自身电脑配置。
博雅仔小结:在Blender上,你可以完整的完成动画电影、视觉效果、广告短片、艺术设计、3D打印模型、交互式3D应用程序和视频游戏等大量专业工作,也有大量的快捷键供使用者提升效率。
能力强大的软件,需要的硬件支持与学习门槛也会相应变高,但一旦融会贯通,自身能力也会得到极大充实。文末附Blender全套快捷键,有兴趣的伙伴去查看吧。
09、三维动画渲染制作软件:3D Max
3D Max的全称是Autodesk 3D Studio Max,常被我们为3D Max/3DsMax,是基于PC系统的三维动画渲染和制作软件。从目前看来,它的一大优点是相对较低的系统配置要求和强大的角色(Character)动画制作能力,可堆叠建模步骤,使制作模型有非常大的弹性。
3D Max软件在动画及设计领域十分成熟,除了内置的材质编辑器、渲染器、建模与纹理改进、前后关联及摄像抠像等功能,还有多种多样的工具包可以让用户按需安装。它高效地兼容 Google SketchUp的部分版本,因此在室内设计、车辆、多媒体等相关领域也可使用。
博雅仔小结:3D Max最开始是运用在电脑游戏中的动画制作,后更进一步开始参与影视片的特效制作。说一点大家最关心的,3D Max注重使用而非从零开始的创意事业,因此没有专业的绘画基础也可以学习和使用。
10、三维动画软件:Autodesk Maya
很多半只脚在3D圈的小伙伴可能还不知道,视觉设计“神级”软件Maya,也是Autodesk公司的产品。也就是说,它与3Ds Max有着很好的兼容性,对于这两个软件来说,3Ds Max是在角色设计上拉满,Maya则是在动画和效果方面做到极致,还配有 Autodesk MotionBuilder 扩展包,重点是专业级角色动画制作和剪辑,为化解复杂的动画挑战提供"创造性的"解决方案。二者配合可以制作出体验感极强的动画视觉作品。
由于Maya软件功能更为强大,体系更为完善,因此国内很多的三维动画制作人员都开始转向Maya,而且很多公司也都开始利用Maya作为其主要的创作工具。很多的大城市,经济发达地区,Maya软件已成为三维动画软件的主流。Maya的应用领域极其广泛,比如说《星球大战》系列,《指环王》系列,《蜘蛛侠》系列,《哈里波特》系列,《木乃伊归来 》,《最终幻想》,《精灵鼠小弟》,《马达加斯加》,《sherk》以及最近的大片《金刚》等都是出自Maya之手。至于其它领域的应用更是不胜枚举。
博雅仔小结:使用Maya制作的作品应用层次比较高,因此不太适合短平快的项目,同时也需要系统化的学习。博雅仔一些朋友在学校里接触过Maya,但是都表示所学远远不够,还要继续学习。文末附有Maya软件的常用快捷键,希望能帮到大家。
11、新手小白的福音:C4D
3Ds Max比较专业,Maya学习成本高,那有没有新手友好型3D软件了呢?有的,C4D就是新手小白的福音。
我们常说的C4D软件,国内大名是4D电影,外文名是Cinema 4D,它拥有动画方向和建筑设计方向两个版本,有着极高的运算速度和强大的渲染插件,电影《毁灭战士》《阿凡达》等都使用过该软件。而与Maya不同的是,C4D更加简单易学,上手很快,文末附送的常用快捷方式也比Maya少很多,还好记。
如果你本身有着对3D动画的热爱,却是一个建模小白,那么你一定得试试C4D,它会不仅不会将你劝退,有助于培养你对建模的兴趣,增加你对建模的信心,然后逐步热爱上建模。
12、可视化绘图软件:CAD
CAD定位于可视化的绘图软件,工程、工业、发动机等从业者十分熟悉这个软件,软件内置通过三视图生成三维模型功能,但是前提是使用者将三视图正确绘制。实际上CAD的最大价值也在于快速高效的二维绘图,其界面和素材库功能、快捷键设置与市面上其他软件风格不太一样,有兴趣的伙伴可以拉至文末,查询它的常用快捷键。
博雅仔小结:相应领域如果想要直接做三维绘图,则选用Pro/E和Solidworks。
博雅仔一直持有一个观点~学习新软件,能够让人的思维跨界,兼容新的思维方式,甚至眼中的世界也更广阔了一层。对于软件的选择,可以是需求驱动,也可以是兴趣驱动,不论哪一种,点亮新的技能总是让人开心的。
文章来源:来自公众号“博雅3D”。
TML5 的 canvas 元素使用 JavaScript 在网页上绘制图像。
画布是一个矩形区域,您可以控制其每一像素。
canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。
下面是一个用 HTML5 的 canvas 绘制的 3D 玫瑰花。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>3D玫瑰花</title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
</head>
<body>
<div id="demo" style="width:520; height:500px;"><canvas id="c" height="500" width="500"></canvas></div>
<script>
var b = document.body;
var c = document.getElementsByTagName('canvas')[0];
var a = c.getContext('2d');
var canvas = document.getElementsByTagName('canvas')[0];
var ctx = canvas.getContext('2d');
document.body.clientWidth;
with(m=Math)C=cos,S=sin,P=pow,R=random;
c.width=c.height=f=500;h=-250;
function p(a,b,c){
if(c>60)
return[S(a*7)*(13+5/(.2+P(b*4,4)))-S(b)*50,b*f+50,625+C(a*7)*(13+5/(.2+P(b*4,4)))+b*400,a*1-b/2,a];
A=a*2-1;
B=b*2-1;
if(A*A+B*B<1){
if(c>37){
n=(j=c&1)?6:4;o=.5/(a+.01)+C(b*125)*3-a*300;
w=b*h;
return[o*C(n)+w*S(n)+j*610-390,o*S(n)-w*C(n)+550-j*350,1180+C(B+A)*99-j*300,.4-a*.1+P(1-B*B,-h*6)*.15-a*b*.4+C(a+b)/5+P(C((o*(a+1)+(B>0?w:-w))/25),30)*.1*(1-B*B),o/1e3+.7-o*w*3e-6]
}
if(c>32){
c=c*1.16-.15;o=a*45-20;w=b*b*h;z=o*S(c)+w*C(c)+620;
return[o*C(c)-w*S(c),28+C(B*.5)*99-b*b*b*60-z/2-h,z,(b*b*.3+P((1-(A*A)),7)*.15+.3)*b,b*.7]
}
o=A*(2-b)*(80-c*2);
w=99-C(A)*120-C(b)*(-h-c*4.9)+C(P(1-b,7))*50+c*2;z=o*S(c)+w*C(c)+700;
return[o*C(c)-w*S(c),B*99-C(P(b, 7))*50-c/3-z/1.35+450,z,(1-b/1.2)*.9+a*.1, P((1-b),20)/4+.05]
}
}
var draw = setInterval('for(i=0;i<1e4;i++)if(s=p(R(),R(),i%46/.74)){z=s[2];x=~~(s[0]*f/z-h);y=~~(s[1]*f/z-h);if(!m[q=y*f+x]|m[q]>z)m[q]=z,a.fillStyle="rgb("+~(s[3]*h)+","+~(s[4]*h)+","+~(s[3]*s[3]*-80)+")",a.fillRect(x,y,1,1)}',0);
var demo = document.getElementById('demo');
function redraw(){
/*
var d_c = document.createElement("canvas");
d_c.setAttribute("id","c");
d_c.setAttribute("width","520");
d_c.setAttribute("height","500");
demo.appendChild(d_c);
*/
draw = setInterval('for(i=0;i<1e4;i++)if(s=p(R(),R(),i%46/.74)){z=s[2];x=~~(s[0]*f/z-h);y=~~(s[1]*f/z-h);if(!m[q=y*f+x]|m[q]>z)m[q]=z,a.fillStyle="rgb("+~(s[3]*h)+","+~(s[4]*h)+","+~(s[3]*s[3]*-80)+")",a.fillRect(x,y,1,1)}',0);
//alert(d_c);
}
function clear_canvas()
{
ctx.clearRect(0,0,520,500);
//canvas.parentNode.removeChild(canvas); //删除
}
function stop_draw(obj){
clearInterval(obj);
}
</script>
</body>
</html>
*请认真填写需求信息,我们会在24小时内与您取得联系。