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

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

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

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Unity

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

Q&A

解決済

1回答

1336閲覧

UnityでPCからAndroidにプラットフォームを変えたら見た目が変わるのをどうにかしたい

Asagiri

総合スコア9

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Unity

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

0グッド

0クリップ

投稿2019/12/24 05:34

Unityで作った水の屈折っぽいものをAndroidに表示させたいのですが、プラットフォームを変更したら見た目が変わってしまいました。
どうにかしてPCのものをそのまま見れるようにしたいのですがどうすればいいかわかりません
左がプラットフォームがPC、右がAndroidのものです。
イメージ説明 イメージ説明
水の部分のShaderは下のコードです。

ShaderLab

1Shader "Custom/refract" 2{ 3 Properties 4 { 5 _Color("Color", Color) = (0.8, 0.5, 0.5, 0.1) 6 _MainTex("Albedo (RGB)", 2D) = "white" {} 7 _Glossiness("Smoothness", Range(0,1)) = 0.5 8 _Metallic("Metallic", Range(0,1)) = 0.0 9 _Refraction("Refraction Index", Range(1.0, 3.0)) = 1.33 10 _Distance("Refraction Distance", Float) = 10.0 11 } 12 SubShader 13 { 14 Tags { "Queue" = "Transparent" "RenderType" = "Transparent" } 15 16 GrabPass {} 17 18 CGPROGRAM 19 #pragma surface surf Standard alpha 20 #pragma target 3.0 21 22 sampler2D _MainTex; 23 sampler2D _GrabTexture; 24 sampler2D _CameraDepthTexture; 25 26 struct Input 27 { 28 float2 uv_MainTex; 29 float3 worldPos; 30 float3 worldNormal; 31 }; 32 33 half _Glossiness; 34 half _Metallic; 35 fixed4 _Color; 36 float _Refraction; 37 float _Distance; 38 39 void surf(Input IN, inout SurfaceOutputStandard o) 40 { 41 #define DISTANCE_DIVISOR 16.0 42 #define ITERATION_COUNT 32 43 #define DEPTH_THRESHOLD 0.1 44 #define EDGE_BLENDING_EXPONENT 4.0 45 46 // まず屈折方向を求め... 47 float3 eyeDir = normalize(IN.worldPos - _WorldSpaceCameraPos); 48 float3 refractionDir = refract(eyeDir, normalize(IN.worldNormal), 1.0 / _Refraction); 49 50 // 透明物体の表面を起点に、少しずつ屈折方向へ進みながら 51 // デプスをチェックしていき、他のオブジェクトと衝突する点を求める 52 float stride = _Distance / DISTANCE_DIVISOR; 53 float s = 1.0; 54 float4 refractionPos = float4(IN.worldPos, 1.0); 55 float4 refractionViewPos; 56 float4 refractionClipPos; 57 float backgroundDepth; 58 float hit = 0.0; 59 for (int i = 0; i < ITERATION_COUNT; i++) 60 { 61 refractionPos.xyz += s * stride * refractionDir; 62 refractionViewPos = mul(UNITY_MATRIX_V, refractionPos); 63 refractionClipPos = mul(UNITY_MATRIX_P, refractionViewPos); 64 backgroundDepth = LinearEyeDepth(SAMPLE_DEPTH_TEXTURE_PROJ(_CameraDepthTexture, ComputeScreenPos(refractionClipPos))); 65 if (s * (backgroundDepth + refractionViewPos.z) < 0.0) 66 { 67 // もし衝突が検出されたら、進行方向を逆転させ 68 // 進行スピードを半減させて衝突しなくなるまで戻る 69 // 衝突しなくなったら再び進行方向逆転・スピード半減...を繰り返し 70 // なるべく正確な接触位置を求める 71 hit = 1.0; 72 s *= -1.0; 73 stride *= 0.5; 74 } 75 } 76 77 // このようなデプスだけを頼りにした衝突判定では、画面内のオブジェクトが奥行き方向に 78 // どれだけの厚みを持っているかわからないので、本来であればオブジェクトの背後を 79 // 素通りしていくべき屈折光経路まで衝突していると判定されてしまうことになる 80 // しょうがないので「衝突している」と判定されたとしても、オブジェクトのデプスと 81 // 検出された衝突点のデプスがある程度ずれているようなら誤検出と見なして検出を取り消す 82 // また、判定境界の部分に発生するノイズを軽減するため、境界付近では判定値をなめらかに変える 83 float depthDelta = abs(backgroundDepth + refractionViewPos.z); 84 hit = hit * saturate(1.0 - pow(depthDelta / DEPTH_THRESHOLD, EDGE_BLENDING_EXPONENT)); 85 86 // 衝突していると判定された場合はグラブテクスチャの色を、そうでなければ 87 // リフレクション用キューブマップの色を屈折色として採用する 88 float4 grabTexColor = tex2Dproj(_GrabTexture, ComputeGrabScreenPos(refractionClipPos)); 89 float4 backgroundColor = UNITY_SAMPLE_TEXCUBE(unity_SpecCube0, refractionDir); 90 float4 refractionColor = lerp(backgroundColor, grabTexColor, hit); 91 fixed4 surfaceColor = tex2D(_MainTex, IN.uv_MainTex) * _Color; 92 93 o.Albedo = surfaceColor.rgb * surfaceColor.a; 94 o.Metallic = _Metallic; 95 o.Smoothness = _Glossiness; 96 o.Alpha = 1.0; 97 o.Emission = refractionColor.rgb * surfaceColor.rgb * (1.0 - surfaceColor.a); 98 } 99 ENDCG 100 } 101}

どうか解決法を教えていただけるとありがたいです。よろしくお願いします

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

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

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

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

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

guest

回答1

0

ベストアンサー

デプステクスチャが利用できない状態になっているのかもしれません。
水オブジェクトに下記のようなスクリプトをアタッチしてみると変化はあるでしょうか?

C#

1using UnityEngine; 2 3[ExecuteAlways, RequireComponent(typeof(Renderer))] 4public class DepthTextureEnabler : MonoBehaviour 5{ 6 private void OnWillRenderObject() 7 { 8 var currentCamera = Camera.current; 9 if (currentCamera != null) 10 { 11 currentCamera.depthTextureMode |= DepthTextureMode.Depth; 12 } 13 } 14}

投稿2019/12/25 21:16

Bongo

総合スコア10807

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問