【计算机图形学入门】笔记7:Shading着色1(光照与基本着色模型)

news2024/10/2 14:32:33

07Shading着色(光照与基本着色模型)

    • 1.深度缓冲Z-buffering
      • 1.画家算法:先把远处的东西画在屏幕上,再画近处的,从而近处物体覆盖远处物体。(油画家)
      • 2.深度缓冲
    • 2.Shading着色
      • 1.我们目前学了哪些知识
      • 2.定义
      • 3.一个基础的着色模型:Blinn-Phong Reflectance Model
    • 3.漫反射
      • 1.入射角度对漫反射的影响
      • 2.距离对漫反射的影响
      • 3.Lambertian 定律

目前已经可以画出单个三角形了,那么多个三角形的可见性或遮挡问题如何解决(解决先后向问题)?

1.深度缓冲Z-buffering

1.画家算法:先把远处的东西画在屏幕上,再画近处的,从而近处物体覆盖远处物体。(油画家)

请添加图片描述

但是当用这个算法去画一个立体正方形时,会出现后面的边显示出来的错误效果。

所以我们引入了深度缓冲。

2.深度缓冲

这是一个在图形学中广泛采用的算法

假设在深度测试中离我们越近的物体深度值越小,越远的物体深度值越大。

• Store current min. z-value for each sample (pixel) 存储每个样本当前最小的深度值(以像素为单位)
• Needs an additional buffer for depth values 需要额外的深度值缓冲区
- frame buffer stores color values 帧缓冲区存储颜色值
- depth buffer (z-buffer) stores depth 深度缓冲区存储深度

请添加图片描述

基本思想:每一个像素内记录它的最浅深度,对于任意一个三角形都可以把它光栅化成不同的像素,所以我们就可以找到任意一个三角形覆盖的任意一个像素

算法流程:

1.首先认为所有深度缓存中的所有像素一开始记录的距离或者深度都是无限远的(R)

2.然后我们把一个个三角形以任何的顺序往里面做rasterization(光栅化)

3.如果当前三角形像素的深度小于之前记录的最小三角形深度,就替换掉

请添加图片描述

使用深度缓存的案例:只记录深度值最小的像素点

请添加图片描述

算法复杂度:运算n个三角形的复杂的为O(n)

为什么是线性的复杂度?因为我们始终只是在记录最小值,并没有排序。

有一个问题:当两个三角形有深度值相同的像素点时怎么办?一般浮点数运算很难有相同的,然后万一出现相同值的话,后面会再讲。此外深度缓存也无法处理透明物体,透明物体后面也需要特殊处理。

2.Shading着色

1.我们目前学了哪些知识

我们现在已经学会了MVP变换,也学会了光栅化。

我们知道,其实将一个物体渲染的步骤无非以下:

1.把模型放好(给出模型中各个点的坐标)
2.把相机放好(把相机摆到标准位置)
3.对着模型拍一张照片(视图变换,投影变换以及视口变换)
4.在屏幕上画出这张照片(光栅化)

总而言之,所谓渲染,其实就是照照片。只不过这个照片是电脑画出来的

总结来讲我们目前所学知识还不能表现物体的明暗变化。

请添加图片描述

2.定义

The darkening or coloring(明暗与颜色) of an illustration or diagram with parallel lines or a block of color.

在图形学中的定义:The process of applying a material to an object. 对不同物体应用不同材质的过程叫做着色。

3.一个基础的着色模型:Blinn-Phong Reflectance Model

请添加图片描述

现在考虑的光照是考虑在任何一个点上,假设看到的这个点叫shading point,考虑这个点的着色结果是什么。

shading point是在一个物体表面上,物体表面可以是曲面,我们认为在一个局部的一个非常小的范围内,它永远是一个平面。

n是平面的法线,也就是垂直这个平面的一个方向

v是观测方向,也就是朝向相机的方向

l是光照方向,光射过来的方向

表面的其他参数,例如颜色、光泽…

以上表示方向的都是单位向量,只表示方向,长度永远为1

请添加图片描述

着色是局部的,既不会生成阴影,不考虑其他物体的存在,只考虑这个点自己。

下面我们要分别处理高光、漫反射和环境光。

3.漫反射

对于漫反射,我们需要考虑两方面的因素:

  • 入射角度
  • 距离

1.入射角度对漫反射的影响

先说为什么和入射角度相关。

我们先取一小块单位表面。

当光直射表面的时候,接收光照的面积是整个面积,即1。
当光与表面有一个夹角的时候(我们用表面法向n与入射光I的夹角theta表示),接收光照的面积只是一部分面积。即小于1。
当光与表面完全平行的时候(也就是theta=90°),接收光照的面积为0。
那么具体来说,假如成theta角,接收光照的面积是原来的多少呢?

答案是cos ⁡ θ

可以画出如下面第三个图来推导。

显然下面的那块面积正是1 ⋅ cos ⁡ θ

而由于采用了单位向量,恰好单位向量I与n之间的点积就是cos ⁡ θ

在这里插入图片描述

我们可以认为,只有cos ⁡ θ的光能量被表面接收了。所以自然亮度要乘以cos ⁡ θ 。

2.距离对漫反射的影响

另一个影响因素,是距离

对于一个点光源来说,我们想象光向外发射出一个球壳。由于能量守恒的缘故,显然这个球壳越大,能量就约稀薄。也就是单位面积上能够接收到的能量就越小。这和摊煎饼是一个道理,摊的越大,面糊糊越薄。

在这里插入图片描述

按照什么样的比例衰减呢?

自然是球壳表面积有多大,能量就要均摊多少!

球壳表面积是4 π r ^2

所以光的能量自然是按照r^2这个比率来衰减的了!

3.Lambertian 定律

把上述两点因素结合起来,我们就得到了漫反射的规律,这被称之为Lambertian 定律。

就是下面这个公式

在这里插入图片描述

这里要说明:

为什么要用max(0, …)?
这是为了防止出现负数。而在我们情况里,夹角出现负数是没有意义的。光线不可能从物体的内部照射到物体表面。
为什么要有前面的系数kd?
首先,我们可以通过这个系数调整漫反射的强度,也就是明暗。其次,假如我们把它设置为向量,还可以表示不同颜色。因为不同颜色的吸收率可能是不同的。我们对每个颜色(RGB)给出一个系数,用来表示这种颜色没有被吸收的占比。这样就可以造成不同颜色的漫反射效果。
为什么没有视线向量v?
是因为漫反射与视角无关。无论你从哪个方向看过去,漫反射的光都是一样的。所以这个公式和v没有任何的关系。

下图展示了左上方光源照射一个球体得到的漫反射图像。可以发现:球体右下部分由于与光线夹角为0,是无法接受光线的,所以是暗的。而随着往左上方,球体表面法向与光源夹角越来越小,所以越来越亮。

不同的图片表示了不同kd的结果。这也可以看出,kd可以调整漫反射的强度。如果kd是1表明这个点完全不吸收能量,将能量反射出去,它是最亮的,如果是0表明这个表面是黑的,光线打到他后所有的能量都被吸收了,没有能量反射出去。kd可以使用一个rgb的向量表示

在这里插入图片描述

一句话:漫反射处理的是物体与光源的相对位置(远近和方向)所造成的明暗变化。

总结:从着色开始慢慢难起来了,后面这部分如果听不懂的话可以多听几遍,Lambertian 公式这里我听了4遍才逐渐掌握。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/127844.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CleanMyMacX2023系统清理优化工具使用评测

如果你的macbook有点年头空间不够开始卡顿了,或者你是windows用户刚转来的,我强烈建议你安装一个cleanmymac!Mac电脑清理是可以直接使用储存空间管理(关于本机->储存空间->管理)来清理,但是这里的其他…

Android开发笔记(一百九十)增强了日志功能的第二版Logcat

从Android Studio Dolphin开始,查看应用日志的Logcat全面升级,堪称Logcat 2.0版本。下面就让我们看看LogcatV2.0究竟带来了什么新特性吧。 对于Android Studio的老用户来说,小海豚版本新出的LogcatV2.0在用法上有不小的差异,一开始…

Fisher卡方全流程汇总

Fisher卡方 卡方检验研究数据的独立性,在分析样本量较少(比如小于40),也或者期望频数出现小于5时,此时使用fisher卡方检验较为适合。SPSSAU医学研究模块中的卡方检验时,有提供2*2即4表格时提供fisher卡方检…

魔方(14)133魔方、一阶鬼魔魔方、双心魔方

目录 133魔方 1,魔方三要素 2,复原方法 一阶鬼魔魔方 1,魔方三要素 2,复原方法 双心魔方 133魔方 1,魔方三要素 (1)组成部件 9个块,1个中心块,4个棱块&#xff…

ZYNQ - 以太网远程更新SD卡应用程序

写在前面 对于ZYNQ系列的板卡固化,可以通过JTAG接口,使用SDK固化到FLASH中,或者可将SD卡取出将SD卡中保存的固化工程进行修改,但在很多情况下,离线更新会很不方便,本文借鉴网上常见的远程更新QSPI FLASH的…

思维导图 制作

PPT e.g: WPS中ppt 新建 文本框一定要 在外框之内。 左键 全选中,就会出来如下。 可直接点居中,就不用浪费time调位置 全选中,右键,【组合】 形成整体,可复制到word中 选择性粘贴到word中 skill: 左键…

《Linux运维总结:Centos7.6源码安装单实例redis6.2.8》

一、部署redis服务 1.1、环境信息 环境信息如下: 主机IP操作系统Redis版本CPU架构192.168.1.191Centos7.66.2.8x86_641.2、二进制方式 1、安装环境依赖 [rootlocalhost ~]# yum -y install gcc2、安装包下载 [rootlocalhost ~]# wget https://download.redis.io…

Linux-线程(LWP)

文章目录线程线程概念进程今天的进程 vs之前的进程私有和共享资源实验验证线程的优点:线程的缺点:线程异常线程的用途:线程控制创建线程(1)先创建两个线程:链接时要引入第三方库。(2)创建多个线程:(3)线程的健壮性不强…

Pandas 替换 NaN 值

替换Pandas DataFram中的 NaN 值 问题 NaN 代表 Not A Number,是表示数据中缺失值的常用方法之一。它是一个特殊的浮点值,不能转换为 float 以外的任何其他类型。NaN 值是数据分析中的主要问题之一。为了得到理想的结果,对 NaN 进行处理是非…

LeetCode刷题复盘笔记—一文搞懂动态规划之53. 最大子数组和问题(动态规划系列第三十五篇)

今日主要总结一下动态规划的一道题目,53. 最大子数组和 题目:53. 最大子数组和 Leetcode题目地址 题目描述: 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素)&#…

成年人的崩溃一触即发,掌握学习能力才能突破认知结界,干货满满!

成年人的崩溃一触即发,掌握学习能力才能突破认知结界! 今年2月份(2022-02),从小红书上购买了知识博主【老明读书】,针对学习能力的讲解分析,真是干货满满!非常感谢老明,…

FPGA项目案例展示

MIPI视频拼接: 在无人机、智能驾驶中,摄像头多达十几路 为解决图像处理芯片(如海思、高通平台)的接口瓶颈 需要将多个摄像头合成一路处理。 SLVS-EC转MIPI SLVS-EC采集,LANE速率可达4.6G MIPI输出,速率2.…

基于ASP.net Mvc的超市管理系统

摘 要 网络的广泛应用给生活带来了十分的便利。所以把天美意超市管理与现在网络相结合,利用net语言建设天美意超市管理系统,实现天美意超市管理的信息化。则对于进一步提高天美意超市发展,丰富天美意超市管理系统能起到不少的促进作用。 天美…

SHELL 脚本练习 一

习题一 :在当前主机编写脚本文件history_max.sh显示主机中执行频率最高的前5个命令 习题二 : 判断主机是否存在rhel用户,如果存在则设置密码为redhat,如果不存在则创建用户 并设置密码 习题三 :通过设置变量HISTTIMEFORMAT&#x…

【小白课程】openKylin系统音频大体框架介绍

在桌面操作系统中,音频是至关重要的一环,音频的稳定支持直接决定了用户的听感以及使用体验,今天我们就给大家介绍openKylin桌面操作系统背后关于音频的那些故事。 先看一张框架图,这张图大致介绍了openKylin操作系统音频的框架组…

动态配置开发模式在转转的落地实践

文章目录一、问题背景1.1 场景概述1.2 风险问题1.3 效率问题二、问题剖析2.1 以往的应对方式2.2 主要矛盾点与问题本质的探索2.2.1 主要矛盾点2.2.2 问题本质的探索三、方案设计3.1 视图展示的标准化3.2 视图构建的自动化3.3 开发体验的沉浸化3.4 整体架构设计四、落地现状五、…

谷粒商城之高级篇

谷粒商城之高级篇 目录谷粒商城之高级篇前言2 商城业务2.1 商品上架2.1.1 商品Mapping2.1.2 上架细节2.1.3 数据一致性2.1.4 代码实现2.2 商城系统首页2.2.1 渲染首页2.2.2 渲染一级分类数据2.2.3 渲染二级三级分类数据2.2.4 nginx 搭建域名访问环境2.3 检索业务2.3.1 页面环境…

Vue3富文本编辑器wangEditor 5使用总结

wangEditor 是一个开源 Web 富文本编辑器,开箱即用,配置简单 官网链接:https://www.wangeditor.com 使用流程: 1.在项目中安装wangEditor 输入以下命令安装 npm install wangeditor/editor --save npm install wangeditor/edi…

React通用后台管理系统-笔记1

环境 node: 16.17.1 npm: 8.15.0 Ant Design of React官网:https://ant.design/docs/react/introduce-cn 一、创建项目 npm init vite Project name: lege-management Select a framework: react Select a variant: react-ts 打开package.json,参考以下…

三、串(字符串)

一、定义及常见术语 串相等:当两个串的长度相等且对应位置上的字符都相同时,这两个串才是相等的 所有的空串都是相等的 二、两种存储结构 2.1顺序存储结构(更常用) #define MAXLEN 255 typedef struct {char ch[MAXLEN1];//存…