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

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

Вернуться   www.boolean.name > Программирование игр для компьютеров > Unity > Эффекты/Шейдеры

Ответ
 
Опции темы
Старый 19.12.2020, 21:28   #1
Evgen
Разработчик
 
Аватар для Evgen
 
Регистрация: 12.01.2011
Адрес: Moscow
Сообщений: 393
Написано 58 полезных сообщений
(для 87 пользователей)
Добавить в шейдер цвет частицы

Есть примитивный шейдер типа Diffuse:

Shader "Diff" {
	Properties {
		_Color ("Main Color", Color) = (1,1,1,1)
		_MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
	}

	SubShader {
		Tags {"Queue"="Transparent+1000" "IgnoreProjector"="True" "RenderType"="Transparent"}

		CGPROGRAM
		#pragma surface surf Lambert alpha

		sampler2D _MainTex;
		fixed4 _Color;

		struct Input {
			float2 uv_MainTex;
		};

		void surf (Input IN, inout SurfaceOutput o) {
			fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
			o.Albedo = c.rgb;
			o.Alpha = c.a;
		}
		ENDCG
	}

	Fallback "Transparent/Diffuse"
}
Создаю материал и назначаю данный шейдер.
Вывожу частицу с помощью Emit:

p.position = pos;
p.velocity = velocity;
p.startSize = size;
p.startLifetime = 100;
p.startColor = Color.red;
obj.GetComponent<ParticleSystem> ().Emit (p, 1);
Однако вместо красной частицы на экран выводится белая.
При этом если использовать любой шейдер типа Particle то все нормально цвет указанный при Emit учитывается.

Что нужно добавить в шейдер, чтобы цвет Emit startColor учитывался в нем. Смотрел исходники unity particle шейдеров но понять что нужно добавить не могу.
(Offline)
 
Ответить с цитированием
Старый 22.12.2020, 17:20   #2
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,566
Написано 3,004 полезных сообщений
(для 5,318 пользователей)
Ответ: Добавить в шейдер цвет частицы

Подозреваю что надо в шейдер в структуру Input добавить строку
float4 color COLOR
А первую строку функции surf заменить на
fixed4 c tex2D(_MainTexIN.uv_MainTex) * _Color IN.color
Т.е. цвет частицы передается через цвета вершин.

Ну и в итоге должно получиться следующее:
Shader "Diff" {
    
Properties {
        
_Color ("Main Color"Color) = (1,1,1,1)
        
_MainTex ("Base (RGB) Trans (A)"2D) = "white" {}
    }

    
SubShader {
        
Tags {"Queue"="Transparent+1000" "IgnoreProjector"="True" "RenderType"="Transparent"}

        
CGPROGRAM
        
#pragma surface surf Lambert alpha

        
sampler2D _MainTex;
        
fixed4 _Color;

        
struct Input {
            
float2 uv_MainTex;
            
float4 color COLOR;
        };

        
void surf (Input INinout SurfaceOutput o) {
            
fixed4 c tex2D(_MainTexIN.uv_MainTex) * _Color IN.color;
            
o.Albedo c.rgb;
            
o.Alpha c.a;
        }
        
ENDCG
    
}

    
Fallback "Transparent/Diffuse"

__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Evgen (25.12.2020)
Старый 25.12.2020, 00:02   #3
Evgen
Разработчик
 
Аватар для Evgen
 
Регистрация: 12.01.2011
Адрес: Moscow
Сообщений: 393
Написано 58 полезных сообщений
(для 87 пользователей)
Ответ: Добавить в шейдер цвет частицы

Ок как-нибудь проверю. Просто уже все сделал.
На сколько я понял цвет частиц задается через цвет вершин, vertexcolor. Но могу ошибаться.
Сделал методом "перебора" так :

Shader "Diff" {

	Properties {
		_Color ("Main Color", Color) = (1,1,1,0)
		_MainTex ("Base (RGB)", 2D) = "white" { }
	}

	SubShader {
		Tags {"Queue"="Transparent+1500" "IgnoreProjector"="True" "RenderType"="Transparent"}

		Pass {
			Blend SrcAlpha OneMinusSrcAlpha
			SetTexture [_MainTex] { combine previous * texture }      
		}
	}
}
Это не CG конечно, но результат то что нужно
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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