前言
- 关于Unity面试题相关的所有知识点:🐱🏍2023年Unity面试题大全,共十万字面试题总结【收藏一篇足够面试,持续更新】
- 为了方便大家可以重点复习某个模块,所以将各方面的知识点进行了拆分并更新整理了新的内容,并对之前的版本中有些模糊的地方进行了纠正。
- 进阶篇中有些题目在基础篇已经有了,这里划分模块时有些会再加一遍用于加深印象学习。
- 所以本篇文章就来整理一下Unity渲染&Shader相关,说不准就会面试的时候就会遇到!
【Unity面试篇】Unity 面试题总结甄选 |Unity渲染&Shader相关 | ❤️持续更新❤️
- 前言
- 💖渲染 & Shader
- 1. 什么是LightMap?
- 2. MipMap是什么,作用?
- 3. 请问alpha test在何时使用?能达到什么效果?
- 4. 一个Terrain,分别贴3张,4张,5张地表贴图,渲染速度有什么区别?为什么?
- 5. 实时点光源的优缺点是什么?
- 6. 简述水面倒影的渲染原理?
- 7. MeshRender中material和 sharedmaterial的区别?
- 8. 什么是渲染管道?
- 9. 如何在Unity3D中查看场景的面数,顶点数和DrawCall数?如何降低DrawCall数?
- 10. 写出光照计算中的diffuse的计算公式
- 11. 两种阴影判断的方法、工作原理。
- 12. 有A和B两组物体,有什么办法能够保证A组物体永远比B组物体先渲染?
- 13. Unity的Shader中,Blend SrcAlpha OneMinusSrcAlpha这句话是什么意思?
- 14. Vertex Shader是什么,怎么计算?
- 15. Unity3D Shader分哪⼏种,有什么区别?
- 16. Unity提供了几种光源,分别是什么?
- 17. 分别解释顶点着色器和像素着色器是什么
- 18. 简述SkinnedMesh的实现原理
- 19. MeshRender中material和sharedmaterial的区别?
- 👥总结
💖渲染 & Shader
1. 什么是LightMap?
LightMap:就是指在三维软件⾥实现打好光,然后渲染把场景各表⾯的光照输出到贴图上,最后⼜通过引擎贴到场景上,这样就使物体有了光照的感觉。
2. MipMap是什么,作用?
MipMapping:在三维计算机图形的贴图渲染中有常⽤的技术,为加快渲染进度和减少图像锯⻮,贴图被处理成由⼀系列被预先计算和优化过的图⽚组成的⽂件,这样的贴图被称为MipMap。
- 优点:优化显存带宽,用来减少渲染。因为可以根据距离摄像机远近,选择适合的贴图来渲染。所以UI不适用MipMap。
- 缺点:运行时占用更多内存,且增加包的容量。
【使用 Mip maps 需要使用 33%以上的内存,但不使用它会导致巨大的性能损失】
3. 请问alpha test在何时使用?能达到什么效果?
Alpha Test,中文就是透明度测试。
简而言之就是V&F shader中最后fragment函数输出的该点颜色值(即上一讲frag的输出half4)的alpha值与固定值进行比较。Alpha Test语句通常于Pass{}中的起始位置。Alpha Test产生的效果也很极端,要么完全透明,即看不到,要么完全不透明。
4. 一个Terrain,分别贴3张,4张,5张地表贴图,渲染速度有什么区别?为什么?
没有区别,因为不管几张贴图只渲染一次。
5. 实时点光源的优缺点是什么?
可以有cookies – 带有 alpha通道的立方图(Cubemap )纹理。点光源是最耗费资源的。
6. 简述水面倒影的渲染原理?
原理就是对水面的贴图纹理进行扰动,以产生波光玲玲的效果。用shader可以通过GPU在像素级别作扰动,效果细腻,需要的顶点少,速度快
7. MeshRender中material和 sharedmaterial的区别?
修改sharedMaterial将改变所有物体使用这个材质 的外观,并且也改变储存在工程里的材质设置。
不推荐修改由sharedMaterial返回的材质。如果你 想修改渲染器的材质,使用material替代。
8. 什么是渲染管道?
是指在显示器上为了显示出图像⽽经过的⼀系列必要 操作。 渲染管道中的很多步骤,都要将⼏何物体从⼀个坐标系中变换到另⼀个坐标系中去。
主要步骤有: 本地坐标->视图坐标->背⾯裁剪->光照->裁剪->投影-> 视图变换->光栅化。
GPU工作流程:顶点处理、光栅化、纹理贴图、像素处理
- 顶点处理:这阶段GPU读取描述3D图形外观的顶点数 据并根据顶点数据确定3D图形的形状及位置关系,建 ⽴起3D图形的⻣架。
- 光栅化:把⼀个⽮ᰁ图形转换为 ⼀系列像素点的过程就称为光栅化
- 纹理贴图:就是将多边形的表⾯贴 上相应的图⽚,从⽽⽣成“真实”的图形。
- 像素处理:这阶段(在对每个像素进⾏光栅化处理期 间)GPU完成对像素的计算和处理,从⽽确定每个像 素的最终属性。
- 最终输出:由ROP(光栅化引擎)最终完成像素的输 出,1帧渲染完毕后,被送到显存帧缓冲区。
总结:GPU的⼯作通俗的来说就是完成3D图形的⽣成,将图形映射到相应的像素点上,对每个像素进⾏ 计算确定最终颜⾊并完成输出。
9. 如何在Unity3D中查看场景的面数,顶点数和DrawCall数?如何降低DrawCall数?
在Game视图右上⻆点击Stats。降低Draw Call 的技术是Draw Call Batching
10. 写出光照计算中的diffuse的计算公式
diffuse = Kd x colorLight x max(N*L,0);
Kd 漫反射系数、colorLight 光的颜⾊、N 单位法线向量、L 由点指向光源的单位向量、其中N与L点乘,如果结果⼩于等于0,则漫反射为0。
11. 两种阴影判断的方法、工作原理。
本影和半影:
本影:景物表⾯上那些没有被光源直接照射的区域
(全⿊的轮廓分明的区域)。
半影:景物表⾯上那些被某些特定光源直接照射但并⾮被所有特定光源直接照射的区域(半明半暗区域)
⼯作原理:从光源处向物体的所有可⻅⾯投射光线,将这些⾯投影到场景中得到投影⾯,再将这些投影⾯与场景中的其他平⾯求交得出阴影多边形,保存这些阴影多边形信息,然后再按视点位置对场景进⾏相应处理得到所要求的视图(利⽤空间换时间,每次只需依据视点位置进⾏⼀次阴影计算即可,省去了⼀次消隐过程)
12. 有A和B两组物体,有什么办法能够保证A组物体永远比B组物体先渲染?
把A组物体的渲染对列⼤于B物体的渲染队列。
13. Unity的Shader中,Blend SrcAlpha OneMinusSrcAlpha这句话是什么意思?
作用就是Alpha混合。公式:最终颜色 = 源颜色源透明值 + 目标颜色(1 - 源透明值)
14. Vertex Shader是什么,怎么计算?
顶点着⾊器是⼀段执⾏在GPU上的程序,⽤来取代fixed pipeline中的transformation和lighting,Vertex Shader主要操作顶点。
Vertex Shader对输⼊顶点完成了从local space到homogeneous space(⻬次空间)的变换过程,homogeneous space即projection space的下⼀个space。
在这其间共有world transformation, view transformation和projection transformation及lighting⼏个过程
15. Unity3D Shader分哪⼏种,有什么区别?
表⾯着⾊器 的抽象层次⽐较⾼,它可以轻松地以简洁⽅式实现复杂着⾊。表⾯着⾊器可同时在前向渲染及延迟渲染模式下正常⼯作。
顶点⽚段着⾊器可以⾮常灵活地实现需要的效果,但是需要编写更多的代码,并且很难与Unity的渲染管线完美集成。
固定功能管线着⾊器可以作为前两种着⾊器的备⽤选择,当硬件⽆法运⾏那些酷炫Shader的时,还可以通过固定功能管线着⾊器来绘制出⼀些基本的内容。
16. Unity提供了几种光源,分别是什么?
四种。
- 平行光:Directional Light
- 点光源:Point Light
- 聚光灯:Spot Light
- 区域光源:Area Light
17. 分别解释顶点着色器和像素着色器是什么
顶点着⾊器是⼀段执⾏在GPU上的程序,⽤来取代 fixed pipeline中的transformation和lighting,Vertex Shader主要操作顶点。‘’
像素着色器实际上就是对每一个像素进行光栅化的处理期间,在GPU上运算的一段程序。
不同与顶点着色器,像素着色器不会以软件的形式来模拟像素着色器。
像素着色器实质上是取代了固定功能流水线中多重纹理的环节,而且赋予了我们访问单个像素以及访问每一个像素纹理坐标的能力
18. 简述SkinnedMesh的实现原理
根据骨骼,动态整体实现表层Mesh,相对普通mesh由不同面片堆砌,根据骨骼结构,对顶点的变换计算出不同的蒙皮,最终进行模型的渲染
19. MeshRender中material和sharedmaterial的区别?
答:修改sharedMaterial将改变所有物体使用这个材质的外观,并且也改变储存在工程里的材质设置。 不推荐修改由sharedMaterial返回的材质。如果你想修改渲染器的材质,使用material替代。
👥总结
- 全网最全的
Unity渲染&Shader相关
面试题都在这里了,希望本篇文章能够让你在面试关卡如鱼得水得到自己想要的工作。 - 看完觉得有用别忘了点赞收藏哦,如果觉得哪个方面的内容不够丰富欢迎在评论区指出!
- 如果你的Unity基础知识还不够熟练,也欢迎来 『Unity精品学习专栏⭐️』 和『Unity 实战100例 教程⭐️』继续学习哦!
- 如果你还有更好的面试题,欢迎在评论区提出,会整理到文章中去哦!!!
资料白嫖,技术互助
🎬 博客主页:https://xiaoy.blog.csdn.net
🎥 本文由 呆呆敲代码的小Y 原创 🙉
🎄 学习专栏推荐:Unity系统学习专栏
🌲 游戏制作专栏推荐:游戏制作
🌲Unity实战100例专栏推荐:Unity 实战100例 教程
🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📆 未来很长,值得我们全力奔赴更美好的生活✨
------------------❤️分割线❤️-------------------------
学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
🧡 Unity系统学习专栏 🧡 | 入门级 | 本专栏从Unity入门开始学习,快速达到Unity的入门水平 |
💛 Unity实战类项目 💛 | 进阶级 | 计划制作Unity的 100个实战案例!助你进入Unity世界,争取做最全的Unity原创博客大全。 |
❤️ 游戏制作专栏 ❤️ | 难度偏高 | 分享学习一些Unity成品的游戏Demo和其他语言的小游戏! |
💚 游戏爱好者万人社区💚 | 互助/吹水 | 数万人游戏爱好者社区,聊天互助,白嫖奖品 |
💙 Unity100个实用技能💙 | Unity查漏补缺 | 针对一些Unity中经常用到的一些小知识和技能进行学习介绍,核心目的就是让我们能够快速学习Unity的知识以达到查漏补缺 |