[gdc23]《战神:诸神黄昏》中的积雪系统

news2024/11/15 5:09:49

在这里插入图片描述

overview

gdc23上santa monica带来基于tesselation的displacement map的可交互积雪系统,这是一个对于前作(战神4)的screen space parallax mapping的升级,而且是一个由自身render programmer在一个项目周期内,完成的:

  • 丰富&顶尖质量的
  • 性能友好的
  • 不需要美术很多设置(基本就是全局参数)
    系统;
    talk本身基本完整介绍了整个研发的提出,prototype,polish,shipping的整个过程,对于产品团队可以说是含金量很高;
    本文主要笔记一些重点;

screen space parallax的问题

在这里插入图片描述
gow4的积雪系统这样,应该说正常质量已经不错了;
主要做法就是有一个积雪痕迹的render target记录,然后进行screen space 的raymarching,进而做parallax mapping;
在当时质量没问题,也是同期很多游戏的选择(the last of us 2…);
这里主要谈及一些缺点:

  • screen space raymarching,性能其实也不可控,在激烈战斗的情况下,几乎全屏做raymarching这个消耗是比较严重的;
    在这里插入图片描述
  • parallax mapping本身就是一个很有局限性的技术,没法做出距离camera很近的有深度的雪,上图中齐腰深的雪
  • 局限于terrain,这个对于美术的发挥限制很大;

displacement & tessellation

技术本身列出要点也比较直接:

  • top down记录场景本身的深度
  • top down记录交互的深度
  • 渲染一个heightmap的mesh,在有交互深度的附近进行tesselation(可以最小化triangle量)
  • 使用gpu driven的思路,对heightmap mesh做meshlet切分,进而各种充分culling
  • 还能procedual撒上一些小雪块增加细节
  • 阴影系列的优化技术都用上(scroll等)
    最后达成效果效率都很好的结果;

研发过程

在这里插入图片描述
看过全文的话,刚工作的同学可能会觉得技术本身是关键,工作多年的同学应该会觉得talk中的研发过程才是精华;
所以作者在开始的时候就指出,不要太关心技术细节(其实占比较低),要关注选择背后的原因;
整体看下来,应该说这套积雪系统是一个系统级别的系统,涉及面是比较大的,这种系统从开发量以及影响面比较大,那么就是非常依赖周围的系统&团队,以及和团队的交流。

美术会议

  • ragnorak开始的时候,一个art team和render team开了个会,里面artist每个都是10+年的经历的老法师,明确提出gow4的雪的系统的问题,然后列出新系统的需求:
    • 雪需要是到处都是10x于gow
    • 需要自动的铺设的工作量,不能是美术一点点弄
    • 需要在任何mesh上(而不是局限于terrain)
    • 需要是实际的geometry而不是parallax mapping了
    • 效率要好
    • 要能够ps4上跑得起来,并且能scale up到ps5上面
      然后美术给出的需求的说明是这样的:
      在这里插入图片描述
      (有maya的prototype,各种说明。。。有点专业呀!!!)

开发过程

其实是非常面向产品的,就是围绕产品来组织技术,而不是一个tech oriented;
第一个版本的prorotype,只有geometry的tesselation
然后尽快进版本,review,迭代。
增加细节,normal等等;
并且同组的同事也在处理hardware tesselation,这样帮助也很大;
然后新的render lead过来之后,也增加了作为particle collision的depth,
在这里插入图片描述
procedual放置的小mesh;
可以看到是各种各样的小mesh的组合,最后出来的产品结果;

sum

总结下来是一个很好的开发案例,通过团队的素养和配合,最后达成了一个很好的产品品质的结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/900649.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录算法训练营day38 | 70. 爬楼梯,509. 斐波那契数,746. 使用最小花费爬楼梯

目录 动态规划五部曲: 确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 509. 斐波那契数 类型:动态规划 难度:easy 思路: f(n) f&am…

基于Echarts的大数据可视化模板:智慧门店管理

目录 引言智慧门店管理的重要性Echarts在智慧门店管理中的应用智慧门店概述定义智慧门店的概念和核心智慧门店的关键技术智慧门店的发展趋势与方向智慧门店管理的作用Echarts与大数据可视化Echarts库以及其在大数据可视化领域的应用优势开发过程和所选设计方案模板如何满足管理…

Slingshot | 细胞分化轨迹的这样做比较简单哦!~(一)

1写在前面 今天是医师节,祝各位医护节日快乐,夜班平安,病历全是甲级,没有错误。🥰 不知道各位医师节的福利是什么!?😂 我们医院是搞了义诊活动,哈哈哈哈哈哈哈。&#x1…

【SS927V100/22AP70超高清录像机SOC 4KP60】

SS927/22AP70 是一颗面向市场推出的专业超高清智 能网络录像机SoC。该芯片最高支持四路sensor 输入,支持最高4K60的ISP图像处理能力,支持 3F WDR、多级降噪、六轴防抖、硬件拼接等多种 图像增强和处理算法,为用户提供了卓越的图像 处理能力。…

归并排序:从二路到多路

前言 我们所熟知的快速排序和归并排序都是非常优秀的排序算法。 但是快速排序和归并排序的一个区别就是:快速排序是一种内部排序,而归并排序是一种外部排序。 简单理解归并排序:递归地拆分,回溯过程中,将排序结果进…

Servlet 初步学习

文章目录 Servlet1 简介2 快速入门3 执行流程4 生命周期5 方法介绍6 体系结构7 urlPattern配置8 XML配置 Servlet 1 简介 Servlet是JavaWeb最为核心的内容,它是Java提供的一门 动态 web资源开发技术。 使用Servlet就可以实现,根据不同的登录用户在页面…

基于IMX6ULLmini的linux裸机开发系列八:按键处理实验

目录 GIC相关寄存器 GPIO中断相关寄存器 中断服务函数表 中断向量表偏移位置 make有报错 解决方法:error: for loop initial declarations are only allowed in C99 mode_‘for’ loop initial declarations are only allowed i_Young_2717的博客-CSDN博客 GIC…

19-普通组件的注册使用

普通组件的注册使用-局部注册 一. 组件注册的两种方式:1.局部注册:只能在注册的组件内使用 (1) 创建 vue 文件(单文件组件) (2) 在使用的组件内导入,并注册 components:{ 组件名: 组件对象 } // 导入需要注册的组件 import 组件对象 from.vue文件路径 import HmHeader from ./…

element表格多选实现

表格实现多选 实现表格多选很简单&#xff0c;只需要在表格里加上一列即可&#xff0c;加完之后就会在表格里出现一列白色的四方块按钮&#xff0c;可以多选&#xff0c;也可以单选 <el-table-columntype"selection"width"55"align"center"&…

第17集丨Vue中的render函数

目录 一、脚手架中不能使用template配置二、基本使用三、关于不同版本的Vue 一、脚手架中不能使用template配置 // 引入vue import Vue from vue import App from ./Appnew Vue({el:#app,template:<h1>hhh</h1>,comments:{App},})上面案例中&#xff0c;配置了temp…

Python标准库-追踪异常,定位问题-traceback

在日常的编程过程中&#xff0c;我们经常会遇到各种错误和异常。而当程序发生异常时&#xff0c;了解如何有效地追踪异常信息并定位问题&#xff0c;是每个开发者必备的技能之一。 Python 提供了一个强大的工具&#xff0c;称为 Traceback&#xff0c;它可以帮助我们跟踪异常的…

通过 OpenAI 引入superalignment

推荐&#xff1a;使用 NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景 首席执行官Sam Altman曾多次谈到AI的安全性&#xff0c;例如在美国参议院委员会上&#xff0c;他说&#xff1a; “我认为如果这项技术出错&#xff0c;它可能会出错......我们想对此直言不讳。我们希…

Vue 2 处理边界情况

访问元素和组件 通过Vue 2 组件基础一文的学习&#xff0c;我们知道组件之间可以通过传递props或事件来进行通信。 但在一些情况下&#xff0c;我们使用下面的方法将更有用。 1.访问根实例 根实例可通过this.$root获取。 我们在所有子组件中都可以像上面那样访问根实例&…

使用 umap 图形化展示原文在嵌入后的位置情况

使用 umap_plot 图形化展示原文在嵌入后的位置情况 1. 效果展示2. 工具函数3. 示例代码14. 示例代码2 1. 效果展示 2. 工具函数 import umap import altair as altfrom numba.core.errors import NumbaDeprecationWarning, NumbaPendingDeprecationWarning import warningswar…

对前端PWA应用的部分理解和基础Demo

一、什么是PWA应用&#xff1f; 1、PWA简介 ​ 渐进式Web应用&#xff08;Progressive Web App&#xff09;&#xff0c;简称PWA&#xff0c;是 Google 在 2015 年提出的一种使用web平台技术构建的应用程序&#xff0c;官方认为其核心在于Reliable&#xff08;可靠的&#xf…

kubernetes(namespace、pod、deployment、service、ingress)

NameSpace NameSpace名称空间 用来隔离资源&#xff0c;但是不隔离网络 使用命令行&#xff1a; kubectl create ns hello #创建 kubectl delete ns hello #删除 kubectl get ns #查看使用配置文件&#xff1a; vi hello.yamlapiVersion: v1 kind: Namespace metadata:name…

Transformer 相关模型的参数量计算

如何计算Transformer 相关模型的参数量呢&#xff1f; 先回忆一下Transformer模型论文《Attention is all your need》中的两个图。 设Transformer模型的层数为N&#xff0c;每个Transformer层主要由self-attention 和 Feed Forward组成。设self-attention模块的head个数为 …

回归预测 | MATLAB实现CSO-SVM布谷鸟优化算法优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现CSO-SVM布谷鸟优化算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现CSO-SVM布谷鸟优化算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一…

移植PeerTalk开源库IOS的USB通信监听服务到QT生成的FFmpeg工程

1.添加生成的PeerTalk库 下图选中部分为FFmpeg依赖库 将USB通信服务的m与h文件添加到工程 因为OC文件使用了弱指针,所以要启用弱指针支持 因为FFmpeg拉流动用到本地网络,所以要在plist文件中启动本地网络使用 设置PeerTalk为嵌入模式 设置Runpath Search Paths为@executable_p…

FPGA:uart原理+tx发送模块+rx接收模块

文章目录 一、串口通信二、UART通信三、tx发送模块四、rx模块接收 一、串口通信 处理器与外部设备通信的两种方式&#xff1a; 串行通信&#xff1a; 指数据的各个位使用多条数据线同时进行传输。 并行通信&#xff1a; 将数据分成一位一位的形式在一条数据线上逐个传输。 串…