Graphics OpenGL ES 2.0中高效的随机纹理采样

Graphics OpenGL ES 2.0中高效的随机纹理采样,graphics,opengl-es,glsl,textures,shader,Graphics,Opengl Es,Glsl,Textures,Shader,是否有任何有效的方法以随机方式获取纹理数据?也就是说,我想使用纹理作为查找表,我需要随机访问它的元素。因此,我将以随机方式对其进行采样。这是完全没有原因的吗?您始终可以将另一个纹理传递给包含随机值的着色器,并从中采样。这将为每个纹理坐标提供相同的随机值,但如果您不希望这样,您可以始终将坐标乘以更新每个帧的统一种子 始终可以将另一个纹理传递给包含随机值的着色器,并从中采样。这将为每个纹理坐标提供相同的随机值,但如果您不希望这样,您可以始终将坐标乘以更新每个帧的统一种子 随机访问是GLSL的基本功能

是否有任何有效的方法以随机方式获取纹理数据?也就是说,我想使用纹理作为查找表,我需要随机访问它的元素。因此,我将以随机方式对其进行采样。这是完全没有原因的吗?

您始终可以将另一个纹理传递给包含随机值的着色器,并从中采样。这将为每个纹理坐标提供相同的随机值,但如果您不希望这样,您可以始终将坐标乘以更新每个帧的统一种子

始终可以将另一个纹理传递给包含随机值的着色器,并从中采样。这将为每个纹理坐标提供相同的随机值,但如果您不希望这样,您可以始终将坐标乘以更新每个帧的统一种子

随机访问是GLSL的基本功能。例如

vec2 someLocation = ... whatever you like ...;
vec4 sampledColour = texture2D(sampler, someLocation);

根据硬件的不同,如果直接在像素着色器中而不是在顶点着色器中计算采样位置,并允许它们作为一个变量自动插值,则读取纹理的成本可能会更高,但这只是一个不变的硬件成本,与您正在做的事情的可预测性降低有关。

随机访问是GLSL的一个基本功能。例如

vec2 someLocation = ... whatever you like ...;
vec4 sampledColour = texture2D(sampler, someLocation);

根据硬件的不同,如果直接在像素着色器中而不是在顶点着色器中计算采样位置,并允许它们作为一个变量自动插值,则读取纹理的成本可能会更高,但这只是一个不变的硬件成本,与您所做工作的可预测性降低有关。

对不起。我不是那个意思。我对生成随机值不感兴趣。我的意思是,我最有可能以随机方式而不是以序列化方式访问纹理数据。对不起。我不是那个意思。我对生成随机值不感兴趣。我的意思是,我最有可能以随机方式而不是以序列化方式访问纹理数据。是的,随机访问是很有可能的,我只是感到困扰的是,从我读到的GPU随机访问比CPU的问题要严重得多,所以我想知道是否有一种通用的方法来最小化随机访问的惩罚。我不确定你的平台是什么,但我对趋势的理解是,这过去比现在重要得多(需要注意的是,手机类设备处于曲线上的较早点),因为这与GPU在多个片段上显然可以轻松并行完成的工作有关,而不是它必须在每个片段上单独完成的工作。然而,GPGPU的推广使每个人都更加通用,在猜测智能访问模式的策略方面更像CPU。因此,您可能会受到性能的影响但这不需要太多担心。是的,随机访问是很有可能的,我只是感到困扰的事实是,从我所读到的GPU随机访问远比CPU的问题更大,所以我想知道是否有一种通用的方法来最小化随机访问的惩罚。我不确定你的平台是什么,但我对tre的理解是第二,这一点过去比现在重要得多(需要注意的是,手机类设备处于曲线上的较早点),因为这与GPU在多个片段上显然可以轻松并行完成的工作有关,而不是它必须在每个片段上单独完成的工作。然而,GPGPU的推广使每个人都更加通用,在猜测智能访问模式的策略方面更像CPU。因此,您可能会受到性能的影响但这不应该太让人担心。