自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 华为手机关于LOAD_TEXTURE2D的Bug

一个华为手机专属Bug今天又发现了一个 华为手机 专属bug,如下图:原本 LUX 表现正常的水在我的 华为 Meta 30 上表现呈 条带状。从表现上看跟 深度计算 相关,定位了一下原因,发现问题代码如下:#if defined(SHADER_API_GLES) float refractedSceneDepth = SAMPLE_DEPTH_TEXTURE_LOD(_CameraDepthTexture, sampler_CameraDepthTexture, screenUV + o

2020-10-20 00:50:23 967

原创 关于RenderFeature重复计算的一个Bug

径向模糊的掉帧问题渲染迁移到 URP 的工作基本差不多了,不过昨天跑包的时候遇到一个问题,在播放 径向模糊 效果的时候,帧率 下降得很厉害,并且UI也跟着场景一起模糊了,如下图:这个问题在原先的 标准管线 下并不存在。原因简单检查了一下原因,发现 CameraStack 上的所有相机都执行了径向模糊这个 RenderFeature,包括 UI相机,我们 CameraStack 的设置如下图:看了一下 URP 的代码,发现无论是渲染 Base相机 相机还是渲染 Overlay相机,最终都会走到

2020-09-28 16:19:07 596 4

原创 关于自定义shader的自发光烘培

一个bug最近正在做交接工作,被问到了一个问题,如下图:左边这个球用的是Unity内置的Standard shader,开启了红色的自发光。可以看到,烘培后,自发光照亮了地面。右边这个球用的是我们自定义的shader,在 Meta Pass 我们同样设置了 Emission,并且为了调试,我们把 Albedo 设置成了纯黑色,并且简化了自发光的计算,但是烘培的结果,自发光并未对地面产生影响。half4 FragMeta (v2f i) : SV_Target { float2 mai

2020-05-26 14:20:35 742

原创 关于Mali GPU的浮点数异常

一个华为手机上的Bug今天查一个 辉光抖动 的问题:我们一个PBR的摩托车,在开辉光后高光处闪烁的厉害,并且这个闪烁只出现在华为手机上(Mali GPU)。用RenderDoc分析了一下,闪烁处的高光值已经逆天了,如下图:由上图可见,红框标记的颜色值达到了 65504,由于我们开启了 FP16 HDR,这里的 65504 刚好是 FP16 能表示的最大值。0 11110 111111...

2020-04-27 17:29:16 896

原创 关于反射探头的实时反射

用反射探头实现镜面反射之前看到过一个日本人写的文章,关于如何使用Unity的反射探头来实现地板的镜面反射效果。文章地址:http://nn-hokuson.hatenablog.com/entry/2016/10/17/202135。核心代码很短,主要是根据下图所示实时更新反射探头的位置:先贴一下位置计算的代码:using System.Collections;using Syste...

2020-04-22 21:06:39 830

原创 TOD的云层渲染和Flare遮挡

关于TOD前项目在模仿塞尔达的昼夜变换效果时用过 Time Of Day 这个Unity插件。本文记录一下 TOD 的云层渲染方式,以及如何让 TOD 的云层遮挡太阳光的 Flare。TOD渲染顺序以上图的白天为例,TOD的主要渲染顺序如下:绘制太阳 (Background+30)绘制大气层 (Background+50)绘制云层 (Geometry+530)其中,太阳和大气...

2020-04-17 10:41:55 918

原创 用ShaderGraph实现卡通的沙滩泡沫效果

一个卡通的水本文用 ShaderGraph 来模仿一下 The Illustrated Nature 插件中水的 泡沫效果,原效果如下:下图是我用 ShaderGraph 模拟的效果:代码我丢在了github上,地址:https://github.com/fatdogsp/URP-Simple-Water。泡沫的实现细节The Illustrated Nature 是风格化渲染,水的...

2020-04-04 23:01:20 2198

原创 固定角色的间接光照

一个美术需求今天美术大哥要我把角色的间接光照固定,不受场景影响,即把下图的 环境光 和 环境反射 从 Lighting Settings 面板搬到 角色材质球 上:这种环境光的反差,也是突出角色的方法之一。固定环境光美术的要求是,无论场景如何布置,程序只认下图这个预设的环境光:这里的做法很简单,打开美术预烘培好的场景,用 FrameDebugger 截取 球谐光照 的参数值,然后在任...

2020-03-25 11:56:07 247

原创 用Shader Graph的Flipbook节点实现水花效果

一个有趣的教程昨天看了一个老外的视频教程:Rain Drop Ripples,教程用 Shader Graph 实现了游戏中常见的下雨天地面的水花效果。视频中水花动画的实现和我们游戏的实现方式有所不同,他通过 Shader Graph 的 Flipbook 节点实现了水花的 序列图 动画:上图中的 Flipbook 节点对应的代码如下:float2 _Flipbook_Invert = ...

2020-03-16 20:37:06 2756

原创 更精确SSR的交点检测

Unreal的SSR交点检测关于 屏幕空间反射,可以参考文章很多,我觉得这篇写得还是蛮好的:Screen Space Glossy Reflections,借个图用用:本文不考虑 粗糙度,也不考虑 多条反射射线,只借鉴一下 Unreal 引擎在处理 单条射线光线步进 时对 交点 的计算方式,用来改进我的插件 LWRP/URP SSR Water 的反射表现。直接看下面这段最简单的 光线步进...

2020-03-07 00:53:26 813

原创 关于pow的优化

球形高斯近似之前提到,这篇文章 介绍了通过 球形高斯近似 来优化 pow 的计算,代码如下:优化前:// Generalized Power Functionfloat pow(float x, float n){ return exp(log(x) * n);}优化后:// Spherical Gaussian Power Function float pow(flo...

2020-03-04 16:21:13 2120 1

原创 关于正交相机的屏幕空间反射

关于正交相机的屏幕空间反射这两天一个老外要求哥的 LWRP/URP SSR Water 能够支持 正交相机。A good asset if you use perspective camera. Unfortunately it doesn’t work correctly with orthographic one which I use in my project. Will chang...

2020-02-28 16:44:22 948

原创 Force Field效果的实现

斧式雷基恩的护盾效果下图是 异界锁链 斧式雷基恩的护盾效果:趁着有空,我做了一个类似的实现,丢到 github 上去了,地址:https://github.com/fatdogsp/Unity-Force-Field-Effect。这个效果不难做,我们只需要检测出护盾的 边缘 以及护盾和场景的 交界,并依此来调整护盾的 透明度 即可。下图是我的第一版实现:和 异界锁链 相比,三角形背...

2020-02-21 17:36:44 983

原创 风格化 + PBR

风格化 + PBRPBR 追求 物理正确,风格化 则天马行空,两个本来不搭边的东西结合在一起,也可以实现出相当有趣的效果。下图是我的新欢,异界锁链 的女主小姐姐:注意看女主的衣服:漫反射部分,明暗过渡是比较典型的 卡通渲染 的方式,线条感很强。高光部分,直接高光的拖尾疑似 GGX,间接高光也很明显,PBR的质感。皮肤部分的明暗过渡比较平滑,暗部由红至黑的变化应该依靠 贴...

2020-02-16 14:34:18 1928

原创 关于Unity的Object.name的内存分配

战场玩法的一个热点年前跑 仙盟战场 玩法的时候,发现一处意料之外的 内存分配,如下图:这里 Object:get_name 的 调用频率 很高,每次调用都有 内存分配,虽然是 临时内存,但是也会增加 GC的负担。经过定位,发现这个问题是我们游戏的 换装系统 引发的。我们游戏的换装是基于 共享骨骼 的实现,每个部位的换装都有一个 骨骼匹配 的操作,从而引发 Transform.name 的...

2020-02-10 01:04:32 1476

原创 关于AssetBundle的卸载

关于AssetBundle的卸载又坐了一天月子,继续写文章找状态。本文是关于 卸载AssetBundle 的一些知识点。下图是一个最简单的从 AssetBundle 加载 Asset 并 实例化 的流程:这里的 Bundle 在加载完 资源A 后就没用了,我们可以通过 AssetBundle.Unload(false) 把它卸掉,只保留住 资源A。如果 资源A 也没用了,我们可以通过 ...

2020-02-07 23:42:25 1039 2

原创 潮湿效果之水纹

水纹疫情肆掠,在家坐月子坐到傻了,开始写点文章找回状态。本文是关于我们游戏 水纹 效果的实现细节。这里的 水纹 效果是 天气系统 的一部分,主要表现 雨水流动 的效果,如下图:本文会先介绍一下我们的实现方式,再对比一下其他实现。我们的实现常见的水波纹效果,一般都是依靠 法线贴图 + UV动画 来完成的。考虑到 水平方向 和 垂直方向 水的流动方式不一样,我们提供了两套水纹贴图。水...

2020-02-05 21:44:59 1017

原创 移动端草海的渲染方案(五)

书接上文前文介绍了草海的一些有趣的动态效果,本文是关于 提升光照表现 的一些做法。Unity内置草的光照表现普普通通,经常会成为一些插件作者嘲讽的对象,下图是 Unity 和 Advanced Terrain Grass 草海的光照对比:Unity的草ATG的草没有对比就没有伤害,下面介绍一下提升 光照表现 的一些做法。添加高光Unity内置的草是没有 高光 的,如果没有影子,就...

2020-01-21 22:09:06 846

原创 移动端草海的渲染方案(四)

书接上文前文介绍了我们游戏草海的基本渲染方案,本文将介绍一些更加有趣的动态效果。碰撞弯曲碰撞弯曲 在手游中比较常见,下图是我们游戏里的效果:uNature 的实现方式 类似用一个球体压迫草面,使得草的顶点远离球体中心。uNature 一共支持 20个碰撞源,不过手游的话只计算 主角的碰撞 就够了。我们可以在 顶点着色器 中添加如下代码:inline float4 Calculate...

2020-01-20 21:00:34 689

原创 移动端草海的渲染方案(三)

书接上文前文介绍了Unity内置的 地形草(Terrain Detail) 存在的问题以及一些优秀插件的优化方案。这些插件做法各有差别,但是主要的优化方式可以总结为以下几点:利用 GPU Instancing 提速渲染。消除 Terrain Patch 运行时 合并Mesh 造成的 CPU峰值。利用 多线程设计 分担 主线程 的负担。提升 摆动表现,提升 光照表现。...

2020-01-19 17:41:10 666

原创 移动端草海的渲染方案(二)

书接上文前文介绍了Unity内置 Terrain 刷草的一些缺陷,并且介绍了3款插件:uNatureAdvanced Terrain GrassNature Renderer下面就简单介绍一下这几款插件的做法,以及我们的选择。如何刷草Unity内置的刷草工具还是很好用的,Advanced Terrain Grass 和 Nature Renderer 沿用 Terra...

2020-01-17 00:54:11 1205 2

原创 移动端草海的渲染方案(一)

塞尔达草海的模仿塞尔达的草海 让人印象深刻,忍不住又要背诵台词:我想起那天下午夕阳下的奔跑,那是我逝去的青春。好了,现在回来。如果尝试用unity内置的地形草来还原上图效果,我们会发现有点力不从心:首先,内置草的shader不支持 高光。下图是前项目我们用传统的 Blinn-Phong 光照模型添加的高光:这里在计算光照时让 草的法线向上,大致可以模拟出塞尔达草海的高光形状。...

2020-01-17 00:49:09 1122

原创 关于间接高光的水平遮蔽(Horizon Occlusion)

Horizon Occlusion第一次看到 Horizon Occlusion 是在读 Lux Plus 源码的时候。Horizon Occlusion 是关于 间接高光 的 水平遮蔽 计算,典型的代码如下:// Horizon Occlusion#if defined (UNITY_PASS_FORWARDBASE) #if LUX_HORIZON_OCCLUSION ...

2020-01-10 22:53:51 389

原创 一个日本人写的插件:Breath Controller

Breath Controller今天无意发现一个日本人写的 呼吸控制器,挺好玩的,可以从他的 主页 下载源代码。这个插件目前只支持 人形动画,不过只需要简单的几行修改就可以支持 Generic动画 了,文章的最后会给出代码。好了,二话不说,先套到我们的 小甜甜 身上看看效果:听轻音乐听摇滚实现原理Breath Controller 是程序控制的呼吸动画,作者区分了 吸气,呼气...

2020-01-09 16:44:24 582

原创 位置同步之移动预测

传统的状态同步流程最近在整理前项目的代码,顺带把我们之前状态同步的一些技巧记录一下,本文是关于移动预测的。下图是单人环境下 小甜甜 风骚的疾跑:现在考虑一下把这个疾跑同步给其他玩家。按照mmo传统的 状态同步 和 客户端先行 的做法,我们的主角在 移动状态 开始时向服务器发送 移动包,服务器收到包后进入 移动状态 并立刻广播给第三方,第三方客户端中我们的主角也进入 移动状态。在移动的过...

2020-01-08 16:55:31 1904 1

原创 ShaderOne的体积雾

ShaderOne的体积雾ShaderOne 是Unity商店的一个shader资源,作者期望把所有的渲染特性集合到一个shader上去,所以起个名字叫 ShaderOne。本人其实比较反对这种 All In One 的shader,因为变种实在太多,优化起来比较蛋疼,不过作为一个学习资料还是挺好的。今天我们来看一下他的 体积雾 的实现,先上截图:核心代码说到体积雾,大家的第一个印象...

2020-01-06 21:22:29 778

原创 关于ComputeScreenPos和ComputeGrabScreenPos的差别

一个Bug今天QA报了一个渲染相关的bug:一个用了 扭曲 效果的翅膀特效在场景相机下显示正常,但是在UI相机上却有问题,截图如下:扭曲背景 上下颠倒 了。Bug的修正这里用的 扭曲shader 是我们的美术同学从他们前项目搬过来的,代码很简单:用 GrabPass 抓取当前屏幕做为扭曲背景。添加 UV扰动 后再采样屏幕背景,即可达到扭曲效果。问题是,这里采样 GrabTex...

2020-01-03 11:15:16 3725 1

原创 面对疾风吧

面对疾风吧趁着年前有空,把 小甜甜 项目当初没做好的暴风雨效果迭代了一遍,录了个视频,如下: 是不是很有 塞尔达 的感觉呢,:)做法也不难,主要操作如下:添加全局风修改草的摆动,使其受全局风影响打开雨雾粒子的受力选项,使其受全局风的影响扩展DynamicBone的摆动,使其受全局风影响添加全局风要让风的表现统一,这里还是借用了Unity的 WindZone。不过针对 草...

2019-12-31 19:23:35 327

原创 C#热更新方案的选择

前项目的C#热更方案小甜甜的C#热更方案前段时间 noodle 说他把 小甜甜 项目中他做的 C#热更方案 开源了。这个方案是一个 骚操作,不过是针对 il2cpp 的,核心思想是更新 libil2cpp.so,具体细节可以参考 github主页。暗黑血统的C#热更方案再早一点的项目 暗黑血统,那还是 Unity4 的时代,我们的C#热更方案也是一个 骚操作,这里列一下要点:Ass...

2019-12-27 16:06:56 2592 1

原创 修正半透明头发的渲染异常

修正半透明头发的渲染异常这两天在整理 小甜甜 的捏脸系统,顺带把前项目 半透明头发渲染异常的bug 修正了,效果如下:其实,前项目的头发工作良好,只是有一点 半透明渲染顺序 的小瑕疵,但正如前文 一个自阴影的Bug 所提到的:我在迁移shader的时候因为偷懒,把头发改成了 Surface Shader,从而带来了一些新的问题。问题一:关于Surface Shader的alpha指令首...

2019-12-24 21:05:38 1334

原创 unityBUZZ和Asset Figures

Google一下我的插件前一阵子写过一个Unity插件 LWRP SSR Water,放在 Asset Store 上卖得还行。某一天我不经意的 Google 了一下这个插件名,居然搜出了不少好玩的东西:可能是点击还行的缘故,连我的 印象笔记帮助文档 都被 Google 收录了。不过这里更好玩的是如下2个网页:unityBuzzAsset FiguresunityBu...

2019-12-20 20:04:28 137

原创 关于SHADOWS_SCREEN

关于SHADOWS_SCREEN在读Unity内置shader源码的过程中,我们经常看到这样的代码:#if SHADOWS_SCREEN // xxx#else // xxx#endif那么,上面代码中的 SHADOWS_SCREEN 代表的是什么呢?通过仔细阅读代码发现,SHADOWS_SCREEN 代表的是 屏幕空间阴影。以 URP 管线 主灯的实...

2019-12-19 16:29:39 1707 1

原创 标准管线下的unity_LODFade操作

标准管线下的unity_LODFade操作前文分析了 URP 管线下 LODDitheringTransition 的实现细节。回到标准管线,LOD的 Dither 过渡有一个类似的实现:UNITY_APPLY_DITHER_CROSSFADE。以 Riko 为例,看一下 UNITY_APPLY_DITHER_CROSSFADE 的效果:shader主要添加如下2句即可:#pragma...

2019-12-17 20:34:02 1367

原创 URP管线下unity_LODFade的骚操作

URP管线下unity_LODFade的骚操作玩 The Illustrated Nature,发现他的植物做了Lod,并且Lod的过渡并不是硬切的,有一个渐变,如下:跟了一下代码,发现主要的逻辑如下:#ifdef LOD_FADE_CROSSFADE LODDitheringTransition( IN.clipPos.xyz, unity_LODFade.x );#endif上...

2019-12-17 10:53:56 1281

原创 GUILayout.Label也可以支持Texture

GUILayout.Label也可以支持Texture代码好简单,如下:namespace IL3DN{ using UnityEngine; using UnityEditor; [CustomEditor(typeof(IL3DN_Wind))] public class IL3DN_WindEditor : Editor { ...

2019-12-16 16:16:36 1295 1

原创 关于pow编译后的代码

关于pow编译后的代码侑虎 的深度测试报告里,有一个关于地表shader的报告:报告提到:这里的 log2 在旧式Android机器上开销较高,是否可以优化掉?从汇编代码来看,我们先 log2 得到一个结果,对其做了一个 乘法 运算,再 exp2 回去。现在问题来了,从第一感觉来说,我们似乎没有这样的代码。很是好奇,于是自己对着shader源码逐行分析了一下,最后发现这段汇编对应...

2019-12-11 17:09:33 573

原创 用MotionBuilder修正小甜甜的跑步动作

用MotionBuilder修正小甜甜的胸前公司挂的太匆忙,导致一些动作文件错了以后再没机会修正,比如小甜甜的胸:这是 run 动作,左胸彻底瘪了。 打开 Animation 看一下,有一些骨骼找不到的报警:尝试修正了一下骨骼名字,报警是没了,但是胸还是瘪的,最后请美术同学看了一下,是动画key的有问题,好吧…程序员的第一次尝试要修正这个问题,一个普通的动作同学,可能只需要1分钟。 ...

2019-12-11 11:07:00 1085

原创 Lux的风和WindTexture

Lux的风和WindTexture玩 Lux LWRP Essentials 的过程中发现了挺多好玩的东西,比如它的风和草的随风摆动,实现细节就挺有趣。下图是前项目草的摆动效果:这里其实没有风,草的摆动计算比较简单,就是周期性的正余弦摆动。 效果还不错,计算量也不算大。如果用 Lux的风 来驱动草的摆动,效果如下:摆动不再那么规则,并且风的方向可以调整,表现更加真实。下面就来看一下...

2019-12-09 17:11:04 334

原创 关于"Use 32-bit Display Buffer"

一个Bug:辉光没了在 Android 设备上,之前工作良好的 辉光 在某一个版本突然没了。看了一下 svn log,并没有什么代码改动,但 主美哥 用他的 24K氪金狗眼 跟我保证:辉光真的没了。好吧,检查了一下发现,辉光的计算依然还在,但是计算结果却是一片黑…下面是 FrameDebugger 的调试结果:辉光计算依然存在_BloomTex一片漆黑_BloomTex 存储的...

2019-12-06 16:10:55 1373

空空如也

空空如也

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

TA关注的人

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