赞
踩
生命不息,战斗不止............
155 人赞同了该文章
搜集了一些面试的时候问的图形学相关的题目,并且整理了下来,后续会不断的完善。
1、三大主流的Shader Language?
HLSL、GLSL、CG
2.OpenGL的渲染流程?
(不同的管线流程应该是有去别的,大体上是这样的)
读取顶点数据→执行顶点着色器→组装图元→光栅化图元→执行片段着色器→写入帧缓冲区→显示在屏幕上。
3、Unity Shader的详细流程:
4、前向渲染、延迟渲染?
a、延迟渲染
优点:
(1)影响一个物体的光源数量是没有限制的
(2)每一个光源都是逐像素级别的效果,并且可以正确的计算法线贴图以及阴影
(3)高保真,可以还原每一盏灯的效果
缺点:
(1)不支持半透明效果
(2)不支持抗锯齿
(3)内存开销较大
(4)不支持正交相机
b、前向渲染
5、光照模型:
a、Lambert(漫反射)
Diffuse = Ambient + Kd * LightColor * max(0,dot(N,L))
b、Phong(高光)
Specular = SpecularColor * Ks * pow(max(0,dot(R,V)), Shininess)
c、Blinn-Phong(高光)
Specular = SpecularColor * Ks * pow(max(0,dot(N,H)), Shininess)
6、你一般使用什么Shader Language?
如果你面试的是Unity岗位,还是以CG语言为主
7、OpenGL中要用到哪几种Buffer?
8、Unity Shader 中的常用RenderType?
9、请介绍你所有知道的纹理Alpha混合方式,原理(公式).
假设一种不透明东西的颜色是A,另一种透明的东西的颜色是B,那么透过B去看A,看上去的颜色C就是B和A的混合颜色,可以用这个式子来近似。
设B物体的透明度为alpha(取值为0-1,0为完全透明,1为完全不透明)
R(C)=alpha*R(B)+(1-alpha)*R(A)
G(C)=alpha*G(B)+(1-alpha)*G(A)
B(C)=alpha*B(B)+(1-alpha)*B(A)
R(x)、G(x)、B(x)分别指颜色x的RGB分量。看起来这个东西这么简单,可是用它实现的效果绝对不简单,应用alpha混合技术,可以实现出最眩目的火光、烟雾、阴影、动态光源等等一切你可以想象的出来的半透明效果。
10、什么是model,view,project矩阵?
世界矩阵(World Matrix)、视图矩阵(View Matrix)以及投影矩阵(Projection Matirx);
11、阴影
ShadowMapping
unity引擎里面比较常用的实时阴影的生成方法。
ShadowMap是动态生成的阴影纹理图,在需要时对其进行采样来获取阴影的一种技术手段。
a、接收其他物体的阴影:在shader中对阴影映射纹理进行采样,把采样结果和最后的光照结果相乘产生阴影效果
b、添加"LightMode" = "ShadowCaster"的Pass.
向其他物体投射阴影: 把该物体加入到光源的阴影映射纹理计算中,从而让其他物体在对阴影映射纹理采样时可以得到该物体的相关信息。
12、渲染排序
Tags {"Queue"="XXXXX"}
按照渲染顺序,从先到后进行排序,队列数越小的,越先渲染,队列数越大的,越后渲染。
渲染队列数<=2500的对象都被认为是不透明的物体(从前往后渲染),
>2500的被认为是半透明物体(从后往前渲染)。
"Queue" = "Background"
值为1000,此队列的对象最先进行渲染。
"Queue" = "Geometry"
默认值,值为2000,不透明物体的渲染队列。大多数物体都应该使用该队列进行渲染,也是Unity Shader中默认的渲染队列。"Queue" = "Geometry+1" 可通过在值后加数字的方式来改变队列
"Queue" = "AlphaTest"
值为2450,要么完全透明要么完全不透明,多用于利用贴图来实现边缘透明的效果,也就是美术常说的透贴。
"Queue" = "Transparent"
值为3000,半透物体的渲染队列。一般是不写深度的物体,Alpha Blend等的在该队列渲染,渲染时从后往前进行渲染。
"Queue" = "Overlay"
值为4000,最后被渲染的物体的队列,一般是覆盖效果,比如镜头光晕,屏幕贴片之类的。
Blend Types 常用的几种混合类型:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。