0031313: Foundation Classes - Dump improvement for classes
[occt.git] / src / Graphic3d / Graphic3d_MaterialAspect.cxx
CommitLineData
b311480e 1// Copyright (c) 1991-1999 Matra Datavision
973c2be1 2// Copyright (c) 1999-2014 OPEN CASCADE SAS
b311480e 3//
973c2be1 4// This file is part of Open CASCADE Technology software library.
b311480e 5//
d5f74e42 6// This library is free software; you can redistribute it and/or modify it under
7// the terms of the GNU Lesser General Public License version 2.1 as published
973c2be1 8// by the Free Software Foundation, with special exception defined in the file
9// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
10// distribution for complete text of the license and disclaimer of any warranty.
b311480e 11//
973c2be1 12// Alternatively, this file may be used under the terms of Open CASCADE
13// commercial license or contractual agreement.
7fd59977 14
42cf5bc1 15#include <Graphic3d_MaterialAspect.hxx>
4e1bc39a 16
42cf5bc1 17#include <Graphic3d_MaterialDefinitionError.hxx>
b5eb7166 18#include <Standard_Assert.hxx>
42cf5bc1 19#include <Standard_OutOfRange.hxx>
7fd59977 20
4e1bc39a 21namespace
44c7c33e 22{
4e1bc39a 23 //! Raw material for defining list of standard materials
24 struct RawMaterial
25 {
26 const char* StringName;
27 Graphic3d_BSDF BSDF;
67312b79 28 Graphic3d_PBRMaterial PBRMaterial;
61168418 29 Quantity_Color Colors[Graphic3d_TypeOfReflection_NB];
4e1bc39a 30 Standard_ShortReal TransparencyCoef;
31 Standard_ShortReal RefractionIndex;
32 Standard_ShortReal Shininess;
61168418 33 Standard_ShortReal AmbientCoef; //!< coefficient for Graphic3d_MaterialAspect::SetColor()
34 Standard_ShortReal DiffuseCoef; //!< coefficient for Graphic3d_MaterialAspect::SetColor()
4e1bc39a 35 Graphic3d_TypeOfMaterial MaterialType;
36 Graphic3d_NameOfMaterial MaterialName;
7fd59977 37
4e1bc39a 38 RawMaterial (Graphic3d_NameOfMaterial theName, const char* theStringName);
39
40 };
41
42 //! Name list of standard materials (defined within enumeration).
43 static const RawMaterial THE_MATERIALS[] =
44 {
45 RawMaterial (Graphic3d_NOM_BRASS, "Brass"),
46 RawMaterial (Graphic3d_NOM_BRONZE, "Bronze"),
47 RawMaterial (Graphic3d_NOM_COPPER, "Copper"),
48 RawMaterial (Graphic3d_NOM_GOLD, "Gold"),
49 RawMaterial (Graphic3d_NOM_PEWTER, "Pewter"),
50 RawMaterial (Graphic3d_NOM_PLASTER, "Plastered"),
51 RawMaterial (Graphic3d_NOM_PLASTIC, "Plastified"),
52 RawMaterial (Graphic3d_NOM_SILVER, "Silver"),
53 RawMaterial (Graphic3d_NOM_STEEL, "Steel"),
54 RawMaterial (Graphic3d_NOM_STONE, "Stone"),
55 RawMaterial (Graphic3d_NOM_SHINY_PLASTIC, "Shiny_plastified"),
56 RawMaterial (Graphic3d_NOM_SATIN, "Satined"),
57 RawMaterial (Graphic3d_NOM_METALIZED, "Metalized"),
58 RawMaterial (Graphic3d_NOM_NEON_GNC, "Ionized"),
59 RawMaterial (Graphic3d_NOM_CHROME, "Chrome"),
60 RawMaterial (Graphic3d_NOM_ALUMINIUM, "Aluminium"),
61 RawMaterial (Graphic3d_NOM_OBSIDIAN, "Obsidian"),
62 RawMaterial (Graphic3d_NOM_NEON_PHC, "Neon"),
63 RawMaterial (Graphic3d_NOM_JADE, "Jade"),
64 RawMaterial (Graphic3d_NOM_CHARCOAL, "Charcoal"),
65 RawMaterial (Graphic3d_NOM_WATER, "Water"),
66 RawMaterial (Graphic3d_NOM_GLASS, "Glass"),
67 RawMaterial (Graphic3d_NOM_DIAMOND, "Diamond"),
68 RawMaterial (Graphic3d_NOM_TRANSPARENT, "Transparent"),
69 RawMaterial (Graphic3d_NOM_DEFAULT, "Default"),
70 RawMaterial (Graphic3d_NOM_UserDefined, "UserDefined")
71 };
7fd59977 72}
73
44c7c33e 74// =======================================================================
4e1bc39a 75// function : RawMaterial
44c7c33e 76// purpose :
77// =======================================================================
4e1bc39a 78RawMaterial::RawMaterial (Graphic3d_NameOfMaterial theName, const char* theStringName)
79: StringName (theStringName),
80 BSDF (Graphic3d_BSDF::CreateDiffuse (Graphic3d_Vec3 (0.0f))),
81 TransparencyCoef(0.0f),
82 RefractionIndex (1.0f),
83 Shininess (0.039f),
61168418 84 AmbientCoef (0.25f),
85 DiffuseCoef (1.0f),
4e1bc39a 86 MaterialType (Graphic3d_MATERIAL_ASPECT),
87 MaterialName (theName)
44c7c33e 88{
44c7c33e 89 switch (theName)
90 {
189f85a3 91 case Graphic3d_NOM_PLASTIC:
61168418 92 MaterialType = Graphic3d_MATERIAL_ASPECT;
4e1bc39a 93
61168418 94 Shininess = 0.0078125f;
ba00aab7 95 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.25f));
61168418 96 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.24f));
ba00aab7 97 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.004896f));
61168418 98 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f));
99
100 BSDF.Kd = Graphic3d_Vec3 (0.2f);
05aa616d 101 BSDF.Ks = Graphic3d_Vec4 (0.00784314f, 0.00784314f, 0.00784314f, 0.25f);
4e1bc39a 102 BSDF.Normalize();
67312b79 103
44c7c33e 104 break;
189f85a3 105 case Graphic3d_NOM_SHINY_PLASTIC:
61168418 106 MaterialType = Graphic3d_MATERIAL_ASPECT;
4e1bc39a 107
61168418 108 Shininess = 1.00f;
ba00aab7 109 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.22f));
61168418 110 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.50f));
111 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (1.0f));
112 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f));
113
114 BSDF.Kd = Graphic3d_Vec3 (0.2f);
05aa616d 115 BSDF.Ks = Graphic3d_Vec4 (0.145f, 0.145f, 0.145f, 0.17f);
4e1bc39a 116 BSDF.Normalize();
44c7c33e 117 break;
4e1bc39a 118 case Graphic3d_NOM_SATIN:
61168418 119 MaterialType = Graphic3d_MATERIAL_ASPECT;
120
121 Shininess = 0.09375f;
ba00aab7 122 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.165f));
61168418 123 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.40f));
ba00aab7 124 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.162647f));
61168418 125 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f));
189f85a3 126
4e1bc39a 127 BSDF.Kd = Graphic3d_Vec3 (0.2f);
05aa616d 128 BSDF.Ks = Graphic3d_Vec4 (0.6f);
67312b79 129
44c7c33e 130 break;
131 case Graphic3d_NOM_NEON_GNC:
61168418 132 MaterialType = Graphic3d_MATERIAL_ASPECT;
133
134 Shininess = 0.05f;
135 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.0f));
136 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (1.0f));
ba00aab7 137 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.342392f));
61168418 138 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (1.0f));
4e1bc39a 139
140 BSDF.Kd = Graphic3d_Vec3 (0.0f);
05aa616d 141 BSDF.Ks = Graphic3d_Vec4 (0.5f, 0.5f, 0.5f, 0.f);
142 BSDF.Le = static_cast<Graphic3d_Vec3> (Colors[Graphic3d_TOR_DIFFUSE]);
143 BSDF.FresnelBase = Graphic3d_Fresnel::CreateDielectric (1.5f);
44c7c33e 144 break;
145 case Graphic3d_NOM_METALIZED:
61168418 146 MaterialType = Graphic3d_MATERIAL_ASPECT;
147
148 Shininess = 0.13f;
149 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.0f));
150 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.47f));
ba00aab7 151 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.170645f));
61168418 152 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f));
153
154 BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f),
155 Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.2f)), 0.045f);
44c7c33e 156 break;
44c7c33e 157 case Graphic3d_NOM_BRASS:
4e1bc39a 158 MaterialType = Graphic3d_MATERIAL_PHYSIC;
44c7c33e 159
4e1bc39a 160 BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f),
6e728f3b 161 Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.58f, 0.42f, 0.20f)), 0.045f);
189f85a3 162
61168418 163 Shininess = 0.65f;
ba00aab7 164 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.088428f, 0.041081f, 0.002090f));
165 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.570482f, 0.283555f, 0.012335f));
4e1bc39a 166 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.992f, 0.941f, 0.808f));
61168418 167 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f));
44c7c33e 168 break;
169 case Graphic3d_NOM_BRONZE:
4e1bc39a 170 MaterialType = Graphic3d_MATERIAL_PHYSIC;
44c7c33e 171
4e1bc39a 172 BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f),
6e728f3b 173 Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.65f, 0.35f, 0.15f)), 0.045f);
189f85a3 174
61168418 175 Shininess = 0.65f;
ba00aab7 176 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.037301f, 0.014931f, 0.004305f));
177 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.468185f, 0.153344f, 0.027491f));
4e1bc39a 178 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.590f, 0.408f, 0.250f));
61168418 179 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f));
44c7c33e 180 break;
181 case Graphic3d_NOM_COPPER:
4e1bc39a 182 MaterialType = Graphic3d_MATERIAL_PHYSIC;
44c7c33e 183
4e1bc39a 184 BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f),
6e728f3b 185 Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.955008f, 0.637427f, 0.538163f)), 0.045f);
189f85a3 186
61168418 187 Shininess = 0.65f;
ba00aab7 188 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.030370f, 0.006451f, 0.001780f));
189 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.323236f, 0.059254f, 0.007584f));
4e1bc39a 190 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.950f, 0.640f, 0.540f));
61168418 191 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f));
44c7c33e 192 break;
193 case Graphic3d_NOM_GOLD:
4e1bc39a 194 MaterialType = Graphic3d_MATERIAL_PHYSIC;
44c7c33e 195
4e1bc39a 196 BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f),
6e728f3b 197 Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (1.000000f, 0.765557f, 0.336057f)), 0.045f);
189f85a3 198
61168418 199 Shininess = 0.80f;
ba00aab7 200 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.073239f, 0.043234f, 0.009264f));
201 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.525643f, 0.295700f, 0.010023f));
4e1bc39a 202 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (1.000f, 0.710f, 0.290f));
61168418 203 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f));
44c7c33e 204 break;
205 case Graphic3d_NOM_PEWTER:
4e1bc39a 206 MaterialType = Graphic3d_MATERIAL_PHYSIC;
44c7c33e 207
4e1bc39a 208 BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f),
6e728f3b 209 Graphic3d_Fresnel::CreateConductor (1.8800f, 3.4900f), 0.045f);
189f85a3 210
61168418 211 Shininess = 0.50f;
ba00aab7 212 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.010979f, 0.004795f, 0.012335f));
213 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.152583f, 0.188174f, 0.253972f));
4e1bc39a 214 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.333f, 0.333f, 0.522f));
61168418 215 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f));
44c7c33e 216 break;
217 case Graphic3d_NOM_PLASTER:
61168418 218 MaterialType = Graphic3d_MATERIAL_ASPECT;
44c7c33e 219
61168418 220 Shininess = 0.01f;
ba00aab7 221 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.13f));
61168418 222 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.75f));
ba00aab7 223 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.003936f));
61168418 224 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f));
189f85a3 225
4e1bc39a 226 BSDF.Kd = Graphic3d_Vec3 (0.482353f, 0.482353f, 0.482353f);
67312b79 227
44c7c33e 228 break;
229 case Graphic3d_NOM_SILVER:
4e1bc39a 230 MaterialType = Graphic3d_MATERIAL_PHYSIC;
44c7c33e 231
4e1bc39a 232 BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f),
6e728f3b 233 Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.971519f, 0.959915f, 0.915324f)), 0.045f);
189f85a3 234
61168418 235 Shininess = 0.75f;
ba00aab7 236 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.061465f, 0.061465f, 0.050876f));
237 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.354692f, 0.354692f, 0.354692f));
4e1bc39a 238 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.950f, 0.930f, 0.880f));
61168418 239 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f));
44c7c33e 240 break;
241 case Graphic3d_NOM_STEEL:
4e1bc39a 242 MaterialType = Graphic3d_MATERIAL_PHYSIC;
44c7c33e 243
4e1bc39a 244 BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f),
6e728f3b 245 Graphic3d_Fresnel::CreateConductor (Graphic3d_Vec3 (2.90f, 2.80f, 2.53f), Graphic3d_Vec3 (3.08f, 2.90f, 2.74f)), 0.045f);
189f85a3 246
61168418 247 Shininess = 0.90f;
ba00aab7 248 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.019607f, 0.019607f, 0.027212f));
249 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.214041f, 0.223414f, 0.233022f));
4e1bc39a 250 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.560f, 0.570f, 0.580f));
61168418 251 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f));
44c7c33e 252 break;
253 case Graphic3d_NOM_STONE:
4e1bc39a 254 MaterialType = Graphic3d_MATERIAL_PHYSIC;
44c7c33e 255
61168418 256 // special case for SetColor()
257 AmbientCoef = 0.19f * 0.25f;
258 DiffuseCoef = 0.75f;
44c7c33e 259
61168418 260 Shininess = 0.17f;
ba00aab7 261 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.030074f, 0.020069f, 0.013011f));
262 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.522522f, 0.318547f, 0.183064f));
61168418 263 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.98f, 1.0f, 0.60f) * 0.08f);
264 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f));
189f85a3 265
4e1bc39a 266 BSDF.Kd = Graphic3d_Vec3 (0.243137f, 0.243137f, 0.243137f);
05aa616d 267 BSDF.Ks = Graphic3d_Vec4 (0.00392157f, 0.00392157f, 0.00392157f, 0.5f);
67312b79 268
44c7c33e 269 break;
44c7c33e 270 case Graphic3d_NOM_CHROME:
4e1bc39a 271 MaterialType = Graphic3d_MATERIAL_PHYSIC;
44c7c33e 272
4e1bc39a 273 BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f),
6e728f3b 274 Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.549585f, 0.556114f, 0.554256f)), 0.045f);
189f85a3 275
61168418 276 Shininess = 0.90f;
ba00aab7 277 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.033105f, 0.033105f, 0.041436f));
278 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.263273f, 0.263273f, 0.263273f));
4e1bc39a 279 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.975f, 0.975f, 0.975f));
61168418 280 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f));
44c7c33e 281 break;
282 case Graphic3d_NOM_ALUMINIUM:
4e1bc39a 283 MaterialType = Graphic3d_MATERIAL_PHYSIC;
44c7c33e 284
4e1bc39a 285 BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f),
6e728f3b 286 Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.913183f, 0.921494f, 0.924524f)), 0.045f);
189f85a3 287
61168418 288 Shininess = 0.75f;
ba00aab7 289 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.073239f, 0.073239f, 0.073239f));
290 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.318547f, 0.318547f, 0.318547f));
4e1bc39a 291 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.910f, 0.920f, 0.920f));
61168418 292 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f));
44c7c33e 293 break;
294 case Graphic3d_NOM_NEON_PHC:
4e1bc39a 295 MaterialType = Graphic3d_MATERIAL_PHYSIC;
296
61168418 297 Shininess = 0.05f;
298 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.0f));
299 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.0f));
300 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.62f));
ba00aab7 301 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f, 0.787412f, 0.142892f));
4e1bc39a 302
303 BSDF.Kd = Graphic3d_Vec3 (0.0f);
05aa616d 304 BSDF.Ks = Graphic3d_Vec4 (0.5f, 0.5f, 0.5f, 0.f);
4e1bc39a 305 BSDF.Le = Graphic3d_Vec3 (0.0f, 1.0f, 0.46f);
05aa616d 306 BSDF.FresnelBase = Graphic3d_Fresnel::CreateDielectric (1.5f);
44c7c33e 307 break;
308 case Graphic3d_NOM_OBSIDIAN:
4e1bc39a 309 MaterialType = Graphic3d_MATERIAL_PHYSIC;
310
61168418 311 Shininess = 0.3f;
ba00aab7 312 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.004305f, 0.003936f, 0.005532f));
313 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.028053f, 0.024515f, 0.041436f));
4e1bc39a 314 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.333f, 0.329f, 0.346f));
61168418 315 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f));
4e1bc39a 316
317 BSDF.Kd = Graphic3d_Vec3 (0.023f, 0.f, 0.023f);
05aa616d 318 BSDF.Ks = Graphic3d_Vec4 (0.0156863f, 0.0156863f, 0.0156863f, 0.1f);
44c7c33e 319 break;
320 case Graphic3d_NOM_JADE:
4e1bc39a 321 MaterialType = Graphic3d_MATERIAL_PHYSIC;
322
61168418 323 Shininess = 0.10f;
ba00aab7 324 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.016338f, 0.040729f, 0.021493f));
325 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.252950f, 0.767769f, 0.354692f));
4e1bc39a 326 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.316f, 0.316f, 0.316f));
61168418 327 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f));
4e1bc39a 328
05aa616d 329 BSDF.FresnelBase = Graphic3d_Fresnel::CreateDielectric (1.5f);
4e1bc39a 330 BSDF.Kd = Graphic3d_Vec3 (0.208658f, 0.415686f, 0.218401f);
05aa616d 331 BSDF.Ks = Graphic3d_Vec4 (0.611765f, 0.611765f, 0.611765f, 0.06f);
44c7c33e 332 break;
333 case Graphic3d_NOM_CHARCOAL:
4e1bc39a 334 MaterialType = Graphic3d_MATERIAL_PHYSIC;
335
61168418 336 Shininess = 0.01f;
ba00aab7 337 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.003936f));
338 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.019607f));
61168418 339 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.0f));
340 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f));
4e1bc39a 341
342 BSDF.Kd = Graphic3d_Vec3 (0.02f, 0.02f, 0.02f);
05aa616d 343 BSDF.Ks = Graphic3d_Vec4 (0.1f, 0.1f, 0.1f, 0.3f);
44c7c33e 344 break;
345 case Graphic3d_NOM_WATER:
4e1bc39a 346 MaterialType = Graphic3d_MATERIAL_PHYSIC;
347
4e1bc39a 348 RefractionIndex = 1.33f;
349 BSDF = Graphic3d_BSDF::CreateGlass (Graphic3d_Vec3 (1.f),
350 Graphic3d_Vec3 (0.7f, 0.75f, 0.85f),
351 0.05f,
352 RefractionIndex);
353 TransparencyCoef = 0.80f;
354
61168418 355 Shininess = 0.90f;
ba00aab7 356 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.170645f, 0.170645f, 0.191627f));
357 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.003936f, 0.003936f, 0.006571f));
4e1bc39a 358 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.380f, 0.380f, 0.380f));
61168418 359 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f));
44c7c33e 360 break;
361 case Graphic3d_NOM_GLASS:
4e1bc39a 362 MaterialType = Graphic3d_MATERIAL_PHYSIC;
363
4e1bc39a 364 RefractionIndex = 1.62f;
365 BSDF = Graphic3d_BSDF::CreateGlass (Graphic3d_Vec3 (1.f),
366 Graphic3d_Vec3 (0.75f, 0.95f, 0.9f),
367 0.05f,
368 RefractionIndex);
369 TransparencyCoef = 0.80f;
370
61168418 371 Shininess = 0.50f;
ba00aab7 372 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.263273f, 0.290143f, 0.290143f));
373 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.003936f, 0.006571f, 0.006571f));
4e1bc39a 374 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.920f, 0.920f, 0.920f));
61168418 375 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f));
44c7c33e 376 break;
377 case Graphic3d_NOM_DIAMOND:
4e1bc39a 378 MaterialType = Graphic3d_MATERIAL_PHYSIC;
379
4e1bc39a 380 RefractionIndex = 2.42f;
381 BSDF = Graphic3d_BSDF::CreateGlass (Graphic3d_Vec3 (1.f),
382 Graphic3d_Vec3 (0.95f, 0.95f, 0.95f),
383 0.05f,
384 RefractionIndex);
385 TransparencyCoef = 0.80f;
386
61168418 387 Shininess = 0.90f;
ba00aab7 388 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.263273f));
389 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.010023f));
61168418 390 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.970f));
391 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f));
44c7c33e 392 break;
6e728f3b 393
394 case Graphic3d_NOM_TRANSPARENT:
4e1bc39a 395 MaterialType = Graphic3d_MATERIAL_PHYSIC;
396
4e1bc39a 397 RefractionIndex = 1.0f;
6e728f3b 398
4e1bc39a 399 BSDF.Kd = Graphic3d_Vec3 (0.1f);
400 BSDF.Kt = Graphic3d_Vec3 (0.9f);
05aa616d 401 BSDF.FresnelBase = Graphic3d_Fresnel::CreateConstant (0.0f);
4e1bc39a 402 TransparencyCoef = 0.80f;
403
61168418 404 Shininess = 0.90f;
ba00aab7 405 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.263273f));
406 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.010023f));
61168418 407 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.970f));
408 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f));
4e1bc39a 409 break;
44c7c33e 410 case Graphic3d_NOM_UserDefined:
2108d9a2 411 MaterialType = Graphic3d_MATERIAL_PHYSIC;
61168418 412 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.1f));
ba00aab7 413 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.6f));
61168418 414 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.2f));
415 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f));
44c7c33e 416 break;
417 case Graphic3d_NOM_DEFAULT:
61168418 418 MaterialType = Graphic3d_MATERIAL_ASPECT;
419
ba00aab7 420 Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.15f));
61168418 421 Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.65f));
422 Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.0f));
423 Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f));
44c7c33e 424 break;
425 }
67312b79 426 PBRMaterial.SetBSDF (BSDF);
44c7c33e 427}
7fd59977 428
4e1bc39a 429// =======================================================================
430// function : Graphic3d_MaterialAspect
431// purpose :
432// =======================================================================
433Graphic3d_MaterialAspect::Graphic3d_MaterialAspect()
434: myRequestedMaterialName (Graphic3d_NOM_DEFAULT)
435{
436 init (Graphic3d_NOM_DEFAULT);
437}
438
439// =======================================================================
440// function : Graphic3d_MaterialAspect
441// purpose :
442// =======================================================================
443Graphic3d_MaterialAspect::Graphic3d_MaterialAspect (const Graphic3d_NameOfMaterial theName)
444: myRequestedMaterialName (theName)
445{
446 init (theName);
447}
448
449// =======================================================================
450// function : init
451// purpose :
452// =======================================================================
453void Graphic3d_MaterialAspect::init (const Graphic3d_NameOfMaterial theName)
454{
455 const RawMaterial& aMat = THE_MATERIALS[theName];
67312b79 456 myBSDF = aMat.BSDF;
457 myPBRMaterial = aMat.PBRMaterial;
458 myStringName = aMat.StringName;
4e1bc39a 459 myColors[Graphic3d_TOR_AMBIENT] = aMat.Colors[Graphic3d_TOR_AMBIENT];
460 myColors[Graphic3d_TOR_DIFFUSE] = aMat.Colors[Graphic3d_TOR_DIFFUSE];
461 myColors[Graphic3d_TOR_SPECULAR] = aMat.Colors[Graphic3d_TOR_SPECULAR];
462 myColors[Graphic3d_TOR_EMISSION] = aMat.Colors[Graphic3d_TOR_EMISSION];
4e1bc39a 463 myTransparencyCoef = aMat.TransparencyCoef;
464 myRefractionIndex = aMat.RefractionIndex;
465 myShininess = aMat.Shininess;
4e1bc39a 466 myMaterialType = aMat.MaterialType;
467 myMaterialName = theName;
468 myRequestedMaterialName = theName;
4e1bc39a 469}
470
44c7c33e 471// =======================================================================
472// function : IncreaseShine
473// purpose :
474// =======================================================================
4e1bc39a 475void Graphic3d_MaterialAspect::IncreaseShine (const Standard_ShortReal theDelta)
44c7c33e 476{
4e1bc39a 477 const Standard_ShortReal anOldShine = myShininess;
478 myShininess = myShininess + myShininess * theDelta / 100.0f;
479 if (myShininess > 1.0f || myShininess < 0.0f)
44c7c33e 480 {
481 myShininess = anOldShine;
482 }
483}
7fd59977 484
44c7c33e 485// =======================================================================
486// function : SetMaterialType
487// purpose :
488// =======================================================================
489void Graphic3d_MaterialAspect::SetMaterialType (const Graphic3d_TypeOfMaterial theType)
490{
491 myMaterialType = theType;
492 if (theType != myMaterialType)
493 {
4e1bc39a 494 setUserMaterial();
44c7c33e 495 }
7fd59977 496}
497
44c7c33e 498// =======================================================================
61168418 499// function : SetColor
44c7c33e 500// purpose :
501// =======================================================================
61168418 502void Graphic3d_MaterialAspect::SetColor (const Quantity_Color& theColor)
44c7c33e 503{
61168418 504 if (myMaterialType == Graphic3d_MATERIAL_ASPECT)
44c7c33e 505 {
61168418 506 return;
44c7c33e 507 }
7fd59977 508
67312b79 509 myPBRMaterial.SetColor (theColor);
510
61168418 511 const RawMaterial& aSrcMat = THE_MATERIALS[myRequestedMaterialName];
512 const Quantity_Color anAmbient((Graphic3d_Vec3 )theColor * aSrcMat.AmbientCoef);
513 const Quantity_Color aDiffuse ((Graphic3d_Vec3 )theColor * aSrcMat.DiffuseCoef);
514 if (myMaterialName != Graphic3d_NOM_UserDefined
515 && (!myColors[Graphic3d_TOR_AMBIENT].IsEqual (anAmbient)
516 || !myColors[Graphic3d_TOR_DIFFUSE].IsEqual (aDiffuse)))
44c7c33e 517 {
4e1bc39a 518 setUserMaterial();
44c7c33e 519 }
61168418 520 myColors[Graphic3d_TOR_AMBIENT] = anAmbient;
521 myColors[Graphic3d_TOR_DIFFUSE] = aDiffuse;
44c7c33e 522}
7fd59977 523
44c7c33e 524// =======================================================================
525// function : SetAmbientColor
526// purpose :
527// =======================================================================
528void Graphic3d_MaterialAspect::SetAmbientColor (const Quantity_Color& theColor)
529{
61168418 530 if (myMaterialType == Graphic3d_MATERIAL_PHYSIC
531 && myMaterialName != Graphic3d_NOM_UserDefined
532 && !myColors[Graphic3d_TOR_AMBIENT].IsEqual (theColor))
44c7c33e 533 {
4e1bc39a 534 setUserMaterial();
44c7c33e 535 }
61168418 536 myColors[Graphic3d_TOR_AMBIENT] = theColor;
7fd59977 537}
538
44c7c33e 539// =======================================================================
540// function : SetDiffuseColor
541// purpose :
542// =======================================================================
543void Graphic3d_MaterialAspect::SetDiffuseColor (const Quantity_Color& theColor)
544{
61168418 545 if (myMaterialType == Graphic3d_MATERIAL_PHYSIC
546 && myMaterialName != Graphic3d_NOM_UserDefined
547 && !myColors[Graphic3d_TOR_DIFFUSE].IsEqual (theColor))
44c7c33e 548 {
4e1bc39a 549 setUserMaterial();
44c7c33e 550 }
61168418 551 myColors[Graphic3d_TOR_DIFFUSE] = theColor;
44c7c33e 552}
7fd59977 553
44c7c33e 554// =======================================================================
555// function : SetSpecularColor
556// purpose :
557// =======================================================================
558void Graphic3d_MaterialAspect::SetSpecularColor (const Quantity_Color& theColor)
559{
61168418 560 if (myMaterialType == Graphic3d_MATERIAL_PHYSIC
561 && myMaterialName != Graphic3d_NOM_UserDefined
562 && !myColors[Graphic3d_TOR_SPECULAR].IsEqual (theColor))
44c7c33e 563 {
4e1bc39a 564 setUserMaterial();
44c7c33e 565 }
61168418 566 myColors[Graphic3d_TOR_SPECULAR] = theColor;
44c7c33e 567}
7fd59977 568
44c7c33e 569// =======================================================================
570// function : SetEmissiveColor
571// purpose :
572// =======================================================================
573void Graphic3d_MaterialAspect::SetEmissiveColor (const Quantity_Color& theColor)
574{
61168418 575 if (myMaterialType == Graphic3d_MATERIAL_PHYSIC
576 && myMaterialName != Graphic3d_NOM_UserDefined
577 && !myColors[Graphic3d_TOR_EMISSION].IsEqual (theColor))
44c7c33e 578 {
4e1bc39a 579 setUserMaterial();
44c7c33e 580 }
61168418 581 myColors[Graphic3d_TOR_EMISSION] = theColor;
44c7c33e 582}
7fd59977 583
44c7c33e 584// =======================================================================
585// function : SetTransparency
586// purpose :
587// =======================================================================
4e1bc39a 588void Graphic3d_MaterialAspect::SetTransparency (const Standard_ShortReal theValue)
44c7c33e 589{
4e1bc39a 590 if (theValue < 0.0f
591 || theValue > 1.0f)
44c7c33e 592 {
9775fa61 593 throw Graphic3d_MaterialDefinitionError("Bad value for SetTransparency < 0. or > 1.0");
44c7c33e 594 }
7fd59977 595
4e1bc39a 596 myTransparencyCoef = theValue;
67312b79 597 myPBRMaterial.SetAlpha (1.0f - theValue);
7fd59977 598}
599
44c7c33e 600// =======================================================================
601// function : SetRefractionIndex
602// purpose :
603// =======================================================================
4e1bc39a 604void Graphic3d_MaterialAspect::SetRefractionIndex (const Standard_ShortReal theValue)
44c7c33e 605{
4e1bc39a 606 if (theValue < 1.0f)
44c7c33e 607 {
9775fa61 608 throw Graphic3d_MaterialDefinitionError("Bad value for refraction index < 1.0");
44c7c33e 609 }
7fd59977 610
4e1bc39a 611 myRefractionIndex = theValue;
44c7c33e 612}
7fd59977 613
44c7c33e 614// =======================================================================
615// function : SetShininess
616// purpose :
617// =======================================================================
4e1bc39a 618void Graphic3d_MaterialAspect::SetShininess (const Standard_ShortReal theValue)
44c7c33e 619{
4e1bc39a 620 if (theValue < 0.0f
621 || theValue > 1.0f)
44c7c33e 622 {
9775fa61 623 throw Graphic3d_MaterialDefinitionError("Bad value for Shininess < 0. or > 1.0");
44c7c33e 624 }
7fd59977 625
61168418 626 if (myShininess != theValue)
627 {
628 myShininess = theValue;
629 setUserMaterial();
630 }
7fd59977 631}
632
44c7c33e 633// =======================================================================
634// function : MaterialName
635// purpose :
636// =======================================================================
637Standard_CString Graphic3d_MaterialAspect::MaterialName (const Standard_Integer theRank)
638{
639 if (theRank < 1 || theRank > NumberOfMaterials())
640 {
9775fa61 641 throw Standard_OutOfRange("BAD index of material");
44c7c33e 642 }
4e1bc39a 643 const RawMaterial& aMat = THE_MATERIALS[theRank - 1];
644 return aMat.StringName;
7fd59977 645}
646
44c7c33e 647// =======================================================================
648// function : MaterialFromName
649// purpose :
650// =======================================================================
61168418 651Standard_Boolean Graphic3d_MaterialAspect::MaterialFromName (const Standard_CString theName,
652 Graphic3d_NameOfMaterial& theMat)
ad3217cd 653{
654 TCollection_AsciiString aName (theName);
655 aName.LowerCase();
656 aName.Capitalize();
657 const Standard_Integer aNbMaterials = Graphic3d_MaterialAspect::NumberOfMaterials();
61168418 658 for (Standard_Integer aMatIter = 0; aMatIter <= aNbMaterials; ++aMatIter)
ad3217cd 659 {
4e1bc39a 660 const RawMaterial& aMat = THE_MATERIALS[aMatIter];
661 if (aName == aMat.StringName)
ad3217cd 662 {
61168418 663 theMat = Graphic3d_NameOfMaterial(aMatIter);
664 return Standard_True;
ad3217cd 665 }
666 }
667
668 // parse aliases
669 if (aName == "Plastic") // Plastified
670 {
61168418 671 theMat = Graphic3d_NOM_PLASTIC;
672 return Standard_True;
ad3217cd 673 }
674 else if (aName == "Shiny_plastic") // Shiny_plastified
675 {
61168418 676 theMat = Graphic3d_NOM_SHINY_PLASTIC;
677 return Standard_True;
ad3217cd 678 }
679 else if (aName == "Plaster") // Plastered
680 {
61168418 681 theMat = Graphic3d_NOM_PLASTER;
682 return Standard_True;
ad3217cd 683 }
684 else if (aName == "Satin") // Satined
685 {
61168418 686 theMat = Graphic3d_NOM_SATIN;
687 return Standard_True;
ad3217cd 688 }
689 else if (aName == "Neon_gnc") // Ionized
690 {
61168418 691 theMat = Graphic3d_NOM_NEON_GNC;
692 return Standard_True;
ad3217cd 693 }
694 else if (aName == "Neon_phc") // Neon
695 {
61168418 696 theMat = Graphic3d_NOM_NEON_PHC;
697 return Standard_True;
ad3217cd 698 }
61168418 699 return Standard_False;
ad3217cd 700}
701
44c7c33e 702// =======================================================================
703// function : MaterialType
704// purpose :
705// =======================================================================
706Graphic3d_TypeOfMaterial Graphic3d_MaterialAspect::MaterialType (const Standard_Integer theRank)
707{
708 if (theRank < 1 || theRank > NumberOfMaterials())
709 {
9775fa61 710 throw Standard_OutOfRange("BAD index of material");
44c7c33e 711 }
4e1bc39a 712 const RawMaterial& aMat = THE_MATERIALS[theRank - 1];
713 return aMat.MaterialType;
7fd59977 714}
bc73b006 715
716//=======================================================================
717//function : DumpJson
718//purpose :
719//=======================================================================
720void Graphic3d_MaterialAspect::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const
721{
722 OCCT_DUMP_CLASS_BEGIN (theOStream, Graphic3d_MaterialAspect)
723
724 OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myBSDF)
725 OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myPBRMaterial)
726 OCCT_DUMP_FIELD_VALUE_STRING (theOStream, myStringName)
727
728 OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myColors[Graphic3d_TOR_AMBIENT])
729 OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myColors[Graphic3d_TOR_DIFFUSE])
730 OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myColors[Graphic3d_TOR_SPECULAR])
731 OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myColors[Graphic3d_TOR_EMISSION])
732
733 OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myTransparencyCoef)
734 OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myRefractionIndex)
735 OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myShininess)
736
737 OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myMaterialType)
738 OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myMaterialName)
739 OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myRequestedMaterialName)
740}