Skip to content

Commit e6e171a

Browse files
committed
-Change: Change in hair shader and material
1 parent 0200837 commit e6e171a

File tree

4 files changed

+64
-63
lines changed

4 files changed

+64
-63
lines changed

include/engine/core/materials/hair_strand.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ class HairStrandMaterial2 : public HairStrandMaterial
250250
public:
251251
HairStrandMaterial2(HairPigmentType pigment = BLONDE)
252252
: HairStrandMaterial(Vec4(0.0), {}, "hairstr2") {
253+
m_coloredScatter = true;
253254
TextureSettings settings{};
254255
settings.useMipmaps = false;
255256
settings.adressMode = ADDRESS_MODE_CLAMP_TO_EDGE;

resources/shaders/forward/hair_strand2.glsl

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,8 @@ layout(set = 1, binding = 1) uniform MaterialUniforms {
144144
float density;
145145

146146
bool glints;
147-
bool useScatter;
148-
bool coloredScatter;
147+
bool localScatter;
148+
bool globalScatter;
149149
bool r;
150150

151151
bool tt;
@@ -176,7 +176,7 @@ vec3 computeAmbient(vec3 n) {
176176
0.0, 1.0, 0.0,
177177
s, 0.0, c);
178178
vec3 rotatedNormal = normalize(rotationY * n);
179-
179+
bsdf.tt = false;
180180
ambient = evalMarschnerLookupBSDF(
181181
rotatedNormal,
182182
normalize(-g_pos),
@@ -190,12 +190,7 @@ vec3 computeAmbient(vec3 n) {
190190
nGITex2,
191191
vec3(0.5),
192192
vec3(0.5),
193-
0.1,
194-
material.r,
195-
false,
196-
material.trt,
197-
material.useScatter);
198-
193+
0.1);
199194

200195
// ambient = (scene.ambientIntensity * scene.ambientColor) ;
201196
}else{
@@ -207,11 +202,16 @@ vec3 computeAmbient(vec3 n) {
207202
void main() {
208203

209204
//BSDF setup ............................................................
210-
bsdf.tangent = normalize(g_dir);
211-
bsdf.Rpower = material.Rpower;
212-
bsdf.TTpower = material.TTpower;
213-
bsdf.TRTpower = material.TRTpower;
214-
bsdf.density = material.density;
205+
bsdf.tangent = normalize(g_dir);
206+
bsdf.Rpower = material.Rpower;
207+
bsdf.TTpower = material.TTpower;
208+
bsdf.TRTpower = material.TRTpower;
209+
bsdf.density = material.density;
210+
bsdf.r = material.r;
211+
bsdf.tt = material.tt;
212+
bsdf.trt = material.trt;
213+
bsdf.localScatter = material.localScatter;
214+
bsdf.globalScatter = material.globalScatter;
215215

216216

217217
//DIRECT LIGHTING .......................................................
@@ -242,11 +242,7 @@ void main() {
242242
nGITex2,
243243
shadow,
244244
spread,
245-
directFraction,
246-
material.r,
247-
material.tt,
248-
material.trt,
249-
material.useScatter);
245+
directFraction);
250246

251247
color += lighting;
252248
}

resources/shaders/scripts/BRDFs/marschner_LUT_BSDF.glsl

Lines changed: 41 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ struct MarschnerLookupBSDF{
3131
float TTpower;
3232
float TRTpower;
3333
float density;
34+
//Options
35+
bool r;
36+
bool tt;
37+
bool trt;
38+
bool localScatter;
39+
bool globalScatter;
3440
};
3541

3642
//Longitudinal TERM (Gaussian Distribution)
@@ -102,23 +108,21 @@ vec3 computeHairShadow(LightUniform light,int lightId, sampler2DArray shadowMap,
102108

103109

104110
vec3 evalMarschnerLookupBSDF(
105-
vec3 wi, //Light vector
106-
vec3 v, //View vector
107-
vec3 irradiance,
111+
vec3 wi, //Light vector
112+
vec3 v, //View vector
113+
vec3 irradiance, //Li
108114
MarschnerLookupBSDF bsdf,
115+
//LUTs
109116
sampler2D texN,
110117
sampler2D texNTRT,
111118
sampler3D texGI,
112119
sampler2D texGI_M,
113120
sampler2D texGI_N,
114121
sampler2D texGI_NTRT,
122+
//Factors
115123
vec3 transDirect,
116124
vec3 spread,
117-
float directFraction,
118-
bool r,
119-
bool tt,
120-
bool trt,
121-
bool scatter)
125+
float directFraction)
122126
{
123127

124128
//Theta
@@ -163,53 +167,55 @@ vec3 evalMarschnerLookupBSDF(
163167
float MTT = M(thH - TT_SHIFT ,TT_DEV);
164168
float MTRT = M(thH - TRT_SHIFT ,TRT_DEV);
165169

166-
float R = r ? MR * NR * bsdf.Rpower : 0.0;
167-
vec3 TT = tt ? MTT * NTT * bsdf.TTpower : vec3(0.0);
168-
vec3 TRT = trt ? MTRT * NTRT * bsdf.TRTpower: vec3(0.0);
170+
float R = bsdf.r ? MR * NR * bsdf.Rpower : 0.0;
171+
vec3 TT = bsdf.tt ? MTT * NTT * bsdf.TTpower : vec3(0.0);
172+
vec3 TRT = bsdf.trt ? MTRT * NTRT * bsdf.TRTpower: vec3(0.0);
169173

170174
vec3 color = R+TT+TRT;
171175

172-
if(scatter){
173176
//////////////////////////////////////////////////////////////////////////
174177
// Local Scattering
175178
//////////////////////////////////////////////////////////////////////////
176-
179+
vec3 gi = vec3(0.0);
177180
float ix_thH = thH * ONE_OVER_PI * 0.5 + 0.5;
178181
vec3 ix_spread = sqrt(spread) * ONE_OVER_PI* 0.5;
179182

180-
vec3 gi;
181-
gi.r = DENSITY * texture( texGI, vec3( ix_spread.r, 1-ix_thH, ix_th ) ).r;
182-
gi.g = DENSITY * texture( texGI, vec3( ix_spread.g, 1-ix_thH, ix_th ) ).g;
183-
gi.b = DENSITY * texture( texGI, vec3( ix_spread.b, 1-ix_thH, ix_th ) ).b;
183+
if(bsdf.localScatter){
184+
184185

185-
color += gi;
186-
color *= directFraction;
186+
gi.r = DENSITY * texture( texGI, vec3( ix_spread.r, 1-ix_thH, ix_th ) ).r;
187+
gi.g = DENSITY * texture( texGI, vec3( ix_spread.g, 1-ix_thH, ix_th ) ).g;
188+
gi.b = DENSITY * texture( texGI, vec3( ix_spread.b, 1-ix_thH, ix_th ) ).b;
187189

190+
color += gi;
191+
color *= directFraction;
192+
193+
}
188194
//////////////////////////////////////////////////////////////////////////
189195
// Global Scattering
190196
//////////////////////////////////////////////////////////////////////////
197+
if(bsdf.globalScatter){
191198

192-
vec3 trans = transDirect - directFraction;
199+
vec3 trans = transDirect - directFraction;
193200

194-
//N
195-
vec4 N_GI = texture(texGI_N, index1 );
196-
float NR_GI = N_GI.a;
197-
vec3 NTT_GI = N_GI.rgb;
198-
vec3 NTRT_GI = texture(texGI_NTRT, index2 ).rgb;
201+
//N
202+
vec4 N_GI = texture(texGI_N, index1 );
203+
float NR_GI = N_GI.a;
204+
vec3 NTT_GI = N_GI.rgb;
205+
vec3 NTRT_GI = texture(texGI_NTRT, index2 ).rgb;
199206

200-
//M
201-
vec3 M_GIr = texture(texGI_M, vec2(ix_spread.r, 1-ix_thH) ).xyz;
202-
vec3 M_GIg = texture(texGI_M, vec2(ix_spread.g, 1-ix_thH) ).xyz;
203-
vec3 M_GIb = texture(texGI_M, vec2(ix_spread.b, 1-ix_thH) ).xyz;
207+
//M
208+
vec3 M_GIr = texture(texGI_M, vec2(ix_spread.r, 1-ix_thH) ).xyz;
209+
vec3 M_GIg = texture(texGI_M, vec2(ix_spread.g, 1-ix_thH) ).xyz;
210+
vec3 M_GIb = texture(texGI_M, vec2(ix_spread.b, 1-ix_thH) ).xyz;
204211

205-
vec3 MR_GI = vec3( M_GIr.x, M_GIg.x, M_GIb.x );
206-
vec3 MTT_GI = vec3( M_GIr.y, M_GIg.y, M_GIb.y );
207-
vec3 MTRT_GI = vec3( M_GIr.z, M_GIg.z, M_GIb.z );
212+
vec3 MR_GI = vec3( M_GIr.x, M_GIg.x, M_GIb.x );
213+
vec3 MTT_GI = vec3( M_GIr.y, M_GIg.y, M_GIb.y );
214+
vec3 MTRT_GI = vec3( M_GIr.z, M_GIg.z, M_GIb.z );
208215

209-
vec3 f_indir = trans * DENSITY * ( gi + MR_GI*NR_GI + MTT_GI*NTT_GI + MTRT_GI*NTRT_GI ); // N components already divided by PI
210-
color += f_indir;
216+
vec3 f_indir = trans * DENSITY * ( gi + MR_GI*NR_GI + MTT_GI*NTT_GI + MTRT_GI*NTRT_GI ); // N components already divided by PI
217+
color += f_indir;
211218

212-
// color += gi * 0.1;
213219
}
214220
//////////////////////////////////////////////////////////////////////////
215221

src/tools/widgets.cpp

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -723,24 +723,22 @@ void ObjectExplorerWidget::render() {
723723
mat->set_ior(ior); // Update index of refraction
724724
}
725725

726-
bool glints = mat->get_glints();
727-
if (ImGui::Checkbox("Glints", &glints))
728-
{
729-
mat->set_glints(glints); // Update glints
730-
}
731-
732726
bool useScatter = mat->get_useScatter();
733-
if (ImGui::Checkbox("Use Scatter", &useScatter))
727+
if (ImGui::Checkbox("Local Scatter", &useScatter))
734728
{
735729
mat->set_useScatter(useScatter); // Update use scatter
736730
}
737731

738732
bool coloredScatter = mat->get_coloredScatter();
739-
if (ImGui::Checkbox("Colored Scatter", &coloredScatter))
733+
if (ImGui::Checkbox("Global Scatter", &coloredScatter))
740734
{
741735
mat->set_coloredScatter(coloredScatter); // Update colored scatter
742736
}
743-
737+
bool glints = mat->get_glints();
738+
if (ImGui::Checkbox("Glints", &glints))
739+
{
740+
mat->set_glints(glints); // Update glints
741+
}
744742
bool occlusion = mat->get_occlusion();
745743
if (ImGui::Checkbox("Occlusion", &occlusion))
746744
{

0 commit comments

Comments
 (0)