Jump to content
The Dark Mod Forums

Proper & realistic moving water:


Bikerdude

Recommended Posts

It's a 50 frame loop. You can flip the uv map horizontally. You probably can play back the texture bit slower so it's longer (but less smooth). You could make longer animation. Perhaps the pattern could be a bit more uniform. Anyway it's a loop so in the end it will repeat.

It's only a model...

Link to comment
Share on other sites

  • Replies 77
  • Created
  • Last Reply

Top Posters In This Topic

Ironically naturally drops trickling down glass tend to be repetitive, you have to apply oil, dirt, airflow or a wetting agent in a different location to get the paths to not follow a similar way (if not the identical path) each time. Depending on the source of water, it can be remarkably temporally consistent too.

"The measure of a man's character is what he would do if he knew he never would be found out."

- Baron Thomas Babington Macauley

Link to comment
Share on other sites

Blimey I feel quite pampered just looking at those videos. =-P

"No proposition Euclid wrote,

No formulae the text-books know,

Will turn the bullet from your coat,

Or ward the tulwar's downward blow

Strike hard who cares—shoot straight who can—

The odds are on the cheaper man."

 

From 'Arithmetic on the Frontier' by Rudyard Kipling

Link to comment
Share on other sites

i wonder if you wash more streams of rain down the window in a busier fashion if you could trick the eye into missing the repetitiveness.

Alternatively maybe you could blend multiple scrolling rain normals on top of eachother with different timings, and randomize the starting position of each before a sequence starts?

Link to comment
Share on other sites

I must admit that I like the current example so much that I'm having a little trouble with this "constructive criticism". I suppose any random end-user might say the same things though.

OTOH... how many commercial games even have a rain on window effect? My 2 cents: This would be cool to have repetitive or not. :wub:

Please visit TDM's IndieDB site and help promote the mod:

 

http://www.indiedb.com/mods/the-dark-mod

 

(Yeah, shameless promotion... but traffic is traffic folks...)

Link to comment
Share on other sites

I suppose any random end-user might say the same things though.

ouch. i don't think there's anything wrong with the work at all, it looks phenomenal. This is all very new to TDM, so I think its natural that observers start wondering about how far these new-to-TDM techniques can be pushed. But its obviously not required or expected that arcturus get straight to work improving things to meet approval of the peanut gallery. been thinking about toying with it myself.

Edited by ungoliant
Link to comment
Share on other sites

I must admit that I like the current example so much that I'm having a little trouble with this "constructive criticism".

That's ok :) I also think it could use some more drops. Right now the effect is maybe a bit to subtle.

Alternatively maybe you could blend multiple scrolling rain normals on top of eachother with different timings, and randomize the starting position of each before a sequence starts?

It could work, but you would have straight paths of drops and they would not change shape.

It's only a model...

Link to comment
Share on other sites

Just added this into my mission and its looking great, thanks! :)

Link to comment
Share on other sites

  • 4 months later...

I made a tutorial explaining the process of creating the drops:

 

http://youtu.be/_WigtOd26dU

 

Were your water efforts added to TDM 2.02?

 

I would like to update the Moddb article with a few more videos...

Please visit TDM's IndieDB site and help promote the mod:

 

http://www.indiedb.com/mods/the-dark-mod

 

(Yeah, shameless promotion... but traffic is traffic folks...)

Link to comment
Share on other sites

You should find it in Goldwells mission.

 

Btw.: Very good job, arcturus. I've missed this here but just saw it in GW's mission and it looks bloody amazing.

FM's: Builder Roads, Old Habits, Old Habits Rebuild

Mapping and Scripting: Apples and Peaches

Sculptris Models and Tutorials: Obsttortes Models

My wiki articles: Obstipedia

Texture Blending in DR: DR ASE Blend Exporter

Link to comment
Share on other sites

I was also speaking of the other water assets such as the reflective water. (These are all great showcase videos, I wish they could be used in the article... oh well).

 

I made a 50 frames animated normalmap similar to the one posted by Rich_is_bored. It's made in Blender using the same ocean modifier so the pattern is the same as in the video above. The normalmap is also scrolled. The effect is similar to a single scrolling normalmap but it's slightly better, especially for still water.

 

http://www.youtube.com/watch?v=76tmYwLcqO0

 

Normalmap frames: https://www.dropbox....er_normalmap.7z

 

 

animated_water_refraction

{
noshadows
noimpact
nonsolid
{
	if ( (time * 50) % 49 == 0 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0001.tga
}
{
	if ( (time * 50) % 49 == 1 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0002.tga
}
{
	if ( (time * 50) % 49 == 2 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0003.tga
}
{
	if ( (time * 50) % 49 == 3 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0004.tga
}
{
	if ( (time * 50) % 49 == 4 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0005.tga
}
{
	if ( (time * 50) % 49 == 5 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0006.tga
}
{
	if ( (time * 50) % 49 == 6 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0007.tga
}
{
	if ( (time * 50) % 49 == 7 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0008.tga
}
{
	if ( (time * 50) % 49 == 8 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0009.tga
}
{
	if ( (time * 50) % 49 == 9 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0010.tga
}
{
	if ( (time * 50) % 49 == 10 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0011.tga
}
{
	if ( (time * 50) % 49 == 11 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0012.tga
}
{
	if ( (time * 50) % 49 == 12 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0013.tga
}
{
	if ( (time * 50) % 49 == 13 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0014.tga
}
{
	if ( (time * 50) % 49 == 14 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0015.tga
}
{
	if ( (time * 50) % 49 == 15 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0016.tga
}
{
	if ( (time * 50) % 49 == 16 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0017.tga
}
{
	if ( (time * 50) % 49 == 17 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0018.tga
}
{
	if ( (time * 50) % 49 == 18 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0019.tga
}
{
	if ( (time * 50) % 49 == 19 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0020.tga
}
{
	if ( (time * 50) % 49 == 20 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0021.tga
}
{
	if ( (time * 50) % 49 == 21 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0022.tga
}
{
	if ( (time * 50) % 49 == 22 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0023.tga
}
{
	if ( (time * 50) % 49 == 23 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0024.tga
}
{
	if ( (time * 50) % 49 == 24 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0025.tga
}
	{
	if ( (time * 50) % 49 == 25 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0026.tga
}
{
	if ( (time * 50) % 49 == 26 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0027.tga
}
{
	if ( (time * 50) % 49 == 27 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0028.tga
}
{
	if ( (time * 50) % 49 == 28 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0029.tga
}
{
	if ( (time * 50) % 49 == 29 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0030.tga
}
{
	if ( (time * 50) % 49 == 30 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0031.tga
}
{
	if ( (time * 50) % 49 == 31 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0032.tga
}
{
	if ( (time * 50) % 49 == 32 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0033.tga
}
{
	if ( (time * 50) % 49 == 33 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0034.tga
}
{
	if ( (time * 50) % 49 == 34 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0035.tga
}
{
	if ( (time * 50) % 49 == 35 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0036.tga
}
{
	if ( (time * 50) % 49 == 36 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0037.tga
}
{
	if ( (time * 50) % 49 == 37 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0038.tga
}
{
	if ( (time * 50) % 49 == 38 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0039.tga
}
{
	if ( (time * 50) % 49 == 39 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0040.tga
}
{
	if ( (time * 50) % 49 == 40 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0041.tga
}
{
	if ( (time * 50) % 49 == 41 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0042.tga
}
{
	if ( (time * 50) % 49 == 42 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0043.tga
}
{
	if ( (time * 50) % 49 == 43 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0044.tga
}
{
	if ( (time * 50) % 49 == 44 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0045.tga
}
{
	if ( (time * 50) % 49 == 45 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0046.tga
}
{
	if ( (time * 50) % 49 == 46 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0047.tga
}
{
	if ( (time * 50) % 49 == 47 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0048.tga
}
{
	if ( (time * 50) % 49 == 48 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0049.tga
}
{
	if ( (time * 50) % 49 == 49 )
	program		heatHaze.vfp
	vertexParm	0	time * 0.3 , time * 0 // scroll
	vertexParm	1	3 //magnitude
	fragmentMap	0	 _currentRender
	fragmentMap	1	textures/water_normalmap/water0050.tga
}
}

 

 

Please visit TDM's IndieDB site and help promote the mod:

 

http://www.indiedb.com/mods/the-dark-mod

 

(Yeah, shameless promotion... but traffic is traffic folks...)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recent Status Updates

    • The Black Arrow

      Hey @nbohr1morehow come the zombies in The Dark Mod don't have a "resurrection" mechanic to it, similar to how Thief has it?
      They're quite a weak creature as of right now, it's merely a walking corpse that slashes you, making attacking them to kill them an actual strategy.
      Would be better if they had some cool mechanism to it that truly makes them a danger, such as the resurrection idea itself.
      · 2 replies
    • Ansome

      Query: when was the last time a zombie in a video game was unnerving or scary to you? I'm chipping away at my anniversary submission and I've been trying to gather opinions on the subject. I'm perfectly capable of lighting them well, changing their sfx, and creating effective ambience, but I'm worried that zombies at their core are just too overdone to be an effective payoff to the tension I'm creating.
      · 4 replies
    • nbohr1more

      The Lieutenant 3 is out! Congrats Frost_Salamander! ( raising awareness )
      · 2 replies
    • OrbWeaver

      Has anyone had any luck with textures from Polyhaven? Their OpenEXR normal maps seem too washed out and give incorrect shading in the engine.
      · 5 replies
    • datiswous

      I tried to upscale the TDM logo video. First try:

      briefing_video.mp4 You can test it ingame by making a copy of the core tdm_gui.mtr and place it in your-tdm-root/materials/ , then edit line 249 of that file into the location where you placed the new briefing.mp4 file.
      What I did was I extracted all the image files, then used Upscayl to upscale the images using General photo (Real-Esrgan) upscale setting and then turn it back into a video.
      I might have to crop it a bit, the logo looks smaller on screen (or maybe it's actually better this way?). My video editor turned it into a 16:9 video, which I think overal looks better than 1:1 video of original.
      · 1 reply
×
×
  • Create New...