Games101 笔记 Lecture 7-9 Shading (Illumination, Shading)
Games101 笔记 Lecture 7-9 Shading [Illumination, Shading]
- visibility / occlusion
- Shading简介
- Blinn-Phong Reflectance Model
- Diffuse Reflection 漫反射
- 概念介绍
- 接收的能量
- 到达的能量
- 漫反射项
- 小结
- Specular Term 高光项
- 概念介绍
- 半程向量
- 高光项
- 说明
- Ambient Term 环境光项
- 概念介绍
- 说明
- Blinn-Phong Reflectance Model总结
visibility / occlusion
z-buffer
Painter’s Algorithm(如三角形存在循环遮挡,画家算法无法解决。)
- frame buffer
- depth buffer
smaller z --> closer, larger x -->further
ALGORITHM:
Initialize depth buffer to INF_MAX
During rasterization:
For (each Triangle T):
For (each sample(x,y,z) in T:
if (z < z_buffer[x,y]):
frame_buffer[x,y] = rgb
z_buffer[x,y] = z
else
; // do nothing this sample is occluded
说明:
- MSAA:对每一个采样点做一次记录。
- Same Depth:需要特殊处理。
- 透明物体不用z_buffer处理。
Shading简介
Shading is local. compute light reflected toward camera at a specific shading point.
shading的对象是一个shading point,考虑这个点的着色结果。
对于每个shading point,都认为在局部极小范围内永远是一个平面。
考虑任何一个点的着色时,只考虑这个点本身在光源下的表现,不考虑其他物体的存在。shading ≠shadow。
Blinn-Phong Reflectance Model
解决某一个点应该呈现出什么颜色or样子。
Diffuse + Specular + Ambient
Input:
- Viewer direction, v 观测方向:从shading point指向观测点的一个向量。
- Surface normal, n 法线向量:shading point处小平面对应的法线。
- Light direction, l (for each of many lights) 光照方向:从shading point指向光源的一个向量。
- Surface parameters(colors, shininess,…) 表面的一些参数:不同的颜色,“有多亮”等。
为方便起见,观测方向、法线向量、光照方向均为单位向量。
Diffuse Reflection 漫反射
Light is scattered uniformly in all directions
Surface color is the same for all viewing directions
概念介绍
当一个光线打到物体表面某一点的时候,光线会被均匀地反射到各个不同的的方向上去。
接收的能量
- How much light (energy) is received?
- Lambert’s cosine law
- light per unit area is proportional to cos(theta) = l · n
物体的法线与光照方向的夹角决定了物体会有多“亮”。
光是一种能量,要看到的物体相当于物体接收到了一些能量。考虑着色点周围单位面积会接收到多少能量,这样才有意义。
Lambert余弦定理,定义了接受到的能量与光照方向及法线方向夹角的余弦成正比。
到达的能量
- Light Falloff 每个球表面能量一致,假设能量不损耗。
光是一种能量,假设光来自点光源,这个点光源无时无刻不以某种方式往四面八方辐射能量。
我们认为任意一个时刻。点光源如果往四面八方辐射的能量都是一致的,则这个能量一定集中于球壳上。
存在能量守恒定律,考虑在真空中无损耗的情况下,在离中心近的球壳上和离中心远的球壳上能量是一致的。原本能量集中在小的球壳上,意味着每一个点每一个位置的能量是比较多的,传播的时候球壳的表面积越来越大, 则在球壳点上对应的能量是越来越少的。
考虑一个与光源相距单位距离的球壳上,定义光的强度是I,如果传播到距离为r的球壳上,则这个球壳上点对应的光的强度是I/r2。
在光线传播的过程中,如果考虑单位面积,在任何一个位置上所能接收到的能量是与光线传播的距离平方成反比的。
假设知道一个点光源,并且知道shading point离点光源有多远,则可知道有多少光真正传播到这个shading point的附近。
漫反射项
知道了有多少光会到达该单位平面,又知道有多少光会被吸收,就可以计算出到达了多少光。
L d = k d ⋅ ( I / r 2 ) ⋅ max ( 0 , n → ⋅ l → ) L_d = k_d \cdot ( I/r^2) \cdot \max (0, \overrightarrow{n} \cdot \overrightarrow{l}) Ld=kd⋅(I/r2)⋅max(0,n ⋅l )
L d = k d ⏟ diffuse coefficient(color) ⋅ ( I / r 2 ) ⏞ energy arrived at the shading point ⋅ max ( 0 , n → ⋅ l → ) ⏟ energy received by the shading point L_d = \underbrace{k_d}_{\text{diffuse coefficient(color)}} \cdot \overbrace{( I/r^2)}^{\text{energy arrived at the shading point}} \cdot \underbrace {\max (0, \overrightarrow{n} \cdot \overrightarrow{l})}_{\text{energy received by the shading point}} Ld=diffuse coefficient(color) kd⋅(I/r2) energy arrived at the shading point⋅energy received by the shading point max(0,n ⋅l )
余弦比较好计算,但是当两个向量点乘得到一个负值时,表示一个光线从下面穿过物体表面,没有物理意义,是不会有贡献的,因此需要max来剔除。
shading point有颜色是因为对光的吸收。
定义一个系数kd表示漫反射项的系数。如果为1,表示不吸收能量,有多少能量进来就有多少能量被反射出去。如果为0,则表面是黑的,表示进来的能量全部被吸收了,没有能量反射出去。
如果把kd表示成rgb的值,三个通道分别都在0-1之间,在shading point上就可以定义一个颜色。
小结
对于漫反射项,与观察的方向v没有关系。不管从哪个角度观察该点,得到的结果都是一样的。
考虑的只是光线与法线的夹角。
Specular Term 高光项
Intensity depends on view direction.
概念介绍
什么是高光?
高光发生在比较光滑的物体上面。比较光滑的物体反射都有个特性,即比较接近镜面反射。
如果是一个镜子,物体是无限光滑的,给入射方向、法线方向,自然就可以算出出射方向R。
如果是比较光滑,比如金属,是没有镜子那么光滑的,反射方向会沿着镜面反射方向R有一个分布。什么情况下可以看见高光?
当观察方向与镜面反射方向比较接近时,也就是R与v方向比较近时,可以看到高光。
半程向量
当观察方向和镜面反射方向接近时,说明了法线方向与半程向量方向接近。
半程向量定义为:
h → = b i s e c t o r ( v → , l → ) = v → + l → ∥ v → + l → ∥ \overrightarrow h=bisector( \overrightarrow v, \overrightarrow l) = \dfrac{\overrightarrow v+ \overrightarrow l}{\lVert \overrightarrow v+ \overrightarrow l \rVert} h =bisector(v ,l )=∥v +l ∥v +l
高光项
为了衡量能否看到高光,只需要看n与h是否接近。
两个向量是否接近可以用余弦值来衡量。
specularly reflected light:
L s = k s ⋅ ( I / r 2 ) ⋅ max ( 0 , cos α ) p = k s ⋅ ( I / r 2 ) ⋅ max ( 0 , n → ⋅ h → ) p L_s = k_s \cdot ( I/r^2) \cdot \max (0, \cos \alpha)^p= k_s \cdot ( I/r^2) \cdot \max (0, \overrightarrow{n} \cdot \overrightarrow{h})^p Ls=ks⋅(I/r2)⋅max(0,cosα)p=ks⋅(I/r2)⋅max(0,n ⋅h )p
其中,ks为specular coefficient,镜面反射系数。通常认为高光是白色,所以镜面反射系数通常为白色值。
分别考虑:给定一定的颜色(一般白色);多少能量到达了shading point,半程向量与发现方向是否接近(即观察方向和镜面反射方向是否接近)。
说明
- 该模型为经验模型,因此这里没有考虑吸收了多少光,也就是简化了n与l的乘积。主要关注是否看到了高光。
- 如果不用半程向量与法线的乘积,而用镜面反射方向和观测方向,这个模型称为Phong反射模型(Blinn-Phong是一种改进)。使用半程向量计算较为方便。
- Increasing p narrows the reflectoin lobe
指数p。向量之间夹角的余弦确实可以体现两个向量是否接近,但是容忍度太高了(见图)。如果真的用夹角余弦生成高光的话,会在一个很大的区域之内都有高光。需要在当离得非常近的时候才有高光。因此加了个指数p,加快余弦值的衰减速度。
通常在该模型中p为100-200,这个指数可以控制高光到底有多大。
Ambient Term 环境光项
Shading that does not depend on anything.
- Add constant color to account for disregarded illumination and fill in black shadows.
- This is approximate / fake.
概念介绍
在某些点不可能直接被光源照亮,但是并不是完全暗的,因为光线可能弹射很多次最终弹射到该点。
来自环境的光很复杂,该模型中做了一个大胆的假设:认为任何一个点接收到来自于环境的光都是相同的,强度记为Ia。
环境光项:
L a = k a ⋅ I a L_a=k_a \cdot I_a La=ka⋅Ia
其中,ka为环境光系数。
说明
- 环境光不讲究从哪个方向进来,与光线方向无关。
- 不管从哪个角度看,得到的结果都是一样的,与观测方向无关。
- 并且与法线方向也无关。
- 环境光其实是一个常数。 相当于是一种颜色。这是一个很大胆的简化。
- 作用:保证没有地方是完全黑的。
Blinn-Phong Reflectance Model总结
L = L a + L d + L s = k a I a + k d ( I / r 2 ) max ( 0 , n → ⋅ l → ) + k s ( I / r 2 ) max ( 0 , n → ⋅ h → ) p L=L_a+L_d+L_s=k_aI_a+k_d(I/r^2) \max(0, \overrightarrow{n} \cdot \overrightarrow{l}) +k_s(I/r^2)\max(0, \overrightarrow{n} \cdot \overrightarrow{h})^p L=La+Ld+Ls=kaIa+kd(I/r2)max(0,n ⋅l )+ks(I/r2)max(0,n ⋅h )p
- 环境光项:与角度无关,是一个常数颜色。
- 漫反射项:与观测角度无关,但是与光线和法线之间角度有关。
- 高光项:与观测角度有关,只有在很小的地方会有很亮的高光。
注:内容为课程内容整理笔记,图片来自老师ppt。
Games101 笔记 Lecture 7-9 Shading (Illumination, Shading)相关推荐
- Games101笔记——Lecture 19:Cameras, Lenses and Light Fields
Lecture 19:Cameras, Lenses and Light Fields 独立的内容:相机.棱镜和光场 图形学中两种成像的方法:光栅化和光线追踪 但他们在自然界中并不存在 简单的成像方法 ...
- games101笔记 Shading
什么是shading 不同的物体应用不同的材质的过程 就是计算出物体具体应该在的地方,物体的光照,物体本身应该有的材质. Blinn-Phong Reflectance Model(Blinn-Pho ...
- [GAMES101]现代计算机图形学课程总结3:Shading
文章目录 概要 Shading的定义 Shading是局部的 输入 不产生阴影(shading不等于shadow) Blinn-Phong Reflectance Model 漫反射 (Diffuse ...
- GAMES101 学习笔记 Lecture 1~6
目录 GAMES101 学习笔记 Lecture 1~6 往期作业汇总帖 Lecture 01 Overview of Computer Graphics 笔记参考 其他教程 怎么判断一个画面是否优秀 ...
- Games101 计算机图形学课程笔记: Lecture 08 Shading 2 (Shading, Pipeline and Texture Mapping)
目录 Specular Term (Blinn-Phong) Specular Term 高光项 Ambient Term 环境项 Blinn-Phong Reflection模型效果 着色频率 fl ...
- GAMES101笔记_Lec07~09_着色 Shading
0 我们已经学了什么 What We've Covered So Far 空间中定义了一个摄像机,通过某些变换使模型摆好姿势(Model) 通过观测变换让摄像机放在原点,得到标准的 [ − 1 , 1 ...
- 【Shading】Shading 着色
课程来源:games101图形学入门Lecture07-08 Lingqi Yan UC Santa Barbara PC端的读者可使用右侧文章目录进行导航 Shading Definition 定义 ...
- GAMES101笔记_Lec01_计算机图形学概述 Overview of Computer Graphics
作为一名想要了解图形学的学生,已经在无数地方看到有人推荐闫令琪老师的GAMES101课程,但由于自己是美术专业,在笼统看过这门课程之后认为这门课有一定学习难度,所以为了打下比较扎实的基础和方便自己日后 ...
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 12—Support Vector Machines 支持向量机...
Lecture 12 支持向量机 Support Vector Machines 12.1 优化目标 Optimization Objective 支持向量机(Support Vector Machi ...
最新文章
- python 生成器与迭代器
- 文本编辑器中实现设置工具栏和状态栏可见性的功能
- 计算机教育杂志社投稿送样刊,山东教育杂志社投稿期刊论文征稿发表-陶润杂志网...
- cmake卸载 ubuntu_ubuntu卸载/更新Cmake
- c语言编程三问三答,c语言程序编程
- 40年技术发展变革,物联网行业的趋势、现状与挑战
- APP界面的数据可视化设计临摹学习模板
- 解码(五):sws_getContext和sws_scale像素格式和尺寸转换函数详解
- PHP Composer 新漏洞可引发大规模供应链攻击
- Android 官方命令深入分析之android
- 【转】C#使用GDI+制作背景颜色淡入淡出效果的按钮
- 有关STL使用上的一些注意事项。关于某些函数的参数问题。
- JAVA入门[14]-Spring MVC AOP
- STL——标准模板库
- 半岛铁盒平板测评--真的很垃圾的平板-怎么修改CPU型号
- 鸿蒙系统脱离了安卓么,曝华为手机将脱离安卓系统,3月上线新系统全面改为鸿蒙内核!...
- 硬件科普系列之显示篇——LCD与OLED知多少
- php挂载webdav,PHP上传文件到WebDav
- sqlplus连接数据库的几种方法
- 100个python算法超详细讲解:猜牌术
热门文章
- sklearn入门——聚类算法KMeans
- Gstreamer说明
- 小程序(原生) 引入weUI组件
- 提高程序并发量的几个建议(不看保证后悔死你)
- 【时间序列分析】12. ARMA(1,1)模型
- NSIS:迅雷5.8.6.600自由定制版脚本及下载
- 盆栽的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- C#设计程序购买商品总金额
- 20155318 《Java程序设计》实验四 (Android程序设计)实验报告
- 谈谈能带来高薪报酬的软件技术有哪些?