zoukankan      html  css  js  c++  java
  • Lecture07_着色 1(光照、着色和图形管线)_GAMES101 课堂笔记

         今日学习内容概览:

    第一部分:光栅化

    一、画家算法(Painter’s Algorithm)

    画家算法的操作是从远至进一层一层画,最终将画像完整。
    但是,缺点是如果画像没有很明显的逻辑层次,画家算法将不适用。例如下图:

    为了解决这个矛盾,于是进行改进发明了 ”Z-Buffer“ 算法。

    二、Z-Buffer算法

    (一)定义

    (二)操作步骤

    简单来说,步骤:

    1. 通过离相机最近的一点进行深度插值,知道每一个三角形的深度值。
    2. 利用for循环,计算每个采样点的深度值。(注:不是对每一个像素求Z-Buffer,是对每一个采样点。)
    3. 一个一个采样点的深度值叠加进行光栅化,只保留当前最小值(最近才可以被看见,远了就被挡住,因此被近的覆盖。)

    效果图:

    由于需要对采样点进行挨个比较,但是只保留最小值,因此其时间复杂度为(O(n))。并且至于采样点(三角形)叠加的顺序并不会影响光栅化效果(因为只保留最小值)。

    第二部分:着色(Shading)

    目前我们涉及的采样过程:

    但是为了一个物体变得更加真实一些,还需要对其进行着色(shading).

    一、着色(Shading)

    (一) 定义

    英文词典解释:通过变暗或变亮对其进行着色。

    图形学概念:物体应用不同的材质表现着色过程。

    (二)应用举例

    • 高光(Specular highlights):亮度极高,在镜面反射附近方向反射。

    • 漫反射(Diffuse reflection):亮度有变化,光线会反射到四面八方。

    • 环境光照(Ambient lighting):

      这属于间接光照,如下图第3个箭头所示,其实点光源并不会射到环境光照所指的位置。

      但是由于光源发出的光线到其他物体表面(例如墙壁、桌面),这些表面的漫反射光线会映射到该位置(通俗理解:可看见其他物体的影子。)

    (三)着色是局部的

    对相关的光照方向等参数定义:

    由于着色不考虑其他物体影响,因此没有阴影生成,即着色 ≠ 阴影。例如下图,只考虑着色的情况:

    二、漫反射(Diffuse Reflection)

    漫反射到每个方向上是均匀的:

    计算被吸收的能量:

    光线发射:

    光线传播距离越远,光能量越少。能量与距离平方成反比。计算公式:

    漫反射计算公式:

  • 相关阅读:
    [leetcode] Bulls and Cows
    Win7 系统所有应用颜色调整
    一道题反映Java的类初始化过程
    翻转二叉树(深搜-先序遍历-交换Node)
    在一个数组中,除了两个数外,其余数都是两两成对出现,找出这两个数,要求时间复杂度O(n),空间复杂度O(1)
    一道随机函数题:由rand5()生成rand7()
    求一条直线通过的最大点数
    菜根谭#236
    菜根谭#235
    菜根谭#234
  • 原文地址:https://www.cnblogs.com/somedayLi/p/12423388.html
Copyright © 2011-2022 走看看