質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

HLSL

HLSLは、米マイクロソフト社によって開発された Direct3D APIで使われるプロプライエタリなシェーディング言語です。

Q&A

1回答

2450閲覧

Unity|自作したシェーダーをつけたマテリアルが一番上に表示されてしまう問題

MemoT

総合スコア13

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

HLSL

HLSLは、米マイクロソフト社によって開発された Direct3D APIで使われるプロプライエタリなシェーディング言語です。

0グッド

0クリップ

投稿2018/06/25 01:28

編集2018/06/25 09:53

Unityで、写真の解像度をコントロールするためのシェーダーを作りました。
コピペベースで作成したため、中身を全て読めないのですが、掲題の通り、シェーダーに紐付けたマテリアルが最優先で一番上に表示されてしまう現象が起きています。表示順位をヒエラルキーの階層と同じくしたいのですが、ご教授いただけますでしょうか。

HLSL

1Shader "Unlit/Transparent Colored Blurred" 2{ 3 Properties 4 { 5 _MainTex ("Base (RGB), Alpha (A)", 2D) = "white" {} 6 _Distance ("Distance", Float) = 0.015 7 } 8 9 SubShader 10 { 11 LOD 100 12 13 Tags 14 { 15 "Queue" = "Transparent" 16 "IgnoreProjector" = "True" 17 "RenderType" = "Transparent" 18 } 19 20 Cull Back 21 Lighting Off 22 ZWrite Off 23 ZTest LEqual 24 Fog { Mode Off } 25 Offset -1, -1 26 Blend SrcAlpha OneMinusSrcAlpha 27 28 Pass 29 { 30 CGPROGRAM 31 #pragma vertex vertexProgram 32 #pragma fragment fragmentProgram 33 34 #include "UnityCG.cginc" 35 36 struct appdata_t 37 { 38 float4 vertex : POSITION; 39 float2 textureCoordinate : TEXCOORD0; 40 fixed4 color : COLOR; 41 }; 42 43 struct vertexToFragment 44 { 45 float4 vertex : SV_POSITION; 46 half2 textureCoordinate : TEXCOORD0; 47 fixed4 color : COLOR; 48 }; 49 50 sampler2D _MainTex; 51 float4 _MainTex_ST; 52 float _Distance; 53 54 vertexToFragment vertexProgram (appdata_t vertexData) 55 { 56 vertexToFragment output; 57 output.vertex = UnityObjectToClipPos(vertexData.vertex); 58 output.textureCoordinate = TRANSFORM_TEX(vertexData.textureCoordinate, _MainTex); 59 output.color = vertexData.color; 60 return output; 61 } 62 63 fixed4 fragmentProgram (vertexToFragment input) : COLOR 64 { 65 float distance = _Distance; 66 fixed4 computedColor = tex2D(_MainTex, input.textureCoordinate) * input.color; 67 computedColor += tex2D(_MainTex, half2(input.textureCoordinate.x + distance , input.textureCoordinate.y + distance )) * input.color; 68 computedColor += tex2D(_MainTex, half2(input.textureCoordinate.x + distance , input.textureCoordinate.y)) * input.color; 69 computedColor += tex2D(_MainTex, half2(input.textureCoordinate.x , input.textureCoordinate.y + distance )) * input.color; 70 computedColor += tex2D(_MainTex, half2(input.textureCoordinate.x - distance , input.textureCoordinate.y - distance )) * input.color; 71 computedColor += tex2D(_MainTex, half2(input.textureCoordinate.x + distance , input.textureCoordinate.y - distance )) * input.color; 72 73 74 75 76 computedColor += tex2D(_MainTex, half2(input.textureCoordinate.x - distance , input.textureCoordinate.y + distance )) * input.color; 77 computedColor += tex2D(_MainTex, half2(input.textureCoordinate.x - distance , input.textureCoordinate.y)) * input.color; 78 computedColor += tex2D(_MainTex, half2(input.textureCoordinate.x , input.textureCoordinate.y - distance )) * input.color; 79 computedColor = computedColor / 9; 80 81 return computedColor; 82 } 83 ENDCG 84 } 85 } 86}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

このコード自体には、ご質問者さんのおっしゃる現象に影響しそうな部分は特になさそうに見えます。

「ヒエラルキーの階層と同じく...」とおっしゃっているということは、表示したい各オブジェクトはUIオブジェクト(Imageなど)でしょうか?
ですが、ちょっと試してみたところでは、どうやらご提示のコードで問題なく前後関係を表現できているようです。

UIオブジェクトではないとしたら、その場合はそもそもヒエラルキー上の親子関係・兄弟関係というのは、描画順序決定には寄与していないんじゃないかと思います(参考:UnityのSpriteRendererとRendererの描画順ルール - 渋谷ほととぎす通信)。
Sorting Layerも同じ、Order In Layerも同じ、カメラからの距離も同じ場合、ヒエラルキー上の位置を変更しても描画順は変化していないように見えました(おそらくオブジェクトを生成した順序に従っているように見えますが不確かです)。

これら描画レイヤー周りの設定はどうなっていますでしょうか?
多分、描画順序についてはこの辺の設定調整で制御してやるのが妥当な方法のように思います。

投稿2018/06/25 21:21

Bongo

総合スコア10807

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問