26. 如何实现战争迷雾
后续Unity实现后分享
27. Unity优化手段,Draw call ( cpu gpu)
概念:Draw call就是一个命令,它的发起方是CPU,接收方是GPU。这个命令仅仅会指向一个需要被渲染的图元列表,而不会再包含任何材质信息。当给定一个Draw Call时,GPU会根据渲染状态和所有输入的顶点数据开始进行计算。CPU和GPU并行工作,它们之间通过命令缓冲区连接,CPU向其中发送渲染命令,GPU接收并执行对应的渲染命令。
如果Draw Call的数量太多,CPU就会把大量时间花费在提交Draw Call 上,造成CPU的过载,会影响帧率。
哪些手段可以减少Draw call次数:
1)Solid Color模式能满足需求的时候使用用Solid Color模式
2)尽量减少使用多个Canvas
3)尽量把同类型组件放在一起(因为如果一个Text,一个Image这样混着来,每个Text和Image都会产生Drawcall)
4)尽量使用图集,把多个小图片合在一起(如果每个Image都显示不同图片,那么每个Image都会产生1个Draw call)
5)减少实时光照的使用,可以烘焙成光照贴图去代替实时光
28. Pbr最重要的参数,几个方程
反射率方程
Lo(p,wo)=∫Ω(kdcπ+ksDGF4(wo⋅n)(wi⋅n))Li(p,wi)(wi⋅n)dwi
具体内容太过复杂,具体转载见每日5题 06补充
29. 如何搭建一个pbr工作流
PBR的工作流程主要分为两种,一种是基于金属的工作流 (Metal-Roughness),一种是基于镜面反射的工作流 (Specular-Glossiness)。Unity支持两种工作流,而UE4则只支持metallic工作流。
流程大概:基础模型->高模制作->拓扑->展UV->烘焙贴图->SP贴图制作->导入引擎
笔者曾经使用过PBR工作流程,对应软件MAYA,Z-brush,Substance Painter,Unity(UE)
30. Topk问题以及变种,各种解法
topK问题是经典的算法问题,其大意是从一个序列中找出最小(大)的k个数,面对这个问题最简单的方法当然是先排序后取前k个数,但这样有些浪费时间,比较经典的方法是借助快排和堆排的思想。
参考题目:
具体解法可以有暴力,快排,冒泡排序,归并排序深度优先搜索,分治等等
这里分享JAVA冒泡排序:
class Solution {
public int findKthLargest(int[] nums, int k) {
for(int i = 0;i < k;i++){
int max = i;
for(int j = i+1;j < nums.length;j++)
if(nums[j] > nums[max])
max = j;
if(max!= i){
int temp = nums[i];
nums[i] = nums[max];
nums[max] = temp;
}
}
return nums[k-1];
}
}
更多解法不妨去力扣题解看看