概览

  • 计算机图形学阴影概览
  • 阴影的物理和数学知识
  • 传统阴影生成算法
    • 投射阴影(Projection shadow)
    • 阴影体(Shadow volume)
    • 阴影映射(Shadow map)
    • 软阴影(Soft shadows)

计算机图形学阴影概览

  • 计算机的写实化(photorealism)主要有两个元素

    • 准确的表达表面的属性(accurate representation)
    • 关于光效果好的物理描述(Good physical desciption)
  • 光表面效果包括
    • 光反射(light reflections)
    • 透明度(transparency)
    • 表面材质(Surface Texture)
    • 阴影(shadow)
  • 计算机图图形学中,物体经常在没有阴影或锚定(anchored)的环境下渲染
  • 阴影可以被考虑为一个被光源隐去的区域
  • 然而,实时逼真渲染是一个非常昂贵的操作
  • 作为替代方案,大多数应用会采用阴影贴图。

阴影的重要性

  • 阴影告诉我们物体的相对位置和运动
  • 阴影提供很多隐含信息
    • 对象投射和接收阴影的位置
    • 到光源的位置
  • 阴影提供非隐含信息
    • 物体的形状
    • 阴影接受物体的形状

阴影生成物理数学知识

  • 硬阴影(umbra) 是一个从光源处出发不可视的区域。
  • 软阴影(penumbra)是一个可以接收到部分光的区域。

传统阴影生成算法

  • 阴影算法不是基于光栅化的渲染管道的标准功能

热门的阴影生成算法有

  • 投影算法
  • 阴影体
  • 阴影映射
  • 软阴影

投射算法

  • 投影阴影(也称为投影阴影或平面阴影)是在OpenGL场景中实现阴影的简单方法,其中将对象投影到平面上,然后将平面渲染为单独的对象或基元
  • 它适用于由点光照射的平面
  • 对于每个面,投影顶点V以找到阴影多边形的V’
  • 物体阴影=面投影的联合
基础步骤
  1. 使用镜面+漫反射+环境分量绘制地平面
  2. 仅使用环境组件绘制阴影投影(面对面)

案例1:

  • 当阴影接收面在轴平面上
  • 例如有个光的位置I(Ix,Iy)I(I_x,I_y)I(Ix​,Iy​),有一个平面y=0y = 0y=0,有一个点位置v(vx,vy)v(v_x,v_y)v(vx​,vy​),计算点p
    px=lyvx−lxvyly−vyp_x = \frac{l_yv_x-l_xv_y}{l_y-v_y}px​=ly​−vy​ly​vx​−lx​vy​​
  • 这就是一个初中数学

案例2:

  • 立体的,一会再说

优点

  • 很容易实现
  • 可以跨平台

缺点

  • 除了在完全平面上可以应用,很难在其他平面上应用。
  • 可以控制阴影的程度有限

投射体(Shadow volume)

  • 投射体对于处理接收面是任意平面是一个更加通用的算法,其中阴影将由来自光源的对象投射
  • 由遮光罩(occulder)形成并由遮光罩边缘限定的空间体积,它导致阴影体积内的任何对象处于阴影中
  • 阴影将虚拟世界分为两个部分,一个是有阴影世界,一个是无阴影世界。
  • 形成阴影体积的基本步骤:
  1. 查找所有轮廓边(将前向面与后向面分开的边)
  2. 沿远离光源的方向延伸所有轮廓边
  3. 将前盖和/或后盖添加到每个表面以形成闭合体积(可能不需要,具体取决于所使用的实现方式)
被黄色线段覆盖的就是阴影体

优点:

  • 全方位的方法(omi-direction)
  • 自动自成阴影(automatic self-shadowing)
  • 窗口空间阴影确定(windows-space shodow determine)

缺点

  • 消耗大量的GPU填充率
  • 需要具有连接性的多边形模型
  • 剪影计算是必需的(sihouette computation are required)
  • 仅限理想光源

阴影映射

  • 阴影贴图是通过测试像素是否从光源可见,通过将像素与以纹理形式存储的光源视图的Z缓冲区或深度图像进行比较来创建的
  • 这种技术比阴影体积更不精确,但是阴影贴图可能是一种更快的选择,这取决于在特定应用程序中这两种技术需要多少填充时间,因此可能更适合于实时应用程序。
  • 分为两种方法(Lance Williams于1978年介绍):
  • 从灯光的视角渲染场景
    • 像对待相机一样对待光线
    • 渲染到深度纹理以创建阴影贴图
  • 从相机的视角渲染场景
    • 在顶点明暗器中将每个顶点从世界空间转换为光空间
    • 将光空间位置发送到片段明暗器
    • 将片段的深度与阴影贴图中存储的深度进行比较。如果深度较大,则隐藏

案例


  • 图描述:几何图形从灯光的角度渲染到深度缓冲区。更具体地说,顶点明暗器(vertex shader)将几何体转换为灯光视图空间。
    最终结果是一个深度缓冲区,其中包含从灯光的角度观察到的场景深度信息。
  • 图说明:顶点明暗器将每个顶点变换两次。每个顶点都被转换到相机的视图空间中,并作为位置传递到像素明暗器。每个顶点也由灯光的“视图投影”纹理矩阵转换,并作为纹理坐标传递给像素明暗器。视图投影纹理矩阵与使用附加变换渲染场景的矩阵相同。这是一种将点从视图空间(X和Y中为-1到1)缩放并转换为纹理空间(X中为0到1,Y中为1到0)的转换。
  • 像素明暗器接收插值位置和插值纹理坐标。执行深度测试所需的一切都在这个纹理坐标中。深度测试现在可以通过将第一次通过的深度缓冲区与X和Y纹理坐标进行索引,并将生成的深度值与Z纹理坐标进行比较来执行。

优点

  • 不需要模板缓冲区(stencil buffer)
  • 当阴影很多的时候,比阴影体算法快

缺点

  • 只可以操作平行光
  • 自阴影是不正确的
  • 背后阴影是不正确的。

软阴影

  • 软阴影是一种区域光创建半影,其中光从给定点仅部分可见。
  • 为了产生软阴影,我们按区域(称为区域光)对光源进行建模,区域被划分为子区域或区域。
  • 它也可以通过一组点光源进行建模。

多点光源的软阴影

  • 添加剂混合用于积累每种光的贡献。
  • 阴影的柔和程度取决于足够数量的样本。
  • 渲染场景的时间随用于近似区域光源的采样数线性增加。

总结

  • 阴影传输大量的信息,以提供一个物体的基本视图,在这个物体上,没有影子显示的物体会在平面上漂浮(float above the plane)。
  • 投影阴影限制平面接收机,没有自我影子
  • 需要多边形表示影像卷和剪切阴影体多边形的影像卷需要被寻址
  • 影像映射图是一种图像空间技术,有两个输出路径,如果所有相关的对象都对于光可见,则正确地工作。
  • 区域光线制造软阴影

计算机图形学之阴影解读相关推荐

  1. 可以买的一本书:3D计算机图形学(原书第3版)

    作 者 (英)沃特(Watt,A.) ,包宏 译 出 版 社 机械工业出版社 图书定价 ¥69.00 第1章 计算机图形学的数学基础 1 1.1 处理三维结构 1 1.1.1 计算机图形学中的三维仿射 ...

  2. 计算机图形学阴影的的分类,计算机图形学8_光照模型与阴影处理_.pdf

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbsp图形图像 计算机图形学8_光照模型与阴影处理_.pdf5页 本文 ...

  3. 计算机图形学 实验三 相机、阴影、光照

    文章目录 实验3.1 相机定位 一. 实验目的 二. 理论背景 1.各个坐标系 世界坐标系 相机坐标系 模型视图矩阵 ndc坐标系 2. 齐次坐标 3. OpenGL观察变换 三. 实验内容 Look ...

  4. 13、计算机图形学——阴影贴图

    一.图形学中阴影的产生原理 阴影产生的原因就在于相机能看到的地方而光源无法照射到,所以,基于此,就有了下面的过程 首先从光源的方向放一个相机,进行一次透视投影,但是,只保存透视投影后深度信息 然后,从 ...

  5. 计算机图形学笔记十一:Ray Tracing1(阴影,光线追踪基本原理)

    阴影,光线追踪基本原理 1.阴影贴图(Shadow Mapping) 1.1产生步骤 1.2存在问题 2.光线追踪( Ray Tracing) 2.1为什么需要光线追踪? 2.2基础光线追踪算法(Ba ...

  6. 14、计算机图形学——whited-style光线追踪

    一.为啥需要光线追踪 以往的Blinn-Phong光照模型在渲染场景时,对于光的漫反射和镜面反射都只会计算一次,但是实际上在一个场景里面,光有可能既存在反射也存在折射,而且,反射次数和折射次数并不只是 ...

  7. 9、计算机图形学——纹理的应用(环境贴图、凸凹贴图、法线贴图以及位移贴图)

    一.环境贴图 比如下面的这张图,左边的是一张表示环境光的纹理,这个纹理表示屋子内部四面八方都是啥样,右边是一个茶壶, 将纹理映射到这个茶壶上,就能茶壶上渲染出周围的环境 还有这样的球形环境贴图(sph ...

  8. 华人小哥开发“CG工坊”,帮你快速入门计算机图形学 | GitHub热榜

    子豪 发自 凹非寺 量子位 报道 | 公众号 QbitAI CG新手们,你们的福音来了~ 为了让初学者更好地学习计算机图形学基础知识,一位哈佛小哥创建了graphics-workshop,一周左右的时 ...

  9. 关于计算机图形学的学习(转)

    本文合适的题目应当是:白话说学计算机图形学? 1. 引言 什么是计算机图形学? 本文尽量避免给它做严格的定义,但是通常来说,计算机图形学是数字图象处理的逆过程,这只是一个不确切的定义,后面我们会看到, ...

  10. 用JavaScript玩转计算机图形学(二)基本光源

    上一篇介绍了简单的光线追踪,凑合了临时用的光源去渲染效果.这次将讲解三种基本光源,及一些背景理论.过分简化的教材和现成API(OpenGL/Direct3D等)可能会做成一些错误理解.在此,希望文章能 ...

最新文章

  1. 新手求助:大神们帮帮我,关于在ViewPage中添加GridView的问题
  2. php调用css类,php – 使用xpath选择css类
  3. iotop--补齐系统监视工具缺失的一环
  4. mysql切换到使用openssl,MySQL主从复制+OpenSSL
  5. 设计模式总结篇系列:工厂方法模式(Factory Method)
  6. 【TensorFlow】TensorFlow从浅入深系列之九 -- 教你认识图像识别中经典数据集
  7. 这才是2019年小程序的趋势,你该如何把握机会?
  8. 华硕电脑的触摸板关闭
  9. 无光驱、软驱、USB全NTFS格式硬盘上安装WinXP
  10. 智慧城市项目在PPP模式中的应用
  11. 空间梁单元C语言有限元编程,有人会有限元编程吗
  12. Web前端工程师就业薪资有多少?新人能月入过万吗?
  13. java统计误码率_MATLAB通信工具箱来计算误码率
  14. IE8 正式版官方下载链接
  15. 用大数据思考用户体验 纪学锋谈《江湖》特色
  16. 关于cv::warpaffine函数
  17. JS生成 UUID的四种方法
  18. 别把激励员工变成收买员工
  19. 数据结构学习之二叉树(理论篇)
  20. 分别以逆时针和顺时针旋转坐标点

热门文章

  1. Roboware主题配置教程
  2. (亲测有效)解决keil5编译出现的L6002U问题
  3. pyTecplot 学习使用
  4. 前端实现在线预览pdf、word、xls、ppt等文件
  5. vb简易计算机的代码,vb的简易计算器代码
  6. 中国中小管理咨询公司现状
  7. Ubuntu16.04 Caffe 安装步骤记录
  8. 智慧职教云答案在哪里找_云课堂智慧职教答案哪里找?
  9. PM981/PM981a安装黑苹果-VM Ware教程
  10. 福州发布《关于运用大数据加强对市场主体服务和监管实施方案》