精华内容
下载资源
问答
  • 实时渲染

    千次阅读 2016-02-25 10:24:46
    实时渲染  视景仿真过程基本分为两个阶段:一是建模,二是渲染。  所谓建模,是指用点、线、面、贴图、材质等元素构建逼真的物体和场景,建模是视景仿真的基础。  所谓渲染,是指把模型在视点、光线、运动轨迹...

    实时渲染

        视景仿真过程基本分为两个阶段:一是建模,二是渲染。

        所谓建模,是指用点、线、面、贴图、材质等元素构建逼真的物体和场景,建模是视景仿真的基础。

        所谓渲染,是指把模型在视点、光线、运动轨迹等因素作用下的视觉画面计算出来的过程。   

        渲染的方式有两种:

        一种是离线渲染(如常见的影视动画),就是在计算出画面时并不显示画面,计算机根据预先定义好的光线、轨迹渲染图片,渲染完成后再将图片连续播放,实现动画效果。这种方式的典型代表有3DMax和Maya,其主要优点是渲染时可以不考虑时间对渲染效果的影响,缺点是渲染画面播放时用户不能实时控制物体和场景;

        另一种是实时渲染,是指计算机边计算画面边将其输出显示,这种方式的典型代表有Vega Prime和Virtools。实时渲染的优点是可以实时操控(实现三维游戏、军事仿真、灾难模拟等),缺点是要受系统的负荷能力的限制,必要时要牺牲画面效果(模型的精细、光影的应用、贴图的精细程度)来满足实时系统的要求。

     

        实时渲染与离线渲染的区别:

     

        离线渲染的典型应用是影视动画,实时渲染的典型应用是三维游戏。两者都是模拟真实和想象的世界,用高度细节模型,产生平滑连线的运动,并以一定的帧率进行绘制来达到对三维模型的渲染和演示,有一定的相似性,但区别也是很明显的。

         离线渲染主要用于电影、广告等预先设计好的模式的演示。实时渲染主要用于无预定脚本的视景仿真,例如飞行训练、3D游戏和交互式建筑演示等。

         离线渲染的每帧是预先绘制好的,即设计师设置帧的绘制顺序并选择要观看的场景。每一帧甚至可以花数小时进行渲染;实时渲染对渲染的实时性要求严格,因为用户改变方向、穿越场景、改变视点时,都要重新渲染画面。在视景仿真中,每帧通常要在1/30秒内完成绘制。

        离线渲染的重点是美学和视觉效果,主要是“展示美”,在渲染过程中可以为了视觉的美感将模型的细节做得非常丰富,将贴图纹理做到以假乱真的效果,并辅以灯光设置,最后渲染时还可以使用高级渲染器;实时渲染的重点是交互性和实时性,其模型通常具有较少的细节,以提高绘制速度并减少“滞后时间”(指用户输入和应用程序做出相应反应之间的时间)。比起离线渲染,实时渲染更看重对现实世界各种现象的模拟和对数据的有效整合,而不是炫目的图像。

         实时渲染的目标

         

         实时渲染的目标是:

        1 使操作者具有强烈的沉浸感;

        2 尽可能真实地模拟现实世界的尺寸、法则、限制等。

        3 必须达到每秒30到60之间的帧速度,以免太慢有断续感或太快浪费系统资源。

        4 合理地组织多边形模型:既有足够的面反映必需的细节,又不太精细而增加系统负担。

        5 优化模型的层次结构,设置模型控制(如DOF)、真实世界物理限制(如BoudingBox)等必要信息。

     

       实时渲染的作用

        在商业和军事领域,实时渲染系统提供了一个对技术、策略和可行性的廉价且安全的检验机制。对比真实

    的物理测试,实时渲染的优点是非常明显的。   

        

    展开全文
  • 前段时间开始阅读《Real Time Rendering 4th》(英文本,以下作《实时渲染》)的第八章,但是发现这一章无论怎么啃就是啃不明白,无论读到哪总觉得少了点怎么没有讲。后来跟公司一位做图形的同事讨论后被一句话提点...

    前段时间开始阅读《Real Time Rendering 4th》(英文本,以下作《实时渲染》)的第八章,但是发现这一章无论怎么啃就是啃不明白,无论读到哪总觉得少了点怎么没有讲。后来跟公司一位做图形的同事讨论后被一句话提点:《实时渲染》只是一本Reference。所以后来我查阅了大量的资料,总算是在这一章摸到了一丢丢皮毛。

    以下是总结的一些知识点,但远不仅如此,因为有太多东西书中只是提到一个名词,需要自己额外翻阅大量资料。期间翻阅的资料包括但不限于:各类博客,各种论文,维基百科,标准文件,视频和书籍。涉及的知识包括但不限于:光学,电磁学,生物学,色度学,摄影,色彩管理,图形学。总的来说,这个领域就是一个复杂的交叉学科,尽管它不会需要你对每个学科都精通,也不可能都精通,但是它会在某些地方不得不提及这些事情从而迫使你又不得不去了解。

    抱歉没有列出这些知识的引用,因为实在是太多了。有天晚上为了求证色度学的一个观点打开了不下30个网页,查了三个小时,最后只能从记忆中总结观点。

    读书笔记,如有错漏,还望指正!

    光是一种电磁波

    光其实是一种电磁波,波长从10pm(1埃,十分之一nm)的伽马射线到上千公里的无线电。人眼可感知的光叫可见光,只是这一整段波长中的一小段特定波长的光,从400nm的紫色光到700nm的红色光。蓝色光往短波延申即紫外线,红色光往长波延申即红外线。

    在这里插入图片描述

    注意,上面这张图中的颜色并不是我们所能识别的所有颜色。上面的每种颜色都是单色,即单一波长的光所呈现在眼睛里的颜色,这种光是单色光,也叫光谱色,表示它出现在上述的光谱中。

    描述光的物理量

    以下有几个用以描述光的物理量

    名称 符号 单位
    radiant flux,辐射功率 Θ watt(W),瓦特
    irradiance,辐照度 E W/m^2,瓦特-每平方米
    Radiant intensity,辐射强度 I W/sr,瓦特-每球面度
    radiance,辐射亮度 L W/(m^2sr),瓦特-每平方米球面度

    这些物理量都是从能量角度去描述光的(瓦特的单位是焦耳-每平方米)。他们分别描述了光在单位时间内通过截面或者立体角的能量。

    光谱功率分布

    光谱功率分布(SPD,Spectral power distribution)是从能量去描述一束光。我们日常所见到的光往往都不是由单一波长组成的,这束光内包含的不同的波长的光能量不同。这束光在波长上的能量分布就是这束光的光谱功率分布,它是一束光的身份证或者唯一标识。下面是两种激光和D65标准光源的光谱功率分布。可以看到激光的光谱功率分布非常窄,接近严格意义上的单色光。

    在这里插入图片描述

    光度函数

    光度函数(相对视见函数)。我们常说人眼对绿色最敏感,其实就是在陈述一个事实:人眼对不同波长的光的敏感度不同。这个敏感度是指:不同波长的光,相同的辐射功率,对人产生的视觉效果不同。由此可见,可见光就是视见率大于0的电磁波。明视下(photopic,指在明亮环境下的视觉)人眼对555.01nm波长的光(绿色)最敏感,并设敏感度为1,以此为标准去度量其他波长的光的敏感度可以得到一个 敏感度-波长 分布函数(下图黑色线),同理暗视下也可以得到一条分布函数(下图绿色线,峰值在498nm),这两者统一起来就是光度函数(相对视见函数)。光度函数描述了光在人眼上产生的实际效应,这种效应的差异是由人眼的结构所决定的。下图黑色部分有三条线,其实是明视色度函数的三种标准,其中实线部分是CIE(国际照明委员会)标准。

    在这里插入图片描述

    光度测量

    现在我们有了一套物理上衡量光的方法,还有一个光度函数。我们以光度函数为不同波长下的光的权值,对上述提到的四种物理量进行加权,即用原单位乘以光度函数上对应波长的敏感度,得到一个新的物理量,这个物理量从真实物理的角度结合人眼感知的效果去描述一束光。下面是上述四种物理量在用光度函数加权后得到的新的物理量对应表:

    辐射测量学单位 光度测量学单位
    radiant flux: watt (W),辐射功率:瓦特 Luminous flux: lumen (lm) ,光通量:流明
    Irradiance: W/m^2,辐照度:瓦特-每平方米 Illuminance: lux (lx),照明度:勒克斯
    Radiant intensity: W/sr,辐射强度:瓦特-每球面度 Luminous intensity: candela (cd),发光强度:坎德拉
    Radiance: W/m^2sr,辐射亮度:瓦特-每平方米球面度 Luminance: cd/m^2 = nit,亮度:尼特

    三色视觉理论

    三色视觉理论(Trichromacy)在19世纪末被提出。这个理论解释了人眼关于接收光的一系列机理,其中就包括上述人眼对光的敏感度现象的解释。这个学说简单描述就是:人眼视网膜上存在三种视锥细胞:感红视锥细胞,感绿视锥细胞和感蓝视锥细胞,这三种细胞分别对红色,绿色和蓝色光的刺激反应强烈,当受到光的刺激的时候,这三种细胞分别通过对应的三种神经纤维:感红神经纤维,感绿神经纤维,感蓝神经纤维向大脑传递不同信号,这三种信号在大脑中的最终效果就是我们所看到的彩色的画面。学名上这三种细胞叫L/M/S细胞,即分别对Long/Middle/Short三种波长敏感的细胞。

    每种细胞对不同波长的敏感度不同,例如感红视锥细胞的敏感度在红光附近达到峰值。我们将三种视锥细胞对光的敏感度以波长为变量绘制成图,这个图就是人眼的三刺激值曲线图。

    在这里插入图片描述

    横轴是波长,三个不同颜色的曲线表示红绿蓝细胞对不同波长的灵敏度。注意,这里的灵敏度是相对灵敏度。因为三种细胞的峰值不应该是一样的,但这里统一做了归一化。峰值灵敏度定为1。从横轴任意一点向上画一条线分别与三个曲线相交可以得到三个交点,交点的三个Y轴值记为(rho, beta, gamma),它表示当前波长的光对应的三种视锥细胞的灵敏度。

    色光混合与颜色空间

    在18世纪的时候,艺术家们就知道通过少数的几种颜料相互混合就可以作出色彩丰富的画。尽管现在我们知道颜料混合和色光混合不是一回事,但是这也提示了科学家们去探讨通过少数单色光去混合其他色光的可能性。格拉斯曼定律就是这个领域的一个成果。注意,这个定律只是个经验定律,它的提出没有依托严谨的科学论证。但是不妨碍我们使用它,因为至少是经验正确的。格拉斯曼定律的完整表述如下:

    1. 两种颜色外观上看起来不同当且仅当他们的色调,明度和饱和度不同。推论:每一种色光存在他的补色光,使得他们混合之后能够相互抹平光谱功率分布上的凹凸,从而得到一种无色光(灰色或者白色)。

    2. 混合色光的外观会随着组成它的色光变化而变化。推论:两种非互补的色光的色调会随着组成它的色光的强度变化而变化,而饱和度会随着组成它的色光的色调差距变化而变化。

    3. 存在两种不同光谱功率分布的光,但它们看起来是一个色光。推论一:将这两种光同时添加到另一个色光得到的混合色看起来是一样的;推论二:从任意一种混色光中分别剔除这两种光,得到的新的色光看起来是一样的。

    4. 混合光的强度是各个组成部分强度的总和。

    从格拉斯曼定律我们再整理一个结论,就是我们可以通过选取几种简单的色光,然后通过不同强度的混合,得到其他色光。上个世纪科学家们通过一个实验做了这样一个尝试:在左侧,每次选取一种光谱色。在右侧,总是选定相同的三种光谱色,即所谓的三原色,然后调整三原色的强度,使得他们混合的结果匹配左侧的色光。如下图:

    在这里插入图片描述

    然后将结果绘制成图。以波长为轴,然后将每种波长所需的三原色强度绘制成曲线,得到下图:

    在这里插入图片描述

    这就是色匹配函数图。从某个波长向上画一条垂线与三个函数相交,这三个点的Y值(r, g, b)就是混合成当前波长的色光所需的三原色强度。注意:红线有负值出现。这是因为不是所有的色光都能从三原色相加而得。在这种情况下,麦克斯韦尝试将红色光移到左边,对左侧的光进行逆向补偿,然后调整右侧的两个原色重新匹配。此时变成了 待匹配色光 + r = b + g,即待匹配色光 = b + g - r。所以这种情况下红光会出现负值。

    在这里插入图片描述

    注意,在光谱上选取的三原色不同,色匹配函数也不同。我们可以将第三种原色(上图中的Blue)的波长往长波调整,得到一个新的颜色匹配函数,如下图。是的,依然有负值,此时负值在蓝色线上。实际上,可以证明,对于使用真实色光作为三原色的颜色空间,它的颜色匹配函数中至少有一条线存在负数部分。

    在这里插入图片描述

    色匹配函数上三个函数都在处于零的时候,表示当前波长的光无法被三原色表示。可惜的是,即使我们不断谨慎调整三原色的选取,总有一部分颜色我们无法用三原色混合出来。即三原色体系下能够混合的颜色色域是有限的。上面使用RGB三种特定波长所能够表示的所有颜色构成一个颜色空间,即RGB色彩空间。现在可以给出两种结论:一是如果我们将三原色选得太近,得到的可表示色域就非常小。二是如果我们使用的原色更多,不是三原色,而是四元,五元甚至更多,则我们可以表达更广色域下的光。我们甚至可以不用光谱色做原色。

    为了处理色匹配函数中的负值,同时尽可能大地包含可描述的色域,CIE用数学方法构造了三种“不存在”的光,这三种光用以作三原色的色匹配函数有几个特点:不存在负值,所以在程序上很好处理;和三刺激值有很好的对应关系。CIE将这三种虚拟光分别命名为X,Y,Z,对应的由这三种虚拟光构成的色彩空间就是XYZ色彩空间。它与上面的RGB色彩空间存在一个线性映射的关系。

    在这里插入图片描述

    这个新的匹配函数和三刺激值能较好地对应上,这带来了XYZ不同的含义:XYZ不再代表颜色。回忆之前提到格拉斯曼定律的时候提到,虽然我们人眼通过感知RGB三个分量的光在大脑中综合出现实中的彩色世界,但是我们大脑并不能清楚地表述出当前颜色的RGB分量是多少。人类只能感知颜色的三种属性的变化:明度,色调和饱和度。其实XYZ色彩空间就是以明度,色调和饱和度为基底的色彩空间。在这里,Y就表示明度,XZ共同决定色调和饱和度,我们将色调和饱和度统称为色度(chromaticity)。例如从sRGB色彩空间到XYZ色彩空间转换的时候:
    Y=0.2127R+0.7152G+0.0722B Y = 0.2127*R + 0.7152*G + 0.0722*B
    直观上解释,每种色光对总体明度都有贡献度,但是因为人眼对绿色光最敏感,所以G的权重会很大。

    顺便一提,明度,色调和饱和度其实不是什么玄乎的主观名词。从SPD量化这些名词的话,SPD中的曲线越高,表示光的能量越高,明度也越高。SPD曲线中占主导地位的色光就是当前光的色调。SPD曲线中占主导地位的色光的比例越高,则光的饱和度越高。

    但无论如何,XYZ都是只在数学上存在的概念,它不像RGB色彩空间那样有现实的物理对象的对应。所以它可能比较难以理解,但是它方便计算,就足够了(在我查阅的众多资料中,有篇论文提到,XYZ其实现实中可以被产生,但我们会看不见它,即它至少不是可见光)。

    同样的,我们建立一个XYZ三维坐标系,然后将光谱中所有对应的点在坐标空间中标出来,得到如下图:

    在这里插入图片描述

    在得到的曲线上,任意选择两点,连一条线,线上的每一个点都表示我们人眼所能看到的某些颜色。所有这些点组成的集合会形成一个体积,即XYZ色彩空间。但是我目前找不到一张很合适的图。为了能够更加方便地使用XYZ色彩空间,科学家们选择将其进行降维。即投影到X+Y+Z=1的平面上,之后再将这个平面投影到原本的Z=0平面上,得到二维的XYZ色彩空间,这张图亦称作CIE 1931 色度图:

    在这里插入图片描述

    这个马蹄形弯曲的部分就是光谱色组成的线。这张图还有以下几个特性:

    1. 图中任意选择两点(两个颜色),它们连线上的所有点就是两种颜色所能混合出的所有颜色;

    2. 任意选择三点组成的三角形内部的所有点,就是以这三个点为三原色所能混合出的所有颜色。

    上图中的三角形就是sRGB所表示的色彩空间,黑色的点表示sRGB色彩空间中定义的白点。除了这个色度图之外,书中还提到了另一种色度图,它对应的是与XYZ所不同的色彩空间,即CIE 1976 UCS色度图:

    在这里插入图片描述

    这个色度图是为了弥补XYZ色度图的一个缺点:色度图中人眼可感知的两对颜色可能距离相差20倍。这种缺点是明显的,比如左上的绿色区域有大片难以分辨的绿色,从中挑选两个能够分辨的最近的点对距离可能会相隔很远。相比之下,CIE 1976 UCS就均匀得多。而sRGB色域在这个色度图的范围如上图中红色三角形所示。除此之外,上图还列出了其他几种色域,不同色域能够表达的色彩空间可能是不一致的。不同的设备可能兼容不同的色域,在色域与色域之间转换就需要涉及到色域映射了。

    除了上述提到的RGB和XYZ色彩空间,还有两个色彩空间也需要提及:CMY和HSV。

    CMY相当于 1-RGB 的结果。在RGB中,各分量越大,越接近白色,被称为加色空间。所以CMY中就相反,(0,0,0)表示白色,称为减色空间。这种色彩空间往往应用于印刷领域,这是因为颜料的混合和色光的混合是相反的结果。红色色光和蓝色色光混合,那混合光中光谱能量分布的红色部分和蓝色部分都会增大。但是红色颜料之所以呈现红色,是因为它对红色以外的色光吸收较强,所以红色颜料和蓝色颜料混合的结果只能是红色色光被蓝色颜料部分吸收,蓝色色光被红色颜料部分吸收,从而整体往黑色演进。所以色光三原色混合的结果是白色,而颜料三原色的混合结果是黑色。

    HSV色彩空间和XYZ很相似,三个分离分量也不对应显示物理中的色光。H(Hue)表示色调,S(Saturation)表示饱和度,V(Value of Brightness)表示亮度。这个色彩空间解决的问题是,在RGB色彩空间中,给定三个分量的值,我们依然很难描述出这个颜色,尤其对画家很不友好。

    注:关于这一节的内容很难理清思路,因为它涉及到很多历史问题,很多标准以及讲不清的人体视觉机理。这里推荐一本北京理工大学出版社的《高等色度学》,当当订购第二天到。但,依然远远不够。

    用RGB色渲染

    这个标题其实是一个疑问句:用RGB三色去渲染真的没有问题么?

    写过shader的同学一定很熟悉,当我们给想要渲染一个物体的时候,是这样计算它到达相机的颜色的:albedo * light_color。其中albedo即反照率,它从附着在物体上的纹理采样RGB。同时light_color也是一个RGB值。这是一个典型RGB渲染器的工作原理。它的意思是,按照色光混合定律,任意一种色光被拆解成了RGB三个分量,所以RGB表示光的颜色没有毛病。然后再乘以物体表面的RGB值,这里的RGB每个值都处于[0, 1]区间。物体表面的RGB值越高,表示它反射对应的色光越强烈。显然,如果一个物体RGB = (1,1,1) 的时候,物体在日光下应该呈现白色,因为它反射所有分量的光。当它接收只有R分量的色光照射的时候(0.8,0,0),两个向量各分量相乘,得到(0.8,0,0),所以物体白色物体被有色光着色将呈现有色光的颜色。这,很符合直觉。

    然而,将物体表面的反射光谱功率分布描述成反射RGB分量的光还是太过简化了。书中举了个简单的例子,如下图:

    在这里插入图片描述

    上图是照射在物体表面的光的光谱功率分布,下图是两种物体表面的反射光谱功率分布。显然,这两种物体将呈现不同的颜色:第一个物体因为只反射三种窄波段的光谱,所以入射光光谱功率分布左侧的波峰被抹平,反射光将呈现更少的短波分量,出射光会比入射光看起来更“暖”;而第二种物体反射光谱功率分布较均匀,可以认为它的出射光和入射光色调是一致的。

    上图中的两种反射光谱功率分布有现实背景。第二种反射SPD可能是我们见到的大多数物体,第一种可能是设计用于激光投影仪的屏幕材料。

    RGB渲染器下的物体就是第一种物体,它只负责计算是否反射RGB三个分量。在极端的情况下,RGB渲染器会产生严重的错误。实际上,正如上面所说,想要得到正确的结果,应该对物体的反射光谱功率进行密集采样,然后计算每个波长被反射的情况。这种时候光也不能简单地用RGB三色混合表示了,因为我们说过:两种不同光谱功率分布的色光可能呈现的是相同的颜色。但,显然,这很消耗计算量。这种基于光谱功率分布进行渲染的技术叫光谱渲染/光谱成像。这种技术不仅会用于渲染,而且已经在影视和遥感领域有重要应用。

    Gamma空间和线性空间

    线性空间就是数学上的那个原本的意思。这个空间至少会满足以下加法定律和乘法定律:
    f(a+b)=f(a)+f(b)f(ka)=kf(a) f(a+b) = f(a) + f(b)\\f(ka) = kf(a)
    假设f(x)表示能量为x的光产生的明度是f(x)f(x)。那么两个相同能量的光共同作用可以产生两倍的明度,即f(2x)=2f(x)f(2x) = 2f(x)。自然界中的光就是如此。然而反应到人眼却不是这样的。在一个房间里点亮一根蜡烛,人眼感受的变化为ΔYΔY,然后再放上一根同样的蜡烛,人眼感受到的第二次变化就小于ΔYΔY。这说明:人眼对于明度的变化不是线性的,相同能量的变化不一定会产生人眼感受到的相同的明度变化。再举一个例子,打印出一张从黑色到白色均匀变化的渐变带,这里的均匀变化是指人眼看到的均匀变化,所以我们所感受到的中灰色应该是在这个渐变带的中间:

    在这里插入图片描述

    物理上的中灰色部分的反射率应该是白色部分的反射率的一半,所以渐变带中的中点的反射率应该是纯白部分反射率的一半。然而事实上并不是,物理角度的中灰在渐变带靠近黑色端的1/5处左右。这意味着:人眼所感受到的明度会比物理实际偏亮。

    以物理上的明度增长为x轴,人眼所感受到的明度增长为y轴,可以得到一条曲线:

    在这里插入图片描述

    这条曲线大致是一个幂函数,记为 Output = Input ^ γ。这里的γ取值大约是1/2.2。

    但这不要紧。我们正常地对从物理世界接收到的光强进行编码,然后正常地按照编码显示出来就是我们人眼所感受到的“非线性”的世界。但问题依然没有这么简单。假如我们从0-N进行编码,N表示显示器所能表达的最高亮度。我们将从物理世界中接收到连续的亮度映射到离散的编码中,并将它一一在0-N上进行编码,因为是物理光强-亮度是线性的,所以编码也是线性的。这意味着编码增大一倍,所表示的亮度也增大一倍——至少从物理角度上是这样的,如下图。

    在这里插入图片描述

    在这里插入图片描述

    但是人眼不这么认为。因为人眼接收到的物理世界是非线性的,所以我们所感受到的编码的亮度是这样的:

    在这里插入图片描述

    在实际物理中你认为你有50%在对暗部进行编码,50%对亮部进行编码。而人眼因为看到世界会比实际更亮,它会认为你花了更多的编码在亮部上。

    如果你有足够多的bit编码,这没有问题。但是如果编码bit很少的情况下,因为暗部的编码不足,会导致图像中暗部部分会出现色调分离。因此,我们需要对编码重新安排。我们需要对物理中的光强的暗部安排更多的编码,从而呈现到人眼的时候,看起来是编码均匀的。这一步就是图片存储的Gamma编码(γ=1/2.2)。它整体将图片的数值变大,表现上就是图片变得更亮了。做了这样一层映射之后,原本由0.5编码表示的中灰阶现在由一个大于0.5的编码表示,即用来表示暗部的编码变多了。

    但故事还没有完,上面这个事实只是说明为什么我们需要对图片进行Gamma编码,但是并没有说明γ需要取多少值合适。我们还需要提及另一个跟γ息息相关的东西:阴极射线管(CRT)。阴极射线管是最早被应用的显示技术,这种技术会在阴极发射电子,然后通过横向和纵向电压改变电子束的方向,从而将电子轰击在屏幕上的每一个像素。很可惜,阴极射线管的明度变化也不是线性的。意思是说,在阴极所施加的电压增大两倍,得到的明度并没有也增大两倍。以电压增长为x轴,实际明度为y轴得到一张图,就是阴极射线管的电压-明度特性曲线:

    在这里插入图片描述

    这条曲线就很有意思,因为它大致也是一条幂函数,更有趣的是,它的幂值与上面的人眼明度曲线的幂值的倒数非常接近。这意味着,如果我们图片Gamma编码时,取值γ=2.2,那在显示器上显示的时候,因为显示器的这个非线性缺陷刚好帮我们做了Gamma解码。

    当然现在的显示器已经不是CRT了,显示上的光电特性可能尽管不是线性的,但是γ值可能不再是2.2。但是这不要紧,因为CRT在显示领域的重要地位,现在的显示器都会在硬件上兼容这一特性。

    因为Gamma编码是sRGB的标准之一,所以采用sRGB的图片存储都是经过Gamma编码的。这也是为什么有些文章会说,关于sRGB需要记住这是一个非线性的空间。

    但如果图片是用作渲染的,我们不能指望要到显示阶段再依靠显示器给我们解码,因为非线性编码是不能直接参与加法运算的。所以Gamma空间的纹理到渲染管道里一般都需要经过一次解码,所有的运算都是在线性空间中做,渲染好之后重新编码,最后显示器再解码输出。

    HDR

    HDR是高动态范围(Hight Dynamic Range)的缩写。动态范围在信号学中用来描述可变信号的最大值和最小值的比值。在这里表示设备能够显示的最大亮度和最小亮度的比值。因为显示器只有256bit来表示亮度范围,但是自然界动态范围高达10^8,我们无法在保证亮度精度的情况还要用这么少的位宽去存储这么高的亮度范围。

    当摄影设备接收到这么大的动态范围的亮度的时候,如何将这些光信号转化成有限的短缺的编码资源是一个难题。如果只有少数几个点特别亮,为了能够容纳这些所有亮度而将接收到的亮度取对数平均然后分布在编码范围里,就会导致其他正常的点变得很暗(平均值倾向于往极值的方向偏移)。色调映射就是为了解决这样的难题。关于色调映射主要有两种算法:全局算法和局部算法。两种算法各在性能和效果有长短,但他们都致力于解决上述问题,并尽可能保留图像的细节和对比度。

    在实时渲染领域,显示器的客观限制让显示器无法真实表达超出自身的亮度范围。但是HDR渲染有时会允许这种超亮的区域的亮度值大于1,渲染会对亮度大于1的部分做泛光处理来模拟超亮的部分。这种情况往往出现在强烈反光的地方,甚至模拟人从黑暗地方走向明亮地方的视觉适应过程。

    在这里插入图片描述

    展开全文
  • 随着社会的发展技术的提升,云计算技术...而实时3D渲染的应用,其传输、推广离不开云流送技术平台——3DCAT实时渲染云平台,下面带大家深入了解3DCAT实时渲染云如何助力游戏上云。 什么是云游戏? 云游戏(Cloud G

    随着社会的发展技术的提升,云计算技术得到越来越多人的重视。同时随着5G的落地,游戏产业也迎来了新的革命。一些游戏厂商为了寻求新的发展机会,推出基于云计算的游戏“云游戏”,将游戏平台带上了云端。云游戏的出现让玩家摆脱了对设备的依赖,通过普通的设备,也可以得到高性能、高画质设备的体验,这些体验质量的的实现都有赖于实时3D渲染。而实时3D渲染的应用,其传输、推广离不开云流送技术平台——3DCAT实时渲染云平台,下面带大家深入了解3DCAT实时渲染云如何助力游戏上云。

    什么是云游戏? - 3DCAT实时渲染云平台

    什么是云游戏?

    云游戏(Cloud Gaming)是一种以云计算技术为基础的在线游戏方式。在云游戏的模式下,所有游戏都在服务器端运行,将渲染后的游戏画面通过网络传送给用户。在云游戏场景下,游戏并不在玩家游戏终端,而是在云端服务器中运行,不需要任何高端处理器和显卡。可以说,云游戏摆脱了对硬件的依赖。对服务器来说,仅仅需要提高服务器性能而不需要研发新主机;对用户来说,可以得到更高的画质而不用购买高性能的计算机。也就是说,可以花一小笔钱租一个更好的计算机来玩各种游戏。

    3DCAT实时渲染助力游戏上云

    云游戏的实时3D渲染

    3D渲染是根据存储在计算机上的三维数据生成图像的过程。而在游戏的实时渲染中,3D图像的计算速度非常快,因此看起来像由很多个图像组成的场景,其实是在玩家与游戏互动时实时发生的。所以游戏中交互性和速度在实时渲染过程中起着重要作用的原因。即使渲染基于大量复杂的计算,通过实时渲染也可以实现非常出色的图形画面。

    实时3D渲染平台于云游戏的使用、推广帮助有哪些

    游戏上传3DCAT便于分享 - 3DCAT实时渲染云平台

    1.云游戏的游戏体验

    游戏的体验直接影响着游戏玩家会不会玩云游戏。当今优质的游戏层出不穷,玩家们对游戏的画面、剧情、操作方式的要求也越来越高,这也代表着这些内容需要进行大量的数据处理,硬件设备承载不小的算力负担。但如果使用市面上的实时3D渲染平台,如3DCAT实时渲染云,利用云端的海量GPU算力处理繁重的图像渲染计算并串流同步输出到终端设备,从而实现终端设备的轻量化,可以让玩家尽情的享受游戏中的乐趣,游戏开发商也无需担心算力问题。

    2.云游戏的内容开发

    社会的发展也影响着云游戏的类型,不过无论何种类型只有优质的内容才能吸引游戏的玩家。所以,云游戏需要有高品质,多种游戏模式的作品,才会吸引更多的玩家享受云游戏。而通过像3DCAT实时渲染云这样的云平台,游戏开发商在开发游戏的时候可以尽情发挥脑海中的蓝图,直接将开发的应用上传至云端,生成URL即可交互访问,加快云游戏开发的协作效率。通过3DCAT实时渲染云平台可以让这些实时3D画面效果的开发变得更加轻松,快速和实惠。

    云游戏利用云流送技术尽享高端画质

    3.玩家的游戏成本

    像云游戏的成本主要由设备、内容和带宽组成,越好的电脑配置可以带来更好的体验,但是玩家使用的设备费用也会随之增长。而通过3DCAT实时渲染云平台,玩家仅需要通过3DCAT,即可享受高画质、高配置的设备体验,而省下了购入设备的费用。

    3DCAT在云游戏中的应用

    3DCAT实时渲染云平台是瑞云科技旗下一个三维应用的托管运行平台,在云端提供强大的图形实时渲染计算服务,平台配备弹性GPU资源集群,支持自动负载均衡和伸缩扩容,支持海量用户同时安全访问应用。3DCAT为客户提供强大的实时3D渲染的同时,它在云端部署了高算力的NVIDIA RTX GPU,支持能在Windows平台运行的几乎所有渲染引擎,支持NVIDIA RTX实时光线追踪功能的开启,可更好的展现游戏画面。

    3DCAT实时渲染云平台在云游戏中的应用

    除了云游戏,目前,3DCAT实时渲染云可服务的领域包括:3D设计演示、BIM建筑设计、汽车可视化、GIS地理信息&智慧城市、CAD软件应用、云游戏、医疗培训演示、实验仿真/教学课件、VR/AR等。

    3DCAT实时渲染云平台

    随着5G和边缘计算的快速发展,各大厂商、媒体、以及机构等都在关注云游戏,使得其热度迅速攀升。相信未来3DCAT实时云渲染平台搭载5G的浪潮,将赋予云游戏极致的游戏体验,释放云游戏巨大的市场潜力,为云游戏带来高速发展的机遇。

    以上内容《3DCAT实时渲染云助力游戏上云!》由3DCAT实时渲染云平台原创,如需转载,请注明链接:https://www.3dcat.live/news/3dcat-game/

    了解更多实时渲染相关资讯,请关注3DCAT实时渲染云平台https://www.3dcat.live/


    相关阅读推荐:

    【云流送技术】为手办行业可以带来哪些变革

    【云游戏】携手云流送,让普通终端也可畅享高端游戏画质

    【虚拟仿真技术】给医疗行业带来新突破

    展开全文
  • ios-实时渲染.zip

    2019-07-11 19:04:07
    Storyboard 里面 实时设置视图属性 实时渲染
  • 实时渲染第四部

    2018-10-17 15:42:12
    实时渲染第四部完整pdf教程,
  • CATIA 实时渲染

    2011-04-09 14:44:59
    CATIA 实时渲染教程,教你渲染理想的效果。
  • DirectX实时渲染技术详解 GPU精粹实时图形编程的技术技巧和技艺 实时地形引擎(DirectX 9)
  • GPU上基于深度图像的实时渲染
  • 为了实现基于GPU的海浪特效实时渲染,以PM海浪谱为基础进行了研究,从而生成海浪高度场,并结合视相关反投影方法生成海浪网格,采用硬件着色器进行基于物理光照模型的实时光照处理,生成了具有较强真实感的海面效果,较好...
  • 实时渲染第7章——高级渲染

    使用灯光、着色、透视可以让物体更逼真。
    ——Jhon Constable
    Ground着色模型是在1971年发明的。Phong的镜面高光是1975年左右发明的。Blinn和Newell大约在1976年提出在物体表面使用贴图。这些技术是固定渲染管线的一部分,这些算法曾一度加速了图形学的发展。可编程的着色器的出现大大加速了很多的可能,现在的GPU可以计算任意的着色模型。这就从之前的“什么是可能的?”转变为“使用什么方法是最优的?”

    了解一些和渲染相关的物理和心理学原理对于研究这些课题是很重要的。前一小节介绍了如何控制流水线的技术以及他们背后的基本理论。本节将会介绍渲染的一些科学基础。辐射理论讲会被第一个介绍,因为他是光的物理传播的核心领域。我们能够感知颜色纯属心理现象。这个将在颜色学里面讨论。一个着色模型包含两个部分:光源+有材质的模型。我们有一节会着重介绍有很多的中的变换可能。最后一部分会介绍实现着色模型的高效实现。

    本节的所有的可能都是建立在一个基础的假设上。所有的光源都是从一个方向照射物体表面,对于区域光、间接光、环境光都没有考虑进去。第8章将会介绍更普遍的照明系统。

    7.1 辐射学
    第5章在介绍着色器模型的时候,粗略的介绍了辐射学理论。本章将会更深入的研究辐射学,并介绍一些新的特点。
    辐射学主要用来度量电磁的辐射。这类的辐射包含一些光子,光子会根据情况的不同,而表现出粒子或者波的两种特性。仅仅使用光子的粒子特性能够应对很大的一部分的需求。虽然有些物理现象如果没有考虑光子的波特性的话就不能够建模,但是,早期的甚至是高质量的批处理渲染都忽略了这一点。

    光子和波特性相关的属性不能够被丢弃,因为每个光子都有相关的频率和波长。这是很重要的一个属性,因为每个光子的能量和它的频率是成正比的,这个会影响光子和其他物体的交互。最重要的是,光子的波特性会影响很多的传感器,比如我们人眼睛的视杆和视锥。不同频率的光子如果被我们感知的话,就代表了不同颜色的光,当然也有没有被感知的光,这些都已经超出了人眼的极限。光子的波长λ(单位米),和频率ν(赫兹),以及能量Q(焦耳)之间的关系如下:
    在这里插入图片描述
    这里的c是光速((2.998×108 米/秒),h是Planck常数(6.62620 × 10−34 焦耳秒)。

    电磁辐射会有一个频率和能量的范围。从ELF(低频率极限)辐射波到gamma射线。光在的波长在380到780纳米之间是可以被人类感知的,所以只有在这个范围的可见光子,才会被渲染。图7.1展示了可见的光谱。光子的能量和频率是成正比的。越绿的光子能量越高,越红的光子能量越低。

    本节我们将讨论多种辐射单元和他们的之间的关系。他们的单元在表格7.1中列出:
    图7.1
    在这里插入图片描述

    表7.1
    在这里插入图片描述

    在辐射学中,基本单元能量单元或者是辐射能量Q,是用焦耳度量的,简写为J。每个光子都有辐射能量,正如我们看到的,和他的频率成正比。比如,如果光子的波长是550纳米,通过公式7.1,计算得到它的能量为2.77*10的18方焦耳。

    一个光源的辐射流量或者是辐射能量,用字母Φ 或者P表示,等于每秒发出的焦耳数量(dQ/dt)。瓦特W是每秒焦耳数的另外一个术语。原则上,衡量一个光源的辐射流量,是通过累加每秒释放的光子的能量来的得到。比如,一个电灯泡可能释放100瓦特的辐射量。看图7.2。
    在这里插入图片描述
    在第五章中简要的介绍了辐射度,它是辐射流量的密度,也就是(dΦ/dA)。辐射度的定义是和表面相关的,这个表面是空间虚拟的表面,最通常用的是物体的表面。在下一节的光学中,相应的照明量度是计算每平方米的光。
    在之前的介绍中,辐射度E用来计算光流入一个表面,M用来表示流出物体的表面的量。通常的术语辐射流量密度有时候指代的是这两个,也就是辐射度以及出射度。第5章展示了如何使用辐射度计算理想平行光的照明度。这类的光源对于这类情况,如和灯的距离远远大于渲染的场景,这是个很好的近似。如上图的一堆玩具是在放假的另外一侧。灯泡的辐射度EL(用和光线垂直的平面计算)这个值近似等于常量(在这个例子中,在可见的辐射区域,每平方米的0.3瓦特)。

    对于较近的光源(或者较大的场景),EL是不能是常量的。想象一个以灯泡为中心的球体,如7.2图的右上方所示,这个灯泡很小,我们假设所有的光线都是从中心点发射出来的。我们想计算一个特定方向(比如7.2图右上方的橙色箭头)的光源辐射是多少,我们构建一个较窄的圆柱体,它的轴是沿着橙色箭头的方向,它的顶是在灯泡的中心。让这个圆锥体和球体的相交,产生了一系列的切面,他们的面积也和距离灯光的距离的平方成正比。由于辐射流量穿过一个切面是相同的,所以辐射度会递减:
    在这里插入图片描述

    公式7.2中的系数是常量,他不会随着距离的变化而变化。
    在这里插入图片描述

    I,称为密度或者角度辐射度密度。如果距离r等于1,这个密度等于辐射度,换句话说,辐射密度等于在弥合的半径为1的球体表面的辐射量。半径为1的球体区域,可以用弧度来定义。一个角度从某种意义来说是一系列的方向。而弧的大小,等于和闭合的半径为1的圆相交的弧长。一个固定的角度是三维的——连续的方向集合,用立体弧度来衡量(简写为sr),它的定义为半径为1的球体的相交面的大小。固定的角度用符号ω表示。从现在开始,我们看到密度实际上是和角度相关的,也就是dΦ/dω,和辐射度不同的是,这个是和区域相关的辐射密度。密度是表示每立体角度的瓦特量。

    固定角度的概念不太好理解,这里有一个类比可以有助理解。固定角度和朝向的关系一样,每个表面区域都有表面的位置。区域就是这些地点的集合,而固定角度又是方向的集合。

    大多数的灯光源对所有的方向释放的能量不是都一样的。图7.2的灯泡在不同的方向上释放的强度是不同的,这个可以通过左上角图的箭头密度来观察到。右上角的图可以看到灯泡向某个角度释放的强度是15瓦特每立体角。

    在二维的情况下,2π弧度可以覆盖整个的单位圆。把这个扩展到三维的情况,4π立体角可以覆盖整个的单位球体。单位立体角的固定角度可以从图7.3查看。
    在这里插入图片描述

    在之前的几个图中,我们假设光源可以视为点。凡是能被近似为点的光源的叫做点光源。就好像平行光对于场景来说在很远地方,那么平行光就是很有用的抽象。而如果光源很小,与此同时光源又很远,那么此时可以视为点光源。平行光的抽象在于和场景的距离,而点光源的抽闲在于光源本身的大小。强度对于点光源来说能有效表示在不同方向能量变化。正如我们看到的,辐射度的大小与和点光源的距离平方成反比。什么时候使用这个近似是合理的呢?朗博在1760年提出5个规则。如果与光源的距离是光源宽度的五倍或者更多,那么这个强度的递减和距离的平方成反比的定律是合理的近似。

    在第5.4节,眼睛或者摄像机是传感器,所以他们对于渲染来说很重要。我们计算渲染方程的目的是沿着这个射线计算辐射度(从渲染物体的表面的顶点到摄像机)。辐射度测量的是单一一个射线的照明情况——这个就是区域和固定角度相关的流体密度,如图7.4所示。辐射度单位是每平米每立体角的瓦特数,公式如下:
    在这里插入图片描述

    分母中的dAproj,指的射线的dA投射到正交平面的量。
    在这里插入图片描述

    dA和dAproj的关系可以从图7.4看出。这个投射和θ的cosine相关,此角度是物体表面法线和射线的夹角。
    在这里插入图片描述
    在这里插入图片描述

    这个cos(θ)上划线,在page8中定义了,如果cos(θ)小于0,则返回0。什么情况下会小于0呢?当投射的方向在物体表面的后面,在这种情况下投射区域为0。

    和两个量相关的密度很难可视化。

    在这里插入图片描述

    Eproj指的是和射线垂直的面。
    在图7.5的左边展示的离开灯泡的射线拥有辐射度L。
    7.3 颜色学
    可见光的范围在380到780纳米之间。光发射到每个方向上,都会包含一些列的光子,光子的分布和波长相关。这个分布被称为光谱。如图7.7。
    人类可以识别大约1千万种不同的颜色。对于颜色认知,眼睛会有三个不同类型的接收雷达。每个接收器能接收到的波长是不同的。对于特定的光谱,大脑都会从三个接收器接收不同的信号。这就是为什么我们只需要三个数字就可以简单的表示任意的可见光谱。
    是哪三个数字呢。CIE提出了一些标准的测量颜色的条件,并使用这些条件做了颜色匹配实验。在颜色匹配中,三个不同颜色的灯被投射到白色的屏幕上,所以他们的颜色会会叠加起来称为一个整体的颜色。这个整体的颜色会有一个特定的波长。观察者可以改变三个颜色的灯,可以通过把手把颜色在-1到1之间做调整,直到测试的颜色匹配。负数权重也是需要的,像这类的权重意味着和权重相反的颜色被叠加上去了。一些灯的测试结果,所谓的rgb在图7.8中展示。每个颜色分类代表不同的波长,如r的波长为645纳米,g的波长为526纳米,b的波长为444纳米。
    这些曲线为我们提供了一个方法就是把光谱三个对应的值。给定一个光的波长,那么三个颜色的设置就可以从图中读取出来,然后通过调整按钮,设置灯光的条件,就可把对应的光展示在屏幕上。给定任意一个光谱,这些曲线可以和光谱进行相乘,然后在曲线底下的区域代表了和提供的颜色所匹配的大小。完全不同的光谱可以得到三个不同的权重,换句话说,他们对于观察者来说是相同。匹配光谱称为原色。
    Rgb三个分量不能代表所有的颜色,因为他们的颜色匹配曲线对于很多波长来说都有负权重。Cie提出三个不同的更高层的抽象光源,他们不是单调的光源。这些颜色匹配曲线用如下符号表示。他们的光谱在图7.9所示。颜色匹配函数为 y(λ) i。事实上。。。。

    展开全文
  • Direct3D实时渲染技术

    热门讨论 2009-07-23 23:54:54
    Direct3D实时渲染技术 Direct3D实时渲染技术 Direct3D实时渲染技术
  • Falcor是出自NVIDIA的一个采用C++、D3D(主要用于光线跟踪部分)、OpenGL等编写的开源实时渲染框架。Falcor通过提供了一系列丰富的图形效果,通常可以用于复杂的游戏引擎,以及模块化的渲染软件。Flacor还支持基于...
  • 基于快速引导滤波的景深实时渲染方法
  • 《DirectX实时渲染技术详解》(Kelly Dempski)【 重庆大学出版社】(1)
  • xrtl, 跨平台实时渲染库 跨平台实时渲染库 Linux/Mac CPU 英镑 状态: 目前提出库的基础,并从以前的内部项目开始按摩代码,使之可以用于 public 发布。 请耐心点 !现代 C 中编写高效跨平台渲染代码的轻量级框架。
  • DirectX实时渲染技术详解

    热门讨论 2012-09-15 16:57:56
    DirectX实时渲染技术详解的源代码,各个章节都有
  • 使用现代浏览器原生JS方式实时渲染播放MMD动画。仅需指定模型/动作VMD/镜头VMD/BGM即可使用
  • 通过选择不同参数,实时渲染按钮的样式,并且实时生成QSS代码,直接使用即可达到想要的效果,很方便。
  • directX编程实时渲染

    2011-04-11 14:47:01
    directX编程实时渲染,讲的是用的主要的关键技术。各种算法
  • 光影实时渲染总结

    2020-04-03 22:42:13
    1.1 直接光照实时渲染 (直接光照:表示直接从光源发射出来照射到物体表面后,光线经过物体表面的一次反射后直接进入摄像机) 1.1.1Lambert光照模型 (光照模型:模拟物体表面的光照明物理现象的数学模型) (1...
  • 立方体 在ASCII中实时渲染的旋转立方体
  • 实时渲染”主要应用于游戏领域,它能够将图形数据实时转化为极具真实感的 3D 画面,是决定游戏体验的关键因素之一。对于实时渲染而言,最大的挑战即是渲染速度。通常来讲,渲染一屏幕的游戏场景的图像,至少要在 1...
  • 游戏开发相关实时渲染技术之体积光v0.1游戏开发相关实时渲染技术之体积光v0.1游戏开发相关实时渲染技术之体积光v0.1
  • 本篇文章主要介绍了vue watch自动检测数据变化实时渲染的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • DirectX实时渲染技术详解[(美)Kelly.Dempski扫描版],含源码,PDF含目录索引,点击目录直达章节。
  • Unreal Engine4官方讲解实时渲染的未来(中文版),实时渲染的未来是可以预见的到的。希望后面我的游戏画面越来越好
  • 实时渲染——三种渲染方法介绍

    千次阅读 2017-02-25 11:08:30
    实时渲染,一般有三种渲染方法,多光源一次渲染,多光源多次渲染和延迟着色。多光源一次渲染:对于每个物体,计算所有光源对其的影响来对该物体进行渲染for each object do for each light do framebuffer = light...
  • CarbonRender:基于C ++和OpenGL的实时渲染引擎
  • 2分钟,感受Lavina带来全新的实时渲染体验!
  • [DirectX实时渲染技术详解].(Real-time.Rendering.Tricks.and.Techniques.in.DirectX).(美)Kelly.Dempski.扫描版.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,460
精华内容 1,784
关键字:

实时渲染