【Chrono Engine学习总结】6-创建自定义场景-6.2-chrono中的光线设置

news2024/11/15 21:47:12

由于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 Limited

newmtl 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.coloradmin.cn/o/1701634.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年上半年软考什么时候查成绩?附查询流程

考试一旦结束&#xff0c;并不意味着与考试相关的事情也就结束了。2024年上半年信息系统项目管理师等软考考试结束后&#xff0c;我们还需要关注考后和证书相关的事情&#xff0c;比如成绩查询、证书领取等等。 2024年上半年软考成绩查询 查询时间&#xff1a;预计在2024年7月…

优优嗨聚集团:快速摆脱个人债务束缚的秘诀

在快节奏的现代生活中&#xff0c;个人债务问题时常困扰着许多人。面对日益增长的债务压力&#xff0c;如何快速有效地处理成为众多人的迫切需求。本文将为你提供一套实用的债务清零攻略&#xff0c;帮助你摆脱债务的束缚&#xff0c;重获财务自由。 一、认清债务现状&#xff…

艾体宝洞察 | Redis Enterprise对比ElastiCache

选择缓存数据库时&#xff0c;如何在Amazon ElastiCache和Redis Enterprise之间做出选择&#xff0c;应当考虑哪些标准&#xff1f; ElastiCache 通常可以满足基本的缓存需求&#xff0c;因此是一种适合初始阶段的解决方案。但随着使用量的增加&#xff0c;ElastiCache很快会变…

Octo 精武门? :开源的通用机器人模型

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调重新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则提供了大模型领域最新技…

[RK3588-Android12] 关于ES8388 喇叭+PDM回采 4+2配置

问题描述&#xff1a; ES8388 喇叭PDM回采 42配置如下&#xff1a; 解决方案&#xff1a; // MICpdmics: dummy-codec {status "okay";compatible "rockchip,dummy-codec";#sound-dai-cells <0>;};// MICpdm_mic_array: pdm-mic-array {status …

【Linux002】cURL接口测试常用命令总结(已更新)

1.熟悉、梳理、总结项目研发实战中的cURL接口测试常用命令&#xff0c;刚好是最近研发遇到的问题。 2.欢迎点赞、关注、批评、指正&#xff0c;互三走起来&#xff0c;小手动起来&#xff01; 文章目录 1.cURL简要介绍2. cURL常用命令清单3. 测试命令行4. 部分效果示例&#xf…

教育新篇章:AI工具Sora引领学习新趋势

Sora——这个让人在24年初引爆AI圈的新产品&#xff0c;它究竟会如何改变我们的教育领域呢&#xff1f; 从gpt到Sora&#xff0c;从对话型的ai到游戏和短剧制作的新风口&#xff0c;我们从23年到24年一个接一个地被震惊&#xff01; Sora能够根据文本提示生成高质量的视频内容…

哈工大操作系统—多进程图像

操作系统管理cpu的时候 引出多进程 多进程为操作系统的核心 把程序存放在内存里 设置一个pc地址 发出取指的命令 cpu工作 把指令通过总线传到

前端工具vscode 提交代码git操作

一 常规操作 1. 相当于git add . 2.输入修改备注&#xff0c;点击提交 3.git push 推送&#xff08;完成这步&#xff0c;本地代码就成功推送到了远程git&#xff09; 二、切换分支 三 比较与之前版本的改动内容 四。合并分支&#xff08;分两步&#xff0c;两截图&#xff0…

图像处理之DBSCAN算法(C++)

图像处理之DBSCAN算法&#xff08;C&#xff09; 文章目录 图像处理之DBSCAN算法&#xff08;C&#xff09;前言一、DBSCAN算法原理二、代码实现总结 前言 DBSCAN聚类算法是一种无监督的数据分类方法&#xff0c;该算法不需要训练数据就可以实现对数据的分类。 一、DBSCAN算法…

最最最重要的集群参数配置(上)no.7

我希望通过两期内容把这些重要的配置讲清楚。严格来说这些配置并不单单指Kafka服务器端的配置&#xff0c;其中既有Broker端参数&#xff0c;也有主题&#xff08;后面我用我们更熟悉的Topic表示&#xff09;级别的参数、JVM端参数和操作系统级别的参数。 需要你注意的是&…

家政上门服务小程序,客商紧密连系的作用是什么

家政服务拓展速度很快&#xff0c;大小城市都有不少品牌门店&#xff0c;其涵盖项目多样化&#xff0c;使得部分年轻人和老年人长期消费需要&#xff0c;商家与客户都需要完善的路径进行长期合作。 运用【雨科】平台搭建家政上门服务预约小程序&#xff0c;客户随时预约服务、…

技术前沿:三品PLM系统引领工程变更管理新趋势

引言 在当今快速变化的制造行业&#xff0c;产品生命周期管理&#xff08;PLM&#xff09;系统已成为企业不可或缺的工具之一。PLM系统不仅帮助企业优化产品开发流程&#xff0c;还对工程变更管理&#xff08;ECM&#xff09;起着至关重要的作用。本文将探讨PLM系统在工程变更…

高职高校实训教学实验室管理系统一体化

盛元广通高职高校实训教学实验室管理系统一体化是确保实验教学有序进行的关键环节。通过更加科学 、有效、合理的管理&#xff0c;明确排课原则、收集课程信息、评估实验室资源、制定排课计划、冲突检测与调整、发布排课信息、调课管理以及数据统计与分析等措施。实现了实验室资…

Go语言

文章目录 Go语言特点应用领域Go语言和Java语言的对比JavaGo 总结 Go语言安装配置环境变量Hello World Go语言 Go语言全称Golanguage&#xff0c;Go&#xff08;又称 Golang&#xff09;是 Google 的 Robert Griesemer&#xff0c;Rob Pike 及 Ken Thompson 开发的一种静态强类…

数组Array

数组的基本用法 概念 数组是有序元素序列。如果将若干个数据类型相同的变量的集合命名&#xff0c;那么该命名就是数组名。数组元素的重点是类型相同并且连续在内存中存放的数据。 定义格式 存储类型 数据类型 数组名 [ 元素个数 ] &#xff1b; 例如&#xff1a; &#x…

AHB与APB总线介绍

1 什么是AHB、APB? AHB&#xff08;Advanced High-performance Bus&#xff09;高速总线&#xff0c;接高速master&#xff0c;APB&#xff08;Advanced Peripheral Bus&#xff09;外设总线&#xff0c;用来接低速slave&#xff0c;一个master可以有多个slave&#xff0c;AH…

若依微服务实现分布式事务

一、基本介绍 1、什么是分布式事务 指一次大的操作由不同的小操作组成的&#xff0c;这些小的操作分布在不同的服务器上&#xff0c;分布式事务需要保证这些小操作要么全部成功&#xff0c;要么全部失败。从本质上来说&#xff0c;分布式事务就是为了保证不同数据库的数据一致…

2.1 数据类型-常量-变量(整型-浮点-字符)

目录 1 数据类型 1.1 关键字 2 常量 3 变量 3.1 命名规则 4 整形数据 4.1 符号常量 4.2 整型变量 5 浮点型数据 5.1 浮点型常量 5.2 浮点型变量 6 字符型数据 6.1 字符型常量 转义字符 6.2 字符数据在内存中的存储形式及其使用方法 6.3 ASCII码表 7 字符串型常…

homebrew安装mysql的一些问题

本文目录 一、Homebrew镜像安装二、mac安装mysql2.1、修改mysql密码 本文基于mac环境下进行的安装 一、Homebrew镜像安装 Homebrew国内如何自动安装&#xff0c;运行命令/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 会…