advance shading--光源的类型
我们这里讨论的光源类型都有一个相同点,就是,我们考量的都是光源上的一个点,对于物体表面上一个点的影响,也就是说立体角趋近为零的情况。
这里光源分为两类,一类是方向光,假设光源在无限远处。另一类是点光源,假设光源的大小相对与光源和物体表面的距离可以忽略。
方向光在前面介绍过了,它的对物体的辐照度是不变的。现在来把点光源细分一下。
第一种点光源叫omni light,泛光体。它的特点是光源向各个方向的辐射强度或者光的强度都是一样的。在计算其对物体表面辐照度影响的时候使用如下方程:

其中,Pl是光源的位置,Ps是物体表面的位置。可以看出,辐照度是随着物体表面和光源距离的平方的增加而减少的。其中第三个方程就是物理中辐射强度和辐照度的计算公式,这里的辐照度是和光线垂直的表面的辐照度,这也是很多光照计算中为什么有距离平方的倒数这种变量的原因。实际计算中通常只来计算一个系。由一种叫做衰减方程(falloff function)来代替上式中的分母,如下:

之所以使用一个方程而不是使用r的平方,是为了更好的控制渲染的效果。同时,能够处理一些极端的情况,比如,物体如果和光源的距离十分接近,以及十分远的时候。一下三种方程都是衰减方程的实际形式。



第一个方程是OpenGL和DX固定流水线实现的方程。第二个是在实时渲染中广泛使用的方程,其中rs和re是自己设定的,便于控制效果。第三个方程是Pixar在电影渲染中所使用的一种方程。对于第三种方程,rc是一个常量,用来描述和光源距离相关的常量,让r越接近光源时,整个方程越接近fmax,而当光源越来越远离时,通过se来实现一个更好对方程结果的控制,另外两个常量k0=ln(fc/fmax),k1 = se/k0,这个方程来自Barzel的一篇1997年的论文。到此,泛光源就介绍完了。
第二中点光源叫做spot light ,聚光灯。它就是光照强度随着方向的改变而改变的一种光源。其中一种变化形式是根据光源方向和光线方向(光源位置到物体表面的向量,这个在前面的介绍中,为了在光照方程中能更快速的计算出光线和法线的夹角,所以一直方向一直是从物体表面到光源位置的单位向量,这里,我们要反过来)的夹角来衰减光照强度,例如一下方程,这个方程也是OpenGL固定流水线中使用方程,

通过上述方程计算出光照强度后,利用以上的方程7.12或者衰减方程来计算辐照度。但是在DX固定管线中提供的是如下方程,这个方程的特点是能够模拟出本影(umbra)和半影(penumbar),其中参数的意思,一看就知道了,这里不多说了,

下面介绍第三种点光源,textured light ,纹理映射光源。如果知道Shadow Map原理的话,那么这种光源是十分好立即的,如果不知道,请参考本博客中相关文章。就结果来说,Textured Map的效果如下图:

就是把实现Shadow Map时的深度纹理替换成一张二维纹理,这样计算像素时,直接混合纹理和像素已有颜色就可以了。
advance shading--光源的类型的更多相关文章
- advance shading——基础(辐射度测定)
辐射度测定(radiometry) <real time rendering>在这章上来就说了一大堆光照方面的物理术语,不知该怎么翻译.后来在维基百科上看到这个表,清楚了很多(这里的w是瓦 ...
- advance shading——菲涅耳现象
(计算光照的时候,从两点出发考虑,光的传播方向,以及光的在这个方向上的能量.) 光与表面交互的模型包含两类:和物体表面(surface)以及和物体的内部(body).而subsurface指的是在物体 ...
- advance shading--BRDF
其实,双向反射(reflect)分布函数(BRDF)是一个四元函数,这个函数最终只是计算一个比值,这个值确定了射入物体表面的光中有多少被物体表面反射,并最终被眼睛所看到.反射的愈多,眼睛收到的光强越大 ...
- Unity 渲染教程(五):多个光源
https://www.jianshu.com/p/c1a9a5d27765 对每个物体渲染多个光源的光照效果. 支持不同的光源类型. 使用光源cookie. 计算顶点光照. 在光照计算中添加球面谐波 ...
- Shader预处理宏、内置状态变量、多版本编译等
预定义shader预处理宏: Target platform: SHADER_API_OPENGL - desktop OpenGL SHADER_API_D3D9 - Direct3D SHADER ...
- matlab的三维绘图和四维绘图
一.三维绘图1.曲线图plot3(X1,Y1,Z1,...):以默认线性属性绘制三维点集(X1,Y1,Z1)确定的曲线plot3(X1,Y1,Z1,LineSpec):以参数LineSpec确定的线性 ...
- Unity Shader 入门精要学习 (冯乐乐 著)
第1篇 基础篇 第1章 欢迎来到Shader的世界 第2章 渲染流水线 第3章 Unity Shader 基础 第4章 学习Shader所需的数学基础 第2篇 初级篇 第5章 开始Unity Shad ...
- 剖析虚幻渲染体系(12)- 移动端专题Part 1(UE移动端渲染分析)
目录 12.1 本篇概述 12.1.1 移动设备的特点 12.2 UE移动端渲染特性 12.2.1 Feature Level 12.2.2 Deferred Shading 12.2.3 Groun ...
- Unity3D脚本中文系列教程(十)
http://dong2008hong.blog.163.com/blog/static/4696882720140312627682/?suggestedreading&wumii Unit ...
随机推荐
- BZOJ2957: 楼房重建(线段树&LIS)
2957: 楼房重建 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 3727 Solved: 1793[Submit][Status][Discus ...
- 发发牢骚,觉得走c#这条路,不该太浮躁。
发发牢骚,觉得走c#这条路,不该太浮躁.校园招聘结束了,腾讯,华为,百度,完美时空,网易,阿里,让我觉得.NET很受歧视.清一色的C/C++,JAVA,只有网易有一点.Net的,但是都是非核心的运维工 ...
- 使用 Content-Encoding: br 替换 Content-Encoding: gzip
今天在测试一个web 框架的时候无意发现框架运行是响应头时有一个 Content-Encoding: br 发现是一个gzip 算法的替代,同时压缩比很不错 浏览器兼容性如下: nginx 的配置参考 ...
- 使用PL/SQL Developer连接远程数据
本机不安装Oracle客户端,使用PL/SQL Developer连接远程数据 1.先到Oracle网站下载Instant Client : http://www.oracle.com/technet ...
- linux下tengine安装
1.什么是tengine? 说到tengine,首先还是得说下nginx了,大家对于nginx并不陌生,对于基本的需求都能满足,如果是涉及高级性能,那么就必须使用商用版nginx plus了,一谈到商 ...
- CentOS 6.5 下HeartBeat的安装与配置
CentOS 6.5 下HeartBeat的安装与配置 参考网站: http://wenku.baidu.com/link?url=BvqJatdx1m12PLil-7YA1zkM0yUOEO8OnN ...
- rabbitMQ应用,laravel生产广播消息,springboot消费消息
最近做一个新需求,用户发布了动态,前台需要查询,为了用户读取信息响应速度更快(MySQL很难实现或者说实现起来很慢),所以在用户动态发布成功后,利用消息机制异步构建 redis缓存 和 elastic ...
- HR-人力资源管理系统(Human Resources Management System,HRMS)
人力资源管理系统(Human Resources Management System,HRMS),是指组织或社会团体运用系统学理论方法,对企业的人力资源管理方方面面进行分析.规划.实施.调整,提高企业 ...
- vim配置之powerline
vimConfig/plugin/vim-powerline-setting.vim let g:Powerline_symbols = 'fancy'
- 黄聪:将自己开发的插件发布到WordPress官方插件站(转)
原文作者:我爱水煮鱼 把你的插件发布到 WordPress 官方插件目录是让更多人用到插件的好方法,这样可以让你的插件不仅仅给我们中国人民使用,而且还可以让你的插件给全世界人民使用,想想全世界人民都在 ...