ShaderJoy —— Raytrace 实现的景深效果【GLSL】

举报
ShaderJoy 发表于 2021/11/19 00:23:37 2021/11/19
【摘要】 举例:Raytrace 实现效果图   当我们想利用 Raytrace 技术实现一些伪 3D 的效果的时候,常常会遇到 ViewRay 和平面 是否相交的问题。 首先我们来看看普通版的解决方法。   普通版 如果只是简单的判断从相机射出的光线 ViewRa...
举例:Raytrace 实现效果图

 

当我们想利用 Raytrace 技术实现一些伪 3D 的效果的时候,常常会遇到 ViewRay 和平面 是否相交的问题。

首先我们来看看普通版的解决方法。

 

普通版

如果只是简单的判断从相机射出的光线 ViewRay 是否和平面相交,我们只需要把光线向量和平面的法向量进行点乘即可,如下代码所示 


  
  1. /// @note 光线追踪之平面
  2. /// @param pl 平面法线
  3. /// @param ro Ray Origin
  4. /// @param rd Ray Direction
  5. float tracePlane( in vec4 pl, in vec3 ro, in vec3 rd )
  6. {
  7. /// @note 最直接的方式,直接用 ViewRay 的方向向量和平面法线做点乘
  8. /// 注意 ViewRay 和平面法线是反向的,所以要加负号。
  9. /// 但缺点是这样没有景深的效果
  10. return -dot(pl.xyz, rd);
  11. }

 效果如图所示

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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