使用不同UV的单个对象的多种材质

时间:2016-10-26 17:25:19

标签: optimization three.js 3d-model

问题的史前史:

链接到相关question on CG(关于某些编辑器中的UV展开,例如下面提到的模型的3dsmax)

我有一个单项模型。它从3DS Max导出(带纹理坐标)。

UVWs 和对象的屏幕截图。 UVWs 的无用部分分组在右上角。

3ds max UVW editor

我正在使用此纹理作为凹凸贴图(调整大小以减少问题中的位置,原始大小为512x512)。

Bump map for the question

此模型加载THREE.OBJMTLLoader并在浏览器中使用 threejs 进行渲染。当然,如果我需要重用此映射来添加需要该对象的所有部分的另一个纹理,则此纹理和 UVWs 将变得无用。

现在不要走出3DS Max,因为这个问题不是在那里建立模型。

现在让我们设想一个存在于场景中某个位置的立方体(THREE.BoxGeometry)(scene.add( cube );)。

我想在多维数据集的左侧大小上绘制图像。在右侧,我需要放置凹凸贴图,在顶部将是light map。另一方面,纹理贴图可以以某种方式组合或仅为空 - 我想这不是关键点。

像这样:

Question UVs example

但在这种情况下,每张地图只占有用地的1/16。像这样:

Question UVs example 1 in 12

当然,可以移动一些块,每个地图将获得高达1/9的可用空间,我需要每个纹理的质量,所以使用整个阻止(1/1)为每个纹理这样。

Question UVs example 1 in 1

例如,纹理可以是512x512,凹凸贴图可以平铺(参见史前史中的图像)。

问题是:

  • 我需要执行哪些步骤才能为每个纹理使用所有可用空间?
  • 什么技术可以帮助实现这样的结果?
  • 最佳做法/指南/建议/指向文章/示例的链接 - 导致正确方向的内容

1 个答案:

答案 0 :(得分:2)

  

是否可以为单个对象使用多个不同的UWV来添加不同的纹理?

Three.js材质基本上支持最多2个UVs通道,但不控制给定纹理使用哪个通道。第一个通道用于tilable纹理(漫反射,粗糙度等)。第二个用于非tilable(AO,光照贴图)

也就是说,使用自定义几何体和自定义材质,您可以根据需要使用尽可能多的uvs通道。唯一的限制是着色器中可用的最大属性(至少为8)

3DS Max对uvs频道的数量也没有限制。

主要问题是以支持多个UV通道的格式导出/导入模型。 OBJ没有。

  

是否可以仅将UWV用于部分模型以避免浪费空间?

您可以简单地为不需要纹理的部件使用不同的材料