周笔记(11/52)

来源:互联网 发布:网页文字游戏源码 编辑:程序博客网 时间:2024/05/21 07:50

环境光闭塞(Ambient Occlusion)

简介

  1. 某个点被环境光闭塞的程度,可以通过从其半球面内发射的射线,与其他物体碰撞的情况来判断:如果碰撞的多且近,那么被闭塞的就多
  2. (离线渲染/闭塞贴图)使用光线投射的方法,随机投射出光线,判断其碰撞
    • 使用八叉树来加速射线和三角的碰撞检测
    • 使用 xnacollision.h/cpp 库,可以大大简化代码

Screen Space Ambient Occlusion(SSAO)

要点

  1. 在上边的基础上,只对屏幕上的点做环境光闭塞检测 -> 故而需要屏幕上的点的几何信息(方向、位置)-> 故而需要渲染其法线和深度作为中间贴图
  2. 检测闭塞的步骤中,使用半球上随机距离的点,检测该位置在屏幕上对应的点的深度,是否离目标足够近(经验值),且在目标点的正面
  3. 问题:可能是我理解错了?这样一来对于深度值相差比较大的两个模型,其后方的模型在边缘位置的闭塞岂不是不准确?
  4. 不仅可以用于Ambient部分,还可以用于 diffuse 部分等。

Meshes

要点

  1. 总体而言这一章是DX自己搞了一个Mesh的格式……涵盖的要素:
    • 材质:引用的贴图可以记录文件名
    • 顶点:只需记录位置
    • 索引
    • 子集:记录顶点、面元的索引偏移值,然后依次使用材质列表中的材质
    • 骨骼
    • 动画

Quaternions

要点

  1. 计算公式
    这里写图片描述
    这里写图片描述
  2. 角度的范围是 0 到 pi(为了能够和极坐标一一对应)
  3. rotate(v) = q v q^(-1)
  4. 插值:
    • 将四元数a和b进行值为t的插值:
      这里写图片描述
    • 当a和b非常接近的时候,使用线性插值来避免过小的分母
    • 通过检测 ||a-b|| 和 ||a+b|| 的大小关系来决定从a插值到b时,是从哪一侧插值

角色动作

要点

  1. to-parent transform; to-root transform; to-world transform
  2. 注意vertices是在root空间定义的,所以要先转换到其所在骨骼的bind空间
  3. 顶点融合(skinning)
    • 顶点增加数据:4个1byte的(或更多)骨骼点索引、权重
    • 对顶点的normal、position等进行加权求和

本书终于完了!

0 0
原创粉丝点击