Morrowind Graphics Extender (MGE)

Post » Fri May 27, 2011 2:49 am

Very nice harlanrm! B)

If the delay is just when loading a game, that would be tolerable for now.
Hopefully you'll find some way to optimize it further.

Would it be possible to add this technique to the player when entering / leaving water? How about while surface swimming? Accomplishing that would pretty much finish replacing the only graphical advantage of MW's pixel shaded water.


I am curious however if this would also replace the rain ripples as well- for me the lack of a real ripple when I was swimming was tolerable- but the rain hitting the water was always the best aspect of Morrowinds default Pixel Shaded water (putting it well above most other game water in my book) I have tried increasing the number of ripples and all that fun stuff but there just isn't a real substitute.
User avatar
Sophie Louise Edge
 
Posts: 3461
Joined: Sat Oct 21, 2006 7:09 pm

Post » Fri May 27, 2011 5:02 am

When MGE is set to draw distant statics, it draws the Ghost Fence--even though I've already beaten the main quest and the Ghost Fence should be off. What's more, the Ghost Fence has no animation, which looks really bad. Fix?
User avatar
rebecca moody
 
Posts: 3430
Joined: Mon Mar 05, 2007 3:01 pm

Post » Thu May 26, 2011 11:30 pm

I am curious however if this would also replace the rain ripples as well- for me the lack of a real ripple when I was swimming was tolerable- but the rain hitting the water was always the best aspect of Morrowinds default Pixel Shaded water (putting it well above most other game water in my book) I have tried increasing the number of ripples and all that fun stuff but there just isn't a real substitute.

Ah right! Raindrop ripples could use replacing as well. If harlanrm can manage to apply his technique to the player, then it should be possible for the raindrop ripples.


When MGE is set to draw distant statics, it draws the Ghost Fence--even though I've already beaten the main quest and the Ghost Fence should be off. What's more, the Ghost Fence has no animation, which looks really bad. Fix?

@Aldea Donder
Add the following to the [names] section of an exception list:
[names]
::ghostfence
ex_gg_fence_s_01
ex_gg_fence_s_02
ex_gg_fence_s_03
ex_gg_fence_s_04
ex_gg_fence_s_h_01
Then run the 'Distant Land Setup Wizard' again - make sure to select the same plugins you used before, then just regenerate distant statics using the exception list.

This will remove the wall of the fence (the part that gets animated before beating the MQ) while leaving the static structure intact in the distance.


Alternatively, you can regenerate distant statics without including activators (no exception list necessary). However, this will cause MGE to not render any activators as statics, so things like doors, banners, and signs won't show up in the distance.

FYI: because MGE converts animated meshes to statics, it cannot animate them in the distance.
User avatar
Shelby McDonald
 
Posts: 3497
Joined: Sat Jan 13, 2007 2:29 pm

Post » Fri May 27, 2011 10:04 am

Okay guys, I think I understand what you are saying and I think I understand where all the detail went.

Under older versions (at least 3.3.2 and lower) not only did MGE generate a world texture, but it also generated textures for every cell in the game. Those cell textures were highly detailed and accurately reflected what was in those cells. Unfortunately, they are also what took forever to generate.

The old MGE engine seemed to have three different render ranges. From what I can tell the closest range was handled by the engine, the middle range used the cell textures, and the far range used the world texture. The roads I was seeing were being rendered in middle range where the high quality cell textures were being used.

It appears that newer versions of MGE have decided to scrap the individual cell textures and instead use the world texture for the medium range terrain as well.

I now understand that the world texture is essentially an aerial photograph of the entire world. Depending on what size you choose during the Distant Land Creation wizard, you end up with a single DDS file that is NumYouChose x NumYouChose pixels tall and wide. It must try and cram everything it can about the world into that small image. Therefore, fine detail and textures get squeezed out by more predominant features and textures. Since the sample size is of the world texture is so small, details are lost when the world texture is mapped to medium range cells.

If I'm also understanding correctly, a new noise shader has also been applied to the land. From the screenshots vtastek provided, it appears to create a darker noise texture on the land as well. This make textures that used to appear light appear darker.

Do I finally have it right?
User avatar
Chris BEvan
 
Posts: 3359
Joined: Mon Jul 02, 2007 4:40 pm

Post » Thu May 26, 2011 7:42 pm

Okay guys, I think I understand what you are saying and I think I understand where all the detail went.
-clip-
Do I finally have it right?

Now you got it! :)

You could try playing with the noise filter texture - that might allow you to adjust the overall brightness of distant terrain.

I believe the file you want to look at is:
...\Textures\mge\default\world_detail.dds
User avatar
Queen of Spades
 
Posts: 3383
Joined: Fri Dec 08, 2006 12:06 pm

Post » Fri May 27, 2011 6:08 am

My latest water shader tweak:

http://www.youtube.com/watch?v=APZG3qwGqNo

Unfortunately, it takes 90 seconds to load a game with reflective shader, and about 30 seconds with nonreflective shader.

(Wasn't Timeslip just explaining the difference between HLSL and asm?)

Anyway, will upload new tweak to PES later, but it won't be in the default inGame.fx... I'll probably have an additional inGame_sewers.fx and users who want to use/see this feature would have to rename it appropriately (Easter egg feature).

That made me think if it is possible to make local changes to the water. Like less wavy waters for lakes and rocky coasts(mainly east coast).
I post this picture for a third time for what I imagined Morrowind water to look like.
http://i51.photobucket.com/albums/f386/vtastek/morrowind/morrowindmisc/Rhos_on_Sea_Rocks.jpg

If it is possible, it could be a nice addition.

@Silverglade
I came to the boards and using mge since last july. I don't know how it was back then. I like the look now and if any improvements are gonna be made, better be no performance costy.
User avatar
Nick Pryce
 
Posts: 3386
Joined: Sat Jul 14, 2007 8:36 pm

Post » Fri May 27, 2011 11:50 am

@Harlanrm
That looks great. Is there anything that prevents that feature from being added to the default MGE water shader?


Guess it depends on what you mean by default. Included with MGE download? Yes, my mod requires a SM 3.0 capable video card (which could exclude some folks from running MGE). If you are wondering why I'm making you rename a file, its because I consider this new feature experimental. The extended load times and fps drop near Vivec would generate a lot of complaints for a feature that many might see as "fluff"

Would it be possible to add this technique to the player when entering / leaving water? How about while surface swimming? Accomplishing that would pretty much finish replacing the only graphical advantage of MW's pixel shaded water.

I thought of this too. My first attempt had some issues though. I could add the waves around the player when they entered the water, but the waves would travel with the player, instead of falling behind. And all the waves would appear/disappear at once instead of propagating out. So I'll have to think about that some more.

I post this picture for a third time for what I imagined Morrowind water to look like.
http://i51.photobucket.com/albums/f386/vtastek/morrowind/morrowindmisc/Rhos_on_Sea_Rocks.jpg

If it is possible, it could be a nice addition.


Thats a nice photo. What do you think about http://www.fifelake.com/photos/FLSunset06B.JPG?

----

I've uploaded the latest changes to the http://planetelderscrolls.gamespy.com/View.php?view=Mods.Detail&id=5869 to PES.

Changes include:
Tweaked non-reflective water shader (looks much more like the reflective one now).
-Added Depth based effects
-Made all the applicable changes that I made to the reflective shader.

Added inGame_sewers.fx file. This file adds the waves around the http://www.youtube.com/watch?v=APZG3qwGqNo

***Optional***
To see the Vivec sewer waves you must rename InGame.fx to something else, then rename InGame_sewers.fx to InGame.fx.
WARNING - using InGame_sewers.fx will cause initial loading times to increase to about 90-180 seconds!
Also you will see a fps decrease near Vivec (I experience a 10% drop)

I did a quick fps comparo:

My inGame.fx
Reflective water shader:
31 - On Vivec canton
46 - Looking towards Vivec (but far enough away to disable the sewer waves)
43 - Looking towards Vivec (but close enough to enable the sewer waves)
Non-reflective water shader:
36 - On Vivec canton
54 - Looking towards Vivec (but far enough away to disable the sewer waves)
50 - Looking towards Vivec (but close enough to enable the sewer waves)

My inGame_sewers.fx
Reflective water shader:
30 - On Vivec canton
46 - Looking towards Vivec (but far enough away to disable the sewer waves)
39 - Looking towards Vivec (but close enough to enable the sewer waves)
Non-reflective water shader:
34 - On Vivec canton
54 - Looking towards Vivec (but far enough away to disable the sewer waves)
45 - Looking towards Vivec (but close enough to enable the sewer waves)

So the bright side is, if you are not near Vivec, you should not see a fps loss using inGame_sewers.fx

Here's the part of the code that adds the sewer waves:

float3 GetWave(float2 pos) {	//Big waves headed toward ghostgate	float2 wave = sin(fmod(sqrt(pow(pos.x-20000,2)+pow(pos.y-40000,2)),6144)/(6144/6.283185307) + ticks)/16;	//Vivec sewer waves	//add effect only near Vivec	if (EyePos.y < -70000 && EyePos.y > -108200) {	if (EyePos.x < 53600 && EyePos.x > 12750) {	wave += sin(fmod(sqrt(pow(pos.x-19160,2)+pow(pos.y+86825,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-19160,2)+pow(pos.y+86825,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-19160,2)+pow(pos.y+81900,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-19160,2)+pow(pos.y+81900,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-25275,2)+pow(pos.y+81850,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-25275,2)+pow(pos.y+81850,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-25275,2)+pow(pos.y+86700,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-25275,2)+pow(pos.y+86700,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-25550,2)+pow(pos.y+84940,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-25550,2)+pow(pos.y+84940,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-25550,2)+pow(pos.y+88840,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-25550,2)+pow(pos.y+88840,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-25550,2)+pow(pos.y+91390,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-25550,2)+pow(pos.y+91390,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-25550,2)+pow(pos.y+95230,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-25550,2)+pow(pos.y+95230,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-26300,2)+pow(pos.y+81750,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-26300,2)+pow(pos.y+81750,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-26300,2)+pow(pos.y+77825,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-26300,2)+pow(pos.y+77825,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-32675,2)+pow(pos.y+85300,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-32675,2)+pow(pos.y+85300,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-32675,2)+pow(pos.y+88690,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-32675,2)+pow(pos.y+88690,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-32675,2)+pow(pos.y+91785,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-32675,2)+pow(pos.y+91785,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-32675,2)+pow(pos.y+95020,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-32675,2)+pow(pos.y+95020,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-32975,2)+pow(pos.y+84720,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-32975,2)+pow(pos.y+84720,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-32975,2)+pow(pos.y+89110,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-32975,2)+pow(pos.y+89110,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-32975,2)+pow(pos.y+91190,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-32975,2)+pow(pos.y+91190,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-32975,2)+pow(pos.y+95365,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-32975,2)+pow(pos.y+95365,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-33450,2)+pow(pos.y+77945,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-33450,2)+pow(pos.y+77945,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-33450,2)+pow(pos.y+81635,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-33450,2)+pow(pos.y+81635,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-40100,2)+pow(pos.y+84900,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-40100,2)+pow(pos.y+84900,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-40100,2)+pow(pos.y+88790,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-40100,2)+pow(pos.y+88790,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-40100,2)+pow(pos.y+91395,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-40100,2)+pow(pos.y+91395,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-40100,2)+pow(pos.y+95300,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-40100,2)+pow(pos.y+95300,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-40400,2)+pow(pos.y+81955,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-40400,2)+pow(pos.y+81955,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-40400,2)+pow(pos.y+86900,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-40400,2)+pow(pos.y+86900,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-46500,2)+pow(pos.y+81930,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-46500,2)+pow(pos.y+81930,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-46500,2)+pow(pos.y+86790,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-46500,2)+pow(pos.y+86790,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-27635,2)+pow(pos.y+76700,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-27635,2)+pow(pos.y+76700,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-32165,2)+pow(pos.y+76700,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-32165,2)+pow(pos.y+76700,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-20260,2)+pow(pos.y+80775,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-20260,2)+pow(pos.y+80775,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-24125,2)+pow(pos.y+80775,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-24125,2)+pow(pos.y+80775,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-41475,2)+pow(pos.y+80775,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-41475,2)+pow(pos.y+80775,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-45480,2)+pow(pos.y+80775,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-45480,2)+pow(pos.y+80775,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-27625,2)+pow(pos.y+82800,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-27625,2)+pow(pos.y+82800,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-32150,2)+pow(pos.y+82800,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-32150,2)+pow(pos.y+82800,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-26700,2)+pow(pos.y+83850,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-26700,2)+pow(pos.y+83850,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-31540,2)+pow(pos.y+83850,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-31540,2)+pow(pos.y+83850,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-34480,2)+pow(pos.y+83850,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-34480,2)+pow(pos.y+83850,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-38980,2)+pow(pos.y+83850,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-38980,2)+pow(pos.y+83850,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-20300,2)+pow(pos.y+87915,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-20300,2)+pow(pos.y+87915,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-24225,2)+pow(pos.y+87915,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-24225,2)+pow(pos.y+87915,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-41350,2)+pow(pos.y+87915,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-41350,2)+pow(pos.y+87915,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-45300,2)+pow(pos.y+87915,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-45300,2)+pow(pos.y+87915,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-26630,2)+pow(pos.y+89955,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-26630,2)+pow(pos.y+89955,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-31895,2)+pow(pos.y+89955,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-31895,2)+pow(pos.y+89955,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-34585,2)+pow(pos.y+89955,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-34585,2)+pow(pos.y+89955,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-38500,2)+pow(pos.y+89955,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-38500,2)+pow(pos.y+89955,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-27185,2)+pow(pos.y+90260,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-27185,2)+pow(pos.y+90260,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-31765,2)+pow(pos.y+90260,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-31765,2)+pow(pos.y+90260,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-34120,2)+pow(pos.y+90260,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-34120,2)+pow(pos.y+90260,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-39060,2)+pow(pos.y+90260,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-39060,2)+pow(pos.y+90260,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-26650,2)+pow(pos.y+96365,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-26650,2)+pow(pos.y+96365,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-31615,2)+pow(pos.y+96365,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-31615,2)+pow(pos.y+96365,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-34095,2)+pow(pos.y+96365,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-34095,2)+pow(pos.y+96365,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-38965,2)+pow(pos.y+96365,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-38965,2)+pow(pos.y+96365,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-31180,2)+pow(pos.y+96925,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-31180,2)+pow(pos.y+96925,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-34640,2)+pow(pos.y+96925,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-34640,2)+pow(pos.y+96925,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-31200,2)+pow(pos.y+103770,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-31200,2)+pow(pos.y+103770,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-34695,2)+pow(pos.y+103770,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-34695,2)+pow(pos.y+103770,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-31475,2)+pow(pos.y+104345,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-31475,2)+pow(pos.y+104345,2))/20480,4);	wave += sin(fmod(sqrt(pow(pos.x-34175,2)+pow(pos.y+104345,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-34175,2)+pow(pos.y+104345,2))/20480,4);	}}	return float3(wave,0);}

User avatar
Karl harris
 
Posts: 3423
Joined: Thu May 17, 2007 3:17 pm

Post » Thu May 26, 2011 10:15 pm

Wow, harlanrm, this is some darn impressive work, keep it up matey! :tops:

I also had a play through with the InGame_sewers.fx and I didn't actually get any noticeable slow down so I'm a happy camper. Not sure if it's hardware of configuration or what?
User avatar
Heather beauchamp
 
Posts: 3456
Joined: Mon Aug 13, 2007 6:05 pm

Post » Fri May 27, 2011 5:13 am

Better non reflective water too? That's nice for those who are struggling with performance. :)
WARNING - using InGame_sewers.fx will cause initial loading times to increase to about 90-180 seconds!
Also you will see a fps decrease near Vivec (I experience a 10% drop)

I didn't notice much of a fps decrease but the initial loading times were definitely much much longer, even with my 4 GB of ram. :P
User avatar
Czar Kahchi
 
Posts: 3306
Joined: Mon Jul 30, 2007 11:56 am

Post » Fri May 27, 2011 1:20 am

Guess it depends on what you mean by default. Included with MGE download? Yes, my mod requires a SM 3.0 capable video card (which could exclude some folks from running MGE). If you are wondering why I'm making you rename a file, its because I consider this new feature experimental. The extended load times and fps drop near Vivec would generate a lot of complaints for a feature that many might see as "fluff"

Yes, I meant the InGame.fx that comes with MGE. I like the less pronoucned waveless of the default shader, but I want to add your rings to my game. I'm comparing the files now to see what I need to do.
User avatar
Jarrett Willis
 
Posts: 3409
Joined: Thu Jul 19, 2007 6:01 pm

Post » Fri May 27, 2011 7:43 am

I've uploaded the latest changes to the http://planetelderscrolls.gamespy.com/View.php?view=Mods.Detail&id=5869 to PES.

I figured that's what you were doing - basically you're adding animated 2d ripple functions to the static water shader in pre-determined locations around the world, yes? I can see why it would be slow (those are some nasty functions, a lot of them, and they don't look terribly optimized), but I don't see why it should increase load times...

I wonder if it would be possible - it seems like it would be, to me - to add the ripples using a pre-animated bunch of textures, similar to the default water's animated normal mapping? Then you are just adding(?) the normals at a certain location, rather than doing some rather complicated math. Since the ripples are always the same, preanimated sine waves wouldn't look odd.
User avatar
Alex Vincent
 
Posts: 3514
Joined: Thu Jun 28, 2007 9:31 pm

Post » Fri May 27, 2011 11:01 am

Snip

Genius!
User avatar
Toby Green
 
Posts: 3365
Joined: Sun May 27, 2007 5:27 pm

Post » Thu May 26, 2011 8:28 pm

Better non reflective water too? That's nice for those who are struggling with performance. :)

I didn't notice much of a fps decrease but the initial loading times were definitely much much longer, even with my 4 GB of ram. :P

Exact opposite here! No increase in loading times. FPS dropped to 5.
User avatar
Dawn Farrell
 
Posts: 3522
Joined: Thu Aug 23, 2007 9:02 am

Post » Fri May 27, 2011 7:49 am

I definitely have the increase in the game's initial load time with the new shader. I'm using an ATI 4870.
User avatar
Damien Mulvenna
 
Posts: 3498
Joined: Wed Jun 27, 2007 3:33 pm

Post » Thu May 26, 2011 10:07 pm

Speaking of which. How do you calculate placement so precise? Do you have a good work-flow for it?

I might be up to trying to figure it out to make it work seamlessly with Vivec Redesigned.
User avatar
Hearts
 
Posts: 3306
Joined: Sat Oct 20, 2007 1:26 am

Post » Fri May 27, 2011 11:22 am

Okay, I have managed to integrate Harlanrm's new Vivec sewer outlet code into MGE's shader. If anyone else wants to do it, here is what you need to do. Be aware that this will require that you have a graphics card capable of Shader Model 3.0 support.

Backup your InGame.fx file. Copy the code he gave us a few posts up and paste it it into your InGame.fx file; just above the ReflectionShader2 code. You should change the line in that code that reads:

float2 wave = sin(..........)/16;

to

float2 wave = (0.0, 0.0);


Then, go into the ReflectionShader2 routine and add the following lines right above the comment "Reduce normal influence on perterbations near water's edge":

// Add wave effect
normal = normalize(normal+GetWave(IN.pos.xy));

Finally, you need to go to the bottom of the file and find Passes C, D, F, and G. Change the lines in those sections that read:

VertexShader = compile vs_2_0_.....
PixelShader = compile ps_2_0_.....

to

VertexShader = compile vs_3_0_.....
PixelShader = compile ps_3_0_.....


That is it. Save your changes and try loading your game. My savegame went from loading in 12 seconds, without those changes, to 1 minute and 12 seconds with the changes (E8400 and ATI 4870). You'll know that you screwed up somewhere, if when your game loads, no distant land is drawn and the game acts like MGE isn't even loaded.
User avatar
Steven Hardman
 
Posts: 3323
Joined: Sun Jun 10, 2007 5:12 pm

Post » Fri May 27, 2011 9:34 am

Very nice. It certainly increases initial load time, but I don't notice much of an FPS hit around Vivec. One thing though: you should add it to Molag Mar as well.
User avatar
Amy Melissa
 
Posts: 3390
Joined: Fri Jun 23, 2006 2:35 pm

Post » Fri May 27, 2011 1:08 am

- variable WaterLevel() is changed (I hope in it a problem of CTD at Spiffyman)

Spiffyman has confirmed that this variable was at the bottom CTD.

Version updating (it is based on rev97), оne change:
- FogStart\FogEnd is corrected (water bug with the reflected sun in an InteriorLikeExterior) -> water became more transparent (from under waters it is visible that above)

http://depositfiles.com/files/ny6kzlzh1
http://depositfiles.com/files/fw4rbp4sn
User avatar
Marilú
 
Posts: 3449
Joined: Sat Oct 07, 2006 7:17 am

Post » Fri May 27, 2011 2:16 am

I figured that's what you were doing - basically you're adding animated 2d ripple functions to the static water shader in pre-determined locations around the world, yes?

Yes
I can see why it would be slow (those are some nasty functions, a lot of them, and they don't look terribly optimized), but I don't see why it should increase load times...

After much testing I determined the long load times were due to the 4 if statements that checked to see if the player was near Vivec. I removed those checks and load times are back down to 4-5 seconds now! I will probably leave it this way since most seem to think the fps hit isn't too bad.
I wonder if it would be possible - it seems like it would be, to me - to add the ripples using a pre-animated bunch of textures, similar to the default water's animated normal mapping? Then you are just adding(?) the normals at a certain location, rather than doing some rather complicated math. Since the ripples are always the same, preanimated sine waves wouldn't look odd.

MGE would need to send those textures to the inGame.fx first (since its an animated sequence of textures). Then I might be able to implement that. Might be a good solution for rain ripples and player caused ripples.
Speaking of which. How do you calculate placement so precise? Do you have a good work-flow for it?

I might be up to trying to figure it out to make it work seamlessly with Vivec Redesigned.

I used the console commands tdt and tcl. Then I flew around and hovered over each sewer while looking straight down, and recorded the coordinates from the debug text. Not an easy task, but was the simplest way for me to get the coordinates.

If you can provide the coordinates for the sewers in Vivec Redesigned I can add an alternate inGame_sewersRedesigned.fx to my mod for others to use.

I've redesigned the GetWaves function to be a For loop processing an array of x,y coordinates:
float3 GetWave(float2 pos) {	//Big waves headed toward ghostgate	float2 wave = sin(fmod(sqrt(pow(pos.x-20000,2)+pow(pos.y-40000,2)),6144)/(6144/6.283185307) + ticks)/16;	//Vivec sewer waves	const float2 wLoc[62] = {		{ 19160, -86825},		{ 19160, -81900},		{ 25275, -81850},		{ 25275, -86700},		{ 25550, -84940},		{ 25550, -88840},		{ 25550, -91390},		{ 25550, -95230},		{ 26300, -81750},		{ 26300, -77825},		{ 32675, -85300},		{ 32675, -88690},		{ 32675, -91785},		{ 32675, -95020},		{ 32975, -84720},		{ 32975, -89110},		{ 32975, -91190},		{ 32975, -95365},		{ 33450, -77945},		{ 33450, -81635},		{ 40100, -84900},		{ 40100, -88790},		{ 40100, -91395},		{ 40100, -95300},		{ 40400, -81955},		{ 40400, -86900},		{ 46500, -81930},		{ 46500, -86790},		{ 27635, -76700},		{ 32165, -76700},		{ 27625, -82800},		{ 32150, -82800},		{ 20260, -80775},		{ 24125, -80775},		{ 41475, -80775},		{ 45480, -80775},		{ 26700, -83850},		{ 31540, -83850},		{ 34480, -83850},		{ 38980, -83850},		{ 20300, -87915},		{ 24225, -87915},		{ 41350, -87915},		{ 45300, -87915},		{ 26630, -89955},		{ 31895, -89955},		{ 34585, -89955},		{ 38500, -89955},		{ 27185, -90260},		{ 31765, -90260},		{ 34120, -90260},		{ 39060, -90260},		{ 26650, -96365},		{ 31615, -96365},		{ 34095, -96365},		{ 38965, -96365},		{ 31180, -96925},		{ 34640, -96925},		{ 31200, -103770},		{ 34695, -103770},		{ 31475, -104345},		{ 34175, -104345}	};	for (int i=0; i<62; i++) {		wave += sin(fmod(sqrt(pow(pos.x-wLoc[i].x,2)+pow(pos.y-wLoc[i].y,2)),128)/(128/6.283185307) - 4*ticks)/max((pow(pos.x-wLoc[i].x,2)+pow(pos.y-wLoc[i].y,2))/20480,4);	}	return float3(wave,0);}


Very nice. It certainly increases initial load time, but I don't notice much of an FPS hit around Vivec. One thing though: you should add it to Molag Mar as well.

I will look into that. With the new way of adding the sewer waves it will make it much simpler to add new wave effects.

[Edit] Done. Molag Mar sewer waves have been added to inGame_sewers.fx and uploaded to PES.

My changes to the http://planetelderscrolls.gamespy.com/View.php?view=Mods.Detail&id=5869 have been uploaded to PES.

In this version I have reduced the loading times for http://www.youtube.com/watch?v=APZG3qwGqNo
User avatar
Grace Francis
 
Posts: 3431
Joined: Wed Jul 19, 2006 2:51 pm

Post » Fri May 27, 2011 4:01 am

Wouldn't it be possible to detect waterfall meshes and where they touch the water, as a way of doing these ripples?
User avatar
Tai Scott
 
Posts: 3446
Joined: Sat Jan 20, 2007 6:58 pm

Post » Fri May 27, 2011 9:37 am

Wouldn't it be possible to detect waterfall meshes and where they touch the water, as a way of doing these ripples?

Maybe if you catch their placement coordinates from the statics generation, however it would be horribly in-nacurate. Since the placement of these meshes is rarely perfect. And I think the placement is very crucial for it to look and work and render properly.
User avatar
Je suis
 
Posts: 3350
Joined: Sat Mar 17, 2007 7:44 pm

Post » Thu May 26, 2011 10:27 pm

Great job on the ripple rings! :)

Questions:
1. Should I still be using MGE Foggy Weather.esp?
2. Should I still be using Distant land fix.esp?
User avatar
Nathan Hunter
 
Posts: 3464
Joined: Sun Apr 29, 2007 9:58 am

Post » Thu May 26, 2011 9:48 pm

After much testing I determined the long load times were due to the 4 if statements that checked to see if the player was near Vivec. I removed those checks and load times are back down to 4-5 seconds now! I will probably leave it this way since most seem to think the fps hit isn't too bad.
-clip-

I've redesigned the GetWaves function to be a For loop processing an array of x,y coordinates:
-clip-

@harlanrm
Interestingly, initial load time for me was about the same with the if statements as it was before you added the sewer waves code: 10-15 secs starting a new game; 5-7 secs loading a save. And no measurable decrease in fps.

However now with the For loop processing, my fps drops up to 60% when looking at the water (especially when levitating around vivec so that most of the sewer waves are in view): from ~22 fps to ~8 fps.
This fps drop was also noted near a pond just over the hill and southeast from Molag Mar when looking straight down at the water.

With the separate calculations instead of the For loop I have no drop in fps (with or without the EyePos if statements). And that's with adding the other 8 lines to calculate the Molag Mar sewer waves.

I'm running on a PentiumD 3GHz, 3GB system ram, eGeForce 8800GT SC 512MB DDR3, winXP32sp3.


Great job on the ripple rings! :)

Questions:
1. Should I still be using MGE Foggy Weather.esp?
2. Should I still be using Distant land fix.esp?

@5H4RP
The functionality provided by 'MGE Foggy Weather.esp' has been incorporated into the latest version of MGE. You can still run it, but the fogging in non-clear weather will be added together and probably be overly foggy - adjusting MGE Foggy Weather's global settings can mitigate that some what.

'Distant Land Fix.esp' is not needed with MGE v3.8.0. -_-
User avatar
Emilie Joseph
 
Posts: 3387
Joined: Thu Mar 15, 2007 6:28 am

Post » Fri May 27, 2011 1:58 am

New test version of MGE is available for download - http://downloads.sourceforge.net/morrgraphext/mge3.8-SVN_rev-0098.7z

MGEgui.exe Distant Land Setup Wizard changes:
  • added: INI file handling for distant land setup settings, Distant Land Setup Wizard settings are saved when 'Finish' button is clicked (more settings of MGE in future)
  • added: new dialog box showing last warnings in grid form
  • added: plugins selection view sort order for extended readability
  • added: multiple static override lists handling in selected by user order (latter files on list override former)
  • added: messagebox showing missing texture during statics creation with option to skip missing texture and continue statics setup
  • tweak: changed plugins selection to use checkboxes
  • tweak: plugins for Distant Land Setup are now always loaded in game load order
  • tweak: changed layout of Statics tab
  • tweak: changed default statics override list extension to '.ovr'
d3d8.dll changes:
  • fixed: (by d4w) render glitch of true interior MenuMode exit
  • fixed: (by d4w) getWaterLevel function causing some crashes
  • fixed: (by d4w) statics visibility error in MenuMode
  • fixed: (by d4w) corrected fog in 'behave like exterior' cells (water bug with the reflected sun) -> water became more transparent


I also removed 3 oldest test builds from the download.
User avatar
Myles
 
Posts: 3341
Joined: Sun Oct 21, 2007 12:52 pm

Post » Fri May 27, 2011 3:22 am

Nice work on the UI! The new esp/esm selecting is very good.

As for the interior water, would it be possible to reflect real lighting (not just the ambient/fog colour)?

Oh, I noticed a new button to generate statics for Exterior-behaving interiors. It's disabled, but when will it be enabled?
User avatar
Stephani Silva
 
Posts: 3372
Joined: Wed Jan 17, 2007 10:11 pm

PreviousNext

Return to III - Morrowind