View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0004962 | The Dark Mod | Graphics | public | 17.01.2019 00:20 | 06.05.2019 02:52 |
Reporter | Nightcrawler | Assigned To | duzenko | ||
Priority | normal | Severity | normal | Reproducibility | always |
Status | resolved | Resolution | fixed | ||
Platform | Linux x64 | OS | Ubuntu | OS Version | 18.10 |
Product Version | TDM 2.07 | ||||
Target Version | TDM 2.07 | Fixed in Version | TDM 2.07 | ||
Summary | 0004962: Lightning stops working in TDM v2.07 | ||||
Description | Light sources do not produce any visible light in TDM v2.07beta. | ||||
Additional Information | I attached some screenshots of the same scenes in tdm v2.07 and tdm v2.06 to illustrate this issue. | ||||
Tags | No tags attached. | ||||
Attached Files | interaction_oldgl.fs (10,748 bytes)
#version 120 //#extension GL_EXT_gpu_shader4: enable #define DISABLE_STENCIL_TEXTURE //when = 1: the samples are filtered so that "halos" do not appear (new) // = 0: the samples are weighted based on heuristic (old) #define ENABLE_ANTI_HALO_PATCH 1 varying vec3 var_Position; varying vec3 var_WorldLightDir; varying vec3 var_tc0; varying vec3 var_tc6; varying vec2 var_TexDiffuse; varying vec2 var_TexNormal; varying vec2 var_TexSpecular; varying vec4 var_TexLight; varying mat3 var_TangentBitangentNormalMatrix; varying vec4 var_Color; //varying vec4 var_ScreenPos; uniform sampler2D u_normalTexture; uniform sampler2D u_lightFalloffTexture; uniform sampler2D u_lightProjectionTexture; uniform samplerCube u_lightProjectionCubemap; uniform sampler2D u_diffuseTexture; uniform sampler2D u_specularTexture; uniform sampler2D u_depthTexture; #ifndef DISABLE_STENCIL_TEXTURE uniform usampler2D u_stencilTexture; #endif //uniform samplerCubeShadow u_shadowMap; uniform samplerCube u_shadowMap; uniform vec4 u_lightOrigin; uniform vec3 u_lightOrigin2; uniform vec4 u_viewOrigin; uniform vec4 u_diffuseColor; uniform vec4 u_specularColor; uniform float u_shadows; uniform float u_advanced; uniform float u_cubic; uniform int u_softShadowsQuality; uniform float u_softShadowsRadius; uniform int u_shadowMipMap; uniform vec2 u_renderResolution; uniform mat4 u_modelMatrix; uniform float u_RGTC; // common local variables vec3 lightDir = u_lightOrigin.xyz - var_Position; vec3 viewDir = u_viewOrigin.xyz - var_Position; // compute normalized light, view and half angle vectors vec3 L = normalize( lightDir ); vec3 V = normalize( viewDir ); vec3 H = normalize( L + V ); // compute normal from normal map, move from [0, 1] to [-1, 1] range, normalize vec4 bumpTexel = texture2D ( u_normalTexture, var_TexNormal.st ) * 2. - 1.; vec3 RawN = u_RGTC == 1. ? vec3(bumpTexel.x, bumpTexel.y, sqrt(max(1.-bumpTexel.x*bumpTexel.x-bumpTexel.y*bumpTexel.y, 0))) : normalize( bumpTexel.wyz ); vec3 N = var_TangentBitangentNormalMatrix * RawN; float NdotH = clamp( dot( N, H ), 0.0, 1.0 ); float NdotL = clamp( dot( N, L ), 0.0, 1.0 ); float NdotV = clamp( dot( N, V ), 0.0, 1.0 ); vec3 lightColor() { // compute light projection and falloff vec3 lightColor; if (u_cubic == 1.0) { vec3 cubeTC = var_TexLight.xyz * 2.0 - 1.0; lightColor = textureCube(u_lightProjectionCubemap, cubeTC).rgb; float att = clamp(1.0-length(cubeTC), 0.0, 1.0); lightColor *= att*att; } else { vec3 lightProjection = texture2DProj( u_lightProjectionTexture, var_TexLight.xyw ).rgb; vec3 lightFalloff = texture2D( u_lightFalloffTexture, vec2( var_TexLight.z, 0.5 ) ).rgb; lightColor = lightProjection * lightFalloff; } return lightColor; } vec3 simpleInteraction() { // compute the diffuse term vec3 diffuse = texture2D( u_diffuseTexture, var_TexDiffuse ).rgb * u_diffuseColor.rgb; // compute the specular term float specularPower = 10.0; float specularContribution = pow( NdotH, specularPower ); vec3 specular = texture2D( u_specularTexture, var_TexSpecular ).rgb * specularContribution * u_specularColor.rgb; // compute lighting model vec3 finalColor = ( diffuse + specular ) * NdotL * lightColor() * var_Color.rgb; return finalColor; } vec3 advancedInteraction() { vec4 fresnelParms = vec4( 1.0, .23, .5, 1.0 ); vec4 fresnelParms2 = vec4( .2, .023, 120.0, 4.0 ); vec4 lightParms = vec4( .7, 1.8, 10.0, 30.0 ); vec3 diffuse = texture2D( u_diffuseTexture, var_TexDiffuse ).rgb; vec3 specular = vec3(0.026); //default value if texture not set?... if (dot(u_specularColor, u_specularColor) > 0.0) specular = texture2D( u_specularTexture, var_TexSpecular ).rgb; vec3 localL = normalize(var_tc0); vec3 localV = normalize(var_tc6); //must be done in tangent space, otherwise smoothing will suffer (see #4958) float NdotL = clamp(dot(RawN, localL), 0.0, 1.0); float NdotV = clamp(dot(RawN, localV), 0.0, 1.0); float NdotH = clamp(dot(RawN, normalize(localV + localL)), 0.0, 1.0); // fresnel part, ported from test_direct.vfp float fresnelTerm = pow(1.0 - NdotV, fresnelParms2.w); float rimLight = fresnelTerm * clamp(NdotL - 0.3, 0.0, fresnelParms.z) * lightParms.y; float specularPower = mix(lightParms.z, lightParms.w, specular.z); float specularCoeff = pow(NdotH, specularPower) * fresnelParms2.z; float fresnelCoeff = fresnelTerm * fresnelParms.y + fresnelParms2.y; vec3 specularColor = specularCoeff * fresnelCoeff * specular * (diffuse * 0.25 + vec3(0.75)); float R2f = clamp(localL.z * 4.0, 0.0, 1.0); float light = rimLight * R2f + NdotL; vec3 totalColor = (specularColor * R2f + diffuse) * light * u_diffuseColor.rgb * lightColor() * var_Color.rgb; return totalColor; } uniform vec2 u_softShadowsSamples[150]; //TODO: what cap is appropriate here? //returns eye Z coordinate with reversed sign (monotonically increasing with depth) float depthToZ(float depth) { float clipZ = 2.0 * depth - 1.0; float A = gl_ProjectionMatrix[2].z; float B = gl_ProjectionMatrix[3].z; return B / (A + clipZ); } #ifndef DISABLE_STENCIL_TEXTURE void StencilSoftShadow() { vec2 texSize = u_renderResolution; vec2 pixSize = vec2(1.0, 1.0) / texSize; vec2 baseTC = gl_FragCoord.xy * pixSize; float StTex = float(texture2D( u_stencilTexture, baseTC ).r); float stencil = clamp( 129. - StTex, 0., 1.); float sumWeight = 1.; float LightDist = min(length(lightDir), 1e3); // crutch ! //radius of light source float lightRadius = u_softShadowsRadius; //radius of one-point penumbra at the consided point (in world coordinates) //note that proper formula is: lightRadius * (LightDist - OcclDist) / OcclDist; float blurRadiusWorld = lightRadius * LightDist / 66.6666; //TODO: revert?! //project direction to light onto surface vec3 normal = var_TangentBitangentNormalMatrix[2]; vec3 alongDirW = normalize(lightDir - dot(lightDir, normal) * normal); //get orthogonal direction on surface vec3 orthoDirW = cross(normal, alongDirW); //multiply the two axes by penumbra radius alongDirW *= blurRadiusWorld / max(NdotL, 0.2); //penumbra is longer by (1/cos(a)) in light direction orthoDirW *= blurRadiusWorld; //convert both vectors into clip space (get only X and Y components) vec2 alongDir = (mat3(gl_ModelViewProjectionMatrix) * alongDirW).xy; vec2 orthoDir = (mat3(gl_ModelViewProjectionMatrix) * orthoDirW).xy; //now also get W component from multiplication by gl_ModelViewProjectionMatrix vec3 mvpRow3 = vec3(gl_ModelViewProjectionMatrix[0][3], gl_ModelViewProjectionMatrix[1][3], gl_ModelViewProjectionMatrix[2][3]); float along_w = dot(mvpRow3, alongDirW); float ortho_w = dot(mvpRow3, orthoDirW); //this is perspective correction: it is necessary because W component in clip space also varies //if you remove it and look horizontally parallel to a wall, then vertical shadow boundaries on this wall won't be blurred vec2 thisNdc = (2 * baseTC - vec2(1)); alongDir -= thisNdc * along_w; orthoDir -= thisNdc * ortho_w; //divide by clip W to get NDC coords (screen coords are half of them) alongDir *= gl_FragCoord.w / 2; orthoDir *= gl_FragCoord.w / 2; //Note: if you want to check the math just above, consider how screen position changes when a point moves in specified direction: // F(t) = divideByW(gl_ModelViewProjectionMatrix * (var_Position + dir_world * t)).xy //the converted vector must be equal to the derivative by parameter: // dir_screen = dF/dt (0) //(here [dir_world, dir_screen] are either [alongDirW, alongDir] or [orthoDirW, orthoDir]) //estimate the length of spot ellipse vectors (in pixels) float lenX = length(alongDir * texSize); float lenY = length(orthoDir * texSize); //make sure vectors are sufficiently sampled float avgSampleDistInPixels = 2 * max(1e-3 * texSize.y, 1.0); float oversize = max(lenX, lenY) / (avgSampleDistInPixels * sqrt(0.0 + u_softShadowsQuality)); if (oversize > 1) { alongDir /= oversize; orthoDir /= oversize; } #if ENABLE_ANTI_HALO_PATCH //compute partial derivatives of eye -Z by screen X and Y (normalized) float Z00 = depthToZ(gl_FragCoord.z); vec2 dzdxy = vec2(dFdx(Z00), dFdy(Z00)); //this is a stupid version, which gets derivatives from depth texture: /* float Z00 = depthToZ(texture(u_depthTexture, baseTC).r); float Zp0 = depthToZ(texture(u_depthTexture, baseTC + vec2(pixSize.x, 0)).r); float Zm0 = depthToZ(texture(u_depthTexture, baseTC - vec2(pixSize.x, 0)).r); float Z0p = depthToZ(texture(u_depthTexture, baseTC + vec2(0, pixSize.y)).r); float Z0m = depthToZ(texture(u_depthTexture, baseTC - vec2(0, pixSize.y)).r); float dzdx = (abs(Zp0 - Z00) < abs(Z00 - Zm0) ? Zp0 - Z00 : Z00 - Zm0); float dzdy = (abs(Z0p - Z00) < abs(Z00 - Z0m) ? Z0p - Z00 : Z00 - Z0m); vec2 dzdxy = vec2(dzdx, dzdy);*/ //rescale to derivatives by texture coordinates (not pixels) dzdxy *= texSize; //compute Z derivatives on a theoretical wall visible under 45-degree angle vec2 tanFovHalf = vec2(1.0 / gl_ProjectionMatrix[0][0], 1.0 / gl_ProjectionMatrix[1][1]); vec2 canonDerivs = 2.0 * Z00 * tanFovHalf; #endif for( int i = 0; i < u_softShadowsQuality; i++ ) { vec2 delta = u_softShadowsSamples[i].x * alongDir + u_softShadowsSamples[i].y * orthoDir; vec2 StTc = baseTC + delta; #if ENABLE_ANTI_HALO_PATCH float Zdiff = depthToZ(texture2D(u_depthTexture, StTc).r) - Z00; float tangentZdiff = dot(dzdxy, delta); float deg45diff = dot(canonDerivs, abs(delta)); float weight = float(abs(Zdiff - tangentZdiff) <= abs(tangentZdiff) * 0.5 + deg45diff * 0.2); #else float ZDiff = (gl_FragCoord.z-texture( u_depthTexture, StTc ).r) / gl_FragCoord.w; float weight = 1. / (1. + ZDiff*ZDiff); #endif float StTex = float(texture2D( u_stencilTexture, StTc ).r); stencil += clamp( 129. - StTex, 0., 1. ) * weight; sumWeight += weight; } gl_FragColor.rgb *= stencil / sumWeight; /*vec2 StTc = baseTC + vec2(1, 0) * 1e-2; StTex = texture( u_stencilTexture, StTc ).r; stencil = .25*(128. - StTex); gl_FragColor.rgb = vec3(stencil, -stencil, stencil==0?.3:0); */ } #endif void main() { if (u_advanced == 1.0) gl_FragColor.rgb = advancedInteraction(); else gl_FragColor.rgb = simpleInteraction(); #ifndef DISABLE_STENCIL_TEXTURE if (u_shadows == 1. && u_softShadowsQuality > 0) StencilSoftShadow(); #endif gl_FragColor.a = 1.0; } | ||||
Any relation to this? http://forums.thedarkmod.com/topic/19807-lights-not-working-fixed/ | |
Does this happen if you set r_useGLSL 0 ? Please post a condump and your Darkmod.cfg |
|
Also: DRM 3.26.0, 4.18.0-13-generic Does lighting work if you use AMD's non-free drivers? |
|
Yes, this http://forums.thedarkmod.com/topic/19807-lights-not-working-fixed/ seems to be the same. Setting r_useGLSL 0 fixed it for me. I uploaded my darkmod.cfg if that's still useful |
|
How about the shader compile log? I believe you're on nVidia 7600? Or Intel? |
|
No, I'm on AMD Radeon R5. Not sure where/how to get the shader compile log |
|
The backtrace from 4961 has GL logging but we normally would want the results from: 1) Open Console 2) reloadGLSLprograms 3) Condump mygraphicissue.txt thanks |
|
Ok, there you go | |
Per stgatilov: Too late in the development cycle to risk global changes to GL version support. Updated shaders may be supplied at Moddb when a consensus has been reached about the best approach. |
|
I have the same problem in VMWare Linux VM. It has: OpenGL vendor: VMware, Inc. OpenGL renderer: Gallium 0.4 on SVGA3D; build: RELEASE; LLVM; OpenGL version: 3.0 Mesa 12.0.6 v - using GL version 2.0 (core) I cannot see any sort of lights in any mode. In fact, we now have stupid problem: 1) If we leave GL_EXT_gpu_shader4 extension in shader, then old GL2 cards and some new Linux drivers cannot get interaction lights working in any mode. Even with hard stencil shadows, which don't actually need this extension. 2) If we remove GL_EXT_gpu_shader4 extension in shader, then most of the cards can stop working with Stencil shadows because of syntax error (using type undefined in GLSL 1.20). What this story teaches us? 1) Always enable new features by conditional compilation, don't use only uniforms for that. Just like you do #ifdef in C++. 2) GL3 core profile is really important if we want to get TDM friendly to wide range of drivers. |
|
Switch to shadow maps if GL_EXT_gpu_shader4 not supported and gl version >= 4? | |
Geometry shaders extension is not supported (and core geometry shaders too since it is GL 3.0) =) We have two workarounds for people with this problem. Applying either of them is enough: 1) Set "r_useGLSL 0" and restart to revert to old shaders. 2) Download file "interaction_oldgl.fs" from here, and rename it into file "glprogs/interaction.fs" (this path is relative to TDM installation root dir). I hope the whole mess with extensions will go away by TDM 2.08. |
|
I mean the particular problem reported by actual users, not your experience with VMWare | |
@Nightcrawler Can you try the current MESA driver version? |
|
At revision: 7948 Revision: 15621 |
|
Please could anyone test and report this | |
Just tested the latest 2.07-hotfix and that bug is gone :) No need to install the newest MESA driver (atm I use OpenGL version: 4.4 Mesa 18.2.8). Sorry for the waiting... |
|
Ready to close? | |
Fixed in 2.07-hotfix (just released). | |
Date Modified | Username | Field | Change |
---|---|---|---|
17.01.2019 00:20 | Nightcrawler | New Issue | |
17.01.2019 00:20 | Nightcrawler | File Added: light_bug_screenshots.zip | |
17.01.2019 02:09 | Springheel | Note Added: 0011368 | |
17.01.2019 02:23 | nbohr1more | Note Added: 0011370 | |
17.01.2019 02:26 | nbohr1more | Note Added: 0011371 | |
17.01.2019 11:11 | STiFU | Status | new => acknowledged |
17.01.2019 11:11 | STiFU | Product Version | => TDM 2.07 |
17.01.2019 11:11 | STiFU | Target Version | => TDM 2.07 |
17.01.2019 19:05 | Nightcrawler | File Added: Darkmod.cfg | |
17.01.2019 19:08 | Nightcrawler | Note Added: 0011400 | |
18.01.2019 12:40 | duzenko | Note Added: 0011403 | |
18.01.2019 12:58 | Nightcrawler | Note Added: 0011406 | |
18.01.2019 15:27 | nbohr1more | Relationship added | related to 0004961 |
18.01.2019 15:28 | nbohr1more | Note Added: 0011411 | |
20.01.2019 16:13 | Nightcrawler | File Added: graphicsIssue.dump | |
20.01.2019 16:15 | Nightcrawler | Note Added: 0011447 | |
22.01.2019 15:37 | nbohr1more | Note Added: 0011473 | |
22.01.2019 15:37 | nbohr1more | Target Version | TDM 2.07 => TDM 2.08 |
22.01.2019 15:39 | nbohr1more | Note Edited: 0011473 | |
27.01.2019 13:36 | stgatilov | Note Added: 0011517 | |
27.01.2019 13:37 | stgatilov | Note Edited: 0011517 | |
27.01.2019 14:40 | duzenko | Note Added: 0011518 | |
28.01.2019 12:53 | stgatilov | Note Added: 0011520 | |
28.01.2019 12:54 | stgatilov | Note Edited: 0011520 | |
28.01.2019 12:54 | stgatilov | File Added: interaction_oldgl.fs | |
28.01.2019 13:28 | duzenko | Note Added: 0011521 | |
03.02.2019 15:06 | duzenko | Note Added: 0011537 | |
09.02.2019 09:33 | duzenko | Assigned To | => duzenko |
09.02.2019 09:33 | duzenko | Status | acknowledged => assigned |
09.02.2019 09:35 | duzenko | Note Added: 0011553 | |
09.02.2019 09:35 | duzenko | Status | assigned => resolved |
09.02.2019 09:35 | duzenko | Fixed in Version | => SVN |
09.02.2019 09:35 | duzenko | Resolution | open => fixed |
19.02.2019 18:27 | duzenko | Note Added: 0011625 | |
19.02.2019 18:28 | duzenko | Status | resolved => feedback |
19.02.2019 18:28 | duzenko | Resolution | fixed => reopened |
29.03.2019 23:55 | Nightcrawler | Note Added: 0011699 | |
29.03.2019 23:55 | Nightcrawler | Status | feedback => assigned |
05.05.2019 17:41 | duzenko | Note Added: 0011784 | |
06.05.2019 02:52 | stgatilov | Target Version | TDM 2.08 => TDM 2.07 |
06.05.2019 02:52 | stgatilov | Note Added: 0011786 | |
06.05.2019 02:52 | stgatilov | Status | assigned => resolved |
06.05.2019 02:52 | stgatilov | Fixed in Version | SVN => TDM 2.07 |
06.05.2019 02:52 | stgatilov | Resolution | reopened => fixed |