Skip to content

Commit 02f4dd0

Browse files
Added absorption
1 parent 2c91e93 commit 02f4dd0

File tree

6 files changed

+18
-11
lines changed

6 files changed

+18
-11
lines changed

src/Main.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -336,9 +336,9 @@ void MainLoop(void* arg)
336336
// Material Properties
337337
Vec3 *albedo = &scene->materials[scene->meshInstances[selectedInstance].materialID].albedo;
338338
Vec3 *emission = &scene->materials[scene->meshInstances[selectedInstance].materialID].emission;
339+
Vec3 *extinction = &scene->materials[scene->meshInstances[selectedInstance].materialID].extinction;
339340

340341
objectPropChanged |= ImGui::ColorEdit3("Albedo", (float*)albedo, 0);
341-
//objectPropChanged |= ImGui::ColorEdit3("Emission", (float*)emission, 0);
342342
objectPropChanged |= ImGui::SliderFloat("Metallic", &scene->materials[scene->meshInstances[selectedInstance].materialID].metallic, 0.001f, 1.0f);
343343
objectPropChanged |= ImGui::SliderFloat("Roughness", &scene->materials[scene->meshInstances[selectedInstance].materialID].roughness, 0.001f, 1.0f);
344344
objectPropChanged |= ImGui::SliderFloat("Specular", &scene->materials[scene->meshInstances[selectedInstance].materialID].specular, 0.001f, 1.0f);
@@ -351,6 +351,7 @@ void MainLoop(void* arg)
351351
objectPropChanged |= ImGui::SliderFloat("ClearcoatGloss", &scene->materials[scene->meshInstances[selectedInstance].materialID].clearcoatGloss, 0.001f, 1.0f);
352352
objectPropChanged |= ImGui::SliderFloat("Transmission", &scene->materials[scene->meshInstances[selectedInstance].materialID].transmission, 0.001f, 1.0f);
353353
objectPropChanged |= ImGui::SliderFloat("Ior", &scene->materials[scene->meshInstances[selectedInstance].materialID].ior, 1.0f, 2.0f);
354+
objectPropChanged |= ImGui::ColorEdit3("Extinction", (float*)extinction, 0);
354355

355356
// Transforms Properties
356357
ImGui::Separator();

src/core/Material.h

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,11 @@ namespace GLSLPT
5757

5858
transmission = 0.0f;
5959
ior = 1.45f;
60-
unused1 = 0.0f;
61-
unused2 = 0.0f;
60+
extinction = Vec3(0.0f, 0.0f, 0.0f);
6261

6362
albedoTexID = -1.0f;
6463
metallicRoughnessTexID = -1.0f;
6564
normalmapTexID = -1.0f;
66-
unused3 = 0.0f;
6765
};
6866

6967
Vec3 albedo;
@@ -84,12 +82,10 @@ namespace GLSLPT
8482

8583
float transmission;
8684
float ior;
87-
float unused1;
88-
float unused2;
85+
Vec3 extinction;
8986

9087
float albedoTexID;
9188
float metallicRoughnessTexID;
9289
float normalmapTexID;
93-
float unused3;
9490
};
9591
}

src/loaders/Loader.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ namespace GLSLPT
111111
sscanf(line, " clearcoatGloss %f", &material.clearcoatGloss);
112112
sscanf(line, " transmission %f", &material.transmission);
113113
sscanf(line, " ior %f", &material.ior);
114-
114+
sscanf(line, " extinction %f %f %f", &material.extinction.x, &material.extinction.y, &material.extinction.z);
115115
sscanf(line, " albedoTexture %s", albedoTexName);
116116
sscanf(line, " metallicRoughnessTexture %s", metallicRoughnessTexName);
117117
sscanf(line, " normalTexture %s", normalTexName);

src/shaders/common/disney.glsl

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,14 @@ vec3 DisneyEval(in Ray ray, inout State state, in vec3 bsdfDir)
150150
// TODO: Fix bsdf for microfacet transmission
151151
if (state.mat.transmission > 0.0)
152152
{
153+
vec3 transmittance = vec3(1.0);
154+
vec3 extinction = log(state.mat.extinction);
155+
156+
if (dot(state.normal, state.ffnormal) < 0.0)
157+
transmittance = exp(extinction * state.hitDist);
158+
153159
if (dot(N, L) <= 0.0)
154-
bsdf = state.mat.albedo / abs(NDotL);
160+
bsdf = state.mat.albedo * transmittance / abs(NDotL);
155161
else
156162
{
157163
float a = max(0.001, state.mat.roughness);

src/shaders/common/globals.glsl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ struct Material
5959
float clearcoatGloss;
6060
float transmission;
6161
float ior;
62-
vec4 texIDs;
62+
vec3 extinction;
63+
vec3 texIDs;
6364
};
6465

6566
struct Camera

src/shaders/common/pathtrace.glsl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ void GetMaterialsAndTextures(inout State state, in Ray r)
7272
vec4 param3 = texelFetch(materialsTex, ivec2(index * 6 + 2, 0), 0);
7373
vec4 param4 = texelFetch(materialsTex, ivec2(index * 6 + 3, 0), 0);
7474
vec4 param5 = texelFetch(materialsTex, ivec2(index * 6 + 4, 0), 0);
75-
mat.texIDs = texelFetch(materialsTex, ivec2(index * 6 + 5, 0), 0);
75+
vec4 param6 = texelFetch(materialsTex, ivec2(index * 6 + 5, 0), 0);
7676

7777
mat.albedo = param1.xyz;
7878
mat.specular = param1.w;
@@ -93,6 +93,9 @@ void GetMaterialsAndTextures(inout State state, in Ray r)
9393
mat.transmission = param5.x;
9494
mat.ior = param5.y;
9595

96+
mat.extinction = vec3(param5.zw, param6.x);
97+
mat.texIDs = vec3(param6.yzw);
98+
9699
vec2 texUV = state.texCoord;
97100
texUV.y = 1.0 - texUV.y;
98101

0 commit comments

Comments
 (0)