zoukankan      html  css  js  c++  java
  • 一个perfect 的解决 阴影拉伸的方法 shadow map strech

    因为在场景中做了,有的物体产生阴影比如人物,有的物体不产生阴影比如地面,这样在地面凹下去的地方,悬崖,池塘边,就会有阴影的拉伸。

    实际上,

    没办法上传图片。。。。

    L是光源 A 点(人物身上)产生阴影 B C D(地面上)依次在L A的延长线上, 因为地面不产生阴影,只接受阴影BCD都会采样到shadowmap上的同样位置。接受到阴影。

    我希望只有 离A最近的B接受阴影,CD都不接受阴影。

    所以需要一个存了B到L距离的额外的数据。 因为无法保证B比C先画,所以,在画地面的时候去更新这张filter数据是不可行的。

    我想到一个好方法:

    在画产生阴影的物体到shadowmap上之后,再用同样的方式画一遍不产生阴影的物体到另外一张filter map上,这样就可以得到B了。。。好开心。

    采样shadowmap的时候 在阴影内的点再采样filter map一次 如果大于filter就不渲染阴影。

    这个方法完美的解决了阴影的拉伸,但是特别费,因为又额外画了一次不产生阴影那些物体,并且采样的时候额外又采样了一张深度图。这里也许还能优化一些,但前面额外画一遍不产生阴影的场景那步不太能

    省略,其实很多地方没必要画的。

    倒是可以在 shadowmap 画了的地方, 用depth greater than.shadowmap 没画的地方没必要画。不知道能否提升效率。 

  • 相关阅读:
    php5.5+apache2.4+mysql5.7在windows下的配置
    rsync命令详解
    JVM GC算法 CMS 详解(转)
    JVM1.6 GC详解
    hadoop2升级的那点事情(详解)
    免费SVN空间
    JAVA正则表达式:Pattern类与Matcher类详解(转)
    Eclipse插件安装方式及使用说明
    可扩展Web架构与分布式系统(转)
    关于《Selenium3自动化测试实战--基于python语言》
  • 原文地址:https://www.cnblogs.com/minggoddess/p/5667460.html
Copyright © 2011-2022 走看看