[发明专利]一种基于Unity的软件线性渲染的方法有效
申请号: | 201810436974.2 | 申请日: | 2018-05-09 |
公开(公告)号: | CN108921775B | 公开(公告)日: | 2022-07-15 |
发明(设计)人: | 陈童 | 申请(专利权)人: | 苏州蜗牛数字科技股份有限公司 |
主分类号: | G06T3/00 | 分类号: | G06T3/00 |
代理公司: | 北京德崇智捷知识产权代理有限公司 11467 | 代理人: | 王金双 |
地址: | 215000 江苏省*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 unity 软件 线性 渲染 方法 | ||
一种基于Unity的软件线性渲染的方法,包括以下步骤:(1)对线性渲染的环境进行判断;(2)如果环境为Gamma Space,则在Gamma Space环境下进行软件线性渲染;(3)如果环境为Linear Space,则在Linear Space环境下进行软件线性渲染。本发明可以在不支持硬件渲染的设备上,实现与硬件线性渲染相同的画面效果。
技术领域
本发明涉及线性渲染领域,特别是一种基于Unity软件进行线性渲染的方法。
背景技术
线性渲染(Linear Rendering)就是渲染场景所有输入都是线性的。使用线性渲染相比于在伽玛空间(GammaSpace)进行非线性的渲染,更贴近真实世界的表现。如果在Unity中开启了线性渲染模式,Unity会将Default类型的纹理设置为sRGB模式,这种模式下硬件在对纹理进行采样时会自动将其转换到线性空间中(Linear Space);并且,也会设置一个sRGB格式的buffer,此时GPU会在shader写入color buffer前自动进行伽马校正(GammaCorrection)。
然而并非所有硬件都能支持sRGB格式的纹理采样技术,Unity引擎也并没有提供在硬件线性渲染不支持的情况下的解决方案。目前,在其他的一些引擎中,存在采用软件线性渲染的方式来解决该问题,但实现的方法过于简单,不能完全还原硬件线性渲染的效果。
发明内容
为了解决现有技术存在的不足,本发明的目的在于提供一种基于Unity引擎的软件线性渲染的方案。本发明可以在不支持硬件渲染的设备上,实现与硬件线性渲染相同的画面效果。
为实现上述目的,本发明提出了基于Unity的软件线性渲染的方法,包括以下步骤:
(1) 对线性渲染的环境进行判断;
(2) 如果环境为Gamma Space,则在Gamma Space环境下进行软件线性渲染;
(3) 如果环境为Linear Space,则在Linear Space环境下进行软件线性渲染。
对应Gamma Space和Linear Space两种环境,具体包括以下两种线性渲染方法。
方法一:一种在Gamma Space环境下实现软件线性渲染的方法,包括以下步骤:
S101:在脚本中定义开启线性渲染的宏_COLORSPACE_GAMMA;
S102:在Shader中执行tex2D()函数之后,并在将该采样结果运用于计算之前,根据宏_COLORSPACE_GAMMA判断是否需要开启软件线性渲染,如果需要线性渲染,则进行一下步骤;如果不需要线性渲染,则直接输出结果;
S103:对tex2D()函数的采样结果执行Pow(...,2.0)操作,以将采样结果的值从非线性转换到线性空间;
S104:执行tex2Dbias()和texCUBE()函数之后,对其采样结果重复S102-S103步骤;
S105:对光照贴图、全局反射贴图和/或光照的采样结果,重复S102-S103步骤,从非线性空间转换到线性空间;
S106:在主相机上添加继承MonoBehaviour的脚本,用于进行全屏后处理的操作;
S107:编写用于屏幕后处理的Shader,对RenderTexture中的颜色执行Pow(...,0.5)操作;
S108:在后处理脚本中,使用步骤S107中的Shader进行OnRenderImage的处理,将处理后的最终结果输出到屏幕上。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于苏州蜗牛数字科技股份有限公司,未经苏州蜗牛数字科技股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810436974.2/2.html,转载请声明来源钻瓜专利网。