Added light loss to refraction shader
This commit is contained in:
parent
3b76969ff2
commit
dcae587b8c
2 changed files with 10 additions and 4 deletions
|
@ -1,8 +1,8 @@
|
||||||
#include "scene/scene.h"
|
#include "scene/scene.h"
|
||||||
#include "shader/refractionshader.h"
|
#include "shader/refractionshader.h"
|
||||||
|
|
||||||
RefractionShader::RefractionShader(float indexInside, float indexOutside, Color const &objectColor) : indexInside(
|
RefractionShader::RefractionShader(float indexInside, float indexOutside, Color const &objectColor, float lightLoss) : indexInside(
|
||||||
indexInside), indexOutside(indexOutside), objectColor(objectColor)
|
indexInside), indexOutside(indexOutside), objectColor(objectColor), lightLoss(lightLoss)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
Color RefractionShader::shade(Scene const &scene, Ray const &ray) const
|
Color RefractionShader::shade(Scene const &scene, Ray const &ray) const
|
||||||
|
@ -51,7 +51,12 @@ Color RefractionShader::shade(Scene const &scene, Ray const &ray) const
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send out a new refracted ray into the scene
|
// Send out a new refracted ray into the scene
|
||||||
return scene.traceRay(refractionRay) * objectColor;
|
Color hitColor = scene.traceRay(refractionRay);
|
||||||
|
|
||||||
|
// Calculate light lost
|
||||||
|
float lightRemaining = 1;
|
||||||
|
if (refractionRay.primitive == ray.primitive) lightRemaining = 1 - lightLoss + exp(-refractionRay.length / 10) * lightLoss;
|
||||||
|
return hitColor * objectColor * lightRemaining;
|
||||||
}
|
}
|
||||||
return Color(0.0f, 0.0f, 0.0f);
|
return Color(0.0f, 0.0f, 0.0f);
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@ class RefractionShader : public Shader
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Constructor
|
// Constructor
|
||||||
RefractionShader(float indexInside, float indexOutside, Color const &objectColor = Color(1, 1, 1));
|
RefractionShader(float indexInside, float indexOutside, Color const &objectColor = Color(1, 1, 1), float lightLoss = 0);
|
||||||
|
|
||||||
// Shader functions
|
// Shader functions
|
||||||
Color shade(Scene const &scene, Ray const &ray) const override;
|
Color shade(Scene const &scene, Ray const &ray) const override;
|
||||||
|
@ -18,6 +18,7 @@ public:
|
||||||
private:
|
private:
|
||||||
float indexInside;
|
float indexInside;
|
||||||
float indexOutside;
|
float indexOutside;
|
||||||
|
float lightLoss;
|
||||||
Color objectColor;
|
Color objectColor;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue