531 词
Part I重点是介绍基础的怎么使用,有以下的重要结构 所有的workUnit里面的,不同类型的音乐如场景,人声可能由不同的公司制作,所以有一个workUnit方便集合(本身是xml文件) 有三个重点部分 Audio目录存储所有音乐资源 Events事件管理音乐内部的逻辑(播放循环等,且事件底下统一按小写处理,不区分大小写) SoundBank主要是用来与代码交互,代码要找到相应的SoundBank 才可以调用下面的事件 soundbank生成目录就是游戏需要调用的目录,event要扔在SoundBank里,Audio通过Event管理 Part II重点在于编辑器的使用 音高,音频编辑(裁剪,淡入淡出),随机类型的音乐(虚文件夹),序列类型的音乐(虚文件夹)等 感觉用起来很舒服,起码比FLstudio要舒服的多,左下角有所有的功能提示,FLstudio只有简介,Wwise甚至有说明,各种编辑起来也很方便,不知道是不是因为本身属于一种编程思想的音频引擎? 有一个值得注意的地方是,在编辑器里面Audio目录里面Copy是新建的引用,而不是新建文件夹,引用的是...
1.8k 词
SIMDSingle Instruction Multiple Data,单指令多数据流,可以使用一条指令同时完成多个数据的运算操作。传统的指令架构是SISD就是单指令单数据流,每条指令只能对一个数据执行操作。 简单举个例子一次可以算4次加法 使用方法1:内联汇编下面的写法是 GCC 和 Clang 等编译器支持的特性。Visual Studio 使用的 MSVC 编译器并不支持 GCC 风格的内联汇编 12345678910111213141516171819#include <stdio.h>#include <stdlib.h> int main(){ float a[4] = { 1,2,3,4 }; float b[4] = { 5,6,7,8 }; float res[4]; __asm__ __volatile__( "movups %1,%%xmm0\n\t" // 将a所指内存的128位数据放入xm...
1.9k 词
FFXVI Shadow Part V正文Part V :HiQuality最后的第 5 阶段处理重要角色的更高质量的阴影,绘制在专用的Closeup Shadowmap中,在现有的 VisibilityBuffer 上合成角色阴影 Closeup Shadowmap:与我们的高质量阴影技术一起使用。与普通阴影贴图一样运行,但视图仅限于一个感兴趣的对象,而不是整个光源的视野,以获得更好的分辨率精度。 Output: Updated Final Light List Buffer当阴影图块从完全亮起变为部分亮起时,需要分配一个Visibility Slot并保存Visibility SlotID。相反,需要通过将 Visibility SlotID 替换为完全点亮的标志。这两种情况都通过更新最终光源列表缓冲区中的阴影图块条目来处理。 Output: Updated VisibilityBuffer使用特写阴影贴图生成阴影。当灯光/像素可见性降低时,其在 VisibilityBuffer 中的值将更新。 Output: Updated Standard Shadowmap...
2.7k 词
FFXVI Shadow Part IV正文Part IV :Generate第 4 阶段使用从原始延迟照明着色器导入的代码计算每个光源的每像素可见性。使用Early Light List buffer中 Shadow Tile 条目中的光源列表,我们迭代它们以使用 Percentage Closer Soft Shadows 生成阴影,但可以用任何其他技术替换它。 Output: VisibilityBuffer 此缓冲区包含 8x8 内存块,用于存储shadow tile的每像素光可见性。这是延迟阴影系统所需的最大中间缓冲区,一旦照明阶段完成,就可以在帧的其余部分丢弃(其他缓冲区也是如此)。每个像素使用 8 位来表示光可见度的百分比,但 4 位可能就足够了,具体取决于项目的需要。 ’Generate Deferred Shadows’ compute shader pseudo code 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051...
3.7k 词
FFXVI Shadow Part III正文Part III :Find Lights此第 3 阶段过滤来自 Tile Group Light Mask Buffer 的光index,对每个 Shadow Tile 进行更准确的每pixels测试。由于之前的结果由多个阴影图块共享,并且 Froxel 测试会产生误报,因此我们在下一步计算阴影之前尽可能多地消除阴影当每个计算线程处理 1 个pixels时,我们读取场景深度并迭代 Tile Group Light Mask Buffer 条目中的 Tile Group 灯光。shadow tiles考虑当光源在其至少一个pixels的范围内时,该光源是有效的。 在阴影图块中发现的光源近似值的精度误差。此处显示了两个 Froxel,由它们的 Shadow Tile 绑定加上最小和最大像素深度分隔。在Shadow Tile 1中,使用精确测试时,只有灯光A和D才能找到。通过更快的近似值,灯光 B 和 C 也会被错误地检测到(对这个阴影图块的像素没有影响)。Light B,因为它位于 Shadow Tile Froxel 内部。和光 C,...
5.1k 词
FFXVI Shadow Part II正文Part II :Approx主要有两个目标 查找每个阴影图块的潜在有效光源 储存在构建的光源列表里 从depthBuffer 1 获取每个shadow tile的最小和最大场景深度,通过他们于屏幕坐标组合生成Froxel(视锥体素,使用tile的坐标跟最近/远深度的位置定义视锥体的子部分) 从Tile Light Mask Buffer 和 zBin Buffer中找到Froxel有效的光源下标,通过使用快速球体测试以及Froxel的范围点判断每个光源该测试取自文章 https://bartwronski.com/2017/04/13/cull-that-cone/ 输出1: Tile Group Light Mask Buffer(tile组用于查找近似的光的可见)输出2: Tile Light SlotID Buffer(Tile Light SlotID Buffer GPU 缓冲区,用于存储在近似阶段分配后每个 Shadow Tile 的 Light SlotID。)(Tile Light SlotID:...
2.2k 词
FFXVI Shadow Part I PDF:http://www.jp.square-enix.com/tech/library/pdf/2023_FFXVIShadowTechPaper.pdf 前置补充Tile-Based ShadingTile-Based Shading(也被叫做屏幕空间分块着色)的主要思想是将屏幕空间划分为多个2D瓦片,然后对于每个2D瓦片,计算出和它相交的光源列表。在渲染时,对于每个2D瓦片,只使用与其相交的光源列表中的光源进行着色。 TBDR(Tile-Based Deferred Rendering)两个TBDR:一个是SIGGRAPH2010上提出的,通过分块降低宽带内存用量一个是PowerVR基于手机GPU的TBR架构提出的通过HSR减少OVERDRAW Clustered Deferred Rendering分簇延迟渲染-待补充 Tile-Based Deferred ShadingTile-Based Deferred Shading将传统的Deferred Shading的lighting阶段替换为light culling阶段来减...
2.3k 词
渲染架构IMR (Immediate Mode Rendering)IMR (Immediate Mode Rendering)是 PC 和主机 GPU 使用的渲染方式,是指:每一次渲染API的调用,都会直接绘制图形对象。因此,每一次物体颜色和深度的渲染,都要读写Frame Buffer和Depth Buffer (深度缓冲)。上图有2层结构:上半部分:渲染管线下半部分:涉及到的显存数据,包括几何数据、纹理数据、Depth Buffer (深度缓冲)、Frame Buffer从上图,可以看出:IMR (Immediate Mode Rendering)架构需要大量的带宽,这点可通过L1、L2缓存优化但对于移动端可怜的GPU尺寸和功耗需求,不可能将Cache做得太大。因此,通常对于移动端,是不可能使用IMR (Immediate Mode Rendering)的 TBR (Tile-Based Rendering)移动设备的显卡不能使用 IMR (Immediate Mode Rendering),使用的是TBR (Tile-Based Rendering),其核心思想是:将帧缓冲...
1.4k 词
注:原视频我只在GDC Vault看到,没有字幕以及翻译,很多地方可能并不准确整体架构System emitter结构 Emit 更新PSSL processing shader language 双缓冲结构 30帧 工作流Translucent 半透明Opaque 半透明Emit->update(基于状态)->Draw(不透明->半透明)->Sort 图形化界面控制 实时编辑 编译两阶段编译:Expression=>PSSLPSSL=>manchin code多数PSSL代码在模板.cs文件中PSSL编译通过#defines 和命令行参数输入到PSSLcompiler 参数大概有哪些函数(不是真实的) Emitter有父子级别Emitter分为EMIT_SPACE 跟 UPDATE_SPACE(查看特效跟查看特效过程)用于自动转换表达式可以显示转换CONVERT_POS(),CONVERT_VEC(),CONVERT_VELOCITY()有EMIT_EVENTS指定粒子发射计划BURST(1000);PASU...
170 词
模型vector向量(单独的矢量 随天气变化 暴风雨可能更长)noise 柏林噪声 curl噪声 (非真实 Track)Vorticles 粒子系统 (不可见的风产生以及粒子间相互影响 但使用较少)不可见的地方 (主要由粒子系统产生作用比如角色产生的局部干扰) Particle最明显被风扰动的东西(树叶,灰尘,烟雾等) 主要来自恶名昭著-次子 后面貌似都不是很重要