ユニティちゃんトゥーンシェーダー漫画レンダリング学習

(この記事はUTS2の0-1までの再彫刻を記録しており、随時更新していきます)

1. UTS2 の概要

Unity-Chan Toon Shader 2.0 (UTS2) は、漫画家のシェーディング 3DCG のニーズを満たすように設計された、画像とビデオ用の漫画シェーダーです。クリエイターによるオンデマンドアニメーション。

UTS2 オープンソース プロジェクトのアドレス:GitHub -unity3d-jp/UnityChanToonShaderVer2_Project: UnityChanToonShaderVer2 プロジェクト / v.2.0.9 リリース

2. UTS2 を 0-1 から複製する

(1)基本3色

UTS2の拡散反射部分は主に基本色、第1影色、第2影色の3つのレイヤーで構成されており、それぞれ美術理論でいう白、グレー、黒に相当します。

基本色は主に受光面、つまりオブジェクトの明るい部分を着色するために使用されます。

 

最初の影の色は、受光面とバックライト面の間の遷移を色付けします。

 

2 番目の影の色はバックライトに色合いを与えます。

これら 3 つの色の範囲とぼかしの度合いを調整できるパラメーターがいくつかあります。

BaseColor ステップは、最初の影の色の範囲を調整するために使用されます。

Base/Shade Feather は、最初のシャドウ カラーのフェザリングの程度を調整するために使用されます。

 

ShadeColor Step は、2 番目の影の色の範囲を調整するために使用されます。

1st/2nd_Shades Feather は、2 番目のシャドウ カラーのフェザリングの程度を調整するために使用されます。

 

単純な実装コード:

float4 baseMap_var = tex2D(_BaseMap, i.uv);
float3 baseMap_RGB = baseMap_var * _BaseMapCol; //基本色
float4 _1st_ShadowMap_var = lerp(tex2D(_1st_ShadowMap, i.uv), baseMap_var, _Use_BaseAs1st);
float3 _1st_ShadowMap_RGB = _1st_ShadowMap_var * _1st_ShadowMapCol; //第一阴影色
float4 _2nd_ShadowMap_var = lerp(tex2D(_2nd_ShadowMap, i.uv), _1st_ShadowMap_var, _Use_1stAs2nd);
float3 _2nd_ShadowMap_RGB = _2nd_ShadowMap_var * _2nd_ShadowMapCol; //第二阴影色
float halfLambert = 0.5 * dot(setNormalDir, lightDir) + 0.5; //半兰伯特模型
float base_1stShadow_mask = saturate(1.0 - (halfLambert - (_BaseColStep - _BaseShadeFeather)) / _BaseShadeFeather); //基本色到第一阴影色的插值参数
float _1st_2ndShadow_mask = saturate(1.0 - (halfLambert - (_ShadeColStep - _1st2nd_ShadesFeather)) / _1st2nd_ShadesFeather); //第一阴影色到第二阴影色的插值参数
float3 diffuse = lerp(baseMap_RGB, lerp(_1st_ShadowMap_RGB, _2nd_ShadowMap_RGB, _1st_2ndShadow_mask), base_1stShadow_mask); //插值实现颜色过渡

色の遷移を実現するには、主に 2 つの lerp が使用されます。

(2)ハイカラー

1.HighColor Tex を使用してハイライト マップを指定します。

2.HighColor Power はハイライトの強度を制御します。

3.Specular Mode は、通常のハイライト効果を使用するかどうかを決定します。

有効にする:

閉鎖:

このハイライトにはシャープなエッジがあり、色のグラデーションがありません。

4.カラーブレンドモードはハイライトのブレンド方法を決定します。

加算法は色を明るくします。上記の両方のハイライト モードを使用できます。

Multiply メソッドは色を暗くするため、2 番目のハイライト フォームでのみ使用できます。

5.HighColor Mask はハイライト マスクを指定し、ハイライトの範囲とサイズを決定するために使用され、HighColor Mask Level はマスクの強度を調整します。

単純な実装コード:

float4 highColorTex_var = tex2D(_HighColorTex, i.uv); //高光贴图
float4 highColorMask_var = tex2D(_HighColorMask, i.uv); //高光遮罩贴图
float3 halfDir = normalize(lightDir + viewDir); //半程向量
float specular = 0.5 * dot(halfDir, lerp(i.nDirWS, setNormalDir, _Is_NormalMapToHighColor)) + 0.5;
float tweakHighColorMask_var = saturate(highColorMask_var.g + _HighColorMaskLevel) * lerp(1.0 - step(specular, 1.0 - pow(_HighColorPower, 5)), pow(specular, exp2(lerp(11, 1, _HighColorPower))), _Is_SpecularToHighColor); //两种高光形式
float3 specualrCol = (highColorTex_var * _HighColor * tweakHighColorMask_var).rgb;
diffuseCol = lerp(saturate(diffuseCol - tweakHighColorMask_var), diffuseCol, lerp(_Is_BlendAddToHighColor, 1, _Is_SpecularToHighColor)); //和漫反射的混合方式

(3)ノーマルマップ

法線マップの使用法についてはあまり詳しく説明しませんが、法線がさまざまなライト効果に影響を与えるかどうかを制御するためのさまざまなボタンの使用に焦点を当てます。

3 基本色ボタン

ハイカラーボタン

Lerp 関数は主にノーマル マップを使用するかどうかを決定するために使用されます。

参考:ゲームが生まれた日 09 - アート チャプター 漫画 レンダリング シェーダー UTS2 - Zhihu (zhihu.com)

おすすめ

転載: blog.csdn.net/qq_63133691/article/details/131376033