当前位置: 首页 > news >正文

ShaderToy:光晕效果

一.效果图

二.设计思路 

1.特征分析

  • 中心点在屏幕正中心
  • 亮度从中间到四周逐渐变暗
  • 正中间的光源有一定的大小属性,超过边缘后才开始渐变

2.重点思路 

 找到一种衰减方案,衰减速度符合光线衰减规律的那种

3.方案

3.1方案一(反函数)

 y = k / x 曲线(k是常数)

y = 1 / x 曲线

曲线有几个特点,

  • 当x处于[0,k]时,y的值都大于1,
  • 斜率(不考虑正负)逐渐变小

当 x处于[0,k]时因为y的值都大于1,可以把它当做颜色值,因为颜色的值区间是[0,1]当大于1时会当做1处理,适合用于光源处的渲染,当x大于k时值小于1且不断变小,可以用于颜色的逐渐减淡效果

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{vec3 c;float l;// 把坐标规范化为[0,1]vec2 uv, p = fragCoord/iResolution.xy;uv=p;   // 把坐标范围变为[-.5, .5]p-=.5;// p的x坐标考虑屏幕宽高比p.x *= iResolution.x/iResolution.y;// 距离场:p到原点的距离。距离作为颜色返回l = length(p);// 采用一个循环为颜色的rgb赋值for(int i=0;i<3;i++) {c[i] =0.05/l;}fragColor = vec4(c,0.5);
}

3.2方案二(指数衰减 )

y = e^{x}

y = exp(x) 曲线

这个曲线一般选取在x小于0的情况下 ,刚开始比较平缓,然后衰减速度不断加大,对应当屏幕中点离中心点越远衰减的就越快。

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{vec3 c;float l;// 把坐标规范化为[0,1]vec2 uv, p = fragCoord/iResolution.xy;uv=p;   // 把坐标范围变为[-.5, .5]p-=.5;// p的x坐标考虑屏幕宽高比p.x *= iResolution.x/iResolution.y;// 距离场:p到原点的距离。距离作为颜色返回l = length(p);// 光源大小参数const float LIGHT_SIZE = 0.05;float decay1 = exp(-l * 5.0) + smoothstep(LIGHT_SIZE , LIGHT_SIZE - 0.02, l);// 采用一个循环为颜色赋值for(int i=0;i<3;i++) {c[i] = decay1;}fragColor = vec4(c,iTime);
}

相关文章:

  • Conda安装pytorch和cuda出现问题的解决记录
  • 【投稿优惠】2025年航天技术 、雷达信号与无人机应用国际会议 (ATRA 2025)
  • 组件库实战-基建思路
  • 缓存一致性性的 实现等价
  • 免费好用的专业提词器有哪些~~~
  • Python训练营-Day26-函数专题1:函数定义与参数
  • 我的世界进阶模组开发教程——渲染学(3)
  • 安宝特方案丨从依赖经验到数据驱动:AR套件重构特种装备装配与质检全流程
  • 安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
  • 线程同步:确保多线程程序的安全与高效!
  • 西门子S7-200SMART 控制Profinet闭环步进MD-4250-PN (5)触摸屏项目搭建
  • Python 训练营打卡 Day 47
  • 【Java】谈谈HashMap
  • HAC-NBh V2.15 协议使用说明文档
  • Redis上篇--知识点总结
  • 【标准解析】商用车CAN网络通信标准(J1939)
  • 使用ONNX模型实现M-LSD算法
  • Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
  • 负载均衡LB》》LVS
  • 9个数据分析指令为工作赋能
  • 佛山网站建设骏域网站建设专家/seo零基础教学
  • 交党费网站建设银行/百度信息流广告怎么收费
  • 成都网站建设方案/申请自己的网站
  • 树莓派做网站服务器怎样/怎么营销推广
  • 合肥市城市建设委员会网站/aso优化师工作很赚钱吗
  • 政府网站cms/百度seo关键词工具