OpenGL lighting
This commit is contained in:
parent
5518dae1d7
commit
f7127e0878
28 changed files with 873 additions and 188 deletions
77
resources/EngineResources/GLShaders/scene_frag_deferred.glsl
Normal file
77
resources/EngineResources/GLShaders/scene_frag_deferred.glsl
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
#version 450
|
||||
|
||||
const int MAX_TEXTURES = 256;
|
||||
|
||||
out vec4 outPos;
|
||||
out vec3 outNormal;
|
||||
out vec3 outTangent;
|
||||
out vec3 outBitangent;
|
||||
out vec2 outTextCoords;
|
||||
|
||||
out vec4 outAlbedo ;
|
||||
out vec4 outPosition;
|
||||
out vec4 outNormals;
|
||||
out vec4 outPBR;
|
||||
|
||||
struct Material {
|
||||
vec4 diffuse;
|
||||
int hasTexture;
|
||||
int hasNormalMap;
|
||||
int hasRoughMap;
|
||||
float roughnessFactor;
|
||||
float metallicFactor;
|
||||
};
|
||||
|
||||
uniform sampler2D textureSampler;
|
||||
uniform sampler2D normalSampler;
|
||||
uniform sampler2D roughnessSampler;
|
||||
uniform Material material;
|
||||
|
||||
vec3 calcNormal(Material material, vec3 normal, vec2 textCoords, mat3 TBN)
|
||||
{
|
||||
vec3 newNormal = normal;
|
||||
if (material.hasNormalMap > 0)
|
||||
{
|
||||
newNormal = texture(normalSampler, textCoords).rgb;
|
||||
newNormal = normalize(newNormal * 2.0 - 1.0);
|
||||
newNormal = normalize(TBN * newNormal);
|
||||
}
|
||||
return newNormal;
|
||||
}
|
||||
|
||||
layout(push_constant) uniform pc {
|
||||
layout(offset = 64) uint materialIdx;
|
||||
} push_constants;
|
||||
|
||||
void main()
|
||||
{
|
||||
outPosition = outPos;
|
||||
|
||||
if (material.hasTexture == 1) {
|
||||
outAlbedo = texture(textureSampler, outTextCoords);
|
||||
} else {
|
||||
outAlbedo = material.diffuse;
|
||||
}
|
||||
|
||||
|
||||
if(outAlbedo.a < 0.5) discard;
|
||||
|
||||
mat3 TBN = mat3( outTangent, outBitangent, outNormal);
|
||||
vec3 newNormal = calcNormal(material, outNormal, outTextCoords, TBN);
|
||||
outNormals = vec4(newNormal, 1.0f);
|
||||
|
||||
float ao = 0.5f;
|
||||
float roughnessFactor = 0.0f;
|
||||
float metallicFactor = 0.0f;
|
||||
if (material.hasRoughMap > 0) {
|
||||
vec4 metRoughValue = texture(roughnessSampler, outTextCoords);
|
||||
roughnessFactor = metRoughValue.g;
|
||||
metallicFactor = metRoughValue.b;
|
||||
} else {
|
||||
roughnessFactor = material.roughnessFactor;
|
||||
metallicFactor = material.metallicFactor;
|
||||
}
|
||||
|
||||
outPBR = vec4(ao, roughnessFactor, metallicFactor, 1.0f);
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue