UE4/5 开发面试题:图形学

5

主题

10

帖子

20

积分

新手上路

Rank: 1

积分
20
发表于 2023-3-25 17:38:01 | 显示全部楼层
1. GPU 渲染管线

图形渲染管线分为四个阶段:应用程序阶段、几何阶段、光栅化阶段和像素处理阶段。
(1)应用程序阶段:主要任务是在 CPU 端处理包括物理碰撞检测、物理模拟、动画计算等任务。3D模型中保存着模型的顶点坐标,法线,切线,颜色等数据,这些数据一般通过向量进行存储,CPU 从模型中获取这些顶点信息数据,并将这些数据传送给 GPU 作为最开始的输入数据。
(2)几何阶段:主要任务是对模型的顶点数据进行坐标变换、顶点处理、坐标裁剪等操作,将三维空间的数据转换为二维空间的数据。
(3)光栅化阶段:是将图元离散化成片段的过程,其任务是找到需要绘制出的所有片段。该阶段包含:三角形设置(图元装配)->三角形遍历。
(4)像素处理阶段:给每一个像素正确配色,最后绘制出整幅图像,包括像素颜色计算、像素变换,透明度混合等操作,处理物体渲染顺序及深度测试等。
2. OpenGL 的渲染管线



3. Phong 光照模型和 Blin-Phong 光照模型的区别

Phong 氏光照模型其实是经验模型,参数信息是通过经验得到的。Phong 模型将物体光照分为三个部分进行计算,分别是:漫反射分量、镜面高光和环境光。其中,环境光分量是用来模拟全局光照效果的,其实就是在物体光照信息基础上叠加上一个较小的光照常量,用来表示场景中其他物体反射的间接光照。Phong 模型在处理高光时会出现光照不连续的情况,当光源和视点位于同一个方向时,反射光线跟观察方向可能大于90度,反射光线的分量就被消除了。
Blinn-Phong 光照模型是对 Phong 氏光照模型的改进,Blinn-Phong 模型在处理镜面反射时不使用观察方向和反射光线的夹角来计算,而是引入了一个新的向量:半角向量(Halfway vector)。半角向量其实就是入射光线向量L和观察方向V的中间位置(角平分线)。Blinn-Phong求高光亮度的时候使用半角向量和法向量的点积来决定高光亮度。Phong 氏是用反射光线和视线向量的点积来求高光亮度。
4.延迟渲染和前向渲染的区别[1]

前向渲染的流程是给定一个几何体,引擎对其进行从顶点到像素着色器的一系列计算,然后输出到最终的图像缓冲区。场景中有多个几何体时,引擎就是对其挨个进行渲染,完成一个再继续下一个。前向渲染这种逐个渲染的特点非常适合渲染半透明物体。


延迟渲染就是把光照计算延迟到深度测试之后的渲染方式,延迟着色适合在场景中实时光照很多的情况下使用,可以支持大量的实时光照,对于半透明无能为力,所有半透明的物体都需要等待不透明物体以延迟渲染完成之后,在用前向渲染的方式渲染半透明物体。


5.深度测试在哪个阶段?

在渲染的时候,图形管线会先对每一个位置的像素存储一个深度值,称为深度缓冲,代表了该像素点在 3D 世界中离相机最近物体的深度值。于是在计算每一个物体的像素值的时候,都会将它的深度值和缓冲器当中的深度值进行比较,如果这个深度值小于缓冲器中的深度值,就更新深度缓冲和颜色缓冲的值,否则就丢弃。深度测试发生在片元着色器处理之后, 透明度混合之前。
6.提前深度测试在哪个阶段?

光栅化之后,片元着色器之前进行一次提前深度测试,没有通过测试的片元则不进行之后的片元着色器计算来提高性能。
7.PBR光照模型的原理[2]

(1)基于微平面(Microfacet)的表面模型。任何表面(surface)在微观尺度下都可以描述为由一系列微小的平面(microfacet)组成,并且我们假设这些微平面都是绝对光滑的镜面,能够完美反射光线。 (2)能量守恒。出射光的能量不能超过入射光的能量(自发光除外)。所以光滑的表面反射光区域小强度高,粗糙的表面反射光区域大(分散)但更朦胧。为了能量守恒,我们需要将光区分为 diffuse 和 specular,分开处理,因为这两者是互斥的,能量来源都是入射光。 (3)应用基于物理的 BRDF。基于表面材质属性来对入射辐射率进行缩放或者加权。依据微平面理论来近似求得材质的反射与折射属性。
8.PBR光照模型为什么渲染的比较真实

PBR(Physically Based Shading)是基于与现实世界的物理原理所创建的一种渲染技术,相比于传统的基于经验的模型(Phong Blin-Phong等)更具有物理准确性。
9.有哪几种抗锯齿的方式

SSAA(super sample anti-aliasing,超采样抗锯齿)是一种较为原始的、通过在一个像素内采样多个点来提升采样频率(并非直接提升硬件分辨率)的抗锯齿方法。
MSAA(Multisampling Antialising,多采样抗锯齿)是 SSAA 的改良,针对 SSAA 中存在的不必要计算进行了优化。SSAA 对于每个子采样点都要进行着色,而 MSAA只需对每个像素进行着色,只执行一遍 pixel shader ,而对于那些子采样点只计算覆盖信息(coverage)和遮挡信息(occlusion),以两者的结果来决定是否将该采样点的颜色值贡献给整个像素点。
FXAA(Fast Approximate Anti-Aliasing,快速近似抗锯齿)被用作最终渲染过程,该过程仅将带有锯齿的渲染图像作为输入,并输出抗锯齿版本。主要思想是检测渲染图像中的边缘并将其平滑。此方法快速有效,但会使纹理细节模糊。
TAA(Temporal Antialiasing,帧间抗锯齿)是通过加权混合相邻多帧达到抗锯齿效果,从理论上解释就是将计算量分摊(Amortized)至多帧的超采样。
10.模型绕 z 轴旋转时的变换矩阵[3]



11.透明材质的渲染

绘制透明物体时帧缓存就不能直接替换更新,而是要做透明度混合(Blend),用帧缓存中已有的颜色和透明片元的透明色混合出一个新的颜色。
12. MSAA算法的原理

MSAA主要是对 Z-Buffer 和 Stencil Buffer(模板缓冲)进行SSAA处理,其原理是通过提取像素界面周围的颜色信息,通过混合颜色信息来消除高对比界面所产生的锯齿。只对多边形的边缘进行抗锯齿处理。
13.如何判断像素点在三角形内部



方法一:思路是判断像素点 P 是否在三角形三条边的同一侧,具体方法是顺时针(或逆时针)用三角形的三条边作为向量分别与顶点与 P 构成的向量作叉乘,如 ABxAP,BCxBP,CAxCP,判断三个叉乘是否同号,同号则说明点 P 在三角形内部。
方法二:思路是计算三角形关于点 P 的重心坐标 (\alpha,\beta,\gamma) ,如果重心坐标都大于零,则表明点 P 在三角形内部。
14.光线追踪的流程
参考


  • ^https://zhuanlan.zhihu.com/p/386420933
  • ^https://www.cnblogs.com/sifenkesi/p/11924734.html
  • ^https://blog.csdn.net/why18767183086/article/details/107237618
回复

举报 使用道具

2

主题

5

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2023-3-25 17:38:55 | 显示全部楼层
Games101前几次课的内容吧。
回复

举报 使用道具

您需要登录后才可以回帖 登录 | 立即注册
快速回复 返回顶部 返回列表