ShaderJoy —— 5 行代码实现超简单的星空【GLSL】

效果图

ShaderJoy —— 5 行代码实现超简单的星空【GLSL】_第1张图片

 

原理十分简单(有效代码不超过 5 行),我们直接来看代码

完整代码和注释

/// 二生一的随机函数
float hash(vec2 uv)
{
    return fract(sin(dot(uv, vec2(154.45, 64.548))) * 124.54)  ;
}

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    // 归一化纹理坐标 [-1, 1]
    vec2 uv = (2.*fragCoord - iResolution.xy) / iResolution.y;
    // 通过随机函数生成星空,通过幂函数放大对比度
    float stars = pow(hash(uv), 200.);
    // 从上到下的渐变,并着色
    vec3 night = vec3(uv.y * 0.5 + 0.5) * vec3(stars) + vec3(0.06, 0.02, 0.18);
    fragColor = vec4(night, 1.0);
}

注意,night 也可以以下面形式计算的话,但有可能会产生颜色的不连贯(色阶)

vec3 night = (vec3(0.06, 0.02, 0.18) + vec3(stars)) * (uv.y * 0.5 + 0.5) ;

你可能感兴趣的:(ShaderJoy,——,Shader,实例详解)