2016-09-21 26 views
1

我正在爲三星電視製作應用程序,使用Unitys build> Samsung TV。在三星電視上顯示爲粉紅色的材料

我有一堆原始框,我已經將材質mainTexture更改爲圖集,並將MeshFilters uv更改爲PackTextures方法中給定的uv。

  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; 

它看起來在編輯器中所有好的和罰款,但是,每當我一個三星電視上測試,箱子都是粉紅色的(就好像它們是破着色器)。

在將mainTexture編輯爲地圖集紋理之前,我使用了統一標準uv。這工作,但我的紋理是四面八方,而不是我的地圖集現在處理它。這就是爲什麼我認爲這可能與此有關。

在我試圖圍繞這個錯誤包裹我的頭時,我也嘗試了一堆不同的着色器,沒有不同的結果。

三星電視不支持這種紋理實現嗎?

三星電視日誌:

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 

編輯: 做一些進一步的挖掘後,我想我的問題有所涉及: Textures loads in editor but not in standalone (appears pink) 我沒有完全得到解決,雖然。選擇preloded着色器時,我沒有選擇。此外,我使用標準着色器,所以我不認爲這會是一個問題。

編輯2: 好了,經過一些調查研究,我碰到這個帖子:http://answers.unity3d.com/questions/939160/getting-pink-textures-in-build.html 看來我要我的着色器(不亮/紋理)添加到總是包含着色器。然而,這只是將盒子變成白色而不是粉紅色。正如Legacy/Diffuse所做的那樣,因爲它也包含在始終包含的着色器中。

+0

三星年份是什麼年份?型號是多少? – Programmer

+0

測試15和16型號。 – Sundanian

回答

1

好的,所以我找到了解決方案。

如編輯1中的鏈接所寫,我不得不在「編輯>項目設置>圖形」下的「始終包含着色器」中包含着色器。 然後,我必須將ShaderVariant保存到我的資產文件夾,然後將該變體添加到「Shader預加載」中。

+1

不錯。像這些問題很難找到解決。恭喜! – Programmer

1

我注意到三星電視日誌中的一行:-------- Shader compilation failed 你的着色器編譯失敗,所以粉紅色的東西是一個預期的行爲。

着色器可以在設備上編譯和運行,但在其他設備上失敗。這很正常。如果您使用內置的標準着色器,請向Unit報告錯誤,否則在支持SamsungTV設備的着色器中包含SubShader。

注意這部分太:

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. 

從我所看到的,你的着色器使用名爲GL_EXT_frag_depth不支持的庫,導致該類型未申報的變量gl_FragDepthEXT

+0

我已嘗試使用Unlit /紋理,傳統/漫射,標準,移動/不亮和移動漫射。所有粉紅色,但遺產/瀰漫。那個是白色的。 我看到你看到了什麼,並用不同的着色器測試過,如OP所寫。 沒有不同的結果。這就是爲什麼我的結論是,它必須是我的紋理地圖集。我什麼都看不到。 – Sundanian

相關問題