- 博客(9)
- 收藏
- 关注
原创 URP管线下使用Dither做像素化风格
什么是Dither基本概念v. 犹豫不决;对(录音)进行噪声处理;抖色 n. 犹豫不决;紧张,颤抖用有限的颜色来表示出多种色阶变化的技术就叫做Dither上面那句话其实并不严谨,只是在此方便理解,Dither不是新型技术,它在视频,信号处理,音频等领域都有应用图形中的应用基于上述的简单且并不严谨的描述,下图是在一个2x2的像素格中,从左到右依次排列出一个黑白色阶的效果对应黑白色阶没看出来?我们将像素格缩小平铺这下就对味了!现在我们对Dither..
2021-12-13 18:53:37 4457
原创 Flow Map
什么是Flow Map本质是一张记录了2D向量信息的纹理Flow map上的颜色(通常为RG通道)记录该处向量场的方向,让模型上某一点表现出定量流动的特性通过在shader中偏移uv再对纹理进行采样,来模拟流动效果有亿个问题Flow Map不能直接使用,需要将Flow Map上的色值从(0,1)的范围映射到方向向量的范围(-1,1)实现无缝流动前面我们已经把映射后的Flow Map与UV相加进行扰动,并与_Time相乘,但是随着_Time的值越来越大,扰动也会越来越大最终
2021-12-10 20:06:26 2408
原创 【Unity学习笔记】空间变换推导(四)——观察空间
首先,已知点在世界空间下的坐标,如何通过变换矩阵来得到观察空间下的坐标位置?先给出基本公式即观察空间下的坐标位置Pview =世界空间的基向量在观察空间下的变换矩阵[Wview]乘以P在世界空间下的坐标那么这个[Wview]怎样得到?其实可以使用观察空间的基向量在世界空间下的变换矩阵的逆矩阵得到,因为他们是正交矩阵,那么就可以直接引用转置矩阵来计算了下面看看Unity怎么取得变换矩阵[Vworld]z由对目标顶点位置 - 观察空间坐标系位置得到,y轴先假设一个单位坐标,再通...
2021-12-10 20:05:01 2390
原创 基于反射相机的平面反射实现
整体思路此方法并不依赖shader,而是使用MonoBehaviour脚本(挂载到反射平面或者相机上)核心思路:简单粗暴,利用脚本创建一个新的相机,这个相机与主相机参数位置一致,将此相机的图像翻转即可,大体步骤为创建一个相机 对渲染内容进行镜像输出RT 传进Shader中采样处理创建反射相机创建一个GameObject并设置名称和类型,再获取到主相机的组件并复制参数private Camera reflectionCam; void Start(...
2021-12-10 20:04:21 5439 1
原创 【Unity学习笔记】空间变换推导(三)——基本变换之旋转变换
旋转变换稍微有点复杂,略过推导过程还是先看基本公式与缩放平移不同,对于三维空间下的物体,总要围绕其中一个轴来旋转,所以变换的其实是二维坐标,下面是点围绕z轴进行旋转P1x是点P在旋转前的x坐标使用矩阵围绕z轴旋转的二维旋转矩阵可以在shader中使用这个矩阵实现旋转,但还不够,我们还是要用一个4x4矩阵围绕x轴旋转围绕y轴旋转围绕z轴旋转最后,在shader中实现 Varyings vert(Attributes v) ...
2021-09-29 14:47:13 445
原创 【Unity学习笔记】空间变换推导(二)——基本变换之缩放变换
空间变换推导(一)中,推导了对一个三维坐标点的基本变换是做加法,应用在3D图形中引入了齐次坐标进行矩阵与点相乘,那么缩放变换则是对各个分量做乘法,我们先从基础说起Px是P点的坐标值,Sx则是缩放的大小同样我们使用矩阵的方式,也引入齐次坐标来计算,缩放矩阵与旋转矩阵虽然可以直接使用3x3矩阵进行计算,但这里为了统一计算,也跟平移变换一样引入w分量在shader中实现 Varyings vert(Attributes v) { V..
2021-09-29 13:41:04 227
原创 【Unity学习笔记】空间变换推导(一)——基本变换之平移变换
点的平移变换我们知道对一个坐标点进行平移,只需要对其各个分量(x,y,z)做加法即可x,y,z表示偏移值,Px表示原有坐标如果用矩阵的方式,对一个按列排布的三维坐标进行左乘,那么这个变换逆矩阵应该是不对,如果用这个3x3矩阵的话,无论如何我们都得不到与上面P'相同的结果,所以我们引入一个新的分量1,填充到矩阵和坐标点的第四个分量当中去,得到一个4x4的矩阵这样,得到的结果除了多出了一个分量1,其余的结果都正确了我们在shader中实现它 Varyings vert.
2021-09-29 12:24:52 616 1
原创 【Unity学习笔记】GPU实例化
与静态合批动态合批一样,GPU实例化的目的是对于多个网格同一个材质不同属性,尽可能减少Draw Call的次数,减少合批数量进而达到提高性能的目的简单的GPU实例化的案例实现首先创建一个基本的c#脚本主要的代码是在Start中,设定游戏一开始计算一个for循环,当 i 小于我们设定的固定数量后,结束循环,在循环体中加入下面的计算固定写法Instantiate第一个参数是源数据,即我们需要实例化的模型prefabTree第二个参数是position,我们...
2021-09-18 20:19:57 2481
原创 【Unity C#篇学习笔记】运用协程实现简单的被击和中毒效果
首先,协程的准备工作关键的代码段,写在了OnGUI中,在判断按钮的if语句块下if (GUI.Button(new Rect(40, 50, 150, 50), "被击")) { StartCoroutine(WaitBehit()); }然后创建新的结构,包含了协程需要执行的具体内容,固定写法 IEnumerator name()IEnumerator WaitBehit() { // GetCompone
2021-09-15 20:55:03 457
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人