CN115019019B - 一种实现3d特效编辑器的方法 - Google Patents
一种实现3d特效编辑器的方法 Download PDFInfo
- Publication number
- CN115019019B CN115019019B CN202210622500.3A CN202210622500A CN115019019B CN 115019019 B CN115019019 B CN 115019019B CN 202210622500 A CN202210622500 A CN 202210622500A CN 115019019 B CN115019019 B CN 115019019B
- Authority
- CN
- China
- Prior art keywords
- rendering
- camera
- scene
- operations
- objects
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 32
- 230000000694 effects Effects 0.000 title claims abstract description 31
- 238000009877 rendering Methods 0.000 claims abstract description 167
- 230000009466 transformation Effects 0.000 claims abstract description 27
- 230000003993 interaction Effects 0.000 claims abstract description 19
- 239000000463 material Substances 0.000 claims abstract description 11
- 230000008569 process Effects 0.000 claims abstract description 11
- 230000000007 visual effect Effects 0.000 claims abstract description 7
- 238000013519 translation Methods 0.000 claims description 19
- 239000011159 matrix material Substances 0.000 claims description 17
- 230000006870 function Effects 0.000 claims description 11
- 238000002156 mixing Methods 0.000 claims description 11
- 230000008859 change Effects 0.000 claims description 5
- 230000007246 mechanism Effects 0.000 claims description 3
- 238000004806 packaging method and process Methods 0.000 abstract 1
- 238000010586 diagram Methods 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- NAWXUBYGYWOOIX-SFHVURJKSA-N (2s)-2-[[4-[2-(2,4-diaminoquinazolin-6-yl)ethyl]benzoyl]amino]-4-methylidenepentanedioic acid Chemical compound C1=CC2=NC(N)=NC(N)=C2C=C1CCC1=CC=C(C(=O)N[C@@H](CC(=C)C(O)=O)C(O)=O)C=C1 NAWXUBYGYWOOIX-SFHVURJKSA-N 0.000 description 1
- 206010044565 Tremor Diseases 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 230000001795 light effect Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 239000004579 marble Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000012800 visualization Methods 0.000 description 1
- 239000002023 wood Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T19/00—Manipulating 3D models or images for computer graphics
- G06T19/20—Editing of 3D images, e.g. changing shapes or colours, aligning objects or positioning parts
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N5/00—Details of television systems
- H04N5/222—Studio circuitry; Studio devices; Studio equipment
- H04N5/262—Studio circuits, e.g. for mixing, switching-over, change of character of image, other special effects ; Cameras specially adapted for the electronic generation of special effects
- H04N5/2621—Cameras specially adapted for the electronic generation of special effects during image pickup, e.g. digital cameras, camcorders, video cameras having integrated special effects capability
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N5/00—Details of television systems
- H04N5/222—Studio circuitry; Studio devices; Studio equipment
- H04N5/262—Studio circuits, e.g. for mixing, switching-over, change of character of image, other special effects ; Cameras specially adapted for the electronic generation of special effects
- H04N5/265—Mixing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2219/00—Indexing scheme for manipulating 3D models or images for computer graphics
- G06T2219/20—Indexing scheme for editing of 3D models
- G06T2219/2016—Rotation, translation, scaling
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Architecture (AREA)
- Computer Graphics (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明公开了一种实现3D特效编辑器的方法,包括定义元数据、构建场景、进行场景交互、执行渲染,定义元数据用于定义资源文件、构建渲染对象、场景设定,资源文件用于存储渲染物体的网格、材质、纹理;渲染对象用于表示场景中所有可被渲染的渲染物体,场景设定用于设置渲染目标和渲染顺序,渲染顺序为摄像机的渲染顺序;构建场景;进行场景交互是指拖动鼠标驱动场景中的摄像机进行视角变换;执行渲染是指根据元数据构造可渲染的实体对象,渲染实体对象,同时管理执行渲染过程中产生的操作,将所述操作进行封装并存储在队列中,当执行渲染前首先执行列队中封装的操作。能够构建3D特效编辑器,在渲染过程中可合并同类型操作,提高了执行效率。
Description
技术领域
本发明涉及视频编辑领域,尤其涉及一种实现3D特效编辑器的方法。
背景技术
目前抖音等短视频应用风靡全球,应用内部包含非常丰富的特效素材,包括2D,3D特效等。而3D特效由于效果逼真,更加受到用户的喜爱。其中3D特效素材的制作大多厂商都采用UGC(用户生产内容)模式,需要用到专业的3D特效编辑器,可以让用户生产各种各样的特效内容。3D特效编辑器中的场景部分主要用于3D场景的编辑,如图2所示。场景中主要包括地面,摄像机,物体,灯光(平行光,点光源,EnvMap等)。
预览画面中的图像和场景是紧密相连的,如果说场景是摄影棚的话,那么预览画面中的图像就是场景中的摄像机拍摄后呈现到显示器上的图像,即场景中的摄像机拍摄到的镜像,即用户在屏幕上实际看到的效果。所以图2的场景是场景摄像机看摄影棚的画面,而预览画面是场景中的摄像机模型所拍摄到的画面。两种渲染其实是同一套元数据驱动,此处涉及到的技术是如何定义元数据,以及如何同时实现场景和预览的渲染以及场景的交互。
目前各大短视频厂商为了鼓励OGC(用户产生内容),基本都发布了自己的3D特效编辑工具,但如何定义元数据,以及编辑器中的场景和预览的渲染相关的技术细节以及如何实现场景的交互都没有开源。同时现有的3D特效编辑工具在进行场景和预览渲染时采用不同的元数据进行驱动,渲染效率低,在渲染过程中对用户产生的操作没有进行处理,不能同时执行场景和预览渲染。
发明内容
本发明提供一种实现3D特效编辑器的方法,以克服上述技术问题。
一种实现3D特效编辑器的方法,包括,
步骤一、定义元数据,所述元数据包括资源文件、渲染对象、场景设定,资源文件用于存储渲染物体的信息,所述渲染物体的信息包括网格信息、材质信息、纹理信息;渲染对象用于表示场景中所有可被渲染的渲染物体,所述渲染对象还包括摄像机、光源,摄像机用于根据摄像机取景框的范围确定可渲染的渲染物体,光源用于模拟现实中的光线,场景设定包括渲染目标和渲染顺序,所述渲染目标包括实时目标和捕获目标,所述渲染顺序是指摄像机的渲染顺序;
步骤二、构建场景,场景为包含渲染对象的一个3D可视化空间,
步骤三、进行场景交互,通过拖动鼠标驱动场景中的摄像机进行视角变换,以及在场景中执行渲染对象的平移、缩放、旋转操作;
步骤四、执行渲染,具体包括根据场景信息、渲染对象信息、资源文件信息进行渲染,构建渲染管理对象,将渲染管理对象实例化为场景渲染实例和预览渲染实例,场景渲染实例进行场景渲染,预览渲染实例进行预览渲染,所述场景渲染实例根据场景中可渲染的渲染物体、摄像机、光源、地面、摄像机视线、视平面以及场景交互中产生的操作进行场景渲染,所述预览渲染实例根据场景渲染实例中摄像机取景框内的渲染物体以及场景交互中产生的操作进行预览渲染,同时管理执行渲染过程中产生的操作,所述操作包括但不限于删除、移动渲染物体,所述管理为首先将当前执行渲染过程中用户产生的操作进行封装并存储在队列中,之后每次执行渲染前首先执行列队中封装的操作。
优选地,所述预览渲染实例进行预览渲染还包括当场景渲染实例中摄像机的数量多于一台时,对每个摄像机拍摄画面进行逐层渲染,将每个摄像机拍摄画面生成一个贴图,然后按照摄像机的渲染顺序,分别将每两个相邻贴图的像素进行混合生成一张新的贴图,新的贴图与下一层贴图再进行混合,所述混合指一个贴图与其它贴图的色彩叠加方式。
优选地,所述执行列队中封装的操作还包括当操作的类型一致时,对操作进行合并执行。
优选地,所述通过拖动鼠标驱动场景中的摄像机进行视角变换包括,
步骤4a、以用户在显示观看的角度作为观察点,拖动鼠标,获取鼠标在显示屏幕的移动距离,通过显示屏幕的长宽对移动距离进行归一化;
步骤4b、根据观察点构建世界坐标系,根据摄像机构建摄像机坐标系,所述摄像机坐标系包括Right坐标轴、Up坐标轴、Foward坐标轴,将移动距离转换为旋转角度,所述旋转角度包括deltaX、deltaY,deltaX表示摄像机围绕世界坐标系Y轴的旋转角度,deltaY表示摄像机围绕摄像机坐标系的旋转角度,将旋转角度deltaX以四元数的方式存储为q1,将旋转角度deltaY以四元数的方式存储为q2,
步骤4c、根据公式(1)计算摄像机相对观察点的向量v1,
v1=Translationcamera-focusPoint (1)
其中Translationcamera表示摄像机在世界坐标系的位置坐标,focusPoint表示摄像机的观察点坐标,
步骤4d、将向量v1根据公式(2)计算得到v3,根据公式(3)更新摄像机在世界坐标系的位置坐标,
v3=q2·q1·v1·q1*·q2* (2)
Translationcamera=v3+focusPoint (3)
其中,q1*为q1的共轭四元数,q2*为q2的共轭四元数,
步骤4e、摄像机坐标系中Right坐标轴根据公式(4)进行旋转得到v2,根据公式(5)计算摄像机坐标系中up坐标轴,通过调用OpenGL中的lookAt函数,计算摄像机的变换矩阵,根据变换矩阵计算四元数qr,并将四元数转换为旋转矩阵R,根据公式(6)计算摄像机变换后的位置v',v为摄像机变换前的位置,根据v'获取渲染物体的信息并展示在显示屏幕中,
v2=q2·right·q2* (4)
up=v3×v2 (5)
v'=Translationcamera·R·v (6)
其中,v为摄像机变换前的位置,v'为摄像机变换后的位置。
本发明提供一种实现3D特效编辑器的方法,能够解决3D特效编辑器的元数据定义、场景和预览渲染的具体方案,同时在场景和预览渲染中,提出了一种合并同类型操作的方案,能够优化渲染执行过程中所产生相关操作的执行效率。在场景交互中,解决了如何通过鼠标移动实现视角围绕观察点旋转的技术问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明方法流程图;
图2是本发明中3D特效编辑器的场景展示图;
图3是本发明Perspective摄像机类型的原理结构图;
图4是本发明世界坐标系与摄像机坐标系的结构图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明方法流程图,如图1所示,本实施例的方法可以包括:
一种实现3D特效编辑器的方法,包括,定义元数据、构建场景、执行场景交互,执行渲染。其中,3D特效编辑器的元数据定义是实现渲染的数据基础,执行渲染是3D特效编辑器的核心功能,而场景的交互是实现人机操作的关键。
元数据指的是场景和预览渲染的底层数据定义,包含所有渲染信息。上层的渲染操作依赖底层的元数据进行驱动。
3D编辑器中的场景和预览的渲染是基于同一套底层数据驱动,而且必须包含渲染过程的所有信息,所以元数据的定义是完成后续渲染的前提条件。所述定义元数据用于定义资源文件、构建渲染对象、场景设定。
资源文件用于存储渲染物体的信息,所述渲染物体的信息包括网格信息Mesh、材质信息Material、纹理信息Texture,网格信息即渲染物体的形状,材质信息,即光学特性,纹理信息,比如大理石纹,木纹等。具体定义格式如下例所示:
因为三种资源文件类型的定义格式相同,所以上例中仅以MESH为例。其中files表示资源文件列表,列表中的每一项表示一个资源文件。资源文件中的id表示资源的唯一标识,渲染对象可以通过id进行索引;fileType表示资源文件类型,包括MESH,MATERIAL,TEXTURE一共3种类型;path表示资源文件相对路径;name表示资源文件在3D编辑器中显示的名字;hash表示文件的md5,添加资源文件前,首先检查元数据中的files中是否存在hash值一样的文件。如果有,则无需添加,直接利用已有资源文件,防止重复拷贝存在大量重复文件。
渲染对象用于表示场景中所有可被渲染的渲染物体,类型为Node,渲染对象之间通过树形关系表示位置相对关系,具体定义如下:
其中scenes表示场景列表,可以定义多个场景。objects表示渲染物体列表,列表中的元素表示渲染物体,呈树形结构,leaf表示当前节点的叶子结点。meshId和materialId表示关联的Mesh和Material资源文件的id;type表示渲染物体类型,这里设置为NODE;transform设置为渲染物体的位置变换信息,包括translation(平移)、scale(缩放)、rotation(旋转)。上例中,object1下有一叶子结点object2,object2的transform是相对于父节点。在求object2相对于世界坐标系的位置时,需要遍历所有父节点进行累积计算,上例中object相对世界坐标系的translation为[-100+100,-200+200,0+300]=[0,0,300]。
所述渲染对象还可以包括摄像机、光源,这些渲染物体虽然在元数据中进行定义,但只有在场景中才可见,因为摄像机是为了展示预览画面而添加,光源是为了物体的渲染更加逼真,所以不应该出现在预览画面。
通过摄像机取景框的范围选择渲染物体渲染到渲染目标中从而展示预览画面,所述渲染物体类型为NODE。摄像机包括Perspective和Orthographic两种类型,Perspective模拟透视效果,提供景深效果,用来展示3D物体;Orthographic采用平行视锥的方式,物体的大小不随远近而变化,用来展示屏幕的图像和文字。场景中至少需要一个摄像机。以Perspective摄像机为例,具体定义如下:
其中transform表示摄像机的位置变换信息,settings表示Perspective相关设定,具体参数如图3所示,其中,aspect表示摄像机视锥中宽度与高度的比值,w表示摄像机视锥的宽度,h表示摄像机视锥的高度;far表示远平面距离摄像机的距离;near表示***面距离摄像机的距离;fovy表示视野,即视锥体的开角角度。
光源用于模拟现实中的光线,为了使得物体渲染更加逼真,光源分为点光源,方向光,环境光,环境贴图。这些类型分别用来模拟现实中不同的光线效果。以方向光为例,具体定义如下:
info表示光源的属性,color表示光源的颜色,上例中[1.0,1.0,1.0]表示白色光,lightType为光源类型,DIRECTIONAL表示方向光。因为方向光是来自无穷远处的平行光,所以只需要设定光源的角度即可,rotation表示光源与平面的夹角,用四元数表示。
场景设定用于设置渲染目标和渲染顺序,所述渲染目标包括实时目标和捕获目标,只有在实时和录制中可见,将其设置为实时目标,不仅在实时,在最后录制的视频中也可见,将其设置为捕获目标。这样可以隐藏一些UI控件或者提示文字,保证只在实时目标中可见,在录制后的视频中不可见。上面的渲染目标针对摄像机进行设置,在多个摄像机时,每个摄像机都可以设置一个渲染目标,来设置所看到的图像是仅在实时中可见还是实时和视频都可见。
所述渲染顺序是指摄像机的渲染顺序。当场景中包含多个摄像机时还需要设置渲染顺序,因为每个摄像机看到的画面都需要渲染到屏幕上,所以必须考虑渲染顺序问题,每个摄像机的画面可以当成一个层,多个摄像机画面按照融混方式的设定进行逐层贴图,所述融混方式包括但不限于基于贴图的色彩进行叠加生成新的贴图。
构建场景,场景是包含渲染对象的一个3D可视化空间。场景的渲染是处于用户第一视角(即以操作者本人的视角观看)的摄像机(又叫做场景摄像机)拍摄到的图像。这里的场景呈现的是编辑场景,所以空间中的光源,摄像机对于场景摄像机都可见,但场景摄像机自身在任何情况下都不可见。
预览是场景中放置的摄像机拍摄到的3D空间,与场景中所呈现的画面是同一个3D空间,只是因为观察的角度不同而导致渲染结果的不同。另外,由于预览画面指的是素材制作完成后呈现给用户的最终特效,所以场景中放置的光源,摄像机,地面等供编辑使用的渲染物体对于预览画面都是不可见的。
所述渲染场景和预览是指根据元数据构造可渲染的实体对象,具体包括定义元数据时采用json格式,实际渲染时需要包括场景信息,资源信息以及渲染对象。因此需要利用jsonparsor将json数据解析为内存对象,通过元数据中提供的信息构造出可供渲染使用的实体对象。其中用FileMeta表示资源对象,SceneMeta表示场景对象,ObjectMeta表示渲染对象。另外,需要定义一个渲染管理对象RenderManager来负责管理场景的渲染和调度。
首先,RenderManager需要维护两个渲染实例RenderInstance,这两个RenderInstance分别表示场景渲染和预览渲染实例,所述场景渲染实例对可渲染的渲染物体、摄像机、光源、地面、摄像机视线、视平面以及场景交互中产生的操作进行场景渲染,其中,地面,摄像机视线、视平面等只有在编辑场景下才可见的渲染对象。同时,场景渲染的摄像机变换是基于用户第一视角的摄像机(即场景摄像机)。所述预览渲染实例根据场景渲染实例中摄像机取景框内的渲染物体以及场景交互中产生的操作进行预览渲染,对于Camera和Light类型,需要在创建渲染节点时忽略掉。
预览渲染的摄像机变换是基于场景中放置的摄像机模型拍摄到的画面,如果放置多个摄像机,则根据前面场景设定中提到的渲染顺序,将每个摄像机拍摄到的画面生成一个贴图,然后按照渲染层级,将每两个相邻贴图的像素按照设定的混合方式进行混合,所述混合方式为photoshop中常用的混合模式,如Multiply,Overlay,Screen等,然后生成一张新的纹理与下一层贴图再进行混合,这样就可以让3D模型,UI控件,文字等放置在多个摄像机下,实现逐层渲染。
这样两种渲染方式是基于同一套元数据,但是渲染类型不同,其中一个需要渲染编辑场景,另一个需要渲染预览画面,因此创建的渲染节点也不同。虽然基于同一个3D空间,但由于摄像机的视角不同,所以渲染的结果也完全不同。实现同一套元数据同时渲染场景和预览画面的方案。
同时,由于在执行渲染期间,可能会对渲染对象发生改变,即用户在场景交互中产生操作,比如添加删除资源,移动等操作,这些操作如果在执行渲染期间执行,会产生异常。因此需要管理执行渲染过程中产生的操作,所述操作包括但不限于删除、移动,将所述操作进行封装并存储在队列中,之后每次执行渲染前首先执行列队中封装的操作。具体如下,在每个RenderInstance中创建一个CommandQueue,用来存储要执行的操作。这样在渲染期间无论在哪个线程提交执行的操作都封装成Command,放到队列中。在每次渲染执行前,依次取出队列中的Command在渲染线程中执行。其中Command包含3个参数:
·object:执行command的对象
·funcPtr:执行command的函数指针
·args:执行command时的传参
在执行CommandQueue中的任务时,从CommandQueue中pop出一个Command,然后执行(object->*funcPtr)(args)。如此循环,直至CommandQueue为空。
在某些场景下,比如移动物体时,鼠标移动可能会在两次渲染中间产生多个移动事件,这样CommandQueue中会积累多个Command。而实际执行时,其实可以将这多个Command进行合并。所以为了提高性能,可以将Command声明一个getId函数,如果两个相邻Command拥有相同的id,则调用mergeWith函数。具体定义如下:
bool mergeWith(const RenderCommand*command)
参数表示新入队列的command,返回值为bool类型,用来指示CommandQueue中是否对Command进行合并。如果返回true,则需要在mergeWith函数中将新入队列的command和当前command合并参数,之后commandQueue会删除新入队列的command,从而减少Command个数;如果返回false,则不对新入队列的command进行任何改变。
对于鼠标移动操作属于可以进行合并的Command,可以将每次的移动偏移量进行累加即可。这样可以将几十个移动的Command合并为1个Command,提高CommandQueue的执行效率。
3D编辑器中,一个很重要的功能就是交互操作,包括场景摄像机视角变换等操作以及渲染对象在场景中的平移、缩放、旋转等操作。而其中通过旋转视角实现对物体进行360全方位观察的功能最为复杂,这里需要解决的问题是场景摄像机如何通过鼠标的移动来实现视角围绕观察点的旋转,世界坐标系与摄像机坐标系的结构图如图4所示,
进行场景交互,通过拖动鼠标驱动场景中的摄像机进行视角变换,以及在场景中执行渲染对象的平移、缩放、旋转操作,执行场景交互是指通过拖动鼠标驱动场景中的摄像机进行视角变换。具体包括,
步骤4a、以用户观看的角度作为观察点,即图4中to为观察点,拖动鼠标,获取鼠标在显示屏幕的移动距离,通过显示屏幕的长宽对移动距离进行归一化;
步骤4b、根据观察点构建世界坐标系,所述世界坐标系包括图4中X、Y、Z轴,根据摄像机构建摄像机坐标系,所述摄像机坐标系包括如图4中所示的Right坐标轴、Up坐标轴、Foward坐标轴,将移动距离转换为旋转角度,所述旋转角度包括deltaX、deltaY,deltaX表示摄像机围绕世界坐标系Y轴的旋转角度,deltaY表示摄像机围绕摄像机坐标系的旋转角度,因为欧拉角存在”万向锁”的问题,所以将欧拉角转换为四元数进行角度的计算,而且四元数在空间旋转计算更加方便。将旋转角度deltaX以四元数的方式存储为q1,将旋转角度deltaY以四元数的方式存储为q2,
于是利用公式(1)将围绕指定旋转轴的欧拉角旋转换为四元数q表示:
q=qw+qxi+qyj+qzk (1)
其中四元数q由一个实数和3个虚数单位i,j,k组成,并且有:
其中kx,ky,kz表示旋转轴,旋转角为θ,而且有
对于deltaX,表示视角围绕世界坐标系的Y轴的旋转,因此旋转轴k=(0,1,0),θ=-deltaX。利用上式求得视角围绕世界坐标系Y轴旋转的四元数q1:
对于deltaY,表示视角围绕自身坐标系Right轴的旋转,因此旋转轴k=(rightx,righty,rightz),θ=-deltaY。利用上式求得视角围绕自身坐标系Right轴旋转的四元数q2:
步骤4c、根据公式(4)计算摄像机相对观察点的向量v1,
v1=Translationcamera-focusPoint (4)
其中Translationcamera表示摄像机在世界坐标系的位置坐标,focusPoint表示摄像机的观察点坐标,
步骤4d、将向量v1根据公式(5)计算得到v3,根据公式(6)更新摄像机在世界坐标系的位置坐标,
v3=q2·q1·v1·q1*·q2* (5)
Translationcamera=v3+focusPoint (6)
其中,q1*为q1的共轭四元数,q2*为q2的共轭四元数,
步骤4e、摄像机坐标系中Right坐标轴根据公式(7)进行旋转得到v2,
v2=q2·right·q2* (7)
根据公式(8)计算摄像机坐标系中up坐标轴,
up=v3×v2 (8)
通过调用OpenGL中的lookAt函数,计算摄像机的变换矩阵,lookAt函数包括3个参数:
eyePosition:表示摄像机的位置
center:观察点
up:摄像机的上轴
其中,eyePosition即为上面求得的v3;center为世界坐标系原点;up为上面求得的upVector。利用这3个参数可以求得摄像机的变换矩阵m。m是将物体转换到摄像机坐标系下的变换矩阵。所以求解摄像机在原世界坐标系的变换矩阵时,需要将矩阵m求逆。即m=m-1,求得的变换矩阵m如下式所示:
根据变换矩阵计算四元数qr,并将四元数转换为旋转矩阵R,具体包括,在进行四元数qr求解的时候首先根据公式(9)求出矩阵的迹(Trace):
trace=1+r11+r22+r33 (9)
根据迹的大小分成如下两种情况进行求解:
情况1,trace>0:
否则,进入情况2。在情况2下,还需要分为三种子情况:
如果max(r11,r22,r33)=r11,令
如果max(r11,r22,r33)=r22,令/>
如果max(r11,r22,r33)=r33,令
于是,根据上式可以求得旋转矩阵的四元数表示qr=(qx,qy,qz,qw)。根据公式(10)计算摄像机变换后的位置v',v为摄像机变换前的位置,
v'=Translationcamera·R·v (10)
其中,v为摄像机变换前的位置,v'为摄像机变换后的位置,
通过以上步骤,可以求得场景摄像机v的平移量Translationcamera和四元数旋转量qr,将qr按照下式转换为旋转矩阵。
于是场景摄像机变换后的位置v'=Translationcamera·R·v,根据v'获取渲染物体的信息并展示在显示屏幕中,进而可以实现通过鼠标的拖动使得场景摄像机围绕观察点旋转。
本发明提供一种实现3D特效编辑器的方法,能够解决3D特效编辑器的元数据定义、场景和预览渲染的具体方案,同时在场景和预览渲染中,提出了一种合并同类型操作的方案,能够优化渲染执行过程中所产生相关操作的执行效率。在场景交互中,解决了如何通过鼠标移动实现视角围绕观察点旋转的技术问题。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (3)
1.一种实现3D特效编辑器的方法,其特征在于,包括,
步骤一、定义元数据,所述元数据包括资源文件、渲染对象、场景设定,资源文件用于存储渲染物体的信息,所述渲染物体的信息包括网格信息、材质信息、纹理信息;渲染对象用于表示场景中所有可被渲染的渲染物体,所述渲染对象还包括摄像机、光源,摄像机用于根据摄像机取景框的范围确定可渲染的渲染物体,光源用于模拟现实中的光线,场景设定包括渲染目标和渲染顺序,所述渲染目标包括实时目标和捕获目标,所述渲染顺序是指摄像机的渲染顺序;
步骤二、构建场景,场景为包含渲染对象的一个3D可视化空间,
步骤三、进行场景交互,通过拖动鼠标驱动场景中的摄像机进行视角变换,以及在场景中执行渲染对象的平移、缩放、旋转操作;
步骤四、执行渲染,具体包括根据场景信息、渲染对象信息、资源文件信息进行渲染,构建渲染管理对象,将渲染管理对象实例化为场景渲染实例和预览渲染实例,场景渲染实例进行场景渲染,预览渲染实例进行预览渲染,所述场景渲染实例根据场景中可渲染的渲染物体、摄像机、光源、地面、摄像机视线、视平面以及场景交互中产生的操作进行场景渲染,所述预览渲染实例根据场景渲染实例中摄像机取景框内的渲染物体以及场景交互中产生的操作进行预览渲染,同时管理执行渲染过程中产生的操作,所述操作包括但不限于删除、移动渲染物体,所述管理为首先将当前执行渲染过程中用户产生的操作进行封装并存储在队列中,之后每次执行渲染前首先执行列队中封装的操作,所述执行列队中封装的操作还包括当操作的类型一致时,对操作进行合并执行。
2.根据权利要求1所述的一种实现3D特效编辑器的方法,其特征在于,所述预览渲染实例进行预览渲染还包括当场景渲染实例中摄像机的数量多于一台时,对每个摄像机拍摄画面进行逐层渲染,将每个摄像机拍摄画面生成一个贴图,然后按照摄像机的渲染顺序,分别将每两个相邻贴图的像素进行混合生成一张新的贴图,新的贴图与下一层贴图再进行混合,所述混合指一个贴图与其它贴图的色彩叠加方式。
3.根据权利要求1所述的一种实现3D特效编辑器的方法,其特征在于,所述通过拖动鼠标驱动场景中的摄像机进行视角变换包括,
步骤4a、以用户在显示观看的角度作为观察点,拖动鼠标,获取鼠标在显示屏幕的移动距离,通过显示屏幕的长宽对移动距离进行归一化;
步骤4b、根据观察点构建世界坐标系,根据摄像机构建摄像机坐标系,所述摄像机坐标系包括Right坐标轴、Up坐标轴、Foward坐标轴,将移动距离转换为旋转角度,所述旋转角度包括deltaX、deltaY,deltaX表示摄像机围绕世界坐标系Y轴的旋转角度,deltaY表示摄像机围绕摄像机坐标系的旋转角度,将旋转角度deltaX以四元数的方式存储为q1,将旋转角度deltaY以四元数的方式存储为q2,
步骤4c、根据公式(1)计算摄像机相对观察点的向量v1,
v1=Translationcamera-focusPoint (1)
其中Translationcamera表示摄像机在世界坐标系的位置坐标,focusPoint表示摄像机的观察点坐标,
步骤4d、将向量v1根据公式(2)计算得到v3,根据公式(3)更新摄像机在世界坐标系的位置坐标,
v3=q2·q1·v1·q1*·q2* (2)
Translationcamera=v3+focusPoint (3)
其中,q1*为q1的共轭四元数,q2*为q2的共轭四元数,
步骤4e、摄像机坐标系中Right坐标轴根据公式(4)进行旋转得到v2,根据公式(5)计算摄像机坐标系中up坐标轴,通过调用OpenGL中的lookAt函数,计算摄像机的变换矩阵,根据变换矩阵计算四元数qr,并将四元数转换为旋转矩阵R,根据公式(6)计算摄像机变换后的位置v',v为摄像机变换前的位置,根据v'获取渲染物体的信息并展示在显示屏幕中,
v2=q2·right·q2* (4)
up=v3×v2 (5)
v′=Translationcamera·R·v (6)
其中,v为摄像机变换前的位置,v'为摄像机变换后的位置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210622500.3A CN115019019B (zh) | 2022-06-01 | 2022-06-01 | 一种实现3d特效编辑器的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210622500.3A CN115019019B (zh) | 2022-06-01 | 2022-06-01 | 一种实现3d特效编辑器的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115019019A CN115019019A (zh) | 2022-09-06 |
CN115019019B true CN115019019B (zh) | 2024-04-30 |
Family
ID=83073286
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210622500.3A Active CN115019019B (zh) | 2022-06-01 | 2022-06-01 | 一种实现3d特效编辑器的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115019019B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105354872A (zh) * | 2015-11-04 | 2016-02-24 | 深圳墨麟科技股份有限公司 | 一种基于3d网页游戏的渲染引擎、实现方法及制作工具 |
CN106780686A (zh) * | 2015-11-20 | 2017-05-31 | 网易(杭州)网络有限公司 | 一种3d模型的合并渲染***及方法、终端 |
WO2017092307A1 (zh) * | 2015-12-01 | 2017-06-08 | 乐视控股(北京)有限公司 | 模型渲染方法及装置 |
CN111701238A (zh) * | 2020-06-24 | 2020-09-25 | 腾讯科技(深圳)有限公司 | 虚拟画卷的显示方法、装置、设备及存储介质 |
-
2022
- 2022-06-01 CN CN202210622500.3A patent/CN115019019B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105354872A (zh) * | 2015-11-04 | 2016-02-24 | 深圳墨麟科技股份有限公司 | 一种基于3d网页游戏的渲染引擎、实现方法及制作工具 |
CN106780686A (zh) * | 2015-11-20 | 2017-05-31 | 网易(杭州)网络有限公司 | 一种3d模型的合并渲染***及方法、终端 |
WO2017092307A1 (zh) * | 2015-12-01 | 2017-06-08 | 乐视控股(北京)有限公司 | 模型渲染方法及装置 |
CN111701238A (zh) * | 2020-06-24 | 2020-09-25 | 腾讯科技(深圳)有限公司 | 虚拟画卷的显示方法、装置、设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
面向大数据集的地形模型多分辨率建模关键技术研究;张慧杰;《博士电子期刊》;20090831;第1-125页 * |
Also Published As
Publication number | Publication date |
---|---|
CN115019019A (zh) | 2022-09-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108648269B (zh) | 三维建筑物模型的单体化方法和*** | |
US8633939B2 (en) | System and method for painting 3D models with 2D painting tools | |
US20140218356A1 (en) | Method and apparatus for scaling images | |
WO2021135320A1 (zh) | 一种视频的生成方法、装置及计算机*** | |
EP3282427B1 (en) | Composing an animation scene in a computer-generated animation | |
CA3139657C (en) | Apparatus for multi-angle screen coverage analysis | |
US20220375152A1 (en) | Method for Efficiently Computing and Specifying Level Sets for Use in Computer Simulations, Computer Graphics and Other Purposes | |
US11238657B2 (en) | Augmented video prototyping | |
Trapp et al. | Colonia 3D communication of virtual 3D reconstructions in public spaces | |
CN115019019B (zh) | 一种实现3d特效编辑器的方法 | |
US20230066931A1 (en) | Method for associating production elements with a production approach | |
EP4097607B1 (en) | Applying non-destructive edits to nested instances for efficient rendering | |
US11625900B2 (en) | Broker for instancing | |
CN112070904A (zh) | 应用于博物馆的增强现实展示方法 | |
Giertsen et al. | An open system for 3D visualisation and animation of geographic information | |
Trapp et al. | Communication of digital cultural heritage in public spaces by the example of roman cologne | |
JP2020013390A (ja) | 情報処理装置、情報処理プログラム及び情報処理方法 | |
Li et al. | Design of Product Characteristics 3D Model Display System Based on Digital Earth | |
Denisov | Elaboration of New Viewing Modes in CATIA CAD for Lighting Simulation Purpose | |
CN117853662A (zh) | 播放器在演示文本中实现三维模型实时交互的方法和装置 | |
CN115134529A (zh) | 一种多视角展示项目模型的方法、设备及可读存储介质 | |
Cheng | Human Skeleton System Animation | |
CN118250450A (zh) | 虚拟光场模拟*** | |
Abidi et al. | Hybrid 3D Modeling of Large Landscapes from Satellite Maps | |
CN116738540A (zh) | 将bim数据通过图形交互引擎在移动设备呈现并使用的方法 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |