光特性

参考OpenGL的光照模型,把光分成4种独立的成分:

  1. 环境光
  2. 散射光
  3. 镜面光
  4. 发散光

环境光:ambient light

环境光是那些在环境中进行了充分的散射,无法分辨其方向的光。它会均匀的照亮物体。

漫反射光:diffuse light

漫反射光来自某个方向,但在物体表面上向各个方向上反射,无论在何处观察,散射光看上去亮度都相同。我们之所以能看到物体,就是因为物体将入射的光向各个方向反射(所以称之为漫反射)

镜面光:specular light

镜面光来自一个特定的方向,并在物体表面以特定的方向反射出去。所以镜面光会让物体看起来有光泽,如金属表面的光泽。

发射光:emission light

发射光是由物体本身发射的光。

材质属性

光分成了4种成分,那么对应的材质也有对着4种光成分的反射率。物体最终呈现的颜色就是物体表面(材质)对不同光成分反射后所得到的颜色。

  1. 环境光材质
  2. 漫反射光材质
  3. 镜面光材质
  4. 发射光材质

环境光材质

环境光材质的反射率影响物体的整体颜色,并且反射率不受观察点影响。

漫反射光材质

漫反射光材质的反射率同样影响物体颜色。对颜色的影响取决于漫反射光的颜色以及与法线的夹角的影响,而不受观察点位置的影响。

镜面光材质

物体对光的镜面反射材质属性决定了光泽的颜色、大小和亮度。镜面反射光的强度还取决于观察点的位置,当观察点正好处于入射光的反射光线上,亮斑的亮度到达最大值。

发射光材质

前面提到的三种材质都是被动地反射来自外界的光线,而有些物体本身可以发射光。

光照计算

光照效果是由发射光,环境光,漫反射光以及镜面高光四部分组成,这四部分各自独立计算,然后再累加起来得到最终的光照效果。 对于光照着色有高洛德着色(Gouraud Shading)与冯氏着色(Phong Shading)。

  • 高洛德着色:也被称为Per-Vertex着色,它是在顶点着色阶段对顶点进行颜色计算,然后在光栅化阶段对这些顶点颜色进行线性插值形成片段的颜色。
  • 冯氏着色:也被称为Per-Pixel像素着色,它是在片段着色阶段对每一个片段(像素)进行颜色计算。

冯氏着色得到效果更好。

3D 灯光介绍的更多相关文章

  1. [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之灯光介绍Lights

    [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之灯光介绍Lights 既上一篇分享了中文字幕的摄像机介绍Cameras后,本篇分享一下第2个已完工的 ...

  2. WPF 3D编程介绍

    原文:WPF 3D编程介绍 上一篇文章简单的介绍了WPF编程的相关的内容,也推荐了本书.今天要来讲一下在WPF如何开展3D编程. 使用的xmal 和C#开发的时候:需要使用如下的关键要素: 1:摄像机 ...

  3. 3D Touch介绍:电子秤App与快捷操作

    随着iPhone6s与6s plus的到来,苹果给我们展现了一种全新的交互方式:重按手势.你可能知道,这个特性已经在Apple Watch和MacBook上推出了,不过那时叫Force Touch,就 ...

  4. JavaFX 3D部分介绍(3) Lights

    声明:   本博客文章原创类别的均为个人原创,版权所有.转载请注明出处: http://blog.csdn.net/ml3947,另外本人的个人博客:http://www.wjfxgame.com. ...

  5. 转:开源3D引擎介绍

    Delta3D:Delta3D是一个功能齐全的游戏引擎,可用于游戏,模拟或其他图形应用.其模块化设计集成了其他的开源项目,如‘开放场景图’,‘开放动力学引擎’,‘人物动画库’和‘OpenAL’ .De ...

  6. 图像处理之3d算法----2d转3d算法介绍

    http://www.3dov.cn/html/c/37/index.html http://news.ifeng.com/a/20151117/46275220_0.shtml 磁力矩阵 http: ...

  7. 第1部分: 游戏引擎介绍, 渲染和构造3D世界

    原文作者:Jake Simpson译者: 向海Email:GameWorldChina@myway.com ---------------------------------------------- ...

  8. 好吧,CSS3 3D transform变换,不过如此!

    一.写在前面的秋裤 早在去年的去年,我就大肆介绍了2D transform相关内容.看过海贼王的都知道,带D的家伙都不是好惹的,2D我辈尚可以应付,3D的话,呵呵,估计我等早就在千里之外被其霸气震晕了 ...

  9. C#程序员整理的Unity 3D笔记(十):Unity3D的位移、旋转的3D数学模型

    遇到一个想做的功能,但是实现不了,核心原因是因为对U3D的3D数学概念没有灵活吃透.故再次系统学习之—第三次学习3D数学. 本次,希望实现的功能很简单: 如在小地图中,希望可以动态画出Player当前 ...

随机推荐

  1. logstash (?m) 经典例子

    在和 codec/multiline 搭配使用的时候,需要注意一个问题,grok 正则和普通正则一样,默认是不支持匹配回车换行的.就像你需要 =~ //m 一样也需要单独指定,具体写法是在表达式开始位 ...

  2. LU分解(1)

    1/6 LU 分解          LU 分解可以写成A = LU,这里的L代表下三角矩阵,U代表上三角矩阵.对应的matlab代码如下: function[L, U] =zlu(A) % ZLU ...

  3. HDU_1401——分步双向BFS,八进制乘权值压缩,map存放hash

    Problem Description Solitaire is a game played on a chessboard 8x8. The rows and columns of the ches ...

  4. XML的四种解析器原理及性能比较

    转自zsq 1.DOM     DOM 是用与平台和语言无关的方式表示 XML 文档的官方 W3C 标准.DOM 是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分 ...

  5. js的深拷贝和浅拷贝

    一.数组的深浅拷贝 在使用JavaScript对数组进行操作的时候,我们经常需要将数组进行备份,事实证明如果只是简单的将它赋予其他变量,那么我们只要更改其中的任何一个,然后其他的也会跟着改变,这就导致 ...

  6. iOS 跑马灯 之 TXScrollLabelView

    前言 前段时间在开发一个广播的功能,网上也自己找了一些库,没有发现非常好用的,于是自己抽时间写了一个,在 Github 上发布一天收获六十多个 star,这里首先感谢大家在微博上的转发,使得 TXSc ...

  7. Clipboard.js : 移动端浏览器实现网页内容复制

    .bl { padding: 5px 10px; border-left: 3px solid #009a61; background: #f6f6f6; color: #555; font-size ...

  8. linux下负载均衡(LVS安装与配置)【转】

    一.LVS的三种包转发方式      LVS提供了三种包转发方式:NAT(网络地址映射).IP Tunneling(IP隧道).Direct Routing(直接路由)     不同的转发模式决定了不 ...

  9. root用户改动普通用户文件

    首先使用别的用户登录入LINUX系统,切换成root用户.进入到须要改动的用户主文件夹,对该用户文件夹下的文件进行改动

  10. Android中如何像 360 一样优雅的杀死后台服务而不启动

    Android中,虽然有很多方法(API或者shell命令)杀死后台`service`,但是仍然有很多程序几秒内再次启动,导致无法真正的杀死.这里主要着重介绍如何像 360 一样杀死Android后台 ...