タイトルの通りなんですが、何点か引っかかった点があるためご紹介します。
今回の構成
Unity 2018.4.22f1
・Alembic 1.0.6
・High-Definition RP 4.10.0
・Shader Graph 4.10.0
・Unity Recorder 2.2.0
WaterShaderの挙動がおかしい!
今回は、ShaderGraphで作成したオリジナルのWaterShaderを利用していたのですが、WaveOffsetをTimeNodeのTimeを利用して行っていました。
ところが!
なんとこのTimeはDeltaTimeでは無いようで(DeltaTimeもTimeNodeにあるのですがこちらも機能せず…
UnityRecorderで撮影を行うと、水が高速で波打つなんてことになってしまいました。
今回はC#⃣ScriptからNodeへ直接DeltaTimeを渡してあげることで解決しました。こちらが参考になると思います。
https://forum.unity.com/threads/recorder-writting-exr-files-with-time-based-shader-are-wrong.662551/
基本的には↑のまま、少しだけ処理速度改善
using UnityEngine;
public class FunctionRenderTime : MonoBehaviour
{
[SerializeField] Material waterOffset;
[SerializeField] float timingValue;
[SerializeField] float timer;
static string vectorNodePropertyName = "Vector1_8A6A3EC4";
private static readonly int vectorNodePropertyID = Shader.PropertyToID(vectorNodePropertyName);
// Start is called before the first frame update
void Start()
{
waterOffset.SetFloat(vectorNodePropertyID, timer);
}
// Update is called once per frame
void Update()
{
timer += timingValue * Time.deltaTime;
waterOffset.SetFloat(vectorNodePropertyID, timer);
}
}
なんか出力結果おかしくない?
なんか黒い部分がありますね
こりゃなんだ、というわけで…
実際は黒いわけではなくRGBにはノイズ、Aチャンネルは黒よりのグレーになっています。
結局こちらの問題の原因はいまいちわかりませんでした。
HDRPのBugでしょうか?最新のバージョンでは直っていることを願うばかり
とりあえず今回はゴリゴリpngそのものを修正していきました…
おまけ HDRPだと簡単にきれいに作れて良いですね~