自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

博客标题

博客描述

  • 博客(28)
  • 收藏
  • 关注

原创 UE Shader 从材质编辑器到 HLSL

文章是之前写在Notion上的,来回转换太麻烦,所以直接链接到Notion原文。不是转载,单纯的懒。

2024-06-17 10:02:56 178

原创 UE Parallel Rendering 简介

pvs=4。

2024-06-13 09:07:27 142

原创 基于Unity默认烘焙系统产出Ambient Occlusion, Sky Occlusion等数据

使用Unity默认烘焙系统,产出Ambient Occlusion,Sky Occlusion 及其他贴图,用于间接光着色计算。

2022-09-30 11:37:16 1953

原创 CMYK颜色模式

概念CMYK是一种颜色模式,多用于印刷行业,其三原色是青色(C), 洋红色(M), 黄色(Y), 与RGB颜色模式一样,可以通过调整不同比例的CMY分量混合出其他色彩。使用[0, 1] 范围表示如下:Cyan(青色): (0, 1, 1)Magenta(洋红色): (1, 0, 1)Yellow(黄色): (1, 1, 0)Ke.

2022-05-30 14:58:31 7108

原创 URP中增加屏幕空间阴影开关

阴影实现过程在UniversalRenderPipeline中(以下简称URP),默认使用的是屏幕空间阴影(Screen Space Shadow), 通过 ScreenSpaceShadowResolvePass 这个类来实现,如果不想使用该阴影的话,就需要修改URP的代码。首先要明确屏幕空间阴影的实现过程,生成阴影图,_MainLightShadowmapTexture 生...

2020-02-28 17:09:09 3263

原创 实现自定义阴影过程中,方向光的view矩阵的构建方式

概述在实现自定义阴影的过程中需要构建把物体从世界空间转到方向光的投影空间,和常规的M V P 变换思路一样,只不过这里的 V空间 和 P空间 变成了以 方向光为坐标原点的空间,而常规的V P空间是以摄像机为坐标原点。下面主要说明的是 变换到方向光空间的view矩阵,常用的有四种方式。Camera.worldToCameraMatrix 方式实现逻辑如下:建立一个Camera物体,放到...

2019-09-01 12:08:02 868

原创 #if #ifdef #if defined 等几种常用的预处理指令的区别

#if #ifdef #if defined 等几种常用的预处理指令的区别在写shader时经常会出现一些预编译指令比如 #if #ifdef #if defined 等,有的时候会感到困惑,所以决定仔细查一下具体的使用方法,并做一个简单的测试。#define#define 指令用于定义一个宏或者常量#define 有两种常用的格式:#define identifier token...

2019-08-06 15:03:02 5746

原创 Visual Studio 高亮引用颜色设置

在使用VisualStudio的时候我个人的习惯是会把背景底颜色设置为浅绿色,江湖上传说这样会更护眼,but实际情况也并不一定,不过考虑到确实是比默认的白色底色看起来更自然,所以也就把颜色改了。这个操作很常规,就不多赘述了,大致步骤是:工具 -> 选项 -> 字体和颜色,“显示项” 中选择纯文本,即第一个,自定义 "背景项"的颜色,输入自定义的颜色,这里使用常见的 (197, 237...

2019-07-05 12:17:39 14582 3

原创 全屏三角形,HDUtils.DrawFullScreen 方法的理解

概述在HDRP的后处理系统中,具体来说就是 PostProcessSystem 类中,在绘制全屏后效时调用了几次 HDUtils.DrawFullScreen 方法,跳转到定义发现有五个重载的方法,但是最终都是通过调用 commandBuffer.DrawProcedural 方法来实现画三角形的,具体的调用是这样的:commandBuffer.DrawProcedural(Matrix...

2019-05-16 22:07:12 1718 1

原创 贴花的一些细节补充

在研究通过HDRP中自带的Decal Projector Component组件来实现贴花效果的过程中,遇到了一些需要理解的地方,以下列出一些关键步骤来说明贴花过程中的细节问题。DBufferRender 阶段1. 根据渲染管线中贴画的设置决定是否要使用四张RenderTexture作为渲染目标。调用ClearAndSetTargets2. 设置当前渲染目标并clear,使这些...

2019-02-22 13:21:12 806

原创 Unity Shader 中获取屏幕坐标

项目中有时会有一些效果需求,如重建片元在世界空间的坐标或者对屏幕指定区域进行颜色操作等,这时就需要获取到片元对应的屏幕坐标(Screen Space Coordinate)。在Unity中有三种方法可以获取到屏幕坐标。SV_POSITION 语义的xy变量struct v2f{ float4 pos : SV_POSITION; float2 uv : TEXCOORD0; ...

2019-02-02 10:44:26 11708 6

原创 HDRP中获取深度值

在 上一篇 中试图在HDRP中使用自定义的Shader来实现贴花效果,但是在读取深度图来获取深度值时出现了问题,在HDRP中深度图的组织方式发生了改变,变成了多个lod的深度图的图集,像下图这样 。 因此使用原有的 SAMPLE_DEPTH_TEXTURE 方法获取到的深度值变的不正确了。通过在ScriptableRenderPipeline工程的源码中查找加翻阅,发现在 ShaderPass...

2019-01-22 12:27:49 2714 5

原创 HDRP中的贴花效果

上一篇 中介绍了在默认渲染管线中贴花效果的实现原理。原本在默认管线中工作正常的Shader在导入到使用了HDRP的工程中后效果变的很错乱,大概是这样:直观感觉应该是深度值的原因导致重建世界坐标时出现了错误,在用Frame Debug查看具体的渲染过程后发现深度图是这样的:在HDRP中深度图的存储有点类似于一个mipmap的图集,里面存储了不同分辨率的多张深度图,所以使用 SAMPLE_D...

2019-01-18 12:37:42 4564

原创 Unity Decal 贴花效果测试

贴花效果,就和名字的直接意思类似,把一张图贴到另一个物体上显示,经常被用于表现一些重复出现的图案,比如弹孔,涂鸦,污渍等。效果图:常规贴花实现Unity官方提供了一个工程这个工程主要是用来说明CommandBuffer是怎么使用的,其中有贴花的一些展示,主要是用CommandBuffer在Deferred渲染路径下实现贴花效果。使用CommandBuffer是因为需要把BuiltinRend...

2019-01-17 18:40:46 13533 10

原创 自动对比两个svn版本之间excel文件的差异,并导出成html文件

游戏上线以后, 不定期的会发布一些资源的更新, 其中很多是配置表的修改, 修改的内容有多有少, 如果少量的修改还可以手动通过svn show log的方式对比两个版本之间的文件修改的话,那么一次大剂量的更新, 绝对会让从事diff工作的同学烦躁到爆炸, 说来也巧了, 我就是那个diff同学.那么闲言碎语就到此为止,先说一下基本步骤:使用svn diff 命令列出两个版本之间修改过的全部文件...

2019-01-10 12:34:52 3215

原创 Compute Shader 功能测试(二)

在上一篇 中使用ComputeShader进行了向量和矩阵的相乘计算,然后在C#代码中通过ComputeBuffer.GetData方法从GPU中读取计算结果,这个方法是一个同步操作,即调用时会堵塞调用线程,直到GPU返回数据为止,所以在需要读取的数据量很大时会有比较高的耗时,会导致游戏卡顿影响体验。Google了一番法线有异步的方法可以调用,在Unity2018版本以后增加了AsyncGPUR...

2019-01-02 21:16:28 2921

原创 SVN添加忽略文件规则

使用SVN管理Unity工程时一般不需要把Library路径或Temp等路径上传到仓库中,如果每次提交都看到一大堆non-versioned文件会很烦躁,当然可以把Commit窗口左下角的 show unversioned files选项取消掉,但是这样的话一些专门新建的文件也就看不到了,显然不合理。符合逻辑的方式应该是:不需要提交的文件,就不显示在Commit窗口。这样才能做到每次提交只...

2018-12-27 13:21:49 25337 2

原创 Compute Shader 功能测试

Compute Shader 可以在通常的渲染管线之外运行,执行一些大量的通用计算(GPGPU algorithms),因此可以联想到把一些大量相互之间没有关联的计算转移到GPU中进行,以减轻CPU的工作量。Compute Shader 实例#pragma kernel FillWithRedRWTexture2D<float4> res;[numthreads(1,1,1...

2018-12-20 21:02:34 1636

原创 Texture2DArray 功能测试

在使用GPU Instancing时,如果要给每个物体设置不同的贴图,直觉的想法是使用 MaterialPropertyBlock对象设置一个Texture对象数组,类似 GPU Instancing测试 这篇里写给每个物体设置不同颜色的方式(MaterialPropertyBlock.SetVectorArray),如果有一个MaterialPropertyBlock.SetTextureArr...

2018-12-19 18:00:26 6409

原创 GPU Instancing 功能测试

GPU Instancing 用于减少渲染大量相同物体时的DrawCall,同样减少DrawCall的方式有 Dynamic Batching 和 Static Batching,这两种方法都存在一些限制。Dynamic Batching :只能处理小于900个顶点属性的物体,必须使用同一个材质球等Static Batching:内存占用比较大,物体不能移动等Batch数量对比以下两张图是...

2018-12-18 15:30:12 4997 5

原创 VS Code设置自定义快捷键

一直在用VS Code写Shader,安上插件后语法高亮加方法参数提示,可以说非常友好了,但是为了保持和Visual Studio中快捷键的一致,就需要修改VS Code的快捷键,具体来说我需要自定义的两个功能是:关闭其他 和 资源管理器中显示。那么问题来了,我现在需要修改 “关闭其他” 这个功能的快捷键,但是这个功能目前没有快捷键,而且我在 “在此键入搜索按键绑定” 中输入 关闭其他 后并没...

2018-12-17 16:26:52 22131 3

原创 vs code中pylint报错E1101问题的解决

VSCode中默认开启的python语法检查工具是pylint,整体非常好用,但是最近在使用requests库时有一些报错提示,比较苦恼,就是在使用到 requests.codes.ok 时,pylint会提示报错:E1101:Instance of ‘LookupDict’ has no ‘ok’ member经过一番搜索之后发现原因是 requests.codes.ok 是动态被设置的,而...

2018-12-17 15:46:35 2303

原创 Unity Shader实现运动模糊(二) : 物体运动产生模糊

上一篇 关于运动模糊的效果是根据VP矩阵重建世界空间坐标,然后根据上一帧和当前帧的位置差作为速度方向,这种方式需要摄像机有位移才能产生效果,如果摄像机静止不动,那么VP矩阵也就不会有变化,所以上一帧和当前帧在NDC空间的位置也没有变化,即speed==0,也就不会有运动模糊的效果,而想要在摄像机不动而物体移动时产生模糊效果,则需要另一种实现方式,这种方式更简洁直观。大致思路是:C#中记录运动...

2018-12-14 15:00:05 2828 2

原创 修改SVN提交记录中的log message

最近在提交svn有一次log message中打错了两个字,所以想去把那次提交的log message修改下,在工作目录下空白处右键、TortoiseSVN、 show log 选中需要修改的那次提交,右键edit log message,整套操作丝般顺滑,错字也很快改好,点击OK,下面是见证奇迹的时刻:看样子大概是需要管理员创建一个hook程序?Google了一通之后明白了一些事情:每次...

2018-12-13 19:31:52 5831 1

原创 Unity Shader实现运动模糊(一) : 摄像机运动产生模糊

运动模糊是个经常会用到的效果,常见的实现步骤是:对深度纹理进行采样,取得当前片元的深度信息根据深度信息建立当前片元的NDC空间的坐标curNDCPos把curNDCPos乘以当前VP矩阵的逆矩阵(即View*Projection)-1,得到当前片元的世界空间坐标WorldPos把WorldPos乘以上一帧的VP矩阵(即View*Projection),得到上一帧在裁切空间中的位置 la...

2018-12-13 14:34:21 3107 2

原创 CGINCLUDE 关键字的作用

在shader代码里经常会看到有这个关键字:CGINCLUDE,不注意的话很可能会和 CGPROGRAM 搞混淆,虽然这两个关键字都需要 ENDCG 来结束生效范围。在 CGINCLUDE 和 ENDCG 范围内可以插入一些shader代码,比如变量声明,结构体定义,函数实现等,如下:CGINCLUDEsampler2D _MainTex;struct vertex_data{ f...

2018-12-10 19:49:12 1867

原创 Unity Shader 实现磨皮效果

最近在做一些UI使用的shader,大部分是对UV进行一些操作,今天看需求文档时发现美术同学的要求里有一项是类似磨皮的效果,本来我也比较好奇这些美颜效果都是怎么做的,所以就趁此机会实验以下。查了一大堆页面后发现可以实现磨皮效果的算法有很多,常用到的有 双边滤波器、表面模糊方法、选择性模糊方法等。勉强看明白了双边滤波和表面模糊方法的公式,所以以下就使用这两种方法在Unity中实现下磨皮效果。双边滤...

2018-12-06 21:24:30 2892 2

原创 64位PIL的安装

在使用python对图片做一些简单处理的时候,很自然会涉及到使用pil库,but根据pil的官方网站(http://www.pythonware.com/products/pil/)上提供的内容来看,是没有windows 64位可以使用的二进制文件,所以就下载源文件来安装下试试看,解压出来是这个样子:在命令行执行 python setup.py install,执行安装,也可以

2016-02-15 12:31:03 184

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除