gpt4 book ai didi

C++:动画:法线:如何处理大量法线并在动画更新期间更新它们?

转载 作者:行者123 更新时间:2023-11-28 06:39:21 33 4
gpt4 key购买 nike

我的代码(用 C++ 编码)在处理更新模型法线的 for 循环中存在瓶颈。我用来测试的模型有大约 ~2.2k 个顶点(指示),工作正常并且在 60 fps 限制下工作,但法线与指示器(~12k)一样多。代码按预期工作,但由于必须更新的法线数量,此 for 循环花费的时间太长。

信息从Maya API中导出并存储为我的项目可以读取的文件格式(我的项目读取文件没有问题;一切正确)。

有什么我没有考虑过的,可以减少它必须计算的法线数量吗? AAA 中人们用什么技巧来处理这样的问题?它可以在我忽略的 Maya API 级别进行优化吗?任何其他可能有帮助的建议将不胜感激。

我以前搜索过答案,但我无法摆脱与我的问题无关的“法线贴图”。 >.>;

提前致谢! :)

=============================================

请求的代码块:

        // Transform and save our normals.
for( unsigned int i = 0; i < p_mesh_data->getNormalCount(); ++i )
{
Quaternion total_rotation;

unsigned int index = p_mesh_data->getNormalToVertex( i );
for( unsigned int j = 0; j < p_skeleton->getJointCount(); ++j )
{
JointInfluence influence = p_mesh_data->getInfluence( index * p_skeleton->getJointCount() + j );

total_rotation = total_rotation + ( rotations[influence.joint_id] * influence.weight );
}

p_normals[i] = Matrix( total_rotation ).transform( p_mesh_data->getNormal( i ) );
}

最佳答案

查看数据并进行更多研究后,我清除了小于 0.001f 的权重(基本上任何没有影响的权重),这减少了更新框架所需的大部分循环。现在它处于舒适的平均 16 毫秒。

对于遇到相同问题的任何其他人,清除不必要的影响是必须的,以便在复杂/高多边形模型中保持高帧率。在简单的几何体上,这可能不需要。

感谢所有花时间的人! :)

关于C++:动画:法线:如何处理大量法线并在动画更新期间更新它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26241354/

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