¼ÎÀÌ´õ ÀÔ¹®1
Å÷ ¼ÎÀÌ´õshader_basic.html Àå¿¡ ³ª¿Â simpleLighting2.rfx ¼ÎÀÌ´õ¿¡ Å÷ È¿°ú¸¦ Ãß°¡ÇÑ´Ù. °è»êÀº Çȼ¿ ¼ÎÀÌ´õ¿¡ ´ÙÀ½ ÇÑÁÙ¸¸ Ãß°¡ÇÑ´Ù. diffuse = ceil( diffuse * 5) / 5.0f ceill ¸í·ÉÀº ¹«Á¶°Ç ¿Ã¸² ¸í·É¾îÀÌ´Ù. 0.2 ´ÜÀ§·Î Áõ°¡°¡ ÇÊ¿äÇϱ⠶§¹®¿¡ 1/0.2 = 5 ÀÌ´Ù. 0.4 ´ÜÀ§·Î Áõ°¡°¡ ÇÊ¿äÇÏ´Ù¸é 1/0.4 = 2.5 ÀÌ´Ù. Toon Shader
struct VS_INPUT
{ float4 pos : POSITION; float3 normal : NORMAL; }; float4x4 gWorldViewProjMat; float4x4 gInvWorldMat; float4 gWorldLightPos; struct VS_OUTPUT { float4 pos : POSITION; float3 diffuse : TEXCOORD1; }; VS_OUTPUT vs_main( VS_INPUT input ) { VS_OUTPUT output; output.pos = mul( input.pos, gWorldViewProjMat); float3 objectLightPos = mul( gWorldLightPos, gInvWorldMat); float3 lightDir = normalize(input.pos.xyz - objectLightPos); output.diffuse = dot( -lightDir, input.normal); return( output ); } //-------------------------------------------------------------------- struct PS_INPUT { float3 diffuse : TEXCOORD1; }; float4 ps_main( PS_INPUT input) : COLOR { float3 diffuse = saturate( input.diffuse); diffuse = ceil( diffuse * 5) / 5.0f; return float4( diffuse, 1.0f); }
EnvironmentMap¾Æ·¡ ±×¸²Àº ȯ°æ¸Ê¿¡¼ Åؼ¿À» ±¸ÇÏ´Â ¿ø¸®ÀÌ´Ù. NormalMapping.rfx¿¡ ±â´ÉÀ» Ãß°¡ÇÑ´Ù. ȯ°æ¸ÊÀ» ÅؽºÃĸ¦ ·»´õ¸ùÅ° »ùÇÿ¡¼ Ãß°¡ÇÑ´Ù. ȯ°æ¸Ê ÅؽºÃÄ ¿ÀºêÁ§Æ®¸¦ ´õºí Ŭ¸¯Çؼ D3DSAMP_MAGFILTER, D3DSAMP_MINFILTER¸¦ D3DTEXF_LINEAR·Î º¯°æÇÑ´Ù. Á¤Á¡ ¼ÎÀÌ´õ´Â Ãß°¡ ÇÒ Äڵ尡 ¾ø°í Çȼ¿¼ÎÀÌ´õ¿¡¸¸ Äڵ带 Ãß°¡ ÇÒ °ÍÀÌ´Ù. ÀÔ¹æüÀ̹ǷΠ´ÙÀ½°ú °°ÀÌ Ãß°¡ÇÑ´Ù. Çȼ¿¼ÎÀÌ´õ ÄÚµå´Â ´ÙÀ½°ú °°ÀÌ ÁøÇàÇÑ´Ù.
ȯ°æ¸Ê °ª¿¡ 0.5¸¦ °öÇÑ °ÍÀº °µµ¸¦ Á¶Á¤ÇÏ´Â °ÍÀÌ´Ù. ¾î¶²°ªÀ» ´ëÀÔÇÏ´õ¶óµµ »ó°ü¾ø´Ù. Environment
float4x4 gWorldMat;
float4x4 gWorldViewProjMat; float4 gLightPos; float4 gViewPos; struct VS_INPUT { float4 pos : POSITION; float3 normal : NORMAL; float2 uv : TEXCOORD0; float3 tangent : TANGENT; float3 binoraml : BINORMAL; }; struct VS_OUTPUT { float4 pos : POSITION; float2 uv : TEXCOORD0; float3 lightDir : TEXCOORD1; float3 viewDir : TEXCOORD2; float3 T : TEXCOORD3; float3 B : TEXCOORD4; float3 N : TEXCOORD5; }; VS_OUTPUT vs_main( VS_INPUT input ) { VS_OUTPUT output; output.pos = mul( input.pos, gWorldViewProjMat); output.uv = input.uv; float4 worldPos = mul( input.pos, gWorldMat); float3 lightDir = worldPos - gLightPos.xyz; output.lightDir = normalize( lightDir); float3 viewDir = worldPos - gViewPos.xyz; output.viewDir = normalize( viewDir); float3 worldNormal = mul( input.normal, (float3x3)gWorldMat); output.N = normalize( worldNormal); float3 worldTangent = mul( input.tangent, (float3x3)gWorldMat); output.T = normalize( worldTangent); float3 worldBinormal = mul( input.binoraml, (float3x3)gWorldMat); output.B = normalize( worldBinormal); return output; } //-------------------------------------------------------------------------------- sampler2D DiffuseSampler; sampler2D SpecularSampler; sampler2D NormalSampler; samplerCUBE EnvironmentSampler; struct PS_INPUT { float2 uv : TEXCOORD0; float3 lightDir : TEXCOORD1; float3 viewDir : TEXCOORD2; float3 T : TEXCOORD3; float3 B : TEXCOORD4; float3 N : TEXCOORD5; }; float3 gLightColor; float4 ps_main( PS_INPUT input) : COLOR { float3 tangentNormal = tex2D( NormalSampler, input.uv).xyz; tangentNormal = normalize( tangentNormal * 2 - 1); //for test environment map tangentNormal = float3( 0, 0, 1); float3x3 TBN = float3x3( normalize( input.T), normalize( input.B), normalize( input.N)); TBN = transpose( TBN); float3 worldNormal = mul( TBN, tangentNormal); float4 albedo = tex2D(DiffuseSampler, input.uv); float3 lightDir = normalize( input.lightDir); float3 diffuse = saturate( dot( worldNormal, -lightDir)); diffuse = gLightColor * albedo.rgb * diffuse; float3 specular = 0; float3 viewDir = normalize( input.viewDir); if( diffuse.x > 0) { float3 reflection = reflect( lightDir, worldNormal); specular = dot( reflection, -viewDir); specular = saturate( specular); specular = pow( specular, 20); float4 specularIntensity = tex2D(SpecularSampler, input.uv); specular = gLightColor * specularIntensity.rgb * specular; } float3 viewReflect = reflect( viewDir, worldNormal); float3 environment = texCUBE( EnvironmentSampler, viewReflect).rgb; float3 ambient = float3( 0.1f, 0.1f, 0.1f) * albedo; return float4( ambient + specular + diffuse + environment*0.5f, 1.0f); } ´Ù¿î·Îµå : EnvironmentMapping.rfx
|