次世代角色渲染技術概述

在上篇給讀者介紹了關於卡通渲染的一些技術點,本篇再介紹一下關於次世代角色渲染技術,市面上佔主流的遊戲還是大型的次世代渲染,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腳本讀起來還是比較簡單的,學習起來也是容易的,關於次世代渲染技術就給讀者介紹到這裏。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章