面试过程中常考的图形学知识汇总

本文详细介绍了计算机图形学中的渲染管线,包括顶点处理、三角形处理、光栅化、片元处理和帧缓冲区处理。讲解了顶点着色器和片段着色器的角色,以及光照模型如环境光、漫反射和镜面反射的计算。此外,还探讨了视图矩阵的形式和反走样原理,如超采样和多采样抗锯齿。最后,提到了OpenGL渲染过程中的状态测试环节。
摘要由CSDN通过智能技术生成

1.渲染管线
在这里插入图片描述

GAMES101-现代计算机图形学入门-闫令琪 讲的非常好 文字参考链接:

首先,我必须对于英文翻译成中文的几个词作出解释
光栅化
(Rasterize/rasteriztion)。这个词儿Adobe官方翻译成栅格化或者像素化。没错,就是把矢量图形转化成像素点儿的过程。我们屏幕上显示的画面都是由像素组成,而三维物体都是点线面构成的。要让点线面,变成能在屏幕上显示的像素,就需要Rasterize这个过程。就是从矢量的点线面的描述,变成像素的描述。如下图,这是一个放大了1200%的屏幕,前面是告诉计算机我有一个圆形,后面就是计算机把圆形转换成可以显示的像素点。这个过程就是Rasterize。
渲染管线
(Pipeline)这个翻译尤其不接地气,简直就是直译(pipe管子line线路)。Pipeline是输送管道的意思。其实是指三维渲染的过程中显卡执行的、从几何体到最终渲染图像的、数据传输处理计算的过程。
着色器
(Shader)这个翻译的挺好。画画的时候我们经常有这么一个过程:先打线稿,再上色。着色器就是用来做这个工作的。通常着色器分两种:
1顶点着色器(vertex shader)这个是告诉电脑如何打线稿的——如何处理顶点、法线等的数据的小程序。
2片面着色器(fragment shader)这个是告诉电脑如何上色的——如何处理光、阴影、遮挡、环境等等对物体表面的影响,最终生成一副图像的小程序。采用了这两种着色器小程序 的 数据传输处理计算的渲染过程,称之为 可编程管线。

渲染管线主要包括五个部分
五个部分, 顶点处理-三角形处理-光栅化-片元处理-Framebuffer的处理
顶点处理:顶点处理的作用是指对所有的顶点数据进行Model,View,和Projection的变换,最终得到投影到二维平面的坐标信息(同时为了Zbuffer保留深度z值)。

三角形处理:就是将所有的顶点按照原几何信息,变成三角面,每个面由3个顶点组成。得到了许许多多个三角形,

三角形光栅化:光栅化是将几何数据经过一系列变换后最终转换为像素,从而呈现在显示设备上的过程

片元处理:这里有个重要的点是 片元着色器,片元着色器的作用是处理由光栅化阶段生成的每个片元,最终计算出每个像素的最终颜色。归根结底,实际上就是数据的集合。这个数据集合包含每一个像素的各个颜色分量和像素透明度的值。

Framebuffer的处理:就是将所有的像素颜色信息整合在一起,输送给显示设备加以显示

3.2光照模型、实现?PBR有了解过吗?

光照计算处理共有三个部分:

  1. 环境光
  2. 漫反射
  3. 镜面反射

泛光模型: 泛光模型即只考虑环境光,这是最简单的经验模型,只会去考虑环境光的影响,并且不会去精确的描述,而只是用一个简单的式子表示
 在这里插入图片描述

Lambert漫反射模型:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Phong反射模型
   
在这里插入图片描述
在这里插入图片描述
Blinn-Phong反射模型(优化Phong模型)
在这里插入图片描述
整体计算公式: 泛光模型+Lambert漫反射+Blinn-Phong反射模型在这里插入图片描述

3.3顶点着色器中都可以做哪些事情?
使用vertex shaders,它用一段小程序替换固定功能处理。这段小程序的输入是模型空间的顶点,输出齐次剪裁空间的顶点,并且还携带一些信息,如:per-vertex diffuse 和 specualr,雾,透明度,纹理坐标和点大小
链接:

3.4视图矩阵什么样子的?为什么是那样的形式?
视图矩阵
在这里插入图片描述
至于为什么是那样的形式 因为包括了 旋转 ,放大缩小 以及平移 操作 注意1代表着是点 0代表着是向量

3.5反走样原理是什么?如何实现的
1.增加分辨率
2.先模糊后 采样
采样方法 例如将 增加采样数(一个像素点内)
MSAA
在这里插入图片描述

3.6 OpenGL渲染需要经过哪些状态测试?各自的机制
参考链接
光栅化阶段(包括纹理和雾)之后,数据就不再是像素,而是成为片断。每个片断都具有与像素对应的坐标数据以及颜色值和深度值,然后,每个片断都经历一系列的测试和操作。如果顺利通过这些测试和操作,片断值便可以转换为像素
(1) 裁剪测试

(2) alpha测试

(3) 模板测试

(4) 深度测试

(5) 混合

(6) 抖动

(7) 逻辑操作

3.7为什么会有锯齿?抗锯齿怎么弄?
三角形光栅化算法之后,我们可以把该三角形表示成一个如下图所示的像素点集合,这种问题本质是因为我们在采样的时候的频率过低无法跟上图像的频率从简单的角度去解释这种问题出现的原因就是,我们用有限离散的像素点去逼近连续的三角形,那么自然会出现这种锯齿走样的现象,因为这种近似是不准确的在这里插入图片描述
抗锯齿方法
1.1 超采样反走样(Super Sampling AA)
SSAA的想法其实是非常直观的,如果有限离散像素点逼近结果不好,那么我们用更多的采样点去逼近不就会得到更好的结果了吗?所以根据这个思想我们可以把原来的每个像素点进行细分,比如下例中,我们讲每个像素点细分成了4个采样点
在这里插入图片描述
1.2 多采样反走样(Multi-Sampling AA)
MSAA其实是对SSAA的一个改进,显然SSAA的计算量是非常大的,每个像素点分成4个采样点,我们就要进行4次的shading来计算颜色,额外多了4倍的计算量,如何降低它呢?

MSAA的做法也很容易理解,我们依然同样会分采样点,但是只会去计算究竟有几个采样点会被三角形cover,计算颜色的时候只会利用像素中心坐标计算一次颜色(即所有的信息都会被插值到像素中心然后取计算颜色),如下图
在这里插入图片描述

C++相关:

2.说一下opengl有哪些缓冲

3.说一下法线贴图,干嘛用的,他是在vertex shader 还是 fragment shader里进行使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值