2016-09-21 2 views
1

Ich mache eine App für das Samsung TV, mit Unity Build> Samsung TV.Ändern von Materialien zeigt wie rosa auf Samsung TV

Ich habe eine Reihe von primitiven Boxen, wo ich die Materialien mainTexture zu einem Atlas und die Meshfilters uv zur angegebenen UV von der PackTextures-Methode geändert haben.

  Texture2D[] allCubeTextures = new Texture2D[] { app.GetComponentInChildren<Image>().mainTexture as Texture2D, Resources.Load<Texture2D>("Black"), Resources.Load<Texture2D>("Black"), Resources.Load<Texture2D>("Black"), Resources.Load<Texture2D>("Black"), Resources.Load<Texture2D>("Black") }; 
      Texture2D textureAtlas = new Texture2D(2, 2); 
      Rect[] atlasUvs = textureAtlas.PackTextures(allCubeTextures, 200); 
      icon.GetComponent<Renderer>().material.mainTexture = textureAtlas; 
      Vector2[] uv = new Vector2[6 * 4]; 
      for (int i = 0; i < atlasUvs.Length; i++) 
      { 
       int j = i * 4; 
       uv[j] = new Vector2(atlasUvs[i].xMin, atlasUvs[i].yMin); 
       uv[j + 1] = new Vector2(atlasUvs[i].xMax, atlasUvs[i].yMin); 
       uv[j + 2] = new Vector2(atlasUvs[i].xMin, atlasUvs[i].yMax); 
       uv[j + 3] = new Vector2(atlasUvs[i].xMax, atlasUvs[i].yMax); 
      } 
      Mesh mesh = icon.GetComponent<MeshFilter>().mesh; 
      mesh.uv = uv; 

Es sieht alles gut und schön im Editor, aber wenn ich auf einem Samsung TV zu testen, die Boxen sind alle rosa (als ob sie gebrochen Shadern sind).

Vor der Bearbeitung der mainTexture zu einer Atlas-Textur, verwendete ich Einheitsstandard uv. Das hat funktioniert, aber meine Textur war auf allen Seiten, anstatt wie mein Atlas es jetzt behandelt. Deshalb denke ich, dass es damit zusammenhängen könnte.

In meinem Versuch, meinen Kopf um diesen Fehler zu wickeln, habe ich auch mit einer Reihe von verschiedenen Shadern versucht, mit keinem anderen Ergebnis.

Ist es nur, dass Samsung TV diese Implementierung meiner Textur nicht unterstützt?

Die Samsung TV-Log:

Game_Main:209] GPlayer PFM Ver : (1001) 
Failed to create random directory /tmp/pulseaudio/pulse-XswsA4ySxtTi: Permission denied 
Mono path[0] = '/opt/storage/usb/sda1/f0caae903700866889117406a674369e6e82bef3/resources/Data/Managed' 
Mono config path = '/opt/storage/usb/sda1/f0caae903700866889117406a674369e6e82bef3/resources/Data/Managed' 
using 32 bit 
using 24 bit depth 
Renderer: 
Vendor: ARM 
Version: OpenGL ES 2.0 
GLES:  2 
GL_OES_texture_npot GL_OES_vertex_array_object GL_OES_compressed_ETC1_RGB8_texture GL_EXT_compressed_ETC1_RGB8_sub_texture GL_OES_standard_derivatives GL_OES_EGL_image GL_OES_depth24 GL_ARM_rgba8 GL_ARM_mali_shader_binary GL_OES_depth_texture GL_OES_packed_depth_stencil GL_EXT_texture_format_BGRA8888 GL_OES_vertex_half_float GL_EXT_blend_minmax GL_OES_EGL_image_external GL_OES_EGL_sync GL_OES_rgb8_rgba8 GL_EXT_multisampled_render_to_texture GL_EXT_discard_framebuffer GL_OES_get_program_binary GL_ARM_mali_program_binary GL_EXT_shader_texture_lod GL_EXT_robustness GL_OES_depth_texture_cube_map GL_KHR_debug GL_ARM_shader_framebuffer_fetch GL_ARM_shader_framebuffer_fetch_depth_stencil GL_OES_mapbuffer 
OPENGL LOG: Creating OpenGL ES 2.0 graphics device ; Context level <OpenGL ES 2.0> ; Context handle 1073741825 
Initialize engine version: 5.4.1f1 (649f48bbbf0f) 
Failed to create random directory /tmp/pulseaudio/pulse-Ivi10nSJCUJP: Permission denied 
Failed to create random directory /tmp/pulseaudio/pulse-YonkWqDHH005: Permission denied 
Not enough permissions to set priority (must be root)Begin MonoManager ReloadAssembly 
Platform assembly: /opt/storage/usb/sda1/f0caae903700866889117406a674369e6e82bef3/resources/Data/Managed/UnityEngine.dll (this message is harmless) 
Loading /opt/storage/usb/sda1/f0caae903700866889117406a674369e6e82bef3/resources/Data/Managed/UnityEngine.dll into Unity Child Domain 
Non platform assembly: /opt/storage/usb/sda1/f0caae903700866889117406a674369e6e82bef3/resources/Data/Managed/User/Assembly-CSharp.dll (this message is harmless) 
Loading /opt/storage/usb/sda1/f0caae903700866889117406a674369e6e82bef3/resources/Data/Managed/User/Assembly-CSharp.dll into Unity Child Domain 
Non platform assembly: /opt/storage/usb/sda1/f0caae903700866889117406a674369e6e82bef3/resources/Data/Managed/User/UnityEngine.UI.dll (this message is harmless) 
Loading /opt/storage/usb/sda1/f0caae903700866889117406a674369e6e82bef3/resources/Data/Managed/User/UnityEngine.UI.dll into Unity Child Domain 
Non platform assembly: /opt/storage/usb/sda1/f0caae903700866889117406a674369e6e82bef3/resources/Data/Managed/User/UnityEngine.Networking.dll (this message is harmless) 
Loading /opt/storage/usb/sda1/f0caae903700866889117406a674369e6e82bef3/resources/Data/Managed/User/UnityEngine.Networking.dll into Unity Child Domain 
- Completed reload, in 0.133 seconds 
Platform assembly: /opt/storage/usb/sda1/f0caae903700866889117406a674369e6e82bef3/resources/Data/Managed/System.Core.dll (this message is harmless) 
Platform assembly: /opt/storage/usb/sda1/f0caae903700866889117406a674369e6e82bef3/resources/Data/Managed/System.dll (this message is harmless) 
-------- Shader compilation failed 
#version 100 
#extension GL_EXT_frag_depth : enable 
precision mediump float; 
uniform highp vec4 _ProjectionParams; 
uniform highp vec4 _ZBufferParams; 
uniform highp mat4 unity_CameraToWorld; 
uniform highp mat4 _NonJitteredVP; 
uniform highp mat4 _PreviousVP; 
uniform highp sampler2D _CameraDepthTexture; 
varying highp vec2 xlv_TEXCOORD0; 
varying highp vec3 xlv_TEXCOORD1; 
void main() 
{ 
    highp vec4 tmpvar_1; 
    tmpvar_1 = texture2D (_CameraDepthTexture, xlv_TEXCOORD0); 
    mediump vec2 tmpvar_2; 
    highp vec4 tmpvar_3; 
    tmpvar_3.w = 1.0; 
    tmpvar_3.xyz = ((xlv_TEXCOORD1 * (_ProjectionParams.z/xlv_TEXCOORD1.z)) * (1.0/((
    (_ZBufferParams.x * tmpvar_1.x) 
    + _ZBufferParams.y)))); 
    highp vec4 tmpvar_4; 
    tmpvar_4 = (unity_CameraToWorld * tmpvar_3); 
    highp vec4 tmpvar_5; 
    tmpvar_5 = (_PreviousVP * tmpvar_4); 
    highp vec4 tmpvar_6; 
    tmpvar_6 = (_NonJitteredVP * tmpvar_4); 
    highp vec2 tmpvar_7; 
    tmpvar_7 = (((tmpvar_5.xy/tmpvar_5.w) + 1.0)/2.0); 
    highp vec2 tmpvar_8; 
    tmpvar_8 = (((tmpvar_6.xy/tmpvar_6.w) + 1.0)/2.0); 
    tmpvar_2 = (tmpvar_8 - tmpvar_7); 
    mediump vec4 tmpvar_9; 
    tmpvar_9.zw = vec2(0.0, 1.0); 
    tmpvar_9.xy = tmpvar_2; 
    gl_FragDepthEXT = tmpvar_1.x; 
    gl_FragData[0] = tmpvar_9; 
} 
-------- failed compiling: 
fragment evaluation shader 
0:4: P0003: Extension 'GL_EXT_frag_depth' not supported 
0:6: P0004: High precision not supported, instead compiling high precision as medium precision 
0:38: L0002: Undeclared variable 'gl_FragDepthEXT' 
Note: Creation of internal variant of shader 'Hidden/Internal-MotionVectors' failed. 
WARNING: Shader Unsupported: 'Hidden/Internal-MotionVectors' - Pass '' has no vertex shader 
WARNING: Shader Unsupported: 'Hidden/Internal-MotionVectors' - Setting to default shader. 
UnloadTime: 4.557000 ms 
Unloading 4 Unused Serialized files (Serialized files now loaded: 0) 

Unloading 8 unused Assets to reduce memory usage. Loaded Objects now: 844. 
Total: 4.570000 ms (FindLiveObjects: 0.397000 ms CreateObjectMapping: 0.061000 ms MarkObjects: 3.410000 ms DeleteObjects: 0.691000 ms) 

Unloading 2 Unused Serialized files (Serialized files now loaded: 0) 

Unloading 94 unused Assets to reduce memory usage. Loaded Objects now: 1056. 
Total: 16.380001 ms (FindLiveObjects: 0.444000 ms CreateObjectMapping: 0.075000 ms MarkObjects: 3.665000 ms DeleteObjects: 12.190001 ms) 

[UnityLauncher] Stop Game 

Edit: Nach einigen weiteren Graben tun denke ich, mein Problem ist etwas bezogen werden: obwohl Textures loads in editor but not in standalone (appears pink) ich nicht ganz die Lösung bekommen. Ich habe keine Optionen bei der Auswahl von preloaded Shadern. Außerdem verwende ich Standard-Shader, also würde ich nicht denken, dass dies ein Problem wäre.

Edit 2: Okay, nach etwas mehr Forschung stieß ich auf diesen Beitrag: http://answers.unity3d.com/questions/939160/getting-pink-textures-in-build.html Es füge ich muss meinen Shader scheint (Unlit/Textur) auf die immer enthalten Shadern. Dies ändert jedoch nur die Box weiß statt rosa. Genauso wie Legacy/Diffuse, wie es auch in den immer enthaltenen Shadern ist.

+0

In welchem ​​Jahr wird Samsung hergestellt und wie lautet die Modellnummer? – Programmer

+0

Getestet auf einem 15 und 16 Modell. – Sundanian

Antwort

1

Okay, also habe ich die Lösung gefunden.

Wie in dem Link in Edit 1 geschrieben, musste ich den Shader in den "Always Included Shaders" unter Bearbeiten> Projekteinstellungen> Grafik einfügen. Ich musste dann den ShaderVariant in meinen Assets-Ordner speichern und diese Variante zum "Shader Preloading" hinzufügen.

+1

Schön. Probleme wie diese sind schwer zu finden. Glückwunsch! – Programmer

1

Ich sehe eine Zeile in der SamsungTV-Protokoll: -------- Shader compilation failed Ihr Shader konnte nicht kompilieren, so dass die rosa Zeug ist ein erwartetes Verhalten.

Ein Shader kann auf einem Gerät gut kompiliert und ausgeführt werden, auf anderen jedoch nicht. Das ist normal. Wenn du einen eingebauten Standard-Shader verwendest, melde einen Fehler bitte an Unit, ansonsten gib einen SubShader in deinen Shader ein, der das SamsungTV-Gerät unterstützt.

Achten Sie auch auf diesen Teil:

fragment evaluation shader 
0:4: P0003: Extension 'GL_EXT_frag_depth' not supported 
0:6: P0004: High precision not supported, instead compiling high precision as medium precision 
0:38: L0002: Undeclared variable 'gl_FragDepthEXT' 
Note: Creation of internal variant of shader 'Hidden/Internal-MotionVectors' failed. 
WARNING: Shader Unsupported: 'Hidden/Internal-MotionVectors' - Pass '' has no vertex shader 
WARNING: Shader Unsupported: 'Hidden/Internal-MotionVectors' - Setting to default shader. 

Von dem, was ich sehe, Ihr Shader verwendet eine nicht unterstützte Bibliothek namens GL_EXT_frag_depth, die nicht angemeldeten diese Art zu einer Variablen gl_FragDepthEXT führt.

+0

Ich habe versucht mit Unlit/Texturen, Legacy/Diffuse, Standard, Mobile/Unlit und Mobile Diffuse. Alles rosa, aber Legacy/Diffuse. Dieser ist weiß. Ich sah, was Sie gesehen und mit verschiedenen Shadern getestet, wie in OP geschrieben. Kein anderes Ergebnis. Deshalb ist meine Schlussfolgerung, dass es etwas mit meinem Texturatlas sein muss. Ich kann einfach nicht sehen was. – Sundanian

Verwandte Themen