稀土掘金 稀土掘金

OpenGL Shader-噪点图实现

「这是我参与2022首次更文挑战的第10天,活动详情查看: 2022首次更文挑战」

在了解随机数生成之后可以利用随机数函数实现噪点效果。像是电视机白噪音效果就可以通过随机数函数来实现。像是电视雪花屏还是星空点点又或者是云朵都是无规律像是随机布局的,这就必须应用使用到随机函数来实现了。

随机函数噪点

float random (vec2 st) {
    return fract(sin(dot(st.xy,
                         vec2(12.9898,78.233)))*
        43758.5453123);
}
void main() {
    vec2 uv = gl_FragCoord.xy / iResolution.xy;
    float noise = random(uv);
    vec3 color = texture(iChannel2,uv).rgb;
    // 相减
    color.r -= noise;
    color.g -= noise;
    color.b -= noise;
    // 相加
    color.r += noise;
    color.g += noise;
    color.b += noise;
    gl_FragColor = vec4(color,1.0);
    // 混合
    gl_FragColor = vec4(mix(color,vec3(noise),0.5),1.0);
}
噪点相加相减混合
image.pngimage.pngimage.pngimage.png

通过随机函数可以将纹理RGB做相加,相减或是混合模式实现噪声效果。相比较而言采用mix混合模式效果更好一些。

噪点效果比较

参数叠加

在原二维随机函数基础上对uv相加一个值的效果。

float noise( vec2 n )
{
	return fract(sin(dot(n.xy, vec2(12.9898, 78.233)))* 43758.5453);
}


float n1noise( vec2 n )
{
	float t = fract(100.0);
	float nrnd0 = noise( n + 0.07*t );
	return nrnd0;
}

void main() {
    vec2 uv = gl_FragCoord.xy / iResolution.xy;
    float o = n1noise(200.0 * uv);
    gl_FragColor = vec4(vec3(o),1.0);

}

参数偏移

参数偏移在原二维随机函数基础上对处理过后的值进行偏移处理,然后进行多次dotmix计算后获取最终随机数。

vec2 random2(vec2 st){
    st = vec2( dot(st,vec2(127.1,311.7)),
              dot(st,vec2(269.5,183.3)) );
    return -1.0 + 2.0*fract(sin(st)*43758.5453123);
}
float noise(vec2 st) {
    vec2 i = floor(st);
    vec2 f = fract(st);

    vec2 u = f*f*(3.0-2.0*f);

    return mix( mix( dot( random2(i + vec2(0.0,0.0) ), f - vec2(0.0,0.0) ),
                     dot( random2(i + vec2(1.0,0.0) ), f - vec2(1.0,0.0) ), u.x),
                mix( dot( random2(i + vec2(0.0,1.0) ), f - vec2(0.0,1.0) ),
                     dot( random2(i + vec2(1.0,1.0) ), f - vec2(1.0,1.0) ), u.x), u.y);
}
基础参数叠加参数偏移
image.pngimage.pngimage.png

以上三种噪点图基础方法都是围绕公式 fract(sin(dot(n.xy, vec2(12.9898, 78.233)))* 43758.5453);演进得出然后实现出不同的噪点效果,可以根据需要自行设计出一款符合设计需求的噪点图效果。

总结

噪点图的实现离不来随机数的生成,有了随机数才能够实现不规则的噪点分布形态。同时之上提到生成的随机数是伪随机的。但在实际应用过程中会发现这样的伪随机足够满足当前需求,是可以作为真正随机数来使用的。

两个鬼故事阿甘正传简介隧道电影洛阳区号护国战神网上怎么起姓名12122可以咨询高速路况吗成都建材批发市场黄氏起名男童护肤品的店起名微信怎么起名字好听组织名称怎么起网上起名字靠谱嘛裸体艺术照新生儿起名大全男童瓷都免费起名名测试打分海产品店起名字卡车公司起名狮子王真人版带子的女生qq头像家纺行业起名什么字哈起名广字辈男孩姓名大全属猴 取名起名大全罗宝宝起名大全名字大全女孩起名大全带水木首辅大人的小青梅(重生)梦工厂摄影俯仰生姿加拿大企业停止对华猪肉出口葛朗台什么意思生肖鼠起什么名字好呢少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

两个鬼故事 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化