著录项信息
专利名称 | 一种虚拟现实场景中优化运动图像的方法和装置 |
申请号 | CN201510961512.9 | 申请日期 | 2015-12-18 |
法律状态 | 暂无 | 申报国家 | 中国 |
公开/公告日 | 2016-06-01 | 公开/公告号 | CN105635805A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | H04N21/44 | IPC分类号 | H;0;4;N;2;1;/;4;4查看分类表>
|
申请人 | 歌尔声学股份有限公司 | 申请人地址 | 山东省潍坊市高新区东明路以东玉清街以北(歌尔电子办公楼502室)
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 歌尔光学科技有限公司 | 当前权利人 | 歌尔光学科技有限公司 |
发明人 | 王明 |
代理机构 | 北京市隆安律师事务所 | 代理人 | 权鲜枝;吴昊 |
摘要
本发明公开了一种虚拟现实场景中优化运动图像的方法和装置。该方法包括:渲染线程逐帧渲染待显示的内容,渲染过程中处于渲染状态,每渲染完一帧后进入等待状态;送屏线程按照与屏幕刷新率相同的频率,逐帧读取最新的渲染结果;送屏线程根据读取结果判断渲染线程的状态,当判断渲染线程处于等待状态时,将读取结果处理后送到屏幕上进行显示,并唤醒渲染线程,当判断渲染线程处于渲染状态时,执行一次清屏操作;渲染线程被唤醒后进行下一帧内容的渲染。本发明的技术方案通过使渲染线程和送屏线程异步刷新,有效地解决了在提高屏幕刷新率时带来的系统性能下降和渲染频率跟不上的问题,从而有效地降低了余晖效果,改善了运动情况下图像模糊的问题。
一种虚拟现实场景中优化运动图像的方法和装置\n技术领域\n[0001] 本发明涉及图像渲染技术领域,特别涉及一种虚拟现实场景中优化运动图像的方法和装置。\n背景技术\n[0002] 随着近年来VR(虚拟现实)广为流行,所以国内的很多厂商也逐渐进入这个市场,尤其是移动端的VR市场。我们戴上国外大厂头显的时候,体验十分出色,感觉非常棒,可戴上国产的VR头显,不动的时候还好,一动起来图像就会模糊,让人极度眩晕。\n[0003] 造成眩晕的主要原因是头部运动和视觉观测到的头部运动的不匹配。这也是VR头显能够从技术上加以改善的部分。其中这一点包括两个部分:帧间延迟和帧内延迟。帧内延迟是造成图像模糊的主要原因。如图1所示,我们可以看到,左边这张图是真实的世界中,一个物体从左往右移动时眼睛看到的情况:随着时间的推移,物体的轨迹是一条线;而右边的图则是任何一种显示器显示出来的情况:物体的图像在每一个点显示一段时间之后,就跳到下一个点;它并非是连续的运动。\n[0004] 想要让物体的图像更加连续的移动,一个办法,就是降低余晖(Persistence)。低余晖显示对VR头显的意义在于,头动时物体的轨迹更加接近于物理世界的真实轨迹。目前的LCD的基本显示原理:通过让液晶翻转来选择性透过光线。这意味着LCD很难使用低余晖显示。想要解决这个问题,VR头显必须使用主动发光的显示屏,比方说OLED。由于其每个像素都是主动发光的,所以OLED屏幕可以做到低余晖。但是考虑到OLED屏幕的专利及成本等方面,OLED屏幕的应用有一定的局限性。\n[0005] 另一个办法是提高刷新率。但是目前移动平台的屏幕刷新率只能达到120Hz,而且单纯提高刷屏频率,其他硬件设备性能匹配不上,使得系统性能迅速下降,应用的渲染频率远远不能稳定在较高频率上,这样就会导致刷频时会重复刷同一帧的内容从而形成和60Hz屏幕一样的余晖效果。\n发明内容\n[0006] 鉴于现有技术由于帧内延迟导致的虚拟现实场景图像模糊的问题,提出了本发明的一种虚拟现实场景中优化运动图像的方法和装置,以便克服上述问题或者至少部分地解决上述问题。\n[0007] 依据本发明的一个方面,提供了一种虚拟现实场景中优化运动图像的方法,该方法包括:\n[0008] 渲染线程逐帧渲染待显示的内容,渲染过程中处于渲染状态,每渲染完一帧内容后进入等待状态;\n[0009] 送屏线程按照与屏幕刷新率相同的频率,逐帧读取所述渲染线程最新的渲染结果;\n[0010] 所述送屏线程根据读取结果判断所述渲染线程的状态,当判断所述渲染线程处于等待状态时,则将读取结果处理后送到屏幕上进行显示,并唤醒所述渲染线程,当判断所述渲染线程处于渲染状态时,则执行一次清屏操作;\n[0011] 处于等待状态的所述渲染线程被唤醒后进行下一帧内容的渲染。\n[0012] 可选地,所述送屏线程根据读取结果判断所述渲染线程的状态包括:\n[0013] 在渲染结果中设置帧变量,所述渲染线程每渲染完成一帧内容后所述帧变量的值加一;\n[0014] 所述送屏线程获取所述渲染结果中的所述帧变量,判断所述帧变量的值是否与上一次读取的渲染结果中的帧变量的值相同,若不同则判断所述渲染线程处于等待状态,若相同则判断所述渲染线程处于渲染状态。\n[0015] 可选地,该方法还包括:\n[0016] 设置条件变量;\n[0017] 所述渲染线程每渲染完一帧内容后进入等待状态包括:利用所述条件变量在渲染完成一帧内容后阻塞所述渲染线程;\n[0018] 所述当判断所述渲染线程处于等待状态时,唤醒所述渲染线程包括:当判断所述渲染线程处于等待状态时,向所述条件变量发送唤醒信号,所述条件变量根据所述唤醒信号唤醒所述渲染线程。\n[0019] 可选地,该方法还包括:\n[0020] 设置互斥锁,所述互斥锁用于保护所述条件变量的改变。\n[0021] 依据本发明的另一个方面,提供了一种虚拟现实场景中优化运动图像的装置,该装置包括:\n[0022] 渲染处理单元和送屏显示单元;\n[0023] 所述渲染处理单元,适于通过渲染线程逐帧渲染待显示的内容,渲染过程中所述渲染线程处于渲染状态,每渲染完一帧内容后所述渲染线程进入等待状态;\n[0024] 送屏显示单元,适于通过送屏线程按照与屏幕刷新率相同的频率,逐帧读取所述渲染线程最新的渲染结果;\n[0025] 所述送屏显示单元,进一步适于通过所述送屏线程根据读取结果判断所述渲染线程的状态,当判断所述渲染线程处于等待状态时,则将读取结果处理后送到屏幕上进行显示,并唤醒所述渲染线程,当判断所述渲染线程处于渲染状态时,则执行一次清屏操作;\n[0026] 所述渲染处理单元,进一步适于使处于等待状态的所述渲染线程被唤醒后进行下一帧内容的渲染。\n[0027] 可选地,所述渲染处理单元,进一步适于在渲染结果中设置帧变量,所述渲染线程每渲染完成一帧内容后所述帧变量的值加一;\n[0028] 所述送屏显示单元,进一步适于通过所述送屏线程获取所述渲染结果中的所述帧变量,判断所述帧变量的值是否与上一次读取的渲染结果中的帧变量的值相同,若不同则判断所述渲染线程处于等待状态,若相同则判断所述渲染线程处于渲染状态。\n[0029] 可选地,该装置还包括:\n[0030] 设置单元,用于设置条件变量;\n[0031] 所述渲染处理单元,进一步适于利用所述条件变量在渲染完成一帧内容后阻塞所述渲染线程;\n[0032] 所述送屏显示单元,进一步适于当判断所述渲染线程处于等待状态时,向所述条件变量发送唤醒信号,所述条件变量根据所述唤醒信号唤醒所述渲染线程。\n[0033] 可选地,所述设置单元,进一步适于设置互斥锁,所述互斥锁用于保护所述条件变量的改变。\n[0034] 综上所述,本发明的技术方案通过渲染完成后阻塞渲染线程,并在读取最新渲染结果后判断渲染线程的状态,当渲染线程处于等待状态时,将读取结果处理后送到屏幕上进行显示,并唤醒渲染线程,当判断渲染线程处于渲染状态时,执行一次清屏操作,使渲染线程和送屏线程异步刷新,有效地解决了在提高屏幕刷新率时带来的系统性能下降和渲染频率跟不上的问题,从而有效地降低了余晖效果,改善了运动情况下图像模糊的问题。\n附图说明\n[0035] 图1为真实世界物体运动轨迹和显示器显示的物体运动轨迹比较示意图;\n[0036] 图2为本发明一个实施例提供的一种虚拟现实场景中优化运动图像的方法流程图;\n[0037] 图3为本发明另一个实施例提供的一种虚拟现实场景中优化运动图像的方法流程图;\n[0038] 图4为本发明一个实施例提供的一种虚拟现实场景中优化运动图像的装置示意图;\n[0039] 图5为本发明另一个实施例提供的一种虚拟现实场景中优化运动图像的装置示意图。\n具体实施方式\n[0040] 为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。\n[0041] 图2为本发明一个实施例提供的一种虚拟现实场景中优化运动图像的方法流程图。如图2所示,该方法包括:\n[0042] 步骤S110,渲染线程逐帧渲染待显示的内容,渲染过程中处于渲染状态,每渲染完一帧内容后进入等待状态。\n[0043] 步骤S120,送屏线程按照与屏幕刷新率相同的频率,逐帧读取渲染线程最新的渲染结果。\n[0044] 步骤S130,送屏线程根据读取结果判断渲染线程的状态,当判断渲染线程处于等待状态时,则将读取结果处理后送到屏幕上进行显示,并唤醒渲染线程,当判断渲染线程处于渲染状态时,则执行一次清屏操作。\n[0045] 步骤S140,处于等待状态的渲染线程被唤醒后进行下一帧内容的渲染。\n[0046] 本发明的技术方案通过渲染完成后阻塞渲染线程,并在读取最新渲染结果后判断渲染线程的状态,当渲染线程处于等待状态时,将读取结果处理后送到屏幕上进行显示,并唤醒渲染线程,当判断渲染线程处于渲染状态时,执行一次清屏操作,使渲染线程和送屏线程异步刷新,每一次的清屏操作,带来的效果如同OLED屏中的灭屏,通过这种方式来降低余晖,有效地解决了在提高屏幕刷新率时带来的系统性能下降和渲染频率跟不上的问题,从而有效地降低了余晖效果,改善了运动情况下图像模糊的问题。\n[0047] 图3为本发明另一个实施例提供的一种虚拟现实场景中优化运动图像的方法流程图,如图3所示,该方法包括:\n[0048] 步骤S210,渲染线程逐帧渲染待显示的内容,渲染过程中处于渲染状态,每渲染完一帧内容后进入等待状态,其中,在渲染结果中设置帧变量,渲染线程每渲染完成一帧内容后帧变量的值加一。\n[0049] 步骤S220,送屏线程按照与屏幕刷新率相同的频率,逐帧读取渲染线程最新的渲染结果。\n[0050] 步骤S230,送屏线程获取渲染结果中的帧变量,判断帧变量的值是否与上一次读取的渲染结果中的帧变量的值相同。\n[0051] 步骤S240,当帧变量值相同时,送屏线程判断渲染线程处于渲染状态,执行一次清屏操作。\n[0052] 步骤S250,当帧变量值不同时,送屏线程判断渲染线程处于等待状态,将读取结果处理后送到屏幕上进行显示,并唤醒渲染线程。\n[0053] 步骤S260,处于等待状态的渲染线程被唤醒后进行下一帧内容的渲染。\n[0054] 通过设置帧变量,在完成渲染生成渲染结果后为帧变量加一计数,并在读取渲染结果后比较本次的帧变量和上一次的帧变量值,判断渲染线程的状态;当渲染线程处于渲染状态时,说明渲染未完成,本次取得的最新渲染结果是重复帧,当所述渲染线程处于等待状态时,说明渲染完成,取得的渲染结果是新的帧而不是重复帧。\n[0055] 在本发明的一个实施例中,该方法还包括:\n[0056] 步骤150,设置条件变量。\n[0057] 其中,步骤S110中渲染线程每渲染完一帧内容后进入等待状态包括:利用条件变量在渲染完成一帧内容后阻塞渲染线程。\n[0058] 步骤S130中当判断渲染线程处于等待状态时,唤醒渲染线程包括:当判断渲染线程处于等待状态时,向条件变量发送唤醒信号,条件变量根据唤醒信号唤醒渲染线程。\n[0059] 在此基础上,该方法还包括:\n[0060] 步骤S160,设置互斥锁,所述互斥锁用于保护条件变量的改变。\n[0061] 条件变量是一种同步机制,允许线程挂起,直到共享数据上的某些条件得到满足。\n条件变量上的基本操作有:触发条件(当条件变为true时);等待条件,挂起线程直到其他线程触发条件。\n[0062] 将条件变量和互斥锁结合使用,以避免出现条件竞争——一个线程预备等待一个条件变量,当它在真正进入等待之前,另一个线程恰好触发了该条件。\n[0063] 在本发明的一个实施例中,渲染线程调用pthread_cond_wait等待条件,送屏线程调用pthread_cond_signal发送信号,通知条件变量唤醒渲染线程,渲染线程被唤醒后进行下一帧内容的绘制。条件变量被用来阻塞渲染线程,互斥锁用来保护条件变量,避免发生竞争。\n[0064] 当条件不满足时,解开互斥锁并等待条件发生变化。一旦送屏线程改变了条件变量,它将通知条件变量唤醒被阻塞的渲染线程。渲染线程将重新锁定互斥锁并重新测试条件是否满足。\n[0065] 图4为本发明一个实施例提供的一种虚拟现实场景中优化运动图像的装置示意图。如图4所示,该虚拟现实场景中优化运动图像的装置200包括:\n[0066] 渲染处理单元210和送屏显示单元220。\n[0067] 渲染处理单元210,适于通过渲染线程逐帧渲染待显示的内容,渲染过程中渲染线程处于渲染状态,每渲染完一帧内容后渲染线程进入等待状态。\n[0068] 送屏显示单元220,适于通过送屏线程按照与屏幕刷新率相同的频率,逐帧读取渲染线程最新的渲染结果。\n[0069] 送屏显示单元210,进一步适于通过送屏线程根据读取结果判断渲染线程的状态,当判断渲染线程处于等待状态时,则将读取结果处理后送到屏幕上进行显示,并唤醒渲染线程,当判断渲染线程处于渲染状态时,则执行一次清屏操作。\n[0070] 渲染处理单元210,进一步适于使处于等待状态的渲染线程被唤醒后进行下一帧内容的渲染。\n[0071] 在本发明的一个实施例中,渲染处理单元210,进一步适于在渲染结果中设置帧变量,渲染线程每渲染完成一帧内容后帧变量的值加一。\n[0072] 送屏显示单元220,进一步适于通过送屏线程获取渲染结果中的帧变量,判断帧变量的值是否与上一次读取的渲染结果中的帧变量的值相同,若不同则判断渲染线程处于等待状态,若相同则判断渲染线程处于渲染状态。\n[0073] 图5为本发明另一个实施例提供的一种虚拟现实场景中优化运动图像的装置示意图,如图5所示,该虚拟现实场景中优化运动图像的装置300包括渲染处理单元310、送屏显示单元320和设置单元330。\n[0074] 其中,渲染处理单元310和送屏显示单元320和上文所述的渲染处理单元210和送屏显示单元220对应相同,在此不再赘述。\n[0075] 设置单元330,用于设置条件变量。\n[0076] 所述渲染处理单元310,进一步适于利用条件变量在渲染完成一帧内容后阻塞渲染线程。\n[0077] 送屏显示单元320,进一步适于当判断渲染线程处于等待状态时,向条件变量发送唤醒信号,条件变量根据唤醒信号唤醒渲染线程。\n[0078] 在本发明的一个实施例中,\n[0079] 设置单元330,进一步适于设置互斥锁,互斥锁用于保护条件变量的改变。\n[0080] 需要说明的是,图4到图5所示装置的各实施例与上文图2到图3所示方法的各实施例对应相同,上文已详细说明,在此不再赘述。\n[0081] 综上所述,本发明的技术方案通过渲染完成后阻塞渲染线程,并在读取最新渲染结果后判断渲染线程的状态,当渲染线程处于等待状态时,将读取结果处理后送到屏幕上进行显示,并唤醒渲染线程,当判断渲染线程处于渲染状态时,执行一次清屏操作,使渲染线程和送屏线程异步刷新,有效地解决了在提高屏幕刷新率时带来的系统性能下降和渲染频率跟不上的问题,从而有效地降低了余晖效果,改善了运动情况下图像模糊的问题。将互斥锁和条件变量结合使用,实现送屏线程和渲染线程之间的通信,避免了条件竞争。\n[0082] 以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有引用任何外部专利数据! |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |