Featured image of post 셰이더 프로그래밍 기본공부 5

셰이더 프로그래밍 기본공부 5

… 여전히 스페큘러에서 진도 안나감.

일단 뷰 벡터까지 빼가지고 제대로 계산을 하긴 했는데,
이게 맞나 모르겠다.

퐁 반사랑 비교해 가면서 구해보고 싶은데, 이건 이모모군이 돌아와야 물어보지..

float4x4 World : WORLD ;
float4x4 View : VIEW ;
float4x4 Projection : PROJECTION ;
float4x4 WorldViewProj : WORLDVIEWPROJ ;
float4x4 WorldView : WORLDVIEW ;

//라이트 밝기
float4 I_a = {0.1f, 0.1f, 0.1f, 1.0f};//엠비언트
float4 I_d = {1.0f, 1.0f, 1.0f, 1.0f};//디퓨즈
float4 I_s = {1.0f, 1.0f, 1.0f, 1.0f};//스페큘러

float3 lightDir : Direction
<
 string UIName = “라이트 디렉션”;
 string Object = “TargetLight”;

;

// 재질 반사색
float4 k_a
<
 string UIName = “엠비언트”;

;

float4 k_d
<
 string UIName = “디퓨즈”;

;

float4 k_s
<
 string UIName = “스페큘러”;

;

int n
<
 string UIName = “스페큘러 파워”;
 string UItype = “IntSpinner”;
 float UIMin = 0.0f;
 float UIMax = 50.0f;

;

void VS
(
 in float4 iPos : POSITION ,
 in float3 iNormal : NORMAL,
 //in float3 itex : TEXCOORD0,
 out float4 oPos : POSITION,
 out float3 oDiffuse : COLOR0,
 out float3 oSpecular : COLOR1
 //out float3 otex : TEXCOORD0

)
{
 
 float3 PositionView = mul(iPos, World);
 float3 NormalView = normalize(mul(iNormal, (float3x3)World));
 float3 RefVector = normalize(2* dot(NormalView,lightDir) * NormalView-lightDir);
 float3 ViewDirection = normalize(PositionView);
 
 
 
 oDiffuse = I_a * k_a + I_d * k_d * max(0,dot(NormalView,lightDir));
 oSpecular = I_s * k_s * pow (max(0,dot(RefVector,ViewDirection)),n/4);
 oPos = mul(iPos, WorldViewProj);
// otex = itex;
 };

void PS
(
 in float4 iDiffuse : COLOR0,
 in float4 iSpecular : COLOR1,
    out float4 oColor : COLOR
)
{
 oColor = iDiffuse + iSpecular;
 
 };

technique jp10
{
 pass p0
 {
  CullMode = None;
  VertexShader = compile vs_2_0 VS();
  PixelShader = compile ps_2_0 PS();
 }
}

Hugo로 만듦
JimmyStack 테마 사용 중