Is it need to make Texture LODs?

UE4 automatically make mipmaps for your textures. If you import 1024 texture to engine it’s automatically creates 512,256,128,64,32,16,8,4,2,1 size textures from the original texture data. These are stored as mipmaps for original texture and it cost +33% more texture memory. When texture is sampled at material, pixel shader calculates what size mipmap it should sample. This automatic mipmapping prevents aliasing and saves a lot of texture memory bandwith. There is also texture streaming feature that only loads mipmap levels that are needed for object. If object is really far a way engine does not need to load the full size texture but small version of it. Let say 64x64 texture.

Original Text: Texture Size LODs

UE4 Texture settings help (Mip Gen Settings, LOD Bias, Power of Two Mode)


Lifecycle of a Texture in Unreal Engine for Virtual Production

Texture Streaming

UE4 Texture Optimization Tutorial - How to use Mipmaps and Texture Streaming in Unreal Engine 4

[TUTORIAL] Unreal Engine - How to optimize texture resolution

[UE4] Think about how to determine the Texture Streaming Pool Size

[UE4] About texture memory

[UE4] Impact of Texture Group on Texture Streaming

Q: How to set Streaming PoolSize for starting up application?
A: Modify \Engine\Config\ConsoleVariables.ini, add r.Streaming.PoolSize=2000 under [Startup].

Q: What’s non-streaming texture?
A: Without respecting the power of 2 rule.

Q: How to change streaming pool size?
A: Use the console command: r.Streaming.PoolSize 1500 or make the change permanent by editing your DefaultEngine.ini to include:



Q: Disable Texture Streaming to improve performance and image quality?
A: Change your Engine.ini located in C:\Users\username\AppData\Local\Boltgun\Saved\Config\WindowsNoEditor to include these lines:


or from your library page, right-click on Boltgun, select properties and add



Texture Compression

Your Guide To Texture Compression In Unreal Engine

Gamma Space vs Linear Space

Epic Games Texturing Guidelines

SRGB: Whether Texture and its source are in SRGB Gamma color space.

Parallax Occlusion Mapping

Bump Offset and Parallax Occlusion Mapping - UE4 Materials 101 - Episode 8

[UE4] Parallax Occlusion Tutorial

UE4 Parallax Occlusion Mapping Tutorial

Parallax Occlusion Mapping

Relief Mapping

RM-Methods adds many Methods of Relief Mapping beyond the actual POM shader on Unreal Engine. The plugin can generate an special Texture Map to use on the shaders.

Detail Textures

Adding Detail Textures


[UE4] How to make a custom Mipmap

Q: Why can’t modify Mip Gen Settings?
A: If you are not using a power of 2 texture you will get the NoMipmaps and will not be able to select any other options from the drop-down or adjust the LOD Bias.


Editor Notes

How to set Texture Size

Texture Editor -> Compression -> Maximum Texture Size.
Default value 0 means the maximum size for the format on each platform.

How to leave the texture uncompressed

Compression Settings -> Vector Displacementmap (RGBA8).


Texture Settings

Texture Support and Settings

Programming Notes

How to save Texture2D to image file (e.g. .jpg; .png) using C++

Use UImageWriteBlueprintLibrary::ExportToDisk, example: CompositingElementOutputs.cpp


How to generate mipmap for dynamic Texture 2D


UCanvasRenderTarget2D::bAutoGenerateMips = true;

No mipmap support for Dynamic Texture 2D

How to change LODBias at runtime

C++ code:

if(UTexture2D* Tex = GetTexture())
    Tex->LODBias = LODBias;

Cosole command:

r.mipmaplodbias 0
How to get list of textures from a material
virtual void UMaterialInterface::GetUsedTextures
    TArray< UTexture * > & OutTextures,
    EMaterialQualityLevel::Type QualityLevel,
    bool bAllQualityLevels,
    ERHIFeatureLevel::Type FeatureLevel,
    bool bAllFeatureLevels
) const

How to list all the textures loaded in system memory (RAM)

Quoted from ImGuiMemoryDebugger.cpp:

// Find out how many primitive components reference a texture.
TMap<UTexture2D*, int32> TextureToUsageMap;
for (TObjectIterator<UPrimitiveComponent> It; It; ++It)
    UPrimitiveComponent* PrimitiveComponent = *It;

    // Use the existing texture streaming functionality to gather referenced textures. Worth noting
    // that GetStreamingTextureInfo doesn't check whether a texture is actually streamable or not
    // and is also implemented for skeletal meshes and such.
    ImGuiDebugToolsUtils::FStreamingTextureLevelContext LevelContext(EMaterialQualityLevel::Num, PrimitiveComponent);
    FStreamingTextureLevelContext LevelContext(EMaterialQualityLevel::Num, PrimitiveComponent);
    TArray<FStreamingRenderAssetPrimitiveInfo> StreamingTextures;
    PrimitiveComponent->GetStreamingRenderAssetInfo((FStreamingTextureLevelContext&)LevelContext, StreamingTextures);

    //// Increase usage count for all referenced textures
    for (int32 TextureIndex = 0; TextureIndex < StreamingTextures.Num(); TextureIndex++)
        UTexture2D* Texture = Cast<UTexture2D>(StreamingTextures[TextureIndex].RenderAsset);
        if (Texture)
            // Initializes UsageCount to 0 if texture is not found.
            int32 UsageCount = TextureToUsageMap.FindRef(Texture);
            TextureToUsageMap.Add(Texture, UsageCount + 1);

Texture Streaming

Texture Streaming Configuration

Virtual Texturing | Live from HQ | Inside Unreal

The Render to Texture Blueprint is a tool that has several different texture baking functions built in. It makes use of the editor’s ability to save high resolution screenshots including visualization buffers such as base color and world normal.

Texture Properties. Reference for the properties and settings for texture assets.

Textures. Image assets used in Materials to apply to surfaces or drawn on-screen by the HUD.

Plugins & Tools

Load Texture

Runtime Image Loader, Load images into Unreal at runtime without hitches