次世代角色渲染技术概述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/jxw167/article/details/101616435

在上篇给读者介绍了关于卡通渲染的一些技术点,本篇再介绍一下关于次世代角色渲染技术,市面上占主流的游戏还是大型的次世代渲染,Unity自身提供了Standard和Standard(Specular),但是对于游戏的品质来说还远远不够,而且相对来说比较耗,这就需要我们自己去提升,其实新版的Unity给我们提供了Shader Graph作为Shader工具来说还是可以使用的,它相比Shader Forge好很多的。次世代渲染也可以成为PBR渲染,我们将它拆分开,涉及到的渲染技术如下所示:
在这里插入图片描述
以上就是我们实现次世代渲染使用的技术点,在这里就不介绍算法方程了,想具体了解的读者可以自行查阅,其实已经有人帮助我们实现了,在这里我们自己首先要知道如何使用它们?先给读者看一下实现的效果图:
在这里插入图片描述
该模型实现了次世代渲染效果,高光,法线,反射,遮挡等等都实现了,其实我们只用了三张贴图,如下所示:
在这里插入图片描述
为什么三张贴图就可以实现次世代效果?这里使用了图片的合并,第一张贴图和第二张贴图一目了然,重点看第三章贴图,在这里我们使用了多张贴图的合并,我们知道贴图的颜色是由RGBA组成的,那么我们合并的贴图也是通过RGBA表示的,我们的R表示的是Metallic,G表示的是Smoothness,B表示的是Glow,A表示的是Occlusion。这样我们也达到了优化的目的,看一下在Shader Graph中的效果图:
在这里插入图片描述
合并图片的目的是为了减少系统的吞吐量,再就是也是优化角色渲染,我们把第三张贴图给读者分解,如下所示:
在这里插入图片描述
贴图处理的核心代码如下所示:

			SurfaceOutputStandard s6 = (SurfaceOutputStandard ) 0;
			float2 uv_AlbedoMap = i.uv_texcoord * _AlbedoMap_ST.xy + _AlbedoMap_ST.zw;
			s6.Albedo = ( _BaseColor * tex2D( _AlbedoMap, uv_AlbedoMap ) ).rgb;
			float2 uv_NormalMap = i.uv_texcoord * _NormalMap_ST.xy + _NormalMap_ST.zw;
			s6.Normal = WorldNormalVector( i , UnpackNormal( tex2D( _NormalMap, uv_NormalMap ) ) );
			s6.Emission = float3( 0,0,0 );
			float2 uv_MaskMap = i.uv_texcoord * _MaskMap_ST.xy + _MaskMap_ST.zw;
			float4 tex2DNode1 = tex2D( _MaskMap, uv_MaskMap );
			s6.Metallic = ( tex2DNode1.r * _Metallic );
			s6.Smoothness = ( tex2DNode1.g * _Smooth );
			s6.Occlusion = 1.0;

我们把Shader Graph转化成Shader脚本读起来还是比较简单的,学习起来也是容易的,关于次世代渲染技术就给读者介绍到这里。

原创文章 24 获赞 26 访问量 7837
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/jxw167/article/details/101616435

在上篇给读者介绍了关于卡通渲染的一些技术点,本篇再介绍一下关于次世代角色渲染技术,市面上占主流的游戏还是大型的次世代渲染,Unity自身提供了Standard和Standard(Specular),但是对于游戏的品质来说还远远不够,而且相对来说比较耗,这就需要我们自己去提升,其实新版的Unity给我们提供了Shader Graph作为Shader工具来说还是可以使用的,它相比Shader Forge好很多的。次世代渲染也可以成为PBR渲染,我们将它拆分开,涉及到的渲染技术如下所示:
在这里插入图片描述
以上就是我们实现次世代渲染使用的技术点,在这里就不介绍算法方程了,想具体了解的读者可以自行查阅,其实已经有人帮助我们实现了,在这里我们自己首先要知道如何使用它们?先给读者看一下实现的效果图:
在这里插入图片描述
该模型实现了次世代渲染效果,高光,法线,反射,遮挡等等都实现了,其实我们只用了三张贴图,如下所示:
在这里插入图片描述
为什么三张贴图就可以实现次世代效果?这里使用了图片的合并,第一张贴图和第二张贴图一目了然,重点看第三章贴图,在这里我们使用了多张贴图的合并,我们知道贴图的颜色是由RGBA组成的,那么我们合并的贴图也是通过RGBA表示的,我们的R表示的是Metallic,G表示的是Smoothness,B表示的是Glow,A表示的是Occlusion。这样我们也达到了优化的目的,看一下在Shader Graph中的效果图:
在这里插入图片描述
合并图片的目的是为了减少系统的吞吐量,再就是也是优化角色渲染,我们把第三张贴图给读者分解,如下所示:
在这里插入图片描述
贴图处理的核心代码如下所示:

			SurfaceOutputStandard s6 = (SurfaceOutputStandard ) 0;
			float2 uv_AlbedoMap = i.uv_texcoord * _AlbedoMap_ST.xy + _AlbedoMap_ST.zw;
			s6.Albedo = ( _BaseColor * tex2D( _AlbedoMap, uv_AlbedoMap ) ).rgb;
			float2 uv_NormalMap = i.uv_texcoord * _NormalMap_ST.xy + _NormalMap_ST.zw;
			s6.Normal = WorldNormalVector( i , UnpackNormal( tex2D( _NormalMap, uv_NormalMap ) ) );
			s6.Emission = float3( 0,0,0 );
			float2 uv_MaskMap = i.uv_texcoord * _MaskMap_ST.xy + _MaskMap_ST.zw;
			float4 tex2DNode1 = tex2D( _MaskMap, uv_MaskMap );
			s6.Metallic = ( tex2DNode1.r * _Metallic );
			s6.Smoothness = ( tex2DNode1.g * _Smooth );
			s6.Occlusion = 1.0;

猜你喜欢

转载自blog.csdn.net/qq_42115447/article/details/101675003