将outgoingLight与从上到下的渐变相乘

时间:2015-09-23 19:12:20

标签: glsl shader fragment-shader

我试图在片段着色器中生效...这就是我没有效果的结果:

shader base

这是我通过将颜色乘以渐变'

得到的结果
float fragPosition = gl_FragCoord.y / screenSize.y;
outgoingLight /= fragPosition;

multiplying fragment position y

所以我试着分开,但颜色有点被光烧伤

float fragPosition = gl_FragCoord.y / screenSize.y;
outgoingLight /= fragPosition;

dividing fragment position y

以下是我想要的颜色/渐变(如果可用,则为每个脸部):

what I want

修改

这是顶点着色器(我使用三个JS块)

precision highp float;
precision highp int;

#define PHONG

uniform float time;
attribute vec4 data;

varying vec3 vViewPosition;

#ifndef FLAT_SHADED

    varying vec3 vNormal;

#endif

$common
$map_pars_vertex
$lightmap_pars_vertex
$envmap_pars_vertex
$lights_phong_pars_vertex
$color_pars_vertex
$morphtarget_pars_vertex
$skinning_pars_vertex
$shadowmap_pars_vertex
$logdepthbuf_pars_vertex

void main(){

    float displacementAmount = data.x;
    int x = int(data.y);
    int y = int(data.z);
    bool edge = bool(data.w);

    $map_vertex
    $lightmap_vertex
    $color_vertex
    $morphnormal_vertex
    $skinbase_vertex
    $skinnormal_vertex
    $defaultnormal_vertex


    #ifndef FLAT_SHADED

        vNormal = normalize( transformedNormal );

    #endif

    $morphtarget_vertex
    $skinning_verte
    $default_vertex

    if( edge == false ){

        vec3 displacement = vec3(sin(time * 0.001 * displacementAmount) * 0.2);

        mvPosition = mvPosition + vec4(displacement, 1.0);

        gl_Position = projectionMatrix * mvPosition;

    }

    $logdepthbuf_vertex

    vViewPosition = -mvPosition.xyz;

    $worldpos_vertex
    $envmap_vertex
    $lights_phong_vertex
    $shadowmap_vertex

    vec3 newPosition = position + vec3(mvPosition.xyz);

    gl_Position = projectionMatrix * modelViewMatrix * vec4(newPosition, 1.0);

编辑2:

@gamedevelopmentgerm建议在这里混合是我得到的:

Near wanted result

我得到的要好得多,但可以在背景中避免黑到白渐变。我只想要蓝到白。

0 个答案:

没有答案