RenderDoc 导出Cubemap到UE

找到使用了Cubemap的模型,再Output里会显示该模型使用的所有贴图 ,选中Cubemap导出

选择导出格式为HDR

 

 导出的Cubemap是竖着的,需要再PS里逆时针旋转90度

还有,导出的的Cubemap方向是错的,需要把3,4 跟1,2 对换,6旋转180度

UE 文档里的方向参考

最后使用 DDS导出工具 ,导出成Cubemap贴图

 

也可以使用Python来做方向调整 (暂时还没写HDR的格式)

from PIL import Image

# 打开图片文件
img = Image.open(r"D:\a.png")
outImg = r"D:\c.jpg"

# 顺时针旋转90度
img = img.rotate(90, expand=True)

# 获取图片宽度和高度
width, height = img.size

# 计算每份的宽度
piece_width = width // 6

# 拆分图片并交换位置
pieces = []
pieces.append(img.crop((2 * piece_width, 0, 3 * piece_width, height)))  # 3
pieces.append(img.crop((3 * piece_width, 0, 4 * piece_width, height)))  # 4
pieces.append(img.crop((0, 0, piece_width, height)))                    # 1
pieces.append(img.crop((piece_width, 0, 2 * piece_width, height)))      # 2
pieces.append(img.crop((4 * piece_width, 0, 5 * piece_width, height)))  # 5
pieces.append(img.crop((5 * piece_width, 0, 6 * piece_width, height)))  # 6

# 将拆分后的第6份旋转180度
pieces[-1] = pieces[-1].rotate(180)

# 拼接图片
new_img = Image.new("RGB", (width, height))
x_offset = 0
for piece in pieces:
    new_img.paste(piece, (x_offset, 0))
    x_offset += piece_width

# 保存拼接后的图片
new_img.save("new_image.jpg")

# 保存拼接后的图片
new_img.save(outImg)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用Cubemap Render Target的UE4 C++例子: 首先,你需要在UE4中创建一个Cubemap Render Target。在Content Browser中,右键点击并选择 "Material Render Target",然后选择 "Cubemap" 选项。你可以选择你想要的分辨率和采样率等选项,然后保存Render Target。 接下来,在你的C++类中,你需要声明一个指向Cubemap Render Target的指针。在你的.h文件中添加以下代码: ```c++ class ACubemapActor : public AActor { GENERATED_BODY() public: // Constructor ACubemapActor(); // Cubemap Render Target UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cubemap") UTextureRenderTargetCube* CubemapRenderTarget; }; ``` 然后,在你的.cpp文件中,你需要在构造函数中初始化Cubemap Render Target指针。你还需要创建一个Scene Capture Component,并将其附加到Actor上。在这个Scene Capture Component中,你需要将Cubemap Render Target设置为目标,并启用Cubemap渲染。以下是示例代码: ```c++ ACubemapActor::ACubemapActor() { // Create Cubemap Render Target static ConstructorHelpers::FObjectFinder<UTextureRenderTargetCube> CubemapRenderTargetObject(TEXT("/Game/MyCubemapRenderTarget")); CubemapRenderTarget = CubemapRenderTargetObject.Object; // Create Scene Capture Component USceneCaptureComponentCube* SceneCaptureComponent = CreateDefaultSubobject<USceneCaptureComponentCube>(TEXT("SceneCaptureComponent")); SceneCaptureComponent->RegisterComponent(); SceneCaptureComponent->AttachToComponent(RootComponent, FAttachmentTransformRules::KeepRelativeTransform); // Set Cubemap Render Target as Target SceneCaptureComponent->TextureTarget = CubemapRenderTarget; // Enable Cubemap Rendering SceneCaptureComponent->CaptureSource = ESceneCaptureSource::SCS_SceneColorSceneDepth; SceneCaptureComponent->bCaptureScenePerFrame = true; SceneCaptureComponent->bCaptureEveryFrame = true; SceneCaptureComponent->bCaptureOnMovement = false; SceneCaptureComponent->bCaptureRotation = false; SceneCaptureComponent->bCaptureReflectiveObjects = true; } ``` 现在,你可以在Actor的Material中使用Cubemap Render Target。只需创建一个使用Cubemap的材质,并将其应用于Actor的Mesh组件即可。以下是示例代码: ```c++ UMaterialInstanceDynamic* DynamicMaterial = UMaterialInstanceDynamic::Create(Material, this); DynamicMaterial->SetTextureParameterValue("CubemapTexture", CubemapRenderTarget); MeshComponent->SetMaterial(0, DynamicMaterial); ``` 这样,你就可以使用Cubemap Render Target来渲染你的场景,并将其用于材质中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值