春节快到了. 最近的几个星期, 晚上一直窝在楼上的小黑屋里将atomsphere scattering 完成了.

在尝试中, 我试过了http://etd.dtu.dk/thesis/58645/imm2554.pdf 的方法. 最后放弃了.

后来, 尝试了gpu gems 2 上的Chapter 16. Accurate Atmospheric Scattering . 但是
其性能不是我能接受的, 在GPU上进行积分, 虽然其除去了对光学深度:

的积分. 仅仅用数值的方式来代替(the section : 16.4.1 Eliminating One Dimension), 但是对于inscattering 依然是有积分的.

基于性能的考虑, 我并不希望通过GPU来计算积分, 考虑一种情况, 如果散射的各种参数均没有变化的情况下, 那么整个天空到镜头的光学深度

应该就是一个可以预先计算的常量. 而且针对移动平台, 完全可以绕开GPU瓶颈, 在性能相对较好的CPU上进行异步并行运算, 将会更加高效.

而且只会在太阳光方向或者散射参数发生改变时才会启动一次运算, 并将运算结果保存到2张查找纹理上.

在这部分的实现完成后, 我发现以前在atomsphere scattering中犯下的一个非常低级的错误!!!!!! 那就是我忽略了greestein 参数是可以调整的!!!!

而我居然根据论文, 将其自动计算了......

上图右侧: precomputed , 由于是预计算的, 仅仅只能对天空建立光学深度的查找表, 对于地表, 或者其它动态对象, 无法预计算, 所以看不到任何散射效果.  优点是, 能很直观地表现太阳的颜色.

左侧, 武断地调整phase funcion 中的G 后, 我所想要的效果终于出来了~~~~~由于是post process 的, 而且根据场景深度, 可以近似获得地表等对象的光学深度, 并使其也被散射影响. (注意太阳附近的地表颜色). 缺点是.... 我不清楚...是不是我哪里还有疏忽的

地方. 总之, 太阳的颜色是额外计算的, 否则就一点都不明显.....

half3 Sun = SunColor.xyz * saturate(pow(max(Cos,0.0f),GreensteinArgs.w) * SunColor.w); 

性能差异上,两者差别不大 当然, 现在分析为时尚早, 两者或许都还能继续优化. 等我梳理清楚思路, 清理下代码后再来做比较, 现在的代码和SHADER非常混乱了, 整合了好多实现版本, 不同版本的积分公式...

WIP:

清理代码. 拆分成两部分独立实现. / 或者选定一部分实现.

夜空, 不管是哪一种方式, 夜空都是不会有任何颜色, 靠近地表附近会有一些rayleigh 散射.

转载于:https://www.cnblogs.com/lethep/p/4287619.html

atomsphere scattering almost final.相关推荐

  1. public static final int REMIN_REQUEST_CODE = 0x911 自己的大致理解

    public static final int REMIN_REQUEST_CODE = 0x911; 自己理解为 一个静态常量,也就一个标识,自己目前主要在2个地方常用到 OnActivityRes ...

  2. java内部类的权限符,static介绍、内部类、final、权限修饰符的作用范围,

    static介绍.内部类.final.权限修饰符的作用范围,static 关键字:(可用于修饰方法.变量) static 特点: static是静态修饰符,一般修饰成员变量.被static修饰的属于全 ...

  3. java增加final,Java8增加功能--Effectively final 功能

    java8新增了很多功能,可以大大简化代码,这个系列将会一一辅助代码加以介绍. 局部内部类和匿名内部类访问的局部变量必须由final修饰,java8开始,可以不加final修饰符,由系统默认添加.ja ...

  4. java语言基础final_java语言中final的用法

    许多程序设计语言都有自己的办法告诉编译器某个数据是"常数".常数主要应用于下述两个方面: (1) 编译期常数,它永远不会改变 (2) 在运行期初始化的一个值,我们不希望它发生变化 ...

  5. C++11之final关键字

    一.禁用继承 C++11中允许将类标记为final,方法时直接在类名称后面使用关键字final,如此,意味着继承该类会导致编译错误. 实例如下: class Super final {//...... ...

  6. (1)访问控制 (2)final关键字 (3)对象创建的过程 (4)多态

    1.访问控制(笔试题) 1.1 常用的访问控制符 public - 公有的 protected - 保护的 啥也不写 - 默认的 private - 私有的 1.2 访问控制符的比较 访问控制符 访问 ...

  7. 为什么必须是final的呢?

    一个谜团 如果你用过类似guava这种"伪函数式编程"风格的library的话,那下面这种风格的代码对你来说应该不陌生: 1 2 3 4 5 6 7 8 9 public void ...

  8. 深入java_深入Java Final

    JAVA关键字final用于修饰数据.方法或类,通常意味着"无法改变的",既数据不能改变,方法不能覆盖,类不能继承.一般采用final有两种原因:设计和效率.而随着JAVA版本的更 ...

  9. Java学习总结:11(final关键字)

    final关键字 在Java中final称为终结器,在Java中可以使用final定义类.方法和属性. 一.使用final定义的类不能再有子类,即:任何类都不能继承以final声明的父类. 在设计类的 ...

  10. java this final_Java this、final等关键字总结

    this 关键字this引用对象自身.它也可以在构造方法内部用于调用同一个类的其他构造方法. 隐藏的静态变量可以通过"类.静态变量"来引用,而隐藏的实例变量就需要使用"t ...

最新文章

  1. TinyMCE的使用-安装
  2. Android自动化测试框架
  3. 《你的灯亮着吗》阅读笔记1
  4. Mysql 锁的机制
  5. lightroom预设使用_在Lightroom中使用全景图增强照片游戏
  6. 如何评价强gis与弱gis_什么是gis的简化解释
  7. 排序算法(二)--选择排序法
  8. c#操作json 使用JavaScriptSerializer
  9. 并发设计模式之生产者-消费者模式
  10. 现代计算机网络发展为第几代,晶体管计算机是第几代_个人计算机使用的电子元器件_计算机网络最突出的(6)...
  11. 百度的搜索好厉害,刚刚发文就能搜索到
  12. 从目标文件结构,加载、执行阶段,汇编角度来理解C程序内存分区
  13. 图像匹配所用方法总结
  14. 金蝶应收应付模块流程_金蝶财务软件里的应收应付模块核算哪些会生
  15. solr自定义分词器
  16. SAP ABAP BAPI_MATERIAL_AVAILABILITY 查询可用库存
  17. 普渡大学电子和计算机工程专业,2020年普渡大学热门专业
  18. GitBook入门(用github做出第一本书)——超详细配图说明
  19. iPhone打开应用显示未受信任企业级开发者无法打开
  20. Aiml智能标记语言规范(20201216)

热门文章

  1. nodejs连接postgresql_PostgreSQL 使用 node-postgres 在 node.js 中的应用
  2. mysql 表的存储类型_MySQL的表类型和存储引擎
  3. Unity MRTK(一)
  4. 4.jvm初体验-内存溢出问题的分析与解决
  5. 计算机组成原理——第八章
  6. linux 查询命令 批量替换多个文件
  7. Java 面试 ——可变参数、初始化数据块、设计秒杀系统
  8. ES6深入浅出_汇总贴
  9. 2019最新 Java商城秒杀系统的设计与实战视频教程(SpringBoot版)_1-1课程整体介绍...
  10. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_9_字节输入流读取字节数据...