CN108921775A - 一种基于Unity的软件线性渲染的方法 - Google Patents
一种基于Unity的软件线性渲染的方法 Download PDFInfo
- Publication number
- CN108921775A CN108921775A CN201810436974.2A CN201810436974A CN108921775A CN 108921775 A CN108921775 A CN 108921775A CN 201810436974 A CN201810436974 A CN 201810436974A CN 108921775 A CN108921775 A CN 108921775A
- Authority
- CN
- China
- Prior art keywords
- linearly
- linear
- unity
- macro
- shader
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 41
- 238000009877 rendering Methods 0.000 claims description 27
- 238000012805 post-processing Methods 0.000 claims description 22
- 238000005286 illumination Methods 0.000 claims description 5
- 238000012986 modification Methods 0.000 claims description 5
- 230000004048 modification Effects 0.000 claims description 5
- 238000012545 processing Methods 0.000 claims description 4
- 230000000694 effects Effects 0.000 abstract description 7
- 238000010586 diagram Methods 0.000 description 4
- 238000005070 sampling Methods 0.000 description 2
- 241000208340 Araliaceae Species 0.000 description 1
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 1
- 235000003140 Panax quinquefolius Nutrition 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 235000008434 ginseng Nutrition 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T3/00—Geometric image transformations in the plane of the image
- G06T3/02—Affine transformations
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Image Generation (AREA)
- Image Processing (AREA)
Abstract
一种基于Unity的软件线性渲染的方法,包括以下步骤:(1)对线性渲染的环境进行判断;(2)如果环境为Gamma Space,则在Gamma Space环境下进行软件线性渲染;(3)如果环境为Linear Space,则在Linear Space环境下进行软件线性渲染。本发明可以在不支持硬件渲染的设备上,实现与硬件线性渲染相同的画面效果。
Description
技术领域
本发明涉及线性渲染领域,特别是一种基于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的处理,将处理后的最终结果输出到屏幕上。
进一步地,在步骤S101中还包括,以#pragma multi_compile的方式定义开启线性渲染的宏_COLORSPACE_GAMMA。
进一步地,在步骤S106中还包括,脚本中包括对_COLORSPACE_GAMMA宏的开关。
更进一步地,使用Shader.EnableKeyword或Shader.DisableKeyword对_COLORSPACE_GAMMA宏进行开关控制。
方法二:一种在Linear Space环境下实现软件线性渲染的方法,包括以下步骤:
S201:在脚本中定义开启线性渲染的宏_COLORSPACE_LINEAR;
S202:在Unity引擎的目录下,修改UnityCG.cginc和UnityStandardBRDF.cginc文件中的内容,加入对宏的判断,以判断是否需要开启软件线性渲染,如果需要线性渲染,则进行一下步骤;如果不需要线性渲染,则直接输出结果;
S203:将修改过后的UnityCG.cginc和UnityStandardBRDF.cginc文件放到Shader文件目录下,并在Shader中添加对上述两个cginc文件的引用;
S204:在主相机上添加继承MonoBehaviour的脚本,用于进行全屏后处理的操作;
S205:编写用于屏幕后处理的Shader,对RenderTexture中的颜色执行Pow(...,0.5)的操作;
S206:在后处理脚本中,使用步骤S205中的Shader进行OnRenderImage的处理,将处理后的最终结果输出到屏幕上。
进一步地,在步骤S1中,由以#pragma multi_compile的方式定义开启线性渲染的宏_COLORSPACE_LINEAR。
进一步地,在步骤S202中,对宏的判断包括:判断UNITY_COLORSPACE_GAMMA的未开启的部分,并且判断宏_COLORSPACE_LINEAR。
进一步地,当所述方法使用在IOS系统上时,步骤S207还包括:复制主相机,将该相机的深度缓冲和颜色缓冲写入到RenderTexture中,在应用运行时持续对RenderTexture进行更新,并将RenderTexture替换后处理脚本中OnRenderImage方法的输入源source。
进一步地,在步骤S204中还包括,脚本中包括对宏_COLORSPACE_LINEAR的开关。
更进一步地,使用Shader.EnableKeyword或Shader.DisableKeyword对宏_COLORSPACE_LINEAR进行开关控制。
本发明提供的基于Unity的软件线性渲染方法,具有如下有益效果:现有技术中的线性渲染方法过于简单,无法完全还原渲染的效果,而本发明的方法能够完全还原硬件线性渲染的效果。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,并与本发明的实施例一起,用于解释本发明,并不构成对本发明的限制。在附图中:
图1为根据本发明的在Gamma Space环境下实现软件线性渲染的方法流程图;
图2为根据本发明的在Linear Space环境下实现软件线性渲染的方法流程图。
具体实施方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
本发明的目的在于提供一种基于Unity引擎的软件线性渲染的方案,本发明包括两种软件线性渲染的实施例,对应了Unity引擎以不同的色彩空间发布应用时的情况。
实施例一
图1为根据本发明的在Gamma Space环境下实现软件线性渲染的方法流程图,下面将参考图1,对本发明的在Gamma Space环境下实现软件线性渲染的方法进行详细描述:
步骤101中,在脚本中定义开启线性渲染的宏_COLORSPACE_GAMMA;该宏_COLORSPACE_GAMMA以#pragma multi_compile的方式定义,若不以该方式定义,则可能无法在最终发布的应用程序中执行线性渲染的相关方法。
步骤102中,在Shader中执行tex2D()函数之后,并在将该采样结果运用于计算之前,根据宏_COLORSPACE_GAMMA判断是否需要开启软件线性渲染,如果需要线性渲染,则进行一下步骤;如果不需要线性渲染,则直接输出结果。
步骤103中,对tex2D()函数的采样结果执行Pow(...,2.0)的操作,以将采样结果的值从非线性转换到线性空间,再将其传递给后面的函数参与计算;
对于tex2Dbias()和texCUBE()函数,对其采样结果重复与tex2D()函数相同的操作步骤。
步骤104中,对Shader中的光照贴图、全局反射贴图和/或光照,重复102-103步骤,将光照贴图的采样结果从非线性空间转换到线性空间。
步骤105中,在主相机上添加继承MonoBehaviour的脚本,用于进行全屏后处理的操作,并确保该脚本在所有其他后处理效果之后执行;该脚本中包括对_COLORSPACE_GAMMA宏的开关,使用Shader.EnableKeyword或Shader.DisableKeyword对_COLORSPACE_GAMMA宏进行开关控制。
步骤106中,编写用于屏幕后处理的Shader,对RenderTexture中的颜色执行Pow(...,0.5)的操作,将其从线性空间转换到非线性空间。
步骤107中,在后处理脚本中,使用步骤106中的Shader进行OnRenderImage的处理,将处理后的最终结果输出到屏幕上,这样得到结果和硬件线性渲染的结果基本等同。
实施例二
图2为根据本发明的在Linear Space环境下实现软件线性渲染的方法流程图,下面将参考图2,对本发明的在Linear Space环境下实现软件线性渲染的方法进行详细描述:
步骤201中,在脚本中定义开启线性渲染的宏_COLORSPACE_LINEAR;该宏_COLORSPACE_GAMMA以#pragma multi_compile的方式定义,若不以该方式定义,则可能无法在最终发布的应用程序中执行线性渲染的相关方法。
步骤202中,若Shader中使用了Unity Shader内置的变量,包括unity_ColorSpaceGrey、unity_ColorSpaceDouble、unity_ColorSpaceDielectricSpec、unity_ColorSpaceLuminance,或者使用了内置的方法,包括DecodeLightmap、DecodeHDR、BRDF1_Unity_PBS、BRDF2_Unity_PBS等,在Unity引擎的Editor\Data\CGIncludes目录下,修改UnityCG.cginc和UnityStandardBRDF.cginc文件中的内容,根据宏_COLORSPACE_LINEAR判断是否需要开启软件线性渲染,如果需要线性渲染,则进行一下步骤;如果不需要线性渲染,则直接输出结果;
通过在该文件中添加对宏_COLORSPACE_LINEAR的判断,可以将光照贴图的采样结果、全局光照贴图的采样结果、能量守恒的计算和光照相关计算,转换到线性空间进行计算。
步骤203中,将修改过后的UnityCG.cginc和UnityStandardBRDF.cginc文件放到Shader文件目录下,并在Shader中添加对上述两个cginc文件的引用;
步骤204中,在空间中的主相机上添加继承MonoBehaviour的脚本,用于进行全屏后处理的操作,并确保该脚本在所有其他后处理效果之后执行;
脚本中包括对宏_COLORSPACE_LINEAR的开关,并且使用Shader.EnableKeyword或Shader.DisableKeyword对宏_COLORSPACE_LINEAR进行开关控制。
步骤205中,编写用于屏幕后处理的Shader,对RenderTexture中的颜色执行Pow(...,0.5)的操作,将其从线性空间转换到非线性空间;
当该方法使用在IOS系统上时,还包括:复制主相机,将该相机的深度缓冲和颜色缓冲写入到RenderTexture中,在应用运行时持续对RenderTexture进行更新,并将RenderTexture替换后处理脚本中OnRenderImage方法的输入源source。
步骤206中,在后处理脚本中,使用步骤205中的Shader进行OnRenderImage的处理,将处理后的最终结果输出到屏幕上,这样得到结果和硬件线性渲染的结果基本等同。
本领域普通技术人员可以理解:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于Unity的软件线性渲染的方法,包括以下步骤:
(1) 对线性渲染的环境进行判断;
(2) 如果环境为Gamma Space,则在Gamma Space环境下进行软件线性渲染;
(3) 如果环境为Linear Space,则在Linear Space环境下进行软件线性渲染;
所述步骤(2)进一步包括以下步骤:
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的处理,将处理后的最终结果输出到屏幕上。
2.根据权利要求1所述的基于Unity的软件线性渲染的方法,其特征在于,在步骤S101中还包括,以#pragma multi_compile的方式定义开启线性渲染的宏_COLORSPACE_GAMMA。
3.根据权利要求1所述的基于Unity的软件线性渲染的方法,其特征在于,在步骤S106中还包括,脚本中包括对_COLORSPACE_GAMMA宏的开关。
4.根据权利要求3所述的基于Unity的软件线性渲染的方法,其特征在于,使用Shader.EnableKeyword或Shader.DisableKeyword对_COLORSPACE_GAMMA宏进行开关控制。
5.根据权利要求1所述的基于Unity的软件线性渲染的方法,其特征在于,所述步骤(3)进一步包括以下步骤:
S201:在脚本中定义开启线性渲染的宏_COLORSPACE_LINEAR;
S202:在Unity引擎的目录下,修改UnityCG.cginc和UnityStandardBRDF.cginc文件中的内容,加入对宏的判断,以判断是否需要开启软件线性渲染,如果需要线性渲染,则进行一下步骤;如果不需要线性渲染,则直接输出结果;
S203:将修改过后的UnityCG.cginc和UnityStandardBRDF.cginc文件放到Shader文件目录下,并在Shader中添加对上述两个cginc文件的引用;
S204:在主相机上添加继承MonoBehaviour的脚本,用于进行全屏后处理的操作;
S205:编写用于屏幕后处理的Shader,对RenderTexture中的颜色执行Pow(...,0.5)的操作;
S206:在后处理脚本中,使用步骤S205中的Shader进行OnRenderImage的处理,将处理后的最终结果输出到屏幕上。
6.根据权利要求6所述的基于Unity的软件线性渲染的方法,其特征在于,在步骤S201中,由以#pragma multi_compile的方式定义开启线性渲染的宏_COLORSPACE_LINEAR。
7.根据权利要求6所述的基于Unity的软件线性渲染的方法,其特征在于,在步骤S202中,对宏的判断包括:判断UNITY_COLORSPACE_GAMMA的未开启的部分,并且判断宏_COLORSPACE_LINEAR。
8.根据权利要求6所述的基于Unity的软件线性渲染的方法,其特征在于,当所述方法使用在IOS系统上时,步骤S205还包括:复制主相机,将该相机的深度缓冲和颜色缓冲写入到RenderTexture中,在应用运行时持续对RenderTexture进行更新,并将RenderTexture替换后处理脚本中OnRenderImage方法的输入源source。
9.根据权利要求6所述的基于Unity的软件线性渲染的方法,其特征在于,在步骤S204中还包括,脚本中包括对宏_COLORSPACE_LINEAR的开关。
10.根据权利要求9所述的基于Unity的软件线性渲染的方法,其特征在于,使用Shader.EnableKeyword或Shader.DisableKeyword对宏_COLORSPACE_LINEAR进行开关控制。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810436974.2A CN108921775B (zh) | 2018-05-09 | 2018-05-09 | 一种基于Unity的软件线性渲染的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810436974.2A CN108921775B (zh) | 2018-05-09 | 2018-05-09 | 一种基于Unity的软件线性渲染的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108921775A true CN108921775A (zh) | 2018-11-30 |
CN108921775B CN108921775B (zh) | 2022-07-15 |
Family
ID=64403360
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810436974.2A Active CN108921775B (zh) | 2018-05-09 | 2018-05-09 | 一种基于Unity的软件线性渲染的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108921775B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109656637A (zh) * | 2018-12-13 | 2019-04-19 | 高新兴科技集团股份有限公司 | 跨平台调用OpenGL ES的渲染方法、装置及计算机存储介质 |
CN110975284A (zh) * | 2019-12-06 | 2020-04-10 | 珠海金山网络游戏科技有限公司 | 一种基于Unity的NGUI资源渲染处理方法及装置 |
CN111068314A (zh) * | 2019-12-06 | 2020-04-28 | 珠海金山网络游戏科技有限公司 | 一种基于Unity的NGUI资源渲染处理方法及装置 |
CN116912382A (zh) * | 2023-09-14 | 2023-10-20 | 成都帆点创想科技有限公司 | 一种渲染方法、装置及电子设备和存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106056661A (zh) * | 2016-05-31 | 2016-10-26 | 钱进 | 基于Direct3D 11的三维图形渲染引擎 |
-
2018
- 2018-05-09 CN CN201810436974.2A patent/CN108921775B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106056661A (zh) * | 2016-05-31 | 2016-10-26 | 钱进 | 基于Direct3D 11的三维图形渲染引擎 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109656637A (zh) * | 2018-12-13 | 2019-04-19 | 高新兴科技集团股份有限公司 | 跨平台调用OpenGL ES的渲染方法、装置及计算机存储介质 |
CN109656637B (zh) * | 2018-12-13 | 2022-01-25 | 高新兴科技集团股份有限公司 | 跨平台调用OpenGL ES的渲染方法、装置及计算机存储介质 |
CN110975284A (zh) * | 2019-12-06 | 2020-04-10 | 珠海金山网络游戏科技有限公司 | 一种基于Unity的NGUI资源渲染处理方法及装置 |
CN111068314A (zh) * | 2019-12-06 | 2020-04-28 | 珠海金山网络游戏科技有限公司 | 一种基于Unity的NGUI资源渲染处理方法及装置 |
CN111068314B (zh) * | 2019-12-06 | 2023-09-05 | 珠海金山数字网络科技有限公司 | 一种基于Unity的NGUI资源渲染处理方法及装置 |
CN116912382A (zh) * | 2023-09-14 | 2023-10-20 | 成都帆点创想科技有限公司 | 一种渲染方法、装置及电子设备和存储介质 |
CN116912382B (zh) * | 2023-09-14 | 2023-12-29 | 成都帆点创想科技有限公司 | 一种渲染方法、装置及电子设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN108921775B (zh) | 2022-07-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108921775A (zh) | 一种基于Unity的软件线性渲染的方法 | |
Tao et al. | Error-tolerant image compositing | |
Wang et al. | A fast multi-scale retinex algorithm for color image enhancement | |
CA2810865C (en) | Streaming light propagation | |
US8319778B2 (en) | Variable motion blur associated with animation variables | |
US8026910B2 (en) | Offline optimization pipeline for 3D content in embedded devices | |
JP2008515058A (ja) | 組込式デバイスにおける柔軟なアンチエイリアス処理 | |
CN111311532B (zh) | 图像处理方法及装置、电子设备、存储介质 | |
CN111489322B (zh) | 给静态图片加天空滤镜的方法及装置 | |
KR20080089560A (ko) | 알파 채널 인식 환경에서 비알파 채널 영상 데이터를 이용하는 시스템 및 방법 | |
CN111383320B (zh) | 虚拟模型处理方法、装置、设备及存储介质 | |
CN111862254A (zh) | 一种基于跨渲染平台的材质渲染的方法及其系统 | |
CN114663633A (zh) | 一种ar虚拟直播方法及系统 | |
US20090282390A1 (en) | Parallel Run-Time Rendering Debugger | |
US8842913B2 (en) | Saturation varying color space | |
US20240087206A1 (en) | Systems and methods of rendering effects during gameplay | |
CA2393596A1 (en) | Processing data | |
CN112348962B (zh) | 模型构件点选方法、装置、计算机设备和存储介质 | |
Albahar | [Retracted] Contrast and Synthetic Multiexposure Fusion for Image Enhancement | |
CN109949400B (zh) | 适于ar虚拟软装合成的光影估计和重构方法 | |
US20070052722A1 (en) | Compositing rendering layers | |
US20030045952A1 (en) | Continuation manager | |
Shang et al. | Single Image Dehazing on Mobile Device Based on GPU Rendering Technology. | |
CN110874816A (zh) | 一种图像处理方法、装置、移动终端及存储介质 | |
CN109241571A (zh) | 一种基于crdt的支持特征cad模型的实时协同编辑方法 |
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 |