![](images/chestnut/misc/left.gif) |
Программирование для мобильных устройств Android, iOS и другие |
13.05.2014, 00:54
|
#1
|
Социал-сычевист
Регистрация: 24.06.2011
Сообщений: 611
Написано 342 полезных сообщений (для 1,359 пользователей)
|
[Android] PowerVR и GUI-текстура
Привет, булка. Я тоже принял веру юнитиведения, и потихоньку начал портировать Horizon Prime на него. Но на андроиде (плашка Galaxy Tab 2 7") возникла странная проблема.
Имею картинку (PNG, RGBA 32bpp):
Импортирую текстуру со следующими настройками:
Вывожу её кодом:
GUI.DrawTextureWithTexCoords(new Rect((scrW-512.0f)*mul,0, 512.0f*mul, 256.0f*mul), UIMaterials[2], new Rect(0,1,1,-1), true);
Результат:
Появляется странный глюк с такими вот квадратами, которые постоянно меняют своё местоположение (картинка так и должна быть перевёрнута и заскейлена). Хотя в то же время в плеймоде всё работает как надо (как и в пека-билде).
ЧЯДНТ?
|
(Offline)
|
|
13.05.2014, 01:26
|
#2
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,021
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: [Android] PowerVR и GUI-текстура
Сообщение от Кирпи4
Я тоже принял веру юнитиведения, и потихоньку начал портировать Horizon Prime на него.
|
Всё, Игоря не дождёмся!
|
(Offline)
|
|
13.05.2014, 01:29
|
#3
|
Социал-сычевист
Регистрация: 24.06.2011
Сообщений: 611
Написано 342 полезных сообщений (для 1,359 пользователей)
|
Ответ: [Android] PowerVR и GUI-текстура
Сообщение от Arton
|
Дождётесь, даже на портативных девайсах
Плавно подхожу к причине. Если в GUI.DrawTexture() вырубить alphaBlend, артефакт исчезает
|
(Offline)
|
|
13.05.2014, 02:45
|
#4
|
Социал-сычевист
Регистрация: 24.06.2011
Сообщений: 611
Написано 342 полезных сообщений (для 1,359 пользователей)
|
Ответ: [Android] PowerVR и GUI-текстура
Базарю - проблема оказалась гораздо глубже: в шейдере чанков. Артефакты начинаются только там, где пиксели интерфейса пересекают пиксели чанков. Правда вот беда - не знаю как исправить шейдер. Пишет что количество временных регистров 8 превышено, требуется 9 регистров (в районе 10 линии). Вот листинг шейдера:
Shader "Custom/Terrain" {
Properties {
_GrassTex ("Grass (RGB)", 2D) = "white" {}
_MidTex ("Middle (RGB)", 2D) = "white" {}
_RockTex ("Rock (RGB)", 2D) = "white" {}
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
#pragma surface surf Lambert
sampler2D _GrassTex;
sampler2D _MidTex;
sampler2D _RockTex;
struct Input {
float2 uv_GrassTex;
float2 uv_MidTex;
float2 uv_RockTex;
float3 worldPos;
};
void surf (Input IN, inout SurfaceOutput o) {
float delta;
float hght = (IN.worldPos.y+1.5)/3.0;
if(hght>0.7){
delta = (clamp(hght,0.7,1.0)-0.7)/0.2;
o.Albedo = (tex2D(_RockTex,IN.uv_RockTex)*delta + tex2D(_MidTex,IN.uv_MidTex)*(1.0-delta)).rgb;
}else if(hght<0.2){
delta = clamp(hght,0.0,0.2)/0.2;
o.Albedo = (tex2D(_MidTex,IN.uv_MidTex)*delta + tex2D(_GrassTex,IN.uv_GrassTex)*(1.0-delta)).rgb;
}else{
o.Albedo = (tex2D(_MidTex,IN.uv_MidTex)).rgb;
}
o.Alpha = 1.0;
}
ENDCG
}
FallBack "Mobile/Diffuse"
}
|
(Offline)
|
|
13.05.2014, 07:29
|
#5
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: [Android] PowerVR и GUI-текстура
Оптимизируй структуру Input примерно так:
Shader "Custom/Terrain" { Properties { _GrassTex ("Grass (RGB)", 2D) = "white" {} _MidTex ("Middle (RGB)", 2D) = "white" {} _RockTex ("Rock (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM #pragma surface surf Lambert
sampler2D _GrassTex; sampler2D _MidTex; sampler2D _RockTex;
struct Input { float2 uv_MidTex; float3 worldPos; }; void surf (Input IN, inout SurfaceOutput o) { float delta; float hght = (IN.worldPos.y+1.5)/3.0; if(hght>0.7){ delta = (clamp(hght,0.7,1.0)-0.7)/0.2; o.Albedo = (tex2D(_RockTex,IN.uv_MidTex)*delta + tex2D(_MidTex,IN.uv_MidTex)*(1.0-delta)).rgb; }else if(hght<0.2){ delta = clamp(hght,0.0,0.2)/0.2; o.Albedo = (tex2D(_MidTex,IN.uv_MidTex)*delta + tex2D(_GrassTex,IN.uv_MidTex)*(1.0-delta)).rgb; }else{ o.Albedo = (tex2D(_MidTex,IN.uv_MidTex)).rgb; } o.Alpha = 1.0; } ENDCG } FallBack "Mobile/Diffuse" }
По поводу проблем с текстурой GUI: попробуй перед отрисовкой очистить буфер глубины http://docs.unity3d.com/Documentatio.../GL.Clear.html
|
(Offline)
|
|
13.05.2014, 20:27
|
#6
|
Социал-сычевист
Регистрация: 24.06.2011
Сообщений: 611
Написано 342 полезных сообщений (для 1,359 пользователей)
|
Ответ: [Android] PowerVR и GUI-текстура
Сообщение от pax
Оптимизируй структуру Input примерно так:
|
Заменил, всё равно ругается.
Сообщение от pax
|
Очищал, не помогает, артефакт остаётся. Глюк пропадает, если рисовать через Graphics.DrawTexture вместо GUI.DrawTexture. Есть ли какие-то подводные камни у такого метода?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:01.
|