非写実的レンダリング
非写実的レンダリング (Non-Photorealistic Rendering、NPR) とは、非写実的なコンピューターグラフィックのレンダリングのことである。ノンフォトリアリスティックレンダリングとも言う。
非写実的レンダリングは、写実的レンダリング以外の全てを含むため、様々な画風・用途 (漫画、イラスト、スケッチ、セルアニメ、テクニカルイラストレーション、水彩、油絵、水墨画、日本画、点描、ドット絵など) のために様々な手法が存在する。
大域照明 (グローバルイルミネーション、GI) レンダリング
一般的な物理ベースの大域照明レンダラー (Arnold、V-Ray、Cycles等) を使って非写実レンダリングを行うことも可能である。
ただし、大域照明レンダリングを行う場合、シーンに光が増殖しないようにシェーダーがエネルギー保存の法則を満たす必要があるほか、重点サンプリングのためにシェーダー (OSLシェーダー、レンダラー固有のC++シェーダー等) でライトベクトルが使えないなどの制限が存在し、使える非写実的シェーディングモデルが限られてくる。
局所照明 (ローカルイルミネーション) レンダリング (ラスタライザとレイトレーサのハイブリッドレンダリング)
RenderMan/REYES (廃止)やその互換実装 (3DelightのRSLモード (廃止) 等)、Mental Ray (開発終了)、Maya Software、3ds Max Scanline、Blender Internal (廃止)などが、このレンダリング手法に対応している。
シェーディング言語としては、RSLシェーダーやMetaSLシェーダーが使われている。エネルギー保存の法則を満たす必要が無いため様々な非写実的シェーディングモデルが使いやすいものの、レイトレースでの反射回数を増やす場合、アーティファクトが起こりやすくなり、反射回数を減らす場合、補助ライトを増やす必要がある。
ゲームエンジンなどで使われている。
シェーディング言語としては、GLSLシェーダーやHLSLシェーダーが使われている。ラスタライズだけでなくレイマーチングや画面空間レイトレーシングなどと組み合わせる事もある。アーティファクトが起こりやすい。
DirectX 12以降のDirectX Raytracing (DXR)、VulkanのVK_KHR_ray_tracing拡張、Metal 2のMetal Performance Shaders ray intersector等のリアルタイムレイトレーシングAPIが登場し、UnityやUnreal Engineなどのゲームエンジンもハイブリッドレンダリングに対応してきている。
ベクターレンダラー (Maya Vector、BlenderのFreestyle等) が存在し、エッジレンダリングやベクター画像出力のために使用されている。
シェーディングは光に基づいて色(陰影)を変化させる。物理ベースシェーディングの場合、物体に物理的材質(アルベドやラフネスなど)を設定し、材質と光源の相互作用を計算することで色を算出する。NPRでは単純な計算や色の直接的変換など、物理現象に縛られないシェーディングがしばしばおこなわれる。
NPRでは現実における光の反射・散乱等の原理に基づかないシェーディングがしばしば取り入れられる。例えばハーフ・ランバート・シェーダーでは光が物体の内部にまで入り込んで散乱するような非写実的ライティングをおこなう。またライティング結果の二値化・三値化もしばしばおこわれる。例えばセル画風にする場合、ライティング結果を「主色」と「影色」の二色または三色に変換することが行われている。
NPRでは「物質色」を直接指定する手法、すなわちセルアニメ(2Dアニメ)と同等の色彩設計がしばしば取り入れられる。現実世界(及び物理ベースシェーディング)において「物質色」は物質が光を反射・屈折・散乱・吸収した結果となっており、光源と物理的材質を弄ることで一定のコントロールが可能であるものの、あくまで結果であり物質色を直接指定するようなものではない。色を細かく制御したい場合はCryptomatteやロトスコープなどでマスクを生成し、撮影/レンダリング後(ポストプロダクション)のカラーグレーディングで直接画面の色彩を調節する。
物理法則を無視してよいのであれば(非写実的であれば)物質色を直接指定しうる。例えばセルアニメでは「影はこの色」と直接指定し影にあたる部分を直接その色で塗る。すなわち目に映る色を直接指定する(色彩設計)。セルアニメ調を目指すセルルック3DCGでは"主色"に追加して"1影"を色で直接指定する。(PBRのように主色が輝度に基づいて暗くなるのではなく)輝度に基づいて主色と1影の色を補間してイラスト調にすることも出来る。このように陰影を色彩設計して非写実的に変化させることがしばしば行われる。
物理ベースシェーディング (PBS)
物理ベースシェーディングを非写実的3DCGの作成に使うことも可能である。物理ベースシェーディングを使用した非写実的3DCGには、例えば、ピクサーやディズニーのアニメーション映画がある。ゲームでは大乱闘スマッシュブラザーズ SPECIAL (スマブラSP) などがある。
Dota 2ヒーローシェーダー
ValveのDota 2で使われていたNPRシェーダーであり、Marmoset Toolbagなどのツールでサポートされている。
物理ベースシェーディングと同じくメタルネス (金属さ、金属度) を導入しているものの、ラフネス (マイクロファセット理論における粗さ) は不使用となっており、フレネル反射の調整はフレネル強度 (リムライトマップ) で行っている。また、テクスチャによる色相シフト及びコントラスト調整 (拡散/フレネルカラーワープマスクマップ) に対応している。
GUILTY GEARシェーダー
GUILTY GEAR Xrdで使われてGDC 2015で発表された拡張セルシェーダー。HoudiniのSideFX LabsのToon Shaderがこれに基づいている。
陰になりさすさやハイライトの入りやすさを独自の照明制御用テクスチャ(ilmテクスチャ)で制御しているほか、陰影判定の閾値や輪郭線の制御を頂点カラーで指定している。陰影判定で陰になった場合はシーンの環境光色と疑似的な表面下散乱(SSS)テクスチャの色を乗算した値が色として使われる。
セルシェーディングはアニメやセルアニメ風のCGに良く使われているシェーディング法であり、シェーディング結果を主色と陰色に変換する。典型的にはライティングの二値化と主色/1影の色彩設計がおこなわれる。セルシェーディングを使用した非写実的3DCGには、例えば、アークシステムワークスのセルアニメ風3Dゲーム (GUILTY GEAR Xrdやドラゴンボール ファイターズ等) がある。
GUILTY GEAR Xrdでは、「影の入りやすさ」に相当するセルシェーディングの閾値を頂点カラーで制御しているほか、「ハイライトの入りやすさ」をテクスチャで制御している。
主にテクニカルイラストレーションに使われるNPRシェーダーであり、寒色と暖色を指定して、二値化の代わりに寒色から暖色の間のグラデーションを生成する。すなわち寒色-暖色勾配の色彩設計をおこなっている。
ランプシェーダー (Ramp Shader)
二値化や単純なグラデーションの代わりに任意の傾斜 (Ramp) を使うシェーダーであり、セルシェーディングやGooch shadingよりも自由な表現が可能。
テクスチャルックアップによる実装もある (ランプテクスチャ)。
Half-Lambert / Wrapped Diffuse シェーディングモデル
非写実的なライティング手法の一種である。表面下散乱の簡易NPRモデルとしても利用される。Half-LambertはValveの初代ハーフライフで使われていたものであり、Wrapped DiffuseはHalf-Lambertを拡張したものである。ハーフライフだけでなく、他のValve製のゲーム (Team Fortress 2など) でも使用されている。
エネルギー保存の法則を考慮していないため、エネルギー保存の法則を満たすには正規化が必要となる (Energy-Conserving Wrapped Diffuse)。
描画のハッチングの再現に使われる。Tonal Art Mapなどの手法が存在する。
ハーフトーン (網点) シェーダー
漫画のスクリーントーンの再現などに使われる。3ds Maxが標準でHalf-toneのOSLシェーダーを搭載している (オープンソース)。
ドット絵シェーダー (ピクセルアートシェーダー)
古いコンピューターゲームのグラフィックの再現に使われる。Blender用のPixel Art Shader、Unity用のPixelRenderなどが存在する。
MatCapシェーダー (ペイントマップ)
MatCapシェーダーは法線方向と色をテクスチャで対応させたNPRシェーダーである。モデリング時やスカルプト時にも使われている。
光源の影響を無視するNPRシェーダー。非常に軽いため、ローポリゴン (少ないポリゴン) モデルと組み合わせてロースペックの機器で使われている。
定型ハイライト (Stylized Highlights)
変形可能なハイライト。セルシェーディングと共に使われる。
定型ハイライトはポケットモンスターのアニメシリーズのCGを担当しているOLM Digitalによって開発された。3ds Max及びMayaに標準搭載のArnoldレンダーなどが対応している。
NPRではエッジや輪郭の線画表現による強調がしばしば取り入れられる。エッジレンダリングは漫画の背景CGや青図や説明書などに使われるほか、他の用途にも上記レンダリング手法と組み合わせて使用されている。手法によって破線や点線への対応、交差への対応、鏡面反射や屈折への対応などが可能なものと不可能なものがある。
エッジレンダリングには以下のような手法が存在する:
背面法 (裏ポリゴン法)
一般的なレンダラーでも使うことが出来る。「GUILTY GEAR Xrd -SIGN-」では太さの制御に頂点カラーを使用している。
BlenderアドオンのFreePencilがこれを実装している。
View Mapを使う手法
BlenderのFreestyleで使われているエッジ検出手法。交差線には非対応となっており、それが必要な場合はブーリアン演算などを組み合わせる必要がある。
レイトレーシングによって鏡面反射と屈折にも対応している。ArnoldのToonシェーダーで使われている。
パスベースの物理ベースレンダリング (PBR) に直接組み込んだもので、ラインにも光沢反射などの物理的な効果がかかるのが特徴となっている。
法線編集・法線転写
シェーディングで生じる陰の形を単純化するために法線編集や法線転写が使われている。
法線編集や法線転写を使用した非写実的3DCGには、例えば、アークシステムワークスのセルアニメ風3Dゲーム (GUILTY GEAR Xrd等) がある。
グローバルな光源の代わりにキャラクター毎の光源を使うという手法であり、アークシステムワークスのセルアニメ風3Dゲーム (GUILTY GEAR Xrd等)やバンダイナムコエンターテインメントの鉄拳7が採用している。
またゲームでは空中のキャラクターの位置を分かりやすくするために光源からの影を切って真下に影を出すということも行われている。
カメラから遠い場合に低い解像度のテクスチャを使うことで高速化する技術「ミップマップ」を流用し、距離によって異なるテクスチャを使用するという手法があり、任天堂のゲームなどで使われている。
透視投影は非写実的レンダリングにおいても一般的に使われている。セルアニメなどに多用される二点透視図法や2Dパンには、レンズシフトが必要となる。
平行投影は、説明書などのテクニカルイラストレーションや、2.5Dのゲームに使われている。平行投影のうち、正投影 (オルソ)に対応するソフトウェアは多いものの、不等角投影や斜投影に対応するものは少なく、正投影にLatticeモディファイアを組み合わせることが行われている。
平行投影のうち、クォータービューの不等角投影を採用したものとして、マクシスの『シムシティ4』がある。また、3/4ビューの斜投影を採用したものとして、任天堂の『ゼルダの伝説 神々のトライフォース2』がある。
透視投影と平行投影の両方を組み合わせることも行われている。ストリートファイターIVではキャラクターの投影において、X軸が正射影かつY軸が透視投影のハイブリッド投影を採用している。ストリートファイターVではキャラクターの投影において、透視投影と平行投影の1:1の混ぜ合わせによるハイブリッド投影を採用している。
非写実的レンダリングでは嘘パースが使われている。例えばカメラからの距離によって画角を変化させていくことが行われている。
また複数のパースを混在させることもできる。一部のモデルに対しラティス変形を使う手法、モーフ変形を使う手法 (宇宙戦艦ヤマト2202 愛の戦士たち等で使用)、ボーン変形を使う手法 (GUILTY GEAR Xrd -REVELATOR-等で使用) などがある。
18世紀の絵画で使われている投影法。直線を保ちながら広い視野角にすることが可能。
おばけブラー (アニメブラー、Animation Smear)
アニメなどの残像 (モーションブラー) 表現に用いられる「おばけブラー」の3DCGでの再現には、ジオメトリ変形を使う手法や、2D画像を重ねる手法が存在する。
おばけブラーを採用したものとして、CyberConnect2の『ナルティメットストーム』シリーズや、ブリザード・エンターテイメントの『オーバーウォッチ』がある。
セルアニメの発光表現に用いられる「透過光処理」の再現には、ポストエフェクト機能やコンポジット機能などが使われている。
様々な画像変換モデルが考案されている。3Dを考慮したものも登場している。