Jump to content
The Dark Mod Forums


  • Content Count

  • Joined

  • Last visited

  • Days Won


HMart last won the day on November 11 2015

HMart had the most liked content!

Community Reputation

231 Excellent

About HMart

  • Rank
    Advanced Member

Recent Profile Visitors

287 profile views
  1. What you want i'm old man! But I do think that stencil shadows still look good, specially when soft edges are also available. Btw you still can find relatively modern games (indie mostly) with PCF based shadow maps at max 1024 rez and those look worse than stencil shadows IMO, specially worse when badly implemented shadow maps can flicker or have what is called shadow acne. https://computergraphics.stackexchange.com/questions/2192/cause-of-shadow-acne But yes modern AAA games pretty much stopped using Stencil shadows, and like I said before you can make maps look much more realistic, i'm aware of that.
  2. Agree but at least to me is playable enough. Btw right now afaik TDM is not using the ability to cast shadows from alpha images, unless I've played the wrong missions... so there should be no difference between the two, in the amount of shadows being cast i mean. But Imagine when eventually they make maps cast shadows from alpha textures, then the game will have more shadows per scene than stencil shadows, if they don't get deeply optimized, performance will suffer even more, compared to stencil, not a easy task. Btw i'm not sure but I imagine that totally removing stencil from the engine will not be easy, the engine code really being deeply connected to them and all, but I could be wrong. One thing is certain I don't envy the TDM coders "job".
  3. Like in all things where people are working for free and on their spare time be glad work is done at all. The things you really want to be implemented may never be, unless people with the knowledge and the free time do it, want to do it. But it never hurts to ask. If you don't mind the opinion of a random internet person, see the hidden content below to know more about stencil shadows and shadow maps.
  4. Agree. I think I do know of one old game whose engine and scripting was entirely made with python (very early python), Severance Blade of Darkness, the first game also that I saw using, per-pixel lighting, stencil shadows and rigid body physics.
  5. I know that but bsp is not something that idtech 4 can use exclusively, i'm sure you know that you can create a big "room" around a totally mesh based level and it will render fine, of course it will run like garbage, because the engine will not occlude anything, but that is where LOD and occluders could come in handy. Also not saying this should be done, is perfect or anything, it will have problems with AI AAS for example, just saying that if someone inclined wanted to modify the engine to support better "outside missions" it is not totally impossible.
  6. Doom Script is a high level scripting language made specifically for idtech 4, you cannot use it to do anything else but script idtech 4 based games. So it lacks many of the capabilities those languages you mentioned have, but because of that, is much much less complex than python, java, LUA, etc, those are generic languages with, like I said, many more capabilities than necessary for games scripting, especially Python that i've heard can be used has a low level language as well.
  7. IMO learning Doom Script is a excellent way to learn programing, is easy compared to C/C++ and being based on a C like syntax makes it a excellent introduction to those languages.
  8. yes portals for outdoor scenes are really not ideal, that is why Cryengine and such, use manual placed and automatic occluders instead, those engines also use the terrain as occlusion geometry plus techniques like GPU based occlusion culling https://bazhenovc.github.io/blog/post/gpu-driven-occlusion-culling-slides-lif/ . Something to consider to the future of TDM engine?
  9. What STiFU said and you can also go here -> https://modwiki.dhewm3.org/Console this is for the Doom 3 game so some cmds and cvars may not exist in TDM anymore but is always a good place for info.
  10. Both have pros and cons but imo shadow maps are superior, for the simple reason that they support alpha transparent textures and are able to be made soft out of the gate, stencil shadows don't. But stencil does run faster and look much sharper, this if not using tricks like soft stencil shadows but you lose the performance advantage and still have no alpha textures support.
  11. No problem you guys deserve it. DR now works and I most say the user guide is very nice.
  12. Thank you guys for your work on maintaining this tool, I know how hard it can be to work on a project for free on your spare time. edit: The new version crashs to me with error VCRUNTIME_140_1.dll was not found, used the portable version, I assume I need to install a runtime for visual studio 2019?
  13. Totally agree with AluminumHaste, I hope you have some lore on why the thief can walk for ages centimeters above open lava, he must have clothes and shoes made of titanium strings. ;D But the design looks very good, one thing that you could do to give the impression the metal is getting hot, is make the side looking into the lava glow a little orange, (material trick, vertex colors could help here). Now a friendly critic on the gameplay, this is only my opinion based on limited information, that being a maze, could feel repetitive after a while, to be walking back and forth, specially if you have no clue where to go and heat doesn't seem to really affect you. To give more "urgency" to the moment, you could try turn this into a more linear thing, with one or two dead ends to spice things up and make it more urgent to the player to get out of there fast or get killed by the heat and the moving statues. I know this is totally different from the idea you are showing there but imo it could be something to consider, at least in this particular situation, you could use your current idea to another area without lava, but the mission is yours and you do what you like.
  14. Sorry for going somewhat off topic but I've seen this problem before in fhdoom and it can be a clue for TDM has well. When using a custom post process glsl shader, a small window at the lower left corner of the main window shows up, the effect works in the small window and the rest of the screen gets like you said. I know almost nothing about shader coding, but it could be connected to the way id tech 4 renders the screen first to 640x480 then converts it to the users screen size after. Here is one of the shaders with problems, for those that want to see it. Btw this code was not written totally by me (just made changes to try blindly convert it to fhdoom), this is a modification of a shader from Total Chaos a free game (gzDoom engine), nice game btw and credit for it should be giving to them. Btw how do you hide text in the forum? (so the reply doesn't get so big) hope this helps. Global.inc #version 330 #extension GL_ARB_shading_language_420pack: enable uniform mat4 rpModelMatrix; uniform mat4 rpViewMatrix; uniform mat4 rpModelViewMatrix; uniform mat4 rpProjectionMatrix; uniform vec4 rpLocalLightOrigin; uniform vec4 rpLocalViewOrigin; uniform vec4 rpLightProjectionS; uniform vec4 rpLightProjectionT; uniform vec4 rpLightProjectionQ; uniform vec4 rpLightFallOff; uniform vec4 rpBumpMatrixS; uniform vec4 rpBumpMatrixT; uniform vec4 rpDiffuseMatrixS; uniform vec4 rpDiffuseMatrixT; uniform vec4 rpSpecularMatrixS; uniform vec4 rpSpecularMatrixT; uniform vec4 rpColorModulate; uniform vec4 rpColorAdd; uniform vec4 rpDiffuseColor; uniform vec4 rpSpecularColor; uniform vec4 shaderParm0; //this shaderParm's seem to be connected to the ARB program.local[0], etc uniform vec4 shaderParm1; uniform vec4 shaderParm2; uniform vec4 shaderParm3; uniform mat4 textureMatrix0; uniform int rpAlphaTestEnabled; uniform float rpAlphaTestThreshold; uniform vec4 rpCurrentRenderSize; uniform vec2 rpClipRange; uniform int rpDepthBlendMode; uniform float rpDepthBlendRange; uniform float rpPomMaxHeight; uniform int rpShading; uniform float rpSpecularExp; uniform int rpShadowMappingMode; uniform mat4 rpSpotlightProjection; uniform mat4 rpPointlightProjection[6]; uniform vec4 rpGlobalLightOrigin; uniform vec4 rpShadowParams; //x=minBias, y=maxbias, z=fuzzyness, w=samples uniform vec4 rpShadowCoords[6]; uniform vec4 rpShadowMapSize[6]; //xy = width/height of far plane, zw = near/far clip distance //TODO(johl): is width/height correctly set for non-parallel lights? uniform float rpCascadeDistances[5]; uniform mat4 rpInverseLightRotation; Vertex shader #include "global.inc" layout(location = 0) in vec3 vertex_position; layout(location = 1) in vec2 vertex_texcoord; out vs_output { vec2 texcoord; } result; void main(void) { gl_Position = rpProjectionMatrix * rpModelViewMatrix * vec4(vertex_position, 1.0); vec4 vertex_texcoord4 = vec4(vertex_texcoord, 1.0, 1.0); result.texcoord.x = dot(rpBumpMatrixS, vertex_texcoord4); result.texcoord.y = dot(rpBumpMatrixT, vertex_texcoord4); } Pixel shader/frag program #include "global.inc" layout(binding = 0) uniform sampler2D currentRender; in vs_output { vec2 texcoord; } vert; out vec4 fragColor; vec2 fixScreenTexCoord(vec2 st) { float x = rpCurrentRenderSize.z / rpCurrentRenderSize.x; float y = rpCurrentRenderSize.w / rpCurrentRenderSize.y; return st * vec2(x, y); } void main() { float samples = shaderParm0.x; float amount = shaderParm0.y; float dist = shaderParm0.z; float threshold = shaderParm0.w; vec2 texSize = textureSize(currentRender, 0); vec2 uv = vert.texcoord; uv *= 1.0 - uv.yx; vec4 src = texture(currentRender, vert.texcoord); vec4 c = vec4(src.rgb, 1.0); vec4 fsrc = texture(currentRender, vert.texcoord); vec4 fc = vec4(src.rgb, 1.0); vec2 tc = vert.texcoord; float size = 0.5; for(int i = 0; i < samples; i ++) { vec2 tc = vert.texcoord; size += dist; tc.x *= 1.0-size; tc.x += size/2; tc.y *= 1.0-size; tc.y += size/2; fsrc = texture(currentRender, tc); fc += vec4(fsrc.rgb, 1.0); } size = 0.35; for(int i = 0; i < samples; i ++) { vec2 tc = vert.texcoord; size += dist; tc.x *= 1.0-size; tc.x += size/2; tc.y *= 1.0-size; tc.y += size/2; fsrc = texture(currentRender, tc); fc += vec4(fsrc.rgb, 1.0); } size = 0.8; for(int i = 0; i < samples; i ++) { vec2 tc = vert.texcoord; size += dist; tc.x *= 1.0-size; tc.x += size/2; tc.y *= 1.0-size; tc.y += size/2; fsrc = texture(currentRender, tc); fc += vec4(fsrc.rgb, 1.0); } size = 1.0; for(int i = 0; i < samples; i ++) { vec2 tc = vert.texcoord; size += dist; tc.x *= 1.0-size; tc.x += size/2; tc.y *= 1.0-size; tc.y += size/2; fsrc = texture(currentRender, tc); fc += vec4(fsrc.rgb, 1.0); } size = 0.98; for(int i = 0; i < samples; i ++) { size += dist*2; vec2 tc = vert.texcoord; tc.x *= size; tc.y *= size; fsrc = texture(currentRender, tc); fc += vec4(fsrc.rgb, 1.0); } fc = fc /(samples*3); fc = fc - threshold; fc = clamp(fc,0.0,1000000.0); fragColor = vec4(c + (fc * vec4(0.8, 0.8, 1.0, 1.0))*amount); }
  • Create New...