游戏开发Camera之Cinematic Camera-深度


人的视觉系统是二维的,它通过生理和心理的暗示来感知图像的深度,在现实世界中视觉系统会自动用深度线索depth cue来确定对象之间的距离
游戏画面也是二维的,用x,y轴来定义,画面深度用z轴来定义,可以通过创造深度线索depth cue来产生画面纵深感。
强化Z轴,控制物体与周围环境的空间位置关系。

linear perspective线条透视

线条透视是一种纵深线索,他与大小和next纵深线索有关,下图是一条公路。

 


 
强化了近大远小的视觉效果。
下图人物的大小充当了上图的公路。
 

 

著名的Ames room视觉错觉,让人误以为两个人是在同一平面上的错觉,就是因为没有给出足够的透视线索,而且被屋子的“水平”地面和天棚所误导。实际上两个人是有深度关系的。

 
 
其实这个屋子是这样的


重叠

重叠是一种视觉暗示,也是一种重要的深度线索,经常出现在绘画、漫画、动漫等等,来体现前后关系。
如下图,我们看到的是三个“平面”此时看起来它们是同一平面。把它们加上遮挡关系,你的视觉就会暗示你红色在紫色上面,紫色在绿色上面。
 
遮挡关系产生的视觉欺骗,下图是正交透视正方体,你对他他既可以是俯视角度(左侧),也可以是仰视(右图),全部因为有一个蓝色长方形的重叠产生的深度效果传达给你的大脑。
 
思考:此时如果做一个视觉欺骗,把depth在后面的物体,比前面的物体后渲染,就会呈现后面的物体在前面的假象,此时会有什么效果呢?
举个动漫中的例子,非常平面的两个人通过重叠产生深度关系,下图二人如果把小狼放在小樱前面也不会有违和感。
 

relative height相对高度

此 处主要是地平线上下作对比,因为地平线上的物体是以天空为对比,地平线下物体是以地面为物体。举一个最简单的例子,同样大小的飞机,在天上就是离你很远真 正的飞机,在地上就是离你很近的飞机模型。因为大脑默认把物体与地面和天空做对比,所以在地平线上物体被认为是离天空很近,所以让人感觉离得很远,而在地 面的物体大脑默认和地面作比较,所以让人感觉离的很近。
 
 

素描等绘画中的深度

素描中的深度主要是明暗关系,近大远小,近实远虚,前紧后松,
也有重叠的使用,对远处物体的边缘进行虚化,细节弱化,颜色接近于背景色等等。



relative size相对大小

相对大小产生深度线索
借 用一果壳朋友的回答眼睛里的水晶体相当一个凸透镜,视网膜相当像面。若看清楚某个物体,必须使它的像落在视网膜上。从人眼瞳孔中心对物体的张角与视角相 等,所以视角的大小决 定了视网膜上物体的像的大小。同样高的两棵树,离开眼睛远的一棵,它的视角比近处的那棵的视角小,因此,远处的树看起来比近处的小,近大远小就是这个道 理。 简单的说,就是视角不同。
原理如下图(博主简单画了个图。。不要介意。。)

 

 

如下图,蓝色小球缩小后明显感觉是在红色小球后面
   

比如电脑游戏之中的第一款FPS游戏,德军司令部3D(Wolfenstein 3D),就用这一点产生了深度。

 


aerial perspective空中透视

产生原因,大气散射,详见这篇文章unity3d shader之实时室外光线散射(大气散射)渲染 ,大气散射光,短波或蓝色波长的光易被大气粒子散射,所以远处物体大多偏蓝,这也是天空是蓝色的原因。阳光由于散射增加会减弱并变色。物体也会随着距离增加散射增加而减弱并变色。
 
大气中散射由多种原因产生,微粒,尘埃,水蒸气等等
散射分为瑞利散射Rayleigh Scattering和米氏散射 Mie Scattering  
瑞利散射是米氏散射的一种
当光线穿过大气层,大气中气体蓝色部分瑞利散射强烈,但是红色或黄色等波长长的瑞利散射很弱。
由于天空产生的蓝色的光的散射,阳光到地面的颜色发黄。在日出日落中, 由于空气密度的增加和地球表面附近的粒子,瑞利散射效应更明显。
相比之下,水滴组成云与可见光的波长大小类似,更倾向于米氏散射而非瑞利散射。假设所有可见光的波长分布大致相同,因此云看起来是是白色或灰色的。

米氏散射大多数为烟雾和云散射牛奶、生物组织和乳胶漆之类大粒子。
在多云天气主要是米氏散射(水滴)。发生米氏散射的介质中粒子大,为球形粒子
在空中透视中,近处远处的物体对比大概是这样的,颜色变化,边缘模糊,等等。
 

博主之前在unity引擎中做的散射渲染
 
 
 
这个在刺客信条中很常用啊,就算不去鸟瞰点,不触发信仰之跃,随便爬几层建筑,•••••••••••••••••随处都是空中透视
 
 
 
 
 


texture gradient纹理梯度

通过纹理的近大远小来产生深度

 

 

在游戏中通常用,地板纹理,石路,砖路等等体现深度,此方法经常与各向异性合用
比如 unity这个各向异性过滤的例子(左无右有),纹理的近大远小充分的产生了深度,这个例子还使用了线条透视。
 
GTA5中的例子
 
 





其他

不可能图形impossible figure

不可能图形impossible figure的深度,
 


阴影产生深度

大脑先验假设光线来自上方(太阳光)
 
 


figure-ground perception

 

博主近期渲染:最近用unity5弄的一些渲染

 

                              ---- by wolf96




转载于:https://www.cnblogs.com/zhanlang96/p/4925479.html

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

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

相关文章

500w 的引用类型和值类型到底有多大差异?

大家在写代码的时候,相信有很多朋友对 struct 认知不是很足,导致能用 class 的地方绝对不用struct,但大家有没有发现,最近的几个 C# 版本中,底层框架中有很多 class 的替代品,比如说:Task 和 Va…

list对象排序

在数据库中查出来的列表list中,往往需要对不同的字段重新排序,一般的做法都是使用排序的字段,重新到数据库中查询。如果不到数据库查询,直接在第一次查出来的list中排序,无疑会提高系统的性能。 只要把第一次查出来的结…

【转】HTML5移动端最新兼容问题解决方案

1、安卓浏览器看背景图片,有些设备会模糊。 用同等比例的图片在PC机上很清楚,但是手机上很模糊,原因是什么呢?经过研究,是devicePixelRatio作怪,因为手机分辨率太小,如果按照分辨率来显示网页&a…

一天不编程,脑子比猪笨

一天不编程,脑子比猪笨;一周不编程,爪爪变猪蹄。

hibernate注解方式来处理映射关系

在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说,萝卜青菜,可有所爱,每个人都有自己喜欢的配置方式,我在试了这两种方…

linux之vim复制多行、光标跳转到指定行、插入当前光标上和下行

1、复制多行 number yy 2、光标跳转到指定行 :line 3、插入当前光标到上行 O 4、插入当前光标到下行 o

提的最多的数据库“索引”,先来简单了解一下

前言现在的项目对于数据库操作基本上都是使用封装好的ORM框架,这样开发效率相对来说有所提高。但由于框架的封装,会自动生成SQL语句,这让一些小伙伴对SQL产生了一种陌生感(基本不写SQL),导致排查业务执行缓慢问题时比较盲目&#…

【个人阅读】软件工程M1/M2阶段总结

这次作业是好久以前布置的,由于学期末课程设计任务比较重,我在完善M2阶段的代码的同时又忙于数据库的实现和编译器的实现,一度感觉忙得透不过气来。。。。到这些都基本完成的时候,会看自己以前的阅读心得,觉得经过了M1…

Excel实用函数大全(名称、功能、说明、用法、举例)

我们在使用Excel制作表格整理数据的时候,常常要用到它的函数功能来自动统计处理表格中的数据。这里整理了Excel中使用频率最高的函数的功能、使用方法,以及这些函数在实际应用中的实例剖析,并配有详细的介绍。 1、ABS函数    函数名称:ABS    主要功能:求出相应数字…

DB2 SQL 递归实现多行合并

最终效果 原始数据: 转换脚本: WITH post_a AS ( SELECT DISTINCT T.EMP_NO,S.CODE_ FROM inscndb.DTFMA000_EMP_POST T ,VIEW_BI_POST S WHERE T.POST||-||POST2 S.POST ), post_b AS (SELECT emp_no,code_,ROW_NUMBER() OVER(PARTITION BY EMP_NO ORD…

C++之greater和less

1、greater、 less 他在头文件<functional>里面, greater和less都重载了操作符 定义如下: // TEMPLATE STRUCT greater template<class _Ty> struct greater : public binary_function<_Ty, _Ty, bool> { // functor for operator>bool operator()(cons…

mysql逻辑结构设计_数据库设计:逻辑结构设计

概念结构设计所得的E-R模型是对用户需求的一种抽象的表达形式&#xff0c;它独立于任何一种具体的数据模型&#xff0c;因而也不能为任何一个具体的DBMS所支持。为了能够建立起最终的物理系统&#xff0c;还需要将概念结构进一步转化为某一DBMS所支持的数据模型&#xff0c;然后…

.NET6之MiniAPI(二十五):Dapper

注&#xff1a;如果你使用Dapper一段时间了&#xff0c;这篇你可以跳过去了。在第十二篇中&#xff0c;我们聊过官方的ORM——EntityFramework&#xff0c;它可以把SQL细节都隐藏&#xff0c;这对于一些标准化的关系数据库项目非常便捷。今天&#xff0c;介绍另外一个流行的ORM…

移动端web开发整理

/* 移动端定义字体的代码 */body {   font-family: "Helvetica Neue", Helvetica; } ios端触摸时&#xff0c;会出现一个半透明灰色遮罩  如果想要禁用&#xff0c;可设置-webkit-tap-highlight-color的alpha值为0 body{-webkit-tap-highlight-color: rgba(0,0,…

LeetCode Implement Queue using Stacks (数据结构)

题意&#xff1a; 用栈来实现队列。 思路&#xff1a; 一个栈是不够的&#xff0c;至少要两个。 &#xff08;1&#xff09;插入。永远只插入到stack1中&#xff08;插到栈顶&#xff09;。 &#xff08;2&#xff09;弹出。如果stack2不为空&#xff0c;直接弹出stack2的栈顶&…

C++之STL之priority_queue

1、priority_queue介绍 priority_queue 是优先队列 模板声明带有三个参数,priority_queue<Type, Container, Functional> Type为数据类型,Container为保存数据的容器,Functional为元素比较方式 Container必须是用数组实现的容器,如 vector, deque不能用list, STL里面…

直角三角形知道两边求角度_每日一讲:解直角三角形(3.21)

考点一、直角三角形的性质 1、直角三角形的两个锐角互余&#xff1a;可表示如下&#xff1a;∠C90∠A∠B902、在直角三角形中&#xff0c;30角所对的直角边等于斜边的一半。3、直角三角形斜边上的中线等于斜边的一半4、勾股定理&#xff1a; 如果直角三角形的两直角边长分别为…

用VBA得到EXCEL表格中的行数和列数

用VBA得到EXCEL表格中的行数和列数 每种方法中上面的是Excel的行数&#xff0c;下面的是Excel的列数。 方法1: ActiveSheet.UsedRange.Rows.Count ActiveSheet.UsedRange.Columns.Count 缺点&#xff1a;有时可能会比实际数大一些&#xff0c;原因是如果你把最后几行&#xff0…

Javascript屏蔽鼠标的右键的两种方法。

方法一&#xff1a;利用鼠标button的键值 <script language"javascript">function blockright(oEvent) {var oDiv document.getElementById("display");if (window.event) oEvent window.event; //处理兼容性&#xff0c;获得事件对象if (oEvent.b…

Blazor University (4)组件 — 单向绑定

原文链接&#xff1a;https://blazor-university.com/components/one-way-binding/单向绑定源代码[1]此时我们在页面内显示了一个组件&#xff0c;但内容是静态的。我们真正想要的是能够动态输出内容。如果我们更改 /Components/MyFirstComponent.razor 的内容&#xff0c;我们…