1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-09 13:22:24 +03:00

0024855: Revision of parameters of standard materials

Improve consistency and visual appearance of predefined OCCT materials in various rendering modes, including ray-tracing:
- Increase the specular exponents (shininesses) for metallic surfaces: Brass, Bronze, Copper, Gold, Pewter, Silver, Steel, Chrome, Aluminum.
- Revise specular colors for metals: Copper, Gold, Aluminum, Silver (according to "Real-Time Rendering, 3rd Edition", AK Peters 2008).
- Increase diffuse reflection of metals: Silver, Aluminum, Chrome (to make them brighter in OpenGL mode).
- Extend Material definition by Refraction Index.
  Advanced rendering methods based on shaders or ray-tracing can utilize it to produce refraction effects.

In addition:
- Introduce three translucent materials: Water, Glass, and Diamond.
- Add Charcoal for modeling dark diffuse surfaces.

Add new TCL-based sample (materials.tcl) and test case (tests/v3d/materials/bug24855).
This commit is contained in:
dbp
2014-04-30 15:14:17 +04:00
committed by apn
parent 013a854956
commit 44c7c33eb0
15 changed files with 1108 additions and 898 deletions

View File

@@ -1034,12 +1034,13 @@ void Graphic3d_Structure::SetPrimitivesAspect (const Handle(Graphic3d_AspectFill
// Back Material
const Graphic3d_MaterialAspect& aBack = theAspFill->BackMaterial();
// Light specificity
myCStructure->ContextFillArea.Back.Shininess = float (aBack.Shininess());
myCStructure->ContextFillArea.Back.Ambient = float (aBack.Ambient());
myCStructure->ContextFillArea.Back.Diffuse = float (aBack.Diffuse());
myCStructure->ContextFillArea.Back.Specular = float (aBack.Specular());
myCStructure->ContextFillArea.Back.Transparency = float (aBack.Transparency());
myCStructure->ContextFillArea.Back.Emission = float (aBack.Emissive());
myCStructure->ContextFillArea.Back.Shininess = float (aBack.Shininess());
myCStructure->ContextFillArea.Back.Ambient = float (aBack.Ambient());
myCStructure->ContextFillArea.Back.Diffuse = float (aBack.Diffuse());
myCStructure->ContextFillArea.Back.Specular = float (aBack.Specular());
myCStructure->ContextFillArea.Back.Transparency = float (aBack.Transparency());
myCStructure->ContextFillArea.Back.RefractionIndex = float (aBack.RefractionIndex());
myCStructure->ContextFillArea.Back.Emission = float (aBack.Emissive());
// Reflection mode
myCStructure->ContextFillArea.Back.IsAmbient = (aBack.ReflectionMode (Graphic3d_TOR_AMBIENT) ? 1 : 0);
@@ -1077,12 +1078,13 @@ void Graphic3d_Structure::SetPrimitivesAspect (const Handle(Graphic3d_AspectFill
// Front Material
const Graphic3d_MaterialAspect& aFront = theAspFill->FrontMaterial();
// Light specificity
myCStructure->ContextFillArea.Front.Shininess = float (aFront.Shininess());
myCStructure->ContextFillArea.Front.Ambient = float (aFront.Ambient());
myCStructure->ContextFillArea.Front.Diffuse = float (aFront.Diffuse());
myCStructure->ContextFillArea.Front.Specular = float (aFront.Specular());
myCStructure->ContextFillArea.Front.Transparency = float (aFront.Transparency());
myCStructure->ContextFillArea.Front.Emission = float (aFront.Emissive());
myCStructure->ContextFillArea.Front.Shininess = float (aFront.Shininess());
myCStructure->ContextFillArea.Front.Ambient = float (aFront.Ambient());
myCStructure->ContextFillArea.Front.Diffuse = float (aFront.Diffuse());
myCStructure->ContextFillArea.Front.Specular = float (aFront.Specular());
myCStructure->ContextFillArea.Front.Transparency = float (aFront.Transparency());
myCStructure->ContextFillArea.Front.RefractionIndex = float (aFront.RefractionIndex());
myCStructure->ContextFillArea.Front.Emission = float (aFront.Emissive());
// Reflection mode
myCStructure->ContextFillArea.Front.IsAmbient = (aFront.ReflectionMode (Graphic3d_TOR_AMBIENT) ? 1 : 0);