每一帧单元生成一个图像,我希望它也会创建一个额外的int数组,每次它决定在生成的图像上写一个新的颜色,它会在int数组的相应位置写上对象的id。在OpenGL中,我知道这是很常见的,我发现了很多关于这类事情的教程,基本上是基于深度图,你决定在辅助数组的每个像素上应该写哪个id。但是在Unity中,我使用了一个给定的着色器,我没有找到一个正确的方法来做到这一点。我认为应该有任何内置函数来解决这类常见问题。我的目标是知道屏幕上的每个像素属于哪个对象。谢谢。
vu8f3i0k1#
在正向渲染中,如果你不将其用于其他目的,你可以将ID存储到后台缓冲区的alpha通道中(并且它只对不透明对象有效),最多256个ID(无HDR)。在延迟渲染中,你可以编辑gbuffer中未使用的通道。这是如果你想最小化开销,否则你可以有一个更通用的系统,重新渲染特定的对象到一个纹理在屏幕空间,与一个非常简单的着色器,只是输出ID,成为任何格式,你需要的,使用命令缓冲区。
x8diyxa72#
您需要制作一个自定义着色器,将默认纹理和颜色渲染到主摄像机,并通过另一个摄像机将ID颜色渲染到renderTexture。下面是它的工作原理示例Implementing Watering in my Farming Game!
2条答案
按热度按时间vu8f3i0k1#
在正向渲染中,如果你不将其用于其他目的,你可以将ID存储到后台缓冲区的alpha通道中(并且它只对不透明对象有效),最多256个ID(无HDR)。在延迟渲染中,你可以编辑gbuffer中未使用的通道。
这是如果你想最小化开销,否则你可以有一个更通用的系统,重新渲染特定的对象到一个纹理在屏幕空间,与一个非常简单的着色器,只是输出ID,成为任何格式,你需要的,使用命令缓冲区。
x8diyxa72#
您需要制作一个自定义着色器,将默认纹理和颜色渲染到主摄像机,并通过另一个摄像机将ID颜色渲染到renderTexture。
下面是它的工作原理示例Implementing Watering in my Farming Game!