シーンマネージャーにフォグ
ヴート  2023/04/07(Fri) 21:27
シーンマネージャーにフォグのサンプルプログラムを入れてみた所、起動時にフォグが遅れて描画されました。
原因に検討がつきません。知見のある方はご教授よろしくお願いします。

class Title : public App::Scene
{
public:
  struct PSFog
  {
  Float3 fogColor;
  float fogCoefficient;
  };
  const PixelShader ps = HLSL{ U"example/shader/hlsl/forward_fog.hlsl", U"PS" }
  | GLSL{ U"example/shader/glsl/forward_fog.frag", {{ U"PSPerFrame", 0 }, { U"PSPerView", 1 }, { U"PSPerMaterial", 3 }, { U"PSFog", 4 }} };

  Vec3 ep{0,10,-100};
Vec3 fp{0,0,0};
Size sz{Scene::Size()};
double rad{60};
BasicCamera3D C{sz,toRadians(rad),ep,fp};

   const MSRenderTexture renderTexture{ sz, TextureFormat::R8G8B8A8_Unorm_SRGB, HasDepth::Yes };
ColorF bgc{Palette::Black.removeSRGBCurve()};

   double fogParam = 0.6;
ConstantBuffer<PSFog> cb{ { bgc.rgb(), 0.0f } };

Plane pln{Vec3(0,0,0),Size(100,100)};

Title(const InitData& init): IScene{ init }
{

}
void update() override
{
    if (! ps)return;

C.setProjection(sz,toRadians(rad));
C.setView(ep,fp);

const double fogCoefficient = Math::Eerp(0.001, 0.25, fogParam);
cb->fogCoefficient = static_cast<float>(fogCoefficient);
}
void draw() const override
{
     Graphics3D::SetCameraTransform(C);
Graphics3D::SetPSConstantBuffer(4, cb);
const ScopedCustomShader3D shader{ ps };
const ScopedRenderTarget3D target{ renderTexture.clear(bgc) };

pln.draw(Palette::White.removeSRGBCurve());

     Graphics3D::Flush();
renderTexture.resolve();
Shader::LinearToScreen(renderTexture);
}
};
記事編集
Reputeless  2023/04/09(Sun) 16:44
シーンの切り替え時、update() はフェードインが完全に完了してから呼ばれ始めます。
フェードイン中は update() は実行されていません。

したがってフォグのための定数バッファが設定されていない状態でフォグシェーダを使っています。
updateFadeIn() や updateFadeOut(), あるいはコンストラクタでの定数バッファの設定を検討してください。
https://zenn.dev/reputeless/books/siv3d-documentation/viewer/tutorial-scene-manager#31.6-%E3%83%95%E3%82%A7%E3%83%BC%E3%83%89%E3%82%A4%E3%83%B3%E3%83%BB%E3%83%95%E3%82%A7%E3%83%BC%E3%83%89%E3%82%A2%E3%82%A6%E3%83%88%E3%82%92%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%E3%81%99%E3%82%8B
編集
ヴート  2023/04/09(Sun) 21:20
自分はシーンマネージャーのチュートリアルをちゃんと読み込んで無かったんですね…
updateFadeInを使い問題を解決しました。ありがとうございました。
編集
件名
Re: シーンマネージャーにフォグ
名前
コメント
画像添付


投稿修正キー (投稿を修正する時に使います)
画像認証 (右画像の数字を入力) 投稿キー

- WEB PATIO -