Python uv贴图在低分辨率下效果不佳(警告:大量图像)

Python uv贴图在低分辨率下效果不佳(警告:大量图像),python,numpy,image-processing,scipy,uv-mapping,Python,Numpy,Image Processing,Scipy,Uv Mapping,TL;DR:有没有一种方法可以缩小UV贴图和纹理的比例而不损失生成结果的质量 完整故事: 我正在尝试开发一个简单的渲染引擎,它将从.EXR文件中获取UV贴图,在其上添加纹理,并提供给客户端。整个过程如下所示: from PIL import Image import numpy as np texture = Image.open("texture.png") texture_array = np.asarray(txt).transpose(1, 0, 2) # assume readi

TL;DR:有没有一种方法可以缩小UV贴图和纹理的比例而不损失生成结果的质量

完整故事:

我正在尝试开发一个简单的渲染引擎,它将从.EXR文件中获取UV贴图,在其上添加纹理,并提供给客户端。整个过程如下所示:

from PIL import Image
import numpy as np

texture = Image.open("texture.png")
texture_array = np.asarray(txt).transpose(1, 0, 2) 

# assume reading EXR file and grabbing only R and G channels from it
uv = read_exr()
# scale indexes to texture size
uv[..., 0] *= texture.size[0]
uv[..., 1] *= texture.size[1]
map = uv.astype('uint16')
# use numpy indexing to produce the result
result = texture_array[map[..., 0], map[..., 1]]

# downsample for smoother image
image = Image.fromarray(result, "RGB").resize((2048, 2048), Image.LANCZOS)
生成的图像是衬衫,纹理实际上是织物扫描。UV实际上由多个文件组成,因为衬衫的每个部分可能有不同的选项

在高分辨率下一切都很好,但我想制作一个“预览”版本,显示在网页上。现在的问题是,当我尝试缩小UV和纹理时,结果只适合大图案的织物。例如,有许多细线的织物会产生类似云纹的效果。以下是按浏览器比例缩小的高分辨率结果示例(这是可以接受的):

结果由UV和纹理组成,它们通过编程方式缩小(这是不可能的):

以下是我缩放纹理和UV的方式:

from scipy.ndimage.interpolation import zoom

uv = zoom(uv, [0.25, 0.25, 1], order=1) # higher order produces negative values
texture = texture.resize((1024, 1024), Image.LANCZOS)
我还尝试使用
cv2
进行UV缩放,但结果相同

能够构建这个缩略图版本非常关键,因为构建高分辨率版本只需几秒钟,而构建缩略图只需几秒钟。不幸的是,由于大量不同的选项,我无法预渲染所有可能的组合

我想知道是否有一些技巧可以使低分辨率的结果看起来更好,理想的情况是看起来与降采样的“原始”图像相同。我真的很感激任何想法,因为我对图像处理知之甚少,到目前为止也找不到任何像样的解决方案

以下是我已经尝试过但没有运气的东西:

  • 模糊纹理一点高斯模糊+取消锐化遮罩。有助于增加云纹,但会降低织物的色调:
  • 使用原始大小的纹理(无下采样):结果看起来过于锐利,并且 云纹效应;其他很多面料都很难看

  • 不保证,但我的第一次尝试可能是尝试
    im.thumbnail(大小、图像、别名)
    as。我想,消除混叠应该有助于云纹。你是否在寻找有效的方法?还有,我还不太清楚这个问题:你能从3D图形中分离出这个问题吗?换句话说,您的问题是否可以简化为“使用PIL/numpy对图像进行下采样时如何避免云纹”?或者,3D渲染过程中是否会产生额外的莫尔人工制品?@LukasGraf提出了一个很好的观点。。我可以补充一点,AA过滤通常是后期渲染operation@LukasGraf是的,我已经对图像进行了一次下采样:我的源(UV和纹理)是4096x4096,我将渲染结果调整为2048x2048,以获得更平滑的边缘/过渡,结果图像看起来很好。但这种渲染需要很多时间,所以我现在的目标是将源大小调整为1024x1024,这样在下采样后可以得到512x512图像。当然,如果我拍摄2048x2048图像并将其调整为512x512,我会得到完美的效果,但这样我仍然需要构建高分辨率图像,而且成本很高。使用低分辨率的光源会产生不好的结果,尽管我不明白为什么。。。