겜브리오 쉐이더 공부중

//쌩 기초 공부중.

//————————————————————–
float4x4 WorldViewProj : WORLDVIEWPROJECTION;
//————————————————————–
texture BaseMap // Basemap 이라는 texture 변수를 만들었다.
<
    string NTM = “Base”; //메터리얼 에디터에 있는 Base 부분을 사용하기로 결정.

;
sampler2D BaseSampler = sampler_state 
//BaseSampler 라고 하는 [스포이드=칼라 캐쳐]를 생성 = 샘플러 스테이트를 참고
{
   Texture = (BaseMap);
   ADDRESSU = WRAP;
   ADDRESSV = WRAP;
   MAGFILTER = LINEAR;
   MINFILTER = LINEAR;
   MIPFILTER = LINEAR;
};

//샘플링 하는 방식 [스테이츠]
//텍스쳐는 베이스맵을 쓰고, UV는 Wrap (타일) 방식을 사용한다. 나머지는 그냥 리니어.

//————————————————————–
texture DarkMap // 이번엔 다크맵을 추가해 보자.
<
    string NTM = “Dark”;

;
sampler2D DarkSampler = sampler_state
// 역시나 다크맵에 대한 샘플러를 만들었다. 한동안은 샘플러 2D만 쓰는걸로 외우자.
{
   Texture = (DarkMap);
   ADDRESSU = WRAP;
   ADDRESSV = WRAP;
   MAGFILTER = LINEAR;
   MINFILTER = LINEAR;
   MIPFILTER = LINEAR;
};
//다크맵도 동일하다.
//————————————————————–
void VS(
 in float4 iPos  : POSITION,
 in float4 iColor  : COLOR0,
 in float2 iBaseCoord : TEXCOORD0,
 out float4 oPos  : POSITION,
 out float4 oColor  : COLOR0,
 out float2 oBaseCoord : TEXCOORD0
)
// 버텍스 쉐이더 설정이다.
// position 은 xyz지만 xyzw 를 쓰는 좌표계이다. 그래서 float4.
// 칼라는 rgba
// 베이스맵의 좌표계는 x 와 y 뿐.
// 이번엔 출력이다. 포지션과 칼라와 텍스쳐가 동일하게 출력된다.
{
 oPos = mul( iPos, WorldViewProj );
 
 oColor = iColor;
 
 oBaseCoord = iBaseCoord;
}
//출력 연산을 하는 곳이다.
//포지션 계산법은 멀티 - 곱하기 (행렬의 곱하기 처리) [x,y,z,w][a11, a12, a13, a14]
//                                                                                      [a21, a22,a23 ….]
//칼라는 인풋과 아웃풋이 동일하다. 
//좌표계도 동일하게 출력해 준다. 
//————————————————————–
void PS(
 in float4 iColor  : COLOR0,
 in float2 iBaseCoord : TEXCOORD0,
 out float4 oColor  : COLOR)
{
 float4 BaseColor = tex2D( BaseSampler, iBaseCoord );
 float4 DarkColor = tex2D( DarkSampler, iBaseCoord );
 oColor.rgb = BaseColor.rgb * DarkColor.rgb;
 oColor.a = BaseColor.a;
}
//픽셀 쉐이더 설정이다.
//픽셀 쉐이더에서는 칼라와 좌표가 입력되고, 합쳐져서 칼라로 출력된다.
//최종 출력은 oColor 로만 출력하면 된다. {oColor = tex2D(BaseSampler, iBaseCoord) } 라고만 한다면
//최종 출력에 Basemap만 출력되나,
//먼저 Float4 짜리 Basecolor 와 Darkcolor 를 따로 생성하여 베이스맵과 다크맵을 각각 집어 넣고,
//최종 출력은 BaseColor.rgb -베이스칼라의 rgb 와 DarkColor.rgb 를 곱하여서, 베이스맵과 다크맵을 멀티플라이 연산을 하였다.
//때문에 다크맵이 베이스맵에 어둡게 합해질 수 있는 것.
//하지만 Float4 는 rgba이기때문에 rgb만 계산해서는 안되는데,
//여기다가 oColor.a(출력알파) = (는) BaseColor.a(베이스 칼라의 알파를 따와서 사용한다) 라는 구문을 덧붙여 주어서
//최종적으로는 oColor의 RGBA 가 모두 출력되게 되었다. 
//————————————————————–
technique JPCorp
<
 bool UsesNiRenderState = true;
 bool UsesNILightState = true;

{
 pass P0
 {
  VertexShader = compile vs_1_1 VS();
  PixelShader = compile ps_2_0 PS();
 }
}

Hugo로 만듦
JimmyStack 테마 사용 중