Á°²ó¤«¤é¤Þ¤¿¹¹¿·¤Î»þ´Ö¤¬¤¢¤¤¤Æ¤·¤Þ¤¤¤Þ¤·¤¿¤¬ ¸«¤ËÍè¤Æ¤¯¤À¤µ¤Ã¤Æ¤ëÊý¡¹¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£
Çï¼ê¥³¥á¥ó¥È夤¤Æ¤ë¤Î¤Ç¤¹¤¬ ¤ªÊÖ»ö¤â½ÐÍè¤Ê¤¯¤Æ¿½¤·Ìõ¤Ê¤¤¤Ç¤¹¡£
Àè½µ °ìÆü¤Û¤É¶õ¤»þ´Ö¤¬¤¢¤Ã¤¿¤Î¤Ç¥¨¥Õ¥§¥¯¥ÈÍÑ¥·¥§¡¼¥À¥µ¥ó¥×¥ë¤òºîÀ®¤·¤Æ¤ß¤Þ¤·¤¿
¥Ù¡¼¥¹¤ÏPaticleAdditive.shader ¤Ç¤¹¤¬ÍÍ¡¹¤Ê¥·¥§¡¼¥À¤Ë¤â±þÍѤ¬¸ú¤¤½¤¦¤Ê¤â¤Î¤òµÍ¤á¹þ¤ó¤Ç¤ß¤¿´¶¤¸¤Ç¤¹
¥¨¥Õ¥§¥¯¥ÈºîÀ®»þ¤Ë ²èÌÌÆâ¤Ç²è¼ÁÄ´À°¤¬¤Ç¤¤ë¤ÈÈó¾ï¤Ëºî¶È¤¬´Êά²½¤Ç¤¤ë¤Î¤Ç¤½¤¦¤·¤¿µ¡Ç½¤¬¥á¥¤¥ó¤Ç¤¹¤Í
º£²ó¤Î¥·¥§¡¼¥À¡¼¤Ï¿µ¡Ç½¤ÊÈ¿ÌÌ ¼ã´³½Å¤¿¤á¤Ê¥³¡¼¥É¤À¤È»×¤¤¤Þ¤¹¤¬ ¤¢¤¯¤Þ¤Ç¥µ¥ó¥×¥ë¤Ê¤Î¤Ç
ÂçÎÌÉÁ²è¤¹¤ë¥Ñ¡¼¥Æ¥£¥¯¥ë¥¨¥Õ¥§¥¯¥È¤ä¥¹¥¯¥ê¡¼¥ó¤ËÂФ·¤ÆÂ礤ÊÌÌÀѤò¤È¤ëÍÑÅӤξì¹ç¤òÁÛÄꤷ¤Æ¤¤Þ¤»¤ó
¼ÂÁõ¤¹¤ë¤È¤¤Ë¤Ï ɬÍפ˱þ¤¸¤ÆÌ¤»ÈÍѤʵ¡Ç½¤ò¥³¥á¥ó¥È¥¢¥¦¥È¤¹¤ë¤Ê¤É¤·¤ÆºÇŬ²½¤ò¤·¤Æ¤¯¤À¤µ¤¤¡£
¥Ç¥Ð¥Ã¥°¤â¤¢¤Þ¤ê¤Ç¤¤Æ¤¤¤Ê¤¤¤Î¤Ç·¿ÉÕ¤±¤Î¤ª¤«¤·¤¤Éôʬ¤â¤¢¤ë¤«¤Ê¤È¤Ï»×¤¤¤Þ¤¹¤¬ ¤Ê¤Ë¤Ö¤ó»þ´Ö¤¬¤¿¤ê¤Ê¤¤¤Î¤Çµ¤¤Å¤¤¤¿Êý¤Ï¤´»ØÅ¦¤¯¤À¤µ¤¤¡£
¡ÊÍ×Ìó¡§ ¤Ê¤ë¤Ù¤¯¤¸¤ê¤¤Ç¤¬¤ó¤Ð¤Ã¤Æ¤ß¤Æ¤Û¤·¤¤¤Ê¤¡¡Ë
¢£"Particles/~MultiPurpose"
Shader "Particles/~MultiPurpose" {
Properties {
_TintColor ("Tint Color", Color) = (0.5,0.5,0.5,0.5)
_MainTex ("Particle Texture", 2D) = "white" {}
_InvFade ("Soft Particles Factor", Range(0.01,3.0)) = 1.0
_RotateSpeed ("RotateSpeed", Float) = 0.0
_ColorIndices ("ColorIndices Texture", 2D) = "white" {}
_SelectColorIndices("SelectColorIndices", Range(0.0,1.0)) = 1.0
_SliceColor ("Slice Color", Color) = (0.5,0.5,0.5,0.5)
_SliceGuide ("Slice Guide (RGB)", 2D) = "white" {}
_SliceEdge ("Slice Edge (RGB)", 2D) = "Gray" {}
_SliceAmount ("Slice Amount", Range(-1.2, 1.2)) = 0.5
_Flowmap("Flowmap", 2D) = "black" {}
_FlowAmount("Flow Amount", Range(-2.0, 2.0)) = 0.0
_MaskTex ("Mask Texture", 2D) = "white" {}
_VertexFlowTex ("VertexFlow Texture ", 2D) = "white" {}
_VertexFlowAmount ("VertexFlow Amount", Range(0, 10.0)) = 0.0
_CC_Bright("CC_Bright", Range(0.0,2.0)) = 0.5
_CC_Saturate("CC_Saturate", Range(0.0,1.0)) = 0.5
_CC_Contrast("CC_Contrast", Range(0.0,3.0)) = 1.2
_CC_Hue("CC_Hue", Range(-10.0,10.0)) = 0.5
_CC_Saturation("CC_Saturation", Range(0.0,1.0)) = 0.8
_CC_Luminosity("CC_Luminosity", Range(0.0,2.0)) = 0.6
}
Category {
Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
Blend One OneMinusSrcAlpha
ColorMask RGB
Cull Off Lighting Off ZWrite Off Fog { Color (0,0,0,1) }
BindChannels {
Bind "Color", color
Bind "Vertex", vertex
Bind "TexCoord", texcoord
}
// ---- Fragment program cards
SubShader {
Pass {
CGPROGRAM
#pragma glsl
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#pragma multi_compile_particles
#pragma target 4.0
#include "UnityCG.cginc"
sampler2D _MainTex;
float _RotateSpeed;
float4x4 pulsateMatrix ;
sampler2D _ColorIndices;
float _SelectColorIndices;
fixed4 _SliceColor ;
sampler2D _SliceGuide;
sampler2D _SliceEdge;
float _SliceAmount;
sampler2D _Flowmap;
float _FlowAmount;
sampler2D _MaskTex;
sampler2D _VertexFlowTex;
float4 _VertexFlowTex_ST;
float _VertexFlowAmount;
float _CC_Bright;
float _CC_Saturate;
float _CC_Contrast;
float _CC_Hue;
float _CC_Saturation;
float _CC_Luminosity;
fixed4 _TintColor;
struct appdata_t {
float4 vertex : POSITION;
fixed4 color : COLOR;
float2 texcoord : TEXCOORD0;
};
struct v2f {
float4 vertex : SV_POSITION;
fixed4 color : COLOR;
float2 texcoord : TEXCOORD0;
#ifdef SOFTPARTICLES_ON
float4 projPos : TEXCOORD1;
#endif
float2 texcoord_orig : TEXCOORD2;
};
float4 _MainTex_ST;
float2 Rotator(float2 UV)
{
float sine = sin(_Time*_RotateSpeed);
float cosine = cos(_Time*_RotateSpeed);
pulsateMatrix._m00 = pulsateMatrix._m11 = cosine;
pulsateMatrix._m10 = -sine;
pulsateMatrix._m01 = sine;
float4 tempUV = float4(UV.x-0.5,UV.y-0.5,0,0);
float4 temp = mul(pulsateMatrix,tempUV);
UV.x = temp.x+0.5;
UV.y = temp.y+0.5;
return UV;
}
float3 ContrastSaturationBrightness(float3 color, float brt, float sat, float con)
{
float AvgLumR = 0.5;
float AvgLumG = 0.5;
float AvgLumB = 0.5;
float3 LumCoeff = float3(0.2125, 0.7154, 0.0721);
float3 AvgLumin = float3(AvgLumR, AvgLumG, AvgLumB);
float3 brtColor = color * brt;
float intensityf = dot(brtColor, LumCoeff);
float3 intensity = float3(intensityf, intensityf, intensityf);
float3 satColor = lerp(intensity, brtColor, sat);
float3 conColor = lerp(AvgLumin, satColor, con);
return conColor;
}
float3 RGBToHSL(float3 color)
{
float3 hsl; // init to 0 to avoid warnings ? (and reverse if + remove first part)
float fmin = min(min(color.r, color.g), color.b); //Min. value of RGB
float fmax = max(max(color.r, color.g), color.b); //Max. value of RGB
float delta = fmax - fmin; //Delta RGB value
hsl.z = (fmax + fmin) / 2.0; // Luminance
if (delta == 0.0) //This is a gray, no chroma...
{
hsl.x = 0.0; // Hue
hsl.y = 0.0; // Saturation
}
else //Chromatic data...
{
if (hsl.z < 0.5)
hsl.y = delta / (fmax + fmin); // Saturation
else
hsl.y = delta / (2.0 - fmax - fmin); // Saturation
float deltaR = (((fmax - color.r) / 6.0) + (delta / 2.0)) / delta;
float deltaG = (((fmax - color.g) / 6.0) + (delta / 2.0)) / delta;
float deltaB = (((fmax - color.b) / 6.0) + (delta / 2.0)) / delta;
if (color.r == fmax )
hsl.x = deltaB - deltaG; // Hue
else if (color.g == fmax)
hsl.x = (1.0 / 3.0) + deltaR - deltaB; // Hue
else if (color.b == fmax)
hsl.x = (2.0 / 3.0) + deltaG - deltaR; // Hue
if (hsl.x < 0.0)
hsl.x += 1.0; // Hue
else if (hsl.x > 1.0)
hsl.x -= 1.0; // Hue
}
return hsl;
}
float HueToRGB(float f1, float f2, float hue)
{
if (hue < 0.0)
hue += 1.0;
else if (hue > 1.0)
hue -= 1.0;
float res;
if ((6.0 * hue) < 1.0)
res = f1 + (f2 - f1) * 6.0 * hue;
else if ((2.0 * hue) < 1.0)
res = f2;
else if ((3.0 * hue) < 2.0)
res = f1 + (f2 - f1) * ((2.0 / 3.0) - hue) * 6.0;
else
res = f1;
return res;
}
float3 HSLToRGB(float3 hsl)
{
float3 rgb;
if (hsl.y == 0.0)
rgb = float3(hsl.z, hsl.z, hsl.z); // Luminance
else
{
float f2;
if (hsl.z < 0.5)
f2 = hsl.z * (1.0 + hsl.y);
else
f2 = (hsl.z + hsl.y) - (hsl.y * hsl.z);
float f1 = 2.0 * hsl.z - f2;
rgb.r = HueToRGB(f1, f2, hsl.x + (1.0/3.0));
rgb.g = HueToRGB(f1, f2, hsl.x);
rgb.b= HueToRGB(f1, f2, hsl.x - (1.0/3.0));
}
return rgb;
}
v2f vert (appdata_t v)
{
v2f o;
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
#ifdef SOFTPARTICLES_ON
o.projPos = ComputeScreenPos (o.vertex);
COMPUTE_EYEDEPTH(o.projPos.z);
#endif
o.color = v.color;
o.texcoord_orig = Rotator( v.texcoord.xy);
o.texcoord = Rotator( v.texcoord);
o.texcoord = TRANSFORM_TEX( o.texcoord,_MainTex);
half2 VertexFlowUV¡¡= TRANSFORM_TEX( v.texcoord, _VertexFlowTex);
half3 VertexFlowVec = tex2Dlod(_VertexFlowTex, float4(VertexFlowUV.xy,0,0)).rgb * 2.0-1.0;
o.vertex.xyz += VertexFlowVec.xyz * _VertexFlowAmount;
return o;
}
sampler2D _CameraDepthTexture;
float _InvFade;
fixed4 frag (v2f i) : COLOR
{
#ifdef SOFTPARTICLES_ON
float sceneZ = LinearEyeDepth (UNITY_SAMPLE_DEPTH(
tex2Dproj(_CameraDepthTexture, UNITY_PROJ_COORD(i.projPos))));
float partZ = i.projPos.z;
float fade = saturate (_InvFade * (sceneZ-partZ));
i.color *= fade;
#endif
////FlowMap////////////////////////////////////////////////////////////
half2 FlowtexUV = tex2D( _Flowmap,i.texcoord_orig).rg * 2.0-1.0;
half2 texUV;
texUV.x =clamp( ( i.texcoord_orig.x *2.0 -1.0)+ (FlowtexUV.x *_FlowAmount ),-1,1);
texUV.y =clamp( ( i.texcoord_orig.y *2.0 -1.0)+ (FlowtexUV.y *_FlowAmount ),-1,1);
texUV.x =( texUV.x +1.0)/2.0*_MainTex_ST.x +_MainTex_ST.z;
texUV.y =( texUV.y +1.0)/2.0*_MainTex_ST.y +_MainTex_ST.w;
// Mask///////////////////////////////////////////////////////////////////////
fixed4 tex = tex2D(_MainTex, texUV);
float MaskVal;
half4 MaskColor=half4(1,1,1,1);
MaskColor = tex2D ( _MaskTex,i.texcoord_orig);
tex.a =MaskColor.a ;
fixed4 col;
// ColorIndices/////////////////////////////////////////////////////
half2 ColorIndicesUV ;
ColorIndicesUV.x = tex.r;
ColorIndicesUV.y =1.0-_SelectColorIndices ;
fixed4 ColorIndices = tex2D(_ColorIndices, ColorIndicesUV );
col.rgb =_TintColor.rgb * ColorIndices.rgb * tex.rgb * i.color.rgb * 2.0f;
// Dissolve with Alpha channel/////////////////////////////////////////
float AbsSliceAmount = abs(_SliceAmount );
clip(tex2D (_SliceGuide, i.texcoord_orig).rgb - AbsSliceAmount );
half2 SliceEdgeUV;
SliceEdgeUV.x = (tex2D (_SliceGuide, i.texcoord_orig).r -AbsSliceAmount );
SliceEdgeUV.y = 0.5;
fixed3 EdgeColor = _SliceColor* tex2D (_SliceEdge, SliceEdgeUV).rgb* 1.8;
if (_SliceAmount >0.1 )
col.rgb += EdgeColor.rgb;
else if (_SliceAmount < -0.1 )
col.rgb *= 1- EdgeColor.rgb*0.5;
// ColorCollect /////////////////////////////////////////////////////////////////////
col.rgb= ContrastSaturationBrightness(col.rgb, _CC_Bright, _CC_Saturate, _CC_Contrast);
float3 HSL = RGBToHSL(col.rgb);
HSL.r *= _CC_Hue;
HSL.g *= _CC_Saturation;
HSL.b *= _CC_Luminosity;
col.rgb = HSLToRGB(HSL);
//////////////////////////////////////////////////////////////////////////////////////
col.a = (1 - tex.a) * (_TintColor.a * i.color.a * 2.0f) ;
return col;
}
ENDCG
}
}
// ---- Dual texture cards
SubShader {
Pass {
SetTexture [_MainTex] {
constantColor [_TintColor]
combine constant * texture, constant * primary DOUBLE
}
SetTexture [_MainTex] {
combine previous * primary DOUBLE, one - texture * previous
}
}
}
// ---- Single texture cards (does not do color tint)
SubShader {
Pass {
SetTexture [_MainTex] {
combine texture * primary DOUBLE, one - texture * primary
}
}
}
}
}
¡üColor_Indices
¥«¥é¡¼¤ÎRÀ®Ê¬¤Î¿ôÃÍ £°~£±¤ËÂФ·¤Æ ¥Æ¥¯¥¹¥Á¥ã¤Î¥«¥é¡¼¤òUVÀ®Ê¬¤ÎUÊý¸þ¤Î¥«¥é¡¼¤ò³ä¤êÅö¤Æ¤Þ¤¹
¥Æ¥¯¥¹¥Á¥ã¥µ¥¤¥º¤É¤Î¤è¤¦¤Ê¤â¤Î¤ò»ÈÍѤ·¤Æ¤âÎɤ¤¤Î¤Ç¤¹¤¬ R¥Á¥ã¥ó¥Í¥ë¤Î¥«¥é¡¼¤Ï£²£µ£¶³¬Ä´¤Ê¤Î¤Ç ¥¤¥ó¥Ç¥Ã¥¯¥¹¥«¥é¡¼¥Æ¥¯¥¹¥Á¥ã¤ÎUÊý¸þ¤ÏºÇÂç256¤Þ¤Ç¤Ç¤¹
Ϣ³¤Ç¥«¥é¡¼¥¢¥Ë¥á¡¼¥·¥ç¥ó¤µ¤»¤¿¤¤¾ì¹ç¤ÏVÊý¸þ¤Ë¥«¥é¡¼¥Ð¡¼¤òʤ٤ÆUV¤Î¥¢¥Ë¥á¡¼¥·¥ç¥ó¤ò¤¹¤ë¤Ê¤É¤Î¤è¤¦¤Ë»ÈÍѤ·¤Þ¤¹
¥Æ¥¯¥¹¥Á¥ã¤Î¥¤¥ó¥Ý¡¼¥ÈÀßÄê¤ÇwrapMode ¤òClamp»ØÄꤷ¤Þ¤¹ Repeat¤Î¤Þ¤Þ¤Ç¤¹¤È¥Æ¥¯¥¹¥Á¥ã¤Îü¤Ç¥«¥é¡¼¤¬Î٤Υԥ¯¥»¥ë¡Ê¤¿¤È¤¨¤Ð¥Æ¥¯¥¹¥Á¥ã¤ÎUºÇÂç¤Î¤È¤UºÇ¾®¤Î¥«¥é¡¼¡Ë¤«¤é¿¯¿©¤µ¤ì¤Æ¤·¤Þ¤¤¤Þ¤¹¤Î¤ÇÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
¡üDissolve_Filter
Dissolve¥¢¥ë¥Õ¥¡Ãͤ泦¤Ë¥°¥é¥Ç¡¼¥·¥ç¥ó¤¬¤«¤«¤ë¤è¤¦¤Ë¤·¤Æ¤¢¤ê¤Þ¤¹ ¥¹¥é¥¤¥À¡¼¤òÃæ¿´¤«¤é±¦¤Ë¤º¤é¤¹¤È²Ã»» º¸¤Ë¤º¤é¤¹¤È¾è»»¤Ç¥°¥é¥Ç¡¼¥·¥ç¥ó¤Ï¥Æ¥¯¥¹¥Á¥ã¤Ç¥³¥ó¥È¥í¡¼¥ë¤·¤Æ¤¤¤Þ¤¹¡£ º¸Â¦¤¬³°¡Ê¥¢¥ë¥Õ¥¡ÃͤÎÄ㤤Êý¡Ë¤Î£±Dɽ¸½¤Ç¤¹¤Î¤ÇVÊý¸þ¤Î¥µ¥¤¥º¤Ï¤¤¤¯¤Ä¤Ç¤â¹½¤¤¤Þ¤»¤ó
clip(tex2D (_SliceGuide, i.texcoord_orig).rgb - AbsSliceAmount );
¥«¥Ã¥È¥¢¥¦¥È¥¢¥ë¥Õ¥¡¤Î ¤·¤¤¤ÃÍ»ØÄê¤ÏClip´Ø¿ô¤òÍѤ¤¤Æ¤¤¤Þ¤¹¤¬ ¥°¥é¥Õ¥£¥Ã¥¯¥«¡¼¥É¡Ê¥â¥Ð¥¤¥ë¤Ê¤É¡Ë¤Ë¤è¤Ã¤Æ¤Ï»ÈÍѤǤ¤Ê¤¤¤³¤È¤¬¤¢¤ë¤è¤¦¤Ç¤¹¡£ ¤½¤Î¾ì¹ç¤ÏAlphaTest ¤ò»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡£
Unity - ShaderLab syntax- Alpha testing
Êä¡ä
¥·¥§¡¼¥ÀÆâ¤ÇifÌ¿Îá¤ò»ÈÍѤ·¤Æ¤¤¤Þ¤¹¡£ ¥·¥§¡¼¥À¡¼¤Ç if ~else¹½Ê¸¤Ï»ÈÍѤǤ¤Þ¤¹¤¬ ifÌ¿Îá¤Ï¼Â¹Ô®ÅÙ¤¬¤¢¤Þ¤êÁ᤯¤¢¤ê¤Þ¤»¤ó¡£ ¡ÊÍýͳ¤Ï¡Ö SIMD ¡×¤Ç¸¡º÷¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡Ë
¥Ô¥¯¥»¥ë¥·¥§¡¼¥À¡Ê¥Õ¥é¥°¥á¥ó¥È¥·¥§¡¼¥À¡Ë¤Çʬ´ô½èÍý¤ò¤ª¤³¤Ê¤¦¤È¥¹¥¯¥ê¡¼¥óɽ¼¨¥Ô¥¯¥»¥ëʬ¤À¤±Ê¬´ôÌ¿Îá¤Î½èÍý¤ò¤¹¤ëɬÍפ¬¤¢¤ê¥·¥§¡¼¥À¼«ÂΤ¬¤È¤Æ¤â½Å¤¯¤Ê¤ê¤Þ¤¹¡£¤½¤Î¾ì¹çShadowGun¤Î¥µ¥ó¥×¥ë¤Ë¸«¤é¤ì¤ë¤è¤¦¤Ë ĺÅÀ¥·¥§¡¼¥À¤Ë·×»»Éôʬ¤ò°Üư¤·¤Æ¤·¤Þ¤¦ÊýË¡¤¬¤Þ¤º¤Ò¤È¤Ä¤ÎÊýË¡¤Ç¤¹¡£ ¡ÊĺÅÀ¥·¥§¡¼¥À¤ÏĺÅÀ¿ôʬ¤À¤±·×»»¤¬¹Ô¤ï¤ì¤Þ¤¹¤¬ ¥Ô¥¯¥»¥ë¥·¥§¡¼¥À¤Ï¥Ô¥¯¥»¥ë¿ôʬ¤À¤±¤Î·×»»Î̤ˤʤ뤿¤á¡Ë
¤½¤Î¤Û¤« ifÌ¿Îá¤ò ɸ½à¤Î¥·¥§¡¼¥À¡¼´Ø¿ô¤ÇÃÖ¤´¹¤¨¤Æ¤·¤Þ¤¦¤³¤È¤ÇºÇŬ²½¤ò¤Ï¤«¤ëÊýË¡¤â¤¢¤ê¤Þ¤¹
Î㣱¡Ë
¤³¤ì¢¤ò
| if (distance > _Value) { cfinal = c2; } else cfinal = c; |
¤³¤Î¢¤è¤¦¤Ë
| v = max(0,sign(distance - _Value)) cfinal = lerp(c, c2, v); |
Èæ³Ó¤·¤¿¤¤£²¤Ä¤ÎÃͤκ¹Ê¬¤òsign¤Ç¡ÊÉé or 0 or Àµ¡Ë ¤ò¡Ê¡Ý£± or £° or £±¡Ë¤ÎÃͤËÊÑ´¹¤·¤Æ
max¤Ç£°¤«£±¤ÎÃÍ¤Ë¤Þ¤È¤á¤Æ leap¡Êa, b, val¡Ë ¡Öval=0¤Î¤È¤a val=b¤Î¤È¤b ¤ò¤È¤ë´Ø¿ô¡× ¤ò»ÈÍѤ·¤Æ
Ãͤò³ä¤êÉÕ¤±¤Þ¤¹
¢¨ £ö¤Ï£°¤Þ¤¿¤Ï£±¤ò¤È¤ë¥Ö¡¼¥ê¥¢¥ó·¿ÁêÅö¤ÎÃͤò¤È¤ì¤Ð¤è¤¤¤Î¤Ç int¡¢uint·¿¤Ê¤É¤ÇÂåÍѤ·¤Þ¤¹
Î㣲¡Ë
|
fixed mixFactor = saturate(1 - ((distance - _ColorDecay) / _FadeDistance + 1) * 0.5); cfinal = lerp(c, c2, mixFactor);
|
Îã¤Î¤è¤¦¤Ë ·×»»¤ÎÃͤòsaturate()¤ò»ÈÍѤ·¤ÆÃͤò0~£±¤ÎÈϰϤˤ¿¤¿¤ó¤Ç¤·¤Þ¤¦¤è¤¦¤Ë¤¹¤ì¤Ð¤è¤¤¤«¤È»×¤¤¤Þ¤¹
shader if else performance - Unity Answers
SIMD - Wikipedia, the free encyclopedia
¡üFlowMap_Filter
FlowMap¤È¤¤¤¦¥Æ¥¯¥¹¥Á¥ã¤òÍѤ¤¤Æ¿åÌ̤ʤɤò¥¢¥Ë¥á¡¼¥·¥ç¥ó¤µ¤»¤ëÊýË¡¤¬¤¢¤ê¤Þ¤¹¡£
¹Í¤¨Êý¤ÏNormalMap¤È¾¯¤·»÷¤Æ¤¤¤Þ¤¹¤¬ NormalMap¤¬¥«¥é¡¼¥Ç¡¼¥¿¤ò»ÈÍѤ·¤ÆË¡Àþ¤Î·¹¤¤ò
Í¿¤¨¤ë¤Î¤ËÂФ·¤ÆFlowMap¤Ï¥Æ¥¯¥¹¥Á¥ãUVºÂɸ¤ËÊѰ̤òÍ¿¤¨¤Þ¤¹¡£
¾Ü¤·¤¯¤Ï¥ê¥ó¥¯Àè¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤
https://www.dropbox.com/s/ii2x077vj64lyhl/Water%20Flow%20For%20UDK.pdf
|
float2 flowmap = tex2D( _FlowMap, uv ).rg * 2.0 - 1.0; ¥Æ¥¯¥¹¥Á¥ã¤Î¥¢¥ó¥Ñ¥Ã¥¯²½¤Ï¤³¤Î¤è¤¦¤Ê¼°¤Ç¹Ô¤ï¤ì¤Þ¤¹ flowmap¥Æ¥¯¥¹¥Á¥ã¤«¤é£ò¤È£ç¤ÎÀ®Ê¬¤òÆÉ¤ß¤À¤·¤Æ ¥«¥é¡¼¤ÎÃÍ0~£±¤ÎÈϰϤò -1~1¤Ë³ÈÄ¥¤·¤Æ¤¤¤Þ¤¹¡£ ¥Æ¥¯¥¹¥Á¥ãÃæ¿´¤«¤é¥Ù¥¯¥È¥ëUVÊý¸þ¤Ë-1 ~ +1 ¤È¤Ê¤ë¤è¤¦¤Ë²Ã¹©¤·¤¿¤Û¤¦¤¬»È¤¤¾¡¼ê¤¬Îɤ¤¤Î¤Ç
¤³¤Î¤è¤¦¤Ê·Á¤Î¼°¡ÊÆÍÁ³¿ôÃͤòÁý¸º¤·»Ï¤á¤ë¡Ë¤¬½Ð¤Æ¤¤¿¤é ÃͤòÄ´À°¤·¤Æ¤¤¤ëÉôʬ¤À¤È¹Í¤¨¤Æ¤¤¤¤¤«¤È»×¤¤¤Þ¤¹¡£ ¿ʬ
¤½¤Î¾ ¿åÌ̤òɽ¸½¤¹¤ë¾ì¹çFlowMap¤ò»ÈÍѤ·¤ÆNormalMap¤Î¹çÀ®¤Ê¤É²Ã¹©¤ò¤ª¤³¤Ê¤¦¾ì¹ç¤Ë¤Ï°Ê²¼¤Î¤è¤¦¤Êµ½Ò ALGOholic ? A Coder's Blog - Another Flow Field Editor Update
phase0 = cycleOffset * 0.5 + FlowOffset0; phase1 = cycleOffset * 0.5 + FlowOffset1; float3 norm0 = tex2D(NormTex0, (Uv * ¥¿¥¤¥ê¥ó¥°¿ô) + flowmap * phase0); float3 norm1 = tex2D(NormTex1, (Uv * ¥¿¥¤¥ê¥ó¥°¿ô) + flowmap * phase1);
º¸Â¦FlowMap¤ò»ÈÍѤ·¤Æ Leap0»þ¡Ê¥Æ¥¯¥¹¥Á¥ã¤Þ¤Þ¡Ë¡§Leap1¡Ê¥ª¥Õ¥»¥Ã¥ÈÊѰ̣±£°£°¡ó¡Ë |
¡üVertexModify
º£²ó¤Ï¥Æ¥¯¥¹¥Á¥ã¤ÎÃͤò»ÈÍѤ·¤Æ¥á¥Ã¥·¥åĺÅÀ¤ò¥¢¥Ë¥á¡¼¥·¥ç¥ó¤µ¤»¤Æ¤¤¤Þ¤¹
ĺÅÀ¤Î¥¢¥Ë¥á¡¼¥·¥ç¥ó¤òÀ©¸æ¤·¤Æ¤¤¤ë¤Î¤Ï¤³¤Î¹Ô¤Ç¤¹
|
TRANSFORM_TEX ¤Ï¥Æ¥¯¥¹¥Á¥ãUV¤ÎÃͤò _VertexFlowTex_ST ¤ÇÀßÄꤵ¤ì¤ëÃͤËUV¥¿¥¤¥ê¥ó¥°ÃͤÈ
¥ª¥Õ¥»¥Ã¥È¤òºÆ·×»»¤µ¤»¤ëUnity¤Î¥Þ¥¯¥í´Ø¿ô¤Ç¤¹¡£
¥·¥§¡¼¥À¤Ë float4 ¡É¥Æ¥¯¥¹¥Á¥ã̾¡É_ST ¤Èµ½Ò¤¹¤ë¤³¤È¤Ç¥·¥§¡¼¥À¼Â¹Ô»þ¤ËÃͤ¬µ¢¤Ã¤Æ¤¤Þ¤¹
¥Æ¥¯¥¹¥Á¥ã¥¹¥í¥Ã¥È¤È µ¢¤Ã¤Æ¤¯¤ëÃͤδط¸¤Ï²¼¿Þ¤Î¤È¤ª¤ê¤Ç¤¹
¡É¥Æ¥¯¥¹¥Á¥ã̾¡É_ST .xy = TilingÃÍ UVÊý¸þ¤Î¥¿¥¤¥ê¥ó¥°¿ô
¡É¥Æ¥¯¥¹¥Á¥ã̾¡É_ST .wz = OffsetÃÍ UVÊý¸þ¤Î¥ª¥Õ¥»¥Ã¥ÈÃÍ
| UV.xy = TRANSFORM_TEX ( v.texcoord, _MainTex ); |
¤³¤ì¤ò¥Þ¥¯¥í¤ò»ÈÍѤ·¤Ê¤¤¤Çµ½Ò¤¹¤ë¤È
| UV.x = v.texcoord.x * _MainTex_ST.x +_MainTex_ST.z;
UV.y = v.texcoord.y * _MainTex_ST.y +_MainTex_ST.w; |
¤È¤Ê¤ê¤Þ¤¹¡£
vertex¥·¥§¡¼¥ÀÆâ¤Ç¥Æ¥¯¥¹¥Á¥ã¤ò»²¾È¤¹¤ë¾ì¹ç¤Ï tex2D ¤ÎÂå¤ï¤ê¤Ë tex2Dlod ¤ò»ÈÍѤ·¤Þ¤¹¡£
tex2Dlod¡Ê ¥Æ¥¯¥¹¥Á¥ã, float4¡ÊUÃÍ, VÃÍ, 0, w ¡á¡Ê lod ÃͤλØÄ꣰~£· ¡Ë¡Ë
¤³¤ì¤Ï ¥Æ¥¯¥¹¥Á¥ãlod¤ÎÃͤ¬depthÃ͡ʥ«¥á¥é¤«¤é¤Îµ÷Î¥¡Ë¤Ë¤è¤Ã¤Æ·èÄꤵ¤ì¤ë¤¿¤á depthÃͤ¬vertex¥·¥§¡¼¥À¤Ç¥á¥Ã¥·¥å¤Î¥½¡¼¥È¤¬²ò·è¤µ¤ì¤ÆPixel¥·¥§¡¼¥À¤Ë¥Ç¡¼¥¿¤¬ÅϤë¤È¤¤Ë·×»»¤¬¹Ô¤ï¤ì¤ë¤Î¤Ç vertex¥·¥§¡¼¥ÀÆâ¤Ç¤Ïlod¤Î¼«Æ°³ä¤êÅö¤Æ¤¬½ÐÍè¤Ê¤¯¤Ê¤ê ľÀÜlodÃͤò»ØÄꤷ¤Æ¤¢¤²¤ëɬÍפ¬¤¢¤ë¤«¤é¤Ç¤¹¡£
¢¨ Tex2Dlod´Ø¿ô¤Ï¤È¤Æ¤âÌòΩ¤Ä¤Î¤Çº£¸å¤â¤È¤ê¤¢¤²¤Æ¤¤¤¯Í½Äê¡£
ºÇ¸å¤Ë ĺÅÀ¥Ç¡¼¥¿£ø£ù£ú¤Ë¥«¥é¡¼¥Ç¡¼¥¿¤ò-1~+1ÈϰϤ˲ù©¤·¤¿¤â¤Î¤ò²Ã»»¤·¤Þ¤¹ ÊѲ½Î¨¤ò¥³¥ó¥È¥í¡¼¥ë¤Ç¤¤ë¤è¤¦¤Ë
_VertexFlowAmount ¤È¤·¤Æ³Ý¤±¤Æ¤¢¤²¤Þ¤¹¡£
o.vertex.xyz += VertexFlowVec.xyz * _VertexFlowAmount;
ĺÅÀ¥¢¥Ë¥á¡¼¥·¥ç¥ó¤È¤¤¤¦¤È»°³Ñ´Ø¿ô¤ò»ÈÍѤ·¤¿¤â¤Î¤¬Â¿¤¤¤Ç¤¹¤¬ ¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿¤ò»ÈÍѤ·¤¿¥¢¥Ë¥á¡¼¥·¥ç¥ó¤Ï
¥Æ¥¯¥¹¥Á¥ã¥Ç¡¼¥¿¤ò¸Æ¤Ó½Ð¤·¤Æ´Êñ¤Ê·×»»¤ò¹Ô¤¦¤À¤±¤Ê¤Î¤Ç½Å¤¿¤¤»°³Ñ´Ø¿ô¤Û¤ÉÉé²Ù¤â¤Ê¤¯Ê£»¨¤Ê¥¢¥Ë¥á¡¼¥·¥ç¥ó¤â¸«¤¿Ìܤǥ³¥ó¥È¥í¡¼¥ë¤Ç¤¤ë¤Î¤Ç±þÍѤ¬¤¢¤ê¤½¤¦¤Ç¤¹¡£ ¤Û¤«¤Ë¤Ï¥¹¥¯¥ê¥×¥È¤ËÉÔ´·¤ì¤Ê¥Ç¥¶¥¤¥Ê¡¼¤Ë¤È¤Ã¤Æ¤â¥Æ¥¯¥¹¥Á¥ã¤òÆþ¤ìÂØ¤¨¤ë¤À¤±¤Ç°·¤¤¤ä¤¹¤¤¤È¤¤¤¦¥á¥ê¥Ã¥È¤â¤¢¤ë¤È»×¤¤¤Þ¤¹¡£
¡üCOLOR_Collect_Filter
¤ª¤Þ¤±µ¡Ç½ ¿§Ä´À°µ¡Ç½¤Ç¤¹ ¥Í¥Ã¥È¤Ç¸ø³«¤µ¤ì¤Æ¤¤¤¿¥Õ¥©¥È¥·¥ç¥Ã¥×¤Îµ¡Ç½¤ò¥·¥§¡¼¥À¤Çµ½Ò¤·¤¿´Ø¿ô¤ò
¤½¤Î¤Þ¤Þ»ÈÍѤ·¤Æ¤¢¤ê¤Þ¤¹¡£
¤½¤Î¾¥«¥é¡¼¥³¥ó¥È¥í¡¼¥ë¤Î¥·¥§¡¼¥À¡¼¥µ¥ó¥×¥ë¤ÏnVidia¤Î¸ø¼°¥µ¥¤¥È¤ò»²¾È¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£
¡ÖBright ¤È Luminosity¡×¡ÖSaturate ¤È Saturation¡×¤ÎÊÑ¿ô¤¬¥À¥Ö¤Ã¤Æ¤¤¤ë¤Î¤Ç¤¹¤¬ ¤É¤Á¤é¤«ÊÒÊý¤·¤«¼ÂÁõ¤·¤Ê¤¤¤È ¥³¥ó¥È¥í¡¼¥ë¤¬Æñ¤·¤«¤Ã¤¿¤¿¤á ξÊýµ½Ò¤·¤Æ¤¢¤ê¤Þ¤¹¡£¡ÊÄ´À°¤Ë¤¢¤Þ¤ê»þ´Ö¤â³Ý¤±¤¿¤¯¤Ê¤«¤Ã¤¿¤â¤Î¤Ç..¡Ë
Bright ¤È Contrast ¤Ï¾å¤²²á¤®¤ë¤È¿§Èô¤Ó¤·¤Þ¤¹¤Î¤Ç Saturate¤ò²¼¤²¤Æ¥Ð¥é¥ó¥¹¤òÀ°¤¨¤Æ¤ë¤ÈÎɤ¤¤è¤¦¤Êµ¤¤¬¤·¤Þ¤¹¡£ Contrast¤Ï¥¢¥ë¥Õ¥¡Éôʬ¤Î¥«¥é¡¼¤¬»ý¤Á¾å¤¬¤ê¤¹¤®¤òËɤ°¤Î¤Ë͸ú¤Ç¤¹¡£
¥«¥é¡¼¥»¡¼¥ÕŪ¤Ê°ÂÁ´ÁõÃÖ¤ò¤Ä¤±¤Æ¤âÎɤ¤¤Î¤Ç¤¹¤¬ ¥¨¥Ç¥£¥¿¤Ë¤¯¤»¤¬¤¢¤ë¤È»È¤¤¤Ë¤¯¤¯¤Ê¤ë¤Î¤Ç¼«Í³¤Ë¥«¥¹¥¿¥Þ¥¤¥º¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£
CC_Bright :ÌÀÅÙ CC_Saturate :ºÌÅÙ CC_Contrast :¥³¥ó¥È¥é¥¹¥È
CC_Hue :¿§Áê CC_Saturation :ºÌÅÙ£² CC_Luminosity :ÌÀÅÙ£²
¢£¥Æ¥¯¥¹¥Á¥ã¤Î¥¢¥Ë¥á¡¼¥·¥ç¥ó
²áµîµ»ö¤òÆÉ¤ó¤Ç¤¤¤¿¤À¤¯¤«¥ê¥ó¥¯Àè¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤
Animating Tiled texture - Unify Community Wiki
¢£¥·¥§¡¼¥À¡¼¤Ë´Ø¤¹¤ë¤½¤Î¤Û¤«¤Î¤ªÏÃ
¢£Unity Shaders and Effects Cookbook [KindleÈÇ]
Kenneth Lammers (Ãø)
³Æ½ê¤ÇÈó¾ï¤Ëɾ²Á¤Î¹â¤¤Ëܽñ ±Ñ¸ìÈǤǤ¹¤±¤É¥³¡¼¥ÉÉôʬ¤À¤±¤Ê¤¬¤á¤Æ¤â ¤ï¤ê¤Èʬ¤«¤ê¤ä¤¹¤¤¤Î¤Ç¤Ï¤Ê¤¤¤«¤Ê¤È»×¤¤¤Þ¤·¤¿ ¥ê¥ó¥¯Àè¢ ¤ÎWiki¤â¹ç¤ï¤»¤ÆÆÉ¤à¤È Íý²ò¤¬¿¼¤Þ¤ë¤«¤â¤·¤ì¤Þ¤»¤ó
Cg Programming-Unity - Wikibooks, open books for an open world
¤è¤¯¥ê¥ó¥¯¤µ¤ì¤Æ¤¤¤ëGL¥Ð¡¼¥¸¥ç¥ó¤Ç¤Ï¤Ê¤¯CG¥Ð¡¼¥¸¥ç¥ó¤Î¤Û¤¦¤Ç¤¹¤Í¡££³D¥½¥Õ¥È¤Ç³«È¯¤¹¤ë¾ì¹çºÇ¶á¤À¤ÈCGFX¤ËÂбþ¤·¤Æ¤¤¤ë¤³¤È¤¬Â¿¤¤¤Î¤Ç CGFX¤Ë»÷¤¿CG¤Ç¥·¥§¡¼¥À¡¼¤ò½ñ¤¤¤Æ¤ª¤¯¤È¤¤¤í¤¤¤íĽ¤ê¤Þ¤¹¡£
¢£Shader Forge - A visual, node-based shader editor plugin for Unity
Shader Forge - A visual, node-based shader editor
¸½ºß³«È¯Ãæ¤é¤·¤ ¥Õ¥ê¡¼¡©¤Î¥Î¡¼¥É¥Ù¡¼¥¹¥·¥§¡¼¥À¡¼¥¨¥Ç¥£¥¿¡¼¡£ ¥í¡¼¥É¥Þ¥Ã¥×¤ò¸«¤ë¤È¤Þ¤À¤³¤ì¤«¤é¤Î¤è¤¦¤Ç¤¹¤¬UIɽ¼¨¤¬UDK¤Î¥Þ¥Æ¥ê¥¢¥ë¥¨¥Ç¥£¥¿¡¼¤Ë»÷¤¿´¶¤¸¤Ç¥¢¥¤¥³¥óɽ¼¨¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤Î¤Ï¤ï¤«¤ê¤ä¤¹¤¯¤ÆGood¤Ç¤¹¡£
¤¿¤À¸«¤¿ÌܤδÊÊØ¤µ¤È΢ʢ¤Ë ¥Î¡¼¥É¥Ù¡¼¥¹·¿¤Ã¤ÆÊ£»¨¤Ê¥·¥§¡¼¥À¤¬ºî¤ê¤Ë¤¯¤¤¤ó¤Ç¤¹¤è¤Í ÅǤ¤¤Æ¤¯¤ë¥³¡¼¥É¤ò¼ÂÁõ¤Ç¤¤ë¤Þ¤ÇºÇŬ²½¤¹¤ë¤Î¤¬°ì¶ìÏ«¤À¤Ã¤¿¤ê¤·¤Æ º£¤Î¤È¤³¤í¥Æ¥¥¹¥È¥¨¥Ç¥£¥¿¤·¤«¤Ä¤«¤Ã¤Æ¤Ê¤«¤Ã¤¿¤ê£÷ ¤¤¤¤¤â¤Î¤Ë¤Ê¤ë¤È¤¤¤¤¤Ê


¢£»²¾È¥ê¥ó¥¯¤Ê¤É
View Profile- TheJamsh - Epic Games Forums
How Do You Make a Flow Map- [Archive] - Polycount Forum
Flow Map Painting Script - Early Alpha - Polycount Forum




















