Cubemap Reflection 넣기......
이번 예제파일을 살짝 변경했다 좀더 쎄게~ 강하게~찐하게~ ㅋㅋ
worldRefl 라는 내장 함수를 사용해 간단히 구현한다.... 정말 번거롭지 않게 만들어 놓은 서피스 셰이더....
Shader "DY/WordRef1"{
Properties{
_MainTex("Texture",2D) = "white"{}
_Cube("CubeMap",CUBE) = ""{}
}
SubShader{
Tags{"RenderType"="Opaque"}
CGPROGRAM
#pragma surface surf Lambert
struct Input{
float2 uv_MainTex;
float3 worldRefl;
};
//worldRef1 내장 함수 선언 reflect 내장함수와 같은 의미 인듯 하다...
sampler2D _MainTex;
samplerCUBE _Cube;
float3 texcol;
//심심해서 조금 바꿔보려고 변수하나 추가했다
void surf(Input IN, inout SurfaceOutput o){
texcol = tex2D(_MainTex,IN.uv_MainTex).rgb;
texcol*=texcol;
//텍스쳐 끼리 곱해 멀티플라이 효과를 준당
o.Albedo = texcol;
o.Emission = texCUBE(_Cube,IN.worldRefl).rgb;
}
//Emission 에 큐브를 적용한다 이 Emission을 넣으면 전체적으로 밝아지게됨 빛나보이게하려고 그런거 같다....
ENDCG
}
Fallback"Diffuse"
}
Cubemap Reflection 에 Normal Map 추가 하기.....
이유는 잘 모르겟으나...(뒤져봐야겠지..)INTERNAL_DATA 는 입력 구조체가 필요하고, 픽셀당 반사벡터에 필요한 내장 함수인 WorldReflectionVector(,) 를 넣어야한다~
Shader "DY/WordRef1_bump" {
Properties{
_MainTex("Texture",2D) = "white"{}
_Cube("CubeMap",CUBE) = ""{}
_BumpMap ("Bumpmap", 2D) = "bump" {}
}
SubShader{
Tags{"RenderType"="Opaque"}
CGPROGRAM
#pragma surface surf Lambert
struct Input{
float2 uv_MainTex;
float3 worldRefl;
float2 uv_BumpMap;
INTERNAL_DATA
};
// INTERNAL_DATA 구조체 추가~ 뭐하는 넘일까...
sampler2D _MainTex;
samplerCUBE _Cube;
sampler2D _BumpMap;
float3 texcol;
void surf(Input IN, inout SurfaceOutput o){
texcol = tex2D(_MainTex,IN.uv_MainTex).rgb;
texcol*=texcol;
o.Albedo = texcol;
o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap));
o.Emission = texCUBE (_Cube, WorldReflectionVector (IN, o.Normal)).rgb;
}
//Emission에 WorldReflectionVector 내장 함수를 넣었다....
//이건 픽셀당 반사 백터를 구하기 위한이란다 그러니까 노멀이 들어가서 필요하게된 변수 라는거지
ENDCG
}
Fallback"Diffuse"
}
Slices via World Space Position 구현하기....
딱히 쓸일이 있을진 모르겠다.....
clip() Cg/HLSL 함수를 사용해서 구현하고 월드 좌표는 내장 함수인 worldPos 변수를 사용한다......
Shader"DY/Slices"{
Properties{
_MainTex("Texture",2D)="white"{}
_BumpMap("BumpMap",2D)="Bump"{}
}
SubShader{
Tags{"RenderType"="Opaque"}
Cull Off
//메쉬의 뒷면을 살려라!!~~ 라는것
CGPROGRAM
#pragma surface surf Lambert
struct Input{
float2 uv_MainTex;
float2 uv_BumpMap;
float3 worldPos;
};
sampler2D _MainTex;
sampler2D _BumpMap;
void surf (Input IN, inout SurfaceOutput o){
clip (frac((IN.worldPos.y+IN.worldPos.z*0.1)*5)-0.5);
//함수와 월드 좌표를 이용해 메쉬를 잘라진 것처럼 랜더링 걸어 버린다.
o.Albedo = tex2D(_MainTex, IN.uv_MainTex).rgb;
o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
}
ENDCG
}
Fallback"Diffuse"
}
'Unity공부 > Unity Surface Shader 공부' 카테고리의 다른 글
unity surface shader 공부 6 - surface shader custom Light 예제 따라하기 (0) | 2012.08.24 |
---|---|
unity surface shader 공부 5 - surface shader 예제 따라하기 (0) | 2012.08.21 |
unity surface shader 공부 4 - surface shader 예제 따라하기 (0) | 2012.08.20 |
unity surface shader 공부 2 - surface shader 예제 따라하기 (0) | 2012.07.27 |
unity surface shader 공부 1 - surface shader 예제 따라하기 (0) | 2012.07.26 |