一个图形引擎的画面风格是由那些因素(技术)决定的?

可能非常多人第一直覺會認為shader決定了視覺風格。但我認為能够從多個方面去考慮。

1. 幾何模型

一個畫面由多個成分組成,最主要的應該是其結構。在圖形學中通常稱為幾何模型。

一些引擎,如Quake/UE,有比较強的Brush建模功能(或應稱作CSG)。製作建築比较方便。而CE則有較強的大型地表、植被、水體等功能。做室外自然環境十分出色。

而还有一些遊戲類型專用的引擎。比如RTS/MOBA,可能會有特殊的基於tiling的建模方式。也有一些主要仅仅支持三角形網格(如Unity。雖然它也有簡單的地形建模)的引擎。這是最主要的。所以也最為通用,但在建立某些場景時製作效率和運行效率也可能較低。

圖:Unreal以brush製作主要的建築結構(https://docs.unrealengine.com/latest/INT/Engine/Actors/Brushes/index.html

圖:CE的地形、植被、水體

理論上,三角形網格是現時光柵化硬件的主要幾何圖元,其它形式的建模方式最終都要變成三角形網格渲染。然而,大部分遊戲使用實時渲染,在性能的限制下,引擎须要使用可見性判斷(visibility determination)、細緻程度(level of details, LOD)。

CSG、地型、植被、水體等較專門的建模方式能够更好地提供這些技術。也就是說,如Unity這種較簡單的引擎,因為設計的一些限制。和UE/CE構成遊戲世界的方式有一些區別。

模型也有其它形式的風格,比如體素。

圖:《Cube world》

2. 光照及材質

在藝術上,決定了畫面的構成後,须要決定怎樣去着色(shading)。這是關於光的傳播以及物體表面的互動。

光照包含光源的種類(點光源、方向光源、面積光源等)、靜態/動態、陰影。引擎的渲染管道非常大程度上決定了支持哪些光源以及數量。比如延遲渲染和Forward+等渲染管道支持大量的局部光源。而傳統的forward lighting在多個光源會有較多的渲染pass。

靜態的光源與靜態的場景能够使用預計算。簡單的光照貼圖(light map)仅仅能捕捉漫反射的效果。而像source引擎的radiosity normal mapping或是一些precomputed radiance transfer(PRT)的貼圖則能够有更細緻的表現。而CE的Light Propagation Volume (LPV)或一些引擎使用到的Voxel Cone Tracing能够帶來某程度的動態實時全局光照。

陰影其實也對遊戲的畫面風格帶來非常大的影響。

比如Doom3就使用到stencil shadow volume來做到動態點光源的陰影,帶來當時與別不同的畫面風格。

圖:DOOM3 開關陰影、鏡面反射的區別 (http://seiryu.cside.to/3dfps/Doom3/d3-setup.html)

引擎對材質的支持也非常影響到畫面風格。現時,照片真實感(photo realistic)風格會以基於物理的着色方法。

圖:基於物理的着色(非實時)。参考 SIGGRAPH 2013 Course: Physically Based Shading in Theory and Practice(內裡包含UE4的相關講義)

當然。不是全部遊戲都追求真實感,也有追求風格化的渲染效果。比如卡通渲染、水墨渲染等。這些風格化渲染。在支持可編程着色器的引擎中通常不難實現。但有時候也须要引擎提供足夠的客制化能力,比如。有些輪廓(silhouette)效果须要很多其它的render pass及/或render target。

圖:《大神(Okami)HD》。

為了讓美術製作獨特的材質。有些引擎(如UE)提供視覺化材質編輯工具,充分利用這些工具能够增強遊戲場景的多樣性。

圖:UE4的材質編輯器。

3. 動畫、特效及後期處理

除了以一幀一幀的畫面來營造遊戲的視覺風格。動畫、特效這些具時間性的視覺元素也是十分重要的。比如GDC2014中《Infamous: Second Son》談及為了表現超能力而開發的特效引擎。


圖:《Infamous: Second Son》利用curl noise技術製作的視覺特效。

詳見 GDC Vault - The Visual Effects of inFAMOUS: Second Son 講義。

後期處理(post-processing)也是對遊戲風格的重要部分。

動態模糊(motion blur)、景深(depth-of-field)、bloom、vignetting等用於模擬真實鏡頭的效果。而color grading能够營造出各種遊戲氛圍。

動畫方面,除了常見的以手工編制動畫樹及關鍵幀動畫的技術,有些引擎/中間件也會支持一些基於物理(如布娃娃/ragdoll),以及基於生物力學/人工智能的動畫方式。添加動畫的真實感。模擬柔體也能製造一些與別不同的風格。


圖:《爱丽丝惊魂记:疯狂再临》中利用柔體模擬的頭髮效果。

詳見 爱丽丝的发丝──《爱丽丝惊魂记:疯狂再临》制作点滴

4. 總結

遊戲引擎(或是具體遊戲經過客制化的技術方案)的多個方面決定了美術上能够做出那些風格。

為了製作獨特風格的遊戲。引擎本身提供的自由度及擴展性也是重要的因素。

时间: 2024-10-11 11:38:07

一个图形引擎的画面风格是由那些因素(技术)决定的?的相关文章

【译】使用python创建一个简单的restful风格的webservice应用

这是一个如何使用python快速构建简单restful风格webservice的应用教程. 1.分析rest路由规则 rest风格的服务通常使用web.py来创建服务器端脚本,一般情况下包含两个url路径: 一个是为了查询所有用户,一个是为了查询单个用户. 例如下面的url: http://localhost:8080/users http://localhost:8080/users/{id} 2.搭建web.py环境 首先你应该安装web.py模块到你的python环境下.如果你之前没有的话

关于在unity vr中,可以让电脑显示屏幕显示另一个视角的画面,而步影响到vr里面的视角操作 VR Asymmetrical

第一步是新建一个场景 然后不要删除场景中的main camera,把这个摄像机当成运行后,另一个视角 然后将steam vr plugin导入,将里面prefab文件中的cameraRig拖到场景中,然后建一个脚本,在start里面就执行一行代码 UnityEngine.VR.VRSettings.ShowDeviceView=false; 这个属性的意思是: Description 描述 Globally enables or disables VR for the application.

typescript-koa-postgresql 实现一个简单的rest风格服务器 —— typescript 开发环境配置

最近需要用 nodeJS 写一个后台程序,为了能够获得 IDE 的更多代码提示,决定用 typescript 来编写,随便也学习下 ts,在这记录下实现过程. 1.新建文件夹 typescript-koa-postgresql,初始化项目 yarn init -y 2.安装 typescript yarn add typescript @types/node --dev 3.配置  typescript 编译环境,在项目根目录下新建文件 tsconfig.json 1 { 2 "compiler

PS调出冷绿色电影画面风格

原图 一.按照惯例先磨皮,我修照片的习惯是,先拉一层色阶,使直方图平均分配,画面会显得没那么灰,当然,这只是个人喜好,先加后加都没所谓. 二.由于脸部的亮度不够,显得有点脏.所以这一步主要是通过拉曲线去提亮脸部,加蒙版,只提脸部的那个范围,不用做得很精细. 三.整体有些发灰,增加曲线图层,提高对比度.但这一次的调整,导致脸部偏亮,因此加蒙版刷几笔,降一些亮度. 四.饱和度稍微有点偏高,但电影色调都较为深沉,因此稍微减一点饱和度,让色彩中和一点. 五.运用曲线,调节画面的整体氛围.既然要调成发灰偏

typescript-koa-postgresql 实现一个简单的rest风格服务器 —— 连接 postgresql 数据库

接上一篇,这里使用 sequelize 来连接 postgresql 数据库 1.安装 sequelize,数据库驱动 pg yarn add sequelize sequelize-typescript pg reflect-metadata 2.新建配置文件夹 conf 及 配置文件 db.conf.ts /** * @name: 数据库配置 * @param : undefined * @return : undefined */ export const dbConfig = { hos

一个java工程师的前6年工作部分技术积累(一)

一.  JavaScript 1.判断输入0-1之间的小数 function checkPower(power) { var str = power.value; var reg = /(^[1]$)|(^[1]\.[0]{1,2}$)|(^[0]\.[1-9][0-9]{0,1}$)|(^[0]\.[0-9][1-9]$)/; if(!reg.test(str)) { alert('权重必须为大于0小于或等于1的小数!'); power.focus(); return false; } ret

一个java工程师的前6年工作部分技术积累(二)

五.  Oracle 1.创建表 CREATE TABLE BD_ASSESS_PERIOD_TYPE_T ( PERIOD_TYPE  VARCHAR2(16 BYTE)                NOT NULL, PERIOD_NAME  VARCHAR2(16 BYTE)                NOT NULL ) TABLESPACE TS_TAB_BASE03 PCTUSED    40 PCTFREE    10 INITRANS   1 MAXTRANS   255

一个优秀的SEOer必须掌握的三大标配技术

首先,认识网页代码是基础 这里所讲的网页代码是指HTML代码,并不是指复杂的PHP模板技术.一般的培训机构总是提倡学SEO不用学网页代码,只要会购买域名空间搭建网站就行,因为现在的网站模板太丰富了,对于一个刚入门的学习者来说是没错的.但是作为一个优秀的seoer,学会网页代码可以对网站的布局和内容规划进行DIY,更有利于用户体验,因为不是所有的模板都是按照seo的思路来设计的. 事实也证明,有一些程序员出身转入seo行业的从业者网站排名做得会更好,当然我们不能舍本逐末,先全身心地学习代码,然后再

【转载】写一个js库需要怎样的知识储备和技术程度?

作者:小爝链接:https://www.zhihu.com/question/30274750/answer/118846177来源:知乎著作权归作者所有,转载请联系作者获得授权. 1,如何编写健壮的javascript代码,鲁棒性,简单总结几条我觉得是常识的事:1.1 一个javascript库最好的实现方式是占用最少的命名空间,比如window对象上或者global对象上只占用一个引用.1.2 健壮的js程序对输入都会有完善的类型检查和异常处理,边界值的判断.1.3 对js的几种继承方式要足