zoukankan      html  css  js  c++  java
  • ray tracing/shadow,reflection, caustic

    看了一下午终于明白raytracing的算法了 不知道这次能记住多久 ssr我又完全不记得了

    按照Henrik所说 理解raytracing的核心在于,它是从Eye到light反着走的

    需要一个前序的概念 Light Transport Notation

    LD?S*E  light source-Diffuse reflection(0 or one)-Specular reflection(0 or more) ---Eye

     每个pix有一条经过此pix和eye的唯一ray 沿着这条ray往light的方向走 

    如果最后一个表面是Specular reflection 那么ray在这个surface有唯一的前行方向 沿着这条方向走可以拿到第一个intersection的color

    shadow

    刚刚的intersection如果是lightsource 不形成阴影

    reflection

    surface每个点显示刚刚的color就可以

    关键是降噪

    raygen()

     raydirection =lightpos

    if hit<xxx shadow

    else enlight

    reflection

    raygen()

    raydirection =reflect(light, normal)

    color =payload.color

    closehit()

    payload.color = current shading color

    (「」我打不出大括号来了 实在对不起观众

    caustic不能用这种方法算是因为最后的光路是 DE

    D的时候这条光可以往各个方向往回走就很confussing了 

    至于怎么算caustic。。就要看另外一篇paper了 我还没看

    ===============

    raytracing 的as 有些地方可以100帧更新一次 小幅度慢速往返运动 草缓慢摆动 还反射。。。比如

    这样hit区域会错边缘一小部分 但是算光照时的 vb是每帧更新的 roottable里面----这段写的没什么意义

    判断hit的时候用的as 只有交界的部分对  比如草交界部分就很小

    像灯笼在原地小幅度摆动 两次move 重叠部分比较大的话 

    在做反射的时候 如果反射很清晰 这种错误看起来会特别碍眼的 ,其实就是需要完全正确的 所以as还是要重建哒 除非 运动速度比100帧一次还慢呢

    我想到了 这个完全不对的原因在于  如果不更新 完全不是上面想象出来那种表现

    uv和pos会拿错  会显示重叠部分的轮廓 里面绘制的内容是完全错误的 因为新的hit 的index在错误的 as里面拿到的数据是完全对不上了

    =====================

    光子映射的算法 photon map

    LS DE

    LS的地方就是固定的 

    D这里

    从另一个方向连 判断连到光子map上的 光子密度 用kdtree空间存储 多的地方亮

  • 相关阅读:
    【硬件】组装一台多核电脑
    【硬件】组装电脑前的准备工作
    【长知识】设计多核电脑装机方案
    【长知识】认识电脑的硬件组成
    程序员必备基础:如何安全传输存储用户密码?
    二本应届生的大学生活、2020年总结(已上岸百度)
    白日梦的Elasticsearch系列笔记(一)基础篇-- 快手上手ES
    全网最牛X的!!! MySQL两阶段提交串讲
    删库后!除了跑路还能干什么?
    数据库面试简答、30道高频面试题
  • 原文地址:https://www.cnblogs.com/minggoddess/p/9693536.html
Copyright © 2011-2022 走看看