3D-Viewer: Limit the recursive reflection level
Fixes https://gitlab.com/kicad/code/kicad/issues/5426
This commit is contained in:
parent
820e3089a2
commit
2feef44fca
|
@ -188,6 +188,7 @@ void C3D_RENDER_RAYTRACING::setupMaterials()
|
||||||
0.0f, // transparency
|
0.0f, // transparency
|
||||||
0.50f ); // reflection
|
0.50f ); // reflection
|
||||||
m_materials.m_Floor.SetCastShadows( false );
|
m_materials.m_Floor.SetCastShadows( false );
|
||||||
|
m_materials.m_Floor.SetReflectionsRecursiveLevel( 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1805,7 +1805,8 @@ SFVEC3F C3D_RENDER_RAYTRACING::shadeHit( const SFVEC3F &aBgColor,
|
||||||
|
|
||||||
if( !aIsInsideObject &&
|
if( !aIsInsideObject &&
|
||||||
(objMaterial->GetReflection() > 0.0f) &&
|
(objMaterial->GetReflection() > 0.0f) &&
|
||||||
m_boardAdapter.GetFlag( FL_RENDER_RAYTRACING_REFLECTIONS ) )
|
m_boardAdapter.GetFlag( FL_RENDER_RAYTRACING_REFLECTIONS ) &&
|
||||||
|
( aRecursiveLevel < objMaterial->GetReflectionsRecursiveLevel() ) )
|
||||||
{
|
{
|
||||||
const unsigned int reflection_number_of_samples = objMaterial->GetNrReflectionsSamples();
|
const unsigned int reflection_number_of_samples = objMaterial->GetNrReflectionsSamples();
|
||||||
|
|
||||||
|
|
|
@ -80,6 +80,7 @@ CMATERIAL::CMATERIAL( const SFVEC3F &aAmbient,
|
||||||
m_cast_shadows = true;
|
m_cast_shadows = true;
|
||||||
m_refraction_nr_samples = 4;
|
m_refraction_nr_samples = 4;
|
||||||
m_reflections_nr_samples = 3;
|
m_reflections_nr_samples = 3;
|
||||||
|
m_reflections_recursive_levels = 2;
|
||||||
|
|
||||||
m_normal_perturbator = NULL;
|
m_normal_perturbator = NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -215,10 +215,12 @@ public:
|
||||||
float GetAbsorvance() const { return m_absorbance; }
|
float GetAbsorvance() const { return m_absorbance; }
|
||||||
unsigned int GetNrRefractionsSamples() const { return m_refraction_nr_samples; }
|
unsigned int GetNrRefractionsSamples() const { return m_refraction_nr_samples; }
|
||||||
unsigned int GetNrReflectionsSamples() const { return m_reflections_nr_samples; }
|
unsigned int GetNrReflectionsSamples() const { return m_reflections_nr_samples; }
|
||||||
|
unsigned int GetReflectionsRecursiveLevel() const { return m_reflections_recursive_levels; }
|
||||||
|
|
||||||
void SetAbsorvance( float aAbsorvanceFactor ) { m_absorbance = aAbsorvanceFactor; }
|
void SetAbsorvance( float aAbsorvanceFactor ) { m_absorbance = aAbsorvanceFactor; }
|
||||||
void SetNrRefractionsSamples( unsigned int aNrRefractions ) { m_refraction_nr_samples = aNrRefractions; }
|
void SetNrRefractionsSamples( unsigned int aNrRefractions ) { m_refraction_nr_samples = aNrRefractions; }
|
||||||
void SetNrReflectionsSamples( unsigned int aNrReflections ) { m_reflections_nr_samples = aNrReflections; }
|
void SetNrReflectionsSamples( unsigned int aNrReflections ) { m_reflections_nr_samples = aNrReflections; }
|
||||||
|
void SetReflectionsRecursiveLevel( unsigned int aReflectionsLevel ) { m_reflections_recursive_levels = aReflectionsLevel; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief SetCastShadows - Set if the material can receive shadows
|
* @brief SetCastShadows - Set if the material can receive shadows
|
||||||
|
@ -268,6 +270,7 @@ protected:
|
||||||
bool m_cast_shadows; ///< true if this object will block the light
|
bool m_cast_shadows; ///< true if this object will block the light
|
||||||
unsigned int m_refraction_nr_samples; ///< nr of rays that will be interpolated for this material if it is a transparent
|
unsigned int m_refraction_nr_samples; ///< nr of rays that will be interpolated for this material if it is a transparent
|
||||||
unsigned int m_reflections_nr_samples; ///< nr of rays that will be interpolated for this material if it is reflective
|
unsigned int m_reflections_nr_samples; ///< nr of rays that will be interpolated for this material if it is reflective
|
||||||
|
unsigned int m_reflections_recursive_levels; ///< nr of levels it allows for reflection recursiveness
|
||||||
|
|
||||||
const CPROCEDURALGENERATOR *m_normal_perturbator;
|
const CPROCEDURALGENERATOR *m_normal_perturbator;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue