【Chrono Engine學習總結】6-創建自定義場景-6.2-chrono中的光線設置

由于Chrono的官方教程在一些細節方面解釋的并不清楚,自己做了一些嘗試,做學習總結。

上一篇文章中,自己【用sketchup重建了三維場景】,但導入chrono中顏色很不正確,幾乎都是白色的,但也不是完全白色。經過了一系列的測試,找到了問題。

在這里插入圖片描述

說明:由于本人不專門搞三維重建,因此可能有表述用詞不嚴謹,本文僅供說明含義,沒有去究用詞。

1、obj格式文件的存儲

從Sketchup導出帶紋理信息的obj文件后,會生成三個文件:xxx.obj, xxx.mtl,和xxx文件夾在這里插入圖片描述

其中,xxx.obj是三維模型,不帶有任何貼圖,沒有顏色的。mtl文件為material的縮寫,表示模型的材質,xxx文件夾是具體的貼圖圖片。

進一步解釋,就是在(chrono/meshlab/cloudcompare)打開一個obj文件時,如果找到了obj文件對應的mtl文件,就會根據mtl文件中定義的每個mesh面的參數,加載貼圖。

一個典型的mtl文件的內容如下:

## Alias OBJ Material File
# Exported from SketchUp, (c) 2000-2012 Trimble Navigation Limitednewmtl TGA2021_6_302
Ka 0.200000 0.000000 0.000000
Kd 0.349020 0.337255 0.313725
Ks 0.330000 0.330000 0.330000
map_Kd outdoor_simple/TGA2021_6_302.jpg# 下一個面的參數

其中Ka, Kd, Ks為三個參數,下面會講;最后的map_Kd就是貼圖,對應的貼圖在xxx文件夾當中。貼在TGA2021_6_302這個面上。

如果說找不到mtl文件,或者丟失了紋理文件夾,打開obj就是一個沒顏色的,如下圖。同時,meshlab或者cloudcompare都會警告你沒有找到對應的紋理:

在這里插入圖片描述

2、mtl文件參數說明

直接貼chatgpt給出的說明:

Ka (Ambient Reflectivity, 環境反射率):
解釋:Ka 用于定義材質的環境光反射率,也就是材質在環境光(ambient light)下的顏色。
格式:Ka R G B,其中 R、G、B 是紅、綠、藍三種顏色的反射率值,范圍通常為 0.0 到 1.0。
作用:環境光是模擬從所有方向均勻照射到物體上的光,它的反射率決定了物體在環境光下的基本顏色。
示例:Ka 0.200000 0.200000 0.200000 表示材質在環境光下反射 20% 的紅、綠、藍光。

Kd (Diffuse Reflectivity, 漫反射率):
解釋:Kd 用于定義材質的漫反射光反射率,也就是材質在漫射光(diffuse light)下的顏色。
格式:Kd R G B,同樣 R、G、B 的范圍為 0.0 到 1.0。
作用:漫射光是從特定方向照射到物體上,并在表面均勻反射的光。它主要影響材質的顏色和亮度。
示例:Kd 1.000000 1.000000 1.000000 表示材質在漫射光下反射 100% 的紅、綠、藍光,即材質呈現白色。

Ks (Specular Reflectivity, 鏡面反射率):
解釋:Ks 用于定義材質的鏡面反射光反射率,也就是材質在鏡面光(specular light)下的顏色。
格式:Ks R G B,同樣 R、G、B 的范圍為 0.0 到 1.0。
作用:鏡面光是模擬光線在表面反射產生的高光(specular highlights),它的反射率決定了材質的光澤度和反射光的顏色。
示例:Ks 0.330000 0.330000 0.330000 表示材質在鏡面光下反射 33% 的紅、綠、藍光。

也就是說,Ka是對“環境光/ambient light”的“顯示”,Kd和Ks是對主動光的“顯示”。

  • 環境光:模擬從所有方向均勻照射到物體上的光,它的反射率決定了物體在環境光下的基本顏色。
  • 特定光/主動光:不同于環境光的光線,物體受到主動光后,會“漫反射”和“鏡面反射”

3、問題分析

從sketchup導出的文件可以看出,所有物體的Ka都是0,僅存在Kd和Ks。所以,這個帖圖受環境光影響,只受主動光照的影響。

在這里插入圖片描述
那么,既然場景中都是白色,是不是因為太亮了?
代碼中的實現如下:

vis->AddLight(ChVector<>(-50, -50, 200), 300, ChColor(0.7f, 0.7f, 0.7f))
vis->AddLight(ChVector<>(+50, +50, 200), 300, ChColor(0.7f, 0.7f, 0.7f));
vis->AddLight(ChVector<>(-50, +50, 200), 300, ChColor(0.7f, 0.7f, 0.7f));
vis->AddLight(ChVector<>(+50, -50, 200), 300, ChColor(0.7f, 0.7f, 0.7f));

可以看出,之前照抄的這段代碼,打了4束主動光,強度都是0.7。那么再綜合Kd這個漫反射參數,可以發現,4個0.7作用下,乘以漫反射系數,仍然超過了1,因此顯示出了白色。所以,如果把0.7改小,是不是會有所好轉?

改成0.2f后,確實山的顏色正常了,但問題是陰影區域顏色太暗了,看不清。
在這里插入圖片描述
那么再回到Ka參數,既然都是0,那么修改Ka是不是能解決?于是將Ka的0全部修改為1試了下,沒有任何效果。

什么原因呢?那就是環境中并沒有“環境光”,chrono中AddLight添加的是主動光,而不是環境光。于是搜了半天,果然chrono中可以添加環境光,代碼如下(添加“滿”環境光,即255):

vis->GetSceneManager()->setAmbientLight(irr::video::SColor(0, 255, 255, 255));

注意:這個函數在chrono不同版本中的定義不同,請自行查找自己版本的代碼對應的定義。四個參數可能是alpha, r, g, b,也可能是r,g,b,alpha;可能是u32類型,也可能是float類型。

這樣,就可以看到物體“本身”的顏色了。只不過這樣主動光再一疊加,主動光直射部分還是容易泛白,因此我們可以把主動光全部關掉,只留環境光。

在這里插入圖片描述在這里插入圖片描述

但是此時又發現了一個問題,那就是“純色”區域顯示的是灰色的,例如右側的山峰。這是因為純色區域在mtl文件中并沒有“貼圖”,只是通過Kd和Ks參數控制了顏色,因此主動光是0時環境光的Ka參數都是1,所以就會是灰色的。比如,下面這個xtl中stone1是貼圖,而Vegetatin_Blur7是純色(沒有貼圖文件):
在這里插入圖片描述

因此,再把純色區域的Ka不要設置成全1,而是用Kd參數即可。下圖中“山”的顏色正常了。但改起來比較麻煩,可以寫個腳本自動實現。

在這里插入圖片描述

4、總結

啰嗦半天,更多的展示了試湊過程。總結如下:

  • obj文件的顏色來自mtl文件定義,有兩種顏色:貼圖或者是純色
  • obj中的每個面有三個參數決定顏色,Ka,Kd和Ks;Ka是“環境光”的“響應”,Kd是“主動光”的散射,Ks是“主動光”的反射,大概是一個:“顏色=(環境光 x Ka) + (主動光 x Kd) + (主動光 x 觀看角度 x Ks)” 這么一個關系(不是嚴格表達式,僅供理解)
  • chrono的光照有兩種,主動光由代碼AddLight添加,或者環境光由setAmbientLight添加;
  • chrono中最終顯示的mesh顏色,由主動光和Kd/Ks參數作用,加上環境光和Ka作用最終實現。區域白色說明主動光+環境光過高了,黑色區域為主動光少/遮擋/環境光太暗,對應上述公式調整;
  • 調整思路,就是直接改變主動光或環境光,如果物體本身的材質差距比較大,再去編輯mtl文件修改對應參數

遺留問題/Issue

那么,有一個問題:如果修改了Kd/Ks,激光雷達在仿真時,intensity的數值是否會發生改變?換句話說,在chrono中由于光照“看起來”顏色不一樣的物體,會影響lidar的采集數據么?

答:簡單測了下,好像沒有區別。Kd/Ks設置為0,lidar的采集intensity看起來還是一樣的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/15897.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15897.shtml
英文地址,請注明出處:http://en.pswp.cn/web/15897.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IDE上傳本地倉庫到GitHub

IDE上傳本地倉庫到GitHub 1、選擇遠程倉庫平臺2、下載安裝Git3、IDE集成Git4、本地項目上傳GitHub 1、選擇遠程倉庫平臺 1.1、注冊遠程倉庫平臺 常見的遠程倉庫托管平臺有&#xff1a; 1&#xff09;GitHub 域名&#xff1a;https://github.com 介紹&#xff1a;GitHub是全球最…

Java訂餐系統源碼 springboot點菜系統源碼

Java訂餐系統源碼 springboot點菜系統源碼 源碼下載地址&#xff1a;https://download.csdn.net/download/xiaohua1992/89341358 功能介紹&#xff1a; 前臺登錄&#xff1a;前臺登錄&#xff1a; ①首頁&#xff1a;菜品信息推薦、菜品信息展示、查看更多 ②菜品信息&…

Stanford斯坦福 CS 224R: 深度強化學習 (3)

基于模型的強化學習 強化學習(RL)旨在讓智能體通過與環境互動來學習最優策略,從而最大化累積獎勵。傳統的強化學習方法如Q-learning、策略梯度等,通過大量的試錯來學習值函數或策略,樣本效率較低。而基于模型的強化學習(MBRL)則利用對環境的預測模型來加速學習過程,大大提高了…

參數的本質:詳解 JavaScript 函數的參數

文章導讀&#xff1a;AI 輔助學習前端&#xff0c;包含入門、進階、高級部分前端系列內容&#xff0c;當前是 JavaScript 的部分&#xff0c;瑤琴會持續更新&#xff0c;適合零基礎的朋友&#xff0c;已有前端工作經驗的可以不看&#xff0c;也可以當作基礎知識回顧。 上篇文章…

地理信息系統(GIS)軟件開發

地理信息系統&#xff08;GIS&#xff09;軟件開發是一項復雜且系統性很強的工程&#xff0c;涉及空間數據的采集、管理、分析和展示。以下是一個典型的GIS軟件開發流程&#xff0c;包括各個步驟的詳細說明。北京木奇移動技術有限公司&#xff0c;專業的軟件外包開發公司&#…

面向對象------多態

1.多態的定義 通俗來說&#xff0c;當同一種行為或者事情發生在不同的對象上&#xff0c;這些行為或者事情最終得到的結果不同。 注意&#xff1a;多態要發生在繼承的基礎上。 例如&#xff1a;彩色打印機和黑白打印機。 彩色打印機和黑白打印機是不同的對象&#xff0c;但…

詳細分析Element中的MessageBox基本知識(附Demo)

目錄 前言1. 基本知識2. Demo2.1 確認框2.2 警告框2.3 對話框 3. this.$confirm 前言 詳細知識推薦閱讀&#xff1a;詳細分析Element Plus中的ElMessageBox彈窗用法&#xff08;附Demo及模版&#xff09; MessageBox則常用于Vue2 1. 基本知識 MessageBox 是 Element UI 提供…

Liunx學習隨筆

Linux學習隨筆 一.前期準備1.安裝Vmware Workstation軟件2.下載linux鏡像3.安裝操作系統 夕陽無限好&#xff0c;只是近黃昏&#xff0c;時隔一年&#xff0c;重新提筆 沒有比腳更遠的路&#xff0c;沒有比人更高的山 一.前期準備 1.安裝Vmware Workstation軟件 下載地址&am…

加載頁面 跳轉 新頁面 vue

通常&#xff0c;我們點頁面上的詳情&#xff0c;或者編輯&#xff0c;需要加載一個新的頁面出來。 vue中加載頁面的方法&#xff1a; 在父頁面中&#xff08;通常是某個模塊目錄下的index.vue&#xff09;&#xff0c;先寫這行代碼&#xff1a; import AddEditForm from ./…

南京觀海微電子----升壓和降壓模塊電路解析

(一)升壓模塊 1. 如果是交流電壓升壓&#xff0c;那非常簡單&#xff0c;只要選擇變比合適的變壓器就行(1:3和1:4.17); 2. 如果是直流電壓升壓&#xff0c;從12v升到36v也很容易&#xff0c;可選擇用的開關穩壓器很多&#xff0c;例如 :Cs5171.Cs5172.Cs5173.Cs5174.Mc33063.…

SQLAlchemy備忘

orm備忘 upsert&#xff0c;存在及更新&#xff0c;不存在則插入 from sqlalchemy.dialects.mysql import insertinsert_stmt insert(FileModule).values(file_pathpar_dict.file, module_keypar_dict.module_key,module_namepar_dict.module_name, project_idpar_dict.proj…

【調和級數】100321. 優質數對的總數 II

本文涉及知識點 調和級數 質數、最大公約數、菲蜀定理 LeetCode100321. 優質數對的總數 II 給你兩個整數數組 nums1 和 nums2&#xff0c;長度分別為 n 和 m。同時給你一個正整數 k。 如果 nums1[i] 可以被 nums2[j] * k 整除&#xff0c;則稱數對 (i, j) 為 優質數對&#…

[Android]在后臺線程執行耗時操作,然后在主線程更新UI

1.Coroutines&#xff08;官方推薦&#xff09; Coroutines 提供了一種輕量級的線程管理方式&#xff0c;使得在后臺線程執行任務和在主線程更新 UI 變得簡單。以下是如何在 Kotlin 中使用 Coroutines 來處理耗時邏輯并更新 UI 的步驟&#xff1a; 添加 Coroutines 依賴: 首…

數據結構·一篇搞定隊列!

hello&#xff0c;大家好啊&#xff0c;肖恩又拖更了&#xff0c;你們聽我狡辯&#xff0c;前段時間有期中考試&#xff0c;so我就沒什么時間寫這個&#xff0c;在這給大家道個歉&#x1f62d;&#x1f62d;&#x1f62d; 我后面一定盡力不拖更 那么接下來&#xff0c;我們來看…

Greenplum使用hbase外部表

概述 GP可以通過pxf協議上的hbase外表功能&#xff0c; 在數據庫中創建外部表&#xff0c;映射hbase table&#xff0c;以直接在gp中訪問 hbase數據&#xff0c;方便將hbase的查詢結果集保留在gp中 hbase端準備 HBase基礎概念&#xff1a; ?HBase 列包含兩個組件&#xff1…

粒子輻照環境中相機鏡頭防護及LabVIEW圖像處理注意事項

在粒子輻照環境測試電路板性能的實驗中&#xff0c;需要對相機鏡頭進行有效防護&#xff0c;同時利用LabVIEW進行圖像識別和處理。本文將討論相機鏡頭防護的關鍵因素和LabVIEW處理過程中的注意事項&#xff0c;包括防輻射材料選擇、輻射屏蔽措施、散熱管理、空間布局及LabVIEW軟…

c++11:左值引用和右值引用《全家桶》

總結一下C11中涉及到左值引用和右值引用的場景。 1 左值引用和右值引用的區別 左值引用 定義&#xff1a;對左值的引用。目的是避免內存拷貝&#xff0c;類似c中的指針,兩個場景&#xff1a;函數傳參、函數返回值。 右值引用 定義&#xff1a;對右值的引用。兩個場景&#…

【機器學習-k近鄰算法-01】 | Scikit-Learn工具包進階指南:機器學習sklearn.neighbors模塊之k近鄰算法實戰

&#x1f3a9; 歡迎來到技術探索的奇幻世界&#x1f468;?&#x1f4bb; &#x1f4dc; 個人主頁&#xff1a;一倫明悅-CSDN博客 ?&#x1f3fb; 作者簡介&#xff1a; C軟件開發、Python機器學習愛好者 &#x1f5e3;? 互動與支持&#xff1a;&#x1f4ac;評論 &…

騎行 - 新區永旺出發的環太湖路線

環過好幾次太湖&#xff0c;但對路線都沒太在意&#xff0c;都是跟著別人走的。這次自己制定一個路書&#xff0c;方便下次自己一個人環太湖時使用。 開始是使用高德地圖做路書&#xff0c;只能在PC上做。我用的是網頁版&#xff0c;每次選點太麻煩了。要輸入地址搜索&#xff…

開源博客項目Blog .NET Core源碼學習(27:App.Hosting項目結構分析-15)

本文學習并分析App.Hosting項目中后臺管理頁面的角色管理頁面。 ??角色管理頁面用于顯示、檢索、新建、編輯、刪除角色數據同時支持按角色分配菜單權限&#xff0c;以便按角色控制后臺管理頁面的菜單訪問權限。角色管理頁面附帶一新建及編輯頁面&#xff0c;以支撐新建和編輯…