自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

加载中...

----------请检查你的网络设置

  • 博客(1259)
  • 资源 (2)
  • 收藏
  • 关注

原创 移动平台实时动态多点光源方案:Cluster Light

对于移动平台 Forward 管线,如何支持场景中大量的实时点光源一直以来都是比较棘手的问题,因此,基于空间划分后分块计算光照的思路就应运而生,其可以在保证效果的同时减少 PixelShader 的计算量,大体思路也很简单

2024-03-29 18:46:14 635

原创 shadertoy 游戏《来自星尘》摇杆复刻

如果不要求质感完全一致的话,shadertoy可以最速复刻,还是挺方便的,整体没啥难度,所以就不上教学了吧,左边效果,右边就是代码了,可以自行参考

2024-03-04 18:38:06 473

原创 一个完备的手游地形实现方案

使用 Unity 自带的 Terrain,但是等美术资产完成后使用工具转为 Mesh直接使用 Mesh,地形直接由美术通过等 DCC 工具或 UE 工具制作(例如 worldmachine)后导入到 Unity自己实现 Terrain 或魔改 Unity Terrain 源码,走 Heightmap 那一套如果只看实现原理,本质上就是①④(Heightmap)和②③(Mesh)两种方案,据目前对多款手游的截帧分析,绝大多数的手游都还是 Mesh下面简要分析一下各方案。

2023-11-20 23:24:17 780

原创 Renderer 使用材质分析:materials、sharedMaterials 及 MaterialPropertyBlock

Unity 开发时,在 C# 中通过 Renderer 取材质操作是非常常见的操作,Renderer 有两种常规获取材质的方式:.sharedMaterials 和 .materials,当然,除了 clone material instance 来做表现差异化,Unity 更希望你用 MaterialPropertyBlock,这个才是做材质表现差异化的正确路子

2023-02-17 01:55:57 3746 3

原创 UnityShader35:光晕光效

光晕(halation)是指在曝光拍摄过程中,强光投射到胶片上时,透过胶片乳剂中在片基表面进行反射,从而致使图像发晕的现象

2023-02-13 21:16:55 2992

原创 FT 在图形渲染中的应用:基于 FFT 的海浪模拟

既然任意连续且收敛的函数都可以分解为无数个不同频率、不同幅值的正、余弦信号,且这个性质可以扩展到二维,那么海浪作为“波”的典型,是否也可以将其拆成任意方向不同频率强度的基波的叠加?当然没有问题

2022-12-12 15:20:02 3000 4

原创 FT 在图像处理中的应用

在此之前,文章都是对 FT 的理论部分的科普推导,距离我们的实际应用还有一定距离

2022-11-24 15:05:34 1611 1

原创 离散傅里叶变换(DFT)

​接上文:傅里叶级数与傅里叶变换(FT)真实世界是连续的,可是计算机永远只能描述离散的点,采集离散的信号

2022-11-21 16:43:26 4093 2

原创 傅里叶级数与傅里叶变换

到底什么是傅里叶变换:它的物理意义是什么,公式又从何而来?

2022-11-17 16:56:07 1995

原创 UnityShader17.1:ESM 阴影技术(上)

这个方法非常好理解,也很朴素:既然采样一个点计算阴影不够,我就把周围的点都给你采样一遍,然后对结果求个平均,不过这有个很严重的问题:多重采样非常影响性能,单次采样的开销取决于 GPU 是否支持 Pre-Fetch Texture 和这个采样是否是 Simple Texturing(不依赖其他采样结果的采样),但无论单次采样效率如何,多重采样在算法层面效率就低下,其总体复杂度是。

2022-10-13 19:44:38 1009

原创 EarlyZ 与 DepthPrePass

TBR 和 TBDR 架构网上的文章实在太多了,并且不同的硬件,内部具体的实现原理都不太一样(例如 Early-DT 的实现技术对于 PowerVR 是 Hidden Surface Removal (HSR),对于 Adreno 是 Low Resolution Z (LRZ)……)更何况细节,虽说这些都不算机密,但是也不是说你想拿到就拿到,除非是像。

2022-09-29 16:56:10 1359 4

原创 投影矩阵、NDC 空间与 Reversed-Z

也就是说,OpenGL 平台的投影矩阵会和其它平台不一样,而几篇经典的文章()都是推的 OpenGL 的投影矩阵:而对应 D3D 等其它平台的投影矩阵为当然投影矩阵还会跟参考坐标系有关系,例如 OpenGL 使用的是右手坐标系,但是在NDC中使用的是左手坐标系,因此构造投影矩阵时,需要将 near 和 far 取负。

2022-09-16 16:06:05 2063

原创 大型项目中 MSAA 的方案参考

关于锯齿的产生原因以及主流抗锯齿技术 MSAA 网上的资料很多,凡是游戏开发也多多少少都有了解,因此这里就不多赘述,有兴趣可以直接参考以下几篇文章:拿随意一个游戏举例,MSAA N samples 效果对照如下: 前面介绍了锯齿的产生原因以及 MSAA 解决方案,这里主要是介绍 MSAA 每一步是在哪个时机,那一块地方做的,简单描述下性能上的问题,并且主要考虑移动平台的 TBRD 架构一样可以先参阅文章:直入主题:MSAA 先在光栅化阶段生成覆盖信息,然后计算像素颜色,根据覆盖信息和深度信息决定是否来写入子

2022-09-07 20:52:05 3946 1

原创 Renderdoc 帧调试器

RenderDoc 使用手册,注意,本文只适用于分析/Debug自己的应用

2022-07-18 11:21:43 2678

原创 Unity USB 连接 Android 真机/模拟器测试

先检查电脑里是否已经安装了 adb 安卓包:打开 Windows PowerShell 命令窗口,输入指令 adb version,如果有出现版本号,就说明没问题否则需要下载 SDK,完毕之后配置下环境变量 准备好 development 安卓包,并通过 SDK 安装:找到你安装包所在位置,PowerShell 命令窗口执行指令 adb install -r "相对路径",如下 然后等待安装成功即可,会出现 Success 提示打开 Unity(最好是空项目)并切换 Android 平台: 然后确保上述设置

2022-06-30 16:24:25 3720

原创 Unity3D Soft Mask 软遮罩插件

和常用的 Mask 和 RectMask2D 组件一样,SoftMask 也可以用来对 Image、RawImage 等图形单元进行遮罩,仅显示部分区域,不过相对于传统的遮罩,SoftMask 的区域便于更加的平滑,也可以理解为是渐进式遮罩,往往可以通过它来实现一些边缘羽化等效果...

2022-06-15 17:52:18 5021

原创 FairyGUI1:FairyGUI 编辑器

FairyGUI 官网:https://www.fairygui.com/官方手册已经很齐全了,但是内容太多刚看容易迷失方向,所以还是可以记录下重点,可以当作是非常简单的概括式教程一、FairyGUI 编辑器入门FairyGUI 编辑器教程:https://www.fairygui.com/docs/editor/component1.1 组件与基本元件组件就是根节点(Panel),元件就是指具体的一个一个 UI 元素,像图片、文字、按钮这些就是最最基础的元件,为了方便编辑,可以..

2021-09-03 18:04:25 1883

原创 有关 Unity UIElements 和 UIToolkit

一、UIElements 简介UnityUIElements:https://blog.unity.com/technology/whats-new-with-uielements-in-2019-1如果写过 Unity 编辑器界面,应该都对 IMGUI 比较熟悉,排版布局类 EditorGUILayout 和 GUILayout 可以说都非常的经典,除此之外,还有 Odin 这类基于 IMGUI 的编辑器拓展的插件,同时也可以帮助开发者进行序列化操作……UIElements 其实也是...

2021-08-26 20:38:26 3957

原创 UnityShader33:GPU 实例化

动态合批、静态合批与 GPU 实例化(GPU Instancing)的本质都是通过减少 CPU 对 GPU 绘制请求(Draw Call)的次数,以达到提高性能的目的对相于合批,GPU 实例化(Instancing)是相对独立的一个功能,之前有一篇 OpenGL 的文档可以参考,这篇主要记录 Unity 下如何去实现 GPU 实例化一、再提 GPU 实例化GPU 实例化只提交一个模型网格,然后绘制多次,每次绘制的网格属性都可以不一样:包括缩放、位置、颜色等等,即材质球虽然相同但属性可以各有各..

2021-07-19 13:08:52 1526 4

原创 UnityGI5:实时 GI 与光探代理体

前置:UnityGI2:Lightmaps一、实时 GI字面意思,实时计算间接光照,设置与代码修改如下:1. LightSetting 里面开启 Realtime Lighting,并将对应的主光源 Mode 设置为 Realtime2. 修改 Shader 代码,和之前 Lightmap 采样一样,不过这次采样 dynLightmap,也就是动态光照贴图:MetaPass 的代码可以参考《UnityGI2:Lightmaps》这一章的第三节struct appdata{..

2021-07-16 11:21:54 590 2

原创 UnityGI4:混合光照

前置:UnityGI2:Lightmaps一、混合模式前面设置了光源的模式为 Baked,这意味着光源产生的直接光和间接光都会被记录在 lightmap 中,如果着色器不从 lightmap 中采样,那么静态物体得到的表现就是完全的黑暗。除此之外模式为 Baked 的光源,运行时无法调整且没有贡献如果修改光源模式为 Mixed,那么在烘焙的时候就会只烘焙间接光,并且在运行时该光源被当作实时光产于计算:当然间接光在运行时是不会发生变化的,所以光源在运行的时候也尽量不要过度调整它的位置和属性..

2021-07-15 10:18:02 628

原创 Spine 动画工具

一、文件结构Spine 导出的资源文件如下:.atlas:图集数据文件,内部存储了每张纹理的数据信息 .png:图集资源 .skel / .json 二进制文件:骨骼信息图集可以用纹理解包器解包,需要注意的是 .atlas 同级目录下必须要有对应的 .png 图片,可以打开 .atlas 文件进行确认:而对于 .skel 或是 .json 结尾的骨骼信息,直接点击上图的导入数据就可以了,这里需要注意的是版本需要和制作时的版本对应,否则可能会导入失败:老版本的 Spine 二..

2021-07-05 11:40:09 4897 5

原创 Unity3D 拆包工具 AssetStudio 编译构建

一、关于 AssetStudioAssetStudio 这个工具就不介绍了,如果你看到了这篇文章那么你肯定带有目的~其实无脑的话只要下载一个 release 版本就可以,也就是下载并找到对应的 .exe 文件直接双击运行,看到下面这个界面就算是第一步成功:不过有的时候需求没有那么简单,比如你要解的游戏包加了密,又或者你想要的是美术的一手资源,那么可能就没那么好办了,要不解出来的都是乱码,要不就是图片格式不正确,或者都是碎片资源,要你一个一个手动去加工处理……所以最好的是从 githu..

2021-06-24 19:18:38 43190 4

原创 UnityGI3:光照探针

前置:UnityGI1:光照烘培一、动态物体间接光漫反射静态物体的光照可以预处理,而动态物体位置会实时变化,这就不好去做提前光照计算,因此一个方案就是在场景中排满一个一个静态的“小球”,预先计算出这些小球的光照。然后游戏运行时,动态物体就可以去每时每刻寻找各方向上离他最近的几个静态“小球”,然后对这些“小球”的光照结果进行插值。用这种方法就可以对动态物体打上间接光漫反射,这个思路和分块打表算法比较相像间接光高光(镜面反射)无法用这种方法计算得到,这个需要去考虑 IBL图片中一个...

2021-05-22 16:41:30 1919

原创 UnityGI2:Lightmaps

前置:UnityGI1:光照烘培一、着色器应用 Lightmaps对于烘焙了 lightmaps 的场景,使用了自己的着色器可能得不到正确的结果1.1 关键字VERTEXLIGHT_ON && LIGHTMAP_ON当着色器应用 lightmaps 时,内置关键字LIGHTMAP_ON 会起作用,同时不会再包含顶点光照,也就是对应的VERTEXLIGHT_ON 关键字必然会失效,因此我们可以添加如下的 #pragma 指令:#pragma multi_...

2021-05-04 22:14:08 1616

原创 UnityShader32:PBR(一)

一、整装待发1.1:万事俱备UnityShader相关:UnityShader1:渲染流水线~UnityShader24:最简单的屏幕后处理例子 最好还是了解一个图形接口:OpenGL 或者 DirectX 永远别忘记 U3D 的官方手册PBR相关:PBR理论基础1:辐射度与BRDF PBR理论基础2:光照模型与微面元理论 PBR理论基础3:基于图像的光照(上) PBR理论基础3.1:基于图像的光照(下)1.2:只欠东风准备好你的参考资料,以及……新建一个 Sha...

2021-04-19 12:19:22 540

原创 PBR理论基础3.1:基于图像的光照(下)

接上文:PBR理论基础3:基于图像的光照(上)四、蒙特卡洛积分蒙特卡洛积分在前篇计算漫反射项时就已经应用过了对于定积分 ,如果无法简单求得原函数,一个尝试去求得其近似解的方法就是蒙特卡洛积分:在积分区间上进行均匀采样得到样本,就可以求和得到,随着样本数量 的增大,其结果也会逐渐收敛到积分的精确解这个方法和黎曼和的求法非常类似:就是图中矩形的宽,而就是对应矩形的高概率密度函数不过上面的计算没有考虑一个东西,那就是对于样本,它不一定是均匀分布的。对于前...

2021-04-16 16:31:48 345

原创 PBR理论基础3:基于图像的光照(上)

一、基于图像的光照(Image based lighting, IBL)只要了解了下面这些,就很容易理解基于图像的光照了:直接光与间接光的区别(UnityShader9:光照基础回顾) PBR理论基础2:光照模型与微面元理论 PBR理论基础1:辐射度与BRDF 动态环境映射:UnityShader18.1:立方体贴图(下) OpenGL基础50:HDR 在 PBR 的前两章,光照考虑的都是直接光源,这一章考虑的就是间接光,或者说是环境光一样是和环境立方体贴图有关,基于图像的...

2021-04-11 19:21:17 685

原创 UnityGI1:光照烘培

一、全局光照(Global Illumination, GI)系统全局光照(GI)系统这个概念指的是:既要考虑场景中来自光源的直接光照,又要考虑经光在其他物体表面反射后的间接光照光线追踪效果图,可见方块的两侧都映有墙壁的颜色在光线追踪技术成熟之前,全局光照往往无法应用于实时渲染,因为它的渲染成本实在是太高了,现在确实有不少相关的实时算法,但是这些就不在本次文章的范畴之内了若考虑到离线,最简单的情况就是:场景在运行时是完全静态的的,光源也是,这时我们就可以提前计算出光照结果并保存到光照贴图中...

2021-04-05 20:02:46 5392

原创 UnityShader31:Gamma

前置:https://blog.csdn.net/Jaihk662/article/details/107879539一、Gamma 理论总结在讲解这篇文章之前,需要先了解什么是 Gamma 空间和线性空间,也就是前置里的内容当然这里也可以进行一个总结:显示器的输出在 Gamma2.2 空间,这对应着 伽马校正即是将颜色转换到 Gamma0.45 空间(sRGB对应的空间),对应,伽马校正和显示器输出平衡之后,正好结果就是Gamma1.0 的线性空间 所有的输入,计算和输出都......

2021-04-04 18:10:24 1091

原创 UnityParticle3:3x常用模块

前置:UnityParticle2:5x基础模块一、粒子速度限制模块(Limit Velocity Over Lifetime)此模块可以控制粒子的速度变化,例如实现粒子运动时间越长,其速度越慢Separate Axes:将速度拆分为单独X、Y 和 Z 分量分别考虑 Speed:粒子的速度限制 Space:选择速度限制是适用局部空间还是世界空间,仅当启用了 ①Separate Axes 时,此选项才可用 Dampen:范围 [0, 1],当粒子速度超过速度限制时,粒子速度降低的...

2021-04-04 16:04:42 341

原创 UnityParticle2:5x基础模块

前置:UnityParticle1:粒子系统简介Renderere模块可以直接参考 U3D 官网:https://docs.unity3d.com/cn/2018.4/Manual/PartSysRendererModule.html,因为有很多的设置可以暂时不需要了解,所以这里就只记录一些重点

2021-04-03 22:51:45 468

原创 UnityParticle1:粒子系统简介

前置:UnityShader一、创建粒子创建方式:GameObject -> Effects ->ParticleSystems,这和创建 3D 物体方法一样,就是分类选择 Effects 就好粒子系统这特殊又复杂的 Inspector 界面初看感觉很吓人,这是因为粒子的属性实在是太多了,因此不得不将它们分为一个一个模块,模块左边复选框上的勾勾就表示启用该模块,一般来讲,最常用的就是 Emission & Shape 和 Renderer当然对于模块的了解可以...

2021-04-03 19:20:27 2793 2

原创 PBR理论基础2:光照、材质与微面元理论

接上文:PBR理论基础1:辐射度与BRDF五、漫反射项与镜面反射项漫反射项兰伯特(Lambert) BRDF:,为一定值,之所以要除以,是为了保证反射半球积分值为 1,这正好是球表面积的由此可得:给定光源入射方向,表面漫反射出射辐射率就为除此之外,还有一个十分著名的漫反射 BRDF 为 Disney BRDF:,其中 ,为表面颜色,为表面粗糙度高光反射项基于微面元理论,BRDF 高光反射项Cook-Torrance 的形式为:,其中,即光照与视线...

2021-03-27 22:41:31 864

原创 PBR理论基础1:辐射度与BRDF

前置:UnityShader9:光照基础回顾一、反射等式(reflection equation)定义::观察视角 :入射方向 :表面法向量有基于物理的反射等式:,其为渲染方程的一个实例其中和分别代表出射辐射率和入射辐射率, 为圆域积分...

2021-03-27 18:01:35 2713

原创 Photoshop1:入门实用技巧

一、去白底目的:为了避免图像的空白区域遮住背景,将图片的白色底改为透明底:1):解锁图层2):选择魔棒工具魔棒和快速选择的区别:快速选择更接近画笔,可以拖动以动态选择你想要的区域,而魔棒是算法向的,会自动选择当前颜色一致的色块,因此这里使用魔棒就会超级方便3):点击要去除的白色区域紧接着按下 Del 键删除这块白色区域,按 Ctrl+D 取消魔棒选择就完成了...

2021-03-21 00:48:38 843

原创 UnityShader30:预编译指令 multi_complie 和 shader_feature

multi_complie 和 shader_feature 编译指令往往用于正式游戏项目的优化一、关键字与Shader变体multi_complie 的用法:#pragmamulti_compile NAMEA, NAMEB, NAMEC, …,参考代码:Shader "Jaihk662/ShaderVariantTest"{ Properties { _MainTex("Texture", 2D) = "white" {} ....

2021-03-15 21:02:17 848

原创 常见图片格式与调色算法

一、常见图片格式1):JPEG 格式同等于JPG 和JPE 格式有损压缩 储存空间小 除RGB三色外,无法保留透明度、动画等任何信息颜色品质不错,但是在压缩过程中图像品质会有着肉眼可见的下降。一张图片多次上传下载后,图片逐渐会失真。一般用于网络上图片传播,不会作为游戏、影视资源使用。你网上下载的极大部分图片都会是 .jpg 格式的2):PNG 格式无损压缩 支持 Alpha 通道的半透明特性、图像亮度的 gamma 校正信息等 允许在一个文件内存储多幅图像(多...

2021-03-14 01:34:06 868

原创 RayMarching3:组合与变幻

接上文:RayMarching2:给球加上光照六、联合、交叉与取反1):联合(union)联合的目的很简单:当场景中有多个物体时,这些物体都要显示假定物体 A 和物体 B,它们的 SDF 函数为 和,那么 A ∪ B 就对应//联合float unionSDF(float distA, float distB){ return min(distA, distB);}//物体的SDFfloat sceneSDF(float3 rayPoint){...

2021-03-07 19:17:18 184

原创 RayMarching2:给球加上光照

接上文:RayMarching1:用射线的方式画一个圆四、法线与光照如果对偏导或者梯度场有了解,那么对于一个规则的平面想要得到某一点的法线就不是难题考虑到第一节 SDF 函数,我们知道:对于刚好在当前表面上的点 x 满足,对于在表面内部的点满足,对于表面外部的点满足,而法线有一个很重要的性质正是:当且仅当点 x 沿着法线的方向移动,能以最快的速度从负数递增到正数,这个增量可以用来表示,考虑到每个方向上的偏导,也就是说正是我们想要的法线肯定不需要去求导数,就按照周围的采...

2021-03-06 20:49:04 302

OpenGL基础学习完整代码(完整场景带优化).zip

对应的OpenGL学习博客:https://blog.csdn.net/jaihk662/category_9903113.html,第1章~第56章节完整代码。需要对应环境(openGL基本环境,SOIL库、glm库以及Assimp库、FreeType库),如何装环境的教程也在上面的链接中。此代码仅用于OpenGL入门学习

2020-09-28

OpenGL基础学习完整代码.zip

对应的OpenGL学习博客:https://blog.csdn.net/jaihk662/category_9903113.html,第1章~第45章节完整代码。需要对应环境(openGL基本环境,SOIL库、glm库以及Assimp库),如何装环境的教程也在上面的链接中。此代码仅用于OpenGL入门学习。PS:可能会有点卡主要是因为:①使用的地面模型是高模(几十万个顶点)②使用的天空盒贴图是2040x2048的超大贴图6张;没办法只找到这些资源,所以只能将就着用了

2020-08-12

空空如也

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

TA关注的人

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