アウトライン描画時の書き込み先が正しいターゲットを指していないのかもしれませんね。
ご質問者さんの手順に沿って試してみたところ、確かにおっしゃる通りうまくいきませんでした。どうやらアウトライン描画のレンダリング先が、用意したレンダーテクスチャではなく_PostEffectTempTexture
の方になっているような挙動をしていました。
LIGHT11さんのカメラ用スクリプトを少し変更して、CurrentActiveの代わりにCameraTargetを使ってみてはいかがでしょうか?
C#
1using UnityEngine;
2using UnityEngine.Rendering;
3
4[RequireComponent(typeof(Camera))]
5public class DepthTexture : MonoBehaviour
6{
7
8 [SerializeField]
9 private Shader _shader;
10 [SerializeField]
11 private float _outlineThreshold = 0.01f;
12 [SerializeField]
13 private Color _outlineColor = Color.white;
14 [SerializeField]
15 private float _outlineThick = 1.0f;
16
17 private Material _material;
18
19 private void Awake()
20 {
21 Initialize();
22 }
23
24 private void Update()
25 {
26#if UNITY_EDITOR
27 SetMaterialProperties();
28#endif
29 }
30
31 private void Initialize()
32 {
33 var camera = GetComponent<Camera>();
34 camera.depthTextureMode |= DepthTextureMode.Depth;
35
36 if (camera.allowMSAA || camera.allowHDR)
37 {
38 return;
39 }
40
41 _material = new Material(_shader);
42 SetMaterialProperties();
43
44 var commandBuffer = new CommandBuffer();
45 int tempTextureIdentifier = Shader.PropertyToID("_PostEffectTempTexture");
46 commandBuffer.GetTemporaryRT(tempTextureIdentifier, -1, -1);
47
48 // CameraTargetから描画結果を取り出し、それを再びCameraTargetへアウトライン処理を加えつつ書き戻す
49 commandBuffer.Blit(BuiltinRenderTextureType.CameraTarget, tempTextureIdentifier);
50 commandBuffer.Blit(tempTextureIdentifier, BuiltinRenderTextureType.CameraTarget, _material);
51
52 commandBuffer.ReleaseTemporaryRT(tempTextureIdentifier);
53 camera.AddCommandBuffer(CameraEvent.AfterEverything, commandBuffer);
54 }
55
56 private void SetMaterialProperties()
57 {
58 if (_material != null)
59 {
60 _material.SetFloat("_OutlineThreshold", _outlineThreshold);
61 _material.SetColor("_OutlineColor", _outlineColor);
62 _material.SetFloat("_OutlineThick", _outlineThick);
63 }
64 }
65}
私の場合ですと、これでレンダーテクスチャの方にもアウトラインが現れました。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/19 01:30