阴影形成方法和系统技术方案

技术编号:5986103 阅读:217 留言:0更新日期:2012-04-11 18:40
公开了一种阴影形成方法和系统。其中,该方法包括:获取并记录需要渲染的场景中的多个可见像素的深度信息,其中所述多个可见像素中的任意一个可见像素的深度信息包括所述一个可见像素所在的三角形的各条边的边方程系数以及所述一个可见像素所在的三角形的各个顶点的深度值,所述三角形是通过对所述需要渲染的场景进行三角化形成的;在当前需要渲染的像素不是所述多个可见像素之一时,根据所述多个可见像素中的一个或多个可见像素的深度信息获取所述当前需要渲染的像素的深度值;在所述当前需要渲染的像素的深度值小于所述当前需要渲染的像素与光源之间的实际距离时,将所述当前需要渲染的像素渲染成阴影颜色。

【技术实现步骤摘要】

本专利技术涉及图形处理领域,更具体地涉及一种阴影生成方法和系统。
技术介绍
阴影图(Shadow Map)是一种基于深度图(D^th Map)的阴影生成方法,由Lance Williams 于 1978 年在文章"Casting curved shadows oncurved surfaces,,中首次提出。 该方法的主要思想是在第一遍渲染场景时,将场景的深度信息存放在纹理图片上,这个 纹理图片称为深度图(深度图是一张二维图片,其上的每个像素都记录了从光源到遮挡物 (即阴影生成物体)上的某个采样点的距离,并且这些像素对于光源而言是“可见的”。“可 见”像素是指以光源为观察点,光的方向为观察方向,设置观察矩阵并渲染所有遮挡物,最 终出现在渲染表面上的像素。深度图中的像素的深度值记为lenthl);然后在第二次渲染 场景时,将深度图中的信息Iengthl取出,和当前采样点与光源的距离length2做比较,如 果Iengthl小于length2,则说明当前采样点被遮挡处于阴影区,然后在片段着色程序中, 将对应于该采样点的像素设置为阴影颜色。在传统的阴影图方法中,深度图上的每个像素(下文中称为可见像素)都记录了 从光源到遮盖物上的采样点的距离(即,像素的深度值)。在第二次渲染场景时,如果将要 渲染的像素不是深度图中的任意一个可见像素,则这个将要渲染的像素的深度值可以通过 对深度图中记录的与该像素相邻的可见像素的深度值进行内插得出。由于深度图中记录 的各个可见像素的深度值不是线性连续分布的,所以这种内插将导致遮挡物边缘的混淆效 应。图1示出了传统的阴影图方法的示意图,其中深度图用来记录投影平面到光源之 间的遮挡物上的采样点与光源之间的距离(即,可见像素的深度值)。由于深度图仅记录了 与遮挡物上的各个采样点对应的可见像素的深度值,而上述两个渲染处理的采样点通常不 同,所以如果第二次渲染场景时某个像素对应的采样点不同于深度图中的任意一个可见像 素对应的采样点,则第二次渲染场景时该像素的深度值可以通过对深度图中的多个可见像 素的深度值进行线性内插得出,即是深度图中的多个可见像素的深度值的线性内插结果。 但是,如图1所示,深度图不是线性连续函数,这种线性内插将导致遮挡物的边缘的混淆。
技术实现思路
鉴于以上所述的一个或多个问题,本专利技术提供了一种新的阴影生成方法和系统。根据本专利技术实施例的阴影形成方法,包括获取并记录需要渲染的场景中的多个 可见像素的深度信息,其中所述多个可见像素中的任意一个可见像素的深度信息包括所述 一个可见像素所在的三角形的各条边的边方程系数以及所述一个可见像素所在的三角形 的各个顶点的深度值,所述三角形是通过对所述需要渲染的场景进行三角化形成的;在当 前需要渲染的像素不是所述多个可见像素之一时,根据所述多个可见像素中的一个或多个 可见像素的深度信息获取所述当前需要渲染的像素的深度值;以及在所述当前需要渲染的像素的深度值小于所述当前需要渲染的像素与光源之间的实际距离时,将所述当前需要渲 染的像素渲染成阴影颜色。根据本专利技术实施例的阴影形成系统,包括深度信息记录单元,被配置为获取并记 录需要渲染的场景中的多个可见像素的深度信息,其中所述多个可见像素中的任意一个可 见像素的深度信息包括所述一个可见像素所在的三角形的各条边的边方程系数以及所述 一个可见像素所在的三角形的各个顶点的深度值,所述三角形是通过对所述需要渲染的场 景进行三角化形成的;深度信息获取单元,被配置为在当前需要渲染的像素不是所述多个 可见像素之一时,根据所述多个可见像素中的一个或多个可见像素的深度信息获取所述当 前需要渲染的像素的深度值;以及像素渲染执行单元,被配置为在所述当前需要渲染的像 素的深度值小于所述当前需要渲染的像素与光源之间的实际距离时,将所述当前需要渲染 的像素渲染成阴影颜色。本专利技术通过存储可见像素所在三角形的三条边的边方程系数和三个顶点的深度 值,而不直接存储可见像素的深度值,可以解决传统的阴影图方法中存在的物体边缘混淆 的问题。附图说明从下面结合附图对本专利技术的具体实施方式的描述中可以更好地理解本专利技术,其 中图1是传统的阴影图方法的示意图;图2是二维地示出根据本专利技术实施例的阴影形成方法/系统的原理的示意图;图3是根据本专利技术实施例的阴影形成方法的流程图;图4是根据本专利技术实施例的阴影形成系统的框图;以及图5是根据本专利技术实施例的阴影形成方法/系统的应用示例的示意图。具体实施例方式下面将详细描述本专利技术各个方面的特征和示例性实施例。下面的描述涵盖了许多 具体细节,以便提供对本专利技术的全面理解。但是,对于本领域技术人员来说显而易见的是, 本专利技术可以在不需要这些具体细节中的一些细节的情况下实施。下面对实施例的描述仅仅 是为了通过示出本专利技术的示例来提供对本专利技术更清楚的理解。本专利技术绝不限于下面所提出 的任何具体配置和算法,而是在不脱离本专利技术的精神的前提下覆盖了相关元素、部件和算 法的任何修改、替换和改进。为了解决图1所示的传统的阴影图方法存在的问题,本专利技术提供了一种新颖的阴 影形成方法和系统。图2是二维地示出根据本专利技术实施例的阴影形成方法/系统的原理的 示意图。如图2所示,对于图1所示场景中的各个可见像素的深度值,可以由以下5个函数 FO (χ) F4 (χ)表示FO (χ) = k0*x+b0,0 ≤ χ ≤ X0Fl (χ) = k^x+bi, X0 ≤ χ ≤ X1F2 (χ) = k2*x+b2, X1 ≤ χ ≤ X2F3 (χ) = k3*x+b3,X2 ≤ χ ≤ X3F4 (x) = k4*x+b4,χ ^ X3其中,Fn(x)表示可见像素所在曲线的曲线方程。En = (kn,bn,Xlri,xn)包括了描 述Fn(X)的充足信息。每个可见像素所在的曲线只有一条,所以每个可见像素的深度值可 以由一个曲线函数来表示。可以在深度图中记录每个可见像素的曲线函数信息En(s,t), 其中,s,t是可见像素的位置坐标。对于例如图2中的像素V,在第二次渲染场景时,可以从深度图读取可见像素L4和 L5的曲线函数信息。L4的曲线函数信息是E0,而L5的曲线函数是E1。当计算像素V的深 度值时,将像素V的坐标值χ与FO的适用范围和Fl的使用范围进行比 较,可以确定像素V所属的曲线函数。然后可以使用这个曲线函数来计算像素V的深度值。 使用这种方法,可以解决传统的阴影图方法存在的问题。在三维投影处理中,深度图是一系列的二维函数fn(x,y)。最接近光源的遮挡物 上的采样点在深度图中的相应像素位于对遮挡物及其周围物体组成的场景进行渲染的过 程中形成的三角形中(即,在对遮挡物及其周围物体组成的场景进行渲染之前,对遮挡物 及其周围物体组成的场景进行三角化等处理而形成的三角形)。所以可以使用遮挡物上的 采样点在深度图中的相应像素所在的三角形的各条边的曲线函数来创建fn(x,y)。例如, 对于深度图中的可见像素n,其深度信息可以记录为En = (a0n, b0n, c0n, aln, bln,cln, a2n, b2n,c2n,d0n, dln,d2n),其中,aO a2,bO b2,cO c2是可见像素η所在的三角形的三 条边的边方程系数,d0, dl本文档来自技高网
...

【技术保护点】
1.一种阴影形成方法,包括:获取并记录需要渲染的场景中的多个可见像素的深度信息,其中所述多个可见像素中的任意一个可见像素的深度信息包括所述一个可见像素所在的三角形的各条边的边方程系数以及所述一个可见像素所在的三角形的各个顶点的深度值,所述三角形是通过对所述需要渲染的场景进行三角化形成的;在当前需要渲染的像素不是所述多个可见像素之一时,根据所述多个可见像素中的一个或多个可见像素的深度信息获取所述当前需要渲染的像素的深度值;以及在所述当前需要渲染的像素的深度值小于所述当前需要渲染的像素与光源之间的实际距离时,将所述当前需要渲染的像素渲染成阴影颜色。

【技术特征摘要】

【专利技术属性】
技术研发人员:白向晖谭志明洲镰康
申请(专利权)人:富士通株式会社
类型:发明
国别省市:JP[日本]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1