![]() |
RflySimSDK v3.05
RflySimSDK说明文档
|
此类用于定义和处理给定场景中各种对象的辐射属性。 更多...
Public 成员函数 | |
__init__ (self, any ue) | |
辐射类的构造函数。 | |
sendUE4SetStencilValueByActorName (self, Actorname, StencilValue, is_name_regex=False, windowID=-1) | |
由Actor名向UE发送辐射设置模板值的命令 | |
sendUE4SetStencilValueByMeshComponentName (self, Meshname, StencilValue, is_name_regex=False, windowID=-1) | |
由Actor的Mesh组件名向UE发送设置辐射模板值的命令 | |
sendUE4SetStencilValueByCopterID (self, CopterID, StencilValue, windowID=-1) | |
由CopterID向UE发送设置辐射模板值的命令 | |
radiance (self, absoluteTemperature, emissivity, dx=0.01, response=None) | |
物体辐射的计算 | |
get_new_temp_emiss_from_radiance (self, tempEmissivity, response) | |
由辐射强度计算模板值 | |
Public 属性 | |
ue | |
tempEmissivity | |
此类用于定义和处理给定场景中各种对象的辐射属性。
辐射类初始化时带有预定义的对象集,每个对象都有特定的温度(以开尔文为单位), 发射率(与理想黑体相比),以及一个标志表示名称是否引用角色Actor。
根据预设的二维列表,计算普朗克公式的积分,得到一个辐射值,并 归一到0~255范围内,发送给UE,然后UE将这个辐射值直接设置为 物体的模板值,然后由 CameraCapture 上写的材质规则去渲染纹理图片,然后用原来的图像传感器的接口返回到python。
__init__ | ( | self, | |
any | ue ) |
辐射类的构造函数。
ue | 与辐射属性关联的Unreal Engine对象。 |
使用预定义的值(包括对象名称、温度、发射率和是否为角色Actor的标志)初始化tempEmissivity数组。
self.tempEmissivity = np.array( [ ["Floor", 276, 0.96, True], ["SK_Man_Arms", 309, 0.98, False], ["SK_Man_Head", 309, 0.98, False], ] ) 这里需要预先给定场景中1:所有物体的名字(或名字中的某一段)、2:温度(开尔文)、 3:发射率(与理想黑体)、4:是否是Actor的名字(如果是Actor的名字,那么它所有的Mesh的辐射值都会被设置,否则会设置一个Mesh) 每个地图都会不一样,所以需要预先给定。 摄氏度与开尔文的转换关系为: K = C + 273.15
get_new_temp_emiss_from_radiance | ( | self, | |
tempEmissivity, | |||
response ) |
由辐射强度计算模板值
tempEmissivity | 包含物体温度和发射率的二维数组。数组的第一列是物体的ID,第二列是温度,第三列是发射率。 |
response | 响应函数,用于调整辐射强度的计算。默认为None,即不调整。 |
这个值越大,物体越亮,反之越小越暗
详细实现 1. 获取物体的数量 numObjects。 2. 调用 radiance 函数计算每个物体的辐射强度: - 提取 tempEmissivity 数组中的温度和发射率,并转换为浮点数。 - 使用提取的温度和发射率调用 radiance 函数,得到每个物体的辐射强度数组 L。 3. 对辐射强度数组 L 进行归一化处理,并将其缩放到0到255的范围内,转换为8位无符号整数类型。 4. 构建新的二维数组 tempEmissivityNew,包含物体的ID和归一化后的辐射强度ID值。 5. 返回新的二维数组 tempEmissivityNew。
radiance | ( | self, | |
absoluteTemperature, | |||
emissivity, | |||
dx = 0.01, | |||
response = None ) |
物体辐射的计算
\begin{eqnarray*} L\left(T, \epsilon_{\text {avg }}, R_{\lambda}\right)=\epsilon_{\text {avg }} \int_{\lambda=8 \mu m}^{\lambda=14 \mu m} R_{\lambda}\left(\frac{2 h c^{2}}{\lambda^{5}} \frac{1}{\exp \left(\frac{h c}{k T \lambda}\right)-1}\right) d \lambda \end{eqnarray*}
absoluteTemperature | 温度 |
emissivity | 发射率 |
dx | 用于积分的步长 |
response | 响应函数(默认为None),实际是相机的接受率 |
用物体的温度和发射率(提前给定的),由普朗克公式的积分计算出物体的辐射强度。
普朗克函数可以计算一个黑体在某个温度下某个波长的光谱辐射度(W/m²/μm),然后光源发出的总功率密度(单位是W/m²)可以通过光谱辐照度在所有波长(或能量)上积分来计算
详细实现 1. 定义积分步长和边界 定义波长范围 wavelength 为8到14微米之间,以 dx 为步长。 2. 定义普朗克公式中的常数 定义常数 c1 和 c2: - c1 = 1.19104e8,是一个与普朗克常数和光速相关的常数。 - c2 = 1.43879e4,是另一个与普朗克常数、光速和波尔兹曼常数相关的常数。 3. 定义相机接受率 根据是否提供了响应函数 response,计算辐射强度 radiance: - 如果提供了 response,则计算时会考虑响应函数的影响。 - 否则默认response=1,直接根据普朗克公式和发射率计算辐射强度。 4. 计算积分 对辐射强度数组进行积分,计算总辐射强度: - 如果 absoluteTemperature 是多维数组,则在每个维度上分别进行积分。 - 否则,对整个数组进行积分。 5. 返回总辐射强度。
sendUE4SetStencilValueByActorName | ( | self, | |
Actorname, | |||
StencilValue, | |||
is_name_regex = False, | |||
windowID = -1 ) |
sendUE4SetStencilValueByCopterID | ( | self, | |
CopterID, | |||
StencilValue, | |||
windowID = -1 ) |
sendUE4SetStencilValueByMeshComponentName | ( | self, | |
Meshname, | |||
StencilValue, | |||
is_name_regex = False, | |||
windowID = -1 ) |