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

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

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

Общие вопросы вопросы не попадающие ни в один из доступных разделов

Ответ
 
Опции темы
Старый 28.07.2013, 06:04   #16
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Кватернион. Как определить угол вращения.

По сути тебе нужно сделать матрицу, основанную на векторе между камерой и центром планеты. Затем просто множ матрицу поворота камеры на эту матрицу полученную ранее. Получиться что до перемножения будут коорданаты как ты сказал, а затем будет уже трансформированная - для визуализации и реальной позиции на планете.
(Offline)
 
Ответить с цитированием
Старый 30.08.2013, 23:56   #17
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Кватернион. Как определить угол вращения.


мой первый полуспертый cg шейдер
по идее это солнце.

Shader "Custom/Main Sequence Star" {
	Properties {
		_MainTex ("Base (RGB)", 2D) = "white" {}
	}
	

	SubShader {
		Tags { "RenderType"="Opaque" }
		LOD 200
		
		CGPROGRAM
		#pragma surface surf Lambert
		#pragma target 3.0

		sampler2D _MainTex;
		
		struct Input {
			float2 uv_MainTex;
		};

		float3 mod(float3 uv, float res){
			return uv - res * floor(uv/res);
		}
		
		float snoise(float3 uv, float res){
			const float3 s = float3(1e0, 1e2, 1e4);
			
			uv *= res;
			
			float3 uv0 = floor(mod(uv, res))*s;
			float3 uv1 = floor(mod(uv+float3(1.), res))*s;
			
			float3 f = frac(uv); f = f*f*(3.0-2.0*f);
		
			float4 v = float4(uv0.x+uv0.y+uv0.z, uv1.x+uv0.y+uv0.z, uv0.x+uv1.y+uv0.z, uv1.x+uv1.y+uv0.z);		
			float4 r = frac(sin(v*1e-3)*1e5);
			float r0 = lerp(lerp(r.x, r.y, f.x), lerp(r.z, r.w, f.x), f.y);
			
			r = frac(sin((v + uv1.z - uv0.z)*1e-3)*1e5);
			float r1 = lerp(lerp(r.x, r.y, f.x), lerp(r.z, r.w, f.x), f.y);
			
			return lerp(r0, r1, f.z)*2.-1.;
		}



		half4 corona(float2 uv){
			float2 p = -0.5 + uv;
			float color0 = 3.0 - (3.*length(2.*p));
			float3 coord = float3(atan2(p.x,p.y)/6.2832+.5, length(p)*.4, .5);
				for(int i = 1; i <= 7; i++)
					{
						float power = pow(2.0, float(i));
						color0 += (1.5 / power) * snoise(coord + float3(0.,-_Time.y*.05, _Time.y*.01), power*16.);
					}
			return half4( color0, pow(max(color0,0.),2.)*0.4, pow(max(color0,0.),3.)*0.15 , 1.0);
		}
		
		void surf (Input IN, inout SurfaceOutput o) {			
			float2 texCoor = IN.uv_MainTex + float2(_Time.x,0);
		
			half4 c = tex2D (_MainTex, texCoor);
			

			float leng = length( float2(0.5,0.5) - IN.uv_MainTex);
			
			half4 c0 = half4( c.x, pow(max(c.x,0.),2.)*0.4, pow(max(c.x,0.),3.)*0.15 , 1.0);
			half4 c1 = half4( c.y, pow(max(c.y,0.),2.)*0.4, pow(max(c.y,0.),3.)*0.15 , 1.0);
			half4 c2 = half4( c.z, pow(max(c.z,0.),2.)*0.4, pow(max(c.z,0.),3.)*0.15 , 1.0);
			half4 c3 = half4( c.w, pow(max(c.w,0.),2.)*0.4, pow(max(c.w,0.),3.)*0.15 , 1.0);
			//цвет от сферы солнца
			o.Albedo = 3*(c0+c1+c2+c3);
			o.Albedo *= 1-3.3333*leng;
			//языки пламени по краям
			half4 flames = corona(IN.uv_MainTex);

			if(leng >= 0.25 && leng < 0.3){
			//край солнца и протуберанцы нарастающие

				float p = (0.3-leng)*20;
				
				o.Albedo = lerp(flames,o.Albedo,p);			

			}			
			if(leng >= 0.3){
			//корона

			o.Albedo = flames;	
			}			
		}
		ENDCG
	} 
	FallBack "Self-Illumin/Diffuse"
}
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (31.08.2013)
Старый 31.08.2013, 11:50   #18
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Кватернион. Как определить угол вращения.

Не уверен что тебе в данном случае нужен сурфейсный шейдер...
Посмотри в стандартных шейдерах Flare или Font шейдеры. http://unity3d.com/unity/download/archive
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
dsd (31.08.2013)
Старый 02.09.2013, 00:29   #19
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Кватернион. Как определить угол вращения.



еще одно солнце


Shader "Custom/Sun3" {
Properties {

}
SubShader {
	Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
	//Cull Off Lighting Off ZWrite Off Ztest Always Fog { Mode Off }
	Blend One One

	Pass {	
		CGPROGRAM
		#pragma vertex vert
		#pragma fragment frag
		#pragma fragmentoption ARB_precision_hint_fastest
		#pragma target 3.0

		#include "UnityCG.cginc"

		fixed4 _TintColor;
		
		struct appdata_t {
			half4 vertex : POSITION;
			fixed4 color : COLOR;
			half2 texcoord : TEXCOORD0;
		};

		struct v2f {
			half4 vertex : POSITION;
			fixed4 color : COLOR;
			half2 texcoord : TEXCOORD0;
		};

		
		v2f vert (appdata_t v)
		{
			v2f o;
			o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
			o.color = v.color;
			o.texcoord =v.texcoord;
			return o;
		}

		half3 mod(half3 uv, half res){
			return uv - res * floor(uv/res);
		}
		
		half snoise(half3 uv, half res){
			const half3 s = half3(1e0, 1e2, 1e4);
			
			uv *= res;
			
			half3 uv0 = floor(mod(uv, res))*s;
			half3 uv1 = floor(mod(uv+half3(1.), res))*s;
			
			half3 f = frac(uv); f = f*f*(3.0-2.0*f);
		
			half4 v = half4(uv0.x+uv0.y+uv0.z, uv1.x+uv0.y+uv0.z, uv0.x+uv1.y+uv0.z, uv1.x+uv1.y+uv0.z);		
			half4 r = frac(sin(v*1e-3)*1e5);
			half r0 = lerp(lerp(r.x, r.y, f.x), lerp(r.z, r.w, f.x), f.y);
			
			r = frac(sin((v + uv1.z - uv0.z)*1e-3)*1e5);
			half r1 = lerp(lerp(r.x, r.y, f.x), lerp(r.z, r.w, f.x), f.y);
			
			return lerp(r0, r1, f.z)*2.-1.;
		}

		fixed4 frag (v2f i) : COLOR
		{
		

				half radius		= 0.24 ;
				half invRadius 	= 1.0/radius;
				
				half3 orange			= half3( 0.8, 0.55, 0.2 );
				
				half time		= _Time.x;

				half2 p 			= -0.5 + i.texcoord;
				
				half fade		= pow( length( 2.0 * p ), 0.5 );
				half fVal1		= 1.0 - fade;
				half fVal2		= 1.0 - fade;				
				
				half angle		= atan2( p.x, p.y )/6.2832;
				half dist		= length(p);
				half3 coord		= half3( angle, dist, time * 0.1 );
				
				half newTime1	= abs( snoise( coord + half3( 0.0, -time * ( 0.35 ), time * 0.015 ), 15.0 ) );
				half newTime2	= abs( snoise( coord + half3( 0.0, -time * ( 0.15 ), time * 0.015 ), 45.0 ) );
				half3 xCoord = half3( 0.0, -time, time * 0.2 ) + coord;
				
					fVal1 +=  0.125 * snoise( xCoord, ( 40 *  newTime1  ) );
					fVal2 +=  0.125 * snoise( xCoord, ( 100 *  (newTime1 +1.35)  ) );
					fVal1 +=  0.05 * snoise( xCoord, ( 90 *  newTime1  ) );
					fVal2 +=  0.05 * snoise( xCoord, ( 225 *  (newTime1 +1.35)  ) );
				
					half corona		= pow( fVal1 * max( 1.1 - fade, 0.0 ), 2.0 );
					corona				+= pow( fVal2 * max( 1.1 - fade, 0.0 ), 2.0 );
					corona				*= 30*(2.0 - newTime1);		
					half sunColor = (0.6 + 0.4*snoise(4*half3(i.texcoord + half2(time*0.5,0),time*0.5),16));
					half4 c = half4( sunColor, pow(max(sunColor,0.),2.), pow(max(sunColor,0.),3.), 1.0);
					c.rgb *=orange;
					
				
				if( dist < radius ){
					corona		*= pow( dist * invRadius, 24.0 );				
					float p = 5*(radius-dist)*invRadius;			
					c.rgb = lerp(0,c.rgb,p);	
				
					float starGlow	= min( max( 1.0 - dist, 0.0 ), 1.0 );			
					c.rgb += starGlow * orange;			
				
				}else{c=0;}
				
				if( dist > 1.3 * radius){
					half d = 1.45 * radius - dist;
					d *=invRadius*7.5; 
					corona = lerp(0,corona,d);
				}
				
				

				c.rgb	=   c.rgb + corona * orange;


			return c;
		}
		ENDCG 
	}
} 	

}


кто нить наподобие этого в cg перевести пробовал?
https://www.shadertoy.com/view/4slGD4
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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