Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android OpenGL ES-如何在Blender Cycles渲染中实现光泽着色器?_Android_Opengl Es_Blender - Fatal编程技术网

Android OpenGL ES-如何在Blender Cycles渲染中实现光泽着色器?

Android OpenGL ES-如何在Blender Cycles渲染中实现光泽着色器?,android,opengl-es,blender,Android,Opengl Es,Blender,在循环渲染中,有一种着色器类型称为。现在我想在Android上使用OpenGL ES 2.0实现这个光泽着色器。我想知道在哪里可以找到此着色器的GLSL实现?下面是显示光泽反射的图像(请参见平面上的反射)。 这种效果基本上只是一个高斯模糊滤波器。OpenGL ES 2.0在以下文件中有一个很好的例子: \示例\mediate\Bloom\OGLES2\BlurVertShader.vsh: // Blur filter kernel shader // // 0 1 2 3 4 // x

在循环渲染中,有一种着色器类型称为。现在我想在Android上使用OpenGL ES 2.0实现这个光泽着色器。我想知道在哪里可以找到此着色器的GLSL实现?下面是显示光泽反射的图像(请参见平面上的反射)。
这种效果基本上只是一个高斯模糊滤波器。OpenGL ES 2.0在以下文件中有一个很好的例子:

\示例\mediate\Bloom\OGLES2\BlurVertShader.vsh:

// Blur filter kernel shader
//
// 0  1  2  3  4
// x--x--X--x--x    <- original filter kernel
//   y---X---y      <- filter kernel abusing the hardware texture filtering
//       |
//      texel center
//
// 
// Using hardware texture filtering, the amount of samples can be
// reduced to three. To calculate the offset, use this formula:
// d = w1 / (w1 + w2),  whereas w1 and w2 denote the filter kernel weights

attribute highp   vec3  inVertex;
attribute mediump vec2  inTexCoord;

uniform mediump float  TexelOffsetX;
uniform mediump float  TexelOffsetY;

varying mediump vec2  TexCoord0;
varying mediump vec2  TexCoord1;
varying mediump vec2  TexCoord2;

void main()
{
    // Pass through vertex
    gl_Position = vec4(inVertex, 1.0);

    // Calculate texture offsets and pass through   
    mediump vec2 offset = vec2(TexelOffsetX, TexelOffsetY);

    TexCoord0 = inTexCoord - offset;
    TexCoord1 = inTexCoord;
    TexCoord2 = inTexCoord + offset;    

}
uniform lowp sampler2D  sTexture;

/* 
  Separated Gaussian 5x5 filter, first row:         1  5  6  5  1
*/

varying mediump vec2  TexCoord0;
varying mediump vec2  TexCoord1;
varying mediump vec2  TexCoord2;

void main()
{
    lowp vec3 color = texture2D(sTexture, TexCoord0).rgb * 0.333333;
    color = color + texture2D(sTexture, TexCoord1).rgb * 0.333333;
    color = color + texture2D(sTexture, TexCoord2).rgb * 0.333333;    

    gl_FragColor.rgb = color;
}

谢谢,@ClayMontgomery,高斯模糊滤镜确实产生了一些模糊,但是模糊是不够的。通过添加texCoord3、texCoord4…(采样更多的相邻像素),模糊会增加,但这需要更多的计算时间。我想我们需要大量的采样才能得到上面图片中的效果,对吗?还有其他有效的方法吗?是的,一个较便宜的方法就是增加“抵销”的价值。这两种方法都可能需要,才能得到您想要的结果。模糊过滤器在计算上很昂贵。您还可以通过渲染到附加纹理的FBO来运行多个过程,从理论上讲,FBO可以通过无限过程提供无限模糊。