CN108921775A - 一种基于Unity的软件线性渲染的方法 - Google Patents

一种基于Unity的软件线性渲染的方法 Download PDF

Info

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
Application number
CN201810436974.2A
Other languages
English (en)
Other versions
CN108921775B (zh
Inventor
陈童
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Suzhou Snail Digital Technology Co Ltd
Original Assignee
Suzhou Snail Digital Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Suzhou Snail Digital Technology Co Ltd filed Critical Suzhou Snail Digital Technology Co Ltd
Priority to CN201810436974.2A priority Critical patent/CN108921775B/zh
Publication of CN108921775A publication Critical patent/CN108921775A/zh
Application granted granted Critical
Publication of CN108921775B publication Critical patent/CN108921775B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T3/00Geometric image transformations in the plane of the image
    • G06T3/02Affine 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的软件线性渲染的方法
技术领域
本发明涉及线性渲染领域,特别是一种基于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进行开关控制。
CN201810436974.2A 2018-05-09 2018-05-09 一种基于Unity的软件线性渲染的方法 Active CN108921775B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106056661A (zh) * 2016-05-31 2016-10-26 钱进 基于Direct3D 11的三维图形渲染引擎

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106056661A (zh) * 2016-05-31 2016-10-26 钱进 基于Direct3D 11的三维图形渲染引擎

Cited By (7)

* Cited by examiner, † Cited by third party
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