Open3D (C++ API)  0.19.0
Loading...
Searching...
No Matches
Material.h
Go to the documentation of this file.
1// ----------------------------------------------------------------------------
2// - Open3D: www.open3d.org -
3// ----------------------------------------------------------------------------
4// Copyright (c) 2018-2024 www.open3d.org
5// SPDX-License-Identifier: MIT
6// ----------------------------------------------------------------------------
7
8#pragma once
9
10#include <sstream>
11#include <string>
12
14
15namespace open3d {
16namespace visualization {
17namespace rendering {
18
19struct MaterialRecord;
20
21class Material {
22public:
23 using TextureMaps = std::unordered_map<std::string, t::geometry::Image>;
24 using ScalarPropertyMap = std::unordered_map<std::string, float>;
25 using VectorPropertyMap = std::unordered_map<
26 std::string,
27 Eigen::Vector4f,
28 std::hash<std::string>,
29 std::equal_to<std::string>,
30 Eigen::aligned_allocator<
31 std::pair<const std::string, Eigen::Vector4f>>>;
32
34 Material() = default;
35
36 Material(const Material &mat) = default;
37
40
41 Material &operator=(const Material &other) = default;
42
44 Material(const std::string &material_name)
45 : material_name_(material_name) {}
46
50
53 bool IsValid() const { return !material_name_.empty(); }
54
56 const std::string &GetMaterialName() const { return material_name_; }
57
59 std::string ToString() const;
60
62 const TextureMaps &GetTextureMaps() const { return texture_maps_; }
63
68 const t::geometry::Image &GetTextureMap(const std::string &key) const {
69 return texture_maps_.at(key);
70 }
71
74 return scalar_properties_;
75 }
76
81 float GetScalarProperty(const std::string &key) const {
82 return scalar_properties_.at(key);
83 }
84
87 return vector_properties_;
88 }
89
94 Eigen::Vector4f GetVectorProperty(const std::string &key) const {
95 return vector_properties_.at(key);
96 }
97
103 void SetTextureMap(const std::string &key, const t::geometry::Image &image);
104
110 void SetScalarProperty(const std::string &key, float value) {
111 scalar_properties_[key] = value;
112 }
113
119 void SetVectorProperty(const std::string &key,
120 const Eigen::Vector4f &value) {
121 vector_properties_[key] = value;
122 }
123
125 // in or user specified shader. The name is NOT checked to ensure it is
126 // valid.
129 void SetMaterialName(const std::string &material_name) {
130 material_name_ = material_name;
131 }
132
136 bool HasTextureMap(const std::string &key) const {
137 return texture_maps_.count(key) > 0;
138 }
139
143 bool HasScalarProperty(const std::string &key) const {
144 return scalar_properties_.count(key) > 0;
145 }
146
150 bool HasVectorProperty(const std::string &key) const {
151 return vector_properties_.count(key) > 0;
152 }
153
160 return GetTextureMap("albedo");
161 }
163 return GetTextureMap("normal");
164 }
166 return GetTextureMap("ambient_occlusion");
167 }
169 return GetTextureMap("metallic");
170 }
172 return GetTextureMap("roughness");
173 }
175 return GetTextureMap("reflectance");
176 }
178 return GetTextureMap("clear_coat");
179 }
181 return GetTextureMap("clear_coat_roughness");
182 }
184 return GetTextureMap("anisotropy");
185 }
189 return GetTextureMap("ao_rough_metal");
190 }
191
192 bool HasAlbedoMap() const { return HasTextureMap("albedo"); }
193 bool HasNormalMap() const { return HasTextureMap("normal"); }
194 bool HasAOMap() const { return HasTextureMap("ambient_occlusion"); }
195 bool HasMetallicMap() const { return HasTextureMap("metallic"); }
196 bool HasRoughnessMap() const { return HasTextureMap("roughness"); }
197 bool HasReflectanceMap() const { return HasTextureMap("reflectance"); }
198 bool HasClearcoatMap() const { return HasTextureMap("clear_coat"); }
200 return HasTextureMap("clear_coat_roughness");
201 }
202 bool HasAnisotropyMap() const { return HasTextureMap("anisotropy"); }
204 return HasTextureMap("ao_rough_metal");
205 }
206
208 SetTextureMap("albedo", image);
209 }
211 SetTextureMap("normal", image);
212 }
214 SetTextureMap("ambient_occlusion", image);
215 }
217 SetTextureMap("metallic", image);
218 }
220 SetTextureMap("roughness", image);
221 }
223 SetTextureMap("reflectance", image);
224 }
226 SetTextureMap("clear_coat", image);
227 }
229 SetTextureMap("clear_coat_roughness", image);
230 }
232 SetTextureMap("anisotropy", image);
233 }
235 SetTextureMap("ao_rough_metal", image);
236 }
237
238 Eigen::Vector4f GetBaseColor() const {
239 return GetVectorProperty("base_color");
240 }
241 float GetBaseMetallic() const { return GetScalarProperty("metallic"); }
242 float GetBaseRoughness() const { return GetScalarProperty("roughness"); }
243 float GetBaseReflectance() const {
244 return GetScalarProperty("reflectance");
245 }
246 float GetBaseClearcoat() const { return GetScalarProperty("clear_coat"); }
248 return GetScalarProperty("clear_coat_roughness");
249 }
250 float GetAnisotropy() const { return GetScalarProperty("anisotropy"); }
251 float GetThickness() const { return GetScalarProperty("thickness"); }
252 float GetTransmission() const { return GetScalarProperty("transmission"); }
253 Eigen::Vector4f GetAbsorptionColor() const {
254 return GetVectorProperty("absorption_color");
255 }
256 float GetAbsorptionDistance() const {
257 return GetScalarProperty("absorption_distance");
258 }
259 Eigen::Vector4f GetEmissiveColor() const {
260 return GetVectorProperty("emissive_color");
261 }
262
263 bool HasBaseColor() const { return HasVectorProperty("base_color"); }
264 bool HasBaseMetallic() const { return HasScalarProperty("metallic"); }
265 bool HasBaseRoughness() const { return HasScalarProperty("roughness"); }
266 bool HasBaseReflectance() const { return HasScalarProperty("reflectance"); }
267 bool HasBaseClearcoat() const { return HasScalarProperty("clear_coat"); }
269 return HasScalarProperty("clear_coat_roughness");
270 }
271 bool HasAnisotropy() const { return HasScalarProperty("anisotropy"); }
272 bool HasThickness() const { return HasScalarProperty("thickness"); }
273 bool HasTransmission() const { return HasScalarProperty("transmission"); }
274 bool HasAbsorptionColor() const {
275 return HasVectorProperty("absorption_color");
276 }
278 return HasScalarProperty("absorption_distance");
279 }
280 bool HasEmissiveColor() const {
281 return HasVectorProperty("emissive_color");
282 }
283
284 void SetBaseColor(const Eigen::Vector4f &value) {
285 SetVectorProperty("base_color", value);
286 }
287 void SetBaseMetallic(float value) { SetScalarProperty("metallic", value); }
288 void SetBaseRoughness(float value) {
289 SetScalarProperty("roughness", value);
290 }
291 void SetBaseReflectance(float value) {
292 SetScalarProperty("reflectance", value);
293 }
294 void SetBaseClearcoat(float value) {
295 SetScalarProperty("clear_coat", value);
296 }
297 void SetBaseClearcoatRoughness(float value) {
298 SetScalarProperty("clear_coat_roughness", value);
299 }
300 void SetAnisotropy(float value) { SetScalarProperty("anisotropy", value); }
301 void SetThickness(float value) { SetScalarProperty("thickness", value); }
302 void SetTransmission(float value) {
303 SetScalarProperty("transmission", value);
304 }
305 void SetAbsorptionColor(const Eigen::Vector4f &value) {
306 SetVectorProperty("absorption_color", value);
307 }
308 void SetAbsorptionDistance(float value) {
309 SetScalarProperty("absorption_distance", value);
310 }
311 void SetEmissiveColor(const Eigen::Vector4f &value) {
312 SetVectorProperty("emissive_color", value);
313 }
314
321 float GetPointSize() const { return GetScalarProperty("point_size"); }
322 float GetLineWidth() const { return GetScalarProperty("line_width"); }
323
324 bool HasPointSize() const { return HasScalarProperty("point_size"); }
325 bool HasLineWidth() const { return HasScalarProperty("line_width"); }
326
327 void SetPointSize(float value) { SetScalarProperty("point_size", value); }
328 void SetLineWidth(float value) { SetScalarProperty("line_width", value); }
329
331 void ToMaterialRecord(MaterialRecord &record) const;
332
333private:
334 std::string material_name_;
335 TextureMaps texture_maps_;
336 ScalarPropertyMap scalar_properties_;
337 VectorPropertyMap vector_properties_;
338};
339
340} // namespace rendering
341} // namespace visualization
342} // namespace open3d
std::shared_ptr< core::Tensor > image
Definition FilamentRenderer.cpp:183
The Image class stores image with customizable rows, cols, channels, dtype and device.
Definition Image.h:29
void SetBaseRoughness(float value)
Definition Material.h:288
std::unordered_map< std::string, t::geometry::Image > TextureMaps
Definition Material.h:23
bool HasScalarProperty(const std::string &key) const
Definition Material.h:143
void SetBaseClearcoatRoughness(float value)
Definition Material.h:297
void SetPointSize(float value)
Definition Material.h:327
void SetAlbedoMap(const t::geometry::Image &image)
Definition Material.h:207
void SetAbsorptionColor(const Eigen::Vector4f &value)
Definition Material.h:305
bool HasReflectanceMap() const
Definition Material.h:197
static Material FromMaterialRecord(const MaterialRecord &mat)
Convert from MaterialRecord.
Definition Material.cpp:149
bool HasBaseMetallic() const
Definition Material.h:264
bool HasAORoughnessMetalMap() const
Definition Material.h:203
bool HasThickness() const
Definition Material.h:272
bool HasRoughnessMap() const
Definition Material.h:196
void SetMaterialName(const std::string &material_name)
Set material name. The material name should match the name of a built.
Definition Material.h:129
bool HasBaseReflectance() const
Definition Material.h:266
Eigen::Vector4f GetBaseColor() const
Definition Material.h:238
const t::geometry::Image & GetNormalMap() const
Definition Material.h:162
void SetAOMap(const t::geometry::Image &image)
Definition Material.h:213
const t::geometry::Image & GetAlbedoMap() const
Definition Material.h:159
void SetScalarProperty(const std::string &key, float value)
Definition Material.h:110
void SetAnisotropy(float value)
Definition Material.h:300
void SetDefaultProperties()
Definition Material.cpp:16
bool HasAnisotropyMap() const
Definition Material.h:202
bool HasAOMap() const
Definition Material.h:194
const t::geometry::Image & GetAOMap() const
Definition Material.h:165
bool HasLineWidth() const
Definition Material.h:325
const t::geometry::Image & GetClearcoatMap() const
Definition Material.h:177
const t::geometry::Image & GetAORoughnessMetalMap() const
Definition Material.h:188
bool IsValid() const
Definition Material.h:53
const t::geometry::Image & GetMetallicMap() const
Definition Material.h:168
bool HasAnisotropy() const
Definition Material.h:271
void SetAORoughnessMetalMap(const t::geometry::Image &image)
Definition Material.h:234
bool HasBaseClearcoatRoughness() const
Definition Material.h:268
void SetThickness(float value)
Definition Material.h:301
void SetReflectanceMap(const t::geometry::Image &image)
Definition Material.h:222
float GetThickness() const
Definition Material.h:251
bool HasEmissiveColor() const
Definition Material.h:280
std::unordered_map< std::string, float > ScalarPropertyMap
Definition Material.h:24
bool HasVectorProperty(const std::string &key) const
Definition Material.h:150
const VectorPropertyMap & GetVectorProperties() const
Returns the map of vector properties.
Definition Material.h:86
void SetBaseReflectance(float value)
Definition Material.h:291
bool HasBaseClearcoat() const
Definition Material.h:267
const t::geometry::Image & GetClearcoatRoughnessMap() const
Definition Material.h:180
float GetBaseClearcoat() const
Definition Material.h:246
float GetPointSize() const
Definition Material.h:321
void SetTextureMap(const std::string &key, const t::geometry::Image &image)
Definition Material.cpp:34
float GetBaseMetallic() const
Definition Material.h:241
void SetAbsorptionDistance(float value)
Definition Material.h:308
bool HasClearcoatRoughnessMap() const
Definition Material.h:199
void SetAnisotropyMap(const t::geometry::Image &image)
Definition Material.h:231
void SetVectorProperty(const std::string &key, const Eigen::Vector4f &value)
Definition Material.h:119
void SetNormalMap(const t::geometry::Image &image)
Definition Material.h:210
const std::string & GetMaterialName() const
Get the name of the material.
Definition Material.h:56
const t::geometry::Image & GetRoughnessMap() const
Definition Material.h:171
const t::geometry::Image & GetTextureMap(const std::string &key) const
Definition Material.h:68
bool HasAlbedoMap() const
Definition Material.h:192
bool HasMetallicMap() const
Definition Material.h:195
Eigen::Vector4f GetVectorProperty(const std::string &key) const
Definition Material.h:94
float GetBaseReflectance() const
Definition Material.h:243
bool HasBaseColor() const
Definition Material.h:263
void SetBaseClearcoat(float value)
Definition Material.h:294
float GetScalarProperty(const std::string &key) const
Definition Material.h:81
float GetBaseRoughness() const
Definition Material.h:242
float GetAbsorptionDistance() const
Definition Material.h:256
const TextureMaps & GetTextureMaps() const
Returns the texture map map.
Definition Material.h:62
void SetTransmission(float value)
Definition Material.h:302
Eigen::Vector4f GetAbsorptionColor() const
Definition Material.h:253
const ScalarPropertyMap & GetScalarProperties() const
Returns the map of scalar properties.
Definition Material.h:73
Material()=default
Create an empty, invalid material.
const t::geometry::Image & GetReflectanceMap() const
Definition Material.h:174
bool HasBaseRoughness() const
Definition Material.h:265
std::unordered_map< std::string, Eigen::Vector4f, std::hash< std::string >, std::equal_to< std::string >, Eigen::aligned_allocator< std::pair< const std::string, Eigen::Vector4f > > > VectorPropertyMap
Definition Material.h:31
Eigen::Vector4f GetEmissiveColor() const
Definition Material.h:259
void SetClearcoatRoughnessMap(const t::geometry::Image &image)
Definition Material.h:228
void SetBaseMetallic(float value)
Definition Material.h:287
const t::geometry::Image & GetAnisotropyMap() const
Definition Material.h:183
bool HasNormalMap() const
Definition Material.h:193
bool HasPointSize() const
Definition Material.h:324
float GetAnisotropy() const
Definition Material.h:250
bool HasTextureMap(const std::string &key) const
Definition Material.h:136
bool HasTransmission() const
Definition Material.h:273
float GetBaseClearcoatRoughness() const
Definition Material.h:247
float GetTransmission() const
Definition Material.h:252
void SetClearcoatMap(const t::geometry::Image &image)
Definition Material.h:225
std::string ToString() const
String reprentation for printing.
Definition Material.cpp:43
void SetRoughnessMap(const t::geometry::Image &image)
Definition Material.h:219
void ToMaterialRecord(MaterialRecord &record) const
Fills a legacy MaterialRecord constructed from this Material.
Definition Material.cpp:61
Material(const Material &mat)=default
void SetMetallicMap(const t::geometry::Image &image)
Definition Material.h:216
bool HasAbsorptionColor() const
Definition Material.h:274
Material(const std::string &material_name)
Create an empty but valid material for the specified material name.
Definition Material.h:44
bool HasClearcoatMap() const
Definition Material.h:198
Material & operator=(const Material &other)=default
float GetLineWidth() const
Definition Material.h:322
void SetLineWidth(float value)
Definition Material.h:328
void SetEmissiveColor(const Eigen::Vector4f &value)
Definition Material.h:311
bool HasAbsorptionDistance() const
Definition Material.h:277
void SetBaseColor(const Eigen::Vector4f &value)
Definition Material.h:284
Definition PinholeCameraIntrinsic.cpp:16