当然可以选择将纹理保存到文件,但首先你需要知道RHI 结构和UTexture 对象之间的区别。
渲染硬件接口 (RHI) 是一个独立于平台的高级渲染代码。它为引擎/渲染器的低级平台相关部分提供 API。
我不确定,如何正确定义UTexture,但一般来说,游戏中使用的对象、编辑器代码、材质等。他们有RHI结构的引用。
为了回答您的问题,要将纹理保存到文件中,您应该使用FFileHelper 结构中的一种方法,即SaveArrayToFile,作为输入,您需要拥有原始纹理数据(或压缩位图FImageUtils::CompressImageArray ),这可能是另一个问题。某种纹理(如 RenderTargets)有方法 ReadPixels,它返回一个像素数组,但是当你的纹理没有那个方法时怎么办?
您需要深入挖掘RHI API 并将一些渲染器命令排入队列,例如:
void GetTexturePixels(FTexture2DRHIRef Texture, TArray<FColor>& OutPixels)
{
struct FReadSurfaceContext
{
FTexture2DRHIRef Texture;
TArray<FColor>* OutData;
FIntRect Rect;
FReadSurfaceDataFlags Flags;
};
OutPixels.Reset();
FReadSurfaceContext ReadSurfaceContext =
{
Texture,
&OutPixels,
FIntRect(0, 0, Texture->GetSizeXY().X, Texture->GetSizeXY().Y),
FReadSurfaceDataFlags(RCM_UNorm, CubeFace_MAX)
};
ENQUEUE_UNIQUE_RENDER_COMMAND_ONEPARAMETER(
ReadSurfaceCommand,
FReadSurfaceContext, Context, ReadSurfaceContext,
{
RHICmdList.ReadSurfaceData(
Context.Texture,
Context.Rect,
*Context.OutData,
Context.Flags
);
});
FlushRenderingCommands();
}