0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

HT for Web (Hightopo) 3D場(chǎng)景環(huán)境配置(天空球,霧化,輝光,景深)

圖撲-數(shù)字孿生 ? 來(lái)源:圖撲-數(shù)字孿生 ? 作者:圖撲-數(shù)字孿生 ? 2023-12-07 11:07 ? 次閱讀

具體涉及到的知識(shí)點(diǎn)如下:

天空球

霧化

輝光

景深

這是最終效果:

天空球:

天空球(SkyBox)簡(jiǎn)單來(lái)說(shuō),就是用來(lái)在3D場(chǎng)景中模擬藍(lán)天白云的效果。它是一個(gè)球形網(wǎng)格,完全包圍3D場(chǎng)景,并填充了一張環(huán)形紋理作為天空背景。紋理通常是一個(gè)天空的全景圖(例如星空、日落、云層等),通過(guò)在球形網(wǎng)格的表面上將紋理映射,呈現(xiàn)出一個(gè)連續(xù)的、無(wú)縫的天空效果。

在 HT for Web中,天空球可以通過(guò)g3d.setSkybox(node)來(lái)實(shí)現(xiàn)。需要注意的是,這里的node是ht.Node類(lèi)型的節(jié)點(diǎn),該節(jié)點(diǎn)當(dāng)作天空球來(lái)用時(shí),不會(huì)出現(xiàn)在dataModel列表當(dāng)中。

/**
* 設(shè)置天空球
*
* @memberof Index3d
*/
addSkybox() {
const node = this.skybox = new ht.Node();
node.s({
"shape3d": "sphere",
"shape3d.image": "./assets/skybox.jpg",
});
this.g3d.setSkybox(node);
}

下面兩張圖片分別是設(shè)置天空球與未設(shè)置天空球的效果:

wKgZomVxNvuAPG4wABKf0cOZyF0177.pngwKgaomVxNvyAYD14ABSbykVIEUQ279.png

當(dāng)然,我們也可以將藍(lán)天白云換成夜間圖片:

this.skybox.setStyle("shape3d.image", "./assets/skybox_dark.jpg");
wKgZomVxNv2AIf0vABmQvfHz_hI740.png

霧化:

霧化是一種常用的 3D 場(chǎng)景效果,可以讓場(chǎng)景中的物體在遠(yuǎn)離攝像機(jī)的距離時(shí)變得模糊,像有一層白霧遮擋,從而增加深度感和真實(shí)感。在 HT 中,霧化效果可以通過(guò)設(shè)置場(chǎng)景的霧化屬性來(lái)實(shí)現(xiàn),代碼如下:

/**
* 霧化
*
* @memberof Index3d
*/
addFog() {
this.g3d.setFogDisabled(false);
this.g3d.setFogMode('linear'); // 線性模式
this.g3d.setFogFar(30000);
// this.g3d.setFogMode('exp2'); // 標(biāo)準(zhǔn)模式
// this.g3d.setFogDensity(0.00007); // 濃度
this.g3d.setFogColor('green'); // 設(shè)置霧的顏色
}

霧化分為兩種模式:線性模式和標(biāo)準(zhǔn)模式。

[線性模式]

線性模式下支持設(shè)置近端距離和遠(yuǎn)端距離,

近端距離:默認(rèn)為1,代表從該距離起物體開(kāi)始受霧效果影響,可通過(guò)setFogNear設(shè)置霧化近端距離、getFogNear獲取霧化近端距離。

遠(yuǎn)端距離:默認(rèn)為2000,代表從該距離之后物體完全看不清, 可通過(guò)setFogFar設(shè)置霧化遠(yuǎn)端距離、getFogFar獲取霧化遠(yuǎn)端距離。

wKgaomVxNv6AfY3VABWkjQ72jOY603.png

[標(biāo)準(zhǔn)模式]

標(biāo)準(zhǔn)模式下霧化效果則會(huì)自動(dòng)調(diào)整霧化效果,在該模式下,可通過(guò)setFogDensity設(shè)置霧化強(qiáng)度來(lái)調(diào)整霧化的效果, getFogDensity可以獲取到霧化強(qiáng)度。

wKgZomVxNv-Ac-m8ABTJwEotiM8064.png

另外,我們還可通過(guò)g3d.setFogColor(color)設(shè)置霧化效果的顏色:

wKgZomVxNwCALw8bABU-42xYRuQ213.png

輝光:

輝光是一種用于增強(qiáng)場(chǎng)景中元素外觀和吸引力的視覺(jué)效果,其主要實(shí)現(xiàn)的是讓各個(gè)模型進(jìn)行自發(fā)光。常用于如夜景中燈光、道路流光等元素。

wKgaomVxNwGANbr7AAJppVJqK8I815.png

在HT中,可通過(guò) g3d.enablePostProcessing('Bloom', true/false) 開(kāi)啟/關(guān)閉整個(gè)場(chǎng)景的輝光效果:

/**
* 開(kāi)啟輝光
*
* @memberof Index3d
*/
enableBloom() {
const {g3d} = this;
g3d.enablePostProcessing("Bloom", true); // 開(kāi)啟輝光
const module = this.bloom = g3d.getPostProcessingModule("Bloom");
module.strength = 0.4; // 強(qiáng)度
module.threshold = 0.33; // 閾值
module.radius = 0.08; //范圍
g3d.setPostProcessingValue('Bloom', 'selective', true); // 開(kāi)啟輝光過(guò)濾
g3d.iv(); // 刷新拓?fù)?}
disableBloom() {
this.g3d.enablePostProcessing("Bloom", false); // 關(guān)閉輝光
}
// 為直升機(jī)單獨(dú)使用輝光效果
this.helicopterNode.s('bloom', true);

this.propellerNode.s('bloom', true);

其中,enablePostProcessing('Bloom', true)表示開(kāi)啟 Bloom 效果;strength表示自發(fā)光亮度的強(qiáng)弱;threshold表示決定哪些顏色會(huì)發(fā)光;radius表示發(fā)光的范圍。在代碼的后半段,我們單獨(dú)為直升機(jī)和螺旋槳開(kāi)啟了輝光效果。

wKgZomVxNwKACvh2ABS0j0KPhzg696.png

景深:

景深(Depth of Field)可以用來(lái)突出畫(huà)面中的主體元素。我們用單反相機(jī)或手機(jī)進(jìn)行拍攝時(shí),利用景深原理,通過(guò)聚焦到某一物體,可以使周?chē)h(huán)境變得模糊,從而突出主要元素。就像下圖一樣:

如果要對(duì)于一個(gè)3D場(chǎng)景設(shè)置景深效果,在 HT 中,景深效果是使用特殊的貼圖來(lái)模擬的。景深貼圖一般使用黑色的透明png貼圖實(shí)現(xiàn),黑色部分為受景深影響的范圍,透明部分不受景深影響。通過(guò)使用不同的景深貼圖及參數(shù),可以模擬出與現(xiàn)實(shí)一樣的景深效果。

wKgZomVxNwSACMwZAAtAbPJ9omQ909.png

具體開(kāi)啟和配置景深的代碼如下:

/**
* 開(kāi)啟景深
*
* @memberof Index3d
*/
enableDof() {
const {g3d} = this;
g3d.enablePostProcessing("Dof", true); // 開(kāi)啟景深
const module = this.dof = g3d.getPostProcessingModule("Dof");
module.aperture = 0.01; // 景深閥值
module.image = "./assets/dof_all.png"; // 景深貼圖
g3d.iv(); // 刷新拓?fù)?}
disableDof() {
this.g3d.enablePostProcessing("Dof", false); // 關(guān)閉景深
}

其中,enablePostProcessing('Dof', true)表示開(kāi)啟景深效果;aperture表示孔徑,代表中間空白區(qū)域的大小,取值范圍是 0 ~ 1,0 代表沒(méi)有景深效果,1 代表景深效果最明顯;image表示景深使用的貼圖。

背景音樂(lè)

背景音樂(lè)不屬于3D可視化的范圍。不過(guò)既然有了直升機(jī)和相關(guān)場(chǎng)景,增加一個(gè)直升機(jī)飛行的聲音可以讓場(chǎng)景更加逼真。

/**
* 初始化螺旋槳旋轉(zhuǎn)聲音
*
* @memberof Index3d
*/
initAudio() {
this._audio = new Audio("./assets/helicopter.MP3");
this._audio.loop = true; // 循環(huán)播放
}

要播放音樂(lè)可以使用Audio。這里我們只需要找到一個(gè)螺旋槳的音頻,然后對(duì)Audio進(jìn)行初始化及簡(jiǎn)單配置,就可以在場(chǎng)景加載后循環(huán)播放直升機(jī)的聲音。

需要注意的是,目前瀏覽器對(duì)于音頻自動(dòng)播放有限制,即不允許在用戶沒(méi)有交互的情況下自動(dòng)播放音頻文件。如果我們執(zhí)行了playAudio(),在console里面會(huì)遇到這個(gè)錯(cuò)誤:

Uncaught (in promise) DOMException: play() failed because the user didn't interact with the document first.

要解決這個(gè)問(wèn)題,我們可以在系統(tǒng)中增加一個(gè)監(jiān)聽(tīng)函數(shù),監(jiān)聽(tīng)到某些事件后進(jìn)行音頻播放。常見(jiàn)的事件有如:

觸摸事件:touchstart、touchmove、touchend、touchcancel

鼠標(biāo)事件:mousedown、mouseup、click、dblclick、mousemove、mouseenter、mouseleave、mouseover、mouseout

鍵盤(pán)事件:keydown、keyup、keypress

/**
* 監(jiān)聽(tīng)Document事件并播放音樂(lè)
*
* @memberof Index3d
*/
addEventMonitor() {
document.addEventListener("click", (event) => {
this._audio.play();
});
document.addEventListener("keydown", (event) => {
this._audio.play();
});
}

總結(jié)

作為一款國(guó)產(chǎn)自研圖形渲染引擎,HT for Web對(duì)3D場(chǎng)景的各自效果支持還是非常強(qiáng)大的。在3D場(chǎng)景(Graph3dView)中,可以通過(guò)設(shè)置天空球、霧化、輝光和景深等特效來(lái)增強(qiáng)場(chǎng)景的逼真度和美觀度。其中,天空球可以通過(guò)設(shè)置ht.Node類(lèi)型的節(jié)點(diǎn)來(lái)實(shí)現(xiàn),霧化可以通過(guò)設(shè)置場(chǎng)景的霧化屬性來(lái)實(shí)現(xiàn),輝光可以使用g3d.enablePostProcessing()方法來(lái)實(shí)現(xiàn),景深可以使用特殊的貼圖來(lái)模擬。此外,為了讓場(chǎng)景更加逼真,還可以根據(jù)需要添加背景音樂(lè)。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 3D
    3D
    +關(guān)注

    關(guān)注

    9

    文章

    2836

    瀏覽量

    107003
  • 數(shù)字孿生
    +關(guān)注

    關(guān)注

    4

    文章

    1201

    瀏覽量

    12040
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何使用javascript制作一個(gè)網(wǎng)頁(yè)端3D貪吃蛇游戲(附源碼)

    = null;dm = new ht.DataModel();g3d = new ht.graph3d.Graph3dView(dm); // 初始化一個(gè)3d
    的頭像 發(fā)表于 09-01 12:05 ?3939次閱讀
    如何使用javascript制作一個(gè)網(wǎng)頁(yè)端<b class='flag-5'>3D</b>貪吃蛇游戲(附源碼)

    HT for Web (Hightopo) 使用心得(1)- 基本概念

    本章主要介紹了 HT for Web 中的一些基本概念,包括:基礎(chǔ)數(shù)據(jù) ht.Data、數(shù)據(jù)模型 ht.DataModel 和選擇模型 ht
    的頭像 發(fā)表于 09-11 10:45 ?844次閱讀
    <b class='flag-5'>HT</b> for <b class='flag-5'>Web</b> (<b class='flag-5'>Hightopo</b>) 使用心得(1)- 基本概念

    HT for Web (Hightopo) 使用心得(4)- 3D 場(chǎng)景 Graph3dView 與 Obj 模型

    這里我們通過(guò)代碼建立一個(gè) 3D 場(chǎng)景并添加一個(gè) Obj 模型來(lái)介紹一下 HT for Web3D
    的頭像 發(fā)表于 11-20 11:05 ?592次閱讀
    <b class='flag-5'>HT</b> for <b class='flag-5'>Web</b> (<b class='flag-5'>Hightopo</b>) 使用心得(4)- <b class='flag-5'>3D</b> <b class='flag-5'>場(chǎng)景</b> Graph<b class='flag-5'>3</b>dView 與 Obj 模型

    輝光資料

    看到實(shí)驗(yàn)室的輝光很炫,想了解一下關(guān)于輝光的知識(shí)及制作方法。不知道那位大神有資料給分享一下{:3:}
    發(fā)表于 04-08 13:29

    3D OM顯微鏡應(yīng)用范圍

    (3D Optical microscope)具有高景深、大景深、傾斜角度檢測(cè)優(yōu)勢(shì)和先進(jìn)的量測(cè)功能,iST宜特檢測(cè)可針對(duì)各種不同高度的待測(cè)物體,進(jìn)行多角度的全面對(duì)焦,并獲得清晰的影像進(jìn)行觀察。適合進(jìn)行
    發(fā)表于 01-11 14:57

    HOLTEK新推出HT45FH3T Tinypower 3D眼鏡MCU

    HOLTEK 繼已推出的 HT45F3T 3D 眼鏡 MCU 后,再度推出整合 3D 眼鏡所需的高壓電路的 MCU HT45FH3T。除了原有 HT
    發(fā)表于 02-28 11:36 ?1328次閱讀

    3D打印技術(shù)的核心與氣霧化技術(shù)的介紹

    本文主要介紹了3D打印用金屬粉末制備技術(shù)發(fā)展現(xiàn)狀;氣霧化技術(shù)發(fā)展現(xiàn)狀、超聲氣霧化技術(shù)等等。
    發(fā)表于 10-01 10:44 ?21次下載
    <b class='flag-5'>3D</b>打印技術(shù)的核心與氣<b class='flag-5'>霧化</b>技術(shù)的介紹

    Lucid的3D融合技術(shù)實(shí)現(xiàn)攝像頭設(shè)備仿人類(lèi)視覺(jué)3D景深識(shí)別

    設(shè)備制造商現(xiàn)在可以利用Lucid的核心軟件解決方案,在簡(jiǎn)單的雙攝像頭設(shè)備上實(shí)現(xiàn)仿人類(lèi)視覺(jué)的高精度3D景深識(shí)別。
    的頭像 發(fā)表于 07-27 17:18 ?7344次閱讀

    如何使用一種形式化方法的3D虛擬祭祀場(chǎng)景建模語(yǔ)言與環(huán)境

    針對(duì)現(xiàn)有三維(3D場(chǎng)景建模方法普遍存在著業(yè)務(wù)耦合度高,復(fù)雜場(chǎng)景對(duì)象屬性和特征描述能力不強(qiáng)、不豐富,不能很好地解決3D虛擬祭祀場(chǎng)景建模的問(wèn)題
    發(fā)表于 01-02 14:13 ?9次下載
    如何使用一種形式化方法的<b class='flag-5'>3D</b>虛擬祭祀<b class='flag-5'>場(chǎng)景</b>建模語(yǔ)言與<b class='flag-5'>環(huán)境</b>

    運(yùn)用HT豐富的2/3D組態(tài)搭建出北京大興機(jī)場(chǎng)3D可視化

    機(jī)場(chǎng),甚至交通和旅游業(yè)關(guān)注。大興機(jī)場(chǎng)建設(shè)了全球機(jī)場(chǎng)最引人注目的理論和技術(shù)創(chuàng)新,以數(shù)字化升級(jí)為智慧機(jī)場(chǎng)樣板工程。 HT for Web 自主研發(fā)了強(qiáng)大的基于 HTML5 的 2D/3D
    的頭像 發(fā)表于 11-04 11:46 ?3226次閱讀

    ?3D電子圍欄搭建的小方法,使安防運(yùn)維效率大幅提高

    HT for Web 產(chǎn)品來(lái)構(gòu)造輕量化的 3D 可視化場(chǎng)景,該 3D 場(chǎng)景從正面展示了一個(gè)
    的頭像 發(fā)表于 12-14 11:33 ?1548次閱讀

    VR全景看房3D場(chǎng)景的制作方法

    技術(shù)構(gòu)建的VR房地產(chǎn)展示VR全景看房3D場(chǎng)景可視化制作解決方案,創(chuàng)建3D虛擬現(xiàn)實(shí)世界體驗(yàn)的展示,運(yùn)用先進(jìn)技術(shù)生成的一種模擬環(huán)境多信息化融合、交互式的三維動(dòng)態(tài)
    發(fā)表于 04-23 10:21 ?9834次閱讀

    HT for Web (Hightopo) 使用心得(2)- 2D 圖紙、節(jié)點(diǎn)、連線 與基本動(dòng)畫(huà)

    概括來(lái)說(shuō),用 HT for Web 做可視化主要分為兩部分,也就是 2D3D。這兩部分需要單獨(dú)創(chuàng)建。在它們被創(chuàng)建完成后,我們?cè)侔阉鼈兗傻揭黄稹?
    的頭像 發(fā)表于 09-21 10:52 ?747次閱讀
    <b class='flag-5'>HT</b> for <b class='flag-5'>Web</b> (<b class='flag-5'>Hightopo</b>) 使用心得(2)- 2<b class='flag-5'>D</b> 圖紙、節(jié)點(diǎn)、連線 與基本動(dòng)畫(huà)

    圖撲 HT for Web 風(fēng)格屬性手冊(cè)教程

    圖撲軟件明星產(chǎn)品 HT for Web 是一套純國(guó)產(chǎn)化獨(dú)立自主研發(fā)的 2D3D 圖形界面可視化引擎。HT for
    的頭像 發(fā)表于 10-11 10:50 ?442次閱讀
    圖撲 <b class='flag-5'>HT</b> for <b class='flag-5'>Web</b> 風(fēng)格屬性手冊(cè)教程

    HT for Web (Hightopo) 使用心得(5)- 動(dòng)畫(huà)的實(shí)現(xiàn)

    的相關(guān)概念請(qǐng)參考《Hightopo 使用心得(4)- 3D 場(chǎng)景 Graph3dView 與 Obj 模型》。 這里的主要工作分為:3D
    的頭像 發(fā)表于 11-29 11:04 ?638次閱讀
    <b class='flag-5'>HT</b> for <b class='flag-5'>Web</b> (<b class='flag-5'>Hightopo</b>) 使用心得(5)- 動(dòng)畫(huà)的實(shí)現(xiàn)