ToonMaster 開発過程まとめ - LHYAYOI/HujiTV GitHub Wiki
ルック開発から専用データ・動作検証まで
作成日:2026-08-28~現在 |hatakeyama gaku| Unity 6000.3.23f1 / URP 17.3 | 対象:Arknights Endfield -Yvonne- / ToonMaster_001
本資料は、制作過程を再整理したものです。新しい描画結果ではなく、既存キャプチャのレビューです
バージョンはマテリアル更新処理の番号で、撮影日時ではありません
公式コード・顔SDF・専用材質マスクを入手して再現したものではありません
概要:顔・目の参照修復から、材質別の陰影と反射、髪の中間色、眉・瞳の透かしへ改善
その後、専用材質マスク、推定毛流れマップ、髪ハイライトの平滑化を追加しました。現状:描画経路と調整機能は実装済み。全領域のマスク仕上げ、半透明部の処理、毛流れのアート調整、実時間のちらつき評価は継続課題です。
1. 完成形 — Review_MaterialComparison
左:ToonMaster_001 / 右:URP Lit
同じモデルと静止ポーズを共通のカメラ・照明で比較するために用意したシーンです。
左は顔の陰影を整理し、右は鼻・目の周囲などに立体形状に沿った陰影が強く出ています
髪と衣装は、単純に影を二段化するだけでなく、部位別の反射を使い分ける方針です
生成処理はLit側へBase Map、Base Color、UV変換、Normal Map、Metallic、Roughnessから求めたSmoothnessなどを初回作成時に転記します
Toon専用の顔法線補正・髪の反射・アトラス領域補正はLit側にありません
2. 目標ルックの定義
目標は、『アークナイツ:エンドフィールド』のYvonne画像を参考に、アニメ的に整理した顔と、立体感・材質差のある髪と衣装を両立することでした
以下は制作上の目標整理であり、公式シェーダーの仕様を示すものではありません
| 部位 | 目標 | 見るポイント |
|---|---|---|
| 顔 | 明るく読みやすい面、暖色寄りの影 | 鼻・口の細かい凹凸が黒ずみとして目立たない |
| 瞳 | 虹彩の色・模様を保つ | 影や遮蔽で瞳が潰れず、肌のテクスチャを誤って使わない |
| 髪 | ローズピンクの基調、赤紫の暗部、毛束に沿った光沢 | 全体が白っぽくならず、明部・中間色・暗部を読める |
| 衣装 | 布・革・金属を区別 | 白い布を金属扱いせず、袖の描き込みと追加反射が過剰に重ならない |
| 照明への応答 | 正面以外でもキャラクターとして成立 | 横光・逆光で髪の色、顔、衣装の輪郭を確認する |
制作時の参照先:
- AUTOMATONの記事
- Xの投稿
- その他、Google検索の画像等
3. 改善の全体像
| 段階 | 課題 | 修正の中心 |
|---|---|---|
| 初期 → V2 | 元マテリアルの残存、目の参照問題、強すぎる陰影 | 8スロットの再割当、虹彩テクスチャ、目・顔の個別調整 |
| V3.2 | 髪が白っぽい、衣装の材質差が弱い | 色付き髪反射、陰影の連続性、布・革・金属の分離 |
| V4.1 | 鼻・口の陰影、袖と胸の描き込み光沢 | 頭方向を使う顔法線補正、UV領域による光沢抑制 |
| V5 | 無彩色の布や革まで金属になる | 無彩色推定を停止、銀色トリムをUV領域で限定 |
| V6 | 髪の中間色とハイライトの形が弱い | 中間色、主ハイライトの帯、副ハイライトの抑制 |
| 後続拡張 | 前髪で眉・瞳の読みやすさが下がる | 髪深度+対象深度+色パスで部分的な透かし |
4. 目の参照修復と顔の読みやすさ
問題と修正
元glTFの画像URIが実ファイルの配置と一致していなかったこと、シーンに元マテリアルが残っていたことを記録しています。対応は、画像参照の修復、8スロットへのToonマテリアルの明示的割当、虹彩専用のiris_01_d.pngの接続です。未知のマテリアルへ顔テクスチャを代用する処理をやめ、Base Mapが空の既存マテリアルも再接続するようにしました。
虹彩テクスチャは非圧縮・sRGBで扱い、目の影・遮蔽・リムを抑制。V2ではAlbedo Preservationを0.65、V3.2では0.5に調整しています。元UVは保持しました
画像で確認できる変化: 鼻・口の暗い陰影が弱まり、顔が平面として読みやすくなっています。髪の白っぽさも減っています。
比較の注意: Beforeにも虹彩が描かれています。この2枚は「テクスチャ欠落→復旧」の証拠画像ではなく、目・顔・髪の見た目の累積的な改善例です。撮影条件と適用バージョンの完全な対照記録は残っていないため、全差分を1つの修正だけに帰属させません。参照修復そのものはYvonne-validation.jsonの虹彩パス・8スロット検証で確認できます。
5. V3.2 — 色と材質の分離
修正手法
- 陰影の混合: 段階的なToon影と連続的な陰影を混ぜ、脚・衣装の丸みを残しました。主な設定は
_DiffuseRoundness。 - 髪の色と反射: 基調色をローズピンク、影を赤紫へ。狭い主ハイライトと弱い副ハイライト、ピンク寄りの反射色を導入しました
方向は専用毛流れマップではなくUVのV方向から推定します - 材質の分離: 同じcloth_01を使うメッシュをLeggings / Gear / Jacketに分け、UV・元テクスチャは保持したまま、反射の強度と粗さを個別調整しました
- 環境反射: キューブマップによるFresnel反射を追加し、プレビューにスタジオ用の反射環境を設定しました
見た目は全体を明るくする方向から「髪の色を残し、部位ごとの反射を使い分ける」方向性に
6. V4.1 — 顔の陰影と描き込み光沢を整理
顔:照明用の法線を頭の前方へ寄せる
_FaceNormalBlendを顔で0.6に設定
形状の凹凸をそのまま照明に使う割合を下げ、鼻・口元の小さな暗部を抑えました。ToonFaceFrameが頭方向をMaterialPropertyBlockで渡すため、Animatorによる頭の回転にも追従します
メッシュ形状を平らにする処理ではなく、顔SDFでもありません
衣装:追加の反射と、テクスチャ内の光沢を分ける
袖や胸には、元の色テクスチャ自体に光沢に見える明暗があります。Specularを下げるだけでは消えないため、cloth_01の対象領域をUV矩形で指定し、_BakedHighlightReduction=0.7で色計算時に弱めました
同時に_FabricSpecular=0.12で布領域の追加反射を抑えています。
元画像は変更していません。画像の明るさからの推定補正なので、描き込みを完全に除去した拡散色には戻せません。上の比較でも袖の明るい線は残っています
7. V5 — 金属の誤判定をやめる
初期の「無彩色に近い画素は金属」という推定は、白い布・暗い革も拾うため停止しました。_NeutralMetallic=0とし、Gearの銀色トリムを_MetalRegionA/B/Cの3つのUV矩形で指定。境界は0.008 UV幅でぼかします。
金属領域には専用のMetallic=0.85、Roughness=0.25、Specular=0.7を使用。残りのGearはRoughness=0.52、Specular=0.18として、革の幅広い反射と区別しました
画像では肩の黒い装備などの反射の出方が変わっています。
これはYvonne用の暫定領域指定で、全金具を網羅する専用マスクではありません
また、既存ToonFaceFrame.headを修復時に保持し、頭ボーンがルートへ置き換わる問題も防ぎました
8. V6 — 髪の明部・中間色・暗部を整える
髪に_HairMidtone=0.8と中間色を追加。_HairHighlightBand=0.65で異方性ハイライトの帯を整えました
主反射はSpecular=0.46、副反射は0.045に調整し、反射色も淡いピンクへ寄せています
画像では頭頂から前髪の明部がまとまり、暗い毛束との区別が明確になっています
白い反射を一律に強めるのではなく、中間色と主・副ハイライトの役割を分けた修正です
掲載値はV6の初期適用値
横光・逆光での確認
照明を動かした検証用画像です
横光では毛束と衣装の陰影、逆光では暗部に残る髪色と顔の視認性を見ます
バージョンの前後比較ではありません
9. 後続拡張 — 前髪越しの眉・瞳
髪を全体的に半透明にすると髪の量感まで変わるため、眉・瞳だけを対象に描画を追加しました
- 髪の深度を専用テクスチャに記録
- 対象の眉・瞳を
ZWrite On / ColorMask 0で専用深度へ描画 ZTest Equalで一致する面に色をブレンド- シーン深度と髪深度を比較し、手前の遮蔽物が髪で、距離条件を満たすときだけ透かす
Yvonneの眉にはUV4.xの頂点マスクを追加し、元UV0・テクスチャ・スキニングを保持。頭の正面から外れると効果を弱めます。これをURPのToonFeatureRevealが順序指定して描画します
通常の正面では瞳が髪に隠れていない箇所もあり、差が小さく見えます
10. 改善から得た設計上の判断
| 課題の種類 | 採った手法 | 避けた解決の仕方 |
|---|---|---|
| 参照の不整合 | スロット・テクスチャ・UVを確認して修復 | 明るさだけで目の欠落を隠す |
| 顔の複雑な陰影 | 顔だけ照明用法線を補正 | 全身の影を一律に消す |
| 材質の差が弱い | 部位分離と局所設定 | 全身に同じSpecularを設定する |
| 元画像の光沢 | アトラス内の限定領域で補正 | 反射パラメーターだけで除去できると考える |
| 金属の誤分類 | 明示したUV領域へ置換 | 白・灰色をすべて金属にする |
| 前髪の遮蔽 | 対象深度と髪深度で限定描画 | 壁まで透ける無条件の最前面描画 |
11. 専用材質マスク — 金属・布・補正範囲をデータ化
V5のUV矩形指定を発展させ、Yvonne_SurfaceMask.assetを追加しました。1024×1024、線形、非圧縮、ミップ付きのデータテクスチャです。
| チャンネル | 用途 | 適用範囲 |
|---|---|---|
| R | 金属領域 | 既知の銀色トリム3領域を多角形で指定。金属設定が有効なGearへ適用 |
| G | 布領域 | 袖の反射・粗さ調整 |
| B | 描き込み光沢の補正領域 | 袖・胸の補正を限定 |
狙い: 色が白い・灰色という理由で金属にするのを避け、対象を明示したデータへ移すことです
現在は既知領域に絞った初版なので、画面全体の変化は小さくなっています
全金具の分類完了を示すものではありません。
変更方法: 元画像・UV・既存の材質調整値は保持。Use Authored Surface MaskをOFFにすると従来のUV矩形方式へ戻ります
従来のMask Map(光沢・AO・リム)とは別です。
検証: シェーダーコンパイル、代表的な銀色トリムが金属マスクに含まれること、白い脚の布が除外されることを確認
同一カメラ・照明でBefore / Afterを保存しました
12. 毛流れマップ — 反射方向を局所的に補正
従来はUVのV方向だけを毛流れとしていました
追加したYvonne_HairFlow.assetは512×512、線形、非圧縮、ミップ付き
RGに方向、Bに推定の確信度を保存します
生成と適用
- 元の髪テクスチャから輝度勾配を取得
- 7×7の近傍で方向を集計し、線に沿う向きを推定
- UVのV方向からの補正角を約14度以内へ制限
- 勾配が弱い領域や横向きの境界では確信度を下げる
- シェーダーで従来方向と混合し、髪の異方性反射へ適用
設定: Hair Flow Strength=0.65で初期適用0で従来方式へ戻ります
法線マップや形状そのものを変更する処理ではありません
注意: テクスチャの線から推定した初版で、手描きの毛流れや公式データではありません
描き込み照明、UV境界、重複UVでは誤推定が起こり得ます
「専用マップを用意したこと」と「毛束ごとのアート調整が完了したこと」は別と考える
13. 動作検証と調整値の保持
歩行クリップに頭の上下・左右回転を加えた90姿勢をサンプリングし、髪のスキニング結果を検証しました
全頂点に非数値・無限値がないこと、静止したままではなく実際に変形していることを確認しています
毛流れデータの再生成では、既存の強度と差し替えたマップ参照を保持するよう修正しました
新規の髪マテリアルを作成・修復する場合は、マップが存在すれば初回だけ接続します
14. 髪ハイライトの平滑化
細い光沢は、カメラ移動や縮小で画素をまたぐと点滅しやすくなります。この対策としてHair Highlight Antialiasingを追加しました。
修正手法
- 画素内の反射方向の変化量を微分から求める
- 変化が大きい場所では、主・副ハイライトを広げてピークを抑える
- ハイライト帯の境界にも画素幅に応じた平滑化を適用
既存Yvonneの髪では1に設定し、0で従来式に戻せます
追加の描画パス・テクスチャ参照はなく、微分と算術計算を追加しています
確認済み: 近・中・遠に相当する3段階の表示サイズでON/OFF画像を生成し、シェーダーコンパイルを確認しました
未確認: 実時間のちらつき減少率やGPU時間は未計測です。これは時間的蓄積ではなく、空間的な平滑化です 髪の輪郭、ポリゴン、UV境界に起因するちらつきまでは解決しません
15. 残る課題と次の優先順
| 優先 | 課題 | 次の作業・完了の判断 |
|---|---|---|
| 1 | 実時間のちらつき評価 | 同一カメラ軌道の動画で平滑化ON/OFFを比較。輪郭と光沢の変化を分離して判断 |
| 2 | 材質マスクの細部 | 全金具・布・革をUV上とモデル上で照合し、誤分類を修正 |
| 3 | 毛流れの手動仕上げ | 頭頂・前髪・長い毛束ごとに方向を確認。アトラス境界の誤推定を修正 |
| 4 | 描き込み光沢 | 元画像の光沢と追加反射を分離して素材を調整。模様を損なわないことを確認 |
| 5 | 顔の陰影設計 | 顔SDFなどの専用データを検討し、光源を回した際の影形状を設計 |
| 6 | 形状と変形 | 髪のシルエット、表情、肩・腰・衣装ウェイトを大姿勢で仕上げる |
到達点: 材質ごとのルック制御と、専用データを使って仕上げるための経路を整えました。専用マスク・毛流れマップは初版であり、公式の見た目を完全に再現したという結論ではありません。
主な編集先:
- シェーダー:
Assets/ToonMaster/Shaders/ToonMaster_001.shader - 材質の初期設定・修復:
Assets/ToonMaster/Editor/YvonneMaterials.cs - 材質マスク生成:
Assets/ToonMaster/Editor/YvonneSurfaceMaskBuilder.cs - 毛流れ生成・検証:
Assets/ToonMaster/Editor/YvonneHairFlowBuilder.cs - マテリアル・データ:
Assets/ToonMaster/Materials/ - 詳細仕様:
Assets/ToonMaster/README.md、Assets/ToonMaster/Rendering/README.md、Assets/LightShaft/README.md
16. 資料の読み方と証跡
本資料は2026-09-18時点の保存コード・README・画像・検証記録を整理したものです。前半のV2〜V6はマテリアル移行処理のバージョンであり、日付ではありません。
初期画像は撮影条件が一致しないものを含みます。特に目のBefore画像にも虹彩が描かれているため、「テクスチャ欠落そのもののBefore」とは扱いません。後続のマスク・毛流れ・平滑化では、専用のON/OFF比較を保存しています
資料内の画像は元キャプチャを使い、見た目を加工していません