- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 1920x1080 之类的分辨率乘以 4 这样的过采样值来渲染视口(viewport)。现在我需要将渲染分辨率从 7680x4320 下采样回到 1920x1080。
Unreal 中是否有我可以使用的函数?或者任何可以很好地处理这个问题的库(仅限Windows)?或者我自己写这个的正确方法是什么?
我们尝试实现下采样,但它仅在 SnapshotScale 为 2 时有效,当它高于 2 时,它似乎对图像质量没有影响。
UTexture2D* AAVESnapShotManager::DownsampleTexture(UTexture2D* Texture)
{
UTexture2D* Result = UTexture2D::CreateTransient(RenderSettings.imageWidth, RenderSettings.imageHeight, PF_B8G8R8A8);
void* TextureDataVoid = Texture->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_ONLY);
void* ResultDataVoid = Result->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE);
FColor* TextureData = (FColor*)TextureDataVoid;
FColor* ResultData = (FColor*)ResultDataVoid;
int32 WindowSize = RenderSettings.resolutionScale / 2;
for (int x = 0; x < Result->GetSizeX(); ++x)
{
for (int y = 0; y < Result->GetSizeY(); ++y)
{
const uint32 ResultIndex = y * Result->GetSizeX() + x;
uint32_t R = 0, G = 0, B = 0, A = 0;
int32 Samples = 0;
for (int32 dx = -WindowSize; dx < WindowSize; ++dx)
{
for (int32 dy = -WindowSize; dy < WindowSize; ++dy)
{
int32 PosX = (x * RenderSettings.resolutionScale + dx);
int32 PosY = (y * RenderSettings.resolutionScale + dy);
if (PosX < 0 || PosX >= Texture->GetSizeX() || PosY < 0 || PosY >= Texture->GetSizeY())
{
continue;
}
size_t TextureIndex = PosY * Texture->GetSizeX() + PosX;
FColor& Color = TextureData[TextureIndex];
R += Color.R;
G += Color.G;
B += Color.B;
A += Color.A;
++Samples;
}
}
ResultData[ResultIndex] = FColor(R / Samples, G / Samples, B / Samples, A / Samples);
}
}
Texture->PlatformData->Mips[0].BulkData.Unlock();
Result->PlatformData->Mips[0].BulkData.Unlock();
Result->UpdateResource();
return Result;
}
我期望高质量的过采样纹理输出,使用 SnapshotScale 中的任何正整数值。
最佳答案
我有一个建议。它不是很直接,但它不涉及图像过滤的编写或库的导入。
使用节点 TextureObject->TextureSample-> 连接到 Emissive 制作一个不发光的 Material 。
使用您在函数中开始使用的纹理来填充 Material 的 Material 实例动态上的纹理对象。
使用“将 Material 绘制到渲染目标”功能将 Material 实例动态绘制到使用您的目标分辨率预设的渲染目标。
关于c++ - 如何在 UnrealEngine 中对非 2 的幂纹理进行下采样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56124079/
1. 反射 什么是反射?或者说反射能做什么,简单来说,反射可以提供一种能力,能够在运行时动态获取对象的成员信息,如 成员函数 , 成员变量 。 UE 在其反射系统上支持了许多功能
1 连接过程 - 握手 传统的 C/S 架构下,Client 和 Server 通常会建立一条抽象的 Connection,用来进行两端的通信。 UE 的官方文档中提供了 Client 连接
我正在使用 1920x1080 之类的分辨率乘以 4 这样的过采样值来渲染视口(viewport)。现在我需要将渲染分辨率从 7680x4320 下采样回到 1920x1080。 Unreal 中是否
我是虚幻引擎的新手,我正在尝试声明一个 inline 函数,如下所示: void inline Print(const char* s) { UE_LOG(LogTemp, Warning,
UnrealEngine 4.19 默认使用 Visual Studio 2017 的 C++14 模式。 Visual Studio 2017 编译器有一个标志 /std:c++17启用 C++17
我是一名优秀的程序员,十分优秀!