OpenGL works again, Vulkan can be switched to, fixed most of the vulkan validation errors, better shadows, soft shadows, emissive lighting, and multiple different opacity rendering methods
This commit is contained in:
parent
0d41f3e15b
commit
5b231d6920
54 changed files with 1102 additions and 268 deletions
|
|
@ -12,6 +12,9 @@ layout(location = 1) out vec4 outAlbedo ;
|
|||
layout(location = 0) out vec4 outPos;
|
||||
layout(location = 2) out vec4 outNormal;
|
||||
layout(location = 3) out vec4 outPBR;
|
||||
layout(location = 4) out vec4 outEmissive;
|
||||
layout(location = 5) out vec4 outTranslucency;
|
||||
layout(location = 6) out vec4 outOpacity;
|
||||
|
||||
const float bayerMatrix[16] = float[](
|
||||
0.0 / 16.0, 8.0 / 16.0, 2.0 / 16.0, 10.0 / 16.0,
|
||||
|
|
@ -21,15 +24,24 @@ const float bayerMatrix[16] = float[](
|
|||
);
|
||||
|
||||
struct Material {
|
||||
vec4 diffuseColor;
|
||||
uint hasTexture;
|
||||
uint textureIdx;
|
||||
uint hasNormalMap;
|
||||
uint normalMapIdx;
|
||||
uint hasRoughMap;
|
||||
uint roughMapIdx;
|
||||
float roughnessFactor;
|
||||
float metallicFactor;
|
||||
vec4 diffuseColor; //16
|
||||
uint hasTexture; //20
|
||||
uint textureIdx; //24
|
||||
uint hasNormalMap; //28
|
||||
uint normalMapIdx; //32
|
||||
uint hasRoughMap; //36
|
||||
uint roughMapIdx; //40
|
||||
float roughnessFactor; //44
|
||||
float metallicFactor; //48
|
||||
vec4 emissiveColour; //64
|
||||
uint hasEmissiveMap; //68
|
||||
uint emissiveMapIdx; //72
|
||||
uint hasTranslucencyMap; //76
|
||||
uint translucencyMapIdx; //80
|
||||
float translucencyFactor; //84
|
||||
uint hasOpacityMap; //88
|
||||
uint OpacityMapIdx; //92
|
||||
float OpacityFactor; //96
|
||||
};
|
||||
layout(set = 2, binding = 0) readonly buffer MaterialUniform {
|
||||
Material materials[];
|
||||
|
|
@ -67,6 +79,19 @@ void main()
|
|||
int y = int(gl_FragCoord.y) % Intensity;
|
||||
float threshold = bayerMatrix[y * Intensity + x];
|
||||
if(outAlbedo.a < threshold || outAlbedo.a < 0.05f) discard;*/
|
||||
|
||||
vec4 Opacity = vec4(outAlbedo.a,outAlbedo.a,outAlbedo.a,1);
|
||||
if(material.OpacityFactor != 1) Opacity = vec4(material.OpacityFactor, material.OpacityFactor, material.OpacityFactor, 1);
|
||||
if(material.hasOpacityMap > 0 && material.OpacityMapIdx < MAX_TEXTURES){
|
||||
Opacity = texture(textSampler[material.OpacityMapIdx], inTextCoords);
|
||||
}
|
||||
outOpacity = Opacity;
|
||||
|
||||
float opacityf = Opacity.x + Opacity.y + Opacity.z;
|
||||
opacityf = opacityf/3;
|
||||
|
||||
outAlbedo = vec4(outAlbedo.rgb, opacityf);
|
||||
|
||||
if(outAlbedo.a < 0.75) discard;
|
||||
|
||||
|
||||
|
|
@ -86,6 +111,18 @@ void main()
|
|||
metallicFactor = material.metallicFactor;
|
||||
}
|
||||
|
||||
vec4 emissive = material.emissiveColour;
|
||||
if (material.hasEmissiveMap > 0 && material.emissiveMapIdx < MAX_TEXTURES) {
|
||||
emissive = texture(textSampler[material.emissiveMapIdx], inTextCoords);
|
||||
}
|
||||
outEmissive = emissive;
|
||||
|
||||
vec4 Translucency = vec4(material.translucencyFactor,material.translucencyFactor,material.translucencyFactor,1);
|
||||
if(material.hasTranslucencyMap > 0 && material.translucencyMapIdx < MAX_TEXTURES){
|
||||
Translucency = texture(textSampler[material.translucencyMapIdx], inTextCoords);
|
||||
}
|
||||
outTranslucency = Translucency;
|
||||
|
||||
outPBR = vec4(ao, roughnessFactor, metallicFactor, outAlbedo.a);
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue