1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
#ifndef CUSTOM_MATERIAL_FRAG_BODY_GLSLLIB
#define CUSTOM_MATERIAL_FRAG_BODY_GLSLLIB
bool twoSided = false;
vec3 materialEmissive = vec3( 0.0f, 0.0f, 0.0f );
float materialIOR = computeIOR();
if ( gl_FrontFacing )
{
materialEmissive = computeFrontMaterialEmissive() * computeMaterialEmissiveMask();
}
else
{
materialIOR = 1.0f / materialIOR;
twoSided = evalTwoSided();
if ( twoSided )
{
normal = -normal;
materialEmissive = computeBackMaterialEmissive() * computeMaterialEmissiveMask();
}
}
vec4 rgba = vec4( materialEmissive, 0.0f );
vec3 lightAmbient, lightDiffuse, lightSpecular, L;
for ( int i=0 ; i<uNumLights ; i++ )
{
sampleLight( lights[i], varWorldPos, L, lightAmbient, lightDiffuse, lightSpecular);
//evalTemporariesPerLightSource( normal, L, lightDiffuse, lightSpecular, materialIOR );
if (gl_FrontFacing)
computeFrontLayerColor( normal, L, viewDir, lightDiffuse, lightSpecular, materialIOR, 1.0 );
else
computeBackLayerColor( normal, L, viewDir, lightDiffuse, lightSpecular, materialIOR, 1.0 );
}
for ( int i=0 ; i < uNumAreaLights; ++i )
{
if (gl_FrontFacing)
computeFrontAreaColor( i, arealights[i].diffuse, arealights[i].specular );
else
computeBackAreaColor( i, arealights[i].diffuse, arealights[i].specular );
}
if ( 0.0f < alpha )
{
if (gl_FrontFacing)
computeFrontLayerEnvironment( normal, viewDir, 1.0 );
else
computeBackLayerEnvironment( normal, viewDir, 1.0 );
}
rgba += computeLayerWeights( alpha );
#endif
|