unity 面试题

unity渲染流水线

有人将渲染流水线分为三个阶段(应用阶段,几何阶段,光栅化阶段),这只是概念上的阶段,每个阶段也可以分为几个子流水线系统。

应用阶段得主要任务

1.把数据从硬盘加载到显存中,因为显卡访问显存得速度快,并且有限显卡并不支持访问系统内存,这些存入得数据就是(网格数据和纹理数据),网格数据包括顶点得位置信息,顶点颜色,顶点法向量。当数据存入显存后,硬盘中得数据可以移除了。

2.设置渲染状态,就是定义了场景中得网格是怎样被渲染得,例如,使用哪一个顶点着色器/片元着色器,光照属性或者材质等,如果没有设置渲染状态,那所有的网格都用默认渲染状态。

准备好上述任务之后,cpu发送一个命令告诉GPU:我已经准备好了,开始渲染,这个命令就是DrawCall

3.调用DrawCall,一个drawCall会指向一个需要被渲染得图元列表,且不包含任何得材质信息。

几何阶段(GPU流水线)

1.顶点着色器,准备好的顶点数据会传入顶点着色器,每次传入一个顶点,都会调用一次顶点着色器,顶点之间都是相互独立得,在着色器内,主要执行,顶点得坐标变换,计算顶点颜色等,一般会将计算完得数据传入光栅化阶段(片元着色器),进行插值操作。

2.投影,一般有正交投影和透视投影

4.剪裁,完全在视图外得顶点不会被传入下一个阶段,而是会被剪裁成为新的图元,舍弃外部得顶点,生成新的顶点,传入光栅化阶段。

5.屏幕映射,将顶点坐标信息转化为屏幕坐标系,传入下一阶段。

光栅化阶段(GPU流水线)

1.三角形遍历,根据传入得图元信息,插值遍历获取覆盖得像素信息,每一个像素,和传入得其他图元信息(光照信息,法向量等)和并为一个片元,并传入片元着色器。

2.片元着色器,对上一步进行得插值操作,进行对片元得输出颜色操作。

3.模板测试,首先从模板缓冲区中取出对应得模板值,和参考得模板值进行对比(这个可以自定义比较函数),如果不符合就舍弃。

4.深度测试,将该片元的深度和深度缓冲区中对应得深度值进行对比(该比较过程也是可配置的),如果不符合就舍弃。

5.混合(α测试),将该片元得颜色信息和颜色缓冲区中对应的颜色信息进行混合。

双缓冲策略

将正在进行光栅化的图像放在后置缓冲区中,光栅化结束后,与前置缓冲区(屏幕上映射的图像)进行替换,保证看到的图像是连续的。

热更新完整流程

//todo

c#栈和堆得数据存储

AssetBundle资源管理

HTTP协议

请求体格式,请求方式,地址,版本号

image-20220119193425336

 get和post 都可提交内容,get提交内容放在请求头中,明示内容不加密,post提交内容放在请求体中,会进行加密。

image-20220119193456361

返回体信息,会返回状态信息。

http传输过程:

1.找到url地址。

2.建立TCP连接(三次握手)

3.处理http请求。

4.返回html文件,并解析html文件

5.关闭TCP连接(四次握手)

TCP协议

在这里插入图片描述

Mask和canvas优化 

        UGUI自带得遮罩 缺点,会中断合批,因为mask得模板测试会产生一个新的shader,所以一个mask会产生俩个drawCall。所以需要尽量不要使用unity自带得mask,可以使用网上得一些,比如用顶点合并去解决遮罩问题。

        canvas,如果你有一个特别复杂得ui,当里面每一个元素修改时,canvas都会重新刷新一遍,其实有很多元素ui都不需要刷新,这里面的原理是,当有一个ui移动或者修改时,这个ui上级得canvas会被标记为脏,引擎就会刷新这个canvas。

        1.将canvas拆分,可以按照模块功能去拆分,拆分成大的几块,每个模块都挂在canvas组件

        2.再将canvas细分,按照静态和动态得去拆分,静态得一个canvas组件,动态得一个canvas组件(动态得可细分,经常修改的 和不怎么经常修改的。)

这样修改结束后,就不会整个刷新,只是局部刷新。

unity数据加密方式

消息发送机制

工厂设计模式

协程和线程

先讲讲线程,多线程得原理是抢占式得,抢占式就是比如有俩个线程,这个时候执行这个线程得这几帧,下一个时候就执行那个线程得这几帧,并不规律,而且由系统调度,自己并不能控制什么时候调用,其实并不是真正得并行执行,而是一种交替式得运行方式。

协程得执行方式全部由程序员自己控制,挂起式得执行方式,当协程执行了第一次,会将这个状态进行保存,当程序员再下一次 ,又执行了这个协程,将上次得状态取出,进行下一次操作。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bubblingo0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值