ビルドしたエディタを起動する際、シェーダーのコンパイルが通らない

お世話になります。

ソースからビルドしたエディタを起動しようとしたところ、シェーダーのコンパイルエラーが発生し、起動時に落ちる問題がありました。

調べたところ、シェーダーのUSFファイルをプリプロセッサ(MCPP)にかけた際、

一部のシェーダーファイルで「Unknown encoding: jp」のようなWarningが発生し、

エンジン側がこれをエラーと捉えているようでした。

対応としまして、

\Engine\Source\Developer\ShaderPreprocessor\Private\ShaderPreprocessor.cpp

内にある、MCPPのWarningをフィルターする関数、

static bool FilterMcppError(const FString& ErrorMsg)

の中身を以下のように変更したところ、コンパイルが通るようになりました。

static bool FilterMcppError(const FString& ErrorMsg)
{
	const TCHAR* SubstringsToFilter[] =
	{
		TEXT("Unknown encoding: jp"), // この行を追加
		TEXT("with no newline, supplemented newline"),
		TEXT("Converted [CR+LF] to [LF]")
	};
}

初めからビルドされているエディタでは起きないようなので、こちらのセットアップミスなのかもしれません…

同じようなエラーが表示されている方は居らっしゃいますでしょうか?

English Translation:

When compiling the editor and running, shaders fail to compile due to encoding

もしかしてUSFファイルを編集しましたか?
USFファイルにANSIじゃないキャラクターを対応してないかもしれないです。

僕とレンダリングチームが調べています。

よろしくお願いします!

Joeさん
English Translationと、返答ありがとうございます!

原因がわかりましたので、報告致します。

原因は、私のPCの環境変数(environment variables)にあった「LANG=jp」というのが問題でした・・・。

ShaderCompileWorker が、mcpp_run関数でusf ファイルをプリプロセスする際、
Multibyte chara encoding の設定がデフォルトの「sjis」に設定されているのですが、
この環境変数「LANG=jp」があると、エンコーディング設定を上書きしてしまうようです。

MCPP\mcpp-2.7.2\src\system.c(2066)

/*
 * Set multi-byte character encoding according to environment variables
 * LC_ALL, LC_CTYPE and LANG -- with preference in this order.
 */
if (! mb_changed) {                     /* -m option precedes   */
    if ((env = getenv( "LC_ALL")) != NULL)
        set_encoding( env, "LC_ALL", 0);
    else if ((env = getenv( "LC_CTYPE")) != NULL)
        set_encoding( env, "LC_CTYPE", 0);
    else if ((env = getenv( "LANG")) != NULL) // <<< ここでエンコーディングを変更してしまう!
        set_encoding( env, "LANG", 0); 
}

「LANG=jp」を削除することで対応できました。

別の対処方としましては、mcpp_run のオプションMcppOptionsに「McppOptions += TEXT(" -esjis");」を追加すると、設定にかかわらず、明示的にshift-jisでエンコードできるようです。

お騒がせして申し訳ありませんでした。よろしくお願い致します。