ShaderJoy —— 二维多光源光照阴影【GLSL】

举报
ShaderJoy 发表于 2021/11/18 22:42:36 2021/11/18
【摘要】 效果图 一个光源跟随鼠标,一个光源上下移动 绿色的 box 为障碍物    算法阐述   光源亮度的指数衰减   我们想要的效果是,光的亮度随着离光源的距离越大而迅速衰减 ,所以很自然地需要先计算出像素到光源的距离,然后需要...

效果图

一个光源跟随鼠标,一个光源上下移动
绿色的 box 为障碍物

 

 算法阐述

 

光源亮度的指数衰减

 

我们想要的效果是,光的亮度随着离光源的距离越大而迅速衰减 ,所以很自然地需要先计算出像素到光源的距离,然后需要设计一个衰减函数,来满足随着距离增大而迅速减少的目的。


  
  1. /// @note 光照部分
  2. return hyperstep(light.min, light.max, distance(pixel, light.pos)) * light.brightness * light.color;

  
  1. /// @note 衰减函数
  2. float hyperstep(float min, float max, float x)
  3. {
  4. if (x < min)
  5. {
  6. return 1.0;
  7. }
  8. else if (x > max)
  9. {
  10. return 0.0;
  11. }
  12. else
  13. {
  14. // min max 之间线性插值
  15. float value = (x - min) / (max - min);
  16. /// 指数衰减
  17. return 100. / (99. * pow(9. * value + 1

文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。

原文链接:panda1234lee.blog.csdn.net/article/details/113760712

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。