Skip to content

Commit

Permalink
Add emissive material and rename all material classes
Browse files Browse the repository at this point in the history
  • Loading branch information
flarive committed Nov 16, 2024
1 parent cfb7f09 commit 89ea628
Show file tree
Hide file tree
Showing 40 changed files with 303 additions and 622 deletions.
2 changes: 1 addition & 1 deletion CRT.sln
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scenes", "scenes", "{2C428A
data\scenes\dragon_mesh.scene = data\scenes\dragon_mesh.scene
data\scenes\earth_mesh.scene = data\scenes\earth_mesh.scene
data\scenes\extended_primitives.scene = data\scenes\extended_primitives.scene
data\scenes\emissive_spheres.scene = data\scenes\emissive_spheres.scene
data\scenes\extended_primitives_old.scene = data\scenes\extended_primitives_old.scene
data\scenes\extended_primitives_textured.scene = data\scenes\extended_primitives_textured.scene
data\scenes\final_scene.scene = data\scenes\final_scene.scene
Expand All @@ -49,7 +50,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scenes", "scenes", "{2C428A
data\scenes\test_bump_texture.scene = data\scenes\test_bump_texture.scene
data\scenes\test_cameras.scene = data\scenes\test_cameras.scene
data\scenes\test_displacement_texture.scene = data\scenes\test_displacement_texture.scene
data\scenes\test_emissive_texture.scene = data\scenes\test_emissive_texture.scene
data\scenes\test_normal_texture.scene = data\scenes\test_normal_texture.scene
data\scenes\transforms.scene = data\scenes\transforms.scene
EndProjectSection
Expand Down
36 changes: 16 additions & 20 deletions core/Core.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,7 @@
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="materials\emissive_material.cpp" />
<ClCompile Include="misc\aabb.cpp" />
<ClCompile Include="misc\aabb_debug.cpp" />
<ClCompile Include="cameras\orthographic_camera.cpp" />
Expand All @@ -163,10 +164,7 @@
<ClCompile Include="outputs\no_output.cpp" />
<ClCompile Include="outputs\output.cpp" />
<ClCompile Include="outputs\standard_output.cpp" />
<ClCompile Include="randomizers\mersenne_twister_randomizer.cpp" />
<ClCompile Include="randomizers\pcg_randomizer.cpp" />
<ClCompile Include="randomizers\randomize.cpp" />
<ClCompile Include="randomizers\randomizer.cpp" />
<ClCompile Include="renderers\cpu_multithread_renderer.cpp" />
<ClCompile Include="renderers\cpu_singlethread_renderer.cpp" />
<ClCompile Include="renderers\gpu_cuda_renderer.cpp" />
Expand All @@ -181,14 +179,14 @@
<ClCompile Include="lights\directional_light.cpp" />
<ClCompile Include="lights\omni_light.cpp" />
<ClCompile Include="lights\spot_light.cpp" />
<ClCompile Include="materials\anisotropic.cpp" />
<ClCompile Include="materials\dielectric.cpp" />
<ClCompile Include="materials\anisotropic_material.cpp" />
<ClCompile Include="materials\dielectric_material.cpp" />
<ClCompile Include="materials\diffuse_light.cpp" />
<ClCompile Include="materials\isotropic.cpp" />
<ClCompile Include="materials\lambertian.cpp" />
<ClCompile Include="materials\metal.cpp" />
<ClCompile Include="materials\oren_nayar.cpp" />
<ClCompile Include="materials\phong.cpp" />
<ClCompile Include="materials\isotropic_material.cpp" />
<ClCompile Include="materials\lambertian_material.cpp" />
<ClCompile Include="materials\metal_material.cpp" />
<ClCompile Include="materials\oren_nayar_material.cpp" />
<ClCompile Include="materials\phong_material.cpp" />
<ClCompile Include="materials\diffuse_spot_light.cpp" />
<ClCompile Include="misc\color.cpp" />
<ClCompile Include="misc\hit_record.cpp" />
Expand Down Expand Up @@ -247,16 +245,17 @@
<ClCompile Include="scenes\scene_manager.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="materials\emissive_material.h" />
<ClInclude Include="misc\aabb.h" />
<ClInclude Include="misc\aabb_debug.h" />
<ClInclude Include="misc\bvh_node.h" />
<ClInclude Include="cameras\orthographic_camera.h" />
<ClInclude Include="cameras\perspective_camera.h" />
<ClInclude Include="cameras\camera.h" />
<ClInclude Include="lights\spot_light.h" />
<ClInclude Include="materials\anisotropic.h" />
<ClInclude Include="materials\oren_nayar.h" />
<ClInclude Include="materials\phong.h" />
<ClInclude Include="materials\anisotropic_material.h" />
<ClInclude Include="materials\oren_nayar_material.h" />
<ClInclude Include="materials\phong_material.h" />
<ClInclude Include="misc\hit_record.h" />
<ClInclude Include="lights\light.h" />
<ClInclude Include="lights\directional_light.h" />
Expand Down Expand Up @@ -290,14 +289,11 @@
<ClInclude Include="primitives\translate.h" />
<ClInclude Include="primitives\triangle.h" />
<ClInclude Include="primitives\volume.h" />
<ClInclude Include="materials\dielectric.h" />
<ClInclude Include="materials\dielectric_material.h" />
<ClInclude Include="primitives\cylinder.h" />
<ClInclude Include="primitives\hittable.h" />
<ClInclude Include="primitives\hittable_list.h" />
<ClInclude Include="randomizers\mersenne_twister_randomizer.h" />
<ClInclude Include="randomizers\pcg_randomizer.h" />
<ClInclude Include="randomizers\randomize.h" />
<ClInclude Include="randomizers\randomizer.h" />
<ClInclude Include="renderers\cpu_multithread_renderer.h" />
<ClInclude Include="renderers\cpu_singlethread_renderer.h" />
<ClInclude Include="renderers\gpu_cuda_renderer.h" />
Expand All @@ -313,10 +309,10 @@
<ClInclude Include="utilities\helpers.h" />
<ClInclude Include="utilities\interval.h" />
<ClInclude Include="materials\diffuse_light.h" />
<ClInclude Include="materials\isotropic.h" />
<ClInclude Include="materials\lambertian.h" />
<ClInclude Include="materials\isotropic_material.h" />
<ClInclude Include="materials\lambertian_material.h" />
<ClInclude Include="materials\material.h" />
<ClInclude Include="materials\metal.h" />
<ClInclude Include="materials\metal_material.h" />
<ClInclude Include="misc\scatter_record.h" />
<ClInclude Include="misc\singleton.h" />
<ClInclude Include="textures\alpha_texture.h" />
Expand Down
58 changes: 20 additions & 38 deletions core/Core.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -160,12 +160,6 @@
<Filter Include="Fichiers d%27en-tête\randomizers">
<UniqueIdentifier>{de18e66d-43c0-46c5-a841-d1039e61b0a7}</UniqueIdentifier>
</Filter>
<Filter Include="Fichiers sources\randomizers\base">
<UniqueIdentifier>{806d09c5-3b36-48d3-80d1-4ba5e7ada583}</UniqueIdentifier>
</Filter>
<Filter Include="Fichiers d%27en-tête\randomizers\base">
<UniqueIdentifier>{e0697a73-d9a3-43eb-bb1b-bd356c20ab52}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="main.cpp">
Expand Down Expand Up @@ -219,16 +213,16 @@
<ClCompile Include="cameras\perspective_camera.cpp">
<Filter>Fichiers sources\cameras</Filter>
</ClCompile>
<ClCompile Include="materials\dielectric.cpp">
<ClCompile Include="materials\dielectric_material.cpp">
<Filter>Fichiers sources\materials</Filter>
</ClCompile>
<ClCompile Include="materials\isotropic.cpp">
<ClCompile Include="materials\isotropic_material.cpp">
<Filter>Fichiers sources\materials</Filter>
</ClCompile>
<ClCompile Include="materials\lambertian.cpp">
<ClCompile Include="materials\lambertian_material.cpp">
<Filter>Fichiers sources\materials</Filter>
</ClCompile>
<ClCompile Include="materials\metal.cpp">
<ClCompile Include="materials\metal_material.cpp">
<Filter>Fichiers sources\materials</Filter>
</ClCompile>
<ClCompile Include="textures\alpha_texture.cpp">
Expand Down Expand Up @@ -264,7 +258,7 @@
<ClCompile Include="textures\perlin.cpp">
<Filter>Fichiers sources\textures\fx</Filter>
</ClCompile>
<ClCompile Include="materials\oren_nayar.cpp">
<ClCompile Include="materials\oren_nayar_material.cpp">
<Filter>Fichiers sources\materials</Filter>
</ClCompile>
<ClCompile Include="misc\scene.cpp">
Expand All @@ -282,7 +276,7 @@
<ClCompile Include="textures\texture.cpp">
<Filter>Fichiers sources\textures\base</Filter>
</ClCompile>
<ClCompile Include="materials\anisotropic.cpp">
<ClCompile Include="materials\anisotropic_material.cpp">
<Filter>Fichiers sources\materials</Filter>
</ClCompile>
<ClCompile Include="materials\diffuse_light.cpp">
Expand Down Expand Up @@ -318,7 +312,7 @@
<ClCompile Include="textures\normal_texture.cpp">
<Filter>Fichiers sources\textures</Filter>
</ClCompile>
<ClCompile Include="materials\phong.cpp">
<ClCompile Include="materials\phong_material.cpp">
<Filter>Fichiers sources\materials</Filter>
</ClCompile>
<ClCompile Include="scenes\scene_builder.cpp">
Expand Down Expand Up @@ -429,18 +423,12 @@
<ClCompile Include="utilities\triangle_cache.cpp">
<Filter>Fichiers sources\utilities</Filter>
</ClCompile>
<ClCompile Include="randomizers\randomizer.cpp">
<Filter>Fichiers sources\randomizers\base</Filter>
</ClCompile>
<ClCompile Include="randomizers\pcg_randomizer.cpp">
<Filter>Fichiers sources\randomizers</Filter>
</ClCompile>
<ClCompile Include="randomizers\mersenne_twister_randomizer.cpp">
<Filter>Fichiers sources\randomizers</Filter>
</ClCompile>
<ClCompile Include="randomizers\randomize.cpp">
<Filter>Fichiers sources\randomizers</Filter>
</ClCompile>
<ClCompile Include="materials\emissive_material.cpp">
<Filter>Fichiers sources\materials</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="utilities\interval.h">
Expand All @@ -449,16 +437,16 @@
<ClInclude Include="primitives\quad.h">
<Filter>Fichiers d%27en-tête\primitives</Filter>
</ClInclude>
<ClInclude Include="materials\lambertian.h">
<ClInclude Include="materials\lambertian_material.h">
<Filter>Fichiers d%27en-tête\materials</Filter>
</ClInclude>
<ClInclude Include="materials\metal.h">
<ClInclude Include="materials\metal_material.h">
<Filter>Fichiers d%27en-tête\materials</Filter>
</ClInclude>
<ClInclude Include="materials\dielectric.h">
<ClInclude Include="materials\dielectric_material.h">
<Filter>Fichiers d%27en-tête\materials</Filter>
</ClInclude>
<ClInclude Include="materials\isotropic.h">
<ClInclude Include="materials\isotropic_material.h">
<Filter>Fichiers d%27en-tête\materials</Filter>
</ClInclude>
<ClInclude Include="primitives\hittable_list.h">
Expand Down Expand Up @@ -551,7 +539,7 @@
<ClInclude Include="misc\hit_record.h">
<Filter>Fichiers d%27en-tête\misc</Filter>
</ClInclude>
<ClInclude Include="materials\oren_nayar.h">
<ClInclude Include="materials\oren_nayar_material.h">
<Filter>Fichiers d%27en-tête\materials</Filter>
</ClInclude>
<ClInclude Include="misc\scene.h">
Expand All @@ -560,7 +548,7 @@
<ClInclude Include="cameras\camera.h">
<Filter>Fichiers d%27en-tête\cameras\base</Filter>
</ClInclude>
<ClInclude Include="materials\anisotropic.h">
<ClInclude Include="materials\anisotropic_material.h">
<Filter>Fichiers d%27en-tête\materials</Filter>
</ClInclude>
<ClInclude Include="materials\diffuse_light.h">
Expand Down Expand Up @@ -605,7 +593,7 @@
<ClInclude Include="textures\normal_texture.h">
<Filter>Fichiers d%27en-tête\textures</Filter>
</ClInclude>
<ClInclude Include="materials\phong.h">
<ClInclude Include="materials\phong_material.h">
<Filter>Fichiers d%27en-tête\materials</Filter>
</ClInclude>
<ClInclude Include="utilities\helpers.h">
Expand Down Expand Up @@ -722,17 +710,11 @@
<ClInclude Include="pdf\pdf.h">
<Filter>Fichiers d%27en-tête\pdf\base</Filter>
</ClInclude>
<ClInclude Include="randomizers\randomizer.h">
<Filter>Fichiers d%27en-tête\randomizers\base</Filter>
</ClInclude>
<ClInclude Include="randomizers\pcg_randomizer.h">
<Filter>Fichiers d%27en-tête\randomizers</Filter>
</ClInclude>
<ClInclude Include="randomizers\mersenne_twister_randomizer.h">
<Filter>Fichiers d%27en-tête\randomizers</Filter>
</ClInclude>
<ClInclude Include="randomizers\randomize.h">
<Filter>Fichiers d%27en-tête\randomizers</Filter>
</ClInclude>
<ClInclude Include="materials\emissive_material.h">
<Filter>Fichiers d%27en-tête\materials</Filter>
</ClInclude>
</ItemGroup>
</Project>
2 changes: 1 addition & 1 deletion core/Core.vcxproj.user
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LocalDebuggerCommandArguments>-width 128 -height 288 -ratio 16:9 -spp 1 -maxdepth 50 -random 3 -gamma 1 -aa 0 -denoise 0 -mode 8 -scene ..\..\data\scenes\buddha1_mesh.scene -save ..\..\data\renders\buddha1_mesh.png</LocalDebuggerCommandArguments>
<LocalDebuggerCommandArguments>-width 512 -height 288 -ratio 16:9 -spp 10 -maxdepth 50 -random 3 -gamma 1 -aa 0 -denoise 0 -mode 8 -scene ..\..\data\scenes\test_emissive_texture.scene</LocalDebuggerCommandArguments>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
#include "anisotropic.h"
#include "anisotropic_material.h"

#include "../lights/light.h"
#include "../textures/solid_color_texture.h"
#include "../pdf/anisotropic_phong_pdf.h"


anisotropic::anisotropic(double Nu, double Nv, const std::shared_ptr<texture>& diffuseTexture, const std::shared_ptr<texture>& specularTexture, const std::shared_ptr<texture>& exponentTexture)
anisotropic_material::anisotropic_material(double Nu, double Nv, const std::shared_ptr<texture>& diffuseTexture, const std::shared_ptr<texture>& specularTexture, const std::shared_ptr<texture>& exponentTexture)
: m_diffuse(diffuseTexture), m_specular(specularTexture), m_exponent(exponentTexture), m_nu(Nu), m_nv(Nv)
{
}

bool anisotropic::scatter(const ray& r_in, const hittable_list& lights, const hit_record& rec, scatter_record& srec, randomizer& rnd) const
bool anisotropic_material::scatter(const ray& r_in, const hittable_list& lights, const hit_record& rec, scatter_record& srec, randomizer& rnd) const
{
srec.skip_pdf = true;
srec.attenuation = srec.diffuseColor = m_diffuse->value(rec.u, rec.v, rec.hit_point);
Expand Down Expand Up @@ -46,13 +46,13 @@ bool anisotropic::scatter(const ray& r_in, const hittable_list& lights, const hi
return true;
}

color anisotropic::emitted(const ray& r_in, const hit_record& rec, double u, double v, const point3& p) const
color anisotropic_material::emitted(const ray& r_in, const hit_record& rec, double u, double v, const point3& p) const
{
return color::black();
}


double anisotropic::scattering_pdf(const ray& r_in, const hit_record& rec, const ray& scattered) const
double anisotropic_material::scattering_pdf(const ray& r_in, const hit_record& rec, const ray& scattered) const
{
const double cosine = vector_multiply_to_double(rec.normal, scattered.direction());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@
/// Wood, composite materials, all crystals (except cubic crystal) are examples of anisotropic materials.
/// Is a material (shader) that represents surfaces with grooves, such as a CD, feathers, or fabrics like velvet or satin
/// </summary>
class anisotropic : public material
class anisotropic_material : public material
{
public:
anisotropic(double Nu, double Nv, const std::shared_ptr<texture>& diffuseTexture, const std::shared_ptr<texture>& specularTexture, const std::shared_ptr<texture>& exponentTexture);
anisotropic_material(double Nu, double Nv, const std::shared_ptr<texture>& diffuseTexture, const std::shared_ptr<texture>& specularTexture, const std::shared_ptr<texture>& exponentTexture);

bool scatter(const ray& r_in, const hittable_list& lights, const hit_record& rec, scatter_record& srec, randomizer& rnd) const override;
double scattering_pdf(const ray& r_in, const hit_record& rec, const ray& scattered) const override;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
#include "dielectric.h"
#include "dielectric_material.h"

#include "../misc/singleton.h"


dielectric::dielectric(double index_of_refraction) : ir(index_of_refraction)
dielectric_material::dielectric_material(double index_of_refraction) : ir(index_of_refraction)
{
}

bool dielectric::scatter(const ray& r_in, const hittable_list& lights, const hit_record& rec, scatter_record& srec, randomizer& rnd) const
bool dielectric_material::scatter(const ray& r_in, const hittable_list& lights, const hit_record& rec, scatter_record& srec, randomizer& rnd) const
{
srec.attenuation = color(1.0, 1.0, 1.0);
srec.pdf_ptr = nullptr;
Expand All @@ -32,7 +32,7 @@ bool dielectric::scatter(const ray& r_in, const hittable_list& lights, const hit


// Static methods gets constructed only once no matter how many times the function is called.
double dielectric::reflectance(double cosine, double ref_idx)
double dielectric_material::reflectance(double cosine, double ref_idx)
{
// Use Schlick's approximation for reflectance.
auto r0 = (1 - ref_idx) / (1 + ref_idx);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@
/// For water, glass, diamond...
/// Ray is reflected and also refracted
/// </summary>
class dielectric : public material
class dielectric_material : public material
{
public:
dielectric(double index_of_refraction);
dielectric_material(double index_of_refraction);

bool scatter(const ray& r_in, const hittable_list& lights, const hit_record& rec, scatter_record& srec, randomizer& rnd) const override;

Expand Down
18 changes: 16 additions & 2 deletions core/materials/diffuse_light.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,24 @@
#include "../textures/solid_color_texture.h"

diffuse_light::diffuse_light(std::shared_ptr<texture> a)
: m_emit(a) {}
: m_emit(a), m_intensity(1.0), m_invisible(false), m_directional(false)
{
}

diffuse_light::diffuse_light(std::shared_ptr<texture> a, double _intensity)
: m_emit(a), m_intensity(_intensity), m_invisible(false), m_directional(false)
{
}

diffuse_light::diffuse_light(color _c)
: m_emit(std::make_shared<solid_color_texture>(_c)), m_intensity(1.0), m_invisible(true), m_directional(true) {}
: m_emit(std::make_shared<solid_color_texture>(_c)), m_intensity(1.0), m_invisible(true), m_directional(true)
{
}

diffuse_light::diffuse_light(color _c, double _intensity)
: m_emit(std::make_shared<solid_color_texture>(_c)), m_intensity(_intensity), m_directional(true), m_invisible(true)
{
}

diffuse_light::diffuse_light(color _c, double _intensity, bool _directional, bool _invisible)
: m_emit(std::make_shared<solid_color_texture>(_c)), m_intensity(_intensity), m_directional(_directional), m_invisible(_invisible)
Expand Down
4 changes: 4 additions & 0 deletions core/materials/diffuse_light.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,11 @@ class diffuse_light : public material
{
public:
diffuse_light(std::shared_ptr<texture> a);
diffuse_light(std::shared_ptr<texture> a, double _intensity);


diffuse_light(color _c);
diffuse_light(color _c, double _intensity);
diffuse_light(color _c, double _intensity, bool _directional, bool _invisible);

color emitted(const ray& r_in, const hit_record& rec, double u, double v, const point3& p) const override;
Expand Down
Loading

0 comments on commit 89ea628

Please sign in to comment.