8

私はアンドロイドで3D開発を行う方法を学んでいます。私はいくつかの雲のある単純な回転する惑星から始めました。私は過去2日間、地球に大気の輝きを加えることを試みてきました。オンラインでシェーダーを操作してみましたが、遠くまで行くことができませんでした。

私の質問は、これを達成するための最良の方法は何ですか?正しい方向に微調整するだけで十分かもしれません。

これまでに持っている惑星のスクリーンショットと、私が狙っている最終目標を添付しました。

助けてくれてありがとう。

現在の進行:

ここに画像の説明を入力してください

最終目標: http: //25.media.tumblr.com/tumblr_m06q7l7BpO1qk01v6o1_500.png

4

2 に答える 2

6

必要なことは通常、後処理のレンダリングパスで行われます。

パス-1:惑星モデルをFBOテクスチャアタッチメントにレンダリングします。パス-2:スクリーンクワッドを設定し、前のパスのテクスチャをサンプラーユニフォームとして添付します。

次に、フラグメントシェーダーでグロー効果を適用します。グローについては、さまざまな方法があります。たとえば、最初のパスで惑星のシルエットを描画し、グローを塗りつぶしてから、smoothstep()を使用してぼかします。その後、後処理でパスします。メインの惑星のテクスチャの下に置きます。実際、ここでは、円形オブジェクトのグローを実行する方法に関する多くのコードサンプルを見ることができます。

もう1つ。ぼかしベースのグローを追加すると、モバイルデバイスのパフォーマンスに大きな影響を与える可能性があります。「距離フィールド」と呼ばれる手法があります。バルブはアンチエイリアスフォントに使用しましたが、グローを行うためにも使用できます。惑星のシルエットの距離フィールドテクスチャテクスチャコピーを一度作成すると、ポストプロセスパスでそれを使用してスムーズなグロー効果を実行できます。あなたはそれを生成する関数があります。ここでは、それを実行する方法についての論文とコードを見つけることができます。

于 2013-01-13T14:00:41.813 に答える
2

リムライティングが必要なようです。これには追加のパスは必要ありません。

cf http://oneclick-code.blogspot.co.uk/2012/01/ios-opengl-es-20-lighting-models-for.html

注:この例には余分なものがたくさんありますが、重要な点は、各頂点の法線をカメラのビューベクトルの方向と比較することです。それらが直角になったら、(内積== 0)「完全な」光を当てます。それらが平行(内積==長さ)の場合、ゼロライトを適用します。

varying mediump vec3   OUT_View;
varying mediump vec3   OUT_Light;
varying mediump vec3   OUT_Normal;                                     
varying mediump vec2   OUT_TexCoord;
uniform sampler2D EXT_TEXTURE_01;
uniform sampler2D EXT_TEXTURE_02;
uniform sampler2D EXT_TEXTURE_03;
uniform sampler2D EXT_TEXTURE_04;

void main(void)
{
    highp vec4  vDiffuseColor = vec4( 0.0, 0.0, 0.5, 1.0 );
    highp float fDiffuseFactor = 0.2 + max ( dot ( OUT_Normal, OUT_Light ), 0.0 );
    highp vec4  clr;

    if ( fDiffuseFactor < 0.3 )
        vDiffuseColor = vDiffuseColor * 0.1;
    else
    if ( fDiffuseFactor < 0.7 )
        vDiffuseColor = vDiffuseColor * 0.5;
    else
    if ( fDiffuseFactor < 0.8 )
        vDiffuseColor = vDiffuseColor;
    else
        vDiffuseColor = vDiffuseColor * 1.3;

    gl_FragColor = vDiffuseColor;
} 
于 2013-08-02T20:09:25.623 に答える