如何在不缩放正交相机的情况下显示我的 SetPixels() 纹理变化?

How can I show my SetPixels() texture changes without having to zoom my orthographic camera?

这是我的第一个问题!我希望你能忍受我。 :)

我正在 Unity 上进行洪水填充,虽然我已经能够在我的 Texture2D 上填充形状,但我只能在使用正交相机放大时看到变化。当我缩小时,它又回到原来的样子。同样奇怪的是,这发生在我的编辑器和我的游戏场景中,以及当我在 Android.

上构建它时

这可能是什么原因造成的?我能做些什么来防止这种情况发生?我错过了什么吗?

我试过使用不同尺寸的图像,但效果仍然相同。

这是放大后使用SetPixels()填充形状后的样子。红圈原本是白色的。请注意,编辑器没有显示更改。图片大小为 1920x1080:

这是缩小一点后的样子。游戏场景现在也没有显示变化。我还在屏幕截图中包含了纹理的属性:

我还观察到它甚至可能与相机变焦无关,因为即使我没有放大那么多,如果我在检查器中放大图像也会出现更改的像素:

您只是为特定的 mipmap 值(默认级别 0)设置像素,但您需要将更改扩展到相机当前正在查看的 mipmap 级别。

您可以通过调用 Texture2D.Apply() 并将 updateMipMaps 设置为 true(这是默认值)在您设置 mipmap 级别 0 的像素(这可能是你已经在做了)。

你没有提供任何代码,所以很难说到底是怎么回事。仅从描述来看,这听起来像是未更新的 mipmap 的问题。 Mipmaps 用于提供同一图像的不同分辨率,因此可以根据纹理实际渲染的大小使用适当大小的版本。

当使用 Texture2D.SetPixels() 时,您总是修改一个特定的 mipmap 级别,即图像的一个特定大小的版本。默认情况下,这是级别 0,即基本 mipmap 级别,包含完整大小版本。

根据描述,您在修改基本 mipmap 级别后调用了 Texture2D.Apply(),并将 updateMipmaps 参数设置为 false,如 [=36= 中所示的示例]() 做。这可以防止更新纹理的其他 mipmap 级别,因此只有全尺寸版本具有其他版本的更改和 none。当纹理现在以较小的比例渲染时(即通过其当前缩放级别,通过缩小或缩小)更改不会显示出来,因为相应的较小 mipmap 从未更新。

Texture2D.Apply() 中的文档有点误导:

If updateMipmaps is true, the mipmap levels are recalculated as well, using the base level as a source. Usually you want to use true in all cases except when you've modified the mip levels yourself using SetPixels.

这意味着如果你使用了 SetPixels,你不想要 updateMipmaps,但它实际上只意味着你不想要它,如果你修改了所有个人使用 SetPixels 的 mipmap 级别(如 SetPixels 中的示例所示)。如果您只修改了基本级别,那么您确实想要使用 updateMipmaps = true 以便其他 mipmap 级别从修改后的基础自动更新。