Unity中二次元渲染算法總彙

Unity在5.0版本升級了基於物理的着色器,能很大程度的提升遊戲開發者在寫實類遊戲中的畫面效果,可是在國內強力遊戲廠商都有自己的一套特殊渲染方式,比如知名的《崩壞3》。本篇文章就總結了博毅創爲教育集團在二次元渲染上的所有成就。

給大家推薦一個unity學習交流羣 點擊可以進入

1.Ramp Map

原理,講Dot(Normal,LightDirection)從(-1,1)的範圍重映射到(0,1)之間。使用重映射的值對貼圖進行採樣。Shader Forge實現如圖。除了在Dot(Normal,LightDirection)上可以採樣,我們還可以將邊緣光的值也納入考量,這樣就可以完整對一個2D貼圖進行採樣。

主要使用範圍。將漫反射從純粹的黑白變化到具有風格化感覺的貼圖上。

《軍團要塞2》

使用的Ramp Map

 

2.外輪廓線

使用特殊的Pass繪製一遍物體。這個Pass不進行背面剔除而是進行正面剔除。

ShaderForge實現

輪廓線繪製代碼

  1. Tags {
  2. "RenderType"="Opaque"
  3. }
  4. Pass {
  5. Name "Outline"
  6. Tags {
  7. }
  8. Cull Front
  9.  
  10. CGPROGRAM
  11. #pragma vertex vert
  12. #pragma fragment frag
  13. #include "UnityCG.cginc"
  14. #pragma fragmentoption ARB_precision_hint_fastest
  15. #pragma target 3.0
  16. uniform float _OutLineWidth;
  17. uniform float4 _OutLineColor;
  18. struct VertexInput {
  19. float4 vertex : POSITION;
  20. float3 normal : NORMAL;
  21. };
  22. struct VertexOutput {
  23. float4 pos : SV_POSITION;
  24. };
  25. VertexOutput vert (VertexInput v) {
  26. VertexOutput o = (VertexOutput)0;
  27. o.pos = UnityObjectToClipPos( float4(v.vertex.xyz + v.normal*_OutLineWidth,1) );
  28. return o;
  29. }
  30. float4 frag(VertexOutput i) : COLOR {
  31. return fixed4(_OutLineColor.rgb,0);
  32. }
  33. ENDCG
  34. }

粘貼到subshader即可使用。

3.邊緣光RimLight

max(0,dot(viewDir, normal))^Strength在物體邊緣增加一層光效或用於對人物照明的補充。

Shader Forge實現

效果

4.Tone Based Shading

   

公式中α,β,Kblue,Kyellow,kd都是可調節參數。主要使用在接近插畫類的渲染中,用於創建過渡自然的場景,比如《紀念碑谷》一類的

 

  1. 日式賽璐璐着色

模擬日式賽璐璐畫法中陰影中的色彩和普通色彩分離的一個效果。色彩分爲高光部,亮部,影部三部分。

現在資料中,GUILTY GEAR Xrd算實現得最好的。片元着色器部分僞代碼如下

dark = dot(normal,lightDir)*AO*Shadow;

Color_shadow = Color_Light*ShadowAdjust;

LightTerm = dark<threshlod?Color_shadow:Color_Light;

Shadow來源於陰影貼圖,Color_Light來源於底色貼圖.ShadowAdjust來源於底色處於陰影環境中的調整。

完整Color =LightTerm+Specluar;

Specular使用標準的Blinn-phong光照模型。

 

博毅創爲VIP課程實踐中會將上述所有內容整合起來完成GGXRD中的二次元渲染

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