(译)Terrain Rendering in Far Cry 5
本文是对https://www.gdcvault.com/play/1025480/Terrain-Rendering-in-Far-Cry 进行的中文翻译,翻译动机是PPT涵括了ProjectS的GPU Driven系统所有功能模块,需要学习下工业流程
大纲
地形渲染:渲染地形,将部分转移到GPU管线中
基础知识
GPU管线
着色:对上一步渲染的地形进行着色
悬崖着色:针对悬崖做的着色方案和优化
高级地形:将基础地形和其他几何结合
屏幕空间着色:在一个屏幕空间的Pass对地形进行着色
基于地形的特效:使用GPU上的地形数据来增强对其他资产的渲染,如树木、草和岩石
地形渲染
地形渲染基础
流程概述
一个简单且GPU友好的方式来渲染一个小区域的地形步骤如下:
首先渲染一个Mesh,作为地形的最小单位。
在VS中采样高度图,来改变顶点位置
使用一张albedo贴图在PS中进行着色,作为地形基础色
计算光照时再用一张normal贴图
使用四叉树来划分地形区域,整个世界构成item粒度从小到大依次为(LOD0):
Patch(Tile):单个Grid,原分辨率1 ...
ProjectS中的GPU Driven
架构
前阵子敲定了ProjectS GI方案的大体架构,但只对着那几个Cube可看不出落地效果,也没法做针对性的优化,所以准备启动地形相关的开发工作
立项之时就考虑到美术成本问题,所以采用程序化生成作为构建ProjectS世界的主要手段,程序化生成意味着大量重复instance和大地形,这时候就得利用GPU Driven来作为整个PCG系统的底层支柱之一了,我们常说的GPU Driven包括以下几个方面
地形渲染
制作
Houdini 生成高度图+Mask VS 直接生成Mesh
Houdini生成高度图+Mask方案对于Houdini来说更加轻量,不需要处理地形Mesh
直接生成最终Mesh可以离线对Mesh做处理,包括岩壁重展UV,LOD计算等
但对于ProjectS来说,没有太特殊的需求对Mesh做处理,一些岩壁拉伸问题也可以通过处理贴图渲染进行解决,最终选用高度图方案
渲染
DrawInstanceIndirectly通用Quad Mesh + LOD + 高度图采样 实现地形渲染 VS Mesh Cluster Rendering + LOD 实现地形渲 ...
梦中酒
我做了一个梦
我是一位书生
梦里似有一壶酒,不见其形,却感受得到它的悠然与清香
听人说,这酒产自故乡,但如今远在异乡
这股清香,一直陪伴着我,在疲惫不堪的时候,我把它当成一种抚慰
后来,我对它愈加喜欢了,我付出的越来越多,用尽全力去了解它,只想永远拥有它
但,酒这事物,越沉醉,越伤身
它总是懒得回应我,无论我再怎么苦苦哀求,它只愿意给我它的清香
哪怕一滴一毫的壶中酒都不愿予我
但,我对它依赖的太深了,我想要更多
它说,让我看看你的模样
我便决定踏遍天涯去找寻它的踪迹
找寻它的路上,太阳是暖的,风是甜的,就连凌晨的星空也是美的
见到它的那刻,我顿住了,它是凛冽的,热辣的,但也有那熟悉的清香
这样的它,让我沉醉
我陪它走了很久很久,我们都很开心,像是久别重逢的新人
它就在我身边,这让我感到从未有过的安心
趁着满天星辰,我问它,能否给我更多
恍惚间,我看它稳了稳身形,酒盖似也紧了些,我心中悲然,这应是它的回答
翌日,我早早来到约定的地点
这里有春天的微风,慵懒的暖阳,翠绿的湖水,簌簌作响的树叶
我们依旧走在路上,但除了熟悉的清香,那疏离的感觉,把我一步步的推往绝望
我陪它走了很久很久,走 ...
ProjectS中的AI转向系统(Context Steering)
前言
前阵子在处理ProjectS中的AI行为时,发现怪物AI规划出的行为很容易造成怪物重叠,这归根到底是个动态避障问题,而当前游戏AI有以下几种常见动态避障算法:
VO : 提出速度域的概念,Velocity Obstacle 就是VO的由来。通过相对位置,并从自身出发考虑一个安全的移动方向,即避开VO区域(速度危险区)。但在移动过程中会出现抖动。原因就是反复计算安全区,当第一次避开危险区到达安全区之后,发现最佳移动方向(不一定安全,一般指朝向目标点方向)可能不再危险,就将移动方向转回来,结果发现其他寻路对象也这么考虑,也将移动方向转回来,所以第三次就又将方向转向其他方向。由此引发了移动时的方向抖动
RVO: 在VO的基础上,每次转动方向时,只转动计算出来的变化量的一半。从数学计算角度去减少出错(抖动)概率
RVO2/ORCA: VO与RVO都是在空间计算上来规划一个安全区域,而RVO2则是将其转化成了一个线性规划的问题(即用一个个平面将自己与需要考虑的对象的安全区域分割开来再采取一个共面区域,这个区域就是安全区)
对于这三种算法的详细解析,可参见:GameAIPro3_Ch ...
(译)上下文转向行为驱动的AI移动策略(Context Steering)
本文是对GameAIPro2_Chapter18_Context_Steering_Behavior-Driven_Steering_at_the_Macro_Scale 进行的中文翻译
译文
介绍
在游戏行业中,转向行为(Steering Behaviour)是非常普遍的。他们之所以这么流行,是因为其只需要使用简单组件就可以快速实现核心功能。
然而,转向行为并不适合用于某些类型的游戏。当玩家能够挑选并监控单个实体时,避免碰撞和自然的移动就变得非常重要。为了实现这一目标可能会导致行为组件的膨胀并变得紧耦合,实体运动逻辑也会变得脆弱和难以维护。
在本章中,我们将概述如何识别那些转向行为不太适合的游戏,并提出一种针对这些问题的新方法,它被称之为上下文转向行为(Context Steering)。上下文转向行为(Context Steering Monobehaviours)是小巧的和无状态的(StateLess),并提供任何行为本身所期望的运动约束。当上下文转向行为用于取代游戏F1 2011上的原转向行为时,代码库减少了4000行,但AI在避免碰撞、超车和执行其他有趣的行为方面表现得 ...
游戏设计精粹《五》
游戏设计精粹《总目录》
游戏叙事设计:游戏故事主题设计探讨-50个故事主题设计汇总
文章摘要个人总结
创造游戏重复可玩性的14种方法及解说
文章摘要个人总结
超越罐头:艾尔登法环与下一代开放世界
文章摘要个人总结
辐射挽歌:永远不要背叛你的核心用户
文章摘要个人总结
2022个人年度总结
今年算是颇为平淡的一年,没什么惊喜,也没什么失落,但生活就是这样,我们把这些平淡记下,多年后回首往昔,这些平淡就会成为我们珍贵的回忆与感动的来源
在工作方面,倒真不是我懒,工作总结相关的事情没什么好说的,大家都懂,无非都是些套话,场面话,我也懒得在个人博客里写那些,所以就以总结,记录个人生活经历为主了
一月 归乡
1.25号回到老家的县城,感觉有点饿了,先整碗朝思暮想的大碗米线
老家是一如既往的清冷,不过这种清冷我很喜欢,很安静,窗外的大部分时间都是阳光明媚,冬阳暖暖的
由于只带了个MAC,所以就只是整理了下守望先锋GDC的大纲,一边整理,一边感受着若有若无的家乡冬天特有的冷清,别有一番意味
休整了几天后,手就闲不住了,去村头小卖部买了几盒鞭炮,耍一耍
二月 返途
2月7日,早上5点,天还黑着,就坐着父亲的轿车,准备赶早上10点的飞机,因为要提前两小时值机,所以8点前就要到达机场
一路上倒也平稳,不知不觉就睡着了,忽然感受到一丝冷意,睁开充满困意的眼睛,发现车窗外已经飘起了小雪,觉得有些生气,毕竟在家这么多天连个雪影子都没看到,今天要走了,才开始下雪,都没办法好 ...
ProjectS中的全局光照系统(开发中)
前言
临近个人独立项目第一次技术演示,终于也是蚌埠住开始优化场景效果了,说到场景效果,避不开的就是GI,这篇文章就是记录下整个GI系统的架构和开发过程
GI知识体系
直接光照
出于项目风格以及资源可复用性考虑,采用了风格化PBR的光照模型,当然现在风格化还没开始做,就先用Unity URP的Lit代替了
间接光照
环境光
IBL
HDR的CubeMap,同时用作天空盒和烘焙GI时的天光
SSAO
增强画面立体感最廉价的方案就是AO,所以也使用了Unity URP的SSAO,做了下DownSample,减少SSAO Effect RT消耗
Shadow Map
基于Unity自带的级联阴影,由于俯视图的特殊性,所以基本上2级的级联阴影就够用了,之所以在俯视图的情况下还是选用级联阴影,是为了兼容玩家们转动到第三人称视角的情况
漫反射
Light Map && Shadow Mask
出于对Unity自带GI系统的使用阴影,选择了广受好评的Bakery插件,简单直观的参数设置和详细的文档说明使用起来事半功倍
烘焙模式为Shadow Mask(Dist ...
以线性时间绘制非分层整齐树的实践与应用
故事还是要从去年春节说起,当时临近除夕实在闲的蛋疼,随意摩挲着MAC唯一比较舒服的触摸板,突然想起我的行为树乱糟糟的布局,就想着能不能搞个自动布局算法,充分利用空间的同时让行为树更加整洁大方,说干就干
吭哧吭哧3天时间(是的,你没猜错,我猪脑又过载了)终于是写完了一版行为树自动布局工具,当时够用了,于是就没管了
前阵子在给 基于行为树的MOBA技能系统:朝花夕拾 · 现代化的动画系统设计与开发 开发Playable Debug工具的时候,需求是横向布局对齐,参考了 Reingold-Tilford Algorithm 进行实现
最近我的运行时节点编辑器依旧有自动布局的需求,本来可以直接复用之前写的节点自动布局算法,但由于运行时节点编辑器和NodeGraphProcessor的节点数据结构天差地别,改起来非常折磨,想到后面可能还有什么地方有自动布局的需求,干脆抽离出一个通用的算法库,同时支持 从上到下,从左到右,从右到左,从下到上的树结构自动布局
说起来有4类情况,其实只需要写一个算法,然后对结果进行旋转 + 后处理即可
这次没有再埋头苦干,而是翻阅了大量资料,找到了一个无论是算 ...
基于行为树的MOBA技能系统:朝花夕拾 · 现代化的动画系统设计与开发
基于行为树的Moba技能系统系列文章总目录:https://www.lfzxb.top/nkgmoba-totaltabs/
今天也是冒着猪脑过载的风险想出了这么个像那么回事的标题,我命令看这个文章的所有人都狠狠的夸标题
2021.6.1,随着我战斗系统系列文章的发布,初版的动画系统也是第一次进入了大家的视野,文章中阐述了Unity动画状态机的缺陷,以及使用Playable API的理由,并且最后使用了 Animancer 作为Playable API的封装,然后在技能配置时进行指定一些动画过渡,Avatar,混合相关的参数
随后在代码里以这种方式进行处理
123456789101112131415161718192021222324252627public AnimancerState PlaySkillAnim(string stateTypes, PlayAnimInfo.AvatarMaskType avatarMaskType = PlayAnimInfo.AvatarMaskType.None, float fadeDuration = 0.25f, flo ...