Terra::writeRaster导出栅格栈在Unity显示空白,求R内解决方案
问题:Terra导出的GeoTIFF在Unity中显示空白,求R内导出PNG或兼容Unity的方案
我用Terra的writeRaster导出栅格栈,文件在ArcGIS/QGIS里能正常查看,但作为多通道图像导入Unity后完全空白。目前只能通过QGIS导出渲染图像临时解决,想找在R内直接完成导出的办法,或者直接导出为PNG格式。
当前导出代码:
raster_stack <- stack(speed_raster, dir_raster) raster_stack <- brick(raster_stack) terra::writeRaster(raster_stack, "D:/Wind/RasterStacks/RasterStack.tif", filetype = "GTIFF",overwrite = TRUE)
解决方法
方案1:导出兼容Unity的GeoTIFF
Unity对GeoTIFF的格式有特定要求,需要是8位无符号整数(0-255)、通道顺序正确,且不能有过多冗余地理元数据。调整writeRaster参数即可:
# 1. 将栅格值归一化到0-255范围(针对连续数值型栅格) speed_norm <- terra::rescale(speed_raster, to = c(0, 255)) dir_norm <- terra::rescale(dir_raster, to = c(0, 255)) # 2. 转为8位无符号整数 speed_norm <- terra::as.int(speed_norm) dir_norm <- terra::as.int(dir_norm) # 3. 创建栅格栈并导出,指定兼容参数 raster_stack <- terra::c(speed_norm, dir_norm) terra::writeRaster(raster_stack, "D:/Wind/RasterStacks/RasterStack_Unity.tif", filetype = "GTIFF", datatype = "INT1U", # 8位无符号整数 overwrite = TRUE, options = c("PROFILE=BASELINE", "PHOTOMETRIC=RGB")) # 基础TIFF配置,适配图像读取逻辑
方案2:直接导出为PNG格式
可以用两种方式在R内导出PNG:
方式A:通过plotRGB导出(适合需要RGB映射的场景)
# 先归一化并转为8位整数 speed_norm <- terra::rescale(speed_raster, to = c(0, 255)) %>% terra::as.int() dir_norm <- terra::rescale(dir_raster, to = c(0, 255)) %>% terra::as.int() # 导出PNG png("D:/Wind/RasterStacks/RasterStack.png", width = ncol(raster_stack), height = nrow(raster_stack)) # 根据需求调整RGB通道映射,示例用speed做红/蓝通道,dir做绿通道 terra::plotRGB(terra::c(speed_norm, dir_norm), r=1, g=2, b=1) dev.off()
方式B:直接用writeRaster导出PNG
# 确保栅格值已归一化到0-255并转为8位整数(步骤同上) raster_stack <- terra::c(speed_norm, dir_norm) terra::writeRaster(raster_stack, "D:/Wind/RasterStacks/RasterStack.png", filetype = "PNG", datatype = "INT1U", overwrite = TRUE)
原因说明
Unity读取GeoTIFF时更偏向普通图像的规范,而GIS导出的TIFF会携带大量地理空间元数据,且常使用浮点型数据,导致Unity无法正确解析。转为8位整数+基础TIFF配置,或者直接导出PNG,就能适配Unity的图像读取逻辑。
内容的提问来源于stack exchange,提问作者ZArmstrong
相关产品推荐
相关产品推荐

