- 博客(1255)
- 资源 (2)
- 收藏
- 关注
原创 Renderer 使用材质分析:materials、sharedMaterials 及 MaterialPropertyBlock
Unity 开发时,在 C# 中通过 Renderer 取材质操作是非常常见的操作,Renderer 有两种常规获取材质的方式:.sharedMaterials 和 .materials,当然,除了 clone material instance 来做表现差异化,Unity 更希望你用 MaterialPropertyBlock,这个才是做材质表现差异化的正确路子
2023-02-17 01:55:57
766
3
原创 UnityShader35:光晕光效
光晕(halation)是指在曝光拍摄过程中,强光投射到胶片上时,透过胶片乳剂中在片基表面进行反射,从而致使图像发晕的现象
2023-02-13 21:16:55
870
原创 FT 在图形渲染中的应用:基于 FFT 的海浪模拟
既然任意连续且收敛的函数都可以分解为无数个不同频率、不同幅值的正、余弦信号,且这个性质可以扩展到二维,那么海浪作为“波”的典型,是否也可以将其拆成任意方向不同频率强度的基波的叠加?当然没有问题
2022-12-12 15:20:02
1666
2
原创 EarlyZ 与 DepthPrePass
TBR 和 TBDR 架构网上的文章实在太多了,并且不同的硬件,内部具体的实现原理都不太一样(例如 Early-DT 的实现技术对于 PowerVR 是 Hidden Surface Removal (HSR),对于 Adreno 是 Low Resolution Z (LRZ)……)更何况细节,虽说这些都不算机密,但是也不是说你想拿到就拿到,除非是像。
2022-09-29 16:56:10
587
4
原创 投影矩阵、NDC 空间与 Reversed-Z
也就是说,OpenGL 平台的投影矩阵会和其它平台不一样,而几篇经典的文章()都是推的 OpenGL 的投影矩阵:而对应 D3D 等其它平台的投影矩阵为当然投影矩阵还会跟参考坐标系有关系,例如 OpenGL 使用的是右手坐标系,但是在NDC中使用的是左手坐标系,因此构造投影矩阵时,需要将 near 和 far 取负。
2022-09-16 16:06:05
1367
原创 大型项目中 MSAA 的方案参考
关于锯齿的产生原因以及主流抗锯齿技术 MSAA 网上的资料很多,凡是游戏开发也多多少少都有了解,因此这里就不多赘述,有兴趣可以直接参考以下几篇文章:拿随意一个游戏举例,MSAA N samples 效果对照如下: 前面介绍了锯齿的产生原因以及 MSAA 解决方案,这里主要是介绍 MSAA 每一步是在哪个时机,那一块地方做的,简单描述下性能上的问题,并且主要考虑移动平台的 TBRD 架构一样可以先参阅文章:直入主题:MSAA 先在光栅化阶段生成覆盖信息,然后计算像素颜色,根据覆盖信息和深度信息决定是否来写入子
2022-09-07 20:52:05
2035
原创 Unity USB 连接 Android 真机/模拟器测试
先检查电脑里是否已经安装了 adb 安卓包:打开 Windows PowerShell 命令窗口,输入指令 adb version,如果有出现版本号,就说明没问题否则需要下载 SDK,完毕之后配置下环境变量 准备好 development 安卓包,并通过 SDK 安装:找到你安装包所在位置,PowerShell 命令窗口执行指令 adb install -r "相对路径",如下 然后等待安装成功即可,会出现 Success 提示打开 Unity(最好是空项目)并切换 Android 平台: 然后确保上述设置
2022-06-30 16:24:25
2487
原创 Unity3D Soft Mask 软遮罩插件
和常用的 Mask 和 RectMask2D 组件一样,SoftMask 也可以用来对 Image、RawImage 等图形单元进行遮罩,仅显示部分区域,不过相对于传统的遮罩,SoftMask 的区域便于更加的平滑,也可以理解为是渐进式遮罩,往往可以通过它来实现一些边缘羽化等效果...
2022-06-15 17:52:18
2804
原创 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
1119
原创 有关 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
2988
原创 UnityShader33:GPU 实例化
动态合批、静态合批与 GPU 实例化(GPU Instancing)的本质都是通过减少 CPU 对 GPU 绘制请求(Draw Call)的次数,以达到提高性能的目的对相于合批,GPU 实例化(Instancing)是相对独立的一个功能,之前有一篇 OpenGL 的文档可以参考,这篇主要记录 Unity 下如何去实现 GPU 实例化一、再提 GPU 实例化GPU 实例化只提交一个模型网格,然后绘制多次,每次绘制的网格属性都可以不一样:包括缩放、位置、颜色等等,即材质球虽然相同但属性可以各有各..
2021-07-19 13:08:52
997
3
原创 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
327
2
原创 UnityGI4:混合光照
前置:UnityGI2:Lightmaps一、混合模式前面设置了光源的模式为 Baked,这意味着光源产生的直接光和间接光都会被记录在 lightmap 中,如果着色器不从 lightmap 中采样,那么静态物体得到的表现就是完全的黑暗。除此之外模式为 Baked 的光源,运行时无法调整且没有贡献如果修改光源模式为 Mixed,那么在烘焙的时候就会只烘焙间接光,并且在运行时该光源被当作实时光产于计算:当然间接光在运行时是不会发生变化的,所以光源在运行的时候也尽量不要过度调整它的位置和属性..
2021-07-15 10:18:02
449
原创 Spine 动画工具
一、文件结构Spine 导出的资源文件如下:.atlas:图集数据文件,内部存储了每张纹理的数据信息 .png:图集资源 .skel / .json 二进制文件:骨骼信息图集可以用纹理解包器解包,需要注意的是 .atlas 同级目录下必须要有对应的 .png 图片,可以打开 .atlas 文件进行确认:而对于 .skel 或是 .json 结尾的骨骼信息,直接点击上图的导入数据就可以了,这里需要注意的是版本需要和制作时的版本对应,否则可能会导入失败:老版本的 Spine 二..
2021-07-05 11:40:09
2515
5
原创 Unity3D 拆包工具 AssetStudio 编译构建
一、关于 AssetStudioAssetStudio 这个工具就不介绍了,如果你看到了这篇文章那么你肯定带有目的~其实无脑的话只要下载一个 release 版本就可以,也就是下载并找到对应的 .exe 文件直接双击运行,看到下面这个界面就算是第一步成功:不过有的时候需求没有那么简单,比如你要解的游戏包加了密,又或者你想要的是美术的一手资源,那么可能就没那么好办了,要不解出来的都是乱码,要不就是图片格式不正确,或者都是碎片资源,要你一个一个手动去加工处理……所以最好的是从 githu..
2021-06-24 19:18:38
30278
4
原创 UnityGI3:光照探针
前置:UnityGI1:光照烘培一、动态物体间接光漫反射静态物体的光照可以预处理,而动态物体位置会实时变化,这就不好去做提前光照计算,因此一个方案就是在场景中排满一个一个静态的“小球”,预先计算出这些小球的光照。然后游戏运行时,动态物体就可以去每时每刻寻找各方向上离他最近的几个静态“小球”,然后对这些“小球”的光照结果进行插值。用这种方法就可以对动态物体打上间接光漫反射,这个思路和分块打表算法比较相像间接光高光(镜面反射)无法用这种方法计算得到,这个需要去考虑 IBL图片中一个...
2021-05-22 16:41:30
1547
原创 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
1005
原创 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
323
原创 PBR理论基础3.1:基于图像的光照(下)
接上文:PBR理论基础3:基于图像的光照(上)四、蒙特卡洛积分蒙特卡洛积分在前篇计算漫反射项时就已经应用过了对于定积分 ,如果无法简单求得原函数,一个尝试去求得其近似解的方法就是蒙特卡洛积分:在积分区间上进行均匀采样得到样本,就可以求和得到,随着样本数量 的增大,其结果也会逐渐收敛到积分的精确解这个方法和黎曼和的求法非常类似:就是图中矩形的宽,而就是对应矩形的高概率密度函数不过上面的计算没有考虑一个东西,那就是对于样本,它不一定是均匀分布的。对于前...
2021-04-16 16:31:48
223
原创 PBR理论基础3:基于图像的光照(上)
一、基于图像的光照(Image based lighting, IBL)只要了解了下面这些,就很容易理解基于图像的光照了:直接光与间接光的区别(UnityShader9:光照基础回顾) PBR理论基础2:光照模型与微面元理论 PBR理论基础1:辐射度与BRDF 动态环境映射:UnityShader18.1:立方体贴图(下) OpenGL基础50:HDR 在 PBR 的前两章,光照考虑的都是直接光源,这一章考虑的就是间接光,或者说是环境光一样是和环境立方体贴图有关,基于图像的...
2021-04-11 19:21:17
518
原创 UnityGI1:光照烘培
一、全局光照(Global Illumination, GI)系统全局光照(GI)系统这个概念指的是:既要考虑场景中来自光源的直接光照,又要考虑经光在其他物体表面反射后的间接光照光线追踪效果图,可见方块的两侧都映有墙壁的颜色在光线追踪技术成熟之前,全局光照往往无法应用于实时渲染,因为它的渲染成本实在是太高了,现在确实有不少相关的实时算法,但是这些就不在本次文章的范畴之内了若考虑到离线,最简单的情况就是:场景在运行时是完全静态的的,光源也是,这时我们就可以提前计算出光照结果并保存到光照贴图中...
2021-04-05 20:02:46
2627
原创 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
514
原创 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
180
原创 UnityParticle2:5x基础模块
前置:UnityParticle1:粒子系统简介Renderere模块可以直接参考 U3D 官网:https://docs.unity3d.com/cn/2018.4/Manual/PartSysRendererModule.html,因为有很多的设置可以暂时不需要了解,所以这里就只记录一些重点
2021-04-03 22:51:45
235
原创 UnityParticle1:粒子系统简介
前置:UnityShader一、创建粒子创建方式:GameObject -> Effects ->ParticleSystems,这和创建 3D 物体方法一样,就是分类选择 Effects 就好粒子系统这特殊又复杂的 Inspector 界面初看感觉很吓人,这是因为粒子的属性实在是太多了,因此不得不将它们分为一个一个模块,模块左边复选框上的勾勾就表示启用该模块,一般来讲,最常用的就是 Emission & Shape 和 Renderer当然对于模块的了解可以...
2021-04-03 19:20:27
1987
1
原创 PBR理论基础2:光照、材质与微面元理论
接上文:PBR理论基础1:辐射度与BRDF五、漫反射项与镜面反射项漫反射项兰伯特(Lambert) BRDF:,为一定值,之所以要除以,是为了保证反射半球积分值为 1,这正好是球表面积的由此可得:给定光源入射方向,表面漫反射出射辐射率就为除此之外,还有一个十分著名的漫反射 BRDF 为 Disney BRDF:,其中 ,为表面颜色,为表面粗糙度高光反射项基于微面元理论,BRDF 高光反射项Cook-Torrance 的形式为:,其中,即光照与视线...
2021-03-27 22:41:31
575
原创 PBR理论基础1:辐射度与BRDF
前置:UnityShader9:光照基础回顾一、反射等式(reflection equation)定义::观察视角 :入射方向 :表面法向量有基于物理的反射等式:,其为渲染方程的一个实例其中和分别代表出射辐射率和入射辐射率, 为圆域积分...
2021-03-27 18:01:35
2065
原创 Photoshop1:入门实用技巧
一、去白底目的:为了避免图像的空白区域遮住背景,将图片的白色底改为透明底:1):解锁图层2):选择魔棒工具魔棒和快速选择的区别:快速选择更接近画笔,可以拖动以动态选择你想要的区域,而魔棒是算法向的,会自动选择当前颜色一致的色块,因此这里使用魔棒就会超级方便3):点击要去除的白色区域紧接着按下 Del 键删除这块白色区域,按 Ctrl+D 取消魔棒选择就完成了...
2021-03-21 00:48:38
420
原创 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
506
原创 常见图片格式与调色算法
一、常见图片格式1):JPEG 格式同等于JPG 和JPE 格式有损压缩 储存空间小 除RGB三色外,无法保留透明度、动画等任何信息颜色品质不错,但是在压缩过程中图像品质会有着肉眼可见的下降。一张图片多次上传下载后,图片逐渐会失真。一般用于网络上图片传播,不会作为游戏、影视资源使用。你网上下载的极大部分图片都会是 .jpg 格式的2):PNG 格式无损压缩 支持 Alpha 通道的半透明特性、图像亮度的 gamma 校正信息等 允许在一个文件内存储多幅图像(多...
2021-03-14 01:34:06
644
原创 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
131
原创 RayMarching2:给球加上光照
接上文:RayMarching1:用射线的方式画一个圆四、法线与光照如果对偏导或者梯度场有了解,那么对于一个规则的平面想要得到某一点的法线就不是难题考虑到第一节 SDF 函数,我们知道:对于刚好在当前表面上的点 x 满足,对于在表面内部的点满足,对于表面外部的点满足,而法线有一个很重要的性质正是:当且仅当点 x 沿着法线的方向移动,能以最快的速度从负数递增到正数,这个增量可以用来表示,考虑到每个方向上的偏导,也就是说正是我们想要的法线肯定不需要去求导数,就按照周围的采...
2021-03-06 20:49:04
187
原创 RayMarching1:用射线的方式画一个球
一、ShaderToy作品如果你对 Shader 有一定的了解,那么你或多或少听说过shaderToy这个网站,这个网站上有很多令人振奋的 shader 效果,而这些效果有可能只用了几行代码来实现。就如同画家绘画,在这里片段着色器就是画笔,屏幕就是画纸:网站中对于任意一个作品,都提供了完整的 GLSL 片段着手器代码,它们是通过在你的浏览器中运行 WebGl 来展现这些效果的。你也可以通过修改代码,修改变量和输入来直接在网页上查看效果的变幻只通过片段着色器来输出你的画面,那么这就基...
2021-03-06 12:41:32
368
原创 将ShaderToy中的Shader搬运到Unity
一、ShaderToy作品如果你对 Shader 有一定的了解,那么你或多或少听说过 shaderToy 这个网站,这个网站上有很多令人振奋的 shader 效果,而这些效果有可能只用了几行代码来实现,就如同画家绘画,片段着色器就是我们的画笔,屏幕就是我们的图纸:对于任意一个例子,都提供了完整的 GLSL 片段着手器代码,它们是通过在你的浏览器中运行 WebGl 来展现这些效果的。你也可以通过修改代码,修改变量和输入来直接在网页上查看效果的变换把它搬运到 Unity 上并不难,由于它们...
2021-03-06 00:49:02
1910
1
原创 UnityShader29:模板测试
一、什么是模板测试:OpenGL基础30:模板测试Unity官方文档:https://docs.unity3d.com/Manual/SL-Stencil.html在 Unity 中,最经典的模板测试例子就是 UI Mask:二、Unity 中的模板测试SubShader{ Tags { …… } Pass { Stencil { //可选 Ref referenc...
2021-03-05 18:08:06
296
1
原创 UnityShader28:噪声纹理
一、噪声纹理听名字挺蒙的,其实它的作用就是展现出一个事物“混沌”或“杂乱无章”的效果,就像雾气和雪地,它们绝对不会是均匀单一的,不然给人的感觉就像是屏幕变灰了,以及往地上涂了一层白色油漆一样Shadertoy上关于Perlin噪声的实现噪声纹理本质上是一种“固定”的随机,本章后面使用的噪声纹理如左下:何为“固定”的随机呢?在 C++ 中我们会使用 Random() 函数来解决一类问题,图形领域也一样,只不过有的时只使用简单的随机生成器反而会带来更不自然的效果,右上图就是一张完全随机的噪...
2021-03-02 20:50:59
884
OpenGL基础学习完整代码(完整场景带优化).zip
2020-09-28
OpenGL基础学习完整代码.zip
2020-08-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人