Potro’s Blog

Posts

GPU Instancing For Skeletal Animation

  • 1 min read

一.需要的前置知识

1.什么是GPU Instancing?

这里简单介绍一下,Unity官方文档链接:GPU Instancing GPU Instancing是一种优化方法,用一个DrawCall去渲染多个物体——他们使用相同的材质,他们的Mesh拷贝自同一份Mesh资源。每一份Mesh的拷贝称为Instancing.这种优化方法,经常用于渲染场景重复多次出现的事物(比如植被,树木等)。
GPU Instancing渲染的每个Instancing可以拥有不同的材质属性比如Color,Scale等。(通过MaterialPropertyBlock)

Read More

如何制作LUT贴图,并应用到unity中?

  • ~1 min read

我们介绍LUT贴图前,先从这几个方面认识LUT贴图。

  • 什么是LUT贴图?
    • LUT是LookUpTable的缩写,意思是查找表,它是一张3D贴图。
  • 使用原理时什么?
    • 它的使用原理是当我们输入一个像素的颜色值(R,G,B),我们把颜色值(R,G,B)作为一个3D坐标,去采样这张贴图,并的出一个新的颜色值。
  • 它在游戏中的应用场景是什么?
    • 当我们截取了游戏里的一帧,在PS里面调整颜色(色调整体调暖,亮度更亮,blabla等等),我们想储存PS中的调整,并作用于游戏画面的每一帧,我们就可以使用LUT贴图。(LUT是影视后期的常用技术)

如何制作LUT贴图?

  1. 首选截取一张你想要校色的高分辨率图像
    image01
  2. 在Photoshop中打开截取的图片,并创建调整图层,并从中调整参数(对比度,亮度,饱和度,白平衡等) image02
  3. 在PhotoShop中打开未经处理的LUT图片(Neutral Color LUT),将刚才的调整图层拖拽到未经处理的LUT图片(Neutral Color LUT)上,由此得到一张经过调整的LUT图片,保存它,制作LUT贴图完成? image03 Note :
    • LUT图片的尺寸根据项目设置而定
    • 未经处理的LUT贴图哪里来的?
      欸~我也是网上找的,应该还是蛮容易找的,这里我贴出其中两个尺寸好了
      1024x32 image04 256x16
      image05

怎么在Unity中使用?

将LUT贴图导入项目,TextureType为Default,TextureShap为2D,并将sRGB关掉。
默认渲染管线:

  1. 导入PostProcessing 插件包。
  2. 创建PostProcessingProfile,并添加ColorGrading效果,在LDR模式下打开LUT功能并选择LUT贴图。

URP渲染管线

  1. 创建VolumeProfile,并添加ColorLUT效果,选择LUT贴图(前提和项目设置的LUT贴图尺寸一样)

参考资料:
Using Lookup Tables (LUTs) for Color Grading

CatLikeCoding/Tutorials/CustomSRP/ColorGrading

Read More

002-Bumpiness(凹凸)——CatLikeCoding学习笔记

  • 2 min read

002-Bumpiness(凹凸)——CatLikeCoding学习笔记

HeightMaps(高度图)

将高度信息储存在一张贴图中,我们就可以逐片元得去获得法线信息,而不是逐顶点了(太多顶点造成太多得消耗)。

Read More

Timeline自定义轨道实现

  • 1 min read

Timeline自定义轨道实现

这篇文章将介绍如果实现一个自定义Timeline轨道。
page01
如上图所示,如果我们要实现自定义的Timeline轨道至少要创建4个脚本——CutomTrack,CustomClip,CustomMixer和CustomPlayableBehaviour。
(Custom代表你们想实现的Timeline的名字,比如要控制灯光,可以叫LightControllerTrack等等)接下来,我会分别介绍简单的代码和文字来介绍这四个脚本的作用。

Read More

对象池(Object Pool)

  • 1 min read

对象池是游戏编程中非常常用的优化策略以及设计模式。虽然非常简单,但是太常用了,所以我觉得有必要写一篇文章来巩固自己这方面的知识点,也又必要写一个对象池来作为自己放在自己的工具集中。

用途

游戏中,我们常常会遇到频繁得创建和销毁大量相同对象的场景。如果我们不做任何的特殊处理,这种场景会出现两个性能问题——大量的内存碎片以及频繁的分配内存空间。而对象池能供完美得解决这两个问题。

原理

当创建对象时,对象池将对象放入池管理的某种内存连续的数据结构中(数组或者栈等)。当不需要对象时,对象池并不销毁对象,而是将对象回收到池中,下次需要的时候再次从池中拿出来。
因为,对象储存在内存连续的数据结构中,所以解决了内存碎片的问题。
因为,对象每次用完以后就放回池中循环利用而不是再次创建和销毁,这样就解决了频繁的内存分配和销毁的问题。

Read More

我的第一篇博客

  • ~1 min read

这是我的第一篇博客。模板是我在github上从mmistakes的仓库fork过来的。
其实之前就一直就想写的,但是心里一直有几个顾虑。首先,就是觉得自己的知识都很基础,就算写了就算是学习笔记,是不值得拿来发博客的。其次,网上已经有很多写的更好更有趣的文章,书籍或者学习资料了,感觉自己写的东西就更没有写的价值了。
这次为什么突然想继续把博客搞起来呢?主要是因为一次糟糕的面试经历……最近得到一次机会可以去之前一直想进的公司面试,但是发挥实在是很糟糕,一部分是自己根本没准备好……(前一天笔试感觉发挥得不错,有点疏忽了)另一部分确实自己的知识梳理很差,以及很多知识因为之前学了,所以就在简历里写了。但是工作中一直不用,慢慢印象就淡了……别人问起来结果回答不上。
于是,我就想好好把博客搞起来。以后在简历里就可以贴上这个博客地址。另一个就是把这个当作知识输出,更容易得学习知识,梳理知识点。再一个,也不只是发技术类文章,也会发一些生活上的东西。
总之,希望可以坚持下来吧。

Read More