Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > Программирование для мобильных устройств

Программирование для мобильных устройств Android, iOS и другие

Ответ
 
Опции темы
Старый 13.05.2014, 00:54   #1
Кирпи4
Социал-сычевист
 
Аватар для Кирпи4
 
Регистрация: 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
Arton
Быдлокодер
 
Аватар для Arton
 
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,019
Написано 2,312 полезных сообщений
(для 5,349 пользователей)
Ответ: [Android] PowerVR и GUI-текстура

Сообщение от Кирпи4 Посмотреть сообщение
Я тоже принял веру юнитиведения, и потихоньку начал портировать Horizon Prime на него.
Всё, Игоря не дождёмся!
(Offline)
 
Ответить с цитированием
Старый 13.05.2014, 01:29   #3
Кирпи4
Социал-сычевист
 
Аватар для Кирпи4
 
Регистрация: 24.06.2011
Сообщений: 611
Написано 342 полезных сообщений
(для 1,359 пользователей)
Ответ: [Android] PowerVR и GUI-текстура

Сообщение от Arton Посмотреть сообщение

Всё, Игоря не дождёмся!
Дождётесь, даже на портативных девайсах


Плавно подхожу к причине. Если в GUI.DrawTexture() вырубить alphaBlend, артефакт исчезает
__________________


(Offline)
 
Ответить с цитированием
Старый 13.05.2014, 02:45   #4
Кирпи4
Социал-сычевист
 
Аватар для Кирпи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
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 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 INinout 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
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 13.05.2014, 20:27   #6
Кирпи4
Социал-сычевист
 
Аватар для Кирпи4
 
Регистрация: 24.06.2011
Сообщений: 611
Написано 342 полезных сообщений
(для 1,359 пользователей)
Ответ: [Android] PowerVR и GUI-текстура

Сообщение от pax Посмотреть сообщение
Оптимизируй структуру Input примерно так:
Заменил, всё равно ругается.

Сообщение от pax Посмотреть сообщение
По поводу проблем с текстурой GUI: попробуй перед отрисовкой очистить буфер глубины http://docs.unity3d.com/Documentatio.../GL.Clear.html
Очищал, не помогает, артефакт остаётся. Глюк пропадает, если рисовать через Graphics.DrawTexture вместо GUI.DrawTexture. Есть ли какие-то подводные камни у такого метода?
__________________


(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 12:37.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com