흐르는 물
Shader "Custom/cube"
{
Properties
{
_Bumpmap("노멀",2D) = "bump"{}
_Cube("큐브", Cube) = ""{}
_SPColor("빛컬러", color)=(1,1,1,1)
_SPPower("빛세기", Range(50,300))=150
_SPMulti("빛곱하기",Range(1,10))=3
_WaveH("파도높이", Range(0, 1)) =0.1
_WaveL("파도넓이", Range(5, 20)) = 12
_WaveT("파도속도", Range(0,10))=1
}
SubShader
{
Tags { "RenderType" = "Transparent" "Queue"="Transparent"}
CGPROGRAM
#pragma surface surf WaterSpecular alpha:fade vertex:vert
samplerCUBE _Cube;
sampler2D _Bumpmap;
float4 _SPColor;
float _SPPower;
float _SPMulti;
float _WaveH;
float _WaveL;
float _WaveT;
void vert(inout appdata_full v) {
//버텍스를 움직여주는 명령
float movement;
movement = sin(abs((v.texcoord.x * 2 - 1)*_WaveL) + _Time.y*_WaveT)*_WaveH;
movement += sin(abs((v.texcoord.y * 2 - 1)*_WaveL) + _Time.y*_WaveT)*_WaveH;
v.vertex.y += movement / 2;
//무브먼트라는 변수는 버텍스의 넘버링의 X좌표에 2를 곱한 뒤 1을 뺀다. 그 후에 커스텀할수있는 물의 넓이를 곱해주고, 커스텀할수있는 물의 속도에 맞춰 애니메이션을 발동하게 해준 다음 그 싸인값에 물높이를 곱해줌
그리고 Y 좌표에 곱한것과 더해서 2로 나누어준 버텍스
}
struct Input
{
float2 uv_Bumpmap;
float3 worldRefl;
float3 viewDir;
INTERNAL_DATA
};
void surf (Input IN, inout SurfaceOutput o)
{
float3 normal1 = UnpackNormal(tex2D(_Bumpmap, IN.uv_Bumpmap + _Time.x*0.1));
float3 normal2 = UnpackNormal(tex2D(_Bumpmap, IN.uv_Bumpmap + _Time.x*0.1));
o.Normal = (normal1 +normal2)/2;
//한개의 텍스쳐로 두개의 노멀을 교차해주어 흐르는 듯한 효과를 줌
float3 refcolor = texCUBE(_Cube, WorldReflectionVector(IN, o.Normal));
//노멀에 영향받는 큐브맵 적용
float rim = saturate(dot(o.Normal, IN.viewDir));
rim = pow(1 - rim, 1.5);
o.Emission = refcolor * rim;
o.Alpha = saturate(rim + 0.5);
//림라이트 공식을 이용해 가까이서 보이는 것은 투명하게
}
float4 LightingWaterSpecular(SurfaceOutput s, float3 lightDir, float3 viewDir, float atten) {
float3 H = normalize(lightDir + viewDir);
float spec = saturate(dot(H, s.Normal));
spec = pow(spec, _SPPower);
float4 finalColor;
finalColor.rgb = spec * _SPColor.rgb *_SPMulti;
finalColor.a = s.Alpha +spec;
return finalColor;
}
ENDCG
}
FallBack "Legacy Shaders/Transparent/Vertexlit"
}
'기술면(CG) > 3D프로그램' 카테고리의 다른 글
유니티 쉐이더 기초14 (0) | 2025.02.07 |
---|---|
유니티 쉐이더 기초 12 (0) | 2025.02.07 |
유니티 쉐이더 기초 11 (0) | 2025.02.07 |
유니티쉐이더 기초 10 (0) | 2025.02.07 |
FBX를 Biped로 만들어주는 스크립트 (0) | 2025.02.07 |