元記事
Andrew Woo氏(Alias)による記事(むしろ面白い読み物!)、It's really not a render bug, you see!(pdf)以外の、この問題についての文献を見つけるのは容易ではありませんでした。
Woo氏はこれを「ターミネータプロブレム」と称し、細かいサブディビジョンもしくは、レイをその法線の方向に少し動かすことによる、シャドウレイの人工的なオフセットのどちらかを使用することについて提案されています。しかしこれでは、小さなディテールが不自然になってしまいます。
Blenderに加えた解決策ではシャドウレイトレーサのパッチを行わず、動作させるべきところは確実に動作させるが、完全にこの問題を隠蔽できる正確な量で、Phong補間シェーディングの範囲を狭めることです。
このアルゴリズムは二つの段階で動作します。最初はそれぞれのObjectで頂点の法線とFaceの法線との内積の平均を計算します(i)。これは閾値(t)へと変換されます:
t= cos(0.5*PI - acos(i))
閾値(t)はその後下記の式により、ディフューズシェーダの結果に適用されます:
result *= (i-t)/(i-t*i)
iの場所は(補間された)サーフェス法線とlampベクトルの内積です。
インタフェイス
これで表示に少し影響を与えることができたので、私はオプションを一つ作ることに決めました。"Bias"、これはMaterialの "Shadow" ボタンの下にあります。
この画像は16セグメントのSphere、そしてそれをSubdivideしたものの結果です。
Materialの"Map To"パネルとRampに新しいブレンディングモードが追加されました。
これは、雪男のモーションの動画の画像です。(1.3M, @ndy氏の著作)
Textureの変数をIpoを使用してアニメーションできるようになりました。これはMaterialに存在するマッピングとは違い、より多くTextureのコントロールが可能になります。
利用できるチャネル: NSize、NDepth、NType、Turb、Vnw1、Vnw2、Vnw3、Vnw4、MinkMExp、DistM、ColT、iScale、DistA、MgType、MgH、Lacu、Oct、MgOff、MgGan、NBase1、NBase2
サンプル: erosion2.avi
その他の改良
Ton Roosendaal
Phong補間とレイトレースシャドウ
擬似的になめらかなサーフェスにするために、多くのレンダリングソフトウェアは頂点法線のPhong補間を、陰影を表現するために使用します。しかし、レイトレースシャドウでは、シャドウエリアがシェーディングされたエリアと被って始まっていた時、その境界上にエラーが発生することがあります。これはレイトレースが形状自身によって起こるのであり、その擬似的な外見からは起こらないからです。 |
Andrew Woo氏(Alias)による記事(むしろ面白い読み物!)、It's really not a render bug, you see!(pdf)以外の、この問題についての文献を見つけるのは容易ではありませんでした。
Woo氏はこれを「ターミネータプロブレム」と称し、細かいサブディビジョンもしくは、レイをその法線の方向に少し動かすことによる、シャドウレイの人工的なオフセットのどちらかを使用することについて提案されています。しかしこれでは、小さなディテールが不自然になってしまいます。
Blenderに加えた解決策ではシャドウレイトレーサのパッチを行わず、動作させるべきところは確実に動作させるが、完全にこの問題を隠蔽できる正確な量で、Phong補間シェーディングの範囲を狭めることです。
このアルゴリズムは二つの段階で動作します。最初はそれぞれのObjectで頂点の法線とFaceの法線との内積の平均を計算します(i)。これは閾値(t)へと変換されます:
t= cos(0.5*PI - acos(i))
閾値(t)はその後下記の式により、ディフューズシェーダの結果に適用されます:
result *= (i-t)/(i-t*i)
iの場所は(補間された)サーフェス法線とlampベクトルの内積です。
インタフェイス
これで表示に少し影響を与えることができたので、私はオプションを一つ作ることに決めました。"Bias"、これはMaterialの "Shadow" ボタンの下にあります。
この画像は16セグメントのSphere、そしてそれをSubdivideしたものの結果です。
ターミネータプロブレム | Biasをシェーディングに適用 |
ブレンディングオプションの追加
Materialの"Map To"パネルとRampに新しいブレンディングモードが追加されました。
- Divide: Textureカラーと輝度により除算
- Screen: 乗算に似ていますが、反対の動作をします(明るくなります)
- Difference: Textureカラー・輝度とMaterialの間の差異
- Lighten: Textureの方が明るければそちらを表示(コンポーネント毎)
- Darken: Textureの方が暗ければそちらを表示(コンポーネント毎)
キャラクタ上のStatic Particle(毛髪)
今までStatic Particleは静止画、もしくは剛体のキャラクタのみで可能でした。 LatticeもしくはArmatureによるMeshの変形をStatic Particleのベースとして使用できるようになりました。これはレンダリング中、フレーム毎に再計算しています。 注意:現在はSubSurf Meshのみ動作します。 |
これは、雪男のモーションの動画の画像です。(1.3M, @ndy氏の著作)
TextureのIpo
Textureの変数をIpoを使用してアニメーションできるようになりました。これはMaterialに存在するマッピングとは違い、より多くTextureのコントロールが可能になります。
利用できるチャネル: NSize、NDepth、NType、Turb、Vnw1、Vnw2、Vnw3、Vnw4、MinkMExp、DistM、ColT、iScale、DistA、MgType、MgH、Lacu、Oct、MgOff、MgGan、NBase1、NBase2
サンプル: erosion2.avi
投票数:26
平均点:10.00
Blender2.34 PythonAPI |
Blender機能別 |
Blender2.34 Color Picker |
ログイン
クイックリンク
2021/07/01版
●Blender.org
BlenderFoundation
- Blenderのダウンロード
- 公式チュート等
- 公式マニュアル(和訳)
●ニュース(英文)
BlenderNation
●Blenderコミュニティ
blenderartists.org
●Blender Q&A
- Blender Stack Exchange
●テストビルド
Buildbot(自動生成)
●開発関連
公式開発サイト
Blender開発blog
Blender Wiki
●Blender.org
BlenderFoundation
- Blenderのダウンロード
- 公式チュート等
- 公式マニュアル(和訳)
●ニュース(英文)
BlenderNation
●Blenderコミュニティ
blenderartists.org
●Blender Q&A
- Blender Stack Exchange
●テストビルド
Buildbot(自動生成)
●開発関連
公式開発サイト
Blender開発blog
Blender Wiki