HLSL半透明プラスチックシェーダー


12

私はシェーダーを作成して、内部に色のついた光を持つ白いプラスチックのオブジェクトを複製しようとしています。半透明のシェーダーを使用してオブジェクト内にライトを配置すると、ライトが透けて見えるようになるか、ライトの効果を偽装するシェーダーを使用します。

効果は、これらの写真のようなランプシェードを通過する光のようなものです。

代替テキスト 代替テキスト 代替テキスト

理想的には、光の強度と色を制御して、いくつかの素敵な明るい蛍光色を脈動させて回転させることができます

どこから始めればいいのかわかりませんが!

私の質問は、そのようなシェーダーを作成できるように研究すべきテクニックを知っている人や、出発点として使用できる同じ/類似のシェーダーの例を持っている人はいますか?または、仕事をするかもしれないシェーダーを提供したい場合でも

回答:


10

これは「サブ表面散乱」として知られる効果です。

リアルタイムの使用に適した本「GPU Pro:Advanced Rendering Techniques」に、これのスクリーンスペース実装の例があります。


0

HLSLを知らないので、正確な答えを出すことはできません。基本的にできることは、光源からの距離に応じて各フラグメントの色を設定することです(セルフシャドウイングを無視します)。

擬似コードでは、次のようになります。

fragment_color = light_intensity * transparent_color * lightsource_color /(減衰* distance_to_lightsource ^ 2)

また、2乗に加えて線形減衰係数を使用して、光をさらに広げることもできます。


0

ライトは移動できる必要があり、オブジェクトは変形/アニメーション化できる必要がありますか?これらのどちらでもない場合、これを行う安価な方法は、ライトのマスクとして機能するオブジェクトにモノクロのテクスチャマップを適用することです。シェーダーでこのテクスチャをサンプリングし、現在のライトカラー/強度で乗算し、出力カラーに追加します。

明らかなフォローアップの質問は、このテクスチャをどのように生成しますか?アーティストにアクセスできる場合や、自分でテクスチャをペイントできる場合は、ペイントしてみてください。また、レイトレーシングなどを使用したオフラインツールでレンダリングすることもできます。ただし、レイトレーシングツールの設定方法について詳しく説明するには、レイトレーシングツールについて十分な知識がありません。

別のアプローチとしては、通常のランバート拡散シェーディング方程式で反転した表面法線を使用して、背後の光をサンプリングするシェーダーを記述することです。0.5程度のマスクファクターで乗算し、出力色に追加します。これにより、ライトまたはジオメトリを動的に移動でき、テクスチャは不要になりますが、オフラインレンダリングほど見栄えの良い結果は得られないでしょう。

表面下散乱について:私はそれは私が見てきたグラフィックスのためのすべてのSSSアルゴリズムはから来る光のために設計されているので、ここで欲しかったです正確に何を考えていないここに光がある一方で、再びビットおよび終了の周りバウンス、表面内部

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.