###前提・実現したいこと
unityでblurエフェクトをかけたパススルーカメラを作ろうと思っているのですが、blurの挙動がおかしいです。
###発生している問題・エラーメッセージ
BlurOptimized.csはアタッチしているのに、カメラが最初のうちはBlurをかけず、Field of ViewをこちらからいじってようやくBlurがかかる。 また、15秒後にBlurがかかるように制御のためのif文を入れると、15秒たつまではField of Viewを動かしてもゲーム画面に影響はなく、15秒たちBlurが出るとField of Viewを動かしたとき反応する。 この状態はAndroidにBuildをした時から発生した。
###該当のソースコード
C#
1using System; 2using UnityEngine; 3namespace UnityStandardAssets.ImageEffects 4{ 5 [ExecuteInEditMode] 6 [RequireComponent (typeof(Camera))] 7 [AddComponentMenu ("Image Effects/Blur/Blur (Optimized)")] 8 public class BlurOptimized : PostEffectsBase 9 { 10 [Range(0, 2)] 11 public int downsample = 1; 12 public enum BlurType { 13 StandardGauss = 0, 14 SgxGauss = 1, 15 } 16 [Range(0.0f, 10.0f)] 17 public float blurSize = 3.0f; 18 [Range(1, 4)] 19 public int blurIterations = 2; 20 public BlurType blurType= BlurType.StandardGauss; 21 public Shader blurShader = null; 22 private Material blurMaterial = null; 23 public override bool CheckResources () { 24 CheckSupport (false); 25 blurMaterial = CheckShaderAndCreateMaterial (blurShader, blurMaterial); 26 if (!isSupported) 27 ReportAutoDisable (); 28 return isSupported; 29 } 30 public void OnDisable () { 31 if (blurMaterial) 32 DestroyImmediate (blurMaterial); 33 } 34 public void OnRenderImage (RenderTexture source, RenderTexture destination) { 35 if (CheckResources() == false) { 36 Graphics.Blit (source, destination); 37 return; 38 } 39 float widthMod = 1.0f / (1.0f * (1<<downsample)); 40 blurMaterial.SetVector ("_Parameter", new Vector4 (blurSize * widthMod, -blurSize * widthMod, 0.0f, 0.0f)); 41 source.filterMode = FilterMode.Bilinear; 42 int rtW = source.width >> downsample; 43 int rtH = source.height >> downsample; 44 //if(Time.realtimeSinceStartup > 15){ 45 // downsample 46 RenderTexture rt = RenderTexture.GetTemporary (rtW, rtH, 0, source.format); 47 rt.filterMode = FilterMode.Bilinear; 48 Graphics.Blit (source, rt, blurMaterial, 0); 49 var passOffs= blurType == BlurType.StandardGauss ? 0 : 2; 50 for(int i = 0; i < blurIterations; i++) { 51 float iterationOffs = (i*1.0f); 52 blurMaterial.SetVector ("_Parameter", new Vector4 (blurSize * widthMod + iterationOffs, -blurSize * widthMod - iterationOffs, 0.0f, 0.0f)); 53 // vertical blur 54 RenderTexture rt2 = RenderTexture.GetTemporary (rtW, rtH, 0, source.format); 55 rt2.filterMode = FilterMode.Bilinear; 56 Graphics.Blit (rt, rt2, blurMaterial, 1 + passOffs); 57 RenderTexture.ReleaseTemporary (rt); 58 rt = rt2; 59 // horizontal blur 60 rt2 = RenderTexture.GetTemporary (rtW, rtH, 0, source.format); 61 rt2.filterMode = FilterMode.Bilinear; 62 Graphics.Blit (rt, rt2, blurMaterial, 2 + passOffs); 63 RenderTexture.ReleaseTemporary (rt); 64 rt = rt2; 65 } 66 Graphics.Blit (rt, destination); 67 RenderTexture.ReleaseTemporary (rt); 68 // } 69 } 70 } 71}
###試したこと
Bluroptimized.csの制御の部分をコメントアウトしたりうまくいってた時の設定を再現したがうまくいかず。
###補足情報(言語/FW/ツール等のバージョンなど)
unity v5.4.1f1
Oculus Utilities v1.8.0
OVRPlugin v1.7.0
SDK v0.0.0
あなたの回答
tips
プレビュー