Скачать 0.59 Mb.
|
{ float4 Diffuse; // vLight is the unit vector from the light to this pixel float3 vLight = normalize( float3( vPos - g_vLightPos ) ); // Compute diffuse from the light if( dot( vLight, g_vLightDir ) > g_fCosTheta ) // Light must face the pixel (within Theta) { // Pixel is in lit area. Find out if it's // in shadow using 2x2 percentage closest filtering //transform from RT space to texture space. float2 ShadowTexC = 0.5 * vPosLight.xy / vPosLight.w + float2( 0.5, 0.5 ); ShadowTexC.y = 1.0f - ShadowTexC.y; //read depths float sourcevals[4]; sourcevals[0] = (tex2D( g_samShadow, ShadowTexC )); sourcevals[1] = (tex2D( g_samShadow, ShadowTexC + float2(1.0/SMAP_SIZE, 0) )); sourcevals[2] = (tex2D( g_samShadow, ShadowTexC + float2(0, 1.0/SMAP_SIZE) )); sourcevals[3] = (tex2D( g_samShadow, ShadowTexC + float2(1.0/SMAP_SIZE, 1.0/SMAP_SIZE) )); // max of the depth values float Depth = max(max(sourcevals[0], sourcevals[1]), max(sourcevals[2], sourcevals[3])); Depth = Depth + SHADOW_EPSILON < vPosLight.z / vPosLight.w ? 0.0f : 1.0f; // Light it Diffuse = ( saturate( dot( -vLight, normalize( vNormal ) ) ) * Depth * ( 1 - g_vLightAmbient ) + g_vLightAmbient ) * g_vMaterial; } else { Diffuse = g_vLightAmbient * g_vMaterial; } return tex2D( g_samScene, Tex ) * Diffuse; } // MinDepth float4 PixSceneMinDepth( float2 Tex : TEXCOORD0, float4 vPos : TEXCOORD1, float3 vNormal : TEXCOORD2, float4 vPosLight : TEXCOORD3 ) : COLOR { float4 Diffuse; // vLight is the unit vector from the light to this pixel float3 vLight = normalize( float3( vPos - g_vLightPos ) ); // Compute diffuse from the light if( dot( vLight, g_vLightDir ) > g_fCosTheta ) // Light must face the pixel (within Theta) { // Pixel is in lit area. Find out if it's // in shadow using 2x2 percentage closest filtering //transform from RT space to texture space. float2 ShadowTexC = 0.5 * vPosLight.xy / vPosLight.w + float2( 0.5, 0.5 ); ShadowTexC.y = 1.0f - ShadowTexC.y; //read depths float sourcevals[4]; sourcevals[0] = (tex2D( g_samShadow, ShadowTexC )); sourcevals[1] = (tex2D( g_samShadow, ShadowTexC + float2(1.0/SMAP_SIZE, 0) )); sourcevals[2] = (tex2D( g_samShadow, ShadowTexC + float2(0, 1.0/SMAP_SIZE) )); sourcevals[3] = (tex2D( g_samShadow, ShadowTexC + float2(1.0/SMAP_SIZE, 1.0/SMAP_SIZE) )); // max of the depth values float Depth = min(min(sourcevals[0], sourcevals[1]), min(sourcevals[2], sourcevals[3])); Depth = Depth + SHADOW_EPSILON < vPosLight.z / vPosLight.w ? 0.0f : 1.0f; // Light it Diffuse = ( saturate( dot( -vLight, normalize( vNormal ) ) ) * Depth * ( 1 - g_vLightAmbient ) + g_vLightAmbient ) * g_vMaterial; } else { Diffuse = g_vLightAmbient * g_vMaterial; } return tex2D( g_samScene, Tex ) * Diffuse; } // Grads float4 PixSceneGrads( float2 Tex : TEXCOORD0, float4 vPos : TEXCOORD1, float3 vNormal : TEXCOORD2, float4 vPosLight : TEXCOORD3 ) : COLOR { float4 Diffuse; // vLight is the unit vector from the light to this pixel float3 vLight = normalize( float3( vPos - g_vLightPos ) ); // Compute diffuse from the light if( dot( vLight, g_vLightDir ) > g_fCosTheta ) // Light must face the pixel (within Theta) { // Pixel is in lit area. Find out if it's // in shadow using 2x2 percentage closest filtering //transform from RT space to texture space. float2 ShadowTexC = 0.5 * vPosLight.xy / vPosLight.w + float2( 0.5 + 0.5/SMAP_SIZE, 0.5 - 0.5/SMAP_SIZE ); ShadowTexC.y = 1.0f - ShadowTexC.y; // compute grads wrt light src float3 str = vPosLight.xyz / vPosLight.w; float3 d_str_dx = ddx(str) * g_screen_res.x, d_str_dy = ddy(str) * g_screen_res.y; float2x2 d_st_dxdy = { d_str_dx.xy, d_str_dy.xy }; float2x2 d_st_dxdy_inv = float2x2(d_st_dxdy._22, d_st_dxdy._12, d_st_dxdy._21, d_st_dxdy._11) / determinant(d_st_dxdy); float2 d_r_dsdt_abs = abs(mul(d_st_dxdy_inv, float2(d_str_dx.z, d_str_dy.z))); float grads_magnitude = 0.5 * (d_r_dsdt_abs.x + d_r_dsdt_abs.y);//return grads_magnitude/10; // do the shadow check float Depth = tex2D( g_samShadow, ShadowTexC ) + SHADOW_EPSILON < vPosLight.z / vPosLight.w ? 0.0f : 1.0f; // apply grads fade Depth *= (1 - smoothstep(g_grad_begin_fade, g_grad_end_fade, grads_magnitude)); // Light it Diffuse = ( saturate( dot( -vLight, normalize( vNormal ) ) ) * Depth * ( 1 - g_vLightAmbient ) + g_vLightAmbient ) * g_vMaterial; } else { Diffuse = g_vLightAmbient * g_vMaterial; } return tex2D( g_samScene, Tex ) * Diffuse; } //----------------------------------------------------------------------------- // Vertex Shader: VertLight // Desc: Process vertex for the light object //----------------------------------------------------------------------------- void VertLight( float4 iPos : POSITION, float3 iNormal : NORMAL, float2 iTex : TEXCOORD0, out float4 oPos : POSITION, out float2 Tex : TEXCOORD0 ) { // // Transform position to view space // oPos = mul( iPos, g_mWorldView ); // // Transform to screen coord // oPos = mul( oPos, g_mProj ); // // Propagate texture coord // Tex = iTex; } //----------------------------------------------------------------------------- // Pixel Shader: PixLight // Desc: Process pixel for the light object //----------------------------------------------------------------------------- float4 PixLight( float2 Tex : TEXCOORD0, float4 vPos : TEXCOORD1 ) : COLOR { return tex2D( g_samScene, Tex ); } //----------------------------------------------------------------------------- // Vertex Shader: VertShadow // Desc: Process vertex for the shadow map //----------------------------------------------------------------------------- void VertShadow( float4 Pos : POSITION, float3 Normal : NORMAL, out float4 oPos : POSITION, out float2 Depth : TEXCOORD0 ) { // // Compute the projected coordinates // oPos = mul( Pos, g_mWorldView ); oPos = mul( oPos, g_mProj ); // // Store z and w in our spare texcoord // Depth.xy = oPos.zw; } //----------------------------------------------------------------------------- // Pixel Shader: PixShadow // Desc: Process pixel for the shadow map //----------------------------------------------------------------------------- void PixShadow( float2 Depth : TEXCOORD0, out float4 Color : COLOR ) { // // Depth is z / w // Color = Depth.x / Depth.y; } // SlopeScaleBias void PixShadowSlopeScaleBiasMax( float2 Depth : TEXCOORD0, out float4 Color : COLOR ) { // // Depth is z / w // Color = Depth.x / Depth.y; Color += max(abs(ddx(Color)), abs(ddy(Color))); } void PixShadowSlopeScaleBiasSum( float2 Depth : TEXCOORD0, out float4 Color : COLOR ) { // // Depth is z / w // Color = Depth.x / Depth.y; Color += 0.5 * (abs(ddx(Color)) + abs(ddy(Color))); } //----------------------------------------------------------------------------- // Technique: RenderScene // Desc: Renders scene objects //----------------------------------------------------------------------------- technique RenderScene { pass p0 { VertexShader = compile vs_1_1 VertScene(); PixelShader = compile ps_2_0 PixScene(); } } technique RenderScenePoint { pass p0 { VertexShader = compile vs_1_1 VertScene(); PixelShader = compile ps_2_0 PixScenePoint(); } } technique RenderSceneBilinear { pass p0 { VertexShader = compile vs_1_1 VertScene(); PixelShader = compile ps_2_0 PixSceneBilinear(); } } technique RenderSceneMaxDepth { pass p0 { VertexShader = compile vs_1_1 VertScene(); PixelShader = compile ps_2_0 PixSceneMaxDepth(); } } technique RenderSceneMinDepth { pass p0 { VertexShader = compile vs_3_0 VertScene(); PixelShader = compile ps_3_0 PixSceneMinDepth(); } } technique RenderSxeneGrads { pass p0 { VertexShader = compile vs_3_0 VertScene(); PixelShader = compile ps_3_0 PixSceneGrads(); } } //----------------------------------------------------------------------------- // Technique: RenderLight // Desc: Renders the light object //----------------------------------------------------------------------------- technique RenderLight { pass p0 { VertexShader = compile vs_1_1 VertLight(); PixelShader = compile ps_1_1 PixLight(); } } //----------------------------------------------------------------------------- // Technique: RenderShadow // Desc: Renders the shadow map //----------------------------------------------------------------------------- technique RenderShadow { pass p0 { VertexShader = compile vs_1_1 VertShadow(); PixelShader = compile ps_2_0 PixShadow(); } } technique RenderShadowSlopeScaleBiasMax { pass p0 { VertexShader = compile vs_1_1 VertShadow(); PixelShader = compile ps_2_a PixShadowSlopeScaleBiasMax(); } } technique RenderShadowSlopeScaleBiasSum { pass p0 { VertexShader = compile vs_1_1 VertShadow(); PixelShader = compile ps_2_a PixShadowSlopeScaleBiasSum(); } } defines.fxh //-------------------------------------------------------------------------------------- // File: defines.fxh //-------------------------------------------------------------------------------------- #pragma once // rendering modes #define RENDERING_MODE_FINAL 0 #define RENDERING_MODE_LOCAL_NORMAL 1 #define RENDERING_MODE_WORAL_NORMAL 2 #define RENDERING_MODE_SEARCH_STEPS 3 // gradient evaluation methods #define GRAD_METHOD_STD 0 #define GRAD_METHOD_BASE_PLANE 1 #define GRAD_METHOD_HYBRID 2 shared.fxh //-------------------------------------------------------------------------------------- // File: shared.fxh //-------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------- // Shared variables //-------------------------------------------------------------------------------------- shared textureCUBE g_CubeTexture; // color texture for cube shared float g_fTime; // App's time in seconds shared float4x4 g_mViewProjection; // View * Projection matrix //-------------------------------------------------------------------------------------- // Texture samplers //-------------------------------------------------------------------------------------- samplerCUBE CubeMapSampler = sampler_state { Texture = MipFilter = LINEAR; MinFilter = ANISOTROPIC; MagFilter = LINEAR; MaxAnisotropy = 16; AddressU = CLAMP; AddressV = CLAMP; AddressW = CLAMP; }; Cube.fx //-------------------------------------------------------------------------------------- // File: Cube.fx //-------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------- // Includes //-------------------------------------------------------------------------------------- #include "shared.fxh" //-------------------------------------------------------------------------------------- // Global variables //-------------------------------------------------------------------------------------- float4x4 g_mWorld; // World matrix for cube //-------------------------------------------------------------------------------------- // Vertex shader output structure //-------------------------------------------------------------------------------------- struct VS_OUTPUT { float4 Position : POSITION; // vertex position float3 TextureXYZ : TEXCOORD0; // vertex texture coords }; //-------------------------------------------------------------------------------------- // This shader computes standard transform //-------------------------------------------------------------------------------------- VS_OUTPUT Transform_VS(float3 vPos : POSITION) { VS_OUTPUT Output; float4x4 g_mWorldViewProjection = mul(g_mWorld, g_mViewProjection); // Transform the position from object space to homogeneous projection space Output.Position = mul(float4(vPos, 1), g_mWorldViewProjection); // Just copy the texture coordinate through Output.TextureXYZ = vPos; return Output; } //-------------------------------------------------------------------------------------- // Cube pixel shader //-------------------------------------------------------------------------------------- float4 Cube_PS(VS_OUTPUT In) : COLOR0 { float4 Output; // Lookup cube map Output.rgb = texCUBE(CubeMapSampler, In.TextureXYZ); Output.a = 1; return Output; } //-------------------------------------------------------------------------------------- // Techniques //-------------------------------------------------------------------------------------- technique Cube { pass P0 { VertexShader = compile vs_2_0 Transform_VS(); PixelShader = compile ps_2_0 Cube_PS(); CullMode = CW; } } SurfaceDetailVariations.fx |
Реферат: Коваленко А. Е. Разработка системы научной визуализации.... Коваленко А. Е. Разработка системы научной визуализации. Квалификационная работа на степень магистра наук по направлению «Математика.... | Реферат Флягина Т. А. Проблемы разработки многооконных интерфейсов,... Флягина Т. А. Проблемы разработки многооконных интерфейсов, квалификационная работа на степень бакалавра наук | ||
Квалификационной работы на факультете математики и компьютерных наук В соответствии с действующими государственными образовательными стандартами выпускная квалификационная работа по специальности «Математика»... | Диссертация на степень магистра наук по направлению «Математика, компьютерные науки» Федеральное государственное автономное образовательное учреждение высшего профессионального образования | ||
Дипломная работа по направлению Математика. Прикладная математика студента гр. Мт 505 Федеральное государственное автономное образовательное учреждение высшего профессионального образования | Программа дисциплины Современные методы принятия решений для направления... Программа предназначена для преподавателей, ведущих данную дисциплину, учебных ассистентов и студентов направления подготовки 010400.... | ||
Программа дисциплины «Герменевтика» для направления 010400. 68 «Прикладная... Программа предназначена для преподавателей, ведущих данную дисциплину, и студентов направления подготовки 010400. 68 "Прикладная... | 1 Нормативные документы для разработки ооп впо по направлению подготовки... Общая характеристика вузовской основной образовательной программы высшего профессионального образования по направлению подготовки... | ||
Реферат Тычинин И. А. Разработка приложения для портативных устройств... Тычинин И. А. Разработка приложения для портативных устройств с использованием qt framework, квалификационная работа на степень бакалавра... | Основная образовательная программа (ооп) бакалавриата, реализуемая... Нормативные документы для разработки ооп бакалавриата по направлению подготовки «Прикладная математика и информатика» | ||
Программа дисциплины Архитектура ЭВМ для направления 010400. 68 «Прикладная... Программа предназначена для преподавателей, ведущих данную дисциплину, учебных ассистентов и студентов направлений подготовки 010400.... | Образовательная программа высшего образования, реализуемая университетом... ... | ||
Литература Уросов А. П. Разработка методик визуализации для представления работы параллельных программ, квалификационная работа на степень бакалавра... | ЕН. Ф. 1 Математика и информатика: математика Учебная дисциплина Математика и информатика: "Математика" введена в процесс обучения для бакалавров по направлению подготовки "Художественное... | ||
Программа дисциплины «Модели корпусной лингвистики» для направления... Программа предназначена для преподавателей, ведущих данную дисциплину, учебных ассистентов и студентов направления 010400. 68 "Прикладная... | Программа дисциплины «История» для направления 231300. 62 и 230700.... Программа предназначена для преподавателей, ведущих данную дисциплину, учебных ассистентов и студентов направления подготовки 231300.... |