Godot - 为什么我的网格在极端位置会变形?
Godot - Why does my Mesh deform at extreme locations?
我是一个制作简单游戏的初学者,我给机器人建模并给了它控制权。你基本上四处走动,但有重力。它一直很好用,直到我让它掉了很长时间,然后我才发现有些奇怪。
这是出现问题之前的样子:
然后我从平台上掉下来后,在y轴上大约-2000处,出现了变形:
在 y 轴上大约 -20,000 处变得特别极端:
这仅仅是一个压缩问题吗?我尝试了压缩和未压缩两种方式,两种方式都发生了。也许引擎有问题?
根据您提供的数字,很明显您遇到了浮点精度问题。具体效果取决于您的平台,但 OpenGL ES 着色语言规范对硬件制造商有一些最低要求:
https://www.khronos.org/files/opengles_shading_language.pdf(第 4.5.2 节)
虽然 The Khronos Group 似乎提高了 OpenGL ES 3.0 在 newer edition of the specification, which seems to be the version required 中对 highp
的最低精度要求,但我不知道您使用的到底是什么以及您的使用情况如何硬件符合它,所以我将使用我链接的第一个规范。基于此,GLSL 浮点数具有以下最小精度:
highp : 2^-16 = 0.0000153
mediump: 2^-10 = 0.000977
lowp : 2^-8 = 0.00391
假设您的硬件没有超出最低要求,即使使用 highp
当您距离原始设备 20,000 个单位时,您也会遇到大约 0.3 个单位的精度问题。考虑到您的顶点位于 1x1x1 单位框内,这相当于相对于您的对象大小有大约 30% 的误差,这与您共享的图像一致。
作为解决方案,请尝试让您的对象更靠近原点;需要改变原点 if/when。
我是一个制作简单游戏的初学者,我给机器人建模并给了它控制权。你基本上四处走动,但有重力。它一直很好用,直到我让它掉了很长时间,然后我才发现有些奇怪。
这是出现问题之前的样子:
然后我从平台上掉下来后,在y轴上大约-2000处,出现了变形:
在 y 轴上大约 -20,000 处变得特别极端:
这仅仅是一个压缩问题吗?我尝试了压缩和未压缩两种方式,两种方式都发生了。也许引擎有问题?
根据您提供的数字,很明显您遇到了浮点精度问题。具体效果取决于您的平台,但 OpenGL ES 着色语言规范对硬件制造商有一些最低要求:
https://www.khronos.org/files/opengles_shading_language.pdf(第 4.5.2 节)
虽然 The Khronos Group 似乎提高了 OpenGL ES 3.0 在 newer edition of the specification, which seems to be the version required 中对 highp
的最低精度要求,但我不知道您使用的到底是什么以及您的使用情况如何硬件符合它,所以我将使用我链接的第一个规范。基于此,GLSL 浮点数具有以下最小精度:
highp : 2^-16 = 0.0000153
mediump: 2^-10 = 0.000977
lowp : 2^-8 = 0.00391
假设您的硬件没有超出最低要求,即使使用 highp
当您距离原始设备 20,000 个单位时,您也会遇到大约 0.3 个单位的精度问题。考虑到您的顶点位于 1x1x1 单位框内,这相当于相对于您的对象大小有大约 30% 的误差,这与您共享的图像一致。
作为解决方案,请尝试让您的对象更靠近原点;需要改变原点 if/when。