2016-09-09 15 views
1

大きなテクスチャにテクスチャを連結/追加しようとしていますが、大きなテクスチャの結果を保持できません。ユニティシェーダ連結テクスチャ

私は大きなものの中の小さなテクスチャの位置のようないくつかの変数を取るシェーダを持っています。小さなテクスチャ自体ともちろん大きなものです。

基本的に私のシェーダは正しく動作しています(私は思う)。その結果、正しい位置のより大きなテクスチャが見えます。しかし、私の大きなテクスチャは決して保存されないので、すべての先例のパスは無視されます。

すべての小さなテクスチャを連結するために結果をシェーダに再度送信するにはどうすればよいですか?

私はこれを試してみてください。Graphics.Blit(_RTConcat, _RTConcat, _concat);

RTConcatそれはRenderTextureだ、私の大きなテクスチャで、私はエディタまたはスクリプトの両方でそれを作成しようとしたが、結果は同じであると_concatはシェーダを使用して材料であります。

PS:ユニティ4.5.3を使用しています。アップグレードできません。プロバージョンです。

編集/更新:

私が欲しいもののように見える作られたものにI「成功」、それが動作し、なぜ私は理解していません。私のメインのスクリプトで

私は結果renderTextureを初期化し、私のスクリプトで再編集されることはありませんプレーン

_radarVision = new RenderTexture(_radarTextureWidth, _renderHeight, 24); _renderHeight, 24); _radarScreen.SetTexture("_MainTex", _radarVision);

_radarVision_radarScreenにそれを適用するマットに設定します。

Graphics.Blitは新しいスクリプトに今あるが、カメラに取り付けて、単一のスクリプトを実行するためにのみ作成:

`無効OnRenderImage(RenderTextureソース、RenderTexture先) {

Graphics.Blit(save, save, _concat); 

rttmp = RenderTexture.GetTemporary(camera.targetTexture.width, camera.targetTexture.height); 

save = rttmp; 

camera.targetTexture = save; 
RenderTexture.ReleaseTemporary(rttmp); 

}` 

は何もありませんそうでなければ、それは私のものを働かせましたが、それは動作してはならないので、私はまだ夢中です...いいえ?

答えて

1

そして、私が見つけた最良の解決策は次のとおりです。

Graphics.Blit(save, save1, _concat);
Graphics.Blit(save1, save, _concat);

単一Graphics.Blitが動作しない理由を私は理解していないが、二重の仕事は「完全に」、それはそれだけので、私を気に同じシェーダ(16384 * 4092のような本当に大きなテクスチャで作業する)を2回呼び出す必要がありますが、私の最後の解決策では、最後のシェーダをテクスチャに適用してすべてを破棄することはできません。

GetTemporaryを使用すると、2番目のシェーダをテクスチャに適用すると問題が発生します。「保存する、私はバッファでストーリーを推測しています。

私は常により良い方法のための提案を開いてんだけど、それはRenderTexture、ブリット・材料のコンボを使用して私の癌

0

を与えた本家の今、私の解決策は完全に私の問題を解決するためには、最善の解決策ではありません。あまりにも多くのオーバーヘッドここで。一度に同じレンダーテクスチャを読み込んでレンダリングできないので、Blitを2回呼び出す必要があります。私は、直接的で最良のソリューションは、

subTex = ... ;// Initialize the sub tex 
subTex.Apply(); // Upload elementTex to the Gpu 
Graphics.CopyTexture(subTex, offset, size, globalTex, offset, size); // the subTex will be copied to globalTex in both GPU, and CPU. This is a GPU->GPU and a CPU ->CPU copy so it's very quick without any additional drawcall at all. 
です。