CN116137051A - 水面渲染方法、装置、设备及存储介质 - Google Patents
水面渲染方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN116137051A CN116137051A CN202111358143.6A CN202111358143A CN116137051A CN 116137051 A CN116137051 A CN 116137051A CN 202111358143 A CN202111358143 A CN 202111358143A CN 116137051 A CN116137051 A CN 116137051A
- Authority
- CN
- China
- Prior art keywords
- normal
- texture
- textures
- different
- sampling
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/04—Texture mapping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/10—Geometric effects
- G06T15/20—Perspective computation
- G06T15/205—Image-based rendering
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Geometry (AREA)
- Image Generation (AREA)
Abstract
本申请实施例公开了一种水面渲染方法、装置、设备及存储介质,所述方法包括:获取基础法线纹理;根据所述基础法线纹理,生成至少两个衍生法线纹理;其中,各所述衍生法线纹理不同;根据至少两个所述衍生法线纹理,进行图像渲染;通过上述技术方案,在避免存储大量不同的法线纹理的情况下,兼顾了水面渲染的效率。
Description
技术领域
本申请实施例涉及计算机图像技术领域,尤其涉及一种水面渲染方法、装置、设备及存储介质。
背景技术
随着计算机图形技术的发展,三维可视化仿真技术的应用日益广泛。
现有技术中,通常使用法线纹理使静态的物体表面更为逼真,其中法线纹理又称凹凸纹理,是计算机图形学中,使物体表面仿真出褶皱效果的技术。然而,在对水体进行渲染的过程中,特别是针对海洋这种大面积水体,如果使用至少一个小的法线纹理进行重复渲染,会给人特别规律的感觉,不那么真实;但是如果使用很大的法线纹理进行渲染,载入纹理资源会很慢,影响水面渲染的效率。
因此,针对现有技术中存在的问题,亟待进行改善。
发明内容
本申请提供一种水面渲染方法、装置、设备及存储介质,以在避免存储大量不同的法线纹理的情况下,兼顾水面渲染的效率。
第一方面,本申请实施例提供了一种水面渲染方法,该方法包括:
获取基础法线纹理;
根据所述基础法线纹理,生成至少两个衍生法线纹理;其中,各所述衍生法线纹理不同;
根据至少两个所述衍生法线纹理,进行图像渲染。
第二方面,本申请实施例还提供了一种水面渲染装置,该装置包括:
法线纹理获取模块,用于获取基础法线纹理;
法线纹理衍生模块,用于根据所述基础法线纹理,生成至少两个衍生法线纹理;其中,各所述衍生法线纹理不同;
图像渲染模块,用于根据至少两个所述衍生法线纹理,进行图像渲染。
第三方面,本申请实施例还提供了一种电子设备,所述设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面实施例所提供的任意一种水面渲染方法。
第四方面,本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如第一方面实施例所提供的任意一种水面渲染方法。
本申请实施例通过获取基础法线纹理;根据所述基础法线纹理,生成至少两个衍生法线纹理;其中,各所述衍生法线纹理不同;根据至少两个所述衍生法线纹理,进行图像渲染。通过上述技术方案,能够根据基础法线纹理生成不同的衍生法线纹理,而不必对各种不同的法线纹理进行预先存储,极大的降低了纹理资源的内存占用量,在避免存储大量不同的法线纹理的情况下,兼顾了水面渲染的效率,节省了图像渲染的时间,提高了图像的渲染效率,达到了实时渲染的目的。
附图说明
图1是本申请实施例一提供的一种水面渲染方法的流程图;
图2是本申请实施例二提供的一种水面渲染方法的流程图;
图3是本申请实施例二提供的一种基础法线纹理的示意图;
图4是本申请实施例二提供的一种根据目标随机采样函数A生成衍生法线纹理的示意图;
图5是本申请实施例二提供的一种根据目标随机采样函数B生成衍生法线纹理的示意图;
图6是本申请实施例二提供的一种根据目标随机采样函数C生成衍生法线纹理的示意图;
图7是本申请实施例三提供的一种水面渲染方法的流程图;
图8是本申请实施例三提供的一种目标法线纹理图像的示意图;
图9是本申请实施例三提供的一种水面渲染完成后的示意图;
图10是本申请实施例四提供的一种水面渲染装置的示意图;
图11是本申请实施例五提供的一种电子设备的示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本申请,而非对本申请的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本申请相关的部分。
在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各步骤描述成顺序的处理,但是其中的许多步骤可以被并行地、并发地或者同时实施。此外,各步骤的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
实施例一
图1为本申请实施例一提供的一种水面渲染方法的流程图。本申请实施例可适用于根据基础法线纹理进行图像渲染的情况。该方法可以由一种水面渲染装置来执行,该装置可以由软件和/或硬件的方式实现,并具体配置于电子设备中,该电子设备可以是移动终端或固定终端。
参见图1,本申请实施例提供的水面渲染方法,包括:
S110、获取基础法线纹理。
其中,法线纹理又叫凹凸纹理,展现了一个物体表面高低起伏的细节,该法线纹理可以是陶瓷砖、服饰和水面等物体的法线纹理。
本实施例中,基础法线纹理典型地可以为水波纹的法线纹理,用于形成水面波纹效果。
可以理解的是,法线纹理可以理解为一张纹理图片,法线纹理存储了每个像素点的法线向量,一个波动的水面,每个像素的法线向量是不同的,该法线纹理展现了一个水面高低起伏的细节。
本实施例中,基础法线纹理可以是从纹理数据库中获取得到,具体可以是从纹理数据库中随机获取基础法线纹理,当然,也可以根据预设选取规则,从纹理数据库中获取基础法线纹理。其中,预设选取规则可以是根据用户的输入数据如关键词描述等,从纹理数据库中匹配出设定类别的基础法线纹理,设定类别可以是波纹类型。
可选地,所述基础法线纹理的数量为至少一种;不同基础法线纹理的纹理类型不同。
其中,纹理类型可以包括大波纹类型、中波纹类型和小波纹类型。
具体地,可以从大波纹类型、中波纹类型和小波纹类型中获取一种类型的法线纹理作为基础法线纹理;或者,也可以从大波纹类型、中波纹类型和小波纹类型中获取至少一种不同类型的法线纹理作为基础法线纹理;或者,也可以从大波纹类型、中波纹类型和小波纹类型中获取三种不同类型的法线纹理作为基础法线纹理。
可以理解的是,为了保证法线纹理的多样性,可以同时获取不同类型的法线纹理作为基础法线纹理,以提高图像渲染的真实性。
S120、根据基础法线纹理,生成至少两个衍生法线纹理;其中,各衍生法线纹理不同。
本实施例中,各衍生法线纹理不同保证了衍生法线纹理的多样性。
可选地,可以根据基础法线纹理,基于预设法线纹理生成规则,在基础法线纹理的基础上,生成至少两个衍生法线纹理。
其中,预设法线纹理生成规则可以是通过基础法线纹理之间的纹理运算生成;或者,预设法线纹理生成规则也可以是通过基础法线纹理与中间法线纹理的纹理运算生成。其中,纹理运算包括加减乘除等纹理运算,中间法线纹理可以根据实际需求进行预先设置。
需要说明的是,上述所提出的预设法线纹理生成规则不是唯一的生成规则,当然,也可以根据实际需要按照其他生成规则进行生成,均在本发明的保护范围之内。
本实施例中,由于衍生法线纹理是不需要预先存储的,可以根据基础法线纹理进行实时生成,因此在图像渲染时,不需要载入较大的纹理资源也能获得多种不同的法线纹理,满足图像渲染的需求,使得渲染效率大幅提升。
在一些实施例中,还可以基于目标随机采样函数来生成衍生法线纹理。
具体地,可以根据至少两个不同的目标随机采样函数,对基础法线纹理进行纹理采样,生成至少两个衍生法线纹理;其中,目标随机采样函数的自变量为衍生法线纹理映射的顶点坐标,因变量为基础法线纹理的纹理坐标。
S130、根据至少两个衍生法线纹理,进行图像渲染。
具体地,当基础法线纹理为水波纹的法线纹理时,进行图像渲染的图像则为水面中的水波纹。
本实施例中,可以将至少两个衍生法线纹理进行叠加得到目标法线纹理,并根据目标法线纹理进行图像渲染。具体地,可以针对每一个待渲染像素点,将该像素点位置处的至少两个衍生法线纹理进行叠加得到目标法线纹理,并根据叠加后得到的法线纹理进行图像渲染。
在一些实施例中,还可以根据基础法线纹理和衍生法线纹理,进行图像渲染。
可以理解的是,基础法线纹理作为水波纹的法线纹理,同样可以形成水面波纹效果,因此,当衍生法线纹理与基础法线纹理不同时,也可以同时根据基础法线纹理和衍生法线纹理,进行图像渲染,提高图像渲染的真实性。
本申请实施例通过获取基础法线纹理;根据所述基础法线纹理,生成至少两个衍生法线纹理;其中,各所述衍生法线纹理不同;根据至少两个所述衍生法线纹理,进行图像渲染。通过上述技术方案,能够根据基础法线纹理生成不同的衍生法线纹理,而不必对各种不同的法线纹理进行预先存储,极大的降低了纹理资源的内存占用量,在避免存储大量不同的法线纹理的情况下,兼顾了水面渲染的效率,节省了图像渲染的时间,提高了图像的渲染效率,达到了实时渲染的目的。
实施例二
图2为本申请实施例二提供的一种水面渲染方法的流程图,本实施例是在上述实施例的基础上,对上述方案的优化。
进一步地,将操作“根据所述基础法线纹理,生成至少两个衍生法线纹理”,细化为“根据至少两个不同的目标随机采样函数,对所述基础法线纹理进行纹理采样,生成所述至少两个衍生法线纹理;其中,所述目标随机采样函数的自变量为所述衍生法线纹理映射的顶点坐标,因变量为所述基础法线纹理的纹理坐标”,以明确衍生法线纹理的生成过程。
其中与上述实施例相同或相应的术语的解释在此不再赘述。
参见图2,本实施例提供的水面渲染方法,包括:
S210、获取基础法线纹理。
S220、根据至少两个不同的目标随机采样函数,对基础法线纹理进行纹理采样,生成至少两个衍生法线纹理。
其中,目标随机采样函数可以是根据实际需求进行预先设置的随机采样函数,目标随机采样函数的自变量为衍生法线纹理映射的顶点坐标,因变量为基础法线纹理的纹理坐标。
本实施例中,目标随机采样函数可以通过在随机采样函数库中进行选取得到。其中,随机采样函数库中预先存储有至少两个不同的随机采样函数,而随机采样函数可以通过设置不同的采样周期,不同的采样方向,实现对基础法线纹理的采样,形成各种不同的随机采样函数。
可选地,所述根据至少两个不同的目标随机采样函数,对所述基础法线纹理进行纹理采样,生成所述至少两个衍生法线纹理,包括:根据所述至少两个不同的目标随机采样函数以及所述衍生法线纹理中待映射的顶点坐标,获得各所述目标随机采样函数的计算结果,所述计算结果包括至少两个不同的纹理坐标;根据所述至少两个不同的纹理坐标,对所述基础法线纹理进行纹理采样,得到至少两个不同的纹理采样结果;根据所述至少两个不同的纹理采样结果,生成所述至少两个衍生法线纹理;其中,所述纹理采样结果为所述衍生法线纹理中待映射的顶点坐标位置处的法线纹理。
本实施例中,衍生法线纹理可以是已知尺寸的衍生法线纹理,对于衍生法线纹理中的每一个点也即像素点,都需逐一确定在该点对应的顶点坐标位置处的法线向量。
需要说明的是,纹理是一张图片,单位为像素,每一个像素即对应一个顶点。例如,假设纹理中包括N个像素点,则N个像素点可以对应N个顶点。
具体地,可以按照预设采样方式如从左到右、以及从上到下的采样方式,对衍生法线纹理中的每一个像素在已获取的基础法线纹理中进行纹理采样。
可以理解的是,通过目标随机采样函数来生成衍生法线纹理,更加简单方便,操作性更强。
可选地,可以根据预设纹理偏移值以及根据不同的采样系数,基于模板随机采样函数,生成至少两个不同的目标随机采样函数;其中,所述目标随机采样函数的自变量为所述衍生法线纹理映射的顶点坐标,因变量为所述基础法线纹理的纹理坐标。
其中,预设纹理偏移值表示采样纹理的偏移值,预设纹理偏移值可以根据实际需求进行预先确定。
本实施例中,可以在模板随机采样函数中设置至少一个采样系数。
其中,采样系数可以包括偏移系数,偏移系数可以对预设纹理偏移值进行调节。具体地,偏移系数用于对法线纹理的偏移情况进行表示,偏移系数可以取0、和±1,偏移系数为0表示没有偏移,偏移系数为1表示有偏移,而±号表示偏移的方向。
可以理解的是,通过在模板随机采样函数中选取不同的采样系数,可以得到不同的目标随机采样函数,更加简单方便,操作性更强。
本实施例中,模板随机采样函数可以根据所要渲染的具体物体进行预先确定。
可选地,所述模板随机采样函数的计算公式可以为:
其中,PosX表示所述衍生法线纹理映射的顶点横坐标,PosY表示所述衍生纹理映射的顶点纵坐标,u为所述基础法线纹理的纹理横坐标,v表示所述基础法线纹理的纹理纵坐标,animation表示预设纹理偏移值;K、Q表示采样系数。
具体地,K为偏移系数,用于对预设纹理偏移值进行调节;Q为大于0的自然数。
在一些实施例中,还可以将Q明确为基础法线纹理覆盖的顶点范围与重复因子的乘积,也即可以进一步将模板随机采样函数的计算公式明确为:
其中,repeat表示基础法线纹理覆盖的顶点范围;W表示重复因子,用于对基础法线纹理的坐标进行翻倍。本实施例中,可以将上述计算公式作为模板随机采样函数。
具体地,animation=rate*times,times表示动画次数;rate=repeat/M,M为常数,如M为512,rate表示变化的快慢;animation值域是[0,repeat]。本实施例中,衍生法线纹理通过模板随机采样函数进行生成,可以理解为从纹理数据库中取出一个基础法线纹理,然后通过模板随机采样函数进行处理,可以生成至少两个衍生法线纹理。
显然,衍生法线纹理不是实际存储的,这样既可以解决存储大量不同的法线纹理,又可以使法线纹理的获取更为灵活,而不仅局限于从纹理数据库获取法线纹理。
例如,以上述模板随机采样函数为例,可以将模板随机采样函数中u的随机采样函数中的偏移系数K设置为0,既不做纹理偏移,将重复因子W设置为1,既不对计算出的纹理坐标进行翻倍;将v的随机采样函数的偏移系数和重复因子设置为与u一致,则生成的目标随机采样函数A可以表示为:
u=(PosX)/repeat,v=(PosY)/repeat;
其中,假设基础法线纹理是一个8*8的图片,图3示例性给出了一种基础法线纹理的示意图。PosX和PosY的取值范围是0~8,将repeat设定为8,则衍生法线纹理的纹理坐标u,v的取值范围为0~1。
根据目标随机采样函数A,对8*8的基础法线纹理进行采样处理,可以生成一个新的衍生法线纹理。例如,可以参见图4示例性给出的一种根据目标随机采样函数A生成衍生法线纹理的示意图,图中水平方向为X轴的采样周期,垂直方向是为Y轴的采样周期,纹理坐标u、v构成的纹理坐标对(u,v)可以对整个纹理进行采样。
再如,继续以上述模板随机采样函数为例,还可以将模板随机采样函数中u的随机采样函数中的偏移系数K设置为1,做纹理正向偏移,将重复因子W设置为1;将模板随机采样函数中v的随机采样函数中的偏移系数K设置为0,不做纹理偏移,将重复因子W设置为1,则生成的目标随机采样函数B可以表示为:
u=(PosX+animation)/repeat,v=(PosY)/(W*repeat);
其中,继续以图3中的基础法线纹理为例,将animaiton设定为1,repeat取值不变,继续设定为8,则(PosX+animaiton)的值为1~9,则u的取值范围是1/8~(1+1/8),当纹理坐标大于1时,法线纹理会重复,所以采样的整个图是8*16的纹理,也即是将图3中的法线纹理沿着X轴进行重复得到。
根据目标随机采样函数B,对8*8的基础法线纹理进行采样处理,可以生成一个新的衍生法线纹理。与根据目标随机采样函数A生成的衍生法线纹理相比,v的取值范围不变,还是0~1,而u的取值范围发生了改变,u是1/8~(1+1/8)。由于纹理坐标u、v的取值范围不一样,采样的区域就会发生改变,最后的采样区域可以参见图5示例性给出的一种根据目标随机采样函数B生成衍生法线纹理的示意图,显然,图5中示出的采样结果与图4中示出的采样结果不同。
又如,还可以将模板随机采样函数中u的随机采样函数中的偏移系数K设置为0,将重复因子W设置为0.5;将模板随机采样函数中v的随机采样函数中的偏移系数K设置为0,将重复因子W设置为1,则生成的目标随机采样函数C可以表示为:
u=(PosX)/(0.5*repeat),v=(PosY)/repeat;
其中,PosX、PosY和repeat取值不变,则u取值是0/8,2/8…16/8,u的坐标范围是0~2,v的坐标范围是0~1。当u的值大于1时,最终会采样一个8*16的法线纹理,并且采样频率是有间隔的,最终得到的采样区域可以参见图6示例性给出的一种根据目标随机采样函数C生成衍生法线纹理的示意图,显然,图6中示出的采样结果与图4和图5中示出的采样结果均不相同。
可以理解的是,通过设定不同的偏移系数和/或重复因子,可以得到不同的目标随机采样函数,基于不同的目标随机采样函数对基础法线纹理采样,就可以采样得到不同的衍生法线纹理。
在一些实施例中,典型地,可以仅根据一个基础法线纹理,通过多个不同的目标随机采样函数对基础法线纹理的采样,生成多个不同的衍生法线纹理。
S230、根据至少两个衍生法线纹理,进行图像渲染。
本实施例中,在基础法线纹理的基础上,衍生出了多种不同的衍生法线纹理,再根据生成的衍生法线纹理进行水面渲染时,可以根据水体表面的法线纹理的随机变化情况,营造出水面波动的效果。
本申请实施例在上述实施例的基础上,对衍生法线纹理的生成过程进行了明确,根据至少两个不同的目标随机采样函数,对所述基础法线纹理进行纹理采样,生成所述至少两个衍生法线纹理;其中,所述目标随机采样函数的自变量为所述衍生法线纹理映射的顶点坐标,因变量为所述基础法线纹理的纹理坐标。通过上述技术方案,根据至少两个不同的目标随机采样函数,产生了至少两个不同的衍生法线纹理,使得衍生法线纹理的确定过程更加简单方便,操作性更强,根据衍生出的法线纹理,进行图像渲染,节约了法线纹理的存储,也增加了逻辑上对水波的控制。
实施例三
图7为本申请实施例三提供的一种水面渲染方法的流程图,本实施例是在上述实施例的基础上,对上述方案的优化。
进一步地,将操作“根据至少两个所述衍生法线纹理,进行图像渲染”,细化为“针对预设纹理映射顶点范围值中的每一个顶点,将该顶点坐标位置对应生成的至少两个所述衍生法线纹理进行叠加,得到该顶点的目标法线纹理;根据不同顶点的坐标位置,将不同顶点坐标位置对应的目标法线纹理进行组合,得到目标法线纹理图像;根据所述目标法线纹理图像,进行图像渲染”,以明确图像渲染的过程。
其中与上述实施例相同或相应的术语的解释在此不再赘述。
参见图7,本实施例提供的水面渲染方法,包括:
S310、获取基础法线纹理。
S320、根据至少两个不同的目标随机采样函数,对基础法线纹理进行采样处理,生成至少两个衍生法线纹理。
本实施例中,采用以下模板随机采样函数来生成目标随机采样函数。
具体地,可以使用OpenGL(Open Graphics Library,开放图形库)进行图像渲染,在图像渲染之前,对K和W进行设定,在图像渲染的过程中,实时设定animaiton和repeat的具体大小。
本实施例中,可以通过设置4组不同的偏移系数和重复因子,生成4个不同的目标随机采样函数;根据4个不同的目标随机采样函数,对基础法线纹理进行采样,可以生成四个不同的衍生法线纹理。
在一些实施例中,可以通过随机确定偏移系数和重复因子的方式,来生成目标随机采样函数。
例如,可以预先分别为偏移系数和重复因子设置对应的数值库,通过从数值库中随机抽取的方式确定偏移系数和重复因子,从而实现对目标随机采样函数的确定。
S330、针对预设纹理映射顶点范围值中的每一个顶点,将该顶点坐标位置对应生成的至少两个衍生法线纹理进行叠加,得到该顶点的目标法线纹理。
本实施例中,考虑到水波的物理原理,是多个不同波的叠加,波的叠加实际是波的法线向量的叠加,波的法线向量可以根据法线纹理得到。
因此,为了实现不同位置,不同时间,水面的法线向量不同,可以将n个法线向量进行叠加,可以理解为n个法线纹理的叠加,也即需要n个不同的法线纹理;将叠加后的法线向量作为最终描画水波纹使用的法线向量,相当于图片上某一点n个法线向量的叠加。
S340、根据不同顶点的坐标位置,将不同顶点坐标位置对应的目标法线纹理进行组合,得到目标法线纹理图像。
本实施例中,可以根据目标法线纹理图像进行图像渲染。例如,可以参见图8示例性给出的一种目标法线纹理图像的示意图。
S350、根据目标法线纹理图像,进行图像渲染。
具体地,在图像渲染的过程中,可以设计片元着色器,通过根据目标法线纹理图像,片元着色器可以确定各像素点的颜色值,进行图像渲染,从而实现对水面波纹的描画。
可选地,所述根据所述目标法线纹理图像,进行图像渲染,包括:根据所述目标法线纹理图像,确定法线方向;根据所述法线方向和光照入射方向,分别确定反光颜色值和镜面高光颜色值;根据所述反光颜色值和所述镜面高光颜色值,进行图像渲染。
其中,光照入射方向为预先设置的光照入射方向,同时,还可以设置光照的颜色值。
本实施例中,可以根据所述法线方向和光照入射方向,确定光照反射方向;根据光照入射方向和光照反射方向,确定反光颜色值。反光颜色值决定了物体表面的明暗,光照入射方向和光照反射方向越接近,物体越亮,反之越暗。
可选地,所述根据所述法线方向和光照入射方向,确定镜面高光颜色值,包括:根据所述法线方向和光照入射方向,确定光照反射方向;根据所述光照反射方向和预设观察方向,确定所述镜面高光颜色值。
其中,预设观察方向是指人眼的视角方向,也即人眼与水面中各像素点的连线方向,可以根据实际情况设置预设观察方向。
本实施例中,镜面高光的强弱,由光照反射方向和预设观察方向的夹角决定,夹角越小,高光越明显。
可以理解的是,不同时刻,水面的法线纹理是变化的,法线向量也就随之变化,这样在入射光方向不变的情况下,法线向量变化导致了反光颜色值和所述镜面高光颜色值的变化,使得不同时刻,水面或明或暗,也就有了波动的效果。
可选地,所述根据所述反光颜色值和所述镜面高光颜色值,进行图像渲染,包括:根据所述光照反射方向,对预设天空盒进行空间采样,得到天空颜色值;根据所述反光颜色值、所述镜面高光颜色值和所述天空颜色值,进行图像渲染。
其中,天空盒是一个正方体盒子,包含6个纹理,这6个纹理可以是预先固定好的,是真实的图片纹理。天空盒的空间采样可以通过光照反射方向击中天空盒进行实现,也即使用光照的反射向量,将反射向量击中的纹理,描画在水面上,这样水面就能反射天空了。
可以理解的是,为了增加水面细节,还可以增加天空盒的采样,这样水面可以反射出天空的细节,使水面更加逼真。
在一些实施例中,在进行OpenGL图像渲染的过程中,还可以预先设置一个环境光,也称基础颜色值,用AmbientColor表示,如可以将AmbientColor设定为RGB(132,214,232)。
根据步骤S320确定的4个不同的目标随机采样函数,将衍生法线纹理中待映射的顶点坐标代入到目标随机采样函数中,可以获得各目标随机采样函数的计算结果,也即可以计算得到4个不同的基础法线纹理坐标,根据4个不同的纹理坐标,对基础法线纹理进行纹理采样,可以得到4个不同的纹理采样结果;相应的,可以生成4个衍生法线纹理。
具体地,可以通过OpenGL内置的2D纹理采样函数texture2D对基础法线纹理进行采样,采样对应的法线向量。4个目标随机采样函数,可以分别得到4个衍生法线向量normal1,normal2,normal3和normal4。
之后,根据步骤S330可以将这4个衍生法线向量进行叠加,得到在某一顶点也即像素点处的目标法线向量normal。
需要注意的是,在计算目标法线向量的过程中,由于目标法线纹理存储的是颜色值,颜色值值域是(-1,1),而计算得到的目标法线向量值域是(0,1),所以需要乘以2,再减去1,将(0,1)映射到(-1,1)。
本实施例中,可以根据不同顶点的坐标位置,将不同顶点坐标位置对应的目标法线纹理进行组合,得到目标法线纹理图像,并根据目标法线纹理图像进行图像渲染。
在得到目标法线纹理图像之后,可以计算反光颜色值,反光颜色值用DiffuseColor表示。首先,需要计算反光强度,反光强度可以根据法线方向与光照入射方向的夹角进行计算,具体可以通过计算法线向量和入射光向量的点积。入射光向量可以通过点光源的位置减去差值后的顶点坐标,进行归一化得到。这样法线向量和入射光向量都有了,通过OpenGL内置点积函数dot(vecx,vecy),可以算出反光强度,之后将反光强度乘以光照的颜色值LightColor,就得到了反光颜色值。
在计算反光颜色值的同时,还可以计算镜面高光颜色值,镜面高光颜色值用SpecColor表示。首先,需要计算镜面高光强度,在计算镜面高光强度时需要用到两个向量,一个是反射光向量也即光照反射向量,一个是观察向量。反射光向量需要使用OpenGL自带的reflect(vecl,vecN)函数,该函数可以根据入射向量和法线向量,计算出反射光向量。入射向量和法线向量在计算反射光向量时已经计算好了,所以可以根据reflect函数直接计算得到反射光向量ReflecDir。观察向量需要世界坐标系下的眼睛位置减去差值后的顶点坐标,归一化得到EyeDir,之后使用ReflecDir和EyeDir进行点积,计算出反射向量和观察向量的夹角spec。之后使用次幂函数,计算出镜面高光强度fspec。fspec=pow(spec,32),其中,32是水的反光度,一个物体的反光度越高,反射光的能力越强,散射得越少,高光点就会越小,使用镜面高光强度乘以光照的颜色值LightColor,就可以得到镜面高光颜色值,SpecColor=LightColor*fspec。
在计算完镜面高光颜色值之后,还需计算天空颜色值,天空颜色值用SkyColor表示。计算天空盒反射,模拟出倒影效果,天空盒前文已经阐述,需要一个向量去击中盒子,然后采样得到SkyColor。这个向量使用光照反射方向,既在计算镜面高光颜色值时得到的ReflecDir向量。天空盒采样需要使用OpenGL内置的采样函数TextureCube(samplerCube,coord),TextureCube采样函数和2D纹理采样函数不同。
最后,将前面计算出的所有颜色包括基础颜色值、反光颜色值、镜面高光颜色值和天空颜色值,进行合成,计算出图像渲染的最终颜色,最终颜色=AmbientColor+DiffuseColor+SpecColor+SkyColor。
例如,可以参见图9示例性给出的一种水面渲染完成后的示意图。
本申请实施例在上述实施例的基础上,对图像渲染的过程进行了明确,通过将至少两个所述衍生法线纹理进行叠加,得到目标法线纹理图像;根据所述目标法线纹理图像,进行图像渲染。通过上述技术方案,根据多个不同的衍生法线纹理叠加生成的目标法线纹理图像,进行图像渲染,节约了法线纹理的存储,也增加了逻辑上对水波的控制,使得图像渲染的效果也更加逼真。
实施例四
图10是本申请实施例四提供的一种水面渲染装置的结构示意图。参见图10,本申请实施例提供的一种水面渲染装置,该装置包括:法线纹理获取模块410、法线纹理衍生模块420和图像渲染模块430。
法线纹理获取模块410,用于获取基础法线纹理;
法线纹理衍生模块420,用于根据所述基础法线纹理,生成至少两个衍生法线纹理;其中,各所述衍生法线纹理不同;
图像渲染模块430,用于根据至少两个所述衍生法线纹理,进行图像渲染。
本申请实施例通过获取基础法线纹理;根据所述基础法线纹理,生成至少两个衍生法线纹理;其中,各所述衍生法线纹理不同;根据至少两个所述衍生法线纹理,进行图像渲染。通过上述技术方案,能够根据基础法线纹理生成不同的衍生法线纹理,而不必对各种不同的法线纹理进行预先存储,极大的降低了纹理资源的内存占用量,在避免存储大量不同的法线纹理的情况下,兼顾了水面渲染的效率,节省了图像渲染的时间,提高了图像的渲染效率,达到了实时渲染的目的。
进一步地,所述法线纹理衍生模块420,包括:
法线纹理衍生子模块,用于将所述基础法线纹理的各局部纹理区域进行重组,生成至少两个衍生法线纹理。
进一步地,所述法线纹理衍生模块420,包括:
法线纹理采样子模块,用于根据至少两个不同的目标随机采样函数,对所述基础法线纹理进行纹理采样,生成所述至少两个衍生法线纹理;
其中,所述目标随机采样函数的自变量为所述衍生法线纹理映射的顶点坐标,因变量为所述基础法线纹理的纹理坐标。
进一步地,所述法线纹理采样子模块,包括:
纹理坐标计算单元,用于根据所述至少两个不同的目标随机采样函数以及所述衍生法线纹理中待映射的顶点坐标,获得各所述目标随机采样函数的计算结果,所述计算结果包括至少两个不同的纹理坐标;
纹理采样单元,用于根据所述至少两个不同的纹理坐标,对所述基础法线纹理进行纹理采样,得到至少两个不同的纹理采样结果;
法线纹理衍生单元,用于根据所述至少两个不同的纹理采样结果,生成所述至少两个衍生法线纹理;其中,所述纹理采样结果为所述衍生法线纹理中待映射的顶点坐标位置处的法线纹理。
进一步地,所述装置还包括:
采样系数生成子模块,用于根据预设纹理偏移值以及根据不同的采样系数,基于模板随机采样函数,生成至少两个不同的目标随机采样函数;
其中,所述目标随机采样函数的自变量为所述衍生法线纹理映射的顶点坐标,因变量为所述基础法线纹理的纹理坐标。
进一步地,所述模板随机采样函数的计算方式为: 其中,PosX表示所述衍生法线纹理映射的顶点横坐标,PosY表示所述衍生纹理映射的顶点纵坐标,u为所述基础法线纹理的纹理横坐标,v表示所述基础法线纹理的纹理纵坐标,animation表示预设纹理偏移值,K、Q表示采样系数。
进一步地,所述基础法线纹理的数量为至少一种;不同基础法线纹理的纹理类型不同。
进一步地,所述图像渲染模块430,包括:
纹理叠加子模块,用于针对预设纹理映射顶点范围值中的每一个顶点,将该顶点坐标位置对应生成的至少两个所述衍生法线纹理进行叠加,得到该顶点的目标法线纹理;
法线纹理生成子模块,用于根据不同顶点的坐标位置,将不同顶点坐标位置对应的目标法线纹理进行组合,得到目标法线纹理图像;
图像渲染子模块,用于根据所述目标法线纹理图像,进行图像渲染。
进一步地,所述图像渲染子模块,包括:
法线方向确定单元,用于根据所述目标法线纹理图像,确定法线方向;
颜色值确定单元,用于根据所述法线方向和光照入射方向,分别确定反光颜色值和镜面高光颜色值;
图像渲染单元,用于根据所述反光颜色值和所述镜面高光颜色值,进行图像渲染。
进一步地,所述颜色值确定单元,包括:
反射方向确定子单元,用于根据所述法线方向和光照入射方向,确定光照反射方向;
高光颜色值确定子单元,用于根据所述光照反射方向和预设观察方向,确定所述镜面高光颜色值。
进一步地,所述图像渲染单元,包括:
天空颜色值确定子单元,用于根据所述光照反射方向,对预设天空盒进行空间采样,得到天空颜色值;
图像渲染子单元,用于根据所述反光颜色值、所述镜面高光颜色值和所述天空颜色值,进行图像渲染。
本申请实施例所提供的水面渲染装置可执行本申请任意实施例所提供的水面渲染方法,具备执行方法相应的功能模块和有益效果。
实施例五
图11是本申请实施例五提供的一种电子设备的结构图。图11示出了适于用来实现本申请实施方式的示例性电子设备512的框图。图11显示的电子设备512仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图11所示,电子设备512以通用计算设备的形式表现。电子设备512的组件可以包括但不限于:一个或者多个处理器或者处理单元516,系统存储器528,连接不同系统组件(包括系统存储器528和处理单元516)的总线518。
总线518表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MCA)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
电子设备512典型地包括多种计算机系统可读介质。这些介质可以是任何能够被电子设备512访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器528可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)530和/或高速缓存存储器532。电子设备512可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统534可以用于读写不可移动的、非易失性磁介质(图11未显示,通常称为“硬盘驱动器”)。尽管图11中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线518相连。系统存储器528可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本申请各实施例的功能。
具有一组(至少一个)程序模块542的程序/实用工具540,可以存储在例如系统存储器528中,这样的程序模块542包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块542通常执行本申请所描述的实施例中的功能和/或方法。
电子设备512也可以与一个或多个外部设备514(例如键盘、指向设备、显示器524等)通信,还可与一个或者多个使得用户能与该电子设备512交互的设备通信,和/或与使得该电子设备512能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口522进行。并且,电子设备512还可以通过网络适配器520与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器520通过总线518与电子设备512的其它模块通信。应当明白,尽管图11中未示出,可以结合电子设备512使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理单元516通过运行存储在系统存储器528中的多个程序中其他程序的至少一个,从而执行各种功能应用以及数据处理,例如实现本申请实施例所提供的任意一种水面渲染方法。
实施例六
本申请实施例六还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本申请任一实施例所提供的一种水面渲染方法,该方法包括:获取基础法线纹理;根据所述基础法线纹理,生成至少两个衍生法线纹理;其中,各所述衍生法线纹理不同;根据至少两个所述衍生法线纹理,进行图像渲染。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本申请可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
值得注意的是,上述水面渲染装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。
注意,上述仅为本申请的较佳实施例及所运用技术原理。本领域技术人员会理解,本申请不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本申请的保护范围。因此,虽然通过以上实施例对本申请进行了较为详细的说明,但是本申请不仅仅限于以上实施例,在不脱离本申请构思的情况下,还可以包括更多其他等效实施例,而本申请的范围由所附的权利要求范围决定。
Claims (12)
1.一种水面渲染方法,其特征在于,包括:
获取基础法线纹理;
根据所述基础法线纹理,生成至少两个衍生法线纹理;其中,各所述衍生法线纹理不同;
根据至少两个所述衍生法线纹理,进行图像渲染。
2.根据权利要求1所述的方法,其特征在于,所述根据所述基础法线纹理,生成至少两个衍生法线纹理,包括:
根据至少两个不同的目标随机采样函数,对所述基础法线纹理进行纹理采样,生成所述至少两个衍生法线纹理;
其中,所述目标随机采样函数的自变量为所述衍生法线纹理映射的顶点坐标,因变量为所述基础法线纹理的纹理坐标。
3.根据权利要求2所述的方法,其特征在于,所述根据至少两个不同的目标随机采样函数,对所述基础法线纹理进行纹理采样,生成所述至少两个衍生法线纹理,包括:
根据所述至少两个不同的目标随机采样函数以及所述衍生法线纹理中待映射的顶点坐标,获得各所述目标随机采样函数的计算结果,所述计算结果包括至少两个不同的纹理坐标;
根据所述至少两个不同的纹理坐标,对所述基础法线纹理进行纹理采样,得到至少两个不同的纹理采样结果;
根据所述至少两个不同的纹理采样结果,生成所述至少两个衍生法线纹理;其中,所述纹理采样结果为所述衍生法线纹理中待映射的顶点坐标位置处的法线纹理。
4.根据权利要求2所述的方法,其特征在于,所述方法还包括:
根据预设纹理偏移值以及根据不同的采样系数,基于模板随机采样函数,生成至少两个不同的目标随机采样函数;
其中,所述目标随机采样函数的自变量为所述衍生法线纹理映射的顶点坐标,因变量为所述基础法线纹理的纹理坐标。
6.根据权利要求1所述的方法,其特征在于,所述根据至少两个所述衍生法线纹理,进行图像渲染,包括:
针对预设纹理映射顶点范围值中的每一个顶点,将该顶点坐标位置对应生成的至少两个所述衍生法线纹理进行叠加,得到该顶点的目标法线纹理;
根据不同顶点的坐标位置,将不同顶点坐标位置对应的目标法线纹理进行组合,得到目标法线纹理图像;
根据所述目标法线纹理图像,进行图像渲染。
7.根据权利要求6所述的方法,其特征在于,所述根据所述目标法线纹理图像,进行图像渲染,包括:
根据所述目标法线纹理图像,确定法线方向;
根据所述法线方向和光照入射方向,分别确定反光颜色值和镜面高光颜色值;
根据所述反光颜色值和所述镜面高光颜色值,进行图像渲染。
8.根据权利要求7所述的方法,其特征在于,所述根据所述法线方向和光照入射方向,确定镜面高光颜色值,包括:
根据所述法线方向和所述光照入射方向,确定光照反射方向;
根据所述光照反射方向和预设观察方向,确定所述镜面高光颜色值。
9.根据权利要求7所述的方法,其特征在于,所述根据所述反光颜色值和所述镜面高光颜色值,进行图像渲染,包括:
根据所述光照反射方向,对预设天空盒进行空间采样,得到天空颜色值;
根据所述反光颜色值、所述镜面高光颜色值和所述天空颜色值,进行图像渲染。
10.一种水面渲染装置,其特征在于,包括:
法线纹理获取模块,用于获取基础法线纹理;
法线纹理衍生模块,用于根据所述基础法线纹理,生成至少两个衍生法线纹理;其中,各所述衍生法线纹理不同;
图像渲染模块,用于根据至少两个所述衍生法线纹理,进行图像渲染。
11.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-9中任一项所述的一种水面渲染方法。
12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-9中任一项所述的一种水面渲染方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111358143.6A CN116137051A (zh) | 2021-11-16 | 2021-11-16 | 水面渲染方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111358143.6A CN116137051A (zh) | 2021-11-16 | 2021-11-16 | 水面渲染方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116137051A true CN116137051A (zh) | 2023-05-19 |
Family
ID=86334237
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111358143.6A Pending CN116137051A (zh) | 2021-11-16 | 2021-11-16 | 水面渲染方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116137051A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117541463A (zh) * | 2023-11-29 | 2024-02-09 | 沐曦集成电路(上海)有限公司 | 一种天空盒角纹素丢失处理系统 |
-
2021
- 2021-11-16 CN CN202111358143.6A patent/CN116137051A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117541463A (zh) * | 2023-11-29 | 2024-02-09 | 沐曦集成电路(上海)有限公司 | 一种天空盒角纹素丢失处理系统 |
CN117541463B (zh) * | 2023-11-29 | 2024-08-20 | 沐曦集成电路(上海)有限公司 | 一种天空盒角纹素丢失处理系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6876362B1 (en) | Omnidirectional shadow texture mapping | |
US7212207B2 (en) | Method and apparatus for real-time global illumination incorporating stream processor based hybrid ray tracing | |
US20040181382A1 (en) | Visualizing the surface of a liquid | |
US20070139408A1 (en) | Reflective image objects | |
US6791544B1 (en) | Shadow rendering system and method | |
CN107644453A (zh) | 一种基于物理着色的渲染方法及系统 | |
CN112819941B (zh) | 渲染水体面的方法、装置、设备和计算机可读存储介质 | |
CN112396684A (zh) | 光线追踪方法、装置及机器可读存储介质 | |
US11823321B2 (en) | Denoising techniques suitable for recurrent blurs | |
WO2023061232A1 (zh) | 图像渲染方法、装置、设备及介质 | |
CN112446943A (zh) | 图像渲染的方法、装置及计算机可读存储介质 | |
CN116758208A (zh) | 全局光照渲染方法、装置、存储介质及电子设备 | |
CN113379885A (zh) | 虚拟头发的处理方法及装置、可读存储介质及电子设备 | |
CN117437345B (zh) | 基于三维引擎实现渲染纹理镜面反射效果的方法及系统 | |
CN116137051A (zh) | 水面渲染方法、装置、设备及存储介质 | |
WO2024148898A1 (zh) | 图像降噪方法、装置、计算机设备和存储介质 | |
US20180005432A1 (en) | Shading Using Multiple Texture Maps | |
CN114596403B (zh) | 图像处理方法、装置、存储介质及终端 | |
CN114359018B (zh) | 一种动态目标显示方法、装置及电子设备 | |
CN112819929B (zh) | 渲染水面方法及装置、电子设备、存储介质 | |
KR100951121B1 (ko) | 간접 조명 효과를 위한 렌더링 방법 | |
CN111127588B (zh) | 基于DirectX的大数据量参数曲线回放方法 | |
JP4847910B2 (ja) | 人間の肌のような半透明の材質のための、曲率ベースレンダリング方法及び装置 | |
CN118674853A (zh) | 一种三维模型表面皮肤渲染方法、系统、存储介质及设备 | |
CN117671125A (zh) | 光照渲染方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |