恶毒的狗

Bad Fat Dog

更精确SSR的交点检测

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

关于pow的优化

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

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

关于正交相机的屏幕空间反射 这两天一个老外要求哥的 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. Wil...

Force Field效果的实现

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

风格化 + PBR

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

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

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

关于AssetBundle的卸载

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

潮湿效果之水纹

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

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

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

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

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