前言
在大數據盛行的現在,大屏數據可視化也已經成為了一個熱門的話題。大屏可視化可以運用在眾多領域中,比如工業互聯網、醫療、交通、工業控制等等。將各項重要指標數據以圖表、各種圖形等形式表現在一個頁面上,各種數據一目了然。隨著瀏覽器不斷發展完善,使用 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小時內與您取得聯系。