//This shader file is part of FLAR - Advanced Renderer for Freelancer by Schmackbolzen //If you use the supplied shader files you may not modify them unless you state in them what you changed //and also mention the source or who the author is. //PBR lighting shader for FLAR by Schmackbolzen #version 330 #define MAX_SHADOWS $MAX_SHADOWS #define NUM_SPLITS $NUM_SPLITS out vec3 eyeVec; out vec3 v,vWorld,worldNormal; out mat3 tbnMatrix,tbnMatrixObj; out vec3 N; out vec4 shadowCoord[MAX_SHADOWS*NUM_SPLITS]; out vec4 texCoords; out mat3 worldRotMat; out float alphaValue; out float fogEnd; out float fogScale; struct glFogParameters { vec3 color; float density; float start; float end; }; uniform glFogParameters glFog; uniform mat4 depthBiasMVP[MAX_SHADOWS*NUM_SPLITS]; uniform mat4 modelViewMat; uniform mat4 projectionMat; uniform mat4 invViewMat; uniform mat4 textureMatrix[2]; uniform bool enableNormalMaps; uniform int shadowCount; uniform bool enableEnvMap; uniform bool isInstanced; uniform bool isInstancedTransparent; uniform bool isInstancedFog; uniform float matDiffuseAlpha; uniform int tex2Mode; uniform int texture1Index; layout (location = 0) in vec4 inPosition; layout (location = 1) in vec3 inNormal; layout (location = 2) in vec4 inColor; layout (location = 3) in vec4 inSecondColor; layout (location = 4) in vec4 inTexCoord0; layout (location = 5) in vec4 inTexCoord2; layout (location = 6) in mat4 inModelViewMatInstanced; layout (location = 10) in float inAlphaValueInstanced; layout (location = 11) in vec2 inFogStartEndInstanced; const mat4 biasMatrix = mat4(0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.5f, 0.5f, 0.5f, 1.0f); void main(void) { mat4 mv; if(!isInstanced) mv=modelViewMat; else mv=inModelViewMatInstanced; if(!isInstancedTransparent) { alphaValue = matDiffuseAlpha; } else { alphaValue = inAlphaValueInstanced; } if(!isInstancedFog) { fogEnd = glFog.end; fogScale = 1 / (glFog.end - glFog.start); } else { fogEnd = inFogStartEndInstanced.y; fogScale = 1 / (inFogStartEndInstanced.y - inFogStartEndInstanced.x); } mat3 normalMat = mat3(mv); v = vec3(mv * inPosition); mat4 worldMat = invViewMat*mv; if(enableEnvMap) { vWorld = vec3(worldMat * inPosition); worldRotMat = mat3(worldMat); worldNormal = worldRotMat * inNormal; } if (shadowCount > 0) { for(int i=0;i 1) for(int i=0;i