r.VT.Mobile.ManualTrilinearFiltering

r.VT.Mobile.ManualTrilinearFiltering

#Overview

name: r.VT.Mobile.ManualTrilinearFiltering

This variable is created as a Console Variable (cvar).

It is referenced in 3 C++ source files.

#Summary

#Usage in the C++ source code

The purpose of r.VT.Mobile.ManualTrilinearFiltering is to control the use of manual trilinear filtering for Virtual Textures (VTs) on mobile platforms. This setting is specifically related to the rendering system, particularly for handling virtual textures on mobile devices.

This setting variable is primarily used in the Unreal Engine’s rendering subsystem, specifically in the Virtual Texture (VT) module and shader compilation process. It’s referenced in the Engine and RenderCore modules.

The value of this variable is set as a console variable (CVar) with a default value of 1 (enabled). It can be modified through the Unreal Engine console or configuration files.

This variable interacts with other Virtual Texture related settings and shader compilation parameters. It’s used in conjunction with platform-specific checks (bIsMobilePlatform) and affects shader defines (VIRTUAL_TEXTURE_MANUAL_TRILINEAR_FILTERING).

Developers must be aware that:

  1. This setting is specific to mobile platforms.
  2. It’s used when Temporal Anti-Aliasing is not supported on the target mobile platform.
  3. Enabling this feature may increase rendering costs on mobile devices.

Best practices when using this variable include:

  1. Only enable it on mobile platforms that don’t support Temporal Anti-Aliasing.
  2. Consider the performance impact on target devices, as manual trilinear filtering is more expensive.
  3. Test the visual quality and performance with this setting both enabled and disabled to determine the best configuration for your specific mobile game or application.
  4. Be aware that changing this setting may require shader recompilation, which can impact development and build times.

#References in C++ code

#Callsites

This variable is referenced in the following C++ source code:

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/VT/VirtualTextureScalability.cpp:104

Scope (from outer to inner):

file
namespace    VirtualTextureScalability

Source code excerpt:


	static TAutoConsoleVariable<int32> CVarVTMobileEnableManualTrilinearFiltering(
		TEXT("r.VT.Mobile.ManualTrilinearFiltering"),
		1,
		TEXT("Whether to use a manual trilinear filtering for VTs on mobile platforms.\n")
		TEXT("This more expensive filtering is used on mobile platforms that do not support Temporal Anti-Aliasing.\n"),
		ECVF_RenderThreadSafe | ECVF_ReadOnly);

	static TAutoConsoleVariable<int32> CVarVTEnableAnisotropy(

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/ShaderCompiler/ShaderCompiler.cpp:8658

Scope (from outer to inner):

file
function     void GlobalBeginCompileShader

Source code excerpt:

		if (bIsMobilePlatform)
		{
			static FShaderPlatformCachedIniValue<bool> CVarVTMobileManualTrilinearFiltering(TEXT("r.VT.Mobile.ManualTrilinearFiltering"));
			SET_SHADER_DEFINE(Input.Environment, VIRTUAL_TEXTURE_MANUAL_TRILINEAR_FILTERING, (CVarVTMobileManualTrilinearFiltering.Get(Target.GetPlatform()) ? 1 : 0));
		}
	}

	if (bIsMobilePlatform)
	{

#Loc: <Workspace>/Engine/Source/Runtime/RenderCore/Private/Shader.cpp:2195

Scope (from outer to inner):

file
function     void ShaderMapAppendKeyString

Source code excerpt:

			if (VTTextures)
			{
				static FShaderPlatformCachedIniValue<bool> CVarVTMobileManualTrilinearFiltering(TEXT("r.VT.Mobile.ManualTrilinearFiltering"));
				VTFiltering += (CVarVTMobileManualTrilinearFiltering.Get(Platform) ? 2 : 0);
			}
		}

		const bool VTSupported = TargetPlatform != nullptr && TargetPlatform->SupportsFeature(ETargetPlatformFeatures::VirtualTextureStreaming);