Posts
GPU Instancing For Skeletal Animation
一.需要的前置知识
1.什么是GPU Instancing?
这里简单介绍一下,Unity官方文档链接:GPU Instancing
GPU Instancing是一种优化方法,用一个DrawCall去渲染多个物体——他们使用相同的材质,他们的Mesh拷贝自同一份Mesh资源。每一份Mesh的拷贝称为Instancing.这种优化方法,经常用于渲染场景重复多次出现的事物(比如植被,树木等)。
GPU Instancing渲染的每个Instancing可以拥有不同的材质属性比如Color,Scale等。(通过MaterialPropertyBlock)
如何制作LUT贴图,并应用到unity中?
我们介绍LUT贴图前,先从这几个方面认识LUT贴图。
- 什么是LUT贴图?
- LUT是LookUpTable的缩写,意思是查找表,它是一张3D贴图。
- 使用原理时什么?
- 它的使用原理是当我们输入一个像素的颜色值(R,G,B),我们把颜色值(R,G,B)作为一个3D坐标,去采样这张贴图,并的出一个新的颜色值。
- 它在游戏中的应用场景是什么?
- 当我们截取了游戏里的一帧,在PS里面调整颜色(色调整体调暖,亮度更亮,blabla等等),我们想储存PS中的调整,并作用于游戏画面的每一帧,我们就可以使用LUT贴图。(LUT是影视后期的常用技术)
如何制作LUT贴图?
- 首选截取一张你想要校色的高分辨率图像
- 在Photoshop中打开截取的图片,并创建调整图层,并从中调整参数(对比度,亮度,饱和度,白平衡等)
- 在PhotoShop中打开未经处理的LUT图片(Neutral Color LUT),将刚才的调整图层拖拽到未经处理的LUT图片(Neutral Color LUT)上,由此得到一张经过调整的LUT图片,保存它,制作LUT贴图完成?
Note :
- LUT图片的尺寸根据项目设置而定
- 未经处理的LUT贴图哪里来的?
欸~我也是网上找的,应该还是蛮容易找的,这里我贴出其中两个尺寸好了
1024x32 256x16
怎么在Unity中使用?
将LUT贴图导入项目,TextureType为Default,TextureShap为2D,并将sRGB关掉。
默认渲染管线:
- 导入PostProcessing 插件包。
- 创建PostProcessingProfile,并添加ColorGrading效果,在LDR模式下打开LUT功能并选择LUT贴图。
URP渲染管线
- 创建VolumeProfile,并添加ColorLUT效果,选择LUT贴图(前提和项目设置的LUT贴图尺寸一样)
参考资料:
Using Lookup Tables (LUTs) for Color Grading
003-Shadow(阴影)——CatLikeCoding学习笔记
002-Bumpiness(凹凸)——CatLikeCoding学习笔记
002-Bumpiness(凹凸)——CatLikeCoding学习笔记
HeightMaps(高度图)
将高度信息储存在一张贴图中,我们就可以逐片元得去获得法线信息,而不是逐顶点了(太多顶点造成太多得消耗)。
Timeline自定义轨道实现
Timeline自定义轨道实现
这篇文章将介绍如果实现一个自定义Timeline轨道。
如上图所示,如果我们要实现自定义的Timeline轨道至少要创建4个脚本——CutomTrack,CustomClip,CustomMixer和CustomPlayableBehaviour。
(Custom代表你们想实现的Timeline的名字,比如要控制灯光,可以叫LightControllerTrack等等)接下来,我会分别介绍简单的代码和文字来介绍这四个脚本的作用。
对象池(Object Pool)
对象池是游戏编程中非常常用的优化策略以及设计模式。虽然非常简单,但是太常用了,所以我觉得有必要写一篇文章来巩固自己这方面的知识点,也又必要写一个对象池来作为自己放在自己的工具集中。
用途
游戏中,我们常常会遇到频繁得创建和销毁大量相同对象的场景。如果我们不做任何的特殊处理,这种场景会出现两个性能问题——大量的内存碎片以及频繁的分配内存空间。而对象池能供完美得解决这两个问题。
原理
当创建对象时,对象池将对象放入池管理的某种内存连续的数据结构中(数组或者栈等)。当不需要对象时,对象池并不销毁对象,而是将对象回收到池中,下次需要的时候再次从池中拿出来。
因为,对象储存在内存连续的数据结构中,所以解决了内存碎片的问题。
因为,对象每次用完以后就放回池中循环利用而不是再次创建和销毁,这样就解决了频繁的内存分配和销毁的问题。
有限状态机(finite-state machine)(二)
上一篇简单实现了一个状态机,这次我们实现一个更完整,拓展性更高的
我的第一篇博客
这是我的第一篇博客。模板是我在github上从mmistakes的仓库fork过来的。
其实之前就一直就想写的,但是心里一直有几个顾虑。首先,就是觉得自己的知识都很基础,就算写了就算是学习笔记,是不值得拿来发博客的。其次,网上已经有很多写的更好更有趣的文章,书籍或者学习资料了,感觉自己写的东西就更没有写的价值了。
这次为什么突然想继续把博客搞起来呢?主要是因为一次糟糕的面试经历……最近得到一次机会可以去之前一直想进的公司面试,但是发挥实在是很糟糕,一部分是自己根本没准备好……(前一天笔试感觉发挥得不错,有点疏忽了)另一部分确实自己的知识梳理很差,以及很多知识因为之前学了,所以就在简历里写了。但是工作中一直不用,慢慢印象就淡了……别人问起来结果回答不上。
于是,我就想好好把博客搞起来。以后在简历里就可以贴上这个博客地址。另一个就是把这个当作知识输出,更容易得学习知识,梳理知识点。再一个,也不只是发技术类文章,也会发一些生活上的东西。
总之,希望可以坚持下来吧。
有限状态机(finite-state machine) (一)
有限状态机是我们游戏程序中非常常用的一种设计模式。不止游戏,在AI和编译器程序方面很出名。