Welcome
Ladies and Gents:

These forums are now closed and registration disabled.

Please join us at our new forum on Proboards. Our hope is that these new forums are more stable, provide more and better features, and allow continuation of the project forums in a safer, more secure, long term environment.

me3explorer.proboards.com

--The ME3Explorer Team

Research - MIP Maps and Texturegroups

Area for texture-specific, modding-related discussion. Topics that involve models/meshes/actors go in the mesh area. As with other non-toolset related content, answers not guaranteed.

Re: MIP Maps

Postby giftfish » 09 Jun 2016, 14:34

Kinkojiro wrote:I doubt changing the LOD settings in the coalesced changes anything. If, as I think, the LOD setting is baked into the material/shader then that would be much much faster than looking up a json table (at least for an xbox).

This would make sense with what Creeper just tested. Maybe it's just a reference list. There are lots of those in the coalesced. It might also be that ME1 and ME2 are handled differently -- or at the very least, ME1. I'm almost positive that the LOD parameters ME1's INIs have to be modded to see certain higher rez textures. I'll have to refresh my memory on that, though. Should be perma-modding textures into ME1 soon, so I'll take another look then.

Kinkojiro wrote:Every texture that you say has problems is also one with quite a few special effects like opacity and emissivity. It maybe a very complex material just cannot handle a texture which has bigger mips but they are used.

@Creeper -- This is basically what I said a while back during our discussions. The VFX applied to the aquarium plants, visors, console, etc, are the problem. As Kinko explained in much greater technical detail than I could have, the rendering of these types of things in game is just much more complex than a standard piece of clothing. I don't really get the "cooking" process, but if LOD is cooked in and properly rendered VFX are dependent upon that LOD being present, then that certainly explains why changing the max resolution with a more high rez texture would bork the entire thing.
User avatar
giftfish
Toolset Developer
 
Posts: 1247
Joined: 08 Jan 2016, 02:35
Has thanked: 129 time
Have thanks: 75 time

Re: MIP Maps

Postby CreeperLava » 09 Jun 2016, 20:07

@Alvaro I do remember these glitchy consoles, I believe it is the same issue as the Aquarium plants : these can't be upscaled. Quite often textures that cause graphical glitches when upscaled are animated, which joins what Kinko mentioned, "a very complex material just cannot handle a texture which has bigger mips".

@ Kinkojiro Thank you for the details !

@giftfish From MEUITM's Nexus page :
Find the following 3 entries:
TEXTUREGROUP_Character_Diff=(MinLODSize=32,MaxLODSize=512,LODBias=0)
TEXTUREGROUP_Character_Norm=(MinLODSize=32,MaxLODSize=512,LODBias=0)
TEXTUREGROUP_Character_Spec=(MinLODSize=32,MaxLODSize=256,LODBias=0)

And change them to:
TEXTUREGROUP_Character_Diff=(MinLODSize=512,MaxLODSize=4096,LODBias=0)
TEXTUREGROUP_Character_Norm=(MinLODSize=512,MaxLODSize=4096,LODBias=0)
TEXTUREGROUP_Character_Spec=(MinLODSize=256,MaxLODSize=4096,LODBias=0)

Not sure if this also applies to ME3, if it does, does it mean we have been doing texture modding wrong this whole time, not using the full potential of high resolution mods ?
User avatar
CreeperLava
User
 
Posts: 844
Joined: 07 Feb 2015, 21:52
Has thanked: 119 time
Have thanks: 83 time

Re: MIP Maps

Postby giftfish » 09 Jun 2016, 21:18

CreeperLava wrote:@giftfish From MEUITM's Nexus page :
Find the following 3 entries:
TEXTUREGROUP_Character_Diff=(MinLODSize=32,MaxLODSize=512,LODBias=0)
TEXTUREGROUP_Character_Norm=(MinLODSize=32,MaxLODSize=512,LODBias=0)
TEXTUREGROUP_Character_Spec=(MinLODSize=32,MaxLODSize=256,LODBias=0)

And change them to:
TEXTUREGROUP_Character_Diff=(MinLODSize=512,MaxLODSize=4096,LODBias=0)
TEXTUREGROUP_Character_Norm=(MinLODSize=512,MaxLODSize=4096,LODBias=0)
TEXTUREGROUP_Character_Spec=(MinLODSize=256,MaxLODSize=4096,LODBias=0)

Not sure if this also applies to ME3, if it does, does it mean we have been doing texture modding wrong this whole time, not using the full potential of high resolution mods ?

Well, I don't know... tis why I brought it up. I was confident I had made those exact INI modifications for ME1 many, many times. Whether or not they actually *do* anything is something else, entirely :)

I guess there are three possibilities:

1. ME1 works differently than ME3 and the INI settings have to be in place for high rez texture replacements to render properly.
2. Editing the ME1 INI settings are a safeguard and changes are totally unnecessary.
3. We've not been using the potential of HR texture mods for ME3, as we haven't been adjusting the coalesced settings. Adjusting the settings may impact how the game handles textures.

I'd say we need some testing done for both ME1 and ME3. Perhaps you can enlighten us even more, Creeper! :D
User avatar
giftfish
Toolset Developer
 
Posts: 1247
Joined: 08 Jan 2016, 02:35
Has thanked: 129 time
Have thanks: 75 time

Re: MIP Maps

Postby Alvaro » 09 Jun 2016, 21:59

Hi:

I recall to have seen similar adjustements for ME2 in the \BioWare\Mass Effect 2\BIOGame\Config\GamerSettings.ini file but as everyone use to tune graphical settings through coalesced.ini I thought the former were not as much detailed or just overriden by the latter.

A sample here: https://steamcommunity.com/sharedfiles/ ... =411209297

Regards!
Alvaro
User avatar
Alvaro
User
 
Posts: 83
Joined: 15 Mar 2015, 13:06
Has thanked: 8 time
Have thanks: 12 time

Re: MIP Maps

Postby Kinkojiro » 09 Jun 2016, 22:45

ME1 I am pretty sure they work. However the graphical rendering system is hugely different between ME1 and ME3, and even between ME2 and ME3. If you look in ME1 the materials are much more similar to basic UDK. In ME2 the materials objects get much more coded into binary. In ME3 this is even more the case.
User avatar
Kinkojiro
Modder
 
Posts: 578
Joined: 02 Dec 2013, 04:14
Has thanked: 233 time
Have thanks: 249 time

Re: MIP Maps

Postby CreeperLava » 10 Jun 2016, 06:41

If a texture is of higher resolution than the maximum allowed in the coalesced, how does the game manage it ? Does it simply stop at eg 1024x1024 and doesn't render above ? Or does it downscale higher MIPs to 1024x1024 ? I'm not sure if I can do much testing if it is the latter, as I don't a way of visualizing it then.
User avatar
CreeperLava
User
 
Posts: 844
Joined: 07 Feb 2015, 21:52
Has thanked: 119 time
Have thanks: 83 time

Re: MIP Maps

Postby giftfish » 10 Jun 2016, 13:45

CreeperLava wrote:If a texture is of higher resolution than the maximum allowed in the coalesced, how does the game manage it ? Does it simply stop at eg 1024x1024 and doesn't render above ? Or does it downscale higher MIPs to 1024x1024 ? I'm not sure if I can do much testing if it is the latter, as I don't a way of visualizing it then.

What would make sense is to do 6 tests, using a variety of 4K textures:

Test 1: Install 4K textures to ME1 without any INI modifications and observe.
Test 2: Add the INI modifications to ME1 and re-observe.
Tests 3&4: Same thing, but for ME2.
Tests 5&6: Same thing, but for ME3.

Testing observations should include:

1. Whether the 4K textures render in game at all.
2. If there are any associated glitches when the INI/BIN is/isn't modded.
3. If there are any changes in mipmap transitions when having a modded INI/BIN versus vanilla.

As far as types of textures, I'd say use a mixture, so you can hit a variety of LOD groups. Different group may behave differently. I'd say to include a couple different sizes of environment textures, then APL, character+diff/spec/norm, weapon, vehicle, VFX, and UI. That would give you a pretty good spread, plus it includes groups already at 4K, which provides a control.

Then, make sure as you test, you fnd a location in game where you can be decently methodical regarding distance, since the first mip change will likely happen quickly.

Doing that, I'd think would answer most, if not all, of your questions :]
User avatar
giftfish
Toolset Developer
 
Posts: 1247
Joined: 08 Jan 2016, 02:35
Has thanked: 129 time
Have thanks: 75 time

Re: MIP Maps

Postby CreeperLava » 10 Jun 2016, 20:06

Thank you, I am not sure if I have the motivation to do so much testing though^^. I'm in the process of compilating good INI/Coalesced settings I can find for the trilogy. I found something interesting while doing so, for ME1 : http://www.tweakguides.com/ME_8.html
There is a section about texture LOD settings. Apparently someone went and did that testing for ME1, and found that changing the values did have an impact. The optimal values are uploaded too, which is awesome.
User avatar
CreeperLava
User
 
Posts: 844
Joined: 07 Feb 2015, 21:52
Has thanked: 119 time
Have thanks: 83 time

Re: MIP Maps

Postby giftfish » 10 Jun 2016, 22:38

CreeperLava wrote:Thank you, I am not sure if I have the motivation to do so much testing though^^. I'm in the process of compilating good INI/Coalesced settings I can find for the trilogy. I found something interesting while doing so, for ME1 : http://www.tweakguides.com/ME_8.html
There is a section about texture LOD settings. Apparently someone went and did that testing for ME1, and found that changing the values did have an impact. The optimal values are uploaded too, which is awesome.


I'm familiar with that guide, but not sure what to make of that particular section. The download the author links only contains this text:

Mass Effect Tweak Guide: http://www.tweakguides.com/ME_1.html
Tested and provided by Martigen
Copy and paste over existing settings under [TextureLODSettings] in BIOEngine.ini
------------------------------------------------------------------

//TEXTUREGROUP_Character=(MinLODSize=256,MaxLODSize=4096,LODBias=-1)
//TEXTUREGROUP_CharacterNormalMap=(MinLODSize=256,MaxLODSize=4096,LODBias=-1)
//TEXTUREGROUP_Effects=(MinLODSize=256,MaxLODSize=4096,LODBias=-1)
TEXTUREGROUP_LightAndShadowMap=(MinLODSize=1024,MaxLODSize=4096,LODBias=-1)
TEXTUREGROUP_RenderTarget=(MinLODSize=1,MaxLODSize=4096,LODBias=-1)
TEXTUREGROUP_Skybox=(MinLODSize=4096,MaxLODSize=4096,LODBias=-1)
//TEXTUREGROUP_UI=(MinLODSize=256,MaxLODSize=4096,LODBias=-1)
//TEXTUREGROUP_Vehicle=(MinLODSize=256,MaxLODSize=4096,LODBias=-1)
//TEXTUREGROUP_VehicleNormalMap=(MinLODSize=256,MaxLODSize=4096,LODBias=-1)
TEXTUREGROUP_Weapon=(MinLODSize=4096,MaxLODSize=4096,LODBias=-1)
TEXTUREGROUP_WeaponNormalMap=(MinLODSize=4096,MaxLODSize=4096,LODBias=-1)
TEXTUREGROUP_World=(MinLODSize=16,MaxLODSize=4096,LODBias=2)
TEXTUREGROUP_WorldNormalMap=(MinLODSize=16,MaxLODSize=4096,LODBias=2)
TEXTUREGROUP_AmbientLightMap=(MinLODSize=32,MaxLODSize=4096,LODBias=-1)
TEXTUREGROUP_Character_Diff=(MinLODSize=512,MaxLODSize=4096,LODBias=-1)
TEXTUREGROUP_Character_Norm=(MinLODSize=512,MaxLODSize=4096,LODBias=-1)
TEXTUREGROUP_Character_Spec=(MinLODSize=512,MaxLODSize=4096,LODBias=-1)
TEXTUREGROUP_Environment_512=(MinLODSize=1024,MaxLODSize=4096,LODBias=-1)
TEXTUREGROUP_Environment_256=(MinLODSize=512,MaxLODSize=4096,LODBias=-1)
TEXTUREGROUP_Environment_128=(MinLODSize=256,MaxLODSize=4096,LODBias=-1)
TEXTUREGROUP_Environment_64=(MinLODSize=128,MaxLODSize=4096,LODBias=-1)
TEXTUREGROUP_VFX_512=(MinLODSize=32,MaxLODSize=4096,LODBias=0)
TEXTUREGROUP_VFX_256=(MinLODSize=32,MaxLODSize=4096,LODBias=0)
TEXTUREGROUP_VFX_128=(MinLODSize=32,MaxLODSize=4096,LODBias=0)
TEXTUREGROUP_VFX_64=(MinLODSize=32,MaxLODSize=4096,LODBias=0)
TEXTUREGROUP_GUI=(MinLODSize=64,MaxLODSize=2048,LODBias=-1)
TEXTUREGROUP_Environment_1024=(MinLODSize=4096,MaxLODSize=4096,LODBias=-1)
TEXTUREGROUP_VFX_1024=(MinLODSize=32,MaxLODSize=4096,LODBias=0)
TEXTUREGROUP_APL_128=(MinLODSize=256,MaxLODSize=4096,LODBias=-1)
TEXTUREGROUP_APL_256=(MinLODSize=512,MaxLODSize=4096,LODBias=-1)
TEXTUREGROUP_APL_512=(MinLODSize=1024,MaxLODSize=4096,LODBias=-1)
TEXTUREGROUP_APL_1024=(MinLODSize=2048,MaxLODSize=4096,LODBias=-1)
TEXTUREGROUP_Character_1024=(MinLODSize=2048,MaxLODSize=4096,LODBias=-1)
TEXTUREGROUP_Promotional=(MinLODSize=256,MaxLODSize=4096,LODBias=-1)


There's no information at all accompanying this text. No details on which values are vanilla vs modded, which values result changes in game, how the changes in values affect the game, etc. I'd say all of this information should be viewed with skepticism and taken with a grain of salt. As far as I can tell, the author of guide is basically saying, "These values might improve your game, and they shouldn't break it.".

So, yeah, if anyone still wants to do some more thorough testing that is in the least bit quantitative, that wouldn't be a bad thing.
User avatar
giftfish
Toolset Developer
 
Posts: 1247
Joined: 08 Jan 2016, 02:35
Has thanked: 129 time
Have thanks: 75 time

Re: MIP Maps

Postby CreeperLava » 18 Sep 2016, 13:44

@giftfish Should this really be in "Textures Questions" ? It's more research than questions.

I did some more tests with these LOD settings, partly to try to find which settings would be the best, and to understand why some of them wouldn't work. During the testing, I also remembered something I had completely forgotten : all modded textures are placed in the shadowmap texturegroup. So, obviously, all the testing has been done on this texturegroup with the same test texture as before. To begin with, here are the ME3 vanilla LOD settings (testing has been done for ME3 and ME2) :
Code: Select all
texturegroup_ambientlightmap=(MinLODSize=32,MaxLODSize=512,LODBias=0)
texturegroup_apl_1024=(MinLODSize=32,MaxLODSize=1024,LODBias=0)
texturegroup_apl_128=(MinLODSize=32,MaxLODSize=128,LODBias=0)
texturegroup_apl_256=(MinLODSize=32,MaxLODSize=256,LODBias=0)
texturegroup_apl_512=(MinLODSize=32,MaxLODSize=512,LODBias=0)
texturegroup_character_1024=(MinLODSize=32,MaxLODSize=1024,LODBias=0)
texturegroup_character_diff=(MinLODSize=32,MaxLODSize=512,LODBias=0)
texturegroup_character_norm=(MinLODSize=32,MaxLODSize=512,LODBias=0)
texturegroup_character_spec=(MinLODSize=32,MaxLODSize=256,LODBias=0)
texturegroup_environment_1024=(MinLODSize=32,MaxLODSize=1024,LODBias=0)
texturegroup_environment_128=(MinLODSize=32,MaxLODSize=128,LODBias=0)
texturegroup_environment_256=(MinLODSize=32,MaxLODSize=256,LODBias=0)
texturegroup_environment_512=(MinLODSize=32,MaxLODSize=512,LODBias=0)
texturegroup_environment_64=(MinLODSize=32,MaxLODSize=64,LODBias=0)
texturegroup_promotional=(MinLODSize=32,MaxLODSize=2048,LODBias=0)
texturegroup_ui=(MinLODSize=8,MaxLODSize=1024,LODBias=0)
texturegroup_vfx_1024=(MinLODSize=8,MaxLODSize=1024,LODBias=0)
texturegroup_vfx_128=(MinLODSize=8,MaxLODSize=128,LODBias=0)
texturegroup_vfx_256=(MinLODSize=8,MaxLODSize=256,LODBias=0)
texturegroup_vfx_512=(MinLODSize=8,MaxLODSize=512,LODBias=0)
texturegroup_vfx_64=(MinLODSize=8,MaxLODSize=64,LODBias=0)
texturegroup_world=(MinLODSize=256,MaxLODSize=512,LODBias=0)


texturegroup_character=(MinLODSize=1,MaxLODSize=4096,LODBias=0,MinMagFilter=aniso,MipFilter=point)
texturegroup_characternormalmap=(MinLODSize=1,MaxLODSize=4096,LODBias=0,MinMagFilter=aniso,MipFilter=point)
texturegroup_effects=(MinLODSize=1,MaxLODSize=4096,LODBias=0,MinMagFilter=linear,MipFilter=point)
texturegroup_lightmap=(MinLODSize=1,MaxLODSize=4096,LODBias=0,MinMagFilter=aniso,MipFilter=point)
texturegroup_rendertarget=(MinLODSize=1,MaxLODSize=4096,LODBias=0,MinMagFilter=aniso,MipFilter=point)
texturegroup_shadowmap=(MinLODSize=1,MaxLODSize=4096,LODBias=0,MinMagFilter=aniso,MipFilter=point,NumStreamedMips=3)
texturegroup_skybox=(MinLODSize=1,MaxLODSize=4096,LODBias=0,MinMagFilter=aniso,MipFilter=point)
texturegroup_vehicle=(MinLODSize=1,MaxLODSize=4096,LODBias=0,MinMagFilter=aniso,MipFilter=point)
texturegroup_vehiclenormalmap=(MinLODSize=1,MaxLODSize=4096,LODBias=0,MinMagFilter=aniso,MipFilter=point)
texturegroup_weapon=(MinLODSize=1,MaxLODSize=4096,LODBias=0,MinMagFilter=aniso,MipFilter=point)
texturegroup_weaponnormalmap=(MinLODSize=1,MaxLODSize=4096,LODBias=0,MinMagFilter=aniso,MipFilter=point)
texturegroup_worldnormalmap=(MinLODSize=1,MaxLODSize=4096,LODBias=0,MinMagFilter=aniso,MipFilter=point)


texturegroup_characterspecular=(MinLODSize=1,MaxLODSize=4096,LODBias=0,MinMagFilter=aniso,MipFilter=point)
texturegroup_cinematic=(MinLODSize=1,MaxLODSize=4096,LODBias=0,MinMagFilter=aniso,MipFilter=point)
texturegroup_effectsnotfiltered=(MinLODSize=1,MaxLODSize=4096,LODBias=0,MinMagFilter=aniso,MipFilter=point)
texturegroup_mobileflattened=(MinLODSize=1,MaxLODSize=4096,LODBias=0,MinMagFilter=aniso,MipFilter=point)
texturegroup_procbuilding_face=(MinLODSize=1,MaxLODSize=1024,LODBias=0,MinMagFilter=aniso,MipFilter=point)
texturegroup_procbuilding_lightmap=(MinLODSize=1,MaxLODSize=256,LODBias=0,MinMagFilter=aniso,MipFilter=point)
texturegroup_vehiclespecular=(MinLODSize=1,MaxLODSize=4096,LODBias=0,MinMagFilter=aniso,MipFilter=point)
texturegroup_weaponspecular=(MinLODSize=1,MaxLODSize=4096,LODBias=0,MinMagFilter=aniso,MipFilter=point)
texturegroup_worldspecular=(MinLODSize=1,MaxLODSize=4096,LODBias=0,MinMagFilter=aniso,MipFilter=point)


Now, how do these work ?
Here is what I understood of the parameters of TEXTUREGROUPs (thanks to this doc https://udn.epicgames.com/Three/Texture ... Properties). We'll see that this definition can't always be verified empirically. My hypothesis is that the customized Unreal Engine of Bioware prevents some of these settings of working as intended.

- MinLODBias : Defines the lowest possible MIP that will be used. Should be set at most to the same resolution than that of the smallest texture in the group. The biggest problem here, is to find that texture. My testing determined that a higher MinLODBias didn't prevent lower MIPs from appearing (down to 32px at most from my experience). Changing MinLODBias has no effect whatsoever on the game (at least, for shadowmap texturegroup).

- MaxLODBias : From my understanding, this could be set to anything as long as it's superior or equal to MinLODBias. Ideally, set it to 4096 so that the highest possible MIP will always be used. My testing determined that a lower MaxLODBias did prevent higher MIPs from appearing (eg limit a 4096px to it's 512px MIP).
This sentence from UDK doc confirms the experience : "It would increase distributable package size with no rendering quality benefit if a game shipped with 2048 textures assigned to a TextureGroup with a MaxLODSize of 1024." - textures would be downscaled to 1024px.

- LODBias : Serves as an offset to the MIP level that should be used first. It is cumulative with a higher level offset in the Texture Properties (my hypothesis : this one is baked in the game's code). For instance, if both are equal to 0, the highest MIP will be used first. Same if one is 1 and the other is -1 (1-1=0).
If the sum equals 1, the second MIP resolution will be used first, which means the texture will be downscaled. And so on...
This is speculation, but I suppose graphical glitches happen if the sum is equal to -1 or less (ie negative). The game would search for a MIP level that doesn't exist (eg 2048px on a 1024px texture) -> thus, black placeholder texture.
As with MinLODBias, testing showed no change when LODBias was changed, whether positive or negative.

- MinMagFilter, MipFilter, NumStreamedMips are defined in the UDK's doc and don't interest us here, so I won't describe them.


Here is a picture where you can see the Min/Max tests (reminder : the test texture is 4096x4096px).
Image

Another interesting discovery I had no idea about, the GamerSettings.ini's settings (in Documents/Bioware) take precedence over the Coalesced.ini whenever a parameter is present in both. For example, resolution can only be set in the GamerSettings ini.
Setting texturegroup_shadowmap=(MinLODSize=1,MaxLODSize=512,LODBias=0,MinMagFilter=aniso,MipFilter=point,NumStreamedMips=3) in the coalesced.bin and
texturegroup_shadowmap=(MinLODSize=1,MaxLODSize=256,LODBias=0,MinMagFilter=aniso,MipFilter=point,NumStreamedMips=3) in the GamerSettings.ini results in a maximum resolution of 256px, the Coalesced is ignored.

I've done the same tests with ME2, with the same results, unsurprisingly. The only difference is that shadowmap is called lightandshadowmap :
texturegroup_lightandshadowmap=(MinLODSize=256,MaxLODSize=256,LODBias=0)


TL;DR : MinLODBias and LODBias have no impact on the game, as far as I can see. They are probably baked in the code. MaxLODBias can be changed, but since all modded textures are currently placed in the Shadowmap texturegroup with MaxLODBias=4096, there's no use in changing it for the other texturegroups.
This can also be said for ME2.
User avatar
CreeperLava
User
 
Posts: 844
Joined: 07 Feb 2015, 21:52
Has thanked: 119 time
Have thanks: 83 time

PreviousNext

Return to Texture Discussion

Who is online

Users browsing this forum: No registered users and 0 guests

suspicion-preferred