简介
记录使用 RenderDoc 拆包棕色尘埃2的经历
安装注意
RenderDoc 的 Mesh 导出只支持CSV,需要添加插件实现直接导出 Fbx。RenderdocResourceExporter。使用注意:Issues.
12table = main_window.findChild(QtWidgets.QTableView, 'inTable')
Shader查看
RenderDoc 默认只能查看 DirectX ByteCode,想要查看 hlsl 代码,需要格外的插件。Renderdoc DirectX ByteCode 转 HLSL 插件 修复说明,DXBC/HLSL 逆向反汇编 - 雪涛的文章 - 知乎.
简介
记录GAS中各个模块的使用经验
引用【gameplay-ability-system-for-unity】【Unreal】虚幻GAS系统快速入门 - LunarMaxim的文章 - 知乎UE-GAS架构分析(二)(GameplayAttribute) - 李嘉的文章 - 知乎UE GAS进阶-深入理解GE - 高贵纯合子的文章 - 知乎
GameplayTag
GameplayTags是一种层级标签,如Parent.Child.GrandChild。替代了原来的Bool,或Enum的结构,可以在玩法设计中更高效 的标记对象的行为或状态。
角色本身的枚举(敌我阵营、职业)、状态(无敌、控制)都可以用Tag存储
设计上:Ability(Atk、Heal、Fire、Bomb)、Effect(Atk、Heal)、GameplayCue(DieVFX、CameraShake、UpdeCD)、Event、Character(Agent、Monster、Neutrality)、Cooldown(Atk、Skill)等基础标签。对应的模块只检测对应的tag。避免重复和模糊定义,反...
来源实战项目观察–URP应用与优化记录 - limb的文章 - 知乎Learn to Write Unity Compute Shaders
思路
通用的RenderFeature,可用挂接简单独立的Pass,实现一个RenderFeature,大家可以往这个RenderFeature来注册各种Event下的Command,而后由这个RenderFeature提交给管线去渲染;各种比较简单和独立的Pass都可以往这个地方挂,当时看到之后感觉还蛮方便的,值得借鉴。
应用BlurHighLightRingHighLight
代码
Code
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111...
来源
水群的时候跟人聊天,看到了使用 DrawMeshInstancedIndirect 来批量绘制网格来实现血量的显示,卖课39,感觉这东西我也能写,然后花了一上午错了一个出来玩
HUD-HP
效果
原理
通过 DrawMeshInstancedIndirect 的方式,在 ComputeBuffer 里存储对应的数据数组,Shader中通过 instanceId,获取对应的位置和hp值,进行渲染的显示
12345678private void Update(){ _hpBuffer.SetData(createActor.actorList); hpMaterial.SetBuffer("_HpBuffer", _hpBuffer); Graphics.DrawMeshInstancedIndirect(hpMesh, 0, hpMaterial, bounds, _argsBuffer, 0);}
1234567891011121314151617181920struct Actor{ floa...
记录工作中做的功能和优化雀仔营地
战斗战争大师和鸽子队的技能、强化重做
根据测试结果反馈,修改了部份小队的强度,战斗时,每个单位自身保存着自己的属性和Buff队列,强化则是通过添加Buff或者修改Buffer数值来对属性值进行修改,Buff有时间属性,在自定义的BuffTimeMax外之外的时间都为限时buff。战斗的触发则通过生成对应的Bullet,Bullet根据是否为远近战,控制位置。近战则根据对应的位置生成Bullet,通过碰撞检测去获取攻击的单位,执行伤害扣除指令
红点系统
整个结构为树状,比如背包为 Backpage- Backage-Box Backage-Item Backage-Skin Backage-Chest 对于具体的项,跟通过字符串拼接的方式,绑定在对应节点下,游戏启动后获取对应数据,构建整个树,初始化节点的状态,当子状态发生变化时,通知上层改变,上层根据自身有没有变化来决定是否通知上层层级。UI实例在显示时通过数据获取状态。数据对实例有引用,改变红点时通过修改数据来实现对实例的改变...
来源大地形的一种简化RVT - jackie 偶尔不帅的文章 - 知乎
简介
为了渲染一个巨大的地形,可能需要使用一个超大分辨率的纹理。大到装不进GPU的显存。128K*128K的纹理将消耗大概64GB的GPU显存。当GPU上的内存空间有限时,操作系统会使用虚拟内存来进行内存管理,根据需要将数据从驱动程序交换到CPU内存中。虚拟纹理提供相似的功能。
地形的采样除了抖动混合其他都需要非常多次的采样albedo和normal然后混合。这已经成为多数项目在GPU方面的最大开销所以有必要缓存他。其次,地形的mesh结构单一性,材质统一性,贴图共用性都导致仅对地形实现RVT是比较方便的.
应用程序会决定每个mipmap层级中的哪些区域(瓦片tile)应当驻留在GPU显存中。一个tile通常为64kb,其分辨率取决于具体的纹理格式。在理想情况下,所需要的纹素数量应当与正在渲染的最终图像的分辨率成比例,并且与纹理本身分辨率无关。只要求可见的纹素位于物理GPU的显存中即可,其中整个mipmap链会在虚拟内存中被划分为若干个块(虚拟mipmap或者clipmap)。由于物理内存的大小比虚拟...