gpt4 book ai didi

java - OpenGL正确实现多种 Material

转载 作者:行者123 更新时间:2023-12-01 09:44:42 25 4
gpt4 key购买 nike

我正在开发一个包含多个需要多种 Material 的对象的游戏场景。我在网上广泛搜索,但没有找到满意的解决方案。

我的场景将像一条河流一样流过,无论如何,那里的 Material 都需要一个单独的着色器(它将把许多镜面反射和法线贴图组合成看起来像河流的东西),然后有一个地形会混合两种(草和沙子纹理)需要另一个着色器。还有一个拥有双手和盔甲等等的玩家。

编辑:本质上我希望找到最有效的方法来实现最灵活的多重 Material /着色器实现。

简而言之,有许多复杂的对象需要不同的着色器。它们数量不多,但复杂程度很高。

因此,多次使用 glUseProgram() 似乎并不是最聪明的主意。此外,许多着色器代码可以像点光计算一样通用。制作通用着色器并使用 if 和状态制服可能会起作用,但仍然需要不同的河流着色器以及同样不同的 Material 。

我基本上不明白这样一个通用系统的组织和实现。我使用过像 Unreal 或可能 Blender 这样的引擎,它们使用基于 Node 的 Material ,并允许自定义每种 Material 而没有太多延迟。这样的系统如何转化为基础 GPU 代码?

最佳答案

如果您确实因由于太多 glUseProgram() 调用而面临计时问题,您可能需要查看 shader subroutines并使用更少但更大的程序。在此之前,对数据进行排序以仅在需要时更改状态(例如按着色器排序,然后按 Material 排序)。我想无论如何这始终是一个很好的做法。

老实说,我不认为您的计时问题来自使用太多程序。例如,您可能想要使用 frustum culling (以避免将几何图形发送到将被剔除的 GPU)和 early z-culling (以避免对将被覆盖的片段进行复杂的光照计算)。您还可以使用level of detail对于距离较远的复杂几何形状,因此不需要太多细节。

关于java - OpenGL正确实现多种 Material ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38160745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com