在Unity中使用ThreeJS着色器

3
我正在Unity中开发一个项目,使用AR将产品放置在现实世界中。这些产品(几何和材质)是从http服务器下载并转换为Unity中的gameobject。
这些产品最初是在ThreeJS中创建的(不要问为什么),与Unity几何/材料具有不同的结构。
我已经让几何部分工作了,但是材质方面遇到了问题。Unity中的“Standard”着色器不包含创建材质所需的所有参数(例如:alpha map,environment map,refraction,displacement map,roughness map,double side等)。
我已经查看了资产商店/GitHub中的不同插件/库(如LUX, Bit2Good, Shader SandwichSimple Physical Shader),但似乎它们都缺少一些参数。我考虑自己编写Phong/Physical着色器,但这肯定需要我几周的时间才能完成。
你们有什么建议吗?

1
编写基本的Phong着色器不应该花费太长时间;网络上有很多与您提到的参数相关的数学示例。我还建议查看NVIDIA的FX Composer。它可以加速这个过程,因为您可以实时查看着色器中的更改,唯一的缺点是NVIDIA不再为其提供支持。 - Hazel へいぜる
Blinn-Phong着色器确实应该很容易实现。我更担心的是物理着色器。我想知道是否有人有同样的想法,在Unity中实现ThreeJS材质并将代码放在GitHub(或AssetStore)中。 - Tostifrosti
1
模型的格式是怎样的?您是否考虑将模型转换为更标准的格式,例如GLTF,以便使用已有的加载器? - Garrett Johnson
@GarrettJohnson 这些模型以自制格式转换。解析此格式后,几何部分将通过自制加载程序传递(如果库更稳定,这将在未来被Draco替换)。材料部分也将由自制加载程序解析,该程序使用Unity的'Standard'着色器。我想要替换这个着色器以使用我在上面描述的更多参数。你提到的GLTF加载器似乎仍在发布1.0版本的道路上。 - Tostifrosti
1个回答

3
标准着色器中没有 alpha 贴图 - 主纹理的 alpha 通道用作 alpha 贴图。
标准着色器中也没有环境贴图 - 使用立方体贴图作为反射探头。
标准着色器中没有折射 - 这是一个标准着色器。
标准着色器中的置换贴图称为高度图。
粗糙度贴图 - 不在标准着色器中(最接近的方法是反向使用它并用作遮挡贴图)。
双面 - 没有。
您需要为所有这些编写自己的着色器。
建议如下:
步骤1. 找到每个属性的着色器
步骤2. 通过复制相关代码来组合它们。

嗨,尼卡,感谢您的快速回答!我已经知道Unity中的标准着色器不接受这些物理参数(除了高度图,谢谢!)。我希望有人在某个地方实现了将ThreeJS材质应用于Unity,并且代码可以在GitHub上获得。恐怕我必须自己编写这些着色器。 - Tostifrosti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接