3d.io 查看器中的 Archilogic material 预设选项
Archilogic material preset choices in 3d.io viewer
我想创建一个网络应用程序,让用户可以在 archilogic 3D 场景中的地板和墙壁的不同预设之间进行选择。
但是,就像在这个编辑器中一样,我需要更简单的材质菜单(用户可以从管理员之前上传的不同预设纹理中选择相应的漫反射、规格、法线和 alpha 贴图)。
我正在浏览 archilogic 的所有存储库,但找不到 3D 编辑器的源代码以使其更简单。
有谁知道它是否可用,如果没有,我应该朝哪个方向开发这样的应用程序?
这是一个仍在路线图上但尚未完成的功能,但有一些方法可以完成类似的事情。
所以最重要的是,以下描述是由于所有这些都还没有准备好和完善。这是实现目标的实验性方法。
我们来分解一下。
预定义materials
Archilogic 现在有一长串 pre-defined material 供您选择。它们与架构元素的类型无关,因此您可以在任何元素上使用任何 material。 Here is the list of available materials.
地板和天花板
地板和天花板包含在具有 io3d-floor
组件的单个元素中。
因此假设您在 elem
元素中设置了下限和上限,您可以执行以下操作 select a pre-defined material:
elem.components['io3d-floor'].data.material_top = 'wood_parquet_oak';
elem.components['io3d-floor'].update()
这会将下限 material 更改为给定的 pre-defined material,在本例中为 "wood_parquet_oak"。对于天花板 material,将 material_top
更改为 material_ceiling
。
墙壁
墙的工作原理几乎相同,但属性是 material_front
和 material_back
而不是 material_top
和 material_ceiling
。
其他建筑元素
对于其他元素,您可以通过查看相关组件的 .data
中可用的属性(例如,io3d-wall
表示墙)来解决这个问题。
自定义 materials
这有点难做对,因为制作自定义内容涉及大量属性 material。
假设您已经在某处上传了纹理,您可以这样定义 material:
elem.components['io3d-floor'].data.material_top = {
mapDiffuse: "https://example.org/texture.hi-res.gz.dds",
mapDiffusePreview: "https://example.org/texture.lo-res.jpg",
mapDiffuseSource: "https://example.org/texture.source.jpg"
}
您还可以为其提供额外的参数,例如 size: [3,3]
在重复自身或传递法线贴图或高光贴图之前将纹理缩放到覆盖模型中的 3x3 米,但为了简洁起见,我排除了这些参数。
注意:您可以将这种 material 定义用于也接受上述 pre-defined material 的任何内容。 遵循命名约定很重要,并且您需要有可用的 gzip 压缩 DDS 纹理以及 JPEG 版本。
'Source' 图片是可选的,但其他两个必须存在,否则将无法使用。
总结一下:此功能尚未完全准备就绪(正如您可以通过非常人为的方式让它发挥作用所表明的那样),但在更好的方法可用之前,此变通办法将一直有效。
我想创建一个网络应用程序,让用户可以在 archilogic 3D 场景中的地板和墙壁的不同预设之间进行选择。
但是,就像在这个编辑器中一样,我需要更简单的材质菜单(用户可以从管理员之前上传的不同预设纹理中选择相应的漫反射、规格、法线和 alpha 贴图)。
我正在浏览 archilogic 的所有存储库,但找不到 3D 编辑器的源代码以使其更简单。
有谁知道它是否可用,如果没有,我应该朝哪个方向开发这样的应用程序?
这是一个仍在路线图上但尚未完成的功能,但有一些方法可以完成类似的事情。
所以最重要的是,以下描述是由于所有这些都还没有准备好和完善。这是实现目标的实验性方法。
我们来分解一下。
预定义materials
Archilogic 现在有一长串 pre-defined material 供您选择。它们与架构元素的类型无关,因此您可以在任何元素上使用任何 material。 Here is the list of available materials.
地板和天花板
地板和天花板包含在具有 io3d-floor
组件的单个元素中。
因此假设您在 elem
元素中设置了下限和上限,您可以执行以下操作 select a pre-defined material:
elem.components['io3d-floor'].data.material_top = 'wood_parquet_oak';
elem.components['io3d-floor'].update()
这会将下限 material 更改为给定的 pre-defined material,在本例中为 "wood_parquet_oak"。对于天花板 material,将 material_top
更改为 material_ceiling
。
墙壁
墙的工作原理几乎相同,但属性是 material_front
和 material_back
而不是 material_top
和 material_ceiling
。
其他建筑元素
对于其他元素,您可以通过查看相关组件的 .data
中可用的属性(例如,io3d-wall
表示墙)来解决这个问题。
自定义 materials
这有点难做对,因为制作自定义内容涉及大量属性 material。
假设您已经在某处上传了纹理,您可以这样定义 material:
elem.components['io3d-floor'].data.material_top = {
mapDiffuse: "https://example.org/texture.hi-res.gz.dds",
mapDiffusePreview: "https://example.org/texture.lo-res.jpg",
mapDiffuseSource: "https://example.org/texture.source.jpg"
}
您还可以为其提供额外的参数,例如 size: [3,3]
在重复自身或传递法线贴图或高光贴图之前将纹理缩放到覆盖模型中的 3x3 米,但为了简洁起见,我排除了这些参数。
注意:您可以将这种 material 定义用于也接受上述 pre-defined material 的任何内容。 遵循命名约定很重要,并且您需要有可用的 gzip 压缩 DDS 纹理以及 JPEG 版本。
'Source' 图片是可选的,但其他两个必须存在,否则将无法使用。
总结一下:此功能尚未完全准备就绪(正如您可以通过非常人为的方式让它发挥作用所表明的那样),但在更好的方法可用之前,此变通办法将一直有效。