기술면(CG)/3D프로그램

유니티 쉐이더 기초13

치비씨 2025. 2. 7. 19:24

흐르는 물

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