RYHPT-74611ª\Ê6 a%*5-7 VðAyLq7��ˆ'^P0"2@8000T IT kH Xp0› 00M0f0“0Éh0£ 0{0¨0Ã0Z$ ²  0Æ0Ð0à 0í @þ(03(0 ! P0F0)0Ü0‘0 @0W0}0©B€0§$€0�ö& F+0~+0£+0Ê0ñ+00F&0À0a1À0} 00m0ì4€0_B€0u6€0ÃB€0Ú00Ž: 0Ä0žA�0  “4 ¥( ¿  Ö ñ ôDx0200FG˜0^B˜0s0� 0Ÿ0µ0å0ÍN˜0ÕO˜0ïS00àQ�0ÿR�0S80 (0)U˜0<V˜0`S00LuY0z8‚@ŽH L³PÊØßó  , ? S $k („ ,œ 0­ 4Á 8Ñ <ì @  D# 8 T Ya Y`p �  — 0´ @Æ Pß hï l        "   $ / C ([ 8t @š P `á b  !  (  (  :  Ø  „  ? k ' 7 #I U _ Yf Yn U' t  • ¡ ­ µ ½ Å Ï  ß í ù    *! +/ )(F ,8R H  -  .  D  Yh ~ – ® Æ Þ /ç 0( 8$  <  RIRØk r`‚Z‚]Œœ&«‚a_ YŒÀËß;RØëH0�óEÀ  Eà )E EE  `E@ }E` œE€ »E  ÙSé2ûB @?   30YC SYh$zY�(¡Yµ,ÆF  4ÛìýK( J,4I`"ˆ/ E \M i u 0„ 0Ž œ¬½LÇL$Ð 0Ù 0â ø & 6 D V $l 0z 0� 0› 0§ ³ 0¼ 0Æ 0Î 0Ü 0ë 0øP.(C,_p  _ YÀo ß;|‡�Wx�@ ¡Yo ¬¼ÈÔX  VÞ ç(ï,ç(ï,ø0   $2 Ø(PCharPContextSwitchPInt32PLightTypePRenderDataTypePSceneRenderPassTypePShadowCasterTypePTextureFormatBasePUInt16PUInt32PUInt8boolfloatCD3D11_BLEND_DESCCD3D11_DEPTH_STENCIL_DESCCD3D11_RASTERIZER_DESCD3D11_DEPTH_STENCILOP_DESCD3D11_RENDER_TARGET_BLEND_DESCPArrayPArrayPArrayPArrayPArrayPArrayPArrayPArrayPArrayPArrayPArrayPArrayPArrayPArrayPArrayPArrayPArrayPArrayPArrayPAssetReferencePBasePClassDescriptorPClusterHeaderPClusterHeaderBasePClusterHeaderD3D11PContextVariantFoldingTablePEffectPEffectVariantPInstanceListHeaderPMaterialPMaterialSwitchPNodeContextPParameterBufferPParameterBufferBasePSamplerStatePSamplerStateBasePSamplerStateD3D11PSceneRenderPassPShaderPShaderComputeProgramPShaderComputeProgramD3D11PShaderFragmentProgramPShaderFragmentProgramD3D11PShaderGeometryProgramPShaderGeometryProgramD3D11PShaderParameterCaptureBufferLocationPShaderParameterCaptureBufferLocationSizePShaderParameterCaptureBufferLocationTypeConstantBufferPShaderParameterCaptureBufferSamplerPShaderParameterCaptureBufferTexture2DPShaderParameterCaptureBufferTexture3DPShaderParameterCaptureBufferTextureBasePShaderParameterCaptureBufferTextureCubeMapPShaderParameterDefinitionPShaderPassPShaderPassBasePShaderPassD3D11PShaderPassInfoPShaderPassParameterLocationTypesBasePShaderPassParameterLocationTypesConstantBufferPShaderPassStateBasePShaderPassStateD3D11PShaderProgramBasePShaderProgramD3D11PShaderStreamDefinitionPShaderVertexProgramPShaderVertexProgramD3D11PSharrayPStreamInputDescD3D11PStreamInputLayoutD3D11PStringPTexture2DPTexture2DBasePTexture2DD3D11PTexture3DPTexture3DBasePTexture3DD3D11PTextureCommonBasePTextureCubeMapPTextureCubeMapBasePTextureCubeMapD3D11m_idm_assetm_assetTypem_indexBufferSizem_vertexBufferSizem_maxTextureBufferSizem_phyreMarkerm_sizem_instanceListCountm_packedNamespaceSizem_arrayFixupSizem_arrayFixupCountm_pointerFixupSizem_pointerFixupCountm_pointerArrayFixupSizem_pointerArrayFixupCountm_pointersInArraysCountm_userFixupCountm_userFixupDataSizem_totalDataSizem_headerClassInstanceCountm_headerClassChildCountm_platformIDm_physicsEngineIDm_supportedLightMaskm_supportedShadowCasterMaskm_effectFilem_effectSourcem_effectVariantsm_supportedLightTypesm_supportedShadowCasterTypesm_contextSwitchesm_contextVariantSwitchesm_maxLightCountm_numSupportedShaderLODLevelsm_countm_elsm_effectm_switchesm_sceneRenderPassesm_sceneRenderPassLookupm_largestShaderPassCountm_tweakableShaderParameterDefinitionsm_untweakableShaderParameterDefinitionsm_tweakableParameterBufferSizem_untweakableParameterBufferSizem_classIDm_objectsSizem_arraysSizem_effectVariantm_parameterBufferm_remapFromm_remapTom_namem_valuem_packedSwitchesm_parameterBufferSizem_minFilterm_magFilterm_wrapSm_wrapTm_wrapRm_lodBiasm_maxAnisotropym_borderColorm_baseLevelm_maxLevelm_flagsm_passTypem_shadersm_entryPointsm_variantsFoldingTablem_platformsm_platformsAreIncludem_contextVariantIndexm_contextVariantVpIndexm_contextVariantFpIndexm_contextVariantGsIndexm_contextVariantCsIndexm_passesm_parameterDefinitionsForPassesm_streamDefinitionsForPassesm_parameterBufferFrequenciesRequiredm_offsetm_constantBufferLocationm_typem_unusedPointerm_texturem_parameterTypem_samplerStatem_textureBufferIndexm_dataTypem_arrayElementCountm_bufferLocm_statem_vertexParameterLocationm_fragmentParameterLocationm_geometryParameterLocationm_computeParameterLocationm_vertexTexParameterLocationm_fragmentTexParameterLocationm_geometryTexParameterLocationm_computeTexParameterLocationm_vertexProgramm_fragmentProgramm_geometryProgramm_computeProgramm_streamLocationsm_vertexEntryPointm_vertexProfilem_fragmentEntryPointm_fragmentProfilem_geometryEntryPointm_geometryProfilem_computeEntryPointm_computeProfilem_parameterLocationsm_parameterStartm_parameterCountm_rasterDescm_depthDescm_blendDescm_stencilRefAlphaToCoverageEnableIndependentBlendEnableRenderTargetDepthEnableDepthWriteMaskDepthFuncStencilEnableStencilReadMaskStencilWriteMaskFrontFaceBackFaceFillModeCullModeFrontCounterClockwiseDepthBiasDepthBiasClampSlopeScaledDepthBiasDepthClipEnableScissorEnableMultisampleEnableAntialiasedLineEnableStencilFailOpStencilDepthFailOpStencilPassOpStencilFuncBlendEnableSrcBlendDestBlendBlendOpSrcBlendAlphaDestBlendAlphaBlendOpAlphaRenderTargetWriteMaskm_importantStatem_compiledCodem_constantBufferSizem_globalConstantBufferIndexm_shaderProfilem_renderTypem_nameHashm_indexm_inputLayoutm_um_semanticm_semanticIndexm_d3dFormatm_inputSlotm_streamsm_bufferm_widthm_heightm_depthm_formatm_memoryTypem_mipmapCountm_maxMipLevelm_textureFlagsH ¨Zp�Y hh  `@ €€ @@PP!@@%øõ€xî& 'vd`-6ø6/ÀÀ7P0 E Ø@ FX½˜ÀµI ] = Data/Shaders/S_Cloth_vs__Cloth_fs__16143.cgfx#FCB0C6988F1A1A8BE07354E2FB03D9F3#materialData/Shaders/S_Cloth_vs__Cloth_fs__16143.fx#FCB0C6988F1A1A8BE07354E2FB03D9F3 #line 1 "D:/Dev/TGC/Journey/head/Journey/Data/Shaders/S_Cloth_vs__Cloth_fs__16143.fx" #define D_PLATFORM_D3D11x64 #define REMOTE #define SCARF #define AO #define SAND #define ALPHATESTENABLE #define SKINNING_ENABLED // Automatically generated. Do not edit. // =======================================================================================================================[COMMON DEFINES]=== #define PHYRE3X_ENABLED #if !defined(D_PLATFORM_GXM) #define h2tex3D tex3D #define h4tex2D tex2D #define h3tex2D tex2D #define h2tex2D tex2D #define h1tex2D tex2D #define h4texCUBE texCUBE #define h3texCUBE texCUBE #endif // ========================================================================================================================[COMMON STATES]=== #if !defined(D_PLATFORM_GXM) BlendState ourBlendState { BlendEnable[0] = FALSE; BlendEnable[1] = FALSE; SrcBlend[0] = Src_Alpha; DestBlend[0] = Inv_Src_Alpha; BlendOp[0] = ADD; SrcBlendAlpha[0] = ONE; DestBlendAlpha[0] = ONE; BlendOpAlpha[0] = ADD; RenderTargetWriteMask[0] = 15; AlphaToCoverageEnable = false; }; DepthStencilState ourDepthStencilState { DepthEnable=true; DepthFunc=less; StencilEnable=false; }; RasterizerState ourRasterState { CullMode=None; DepthBias=0.0f; ScissorEnable=false; MultiSampleEnable=false; DepthClipEnable=false; AntialiasedLineEnable=false; }; #endif // ==================================================================================================================[VERTEX SHADER BEGIN]=== #define main Opaque_vs_main #define IN Opaque_vs_IN #define OUT Opaque_vs_OUT #define v2f Opaque_vs_v2f #define a2v Opaque_vs_a2v // ------------------------------------------------------------------------------------------------------------------------------------------ #define GLOBAL_LEAN_AND_MEAN #line 1 "D:/Dev/TGC/Journey/head/Journey/Data/Shaders/Migratory.sh" #ifndef MIGRATORY_SH #define MIGRATORY_SH //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #ifdef D_PLATFORM_D3D11x64 #define D_PLATFORM_D3D11 #endif #ifdef D_PLATFORM_D3D11 //#pragma pack_matrix(column_major) #define D_D3D11_OTHER(x,y) x #define D_D3D11_ONLY(x) x #define POSITION_OUT SV_POSITION #define FINAL_COLOR D_D3D11_OTHER(SV_TARGET0,COLOR) #elif defined(D_PLATFORM_GNM) #ifdef __ORBIS__ #pragma warning (disable:5203) // parameter unreferenced #pragma warning (disable:5206) // local variable unreferenced #pragma warning (disable:6204) // does not support uniform default values #pragma warning (disable:6459) // __user_defined__ is not a valid semantic for uniform #pragma warning (disable:5581) // PSSL treats 'half' type as 'float' #pragma warning (disable:5609) // PSSL treats 'half' type as 'float' #pragma warning (disable:5583) // PSSL treats 'half' literals as 'float' #pragma warning (disable:5524) // unsupported compiler hint //! Some evil #defines to sort out matrix multiplies. #define float4x4 row_major float4x4 #define float3x4 row_major float3x4 #define float4x3 row_major float4x3 //! Semantics for VS/PS inputs and outputs. #define POSITION S_POSITION #define SV_POSITION S_POSITION #define SV_GroupID S_GROUP_ID #define SV_VertexID S_VERTEX_ID #define SV_DispatchThreadID S_DISPATCH_THREAD_ID #define SV_GroupThreadID S_GROUP_THREAD_ID #define SV_GroupIndex S_GROUP_INDEX #define SV_PRIMITIVEID S_PRIMITIVE_ID #define SV_IsFrontFace S_FRONT_FACE #define SV_Depth FRAG_OUTPUT_DEPTH #define FRAG_OUTPUT_COLOR S_TARGET_OUTPUT0 #define FRAG_OUTPUT_COLOR0 S_TARGET_OUTPUT0 #define FRAG_OUTPUT_COLOR1 S_TARGET_OUTPUT1 #define FRAG_OUTPUT_COLOR2 S_TARGET_OUTPUT2 #define FRAG_OUTPUT_COLOR3 S_TARGET_OUTPUT3 #define FRAG_OUTPUT_DEPTH S_DEPTH_OUTPUT //! Some defines to make textures compile with PSSL for now (sort out later) SamplerState globalSamplerState; SamplerComparisonState globalSamplerComparisonState { // Sampler state Filter = MIN_MAG_LINEAR_MIP_POINT; AddressU = CLAMP; AddressV = CLAMP; // Sampler comparison state ComparisonFunc = LESS; ComparisonFilter = COMPARISON_MIN_MAG_LINEAR_MIP_POINT; }; #define cbuffer ConstantBuffer #define sampler SamplerState #define sampler2D Texture2D #define sampler3D Texture3D #define samplerCUBE TextureCube #define tex2Dproj(a,b) a.Sample(globalSamplerState, (b).xy / (b).w) #define h1tex2Dproj(a,b) ((half)(a.Sample(globalSamplerState, (b).xy / (b).w).x)) #define h4tex2D(a,b) ((half4)a.Sample(globalSamplerState, (b).xy)) #define h4tex2Dlod(a,b) ((half4)a.SampleLOD(globalSamplerState, (b).xy, (b).w)) #define tex2D(a,b) a.Sample(globalSamplerState, (b).xy) #define SampleLevel SampleLOD #define SampleCmpLevelZero SampleCmpLOD0 #define StructuredBuffer RegularBuffer #define RWStructuredBuffer RW_RegularBuffer #define numthreads NUM_THREADS #define maxvertexcount MAX_VERTEX_COUNT #define groupshared thread_group_memory #define TriangleStream TriangleBuffer #define PointStream PointBuffer #define triangle Triangle #define IncrementCounter IncrementCount #define DecrementCounter DecrementCount #define GroupMemoryBarrierWithGroupSync ThreadGroupMemoryBarrierSync #define InterlockedMin AtomicMin #define InterlockedMax AtomicMax #define InterlockedAdd AtomicAdd #endif //! __ORBIS__ #if defined(PHYRE_D3DFX) && !defined(__ORBIS__) #define FRAG_OUTPUT_COLOR SV_TARGET #define FRAG_OUTPUT_COLOR0 SV_TARGET0 #define FRAG_OUTPUT_COLOR1 SV_TARGET1 #define FRAG_OUTPUT_COLOR2 SV_TARGET2 #define FRAG_OUTPUT_COLOR3 SV_TARGET3 #define FRAG_OUTPUT_DEPTH SV_DEPTH #define SYSTEM_PRIMITIVE_INDEX SV_PRIMITIVEID #endif //! defined(PHYRE_D3DFX) && !defined(__ORBIS__) #define D_D3D11_OTHER(x,y) x #define D_D3D11_ONLY(x) x #define POSITION_OUT POSITION #define FINAL_COLOR FRAG_OUTPUT_COLOR #else #define D_D3D11_OTHER(x,y) y #define D_D3D11_ONLY(x) #define HALF half #define HALF2 half2 #define HALF3 half3 #define HALF4 half4 #define HALF3x3 float3x3 #define HALF3x4 float3x4 #define HALF4x4 float4x4 #define POSITION_OUT POSITION #define FINAL_COLOR D_D3D11_OTHER(SV_TARGET0,COLOR) #endif #if defined(__psp2__) #define NATIVECOLOR __nativecolor #define REGFORMAT __regformat #else #define NATIVECOLOR #define REGFORMAT #endif #if !defined(__ORBIS__) && !defined(D_PLATFORM_GXM) BlendState NoBlend_BlendState { BlendEnable[0] = FALSE; }; BlendState Alpha_BlendState { BlendEnable[0] = TRUE; SrcBlend[0] = Src_Alpha; DestBlend[0] = Inv_Src_Alpha; BlendOp[0] = ADD; SrcBlendAlpha[0] = Src_Alpha; DestBlendAlpha[0] = Inv_Src_Alpha; BlendOpAlpha[0] = ADD; BlendEnable[1] = FALSE; }; BlendState Additive_BlendState { BlendEnable[0] = TRUE; SrcBlend[0] = Src_Alpha; DestBlend[0] = ONE; BlendOp[0] = ADD; SrcBlendAlpha[0] = Src_Alpha; DestBlendAlpha[0] = ONE; BlendOpAlpha[0] = ADD; BlendEnable[1] = FALSE; }; BlendState ParticleBlended_BlendState { BlendEnable[0] = TRUE; SrcBlend[0] = ONE; DestBlend[0] = Inv_Src_Alpha; BlendOp[0] = ADD; SrcBlendAlpha[0] = ONE; DestBlendAlpha[0] = Inv_Src_Alpha; BlendOpAlpha[0] = ADD; BlendEnable[1] = FALSE; }; DepthStencilState NoDepthTest_NoDepthWrite_DepthState { DepthEnable = FALSE; DepthWriteMask = Zero; DepthFunc = Less; StencilEnable = FALSE; }; DepthStencilState NoDepthTest_DepthWrite_DepthState { DepthEnable = FALSE; DepthWriteMask = All; DepthFunc = Less; StencilEnable = FALSE; }; DepthStencilState DepthTest_NoDepthWrite_DepthState { DepthEnable = TRUE; DepthWriteMask = Zero; DepthFunc = Less; StencilEnable = FALSE; }; DepthStencilState DepthTest_DepthWrite_DepthState { DepthEnable = TRUE; DepthWriteMask = All; DepthFunc = Less; StencilEnable = FALSE; }; RasterizerState NoCull_RasterizerState { CullMode=None; }; RasterizerState BackFaceCull_RasterizerState { CullMode=Back; FrontCounterClockwise = TRUE; }; RasterizerState FrontFaceCull_RasterizerState { CullMode=Front; FrontCounterClockwise = TRUE; }; #endif #if defined(D_PLATFORM_D3D11) || defined(D_PLATFORM_GNM) #define MatrixMul(a,b) mul(b,a) #define HALF float #define HALF2 float2 #define HALF3 float3 #define HALF4 float4 #define HALF3x3 float3x3 #define HALF3x4 float3x4 #define HALF4x4 float4x4 #define half float #define half2 float2 #define half3 float3 #define half4 float4 #else #define MatrixMul(a,b) mul(a,b) #endif // samplers #if defined(D_PLATFORM_D3D11) || defined(D_PLATFORM_GNM) sampler PointClampSampler : register(s8) { Filter = Min_Mag_Mip_Point; AddressU = Clamp; AddressV = Clamp; AddressW = Clamp; }; sampler LinearClampSampler : register(s9) { Filter = Min_Mag_Mip_Linear; AddressU = Clamp; AddressV = Clamp; AddressW = Clamp; }; sampler LinearWrapTSampler : register(s10) { Filter = Min_Mag_Mip_Linear; AddressU = Clamp; AddressV = Wrap; AddressW = Clamp; }; sampler LinearWrapSampler : register(s11) { Filter = Min_Mag_Mip_Linear; AddressU = Wrap; AddressV = Wrap; AddressW = Wrap; }; sampler PointWrapSampler : register(s12) { Filter = Min_Mag_Mip_Point; AddressU = Wrap; AddressV = Wrap; AddressW = Wrap; }; sampler AnisoClampSampler : register(s13) { Filter = ANISOTROPIC; AddressU = Clamp; AddressV = Clamp; AddressW = Clamp; MaxAnisotropy = 16; }; sampler LinearWrapAnisoSampler : register(s14) { Filter = ANISOTROPIC; AddressU = Wrap; AddressV = Wrap; AddressW = Wrap; MaxAnisotropy = 16; }; sampler PointWrapAnisoSampler : register(s15) { Filter = Min_Mag_Point_Mip_Linear; AddressU = Wrap; AddressV = Wrap; AddressW = Wrap; MaxAnisotropy = 16; }; #define SAMPLER_WRAP_ANISO LinearWrapAnisoSampler #define SAMPLER_WRAP_LINEAR LinearWrapSampler #define SAMPLER_WRAP_POINT PointWrapSampler #define SAMPLER_CLAMP_ANISO AnisoClampSampler #define SAMPLER_CLAMP_LINEAR LinearClampSampler #define SAMPLER_CLAMP_POINT PointClampSampler static const float kSRGB = 2.2f; #define SRGB_ON(x) pow(x,kSRGB) #define SRGB_OFF(x) x #define SAMPLETEX(tex,uv,filter,wrap,srgb) SRGB_##srgb(tex.Sample(SAMPLER_##wrap##_##filter, uv)) #ifdef __ORBIS__ #define D_DECLARE_TEXTURE2DMS_4(x) MS_Texture2D x #else #define D_DECLARE_TEXTURE2DMS_4(x) Texture2DMS x #endif #define D_DECLARE_TEXTURE2D_4(x) Texture2D x #define D_DECLARE_TEXTURE3D_4(x) Texture3D x #define D_DECLARE_TEXTURE_CUBE_4(x) TextureCube x #define D_SAMPLE_TEXTURE(tex,uv) tex.Sample(LinearClampSampler,uv) #define D_POINT_SAMPLE_TEXTURE(tex,uv) tex.Sample(PointClampSampler,uv) #define D_SAMPLE_TEXTURE_PROJ(tex,uv) tex.Sample(LinearClampSampler,(float2) (uv.xy / uv.w) ) #define D_POINT_SAMPLE_TEXTURE_PROJ(tex,uv) tex.Sample(PointClampSampler,(float2) (uv.xy / uv.w) ) #define D_SAMPLE_TEXTURE_3D(tex,uv) tex.Sample(LinearClampSampler,uv) #define D_SAMPLE_TEXTURE_WRAP_3D(tex,uv) tex.Sample(LinearWrapSampler,uv) #define D_H1_SAMPLE_TEXTURE(tex,uv) tex.Sample(LinearClampSampler,uv).x #define D_H2_SAMPLE_TEXTURE(tex,uv) tex.Sample(LinearClampSampler,uv).xy #define D_H3_SAMPLE_TEXTURE(tex,uv) tex.Sample(LinearClampSampler,uv).xyz #define D_H4_SAMPLE_TEXTURE(tex,uv) tex.Sample(LinearClampSampler,uv) #define D_H1_POINTSAMPLELEVEL_TEXTURE(tex,uv,lod) tex.SampleLevel(PointClampSampler,uv,lod).x #define D_H1_SAMPLELEVEL_TEXTURE(tex,uv,lod) tex.SampleLevel(LinearClampSampler,uv,lod).x #define D_H4_SAMPLELEVEL_TEXTURE(tex,uv,lod) tex.SampleLevel(LinearClampSampler,uv,lod) #if defined(D_PLATFORM_D3D11) #define D_H1_SAMPLE_SRGBTEXTURE(tex,uv) pow(tex.Sample(LinearClampSampler,uv).x,2.2f) #define D_H2_SAMPLE_SRGBTEXTURE(tex,uv) pow(tex.Sample(LinearClampSampler,uv).xy,2.2f) #define D_H3_SAMPLE_SRGBTEXTURE(tex,uv) pow(tex.Sample(LinearClampSampler,uv).xyz,2.2f) #define D_H4_SAMPLE_SRGBTEXTURE(tex,uv) float4( pow(tex.Sample(LinearClampSampler,uv).xyz,2.2f), tex.Sample(LinearClampSampler,uv).a ) #define D_H1_SAMPLE_WRAP_SRGBTEXTURE(tex,uv) pow(tex.Sample(LinearWrapSampler,uv).x,2.2f) #define D_H2_SAMPLE_WRAP_SRGBTEXTURE(tex,uv) pow(tex.Sample(LinearWrapSampler,uv).xy,2.2f) #define D_H3_SAMPLE_WRAP_SRGBTEXTURE(tex,uv) pow(tex.Sample(LinearWrapSampler,uv).xyz,2.2f) #define D_H4_SAMPLE_WRAP_SRGBTEXTURE(tex,uv) float4( pow(tex.Sample(LinearWrapSampler,uv).xyz,2.2f), tex.Sample(LinearWrapSampler,uv).a ) #define D_H4_SAMPLE_WRAPT_SRGBTEXTURE(tex,uv) float4( pow(tex.Sample(LinearWrapTSampler,uv).xyz,2.2f), tex.Sample(LinearWrapTSampler,uv).a) #define D_H3_SAMPLE_WRAP_ANISO_SRGBTEXTURE(tex,uv) pow( tex.Sample(LinearWrapAnisoSampler,uv).xyz, 2.2f) #else #define D_H1_SAMPLE_SRGBTEXTURE(tex,uv) tex.Sample(LinearClampSampler,uv).x #define D_H2_SAMPLE_SRGBTEXTURE(tex,uv) tex.Sample(LinearClampSampler,uv).xy #define D_H3_SAMPLE_SRGBTEXTURE(tex,uv) tex.Sample(LinearClampSampler,uv).xyz #define D_H4_SAMPLE_SRGBTEXTURE(tex,uv) tex.Sample(LinearClampSampler,uv) #define D_H1_SAMPLE_WRAP_SRGBTEXTURE(tex,uv) tex.Sample(LinearWrapSampler,uv).x #define D_H2_SAMPLE_WRAP_SRGBTEXTURE(tex,uv) tex.Sample(LinearWrapSampler,uv).xy #define D_H3_SAMPLE_WRAP_SRGBTEXTURE(tex,uv) tex.Sample(LinearWrapSampler,uv).xyz #define D_H4_SAMPLE_WRAP_SRGBTEXTURE(tex,uv) tex.Sample(LinearWrapSampler,uv) #define D_H4_SAMPLE_WRAPT_SRGBTEXTURE(tex,uv) tex.Sample(LinearWrapTSampler,uv) #endif #define D_H1_SAMPLE_WRAP_TEXTURE(tex,uv) tex.Sample(LinearWrapSampler,uv).x #define D_H2_SAMPLE_WRAP_TEXTURE(tex,uv) tex.Sample(LinearWrapSampler,uv).xy #define D_H3_SAMPLE_WRAP_TEXTURE(tex,uv) tex.Sample(LinearWrapSampler,uv).xyz #define D_H4_SAMPLE_WRAP_TEXTURE(tex,uv) tex.Sample(LinearWrapSampler,uv) #define D_H1_SAMPLE_WRAP_ANISO_TEXTURE(tex,uv) tex.Sample(LinearWrapAnisoSampler,uv).x #define D_H2_SAMPLE_WRAP_ANISO_TEXTURE(tex,uv) tex.Sample(LinearWrapAnisoSampler,uv).xy #define D_H3_SAMPLE_WRAP_ANISO_TEXTURE(tex,uv) tex.Sample(LinearWrapAnisoSampler,uv).xyz #define D_H4_SAMPLE_WRAP_ANISO_TEXTURE(tex,uv) tex.Sample(LinearWrapAnisoSampler,uv) #define D_H1_SAMPLE_POINT_WRAP_ANISO_TEXTURE(tex,uv) tex.Sample(PointWrapAnisoSampler,uv).x #define D_H2_SAMPLE_POINT_WRAP_ANISO_TEXTURE(tex,uv) tex.Sample(PointWrapAnisoSampler,uv).xy #define D_H3_SAMPLE_POINT_WRAP_ANISO_TEXTURE(tex,uv) tex.Sample(PointWrapAnisoSampler,uv).xyz #define D_H4_SAMPLE_POINT_WRAP_ANISO_TEXTURE(tex,uv) tex.Sample(PointWrapAnisoSampler,uv) #define D_H2_SAMPLE_TEXTURE_3D(tex,uv) tex.Sample(LinearClampSampler,uv).xy #define D_H2_SAMPLE_WRAP_TEXTURE_3D(tex,uv) tex.Sample(LinearWrapSampler,uv).xy #if defined(D_PLATFORM_D3D11) #define D_H3_SAMPLE_TEXTURE_CUBE(tex,uv) pow(tex.Sample(LinearClampSampler,uv).xyz,2.2f) #define D_H4_SAMPLE_TEXTURE_CUBE(tex,uv) float4( pow(tex.Sample(LinearClampSampler,uv).xyz,2.2f), tex.Sample(LinearClampSampler,uv).a ) #define D_SAMPLE_TEXTURE_CUBE(tex,uv) float4( pow(tex.Sample(LinearClampSampler,uv).xyz,2.2f), tex.Sample(LinearClampSampler,uv).a ) #else #define D_H3_SAMPLE_TEXTURE_CUBE(tex,uv) tex.Sample(LinearClampSampler,uv).xyz #define D_H4_SAMPLE_TEXTURE_CUBE(tex,uv) tex.Sample(LinearClampSampler,uv) #define D_SAMPLE_TEXTURE_CUBE(tex,uv) tex.Sample(LinearClampSampler,uv) #endif #else #define D_DECLARE_TEXTURE2D_4(x) sampler2D x #define D_DECLARE_TEXTURE3D_4(x) sampler3D x #define D_DECLARE_TEXTURE_CUBE_4(x) samplerCUBE x #define D_SAMPLE_TEXTURE(tex,uv) h4tex2D(tex,uv) #define D_POINT_SAMPLE_TEXTURE(tex,uv) h4tex2D(tex,uv) #define D_SAMPLE_TEXTURE_PROJ(tex,uv) h4tex2Dproj(tex,uv.xyw) #define D_POINT_SAMPLE_TEXTURE_PROJ(tex,uv) h4tex2Dproj(tex,uv.xyw) #define D_SAMPLE_TEXTURE_CUBE(tex,uv) h4texCUBE(tex,uv) #define D_SAMPLE_TEXTURE_3D(tex,uv) h4tex3D(tex,uv) #define D_SAMPLE_TEXTURE_WRAP_3D(tex,uv) h4tex3D(tex,uv) #define D_H1_SAMPLE_TEXTURE(tex,uv) h1tex2D(tex,uv).x #define D_H2_SAMPLE_TEXTURE(tex,uv) h2tex2D(tex,uv).xy #define D_H3_SAMPLE_TEXTURE(tex,uv) h3tex2D(tex,uv).xyz #define D_H4_SAMPLE_TEXTURE(tex,uv) h4tex2D(tex,uv) #define D_H1_POINTSAMPLELEVEL_TEXTURE(tex,uv,lod) h1tex2D(tex,uv).x #define D_H1_SAMPLELEVEL_TEXTURE(tex,uv,lod) h1tex2D(tex,uv).x #define D_H4_SAMPLELEVEL_TEXTURE(tex,uv,lod) h4tex2D(tex,uv) #define D_H1_SAMPLE_SRGBTEXTURE(tex,uv) h1tex2D(tex,uv).x #define D_H2_SAMPLE_SRGBTEXTURE(tex,uv) h2tex2D(tex,uv).xy #define D_H3_SAMPLE_SRGBTEXTURE(tex,uv) h3tex2D(tex,uv).xyz #define D_H4_SAMPLE_SRGBTEXTURE(tex,uv) h4tex2D(tex,uv) #define D_H1_SAMPLE_WRAP_TEXTURE(tex,uv) h1tex2D(tex,uv).x #define D_H2_SAMPLE_WRAP_TEXTURE(tex,uv) h2tex2D(tex,uv).xy #define D_H3_SAMPLE_WRAP_TEXTURE(tex,uv) h3tex2D(tex,uv).xyz #define D_H4_SAMPLE_WRAP_TEXTURE(tex,uv) h4tex2D(tex,uv) #define D_H1_SAMPLE_WRAP_ANISO_TEXTURE(tex,uv) h1tex2D(tex,uv).x #define D_H2_SAMPLE_WRAP_ANISO_TEXTURE(tex,uv) h2tex2D(tex,uv).xy #define D_H3_SAMPLE_WRAP_ANISO_TEXTURE(tex,uv) h3tex2D(tex,uv).xyz #define D_H4_SAMPLE_WRAP_ANISO_TEXTURE(tex,uv) h4tex2D(tex,uv) #define D_H1_SAMPLE_ANISO_TEXTURE(tex,uv) h1tex2D(tex,uv).x #define D_H2_SAMPLE_ANISO_TEXTURE(tex,uv) h2tex2D(tex,uv).xy #define D_H3_SAMPLE_ANISO_TEXTURE(tex,uv) h3tex2D(tex,uv).xyz #define D_H4_SAMPLE_ANISO_TEXTURE(tex,uv) h4tex2D(tex,uv) #define D_H1_SAMPLE_POINT_WRAP_ANISO_TEXTURE(tex,uv) h1tex2D(tex,uv).x #define D_H2_SAMPLE_POINT_WRAP_ANISO_TEXTURE(tex,uv) h2tex2D(tex,uv).xy #define D_H3_SAMPLE_POINT_WRAP_ANISO_TEXTURE(tex,uv) h3tex2D(tex,uv).xyz #define D_H4_SAMPLE_POINT_WRAP_ANISO_TEXTURE(tex,uv) h4tex2D(tex,uv) #define D_H1_SAMPLE_WRAP_SRGBTEXTURE(tex,uv) h1tex2D(tex,uv).x #define D_H2_SAMPLE_WRAP_SRGBTEXTURE(tex,uv) h2tex2D(tex,uv).xy #define D_H3_SAMPLE_WRAP_SRGBTEXTURE(tex,uv) h3tex2D(tex,uv).xyz #define D_H4_SAMPLE_WRAP_SRGBTEXTURE(tex,uv) h4tex2D(tex,uv) #define D_H4_SAMPLE_WRAPT_SRGBTEXTURE(tex,uv) h4tex2D(tex,uv) #define D_H2_SAMPLE_TEXTURE_3D(tex,uv) h2tex3D(tex,uv).xy #define D_H2_SAMPLE_WRAP_TEXTURE_3D(tex,uv) h2tex3D(tex,uv).xy #define D_H3_SAMPLE_TEXTURE_CUBE(tex,uv) h3texCUBE(tex,uv).xyz #define D_H4_SAMPLE_TEXTURE_CUBE(tex,uv) h4texCUBE(tex,uv) #endif #if !defined(GLOBAL_LEAN_AND_MEAN) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // these constants are system constants; uploaded by Phyre itself. // we can't do this, but we don't want to upload them all the time, either. consequently, we make these global // i guess we can eventually stuff these into a separate uniform buffer //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// float4x4 view : view ; // uploaded once per camera float4x4 projection : projection ; // view inverse float4x4 viewprojection : viewprojection ; float4 eyeDirectionWS : eyeDirectionWS ; float4 eyePositionWS : eyePositionWS ; float4 eyePositionOS : eyePositionOS ; float4 cameraNear : cameraNearFar ; float4x4 modelIT : modelit ; // uploaded per primitive // model inverse transpose float4x4 model : model ; float4x4 modelViewProj : modelviewproj ; #endif //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // depth conversion code, stolen from the sample code //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// float cameraNearTimesFar; float cameraFarMinusNear; float4 cameraNearFar; // Convert a depth value from post projection space to view space. float ConvertDepth(float depth) { // float viewSpaceZ = -(scene.cameraNearTimesFar / (depth * scene.cameraFarMinusNear - scene.cameraNearFar.y)); #if defined(D_PLATFORM_GXM) float viewSpaceZ = -(cameraNearTimesFar / (depth * cameraFarMinusNear - cameraNearFar.y)); #else float viewSpaceZ = -(cameraNearTimesFar / (depth * cameraFarMinusNear - cameraNearFar.y)); #endif return viewSpaceZ; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // skinning //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #ifdef SKINNING_ENABLED // grabbed off [PhyreCoreShaderShared.h] // Description: // Encapsulates the skinning transformation matrices. #if defined(D_PLATFORM_GXM) #define PE_MAX_SKIN_CB_TRANSFORMS 32 float4x4 boneTransforms[PE_MAX_SKIN_CB_TRANSFORMS]; float4x4 GenerateBoneMatrix(int4 SkinIndices,float4 SkinWeights) { return boneTransforms[SkinIndices[0]]*SkinWeights[0] + boneTransforms[SkinIndices[1]]*SkinWeights[1] + boneTransforms[SkinIndices[2]]*SkinWeights[2] + boneTransforms[SkinIndices[3]]*SkinWeights[3]; } #else #define PE_MAX_SKIN_CB_TRANSFORMS 32 struct PSkinTransforms { float4x4 Mtxs[PE_MAX_SKIN_CB_TRANSFORMS]; // The skinning transformation matrices. }; cbuffer BoneTransformConstantBuffer { PSkinTransforms SkinTransforms; } float4x4 GenerateBoneMatrix(uint4 SkinIndices,float4 SkinWeights) { return SkinTransforms.Mtxs[SkinIndices[0]]*SkinWeights[0] + SkinTransforms.Mtxs[SkinIndices[1]]*SkinWeights[1] + SkinTransforms.Mtxs[SkinIndices[2]]*SkinWeights[2] + SkinTransforms.Mtxs[SkinIndices[3]]*SkinWeights[3]; } #endif #endif //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// static const float4x4 SCALE_BIAS = float4x4( float4( 0.5, 0.0, 0.0, 0.5 ), #if defined(D_PLATFORM_D3D11) float4( 0.0, -0.5, 0.0, 0.5 ), #else float4( 0.0, 0.5, 0.0, 0.5 ), #endif float4( 0.0, 0.0, 0.5, 0.5 ), float4( 0.0, 0.0, 0.0, 1.0 ) ); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #ifdef D_PLATFORM_GXM #define D_INT_MOD(val,mod) (frac((floor((float)val)/mod))*mod) #define D_UINT_MOD(val,mod) (frac((floor((float)val)/mod))*mod) #elif defined(D_PLATFORM_GNM) #define D_INT_MOD(val,mod) ((int)floor(val) % mod) #define D_UINT_MOD(val,mod) ((uint)floor(val) % mod) #else #define D_INT_MOD(val,mod) ((int)floor(val) % mod) #define D_UINT_MOD(val,mod) ((int)floor(val) % mod) #endif //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #ifdef D_ENABLE_DEBUG_PARAMS float4 debugVars0; float4 debugVars1; float4 debugVars2; float4 debugVars3; float4 debugVars4; float4 debugVars5; float4 debugVars6; float4 debugVars7; #define GETDEBUGVAR(dv) (debugVars##dv!=0) ? (debugVars##dv) : #define GETDEBUGVAR2(dv,scl) (debugVars##dv!=0) ? (scl*debugVars##dv) : #endif #define powsafe(_x,_y) pow(max(_x,0.00000000000001),_y) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #endif//MIGRATORY_SH #line 60 "D:/Dev/TGC/Journey/head/Journey/Data/Shaders/S_Cloth_vs__Cloth_fs__16143.fx" float4 eyePositionWS : eyePositionWS ; #ifdef SKINNING_ENABLED float4x4 viewprojection : viewprojection ; #else float4x4 model : model ; float4x4 modelIT : modelit ; float4x4 modelViewProj : modelviewproj ; #endif #if defined(D_PLATFORM_GXM) #undef SAND #endif #ifndef D_PREPASS_ENABLED // Set automatically by PSSG. // Global env params: HALF4 l_d; // Type specific: #if defined( DUDE ) || defined( SCARF ) float4x4 dudeInvTorso; #endif #ifndef TOOL #ifdef DUDE #ifdef DECORATION #define SAND_SPHERE_COUNT 14 #else #define SAND_SPHERE_COUNT 7 #endif float4 sandSpheres[SAND_SPHERE_COUNT]; //float sandInts[SAND_SPHERE_COUNT]; //!MP! hnnngh, float arrays are not properly supported on pc float4 sandInts[SAND_SPHERE_COUNT]; #endif #endif #endif//D_PREPASS_ENABLED #ifdef SKINNING_ENABLED struct a2v { #if defined(__ORBIS__) float4 SkinnableVertex : POSITION; #else float3 SkinnableVertex : POSITION; #endif float3 SkinnableNormal : NORMAL; float2 uv : TEXCOORD0; float4 extraF32 : TEXCOORD1; float4 extraU8 : TEXCOORD2; float4 extra2U8 : TEXCOORD3; float4 Color : COLOR; float4 SkinWeights : BLENDWEIGHTS; #if defined(D_PLATFORM_GXM) float4 SkinIndices : BLENDINDICES; #else uint4 SkinIndices : BLENDINDICES; #endif }; struct a2v_noSkin #else struct a2v #endif { #if defined(__ORBIS__) float4 position : POSITION; #else float3 position : POSITION; #endif float3 normal : NORMAL; float2 uv : TEXCOORD0; float4 extraF32 : TEXCOORD1; float4 extraU8 : TEXCOORD2; float4 extra2U8 : TEXCOORD3; float4 color : COLOR0; }; #ifdef SKINNING_ENABLED a2v_noSkin ProcessSkInput(a2v skIn) { float4x4 transformMatrix = GenerateBoneMatrix(skIn.SkinIndices,skIn.SkinWeights); a2v_noSkin ret; ret.position.xyz = MatrixMul(transformMatrix,float4(skIn.SkinnableVertex.xyz,1)).xyz; #if defined(__ORBIS__) ret.position.w = 1; #endif ret.normal = MatrixMul((float3x3)transformMatrix, skIn.SkinnableNormal); ret.uv = skIn.uv; ret.extraF32 = skIn.extraF32; ret.extraU8 = skIn.extraU8; ret.extra2U8 = skIn.extra2U8; ret.color = skIn.Color; return ret; } #endif//SKINNING_ENABLED struct v2f { float4 position : POSITION_OUT; HALF4 color : COLOR0; float3 normal : TEXCOORD0; HALF4 uv : TEXCOORD1; float4 worldPos : TEXCOORD2; float4 eye : TEXCOORD3; HALF4 extra : TEXCOORD4; HALF4 extra2 : TEXCOORD5; HALF4 extra3 : TEXCOORD6; HALF4 extra4 : COLOR1; HALF3 fresSsL : TEXCOORD7; }; void main( #ifdef SKINNING_ENABLED in a2v IN_VAL, #else in a2v IN, #endif out v2f OUT ) { #ifdef SKINNING_ENABLED a2v_noSkin IN = ProcessSkInput(IN_VAL); OUT.position = MatrixMul( viewprojection, float4( IN.position.xyz, 1 ) ); OUT.worldPos = float4( IN.position.xyz, 1 ); OUT.normal = normalize( IN.normal ); #else OUT.position = MatrixMul( modelViewProj, float4( IN.position.xyz, 1 ) ); OUT.worldPos = MatrixMul( model, float4( IN.position.xyz, 1 ) ); OUT.normal = normalize( MatrixMul( (float3x3)modelIT, IN.normal ) ); #endif OUT.uv.xy = IN.uv; OUT.eye = float4( eyePositionWS.xyz - OUT.worldPos.xyz, OUT.worldPos.y ); // Calculate the fresnel term of specular. HALF3 Ln = normalize( l_d.xyz ); HALF3 Vn = normalize( OUT.eye.xyz ); HALF3 Hn = normalize( Vn + Ln ); HALF F0 = 0.005; HALF fresnel = lerp( F0, 1.0, powsafe( saturate( 1.0 - dot( Vn, Hn ) ), 5.0 ) ); OUT.fresSsL.x = fresnel; // The dude's body occludes light on the scarf and cape. HALF ssOcc = 1.0; #if defined( DUDE ) || defined( SCARF ) HALF3 torsoPos = MatrixMul( dudeInvTorso, float4( OUT.worldPos.xyz, 1.0 ) ).xyz; HALF3 torsoNorm = normalize( HALF3( 1, 3, 3 ) * torsoPos ); #if defined( DECORATION ) ssOcc = 0.0; #else HALF3 torsoEye = normalize( MatrixMul( (float3x3)dudeInvTorso, OUT.eye.xyz ) ); ssOcc = 1.0 - saturate( dot( torsoEye, torsoNorm ) ); ssOcc *= saturate( 0.1 - 0.1 * torsoPos.x ); ssOcc = max( ssOcc, saturate( 0.1 * length( torsoPos ) - 0.333 ) ); // We actually bump up the occlusion on the cape a little, 'cause it looks cooler. #if defined( DUDE ) ssOcc *= 3.0; #endif #endif // Project dude normals onto a vertical elipsoid. HALF3 torsoLight = normalize( MatrixMul( (float3x3)dudeInvTorso, l_d.xyz ) ); HALF slight = 0.5 * (1.0 + sin( 0.5 * 3.1415926 * dot( torsoLight, torsoNorm ) )); OUT.fresSsL.z = slight; #else OUT.fresSsL.z = 0; #endif OUT.fresSsL.y = ssOcc; // Extract effect 'channels' from the compressed data in IN.extraU8[0] and convert back into usable values float MAX_CHANNELS = 4.0; int compressed = (int)floor( 255.1 * IN.extraU8.x ); int topBits = compressed / 16; int botBits = D_UINT_MOD(compressed,16); int invis = D_UINT_MOD(topBits,4); int iFrom = invis / 2; int iTo = D_UINT_MOD(invis,2); int chamDir = topBits / 4; int chamDirUp = D_UINT_MOD(chamDir,2); int chamDirRight = chamDir / 2; int u0 = botBits / 4; int u1 = D_UINT_MOD(botBits,4); // List all of the inputs for readibility, so we can tie them to the outputs easily float abBlend = IN.extraF32[0]; // glow blend float uvBlend = IN.extraF32[1]; // cham blend float vOffset = IN.extraF32[2]; float scarfMeter = IN.extraF32[3]; HALF compressedVals = IN.extraU8[0]; HALF chamEdgeMult = IN.extraU8[1]; HALF vMin = IN.extraU8[2]; HALF vMax = IN.extraU8[3]; HALF uScaleMult = IN.extra2U8[0]; HALF vScaleMult = IN.extra2U8[1]; int iextra = (int)floor( 255.1 * IN.extra2U8[2] ); HALF innerSpec = D_UINT_MOD(iextra,2) ? 1.0 : 0.0; HALF frozen = D_UINT_MOD((iextra / 2),2) ? 1.0 : 0.0; HALF dirty = IN.extra2U8[3] * 2.f; // For the dude mesh we use a special system for calculating dirtiness. #ifndef TOOL #if defined( DUDE ) float sand = 0; float weight = 0; for( int i = 0; i < SAND_SPHERE_COUNT; i++ ) { float3 toSphere = sandSpheres[i].xyz - OUT.worldPos.xyz; float dist = length( toSphere ); float t = dist / sandSpheres[i].w; float w = saturate( 1.0 - t * t ); weight += w; sand += w * sandInts[i].x; } sand /= weight + 0.000001; #if defined( DECORATION ) dirty = sand; #else dirty = lerp( dirty, sand, saturate( weight ) ); #endif #endif #else dirty = 0; #endif HALF hueShift = IN.color[0]; HALF saturation = IN.color[1]; HALF value = IN.color[2]; HALF alpha = IN.color[3]; OUT.uv[2] = (float)u0 / MAX_CHANNELS; OUT.uv[3] = (float)u1 / MAX_CHANNELS; OUT.extra = float4( abBlend, uvBlend, vOffset, scarfMeter ); OUT.extra2 = float4( vMin, vMax, uScaleMult, vScaleMult ); OUT.extra3 = float4( (float)iFrom, (float)iTo, (float)chamDirUp, (float)chamDirRight ); OUT.extra4 = float4( chamEdgeMult, innerSpec, frozen, dirty ); OUT.color = float4( hueShift, saturation, value, alpha ); #ifdef DECORATION OUT.uv.zw = float2( 0.0, 0.0 ); #endif } // ------------------------------------------------------------------------------------------------------------------------------------------ #undef main #undef IN #undef OUT #undef v2f #undef a2v // ===================================================================================================================[PIXEL SHADER BEGIN]=== #define main Opaque_fs_main #define IN Opaque_fs_IN #define OUT Opaque_fs_OUT #define v2f Opaque_fs_v2f #define f2f Opaque_fs_f2f // ------------------------------------------------------------------------------------------------------------------------------------------ #line 1 "D:/Dev/TGC/Journey/head/Journey/Data/Shaders/migratory.sh" #ifndef MIGRATORY_SH #define MIGRATORY_SH //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #ifdef D_PLATFORM_D3D11x64 #define D_PLATFORM_D3D11 #endif #ifdef D_PLATFORM_D3D11 //#pragma pack_matrix(column_major) #define D_D3D11_OTHER(x,y) x #define D_D3D11_ONLY(x) x #define POSITION_OUT SV_POSITION #define FINAL_COLOR D_D3D11_OTHER(SV_TARGET0,COLOR) #elif defined(D_PLATFORM_GNM) #ifdef __ORBIS__ #pragma warning (disable:5203) // parameter unreferenced #pragma warning (disable:5206) // local variable unreferenced #pragma warning (disable:6204) // does not support uniform default values #pragma warning (disable:6459) // __user_defined__ is not a valid semantic for uniform #pragma warning (disable:5581) // PSSL treats 'half' type as 'float' #pragma warning (disable:5609) // PSSL treats 'half' type as 'float' #pragma warning (disable:5583) // PSSL treats 'half' literals as 'float' #pragma warning (disable:5524) // unsupported compiler hint //! Some evil #defines to sort out matrix multiplies. #define float4x4 row_major float4x4 #define float3x4 row_major float3x4 #define float4x3 row_major float4x3 //! Semantics for VS/PS inputs and outputs. #define POSITION S_POSITION #define SV_POSITION S_POSITION #define SV_GroupID S_GROUP_ID #define SV_VertexID S_VERTEX_ID #define SV_DispatchThreadID S_DISPATCH_THREAD_ID #define SV_GroupThreadID S_GROUP_THREAD_ID #define SV_GroupIndex S_GROUP_INDEX #define SV_PRIMITIVEID S_PRIMITIVE_ID #define SV_IsFrontFace S_FRONT_FACE #define SV_Depth FRAG_OUTPUT_DEPTH #define FRAG_OUTPUT_COLOR S_TARGET_OUTPUT0 #define FRAG_OUTPUT_COLOR0 S_TARGET_OUTPUT0 #define FRAG_OUTPUT_COLOR1 S_TARGET_OUTPUT1 #define FRAG_OUTPUT_COLOR2 S_TARGET_OUTPUT2 #define FRAG_OUTPUT_COLOR3 S_TARGET_OUTPUT3 #define FRAG_OUTPUT_DEPTH S_DEPTH_OUTPUT //! Some defines to make textures compile with PSSL for now (sort out later) SamplerState globalSamplerState; SamplerComparisonState globalSamplerComparisonState { // Sampler state Filter = MIN_MAG_LINEAR_MIP_POINT; AddressU = CLAMP; AddressV = CLAMP; // Sampler comparison state ComparisonFunc = LESS; ComparisonFilter = COMPARISON_MIN_MAG_LINEAR_MIP_POINT; }; #define cbuffer ConstantBuffer #define sampler SamplerState #define sampler2D Texture2D #define sampler3D Texture3D #define samplerCUBE TextureCube #define tex2Dproj(a,b) a.Sample(globalSamplerState, (b).xy / (b).w) #define h1tex2Dproj(a,b) ((half)(a.Sample(globalSamplerState, (b).xy / (b).w).x)) #define h4tex2D(a,b) ((half4)a.Sample(globalSamplerState, (b).xy)) #define h4tex2Dlod(a,b) ((half4)a.SampleLOD(globalSamplerState, (b).xy, (b).w)) #define tex2D(a,b) a.Sample(globalSamplerState, (b).xy) #define SampleLevel SampleLOD #define SampleCmpLevelZero SampleCmpLOD0 #define StructuredBuffer RegularBuffer #define RWStructuredBuffer RW_RegularBuffer #define numthreads NUM_THREADS #define maxvertexcount MAX_VERTEX_COUNT #define groupshared thread_group_memory #define TriangleStream TriangleBuffer #define PointStream PointBuffer #define triangle Triangle #define IncrementCounter IncrementCount #define DecrementCounter DecrementCount #define GroupMemoryBarrierWithGroupSync ThreadGroupMemoryBarrierSync #define InterlockedMin AtomicMin #define InterlockedMax AtomicMax #define InterlockedAdd AtomicAdd #endif //! __ORBIS__ #if defined(PHYRE_D3DFX) && !defined(__ORBIS__) #define FRAG_OUTPUT_COLOR SV_TARGET #define FRAG_OUTPUT_COLOR0 SV_TARGET0 #define FRAG_OUTPUT_COLOR1 SV_TARGET1 #define FRAG_OUTPUT_COLOR2 SV_TARGET2 #define FRAG_OUTPUT_COLOR3 SV_TARGET3 #define FRAG_OUTPUT_DEPTH SV_DEPTH #define SYSTEM_PRIMITIVE_INDEX SV_PRIMITIVEID #endif //! defined(PHYRE_D3DFX) && !defined(__ORBIS__) #define D_D3D11_OTHER(x,y) x #define D_D3D11_ONLY(x) x #define POSITION_OUT POSITION #define FINAL_COLOR FRAG_OUTPUT_COLOR #else #define D_D3D11_OTHER(x,y) y #define D_D3D11_ONLY(x) #define HALF half #define HALF2 half2 #define HALF3 half3 #define HALF4 half4 #define HALF3x3 float3x3 #define HALF3x4 float3x4 #define HALF4x4 float4x4 #define POSITION_OUT POSITION #define FINAL_COLOR D_D3D11_OTHER(SV_TARGET0,COLOR) #endif #if defined(__psp2__) #define NATIVECOLOR __nativecolor #define REGFORMAT __regformat #else #define NATIVECOLOR #define REGFORMAT #endif #if !defined(__ORBIS__) && !defined(D_PLATFORM_GXM) BlendState NoBlend_BlendState { BlendEnable[0] = FALSE; }; BlendState Alpha_BlendState { BlendEnable[0] = TRUE; SrcBlend[0] = Src_Alpha; DestBlend[0] = Inv_Src_Alpha; BlendOp[0] = ADD; SrcBlendAlpha[0] = Src_Alpha; DestBlendAlpha[0] = Inv_Src_Alpha; BlendOpAlpha[0] = ADD; BlendEnable[1] = FALSE; }; BlendState Additive_BlendState { BlendEnable[0] = TRUE; SrcBlend[0] = Src_Alpha; DestBlend[0] = ONE; BlendOp[0] = ADD; SrcBlendAlpha[0] = Src_Alpha; DestBlendAlpha[0] = ONE; BlendOpAlpha[0] = ADD; BlendEnable[1] = FALSE; }; BlendState ParticleBlended_BlendState { BlendEnable[0] = TRUE; SrcBlend[0] = ONE; DestBlend[0] = Inv_Src_Alpha; BlendOp[0] = ADD; SrcBlendAlpha[0] = ONE; DestBlendAlpha[0] = Inv_Src_Alpha; BlendOpAlpha[0] = ADD; BlendEnable[1] = FALSE; }; DepthStencilState NoDepthTest_NoDepthWrite_DepthState { DepthEnable = FALSE; DepthWriteMask = Zero; DepthFunc = Less; StencilEnable = FALSE; }; DepthStencilState NoDepthTest_DepthWrite_DepthState { DepthEnable = FALSE; DepthWriteMask = All; DepthFunc = Less; StencilEnable = FALSE; }; DepthStencilState DepthTest_NoDepthWrite_DepthState { DepthEnable = TRUE; DepthWriteMask = Zero; DepthFunc = Less; StencilEnable = FALSE; }; DepthStencilState DepthTest_DepthWrite_DepthState { DepthEnable = TRUE; DepthWriteMask = All; DepthFunc = Less; StencilEnable = FALSE; }; RasterizerState NoCull_RasterizerState { CullMode=None; }; RasterizerState BackFaceCull_RasterizerState { CullMode=Back; FrontCounterClockwise = TRUE; }; RasterizerState FrontFaceCull_RasterizerState { CullMode=Front; FrontCounterClockwise = TRUE; }; #endif #if defined(D_PLATFORM_D3D11) || defined(D_PLATFORM_GNM) #define MatrixMul(a,b) mul(b,a) #define HALF float #define HALF2 float2 #define HALF3 float3 #define HALF4 float4 #define HALF3x3 float3x3 #define HALF3x4 float3x4 #define HALF4x4 float4x4 #define half float #define half2 float2 #define half3 float3 #define half4 float4 #else #define MatrixMul(a,b) mul(a,b) #endif // samplers #if defined(D_PLATFORM_D3D11) || defined(D_PLATFORM_GNM) sampler PointClampSampler : register(s8) { Filter = Min_Mag_Mip_Point; AddressU = Clamp; AddressV = Clamp; AddressW = Clamp; }; sampler LinearClampSampler : register(s9) { Filter = Min_Mag_Mip_Linear; AddressU = Clamp; AddressV = Clamp; AddressW = Clamp; }; sampler LinearWrapTSampler : register(s10) { Filter = Min_Mag_Mip_Linear; AddressU = Clamp; AddressV = Wrap; AddressW = Clamp; }; sampler LinearWrapSampler : register(s11) { Filter = Min_Mag_Mip_Linear; AddressU = Wrap; AddressV = Wrap; AddressW = Wrap; }; sampler PointWrapSampler : register(s12) { Filter = Min_Mag_Mip_Point; AddressU = Wrap; AddressV = Wrap; AddressW = Wrap; }; sampler AnisoClampSampler : register(s13) { Filter = ANISOTROPIC; AddressU = Clamp; AddressV = Clamp; AddressW = Clamp; MaxAnisotropy = 16; }; sampler LinearWrapAnisoSampler : register(s14) { Filter = ANISOTROPIC; AddressU = Wrap; AddressV = Wrap; AddressW = Wrap; MaxAnisotropy = 16; }; sampler PointWrapAnisoSampler : register(s15) { Filter = Min_Mag_Point_Mip_Linear; AddressU = Wrap; AddressV = Wrap; AddressW = Wrap; MaxAnisotropy = 16; }; #define SAMPLER_WRAP_ANISO LinearWrapAnisoSampler #define SAMPLER_WRAP_LINEAR LinearWrapSampler #define SAMPLER_WRAP_POINT PointWrapSampler #define SAMPLER_CLAMP_ANISO AnisoClampSampler #define SAMPLER_CLAMP_LINEAR LinearClampSampler #define SAMPLER_CLAMP_POINT PointClampSampler static const float kSRGB = 2.2f; #define SRGB_ON(x) pow(x,kSRGB) #define SRGB_OFF(x) x #define SAMPLETEX(tex,uv,filter,wrap,srgb) SRGB_##srgb(tex.Sample(SAMPLER_##wrap##_##filter, uv)) #ifdef __ORBIS__ #define D_DECLARE_TEXTURE2DMS_4(x) MS_Texture2D x #else #define D_DECLARE_TEXTURE2DMS_4(x) Texture2DMS x #endif #define D_DECLARE_TEXTURE2D_4(x) Texture2D x #define D_DECLARE_TEXTURE3D_4(x) Texture3D x #define D_DECLARE_TEXTURE_CUBE_4(x) TextureCube x #define D_SAMPLE_TEXTURE(tex,uv) tex.Sample(LinearClampSampler,uv) #define D_POINT_SAMPLE_TEXTURE(tex,uv) tex.Sample(PointClampSampler,uv) #define D_SAMPLE_TEXTURE_PROJ(tex,uv) tex.Sample(LinearClampSampler,(float2) (uv.xy / uv.w) ) #define D_POINT_SAMPLE_TEXTURE_PROJ(tex,uv) tex.Sample(PointClampSampler,(float2) (uv.xy / uv.w) ) #define D_SAMPLE_TEXTURE_3D(tex,uv) tex.Sample(LinearClampSampler,uv) #define D_SAMPLE_TEXTURE_WRAP_3D(tex,uv) tex.Sample(LinearWrapSampler,uv) #define D_H1_SAMPLE_TEXTURE(tex,uv) tex.Sample(LinearClampSampler,uv).x #define D_H2_SAMPLE_TEXTURE(tex,uv) tex.Sample(LinearClampSampler,uv).xy #define D_H3_SAMPLE_TEXTURE(tex,uv) tex.Sample(LinearClampSampler,uv).xyz #define D_H4_SAMPLE_TEXTURE(tex,uv) tex.Sample(LinearClampSampler,uv) #define D_H1_POINTSAMPLELEVEL_TEXTURE(tex,uv,lod) tex.SampleLevel(PointClampSampler,uv,lod).x #define D_H1_SAMPLELEVEL_TEXTURE(tex,uv,lod) tex.SampleLevel(LinearClampSampler,uv,lod).x #define D_H4_SAMPLELEVEL_TEXTURE(tex,uv,lod) tex.SampleLevel(LinearClampSampler,uv,lod) #if defined(D_PLATFORM_D3D11) #define D_H1_SAMPLE_SRGBTEXTURE(tex,uv) pow(tex.Sample(LinearClampSampler,uv).x,2.2f) #define D_H2_SAMPLE_SRGBTEXTURE(tex,uv) pow(tex.Sample(LinearClampSampler,uv).xy,2.2f) #define D_H3_SAMPLE_SRGBTEXTURE(tex,uv) pow(tex.Sample(LinearClampSampler,uv).xyz,2.2f) #define D_H4_SAMPLE_SRGBTEXTURE(tex,uv) float4( pow(tex.Sample(LinearClampSampler,uv).xyz,2.2f), tex.Sample(LinearClampSampler,uv).a ) #define D_H1_SAMPLE_WRAP_SRGBTEXTURE(tex,uv) pow(tex.Sample(LinearWrapSampler,uv).x,2.2f) #define D_H2_SAMPLE_WRAP_SRGBTEXTURE(tex,uv) pow(tex.Sample(LinearWrapSampler,uv).xy,2.2f) #define D_H3_SAMPLE_WRAP_SRGBTEXTURE(tex,uv) pow(tex.Sample(LinearWrapSampler,uv).xyz,2.2f) #define D_H4_SAMPLE_WRAP_SRGBTEXTURE(tex,uv) float4( pow(tex.Sample(LinearWrapSampler,uv).xyz,2.2f), tex.Sample(LinearWrapSampler,uv).a ) #define D_H4_SAMPLE_WRAPT_SRGBTEXTURE(tex,uv) float4( pow(tex.Sample(LinearWrapTSampler,uv).xyz,2.2f), tex.Sample(LinearWrapTSampler,uv).a) #define D_H3_SAMPLE_WRAP_ANISO_SRGBTEXTURE(tex,uv) pow( tex.Sample(LinearWrapAnisoSampler,uv).xyz, 2.2f) #else #define D_H1_SAMPLE_SRGBTEXTURE(tex,uv) tex.Sample(LinearClampSampler,uv).x #define D_H2_SAMPLE_SRGBTEXTURE(tex,uv) tex.Sample(LinearClampSampler,uv).xy #define D_H3_SAMPLE_SRGBTEXTURE(tex,uv) tex.Sample(LinearClampSampler,uv).xyz #define D_H4_SAMPLE_SRGBTEXTURE(tex,uv) tex.Sample(LinearClampSampler,uv) #define D_H1_SAMPLE_WRAP_SRGBTEXTURE(tex,uv) tex.Sample(LinearWrapSampler,uv).x #define D_H2_SAMPLE_WRAP_SRGBTEXTURE(tex,uv) tex.Sample(LinearWrapSampler,uv).xy #define D_H3_SAMPLE_WRAP_SRGBTEXTURE(tex,uv) tex.Sample(LinearWrapSampler,uv).xyz #define D_H4_SAMPLE_WRAP_SRGBTEXTURE(tex,uv) tex.Sample(LinearWrapSampler,uv) #define D_H4_SAMPLE_WRAPT_SRGBTEXTURE(tex,uv) tex.Sample(LinearWrapTSampler,uv) #endif #define D_H1_SAMPLE_WRAP_TEXTURE(tex,uv) tex.Sample(LinearWrapSampler,uv).x #define D_H2_SAMPLE_WRAP_TEXTURE(tex,uv) tex.Sample(LinearWrapSampler,uv).xy #define D_H3_SAMPLE_WRAP_TEXTURE(tex,uv) tex.Sample(LinearWrapSampler,uv).xyz #define D_H4_SAMPLE_WRAP_TEXTURE(tex,uv) tex.Sample(LinearWrapSampler,uv) #define D_H1_SAMPLE_WRAP_ANISO_TEXTURE(tex,uv) tex.Sample(LinearWrapAnisoSampler,uv).x #define D_H2_SAMPLE_WRAP_ANISO_TEXTURE(tex,uv) tex.Sample(LinearWrapAnisoSampler,uv).xy #define D_H3_SAMPLE_WRAP_ANISO_TEXTURE(tex,uv) tex.Sample(LinearWrapAnisoSampler,uv).xyz #define D_H4_SAMPLE_WRAP_ANISO_TEXTURE(tex,uv) tex.Sample(LinearWrapAnisoSampler,uv) #define D_H1_SAMPLE_POINT_WRAP_ANISO_TEXTURE(tex,uv) tex.Sample(PointWrapAnisoSampler,uv).x #define D_H2_SAMPLE_POINT_WRAP_ANISO_TEXTURE(tex,uv) tex.Sample(PointWrapAnisoSampler,uv).xy #define D_H3_SAMPLE_POINT_WRAP_ANISO_TEXTURE(tex,uv) tex.Sample(PointWrapAnisoSampler,uv).xyz #define D_H4_SAMPLE_POINT_WRAP_ANISO_TEXTURE(tex,uv) tex.Sample(PointWrapAnisoSampler,uv) #define D_H2_SAMPLE_TEXTURE_3D(tex,uv) tex.Sample(LinearClampSampler,uv).xy #define D_H2_SAMPLE_WRAP_TEXTURE_3D(tex,uv) tex.Sample(LinearWrapSampler,uv).xy #if defined(D_PLATFORM_D3D11) #define D_H3_SAMPLE_TEXTURE_CUBE(tex,uv) pow(tex.Sample(LinearClampSampler,uv).xyz,2.2f) #define D_H4_SAMPLE_TEXTURE_CUBE(tex,uv) float4( pow(tex.Sample(LinearClampSampler,uv).xyz,2.2f), tex.Sample(LinearClampSampler,uv).a ) #define D_SAMPLE_TEXTURE_CUBE(tex,uv) float4( pow(tex.Sample(LinearClampSampler,uv).xyz,2.2f), tex.Sample(LinearClampSampler,uv).a ) #else #define D_H3_SAMPLE_TEXTURE_CUBE(tex,uv) tex.Sample(LinearClampSampler,uv).xyz #define D_H4_SAMPLE_TEXTURE_CUBE(tex,uv) tex.Sample(LinearClampSampler,uv) #define D_SAMPLE_TEXTURE_CUBE(tex,uv) tex.Sample(LinearClampSampler,uv) #endif #else #define D_DECLARE_TEXTURE2D_4(x) sampler2D x #define D_DECLARE_TEXTURE3D_4(x) sampler3D x #define D_DECLARE_TEXTURE_CUBE_4(x) samplerCUBE x #define D_SAMPLE_TEXTURE(tex,uv) h4tex2D(tex,uv) #define D_POINT_SAMPLE_TEXTURE(tex,uv) h4tex2D(tex,uv) #define D_SAMPLE_TEXTURE_PROJ(tex,uv) h4tex2Dproj(tex,uv.xyw) #define D_POINT_SAMPLE_TEXTURE_PROJ(tex,uv) h4tex2Dproj(tex,uv.xyw) #define D_SAMPLE_TEXTURE_CUBE(tex,uv) h4texCUBE(tex,uv) #define D_SAMPLE_TEXTURE_3D(tex,uv) h4tex3D(tex,uv) #define D_SAMPLE_TEXTURE_WRAP_3D(tex,uv) h4tex3D(tex,uv) #define D_H1_SAMPLE_TEXTURE(tex,uv) h1tex2D(tex,uv).x #define D_H2_SAMPLE_TEXTURE(tex,uv) h2tex2D(tex,uv).xy #define D_H3_SAMPLE_TEXTURE(tex,uv) h3tex2D(tex,uv).xyz #define D_H4_SAMPLE_TEXTURE(tex,uv) h4tex2D(tex,uv) #define D_H1_POINTSAMPLELEVEL_TEXTURE(tex,uv,lod) h1tex2D(tex,uv).x #define D_H1_SAMPLELEVEL_TEXTURE(tex,uv,lod) h1tex2D(tex,uv).x #define D_H4_SAMPLELEVEL_TEXTURE(tex,uv,lod) h4tex2D(tex,uv) #define D_H1_SAMPLE_SRGBTEXTURE(tex,uv) h1tex2D(tex,uv).x #define D_H2_SAMPLE_SRGBTEXTURE(tex,uv) h2tex2D(tex,uv).xy #define D_H3_SAMPLE_SRGBTEXTURE(tex,uv) h3tex2D(tex,uv).xyz #define D_H4_SAMPLE_SRGBTEXTURE(tex,uv) h4tex2D(tex,uv) #define D_H1_SAMPLE_WRAP_TEXTURE(tex,uv) h1tex2D(tex,uv).x #define D_H2_SAMPLE_WRAP_TEXTURE(tex,uv) h2tex2D(tex,uv).xy #define D_H3_SAMPLE_WRAP_TEXTURE(tex,uv) h3tex2D(tex,uv).xyz #define D_H4_SAMPLE_WRAP_TEXTURE(tex,uv) h4tex2D(tex,uv) #define D_H1_SAMPLE_WRAP_ANISO_TEXTURE(tex,uv) h1tex2D(tex,uv).x #define D_H2_SAMPLE_WRAP_ANISO_TEXTURE(tex,uv) h2tex2D(tex,uv).xy #define D_H3_SAMPLE_WRAP_ANISO_TEXTURE(tex,uv) h3tex2D(tex,uv).xyz #define D_H4_SAMPLE_WRAP_ANISO_TEXTURE(tex,uv) h4tex2D(tex,uv) #define D_H1_SAMPLE_ANISO_TEXTURE(tex,uv) h1tex2D(tex,uv).x #define D_H2_SAMPLE_ANISO_TEXTURE(tex,uv) h2tex2D(tex,uv).xy #define D_H3_SAMPLE_ANISO_TEXTURE(tex,uv) h3tex2D(tex,uv).xyz #define D_H4_SAMPLE_ANISO_TEXTURE(tex,uv) h4tex2D(tex,uv) #define D_H1_SAMPLE_POINT_WRAP_ANISO_TEXTURE(tex,uv) h1tex2D(tex,uv).x #define D_H2_SAMPLE_POINT_WRAP_ANISO_TEXTURE(tex,uv) h2tex2D(tex,uv).xy #define D_H3_SAMPLE_POINT_WRAP_ANISO_TEXTURE(tex,uv) h3tex2D(tex,uv).xyz #define D_H4_SAMPLE_POINT_WRAP_ANISO_TEXTURE(tex,uv) h4tex2D(tex,uv) #define D_H1_SAMPLE_WRAP_SRGBTEXTURE(tex,uv) h1tex2D(tex,uv).x #define D_H2_SAMPLE_WRAP_SRGBTEXTURE(tex,uv) h2tex2D(tex,uv).xy #define D_H3_SAMPLE_WRAP_SRGBTEXTURE(tex,uv) h3tex2D(tex,uv).xyz #define D_H4_SAMPLE_WRAP_SRGBTEXTURE(tex,uv) h4tex2D(tex,uv) #define D_H4_SAMPLE_WRAPT_SRGBTEXTURE(tex,uv) h4tex2D(tex,uv) #define D_H2_SAMPLE_TEXTURE_3D(tex,uv) h2tex3D(tex,uv).xy #define D_H2_SAMPLE_WRAP_TEXTURE_3D(tex,uv) h2tex3D(tex,uv).xy #define D_H3_SAMPLE_TEXTURE_CUBE(tex,uv) h3texCUBE(tex,uv).xyz #define D_H4_SAMPLE_TEXTURE_CUBE(tex,uv) h4texCUBE(tex,uv) #endif #if !defined(GLOBAL_LEAN_AND_MEAN) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // these constants are system constants; uploaded by Phyre itself. // we can't do this, but we don't want to upload them all the time, either. consequently, we make these global // i guess we can eventually stuff these into a separate uniform buffer //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// float4x4 view : view ; // uploaded once per camera float4x4 projection : projection ; // view inverse float4x4 viewprojection : viewprojection ; float4 eyeDirectionWS : eyeDirectionWS ; float4 eyePositionWS : eyePositionWS ; float4 eyePositionOS : eyePositionOS ; float4 cameraNear : cameraNearFar ; float4x4 modelIT : modelit ; // uploaded per primitive // model inverse transpose float4x4 model : model ; float4x4 modelViewProj : modelviewproj ; #endif //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // depth conversion code, stolen from the sample code //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// float cameraNearTimesFar; float cameraFarMinusNear; float4 cameraNearFar; // Convert a depth value from post projection space to view space. float ConvertDepth(float depth) { // float viewSpaceZ = -(scene.cameraNearTimesFar / (depth * scene.cameraFarMinusNear - scene.cameraNearFar.y)); #if defined(D_PLATFORM_GXM) float viewSpaceZ = -(cameraNearTimesFar / (depth * cameraFarMinusNear - cameraNearFar.y)); #else float viewSpaceZ = -(cameraNearTimesFar / (depth * cameraFarMinusNear - cameraNearFar.y)); #endif return viewSpaceZ; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // skinning //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #ifdef SKINNING_ENABLED // grabbed off [PhyreCoreShaderShared.h] // Description: // Encapsulates the skinning transformation matrices. #if defined(D_PLATFORM_GXM) #define PE_MAX_SKIN_CB_TRANSFORMS 32 float4x4 boneTransforms[PE_MAX_SKIN_CB_TRANSFORMS]; float4x4 GenerateBoneMatrix(int4 SkinIndices,float4 SkinWeights) { return boneTransforms[SkinIndices[0]]*SkinWeights[0] + boneTransforms[SkinIndices[1]]*SkinWeights[1] + boneTransforms[SkinIndices[2]]*SkinWeights[2] + boneTransforms[SkinIndices[3]]*SkinWeights[3]; } #else #define PE_MAX_SKIN_CB_TRANSFORMS 32 struct PSkinTransforms { float4x4 Mtxs[PE_MAX_SKIN_CB_TRANSFORMS]; // The skinning transformation matrices. }; cbuffer BoneTransformConstantBuffer { PSkinTransforms SkinTransforms; } float4x4 GenerateBoneMatrix(uint4 SkinIndices,float4 SkinWeights) { return SkinTransforms.Mtxs[SkinIndices[0]]*SkinWeights[0] + SkinTransforms.Mtxs[SkinIndices[1]]*SkinWeights[1] + SkinTransforms.Mtxs[SkinIndices[2]]*SkinWeights[2] + SkinTransforms.Mtxs[SkinIndices[3]]*SkinWeights[3]; } #endif #endif //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// static const float4x4 SCALE_BIAS = float4x4( float4( 0.5, 0.0, 0.0, 0.5 ), #if defined(D_PLATFORM_D3D11) float4( 0.0, -0.5, 0.0, 0.5 ), #else float4( 0.0, 0.5, 0.0, 0.5 ), #endif float4( 0.0, 0.0, 0.5, 0.5 ), float4( 0.0, 0.0, 0.0, 1.0 ) ); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #ifdef D_PLATFORM_GXM #define D_INT_MOD(val,mod) (frac((floor((float)val)/mod))*mod) #define D_UINT_MOD(val,mod) (frac((floor((float)val)/mod))*mod) #elif defined(D_PLATFORM_GNM) #define D_INT_MOD(val,mod) ((int)floor(val) % mod) #define D_UINT_MOD(val,mod) ((uint)floor(val) % mod) #else #define D_INT_MOD(val,mod) ((int)floor(val) % mod) #define D_UINT_MOD(val,mod) ((int)floor(val) % mod) #endif //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #ifdef D_ENABLE_DEBUG_PARAMS float4 debugVars0; float4 debugVars1; float4 debugVars2; float4 debugVars3; float4 debugVars4; float4 debugVars5; float4 debugVars6; float4 debugVars7; #define GETDEBUGVAR(dv) (debugVars##dv!=0) ? (debugVars##dv) : #define GETDEBUGVAR2(dv,scl) (debugVars##dv!=0) ? (scl*debugVars##dv) : #endif #define powsafe(_x,_y) pow(max(_x,0.00000000000001),_y) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #endif//MIGRATORY_SH #line 334 "D:/Dev/TGC/Journey/head/Journey/Data/Shaders/S_Cloth_vs__Cloth_fs__16143.fx" #if defined(D_PLATFORM_GXM) #undef SAND #endif //#if defined(DUDE) // #define SAMPLE_ATLAS(a,b) D_H4_SAMPLE_WRAPT_SRGBTEXTURE(a,b) // #define SAMPLE_MASK(a,b) D_H4_SAMPLE_WRAPT_SRGBTEXTURE(a,b) //#elif defined(SCARF) // #define SAMPLE_ATLAS(a,b) D_H4_SAMPLE_SRGBTEXTURE(a,b) // #define SAMPLE_MASK(a,b) D_H4_SAMPLE_SRGBTEXTURE(a,b) //#else // #define SAMPLE_ATLAS(a,b) D_H4_SAMPLE_WRAP_SRGBTEXTURE(a,b) // #define SAMPLE_MASK(a,b) D_H4_SAMPLE_WRAP_SRGBTEXTURE(a,b) //#endif #if defined(DUDE) // WRAPT?? #define SAMPLE_ATLAS(a,b) SAMPLETEX(a,b, ANISO, WRAP, ON) #define SAMPLE_MASK(a,b) SAMPLETEX(a,b, ANISO, WRAP, ON) #elif defined(SCARF) #define SAMPLE_ATLAS(a,b) SAMPLETEX(a,b, ANISO, CLAMP, ON) #define SAMPLE_MASK(a,b) SAMPLETEX(a,b, ANISO, CLAMP, ON) #else #define SAMPLE_ATLAS(a,b) SAMPLETEX(a,b, ANISO, WRAP, ON) #define SAMPLE_MASK(a,b) SAMPLETEX(a,b, ANISO, WRAP, ON) #endif #ifndef D_PREPASS_ENABLED // PhyreEngine params: // LOD params: #ifdef D_PLATFORM_GXM D_DECLARE_TEXTURE2D_4(noise3dTexture); #else D_DECLARE_TEXTURE3D_4(noise3dTexture); #endif // Global env params: HALF4 l_c, l_s, l_a; #ifndef PHYRE3X_ENABLED HALF4 l_d; #endif HALF velvetInt, velvetRatio; // Global dude params: float4 localDudePos; float4 remoteDudePos; float localDudeGlow; float remoteDudeGlow; float4 specular; float alphaHardness; D_DECLARE_TEXTURE2D_4(textureAtlasA); D_DECLARE_TEXTURE2D_4(textureAtlasB); D_DECLARE_TEXTURE2D_4(textureMask); D_DECLARE_TEXTURE2D_4(textureDetail); #ifdef SCARF // These are the 'filled' versions of the textures. The 'scarfMeter' float is responsible for filling the scarf. D_DECLARE_TEXTURE2D_4(textureFilledA); D_DECLARE_TEXTURE2D_4(textureFilledB); #endif #ifdef PAINTING D_DECLARE_TEXTURE2D_4(texturePaintingChamMask); #endif ////#ifdef DECORATION ////#ifndef DUDE HALF inShadow; ////#endif HALF hsvHue; HALF hsvSaturation; HALF hsvValue; ////#endif ////#if defined( DUDE ) || defined( SCARF ) float dudeDissolve; float dudeSuperGlow; float dudeSnapGlow; float dudeSnapLevel; float4 dudeScarfRoot; float4 dudeCenter; ////#endif ////#ifdef DUDE float dudeColdness; ////#endif ////#ifdef SCARF // @HACK: Temporary solution to make the cape growing more visible. // Since cape growing is implemented using a vOffset, this is the approach we'll take. float vOffsetGlow; ////#endif ////#if defined( DECORATION ) && defined( DUDE ) float dudeDecoGlow; ////#endif // Sand params D_DECLARE_TEXTURE_CUBE_4(sandHiIrrCube); D_DECLARE_TEXTURE2D_4(sandSpecTexture); D_DECLARE_TEXTURE2D_4(sandSpecLut); #if defined( SAND ) D_DECLARE_TEXTURE2D_4(noiseSandTex); D_DECLARE_TEXTURE2D_4(heightTexture); float4 heightBiasUv; float4 heightScaleUv; float heightBiasY; D_DECLARE_TEXTURE2D_4(duneTexture); D_DECLARE_TEXTURE2D_4(duneColorTexture); float duneMaxShadowY; #endif // Environmental occlusion params #if defined( DUDE ) || defined( SCARF ) D_DECLARE_TEXTURE_CUBE_4(envOccCube); #endif //---------------------------------------------- // Helper functions //---------------------------------------------- float Luminance( float3 color ) { float3 luminance = float3(0.3, 0.59, 0.11); return dot(luminance, color); } float3 Saturation( float3 color, float satLevel ) { float intensity = Luminance( color ); return lerp( float3( intensity, intensity, intensity ), color, satLevel ); } float ClothStep( float t, float x ) { #if defined(D_PLATFORM_GNM) return step(t,x); #else return (float)(x >= t); #endif } float ChamStep( float min, float max, float input ) { return saturate( (input - min) / (max - min) ); } float ChamAmount( float uvValue, float uvCham, float uvMin, float uvMax, float uvMask, float chamStepAmount ) { float uvRange = uvMax - uvMin; float chamBase = saturate( ((2 + chamStepAmount) * uvCham - (( uvValue - uvMin ) / uvRange)) - uvMask ); return ChamStep( 0.0, chamStepAmount, chamBase ); } HALF OrenNayarDiffuse( HALF3 light, HALF3 view, HALF3 norm, HALF roughness ) { HALF VdotN = dot( view, norm ); HALF LdotN = dot( light, norm ); HALF cos_theta_i = LdotN; HALF theta_r = acos( VdotN ); HALF theta_i = acos( cos_theta_i ); HALF cos_phi_diff = dot( normalize( view - norm * VdotN ), normalize( light - norm * LdotN ) ); HALF alpha = max( theta_i, theta_r ) ; HALF beta = min( theta_i, theta_r ) ; HALF sigma2 = roughness * roughness; HALF A = 1.0 - 0.5 * sigma2 / (sigma2 + 0.33); HALF B = 0.45 * sigma2 / (sigma2 + 0.09); return saturate( cos_theta_i ) * (A + (B * saturate( cos_phi_diff ) * sin(alpha) * tan(beta))); } #endif//D_PREPASS_ENABLED float GetChamStepAmount( HALF frozen ) { // Step amount gets larger if we're frozen float frozenStep = 0.5; #ifdef SCARF frozenStep = 0.5; #endif float stepAmount = lerp( 0.05, frozenStep, frozen ); #ifdef PAINTING stepAmount = 0.15; #endif #ifdef DUDE stepAmount = lerp( 0.1, 0.75, frozen ); #endif return stepAmount; } float ComputeCham( float2 uv, float uvCham, float vMin, float vMax, float uvMask, float dirUpMult, float dirRightMult, float dirOmniMult, float chamStepAmount ) { float sideUV = uv[0]; float upUV = uv[1]; // The Dude's cape is UV'd sideways so that it can tile horizontally #if defined(DUDE) && !defined(DECORATION) sideUV = uv[1]; upUV = saturate( ( uv[0] - 0.075 ) / ( 0.25 - 0.075 ) ); vMin = 0.0; vMax = 1.0; #endif float chamAmountUp = ChamAmount( upUV, uvCham, vMin, vMax, uvMask, chamStepAmount ); // We assume that all cloth has a uRange from 0 to 0.25 float chamAmountRight = ChamAmount( sideUV, uvCham, 0, 0.25, uvMask, chamStepAmount ); float chamAmountAll = ChamAmount( 0, uvCham, 0, 1, uvMask * 2, chamStepAmount ); return max( max( chamAmountUp * dirUpMult, chamAmountRight * dirRightMult ), chamAmountAll * dirOmniMult ); } struct v2f { float4 position : POSITION_OUT; HALF4 color : COLOR0; float3 normal : TEXCOORD0; HALF4 uv : TEXCOORD1; float4 worldPos : TEXCOORD2; float4 eye : TEXCOORD3; HALF4 extra : TEXCOORD4; HALF4 extra2 : TEXCOORD5; HALF4 extra3 : TEXCOORD6; HALF4 extra4 : COLOR1; HALF3 fresSsL : TEXCOORD7; #if defined(D_PLATFORM_D3D11) || defined(D_PLATFORM_GNM) bool isFrontFace : SV_IsFrontFace; #else float faceVal : FACE; #endif // float wpos : WPOS; }; struct f2f { HALF4 color : FINAL_COLOR; }; //---------------------------------------------- // Program entry //---------------------------------------------- void main( in v2f IN, out f2f OUT ) { //------------------------------------------ // Pull in some variables one way or another #if defined(D_PLATFORM_D3D11) float face = IN.isFrontFace ? -1.f : 1.f; #elif defined(D_PLATFORM_GNM) float face = IN.isFrontFace ? -1.f : 1.f; #else float face = IN.faceVal; #endif // IN.color.rgb is used to pass in additional parameters, not for color float4 color = float4( 1, 1, 1, 1 ); float abBlend = IN.extra[0]; float uvBlend = IN.extra[1]; float vOffset = IN.extra[2]; float scarfMeter = IN.extra[3]; HALF vMin = IN.extra2[0]; HALF vMax = IN.extra2[1]; HALF uScaleMult = IN.extra2[2]; HALF vScaleMult = IN.extra2[3]; HALF invisFrom = IN.extra3[0]; HALF invisTo = IN.extra3[1]; HALF chamDirUp = IN.extra3[2]; HALF chamDirRight = IN.extra3[3]; HALF chamDirOmni = 1 - max( chamDirUp, chamDirRight ); // Omni is active when neither Up or Right are active HALF chamEdgeMult = IN.extra4[0]; HALF innerSpec = IN.extra4[1]; HALF frozen = IN.extra4[2]; HALF dirty = IN.extra4[3]; HALF hue = IN.color[0]; HALF saturation = IN.color[1]; HALF value = IN.color[2]; float4 uv = IN.uv; // We have to initialize many variables if it's a Decoration, since we don't have per-vertex game data #ifdef DECORATION uScaleMult = 1.0; vScaleMult = 1.0; abBlend = 0.0; uvBlend = 0.0; chamDirUp = 1; chamDirRight = 0; chamDirOmni = 0; innerSpec = 1; frozen = 0; #ifdef DUDE abBlend = dudeDecoGlow; uScaleMult = 0.05; vScaleMult = 0.05; // Dude texture was doubled in width to include the frozen effect uv[0] /= 2.0; uv[2] /= 2.0; #ifdef FROZEN uvBlend = 1.0 - dudeColdness; frozen = 1; #endif #else dirty = 0; #endif vOffset = 0.0; chamEdgeMult = 0.0; vMin = 0.0; vMax = 1.0; invisFrom = 1.0; invisTo = 1.0; hue = hsvHue; saturation = hsvSaturation / 2.0; value = hsvValue / 2.0; #else #ifdef DUDE // Dude cloth texture was halved in width -- only need 2 channels uv[ 0 ] *= 2.0; uv[ 2 ] *= 2.0; #endif #endif #if defined(DUDE) && defined(FROZEN) // Make specular pixels smaller for the frozen effect on the dude uScaleMult = lerp( uScaleMult, uScaleMult * 1.5, frozen ); vScaleMult = lerp( vScaleMult, vScaleMult * 1.5, frozen ); #endif #if defined(SAND) && (!defined(DECORATION) || defined(FROZEN)) // On a frozen guy, the dirty effect looks like ice crystals, so we pump it up with frozeness. dirty = max( dirty, saturate( 2.0 * (1.0 - uvBlend) * frozen ) ); #endif float2 uvOffSrc = float2( uv[2], vOffset ); float2 uvOffDst = float2( uv[3], vOffset ); #if defined(DECORATION) && defined(DUDE) && defined(FROZEN) // Point offset to frozen portion of the Dude's texture (ClothNinja) uvOffSrc = float2( 0.5, vOffset ); uvOffDst = float2( 0.0, vOffset ); #endif float3 Ln = normalize( l_d.xyz ); float3 Nn = normalize( IN.normal.xyz * face ); float3 Vn = normalize( IN.eye.xyz ); float3 Hn = normalize( Vn + Ln ); //------------------------------------------ // Read in surface textures HALF4 maskColor = HALF4( 1, 1, 1, 1 ); // Read mask layer #ifdef DECORATION // Decoration is a straightforward mask application directly matching the UVs of the mesh maskColor = SAMPLE_MASK( textureMask, IN.uv.xy ); #else // For cloth, it's more complex. // We multiply by 4 to re-normalize UV.x to 0-1, where as normally it's in the range of 0-0.25 or 0-0.5, depending on MAX_CHANNELS. // Really, we should do this re-normalization in the vertex shader based on MAX_CHANNELS and pass through the new UVs in another stream. // The only batches with MAX_CHANNELS != 4 are Ancestors and Paintings, neither of which are likely to use masks, for now. // Scarf needs a special cham-blend of mask colors between two channels; see below. float channels = 4.0; #ifdef DUDE channels = 2.0; #endif maskColor = SAMPLE_MASK( textureMask, float2( uv.x * channels, uv.y + vOffset ) ); #endif // Read and layer the detail texture many times. // The detail acts as both an offset into the texture atlas lookup and a color shift. float detUvMult = 9.0; #ifdef DUDE detUvMult = 12.0; #endif #ifdef SCARF detUvMult = 4.0; #endif float2 detUv = IN.uv.xy * detUvMult * float2( uScaleMult, vScaleMult ); HALF4 detailColor = 0.25 * (D_H4_SAMPLE_WRAP_TEXTURE( textureDetail, 17.0 * detUv ) + D_H4_SAMPLE_WRAP_TEXTURE( textureDetail, 3*17.0 * detUv.yx ) + D_H4_SAMPLE_WRAP_TEXTURE( textureDetail, 237.0 * detUv ) + D_H4_SAMPLE_WRAP_TEXTURE( textureDetail, 3.0*237.0 * detUv.yx )); HALF4 detailColorLow = 0.5 * (D_H4_SAMPLE_WRAP_TEXTURE( textureDetail, 0.5 * detUv ) + D_H4_SAMPLE_WRAP_TEXTURE( textureDetail, 1.5 * detUv.yx )); //HALF4 detailColor = 0.25 * (D_H4_SAMPLE_WRAP_ANISO_TEXTURE( textureDetail, 17.0 * detUv ) + D_H4_SAMPLE_WRAP_ANISO_TEXTURE( textureDetail, 3*17.0 * detUv.yx ) + D_H4_SAMPLE_WRAP_ANISO_TEXTURE( textureDetail, 237.0 * detUv ) + D_H4_SAMPLE_WRAP_ANISO_TEXTURE( textureDetail, 3.0*237.0 * detUv.yx )); //HALF4 detailColorLow = 0.5 * (D_H4_SAMPLE_WRAP_ANISO_TEXTURE( textureDetail, 0.5 * detUv ) + D_H4_SAMPLE_WRAP_ANISO_TEXTURE( textureDetail, 1.5 * detUv.yx )); uv.xy += 0.004 * (detailColor.rg - 0.5); // Cloth LOD opacity is passed in through IN.color.a. #ifdef D_PLATFORM_GXM HALF noise = D_H1_SAMPLE_WRAP_TEXTURE( noise3dTexture, 0.1 * IN.worldPos.xy ).r; #else HALF noise = D_H2_SAMPLE_WRAP_TEXTURE_3D( noise3dTexture, 0.1 * IN.worldPos.xyz ).r; #endif IN.color.a = ClothStep( noise, IN.color.a ); // If a texture tap isn't going to be used, consolidate the UVs to conserve texture cache. uvOffDst = uvBlend == 0.0 ? uvOffSrc : uvOffDst; uvOffSrc = uvBlend == 1.0 ? uvOffDst : uvOffSrc; float2 aColor1Uv = uv.xy + uvOffSrc; float2 aColor2Uv = uv.xy + uvOffDst; float2 bColor1Uv = uv.xy + uvOffSrc; float2 bColor2Uv = uv.xy + uvOffDst; bColor1Uv = abBlend == 0.0 ? 0.0 : bColor1Uv; bColor2Uv = abBlend == 0.0 ? 0.0 : bColor2Uv; aColor1Uv = abBlend == 1.0 ? 0.0 : aColor1Uv; aColor2Uv = abBlend == 1.0 ? 0.0 : aColor2Uv; float4 aColor1 = SAMPLE_ATLAS( textureAtlasA, aColor1Uv ); float4 aColor2 = SAMPLE_ATLAS( textureAtlasA, aColor2Uv ); float4 bColor1 = SAMPLE_ATLAS( textureAtlasB, bColor1Uv ); float4 bColor2 = SAMPLE_ATLAS( textureAtlasB, bColor2Uv ); aColor1.a *= invisFrom; aColor2.a *= invisTo; bColor1.a *= invisFrom; bColor2.a *= invisTo; //------------------------------------------ // Various cham effects // Cham effect from uvBlend // TODO: Needs to achieve blocky fabric-weaving effect float chamMask = 0.5 * detailColor.a + 0.5 * detailColorLow.a; #ifdef SCARF chamMask = saturate( (chamMask - 0.25) * 2 ) * 0.125; #endif #ifdef PAINTING // Paintings use a special texture for the cham mask. Because we know that paintings are UV'd at 1/4th the width of the cloth texture, // and we want to use the largest chunk of the cham mask texture as possible, we will re-scale our UVs by 4 to do so chamMask = D_H1_SAMPLE_WRAP_TEXTURE( texturePaintingChamMask, uv.xy * 4 ).r; #endif float stepAmount = GetChamStepAmount( frozen ); float chamMaskAmount = lerp( chamMask, maskColor.a, frozen ); float2 chamVals = uv.xy; #if defined(DUDE) // For the Dude mesh, instead of using UVs for the cham effect, look into a texture instead chamVals = float2( maskColor.a, maskColor.a ); #endif float chamAmount = ComputeCham( chamVals, uvBlend, vMin, vMax, chamMaskAmount, chamDirUp, chamDirRight, chamDirOmni, stepAmount ); #ifdef SCARF chamAmount = saturate( (chamAmount - 0.75) * 4 ); // Also, if frozen, cham a little from the neck (backwards) to blend with the head piece float2 neckUV = float2( uv.x, vMax - uv.y ); float chamBack = ComputeCham( neckUV, max(uvBlend, 0.7), vMin, vMax, chamMaskAmount, chamDirUp, chamDirRight, chamDirOmni, stepAmount ); chamBack = saturate( (chamBack - 0.75) * 4 ); chamAmount = lerp( chamAmount, min(chamAmount, chamBack), frozen ); #endif float4 aColor = lerp( aColor1, aColor2, chamAmount ); float4 bColor = lerp( bColor1, bColor2, chamAmount ); // For the Scarf, we have to do a second stage of cham logic for the filled versions of the cape. #ifdef SCARF // Filled meter cham // ------------------------------------------ float4 aFilledColor1 = D_H4_SAMPLE_SRGBTEXTURE( textureFilledA, uv.xy + uvOffSrc ); float4 aFilledColor2 = D_H4_SAMPLE_SRGBTEXTURE( textureFilledA, uv.xy + uvOffDst ); float4 bFilledColor1 = D_H4_SAMPLE_SRGBTEXTURE( textureFilledB, uv.xy + uvOffSrc ); float4 bFilledColor2 = D_H4_SAMPLE_SRGBTEXTURE( textureFilledB, uv.xy + uvOffDst ); float4 aFilledColor = lerp( aFilledColor1, aFilledColor2, chamAmount ); float4 bFilledColor = lerp( bFilledColor1, bFilledColor2, chamAmount ); float filledStepAmount = GetChamStepAmount( 0 ); float filledMaskAmount = chamMask; float2 filledVals = uv.xy; float filledAmount = ComputeCham( filledVals, scarfMeter, vMin, vMax, filledMaskAmount, chamDirUp, chamDirRight, chamDirOmni, filledStepAmount ); filledAmount = saturate( (filledAmount - 0.75) * 4 ); aColor = lerp( aColor, aFilledColor, filledAmount ); bColor = lerp( bColor, bFilledColor, filledAmount ); // Edge effects // ------------------------------------------ // Edge effect to highlight meter boundaries float scarfEdgeAmount = pow( 1 - 2 * abs( filledAmount - 0.5 ), 2 ); // Special cham effect to highlight the cape growing. // This effect is enabled via controlling the vOffsetGlow global parameter to the Cape cloth shader. float vOffsetGlowAmt = saturate( ((2 * uv[1]) - (1 - vOffset)) / (1 - vOffset) ); float scarfGrowAmount = pow( saturate(vOffsetGlowAmt - 0.75) * 8, 3 ) * vOffsetGlow; aColor = lerp( aColor, float4( 1, 1, 0.5, aColor.a ) * 15, max( scarfEdgeAmount * ChamStep( 0.05, 0.06, scarfMeter ), scarfGrowAmount ) ); bColor = lerp( bColor, float4( 1, 1, 0.5, bColor.a ) * 15, max( scarfEdgeAmount * ChamStep( 0.05, 0.06, scarfMeter ), scarfGrowAmount ) ); // Mask // ------------------------------------------ // Re-read mask based on filled state // We do some really nasty special case logic here for hue masking because the cape has a FULL and EMPTY state, each of which needs its own mask! Rather than every channel // sharing the same mask, the cape texture has 2 channel 'pairs', red - full, empty (channels 0 and 1), and white - full, empty (channels 2, 3). // Each pair needs HALF of the mask texture, and we need to cham between them based on how full or empty the cape is. HALF4 mask1 = SAMPLE_MASK( textureMask, float2( uv.x * 2.0, uv.y + uvOffSrc[1] ) ); HALF4 mask2 = SAMPLE_MASK( textureMask, float2( uv.x * 2.0 + 0.5, uv.y + uvOffSrc[1] ) ); maskColor = lerp( mask1, mask2, (HALF)(1.0 - filledAmount) ); // @TODO: Fix the problem w/ mipmapping that this hack masks if( uv.y > 1.0 - vOffset ) { #ifdef ALPHATESTENABLE clip(-1.f); #else OUT.color.rgb = float3( 1, 0, 1 ); OUT.color.a = 0; return; #endif } #endif HALF colorDiff = 1.0; #ifdef PAINTING // This will make the cham edge effect only appear on sections of the cloth that are changing via the cham effect // @HACK: This is a hack that assumes a greyscale painting. We should use the painting alpha channel, or something, to mask off the cham edge effect instead HALF aColorDiff = saturate( abs(aColor1 - aColor2) * 100 ).r; HALF bColorDiff = saturate( abs(bColor1 - bColor2) * 100 ).r; HALF abColorDiff = saturate( abs(aColor - bColor) * 100 ).r; // This is a bit convoluted: If we're solidly on the A or B layers, the pixel difference we're interested is simply on the A or B layers. // If we're in the process of switching layers (abBlend is moving), we're interested in the ab pixel difference colorDiff = ( (float)(abBlend == 0) * aColorDiff ) + ( (float)(abBlend == 1) * bColorDiff ) + ( (float)(abBlend > 0 && abBlend < 1) * abColorDiff ); #endif // Cham edge effect float chamEdgeAmount = pow( 1 - 2 * abs( chamAmount - 0.5 ), 2 ) * (float)colorDiff; // Apply cham edge effect aColor = lerp( aColor, float4( 1, 1, 0.5, aColor.a ) * 75, chamEdgeAmount * chamEdgeMult ); bColor = lerp( bColor, float4( 1, 1, 0.5, bColor.a ) * 75, chamEdgeAmount * chamEdgeMult ); // Compute final color, taking into account cham and cross-fade with glow texture #ifndef PAINTING // Crossfade effect from abBlend, typically used for 'glowing' cloth -- only A layer controls alpha. // abBlend can be above 1, which will apply an overbright effect color = lerp( aColor, bColor, abBlend ) * ( 1.0 + max( abBlend - 1.0, 0.0 ) ); #else // for Paintings, we just apply a cham effect when both blending within texA, and between texA and texB (rather than the cross-fade) // TODO: There's a bug where the chamEdgeEffect, applied above, uses uvBlend to compute itself, rather than abBlend when abBlend is used. chamAmount = ComputeCham( uv.xy, abBlend, vMin, vMax, chamMask, chamDirUp, chamDirRight, chamDirOmni, 0.15 ); color = lerp( aColor, bColor, chamAmount ); #endif #if defined( DECORATION ) && !defined( DUDE ) // Don't increase whiteness on decorations (ancestors, etc). Looks bad. #else #if defined( DUDE ) || defined( SCARF ) // Glow masks above 0.5 are extra glowy! HALF glowMask = saturate( 2.0 * maskColor.g ); HALF eyeMask = saturate( 2.0 * maskColor.g - 1.0 ); color.rgb = lerp(color.rgb, color.rgb * 15, saturate(max(eyeMask, abBlend * glowMask)) * lerp( 1.0, 0.0, frozen * (1.0 - chamAmount) ) ); #else #if defined( PAINTING ) // @HACK: For all the paintings if the texture color is close to white, we blow up the intensity to make it glow // This looks pretty bad and increases banding... why are we doing this? color.rgb = lerp(color.rgb, color.rgb * 15, ChamStep(0.5, 1.0, Luminance(color.rgb)) ); #else // Mask blue has regular glow mask, mask green has frozen glow mask... very inconsistent from the Dude color.rgb = lerp(color.rgb, color.rgb * 15, abBlend * saturate(lerp(maskColor.b, maskColor.g, frozen ? 1.0 - chamAmount : 0))); #endif #endif #endif // Try to blend the base of the scarf with the mesh. #ifdef SCARF HALF3 scarfBaseColor1 = SAMPLE_ATLAS( textureAtlasA, float2( uvOffSrc.x + 80.0/512.0, 1.0/2048.0 ) ).xyz; HALF3 scarfBaseColor2 = SAMPLE_ATLAS( textureAtlasA, float2( uvOffDst.x + 80.0/512.0, 1.0/2048.0 ) ).xyz; HALF3 scarfBaseColor = lerp( scarfBaseColor1, scarfBaseColor2, (HALF)chamAmount ); HALF scarfBaseBlend = saturate( 400 * uv.y - 11.5 ); color.rgb = lerp( scarfBaseColor, color.rgb, scarfBaseBlend ); #endif // Detail color shift color.rgb *= 0.5 + detailColor.rgb; // Looks better brighter!!!! color.rgb *= 1.25; //------------------------------------------ // Calculate AO contributions. float bright_irradience = 1.0; float dark_irradience = 1.0; #if defined( AO ) && !defined( DUDE ) && !defined( SCARF ) float3 occPos[ 2 ] = { localDudePos.xyz, remoteDudePos.xyz }; float occRad[ 2 ] = { 0.8, 0.8 }; float occLerp[ 2 ] = { localDudeGlow, remoteDudeGlow }; for( int i = 0; i < 2; i++ ) { HALF3 toDude = (occPos[ i ] - IN.worldPos.xyz) * float3( 1.0, 0.65, 1.0 ); // Stretch occlusion spheres to better approximate a standing man. HALF dudeDist = length( toDude ); bright_irradience += 1.25 * ( 1 / (dudeDist * dudeDist)) * occLerp[ i ]; // Distance-based HALF rd = saturate( occRad[ i ] - dudeDist ) / occRad[ i ]; dark_irradience *= saturate( 1.0 - rd * rd * 1.25 * (1.0 - occLerp[ i ]) ); } #endif //------------------------------------------ // Calculate sand contributions. HALF sideIntensity = 0; HALF shadow = 1; HALF3 duneLitColor = 0; #if defined( SAND ) float2 heightUV = (float2( IN.worldPos.x, IN.worldPos.z ) + heightBiasUv.xy) * heightScaleUv.xy; HALF heightTap = D_SAMPLE_TEXTURE( heightTexture, heightUV ).r; HALF aboveDunes = IN.worldPos.y - (heightBiasY + (float)heightTap); sideIntensity = saturate( 1.25 - 10.0 * aboveDunes ); sideIntensity *= sideIntensity; // Read the sand grain texture. float2 sandUV = 16 * float2( uv.x * uScaleMult, uv.y * vScaleMult ); HALF3 sandNoiseTap = 2.0 * (D_H3_SAMPLE_POINT_WRAP_ANISO_TEXTURE( noiseSandTex, sandUV ) - 0.5); HALF sandNoise = sandNoiseTap.x; // Use the grain texture to distort the normal based on dirtiness. Nn = normalize( 3.5 * Nn + dirty * sandNoiseTap ); // Load the dune color. const float terrainScale = 0.5; float2 duneUvBias = float2( (1 - 0.5 / 256.0), 0.5 / 512.0 ); float2 duneUvScale = float2( -terrainScale / 256.0, terrainScale / 512 ); float2 duneUv = duneUvBias + duneUvScale * IN.worldPos.xz; //HALF4 duneTap = D_H4_SAMPLE_SRGBTEXTURE( duneTexture, duneUv ); HALF4 duneTap = SAMPLETEX( duneTexture, duneUv, ANISO, WRAP, ON ); // By sampling the shadow map at points determined by the light direction, // we can get a pretty good idea whether or not this pixel should be in shadow. float2 shadowBackPos = IN.worldPos.xz - (Ln * aboveDunes / Ln.y).xz; //HALF4 shadowBackTap = D_H4_SAMPLE_SRGBTEXTURE( duneTexture, duneUvBias + duneUvScale * shadowBackPos ); HALF4 shadowBackTap = SAMPLETEX( duneTexture, duneUvBias + duneUvScale * shadowBackPos, ANISO, WRAP, ON ); float2 shadowFrontPos = IN.worldPos.xz + (Ln * aboveDunes / Ln.y).xz; //HALF4 shadowFrontTap = D_H4_SAMPLE_SRGBTEXTURE( duneTexture, duneUvBias + duneUvScale * shadowFrontPos ); HALF4 shadowFrontTap = SAMPLETEX( duneTexture, duneUvBias + duneUvScale * shadowFrontPos, ANISO, WRAP, ON ); shadow = saturate( 10 * (max( shadowBackTap.a, shadowFrontTap.a ) - (0.04*sandNoise + 0.23) ) ); shadow = max( shadow, saturate( 4.0 * duneTap.a ) ); shadow = max( shadow, saturate( 0.5 * (aboveDunes - duneMaxShadowY) ) ); // Load the pre-lit dune color and velvet. float2 litUV = heightUV; HALF4 litTap = D_H4_SAMPLE_TEXTURE( duneColorTexture, litUV ); HALF3 litColor = 4.0 * litTap.rgb * litTap.rgb; HALF velvDune = litTap.a; HALF velvMesh = saturate( 1.12 - abs( dot( Vn, 4.0 * Nn ) ) ); velvDune *= 0.333 * sandNoise; velvMesh *= 0.333 + 0.333 * sandNoise; HALF3 duneColor = (1.0 + velvMesh) * duneTap.rgb; duneLitColor = (1.0 + velvDune) * litColor; // Add some texture to the dirtiness. dirty *= saturate( 1.3 * detailColor.b * detailColorLow.g ); // Apply sand color to the cloth where it's dirty. color.rgb = lerp( color.rgb, duneColor, (0.5 + 0.2 * frozen) * dirty ); #endif //------------------------------------------ // Lighting // Use the detail texture to perturb the normal very slightly. Nn = normalize( Nn + 0.5 * (detailColor.rgb - 0.5) ); // Calculate diffuse and specular multipliers. HALF diffuse = OrenNayarDiffuse( Ln, Vn, Nn, 0.5 ); HALF subSurface = OrenNayarDiffuse( -Ln, Vn, Nn, 0.5 ); HALF fresnel = IN.fresSsL.x; HALF a = sqrt( 2.0 / 3.14159268 ); HALF schlickSmithShadow = 0.8 * 1.0 / ((diffuse * (1.0 - a) + a) * (dot( Nn, Vn ) * (1.0 - a) + a)); HALF specPow = 0.0; HALF specLight = powsafe( saturate( dot( Nn, Hn ) ), specPow ); HALF _specular = (8.0 + specPow) / 25.0 * fresnel * schlickSmithShadow * specLight * diffuse; // Figure out all the various occlusion terms. HALF3 envOcc = 1.0; HALF3 specEnvOcc = 1.0; HALF3 lightEnvOcc = 1.0; #if defined( DUDE ) || defined( SCARF ) envOcc = 8.0 * D_H3_SAMPLE_TEXTURE_CUBE( envOccCube, Nn ); HALF3 Rn2 = 2.0 * dot( Nn, Vn ) * Nn - Vn; specEnvOcc = 8.0 * D_H3_SAMPLE_TEXTURE_CUBE( envOccCube, Rn2 ); lightEnvOcc = D_H4_SAMPLE_TEXTURE_CUBE( envOccCube, Ln ).a; #endif HALF selfOcclusion = 1.0; #if defined( DUDE ) || defined( SCARF ) selfOcclusion *= maskColor.b; #endif HALF subSurfaceOcc = IN.fresSsL.y; HALF specOcc = 1.0; specOcc *= saturate( 2.0 * (detailColor.r - 0.5) + 0.5 ); specOcc *= saturate( 1.0 + innerSpec + face ); specOcc *= selfOcclusion; HALF3 albedo = color.rgb; // With physically-based lighting, albedo should never go below ~0.04 ... // Direct lighting values HALF3 lightInt = shadow * l_c.rgb; HALF3 specInt = shadow * l_s.rgb; // Ambient diffuse values HALF3 fillColor = D_H3_SAMPLE_TEXTURE_CUBE( sandHiIrrCube, Nn ); // Calculate a rougher ambient specular (basically a velvet) HALF3 Rn = 2.0 * dot( Nn, Vn ) * Nn - Vn; float ambSpecRough = 0.0; HALF ambSpecInt = D_H1_SAMPLE_SRGBTEXTURE( sandSpecLut, float2( dot( Nn, Vn ), ambSpecRough ) ); HALF3 ambSpecColor = D_H3_SAMPLE_SRGBTEXTURE( sandSpecTexture, float2( Rn.y, ambSpecRough ) ); HALF3 ambSpec = 0.1 * ambSpecInt * ambSpecColor; HALF3 result = 0; // Diffuse direct #if defined( DUDE ) || defined( SCARF ) HALF slight = IN.fresSsL.z; result += albedo * lightInt * slight * lightEnvOcc; #else result += albedo * lightInt * lightEnvOcc * diffuse; #endif // Diffuse ambient result += albedo * fillColor * envOcc; // Subsurface HALF ss = saturate( dot( Nn, Vn ) * subSurface ) * dot( l_c.rgb, HALF3(0.3,0.59,0.11) ) * 0.55; HALF3 ssAlbedo = lerp( dot( albedo, float3(0.3,0.59,0.11) ).xxx, albedo, 1.0 + ss ); result += ssAlbedo * (lightInt * subSurfaceOcc * lightEnvOcc * ss * ss); // Specular direct result += specInt * _specular * lightEnvOcc * specOcc; // Specular rim (ambient) result += ambSpec * specEnvOcc * specOcc; // Direct rim result += albedo * lightInt * diffuse * lightEnvOcc * selfOcclusion * saturate( 1.0 - abs( dot( Vn, Ln ) - 0.2 ) ) * ambSpecInt; // Ambient rim result += albedo * fillColor * envOcc * selfOcclusion * ambSpecInt; // If sand is attached to the cloth, have it glitter. #if defined( SAND ) HALF3 Nns = normalize( 1.5 * Nn + sandNoiseTap ); HALF sparkle = 2.0 * pow( saturate( 1.0 - abs( dot( Vn, normalize(Nns+0.25*Vn) ) ) ), 8.0 ); result += dirty * sparkle * ambSpecColor * shadow * specOcc; #endif // Fold in AO result *= bright_irradience * dark_irradience; // Fold in sand result = lerp( result, duneLitColor, sideIntensity ); // Super glow! #if defined( DUDE ) || defined( SCARF ) result = lerp( result, HALF3(500, 350, 100) * .3, (HALF)dudeSuperGlow ); #endif // Snap glow! #if defined( DUDE ) || defined( SCARF ) #if defined( DUDE ) HALF rootDist = length( dudeScarfRoot.xyz - IN.worldPos.xyz ); float snapT = 0.333 * rootDist; #else float snapT = IN.uv.y; #endif float snapLevelMin = -0.2f; float snapLevelMax = 0.2f; float snapLevelInput = snapT - dudeSnapLevel + 0.2 * (detailColor.r - 0.5); float snapCham = ChamStep( snapLevelMin, snapLevelMax, snapLevelInput ); #if defined( DUDE ) HALF rootFalloff = saturate( 1.0 - rootDist ); snapCham *= rootFalloff * rootFalloff; #endif snapCham = snapCham * snapCham * snapCham; result = lerp( result, HALF3( 6, 3, 2 ), (HALF)(snapCham * dudeSnapGlow) ); #endif //------------------------------------------ // Sand fade out effect #if defined( DUDE ) || defined( SCARF ) float halfDudeHeight = .40; // @TODO: Replace this with a better effect using cham to the burned portion of the character float alpha = lerp( 1, 0, saturate( 2 * dudeDissolve - ( 1 - saturate( IN.worldPos.y - dudeCenter.y + halfDudeHeight ))) - chamMask); float bottomOfDude = dudeCenter.y - halfDudeHeight; float distFromBottom = (IN.worldPos.y - bottomOfDude); float sandFade = lerp(0, 1, clamp(distFromBottom - (1-dudeDissolve), 0, .10) * 10); #ifdef SCARF // The cape frequently flies far above the top of the dude -- so we'll just use the V value along the cape as our dissolve direction // instead of world space position. sandFade = lerp( 0, 1, clamp(2 * dudeDissolve - (1 - uv.y), 0, 1) ) * 0.7; #endif result.rgb = lerp( result.rgb, duneLitColor, (HALF)sandFade ); //Start sanding in advance of alpha color.a *= ChamStep( 0.80, 0.82, alpha + .1 ); #endif //------------------------------------------ // Write out the color! //result.rgb = Nn; OUT.color = float4( result.rgb, IN.color.a * saturate(5*(color.a-0.5)+0.5) ); //#if defined( DUDE ) || defined( SCARF ) // We normally want to exclude players from their own occlusion, but we can set the exclusion // to be ignored in sand side areas by writing a >2 alpha value. OUT.color.a = OUT.color.a > 0.5 ? 2.0 + sideIntensity : OUT.color.a; //#endif #ifdef PREPASS OUT.color.rgb = 1; // Calculating the actual alpha is quite expensive, so we just use a conservative estimate. OUT.color.a = IN.color.a * SAMPLE_ATLAS( textureAtlasA, aColor1Uv ).a * invisFrom * invisTo > 0.99; #if defined( DUDE ) || defined( SCARF ) OUT.color.a *= 1.0 - saturate( 1024.0 * dudeDissolve ); #endif // Paintings have a more complex alpha, so we just punt on them. #ifdef PAINTING OUT.color.a = 0; #endif #endif #if defined(D_PLATFORM_GXM) OUT.color = max(OUT.color,0.0); #endif #ifdef ALPHATESTENABLE clip(OUT.color.a-0.5f); #endif } // ------------------------------------------------------------------------------------------------------------------------------------------ #undef main #undef IN #undef OUT #undef v2f #undef f2f // ===================================================================================================================[TECHNIQUE CODE END]=== #if !defined(D_PLATFORM_GXM) #ifndef __ORBIS__ technique11 Opaque { pass pass0 { SetVertexShader( CompileShader( vs_5_0, Opaque_vs_main() ) ); SetPixelShader( CompileShader( ps_5_0, Opaque_fs_main() ) ); SetBlendState(ourBlendState, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF); SetDepthStencilState(ourDepthStencilState,0); SetRasterizerState(ourRasterState); } } #endif #else technique Opaque { pass pass0 { VertexProgram = compile arbvp1 Opaque_vs_main(); FragmentProgram = compile arbfp1 Opaque_fs_main(); } } #endif D:/Dev/TGC/Journey/head/Journey/Data/Shaders/S_Cloth_vs__Cloth_fs__16143.fx5€@1ALPHATESTENABLEAOREMOTESANDSCARFSKINNING_ENABLED€5GGGGGGGG€?€?€?€?€?€A€A€? xîÐ05spDXBCëc6D$LyXOŒ$|üf-xî8@ œ Ð Ô—p˜RDEF <ÿÿAØ RD11< ($ Ü ï  *@ÿÿÿÿ Oÿÿÿÿ ]ÿÿÿÿ kÿÿÿÿ wÿÿÿÿ …ÿÿÿÿ ”ÿÿÿÿ £ ÿÿÿÿ ±ÿÿÿÿ Áÿÿÿÿ  Íÿÿÿÿ  Úÿÿÿÿ  èÿÿÿÿ  ôÿÿÿÿ   ÿÿÿÿ LinearClampSamplerLinearWrapSamplerAnisoClampSamplerLinearWrapAnisoSamplerPointWrapAnisoSamplernoise3dTexturetextureAtlasAtextureAtlasBtextureMasktextureDetailtextureFilledAtextureFilledBsandHiIrrCubesandSpecTexturesandSpecLutnoiseSandTexheightTextureduneTextureduneColorTextureenvOccCube$Globals«««#4Ь È ÿÿÿÿÿÿÿÿì È ÿÿÿÿÿÿÿÿÿ  ÿÿÿÿÿÿÿÿ8  ÿÿÿÿÿÿÿÿF 0@` ÿÿÿÿÿÿÿÿ„ p ÿÿÿÿÿÿÿÿˆ €@` ÿÿÿÿÿÿÿÿ• À ÿÿÿÿÿÿÿÿ™ Ð ÿÿÿÿÿÿÿÿ� à ÿÿÿÿÿÿÿÿ¡ ðÈ ÿÿÿÿÿÿÿÿ« ôÈ ÿÿÿÿÿÿÿÿ·  ÿÿÿÿÿÿÿÿÄ  ÿÿÿÿÿÿÿÿÒ È ÿÿÿÿÿÿÿÿà $È ÿÿÿÿÿÿÿÿï 0 ÿÿÿÿÿÿÿÿø @È ÿÿÿÿÿÿÿÿ DÈ ÿÿÿÿÿÿÿÿ HÈ ÿÿÿÿÿÿÿÿ LÈ ÿÿÿÿÿÿÿÿ$ PÈ ÿÿÿÿÿÿÿÿ- TÈ ÿÿÿÿÿÿÿÿ: XÈ ÿÿÿÿÿÿÿÿH \È ÿÿÿÿÿÿÿÿU `È ÿÿÿÿÿÿÿÿc p ÿÿÿÿÿÿÿÿq € ÿÿÿÿÿÿÿÿ| �È ÿÿÿÿÿÿÿÿ‰ ”È ÿÿÿÿÿÿÿÿ• ˜È ÿÿÿÿÿÿÿÿ¢   ÿÿÿÿÿÿÿÿ¯ ° ÿÿÿÿÿÿÿÿ½ ÀÈ ÿÿÿÿÿÿÿÿÉ ÄÈ ÿÿÿÿÿÿÿÿcameraNearTimesFarfloat«««¿ cameraFarMinusNearcameraNearFarfloat4 eyePositionWSviewprojectionfloat4x4««U l_ddudeInvTorsol_cl_sl_avelvetIntvelvetRatiolocalDudePosremoteDudePoslocalDudeGlowremoteDudeGlowspecularalphaHardnessinShadowhsvHuehsvSaturationhsvValuedudeDissolvedudeSuperGlowdudeSnapGlowdudeSnapLeveldudeScarfRootdudeCenterdudeColdnessvOffsetGlowdudeDecoGlowheightBiasUvheightScaleUvheightBiasYduneMaxShadowYMicrosoft (R) HLSL Shader Compiler 10.1ISGNT (4:::::::4 : C  SV_POSITIONCOLORTEXCOORDSV_IsFrontFace««OSGN, SV_TARGET««SHEXü‰P"jˆYFŽ Z` Z` Z` Z`Z`X(pUUXpUUXpUUXpUUXpUUXpUUXpUUX0pUUXpUUXp UUXp UUXp UUXp UUXp UUX0pUUb‚brbòbrbrbòbòbòbò br c eò h6@ÍÌ @7 "  @€¿@€?6B 6‚6"*6B:6‚ 66"*6:6" 6B6‚*6B:+‚@4:*6 €A‚: 6  6" 6B* 6‚: 62F6B:€AB*@€?8B*@@8B**4B*@3B*@€?4‚:*6*6"6:6" BF‚ F‚ DB*8r¦ F‚ 8rVFBFFDB*8r¦ FBFFDB*8r ¦ Fr FF BF F DB*8r ¦ F 6B@€@8 * " E‹Â€CUBF F{` /B*8B *B*6‚@€@8ÂöV8¦8 2 ¶@ˆAˆAE‹Â€CUò F F~` 8 2 æ @LBLBE‹Â€CUò F F~` ò F F 8 2 ¶@mCmCE‹Â€CUò F F~` ò F F 8 2 æ @À1DÀ1DE‹Â€CUò F F~` ò F F 8 ò F @€>€>€>€>8 2 ¶@??E‹Â€CU2 F Öx` 8 ¦@À?À?E‹Â€CUÂæ †}` ¦ 8 ¦@??62 @¿¿€€2 F F 8 2 F @oƒ;oƒ;2FF 8 r F@ÍÌÌ=ÍÌÌ=ÍÌÌ=E‹B€CU‚F –s` 6‚::6‚:6‚:‚::‚:@€?6‚:‚:@7 2öFF‚:@€?7 2 öFF62 F   2 FF  2FF*@7  @¦ *@7 2@F*@€?7  @¦ *@€?7 2 @F E‹Â€CUòæ  F~` /òF8òFòFE‹Â€CUòF F~` /òF8òFòFE‹Â€CUò æ  F~` /ò F 8ò F ò F E‹Â€CUòFF~` /òF8òFòF8‚:8‚*:8‚ : 8‚*:8: @?8":@? 6"@€¾ +"@8 4 @3 @€?8 @>:6B*6"@?6B@ÍÌL½"*8"*"@ÍÌL=6"6"6B €AB**8B**B *:6‚:6‚:6 6B*6‚:6B*6‚:6"6B 6‚:6‚:6‚:6‚:6 6‚*6‚ 6‚ :€A‚ : +‚ @‚ : : 8‚ :: 6B :€A‚:* ‚:: 6‚:€A‚:: 6‚ :€A‚:: 4‚:@3‚:@€?:6‚ @6‚ : 6‚:6‚ :€A ‚:: 6‚ :€A ‚ : : ‚:: 4‚:@3‚:@€?6‚:6‚::6B*+‚ @6‚ @€>6B : 6‚ :€A ‚ : : +‚ @‚ * : 8‚ :: 6‚ :€A B*: B*: 6B*€AB*: 6‚ :€AB*: 4B*@3B*@€?:6‚ @6B * 6B*6‚ :€A B*: 6‚ :€A ‚ : * B*: 4B*@3B*@€?6B*6B*:+‚ @+‚ @+B @+‚ @8‚:: 6‚ :€A B : * +‚ @‚ : : 8‚:: 6‚ :€A ‚ : : ‚ : * 6‚ :€A ‚:: 6‚:€A‚::4‚:@3‚:@€?:6‚@6‚ : 6‚:6‚ :€A‚:: 6‚:€A‚:: ‚::4‚:@3‚:@€?6‚:6‚:8‚::8B**4B*:8‚::4B*:6B*6‚@@¿B*:+‚@8B*:4B*@3B*@€?6‚€A‚ ::4‚:@333?6‚:6‚ 6‚ 6‚::6‚:6‚:6‚:6‚:6B*6"6‚ :€A‚:: +‚ @‚ : 8‚ :: 6‚:€A‚::‚::6‚:€A‚:: 6‚*€A‚::4‚:@3‚:@€?:6‚@6"6‚:6‚:€A‚::6‚:€A‚:‚::4‚:@3‚:@€?6‚:6‚::6‚ : +‚@6‚@€>6‚ 6‚ :€A‚:: +‚ @‚ : : 8‚ :: 6‚:€A‚:: ‚::6‚:€A‚:: 6‚*€A‚::4‚:@3‚:@€?:6‚@6‚ : 6‚:6‚ :€A‚:: 6‚:€A‚:: ‚::4‚:@3‚:@€?6‚:6‚::+‚@+‚ @+‚ @+‚ @8B*: 6‚ :€A ‚ : : +‚ @‚ : 8‚:: 6‚ :€A ‚:: ‚:: 6‚:€A‚::6B*€A‚:*4‚:@3‚:@€?:6B@6"6‚:6‚*€A‚::6B*€A"*‚:4‚:@3‚:@€?6‚:6‚:8"::8B*:4"*8‚::4‚:6‚:6"@@¿‚:+"@8‚:4‚:@3‚:@€?3‚:*6"*€A‚:8‚:*‚:*6òF€AòFF8òöFòFF6òF€A òFF8òöFò F Fb E‹Â€CUr–F~` /rF8 rF@ÍÌ @ÍÌ @ÍÌ @rFb E‹Â€CU‚–F~` 6‚:bE‹Â€CUr–F~` /rF8 rF@ÍÌ @ÍÌ @ÍÌ @rFbE‹Â€CU‚–F~` 6‚:b E‹Â€CUr–F~` /rF8 rF@ÍÌ @ÍÌ @ÍÌ @rFb E‹Â€CU‚–F~` 6‚:bE‹Â€CUr–F~` /rF8 rF@ÍÌ @ÍÌ @ÍÌ @rFbE‹Â€CU‚–F~` 6‚:6òF€AòFF8òöFòFF6òF€AòFF8òöFòFF:+"@6B@?6B@ÍÌL½B**8"*"@ÍÌL=6"6"6 :6B*6B 6"6 6B:6B*6"*6‚:6 6B*6"6‚:€A :+‚@‚:8‚:6‚:€A‚:*‚: 6‚:€A‚::6*€A‚: 4‚:@3‚:@€?:6@6"6‚:6B €A‚:*6 €A ‚: 4‚:@3‚:@€?6‚:6‚::6 +@6B@€>6‚6‚ €AB*:+‚@‚::8‚:6 €A   *6 €A :6B*€A *4 @3 @€?:6B@6‚:6 6‚*€A :6B*€AB*: *4 @3 @€?6 6 :+B@+‚@+‚@+‚@8B*:6‚:€A‚::+‚@‚:8":6‚:€AB*:B*:6B*€AB*6B*€AB**4B*@3B*@€?:6B@6"6B*6"*€AB*6B*€A"*"*4"@3"@€?6"6"8‚::8* 4‚: 8:4‚: 6‚:6@@¿‚: +@8‚: 4‚:@3‚:@€?6òF€AòFF8òöFòFF6òF€A òFF8òöFò F F+B@+‚@6B@¿B:*6"*€A4B*8‚:*6‚:€AB:*6‚@€?8B**8B*:+‚@8‚:+B@6"€AB*6B*€A‚:*+B@6"€AB*‚:*4‚:@3‚:@€?6B@@¿‚:*4‚:@3‚:@€?+B@8‚:*6B@€?8B:*8‚::8‚:*8‚:€ +2@+ò@6B@?6‚:8òFF:6B@ÍÌL=6"@�Âu=6B*6‚*€A‚*:6B*€AB*B:*4B*@3B*@€?8B**4B:*6òF€AòFF8ò¦ FòFF+2@+ò@6B@?6‚: 8òFF:6B@ÍÌL=6"@�Âu=6B*6‚*€AB*:6B*€AB*B**4B*@3B*@€?8B**4B:*6òF€A òFF8ò¦ Fò F F8 @@" E‹Â€CUÂFÆy` /¦8¦¦8B @@*@?" E‹Â€CU¢FF{` /¢V 8¢V ¢V 6B:€AB*@€?6b ¦ €A¢V V  8¦ V ¦¦6"€A"@€?1"1"@€¿@"@ÿÿÿÿ 6"@€?+B@+‚@6B@¿B:*6"*€A4B*8‚:*6‚:€AB:*6‚@€?8B**8B*:8"*+2@+ò@KKKK6B@?6‚:8òFF8B 6òF€AòFF8ò¦ FòFF+2@+ò@KKKK6B@?6‚: 8òFF8" 6òF€A òFF8òVFò F F6òF€Aò F F8ò ¦ F òFF 6"@€¿"*4"@"@€?8òVF8"*@@4"@3"@€?8B*@@6B@€¿B**4B*@3B*@€?+â @8â  V 8B*4B**4B*@3B*@€?6":€A"@€?8"*6B@€¿B*@8"*"@€?8B*6r F€Aâ V   8â ¦ V rF–   @ >6" @:E‹Â€CUr F F~` /r F 8r F r F  @ >6"@:E‹Â€CU²FF{` /²F 8²F ²F 6r F€A ²F F 8²öF ²F F +B@�8B*6‚@8ÁB:*4B*@3B*@€?6r F€ArFF 8r¦ FrFF ²F @???8rFF8 rF@ ? ? ?6B@€?6‚@€?b� 8bV� E‹Â€CUB––| ` 6B*B* € 6B*€AB*8‚*@ A6‚:€A‚:@ ?4‚:@3‚:@€?8‚::+2@8  8" 82FF E‹Â€CU²FF{ `6r @¿¿¿€²F F 8 ²F @@@@6 8 rF@`@`@`@8r öFrFF FFD 8rF62@€?€:6R@»€:82 ††2 FF E‹Â€CUò F F~ `/ò F 8ò F ò F 82 ¦ †2 F V62 F€A 2 F †82 †F 2 FF E‹Â€CUF 6y `/ 8   82 ¦ †2 F V2 F †8R 2F†E‹Â€CUF6y `/ 8   +@ 4  8" @ ×#="@…k>6"€A 8  4 @3 @€?8: @€@4 @3 @€?4  6€ €A *8 @?4 @3 @€?4  6bVE‹Â€CUò –6y ` 8 r– @€@€@€@8r– F6  8 â  @€@€@€@"F – 6B€A4"*6"€A"@)\�?4"@3"@€?8B @ú~ª>8B*  8 @ú~ª> @ú~ª>8" "@€?8r F V"*@€?8rFV8"* @ff¦?8"*4"@3"@€?8":8B*@ÍÌL>B*@?8B*6Ò €AÒ  8Ò¦ rF†6Ò@¿€¿¿Ò  8 Ò@???Ò B††DB*8Ò¦ :6rF6r F 6Ò6B@?F †BF†6B*6B €A4‚ *6:€A @€?K 8":@0n™¼"@'˜=8":"@„4Y¾8‚:‚:@¤ É?8‚ :8:@À @ÛI@1B *B* B*:6‚*€A4*:6" €A"@€?K"8B @0n™¼B*@'˜=8B *B*@„4Y¾8 * @¤ É?8 8" @À"@ÛI@1‚*:‚:‚: 8r†6rF€ArFF FFD 8rF8â ¦ 6â V€A â  V – – D 8â V F– 4*:3B*:8B**8‚*@?"*@Ãõ¨>‚:6‚:€A‚:@€?8"*@ffæ>B*@ìQ¸=B*4B*@3B*@€?4 @3 @€?8B* MÐ 8B* MÐ*MÐB* *8B* B*:8B**6B*:6rF€A6@?BF †BF†6B*6‚*€A4‚*:6‚ :€A‚ : @€?K‚ : 8‚ :@0n™¼‚ : @'˜=8‚ :: ‚ : @„4Y¾8‚:: ‚:@¤ É?8‚: :8‚ :@À‚ : @ÛI@1‚*:‚:: ‚::6‚*€A4‚ *:6‚ :€A ‚ : @€?K‚ : 8" : @0n™¼"  @'˜=8" :  "  @„4Y¾8‚ :  ‚ : @¤ É?8‚ : : 8‚ : @À‚ : @ÛI@1‚*:‚:: ‚:: 8â ¦ 6â V€A â   V B– – DB*8â ¦ V 8r †¦ 6r F€A rFF BFFDB*8r¦ FB– F4::3‚::8  8" @?B @Ãõ¨>"*6"€A"@€?8B @ffæ> @ìQ¸=* 4B*@3B*@€?4B*@3B*@€?8* MBÐ 8* MBÐ:MЂ:B*:8*  8 *6 6B  6B@*BL?6‚*€A‚:@€?8‚*:‚*:†F 6"*€A"@€?8 B* 8B*:B@ÍÌL?*6‚@†F 4 @3 @€?4 @Ü$4(/ 8:  ‚:@A‚:@ÈA8B*:8B**8B *8B**E‹‚€CUr†F~` /rF8 rF@ÍÌ @ÍÌ @ÍÌ @rF8 rF@AAAB†F 8B*@@8r †¦ 6â  €A r F – E‹‚€CUr F F~` /r F 8 r F @ÍÌ @ÍÌ @ÍÌ @r F 8 r F @AAAE‹‚€CUBFF{` 6â ¦ 6B@€?8‚:*6B 6‚@€?6‚@¿‚:  8‚:@@‚:@?4‚:@3‚:@€?8‚::"@€?"4"@3"@€?8":8":6rF8r F‚ 8r F‚ E‹‚€CUr†F~` /rF8 rF@ÍÌ @ÍÌ @ÍÌ @rF"†F 8"@@8"*6‚€A :†F 6"@E‹Â€CU"F~ ` /"8"@ÍÌ @"6"@E‹Â€CUrFF~` /rF8 rF@ÍÌ @ÍÌ @ÍÌ @rF8‚@ÍÌÌ=8rFö+r@6‚* 8rFF 8röF8r– FrFF8rFF8rFFrFF‚†F 8 :4 @3 @€? ‚F‚ @š™™>= ?®Gá=8 :8 @ÍÌ ? ‚F@š™™>= ?®Gá=‚ @€?6rö€ArFF8röFröF8r¦ F 8r– F8rF8rF8rFFrFF8r ¦ F 8r – F 8r VF r F F8r F F8r VF r F F 8r FF 8r ¦ F 8â V   8â öV BF F6@ÍÌL¾B* 6*€A4B* 6B*€AB*@€?4B*@3B*@€?8r¦ – 8rVFrFF 8rFF8rFF8röF8rVFrFF8 r†@À?À?À?rFFBFFDB*8r¦ F8 rF @€>€>€>rFFBFFDB*8r¦ FBF F6‚*€A4B:*6B*€AB*@€?4B*@3B*@€?6‚@€?8B**8B**8B**8B*:8B*@@8"*8â V8âV8âVVâV 8:*8r–6â €AâV 8âVörF–6â €A âV@CÒBðA8âV¦Š rF–6‚6"@ÍÌL¾6B@ÍÌL>6‚ € €A‚::6‚@¿‚:  8‚:@ÍÌL>‚:::6"6B*6‚:6‚€A‚::6"€A"*‚:4‚:@3‚:@€?6‚:8"::8‚:+â@8‚::€ 6rF€AâV 8âöVrF–6‚@ÍÌÌ>+"@+B@+‚@8‚:€ +@6"€ €A"‚:4‚:@3‚:@€?6‚:€A‚: 6‚:€A‚::4‚:@3‚:@€?6 €A‚: 6€A *8‚: ‚:+@+"@+B@8B*€ +‚@6€A‚: 6‚:€AB:*+‚@+@4B:*3B *6‚ €A":8"* 8 @333?6â €AâV 8r–rFF:6@ÍÌL?6"@…ëQ?‚:@ÍÌÌ=6B €A‚:*6 €A ‚: 4‚:@3‚:@€?8‚::+@6"@¿‚:8‚: ‚:@?4‚:@3‚:@€?8‚::6r F1@?:":@@7  :6"@¿" 1"@"@ÿÿÿÿ 6‚  >STAT”? æ$Ä@SPDBVMicrosoft C/C++ MSF 7.00 DS+Ä(Àÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ <ÿÿÿÿ”.1\Œ^›,£:¸%ƒN€ Ÿ�йÇÜQ3lpha [ 0 ] = ONE ; DestBlendAlpha [ 0 ] = ONE ; BlendOpAlpha [ 0 ] = ADD ; RenderTargetWriteMask [ 0 ] = 15 ; AlphaToCoverageEnable = false ; } ; DepthStencilState ourDepthStencilState { DepthEnable = true ; DepthFunc = less ; StencilEnable = false ; } ; RasterizerState ourRasterState { CullMode = None ; DepthBias = 0.0f ; ScissorEnable = false ; MultiSampleEnable = false ; DepthClipEnable = false ; AntialiasedLineEnable = false ; } ; ÆZLè­L©ë°Î½é�dP…h&uƒ’æÜ ˆä*åôöª»õZ;6Xe&φ)X9ÈQ¢þäÇA$*ÒlN*öðËVU,Þ“9Îju‚£zõ#line 1 "D:\\Dev\\TGC\\Journey\\head\\Journey\\Data\\Shaders\\S_Cloth_vs__Cloth_fs__16143.fx" #line 0 "D:/Dev/TGC/Journey/head/Journey/Data/Shaders/S_Cloth_vs__Cloth_fs__16143.fx" #line 10 BlendState ourBlendState { BlendEnable [ 0 ] = FALSE ; BlendEnable [ 1 ] = FALSE ; SrcBlend [ 0 ] = Src_Alpha ; DestBlend [ 0 ] = Inv_Src_Alpha ; BlendOp [ 0 ] = ADD ; SrcBlendAlpha [ 0 ] = ONE ; DestBlendAlpha [ 0 ] = ONE ; BlendOpAlpha [ 0 ] = ADD ; RenderTargetWriteMask [ 0 ] = 15 ; AlphaToCoverageEnable = false ; } ; DepthStencilState ourDepthStencilState { DepthEnable = true ; DepthFunc = less ; StencilEnable = false ; } ; RasterizerState ourRasterState { CullMode = None ; DepthBias = 0.0f ; ScissorEnable = false ; MultiSampleEnable = false ; DepthClipEnable = false ; AntialiasedLineEnable = false ; } ; #line 0 "D:/Dev/TGC/Journey/head/Journey/Data/Shaders/Migratory.sh" #line 8 #line 16 #line 20 #line 135 #line 140 #line 147 BlendState NoBlend_BlendState { BlendEnable [ 0 ] = FALSE ; } ; BlendState Alpha_BlendState { BlendEnable [ 0 ] = TRUE ; SrcBlend [ 0 ] = Src_Alpha ; DestBlend [ 0 ] = Inv_Src_Alpha ; BlendOp [ 0 ] = ADD ; SrcBlendAlpha [ 0 ] = Src_Alpha ; DestBlendAlpha [ 0 ] = Inv_Src_Alpha ; BlendOpAlpha [ 0 ] = ADD ; BlendEnable [ 1 ] = FALSE ; } ; BlendState Additive_BlendState { BlendEnable [ 0 ] = TRUE ; SrcBlend [ 0 ] = Src_Alpha ; DestBlend [ 0 ] = ONE ; BlendOp [ 0 ] = ADD ; SrcBlendAlpha [ 0 ] = Src_Alpha ; DestBlendAlpha [ 0 ] = ONE ; BlendOpAlpha [ 0 ] = ADD ; BlendEnable [ 1 ] = FALSE ; } ; #line 180 BlendState ParticleBlended_BlendState { BlendEnable [ 0 ] = TRUE ; SrcBlend [ 0 ] = ONE ; DestBlend [ 0 ] = Inv_Src_Alpha ; BlendOp [ 0 ] = ADD ; SrcBlendAlpha [ 0 ] = ONE ; DestBlendAlpha [ 0 ] = Inv_Src_Alpha ; BlendOpAlpha [ 0 ] = ADD ; BlendEnable [ 1 ] = FALSE ; } ; DepthStencilState NoDepthTest_NoDepthWrite_DepthState { DepthEnable = FALSE ; DepthWriteMask = Zero ; DepthFunc = Less ; StencilEnable = FALSE ; } ; DepthStencilState NoDepthTest_DepthWrite_DepthState { DepthEnable = FALSE ; DepthWriteMask = All ; DepthFunc = Less ; StencilEnable = FALSE ; } ; DepthStencilState DepthTest_NoDepthWrite_DepthState { DepthEnable = TRUE ; DepthWriteMask = Zero ; DepthFunc = Less ; StencilEnable = FALSE ; } ; DepthStencilState DepthTest_DepthWrite_DepthState { DepthEnable = TRUE ; DepthWriteMask = All ; DepthFunc = Less ; StencilEnable = FALSE ; } ; RasterizerState NoCull_RasterizerState { CullMode = None ; } ; RasterizerState BackFaceCull_RasterizerState { CullMode = Back ; FrontCounterClockwise = TRUE ; } ; RasterizerState FrontFaceCull_RasterizerState { CullMode = Front ; FrontCounterClockwise = TRUE ; } ; #line 243 #line 246 #line 264 #line 269 sampler PointClampSampler : register ( s8 ) { Filter = Min_Mag_Mip_Point ; AddressU = Clamp ; AddressV = Clamp ; AddressW = Clamp ; } ; sampler LinearClampSampler : register ( s9 ) { Filter = Min_Mag_Mip_Linear ; AddressU = Clamp ; AddressV = Clamp ; AddressW = Clamp ; } ; sampler LinearWrapTSampler : register ( s10 ) { Filter = Min_Mag_Mip_Linear ; AddressU = Clamp ; AddressV = Wrap ; AddressW = Clamp ; } ; sampler LinearWrapSampler : register ( s11 ) { Filter = Min_Mag_Mip_Linear ; AddressU = Wrap ; AddressV = Wrap ; AddressW = Wrap ; } ; sampler PointWrapSampler : register ( s12 ) { Filter = Min_Mag_Mip_Point ; AddressU = Wrap ; AddressV = Wrap ; AddressW = Wrap ; } ; sampler AnisoClampSampler : register ( s13 ) { Filter = ANISOTROPIC ; AddressU = Clamp ; AddressV = Clamp ; AddressW = Clamp ; MaxAnisotropy = 16 ; } ; sampler LinearWrapAnisoSampler : register ( s14 ) { Filter = ANISOTROPIC ; AddressU = Wrap ; AddressV = Wrap ; AddressW = Wrap ; MaxAnisotropy = 16 ; } ; sampler PointWrapAnisoSampler : register ( s15 ) { Filter = Min_Mag_Point_Mip_Linear ; AddressU = Wrap ; AddressV = Wrap ; AddressW = Wrap ; MaxAnisotropy = 16 ; } ; static const float kSRGB = 2.2f ; #line 358 #line 373 #line 408 #line 427 #line 435 #line 498 #line 516 #line 521 float cameraNearTimesFar ; float cameraFarMinusNear ; float4 cameraNearFar ; #line 527 float ConvertDepth ( float depth ) { #line 532 float viewSpaceZ = - ( cameraNearTimesFar / ( depth * cameraFarMinusNear - cameraNearFar . y ) ) ; return viewSpaceZ ; } #line 542 #line 563 struct PSkinTransforms { float4x4 Mtxs [ 32 ] ; } ; cbuffer BoneTransformConstantBuffer { PSkinTransforms SkinTransforms ; } float4x4 GenerateBoneMatrix ( uint4 SkinIndices , float4 SkinWeights ) { return SkinTransforms . Mtxs [ SkinIndices [ 0 ] ] * SkinWeights [ 0 ] + SkinTransforms . Mtxs [ SkinIndices [ 1 ] ] * SkinWeights [ 1 ] + SkinTransforms . Mtxs [ SkinIndices [ 2 ] ] * SkinWeights [ 2 ] + SkinTransforms . Mtxs [ SkinIndices [ 3 ] ] * SkinWeights [ 3 ] ; } #line 592 static const float4x4 SCALE_BIAS = float4x4 ( float4 ( 0.5 , 0.0 , 0.0 , 0.5 ) , float4 ( 0.0 , - 0.5 , 0.0 , 0.5 ) , #line 598 float4 ( 0.0 , 0.0 , 0.5 , 0.5 ) , float4 ( 0.0 , 0.0 , 0.0 , 1.0 ) ) ; #line 613 #line 635 #line 642 #line 59 "D:/Dev/TGC/Journey/head/Journey/Data/Shaders/S_Cloth_vs__Cloth_fs__16143.fx" float4 eyePositionWS : eyePositionWS ; float4x4 viewprojection : viewprojection ; #line 68 #line 73 #line 80 float4 l_d ; #line 83 float4x4 dudeInvTorso ; #line 100 struct Opaque_vs_a2v { #line 111 float3 SkinnableVertex : POSITION ; float3 SkinnableNormal : NORMAL ; float2 uv : TEXCOORD0 ; float4 extraF32 : TEXCOORD1 ; float4 extraU8 : TEXCOORD2 ; float4 extra2U8 : TEXCOORD3 ; float4 Color : COLOR ; float4 SkinWeights : BLENDWEIGHTS ; #line 123 uint4 SkinIndices : BLENDINDICES ; } ; struct a2v_noSkin #line 131 { #line 135 float3 position : POSITION ; float3 normal : NORMAL ; float2 uv : TEXCOORD0 ; float4 extraF32 : TEXCOORD1 ; float4 extraU8 : TEXCOORD2 ; float4 extra2U8 : TEXCOORD3 ; float4 color : COLOR0 ; } ; a2v_noSkin ProcessSkInput ( Opaque_vs_a2v skIn ) { float4x4 transformMatrix = GenerateBoneMatrix ( skIn . SkinIndices , skIn . SkinWeights ) ; a2v_noSkin ret ; ret . position . xyz = mul ( float4 ( skIn . SkinnableVertex . xyz , 1 ) , transformMatrix ) . xyz ; #line 156 ret . normal = mul ( skIn . SkinnableNormal , ( float3x3 ) transformMatrix ) ; ret . uv = skIn . uv ; ret . extraF32 = skIn . extraF32 ; ret . extraU8 = skIn . extraU8 ; ret . extra2U8 = skIn . extra2U8 ; ret . color = skIn . Color ; return ret ; } #line 169 struct Opaque_vs_v2f { float4 position : SV_POSITION ; float4 color : COLOR0 ; float3 normal : TEXCOORD0 ; float4 uv : TEXCOORD1 ; float4 worldPos : TEXCOORD2 ; float4 eye : TEXCOORD3 ; float4 extra : TEXCOORD4 ; float4 extra2 : TEXCOORD5 ; float4 extra3 : TEXCOORD6 ; float4 extra4 : COLOR1 ; float3 fresSsL : TEXCOORD7 ; } ; void Opaque_vs_main ( in Opaque_vs_a2v IN_VAL , #line 189 out Opaque_vs_v2f Opaque_vs_OUT ) { a2v_noSkin Opaque_vs_IN = ProcessSkInput ( IN_VAL ) ; Opaque_vs_OUT . position = mul ( float4 ( Opaque_vs_IN . position . xyz , 1 ) , viewprojection ) ; Opaque_vs_OUT . worldPos = float4 ( Opaque_vs_IN . position . xyz , 1 ) ; Opaque_vs_OUT . normal = normalize ( Opaque_vs_IN . normal ) ; #line 201 Opaque_vs_OUT . uv . xy = Opaque_vs_IN . uv ; Opaque_vs_OUT . eye = float4 ( eyePositionWS . xyz - Opaque_vs_OUT . worldPos . xyz , Opaque_vs_OUT . worldPos . y ) ; #line 206 float3 Ln = normalize ( l_d . xyz ) ; float3 Vn = normalize ( Opaque_vs_OUT . eye . xyz ) ; float3 Hn = normalize ( Vn + Ln ) ; float F0 = 0.005 ; float fresnel = lerp ( F0 , 1.0 , pow ( max ( saturate ( 1.0 - dot ( Vn , Hn ) ) , 0.00000000000001 ) , 5.0 ) ) ; Opaque_vs_OUT . fresSsL . x = fresnel ; float ssOcc = 1.0 ; float3 torsoPos = mul ( float4 ( Opaque_vs_OUT . worldPos . xyz , 1.0 ) , dudeInvTorso ) . xyz ; float3 torsoNorm = normalize ( float3 ( 1 , 3 , 3 ) * torsoPos ) ; #line 219 float3 torsoEye = normalize ( mul ( Opaque_vs_OUT . eye . xyz , ( float3x3 ) dudeInvTorso ) ) ; ssOcc = 1.0 - saturate ( dot ( torsoEye , torsoNorm ) ) ; ssOcc *= saturate ( 0.1 - 0.1 * torsoPos . x ) ; ssOcc = max ( ssOcc , saturate ( 0.1 * length ( torsoPos ) - 0.333 ) ) ; #line 227 float3 torsoLight = normalize ( mul ( l_d . xyz , ( float3x3 ) dudeInvTorso ) ) ; float slight = 0.5 * ( 1.0 + sin ( 0.5 * 3.1415926 * dot ( torsoLight , torsoNorm ) ) ) ; Opaque_vs_OUT . fresSsL . z = slight ; #line 236 Opaque_vs_OUT . fresSsL . y = ssOcc ; #line 240 float MAX_CHANNELS = 4.0 ; int compressed = ( int ) floor ( 255.1 * Opaque_vs_IN . extraU8 . x ) ; int topBits = compressed / 16 ; int botBits = ( ( int ) floor ( compressed ) % 16 ) ; int invis = ( ( int ) floor ( topBits ) % 4 ) ; int iFrom = invis / 2 ; int iTo = ( ( int ) floor ( invis ) % 2 ) ; int chamDir = topBits / 4 ; int chamDirUp = ( ( int ) floor ( chamDir ) % 2 ) ; int chamDirRight = chamDir / 2 ; int u0 = botBits / 4 ; int u1 = ( ( int ) floor ( botBits ) % 4 ) ; #line 258 float abBlend = Opaque_vs_IN . extraF32 [ 0 ] ; float uvBlend = Opaque_vs_IN . extraF32 [ 1 ] ; float vOffset = Opaque_vs_IN . extraF32 [ 2 ] ; float scarfMeter = Opaque_vs_IN . extraF32 [ 3 ] ; float compressedVals = Opaque_vs_IN . extraU8 [ 0 ] ; float chamEdgeMult = Opaque_vs_IN . extraU8 [ 1 ] ; float vMin = Opaque_vs_IN . extraU8 [ 2 ] ; float vMax = Opaque_vs_IN . extraU8 [ 3 ] ; float uScaleMult = Opaque_vs_IN . extra2U8 [ 0 ] ; float vScaleMult = Opaque_vs_IN . extra2U8 [ 1 ] ; int iextra = ( int ) floor ( 255.1 * Opaque_vs_IN . extra2U8 [ 2 ] ) ; float innerSpec = ( ( int ) floor ( iextra ) % 2 ) ? 1.0 : 0.0 ; float frozen = ( ( int ) floor ( ( iextra / 2 ) ) % 2 ) ? 1.0 : 0.0 ; float dirty = Opaque_vs_IN . extra2U8 [ 3 ] * 2.f ; #line 276 #line 297 #line 300 float hueShift = Opaque_vs_IN . color [ 0 ] ; float saturation = Opaque_vs_IN . color [ 1 ] ; float value = Opaque_vs_IN . color [ 2 ] ; float alpha = Opaque_vs_IN . color [ 3 ] ; Opaque_vs_OUT . uv [ 2 ] = ( float ) u0 / MAX_CHANNELS ; Opaque_vs_OUT . uv [ 3 ] = ( float ) u1 / MAX_CHANNELS ; Opaque_vs_OUT . extra = float4 ( abBlend , uvBlend , vOffset , scarfMeter ) ; Opaque_vs_OUT . extra2 = float4 ( vMin , vMax , uScaleMult , vScaleMult ) ; Opaque_vs_OUT . extra3 = float4 ( ( float ) iFrom , ( float ) iTo , ( float ) chamDirUp , ( float ) chamDirRight ) ; Opaque_vs_OUT . extra4 = float4 ( chamEdgeMult , innerSpec , frozen , dirty ) ; Opaque_vs_OUT . color = float4 ( hueShift , saturation , value , alpha ) ; #line 317 } #line 0 "D:/Dev/TGC/Journey/head/Journey/Data/Shaders/migratory.sh" #line 642 #line 333 "D:/Dev/TGC/Journey/head/Journey/Data/Shaders/S_Cloth_vs__Cloth_fs__16143.fx" #line 337 #line 355 #line 361 #line 364 #line 371 Texture3D < float4 > noise3dTexture ; #line 376 float4 l_c , l_s , l_a ; #line 379 float velvetInt , velvetRatio ; #line 383 float4 localDudePos ; float4 remoteDudePos ; float localDudeGlow ; float remoteDudeGlow ; float4 specular ; float alphaHardness ; Texture2D < float4 > textureAtlasA ; Texture2D < float4 > textureAtlasB ; Texture2D < float4 > textureMask ; Texture2D < float4 > textureDetail ; Texture2D < float4 > textureFilledA ; Texture2D < float4 > textureFilledB ; #line 404 #line 408 float inShadow ; #line 411 float hsvHue ; float hsvSaturation ; float hsvValue ; #line 417 float dudeDissolve ; float dudeSuperGlow ; float dudeSnapGlow ; float dudeSnapLevel ; float4 dudeScarfRoot ; float4 dudeCenter ; #line 427 float dudeColdness ; #line 433 float vOffsetGlow ; #line 437 float dudeDecoGlow ; #line 441 TextureCube < float4 > sandHiIrrCube ; Texture2D < float4 > sandSpecTexture ; Texture2D < float4 > sandSpecLut ; Texture2D < float4 > noiseSandTex ; Texture2D < float4 > heightTexture ; float4 heightBiasUv ; float4 heightScaleUv ; float heightBiasY ; Texture2D < float4 > duneTexture ; Texture2D < float4 > duneColorTexture ; float duneMaxShadowY ; #line 457 TextureCube < float4 > envOccCube ; #line 465 float Luminance ( float3 color ) { float3 luminance = float3 ( 0.3 , 0.59 , 0.11 ) ; return dot ( luminance , color ) ; } float3 Saturation ( float3 color , float satLevel ) { float intensity = Luminance ( color ) ; return lerp ( float3 ( intensity , intensity , intensity ) , color , satLevel ) ; } float ClothStep ( float t , float x ) { #line 481 return ( float ) ( x >= t ) ; } float ChamStep ( float min , float max , float input ) { return saturate ( ( input - min ) / ( max - min ) ) ; } float ChamAmount ( float uvValue , float uvCham , float uvMin , float uvMax , float uvMask , float chamStepAmount ) { float uvRange = uvMax - uvMin ; float chamBase = saturate ( ( ( 2 + chamStepAmount ) * uvCham - ( ( uvValue - uvMin ) / uvRange ) ) - uvMask ) ; return ChamStep ( 0.0 , chamStepAmount , chamBase ) ; } #line 499 float OrenNayarDiffuse ( float3 light , float3 view , float3 norm , float roughness ) { float VdotN = dot ( view , norm ) ; float LdotN = dot ( light , norm ) ; float cos_theta_i = LdotN ; float theta_r = acos ( VdotN ) ; float theta_i = acos ( cos_theta_i ) ; float cos_phi_diff = dot ( normalize ( view - norm * VdotN ) , normalize ( light - norm * LdotN ) ) ; float alpha = max ( theta_i , theta_r ) ; float beta = min ( theta_i , theta_r ) ; float sigma2 = roughness * roughness ; float A = 1.0 - 0.5 * sigma2 / ( sigma2 + 0.33 ) ; float B = 0.45 * sigma2 / ( sigma2 + 0.09 ) ; return saturate ( cos_theta_i ) * ( A + ( B * saturate ( cos_phi_diff ) * sin ( alpha ) * tan ( beta ) ) ) ; } #line 522 float GetChamStepAmount ( float frozen ) { float frozenStep = 0.5 ; frozenStep = 0.5 ; float stepAmount = lerp ( 0.05 , frozenStep , frozen ) ; #line 534 #line 537 return stepAmount ; } #line 542 float ComputeCham ( float2 uv , float uvCham , float vMin , float vMax , float uvMask , float dirUpMult , float dirRightMult , float dirOmniMult , float chamStepAmount ) { float sideUV = uv [ 0 ] ; float upUV = uv [ 1 ] ; #line 552 float chamAmountUp = ChamAmount ( upUV , uvCham , vMin , vMax , uvMask , chamStepAmount ) ; float chamAmountRight = ChamAmount ( sideUV , uvCham , 0 , 0.25 , uvMask , chamStepAmount ) ; float chamAmountAll = ChamAmount ( 0 , uvCham , 0 , 1 , uvMask * 2 , chamStepAmount ) ; return max ( max ( chamAmountUp * dirUpMult , chamAmountRight * dirRightMult ) , chamAmountAll * dirOmniMult ) ; } #line 562 struct Opaque_fs_v2f { float4 position : SV_POSITION ; float4 color : COLOR0 ; float3 normal : TEXCOORD0 ; float4 uv : TEXCOORD1 ; float4 worldPos : TEXCOORD2 ; float4 eye : TEXCOORD3 ; float4 extra : TEXCOORD4 ; float4 extra2 : TEXCOORD5 ; float4 extra3 : TEXCOORD6 ; float4 extra4 : COLOR1 ; float3 fresSsL : TEXCOORD7 ; bool isFrontFace : SV_IsFrontFace ; #line 579 #line 582 } ; struct Opaque_fs_f2f { float4 color : SV_TARGET0 ; } ; #line 592 void Opaque_fs_main ( in Opaque_fs_v2f Opaque_fs_IN , out Opaque_fs_f2f Opaque_fs_OUT ) { #line 596 float face = Opaque_fs_IN . isFrontFace ? - 1.f : 1.f ; #line 602 #line 605 float4 color = float4 ( 1 , 1 , 1 , 1 ) ; float abBlend = Opaque_fs_IN . extra [ 0 ] ; float uvBlend = Opaque_fs_IN . extra [ 1 ] ; float vOffset = Opaque_fs_IN . extra [ 2 ] ; float scarfMeter = Opaque_fs_IN . extra [ 3 ] ; float vMin = Opaque_fs_IN . extra2 [ 0 ] ; float vMax = Opaque_fs_IN . extra2 [ 1 ] ; float uScaleMult = Opaque_fs_IN . extra2 [ 2 ] ; float vScaleMult = Opaque_fs_IN . extra2 [ 3 ] ; float invisFrom = Opaque_fs_IN . extra3 [ 0 ] ; float invisTo = Opaque_fs_IN . extra3 [ 1 ] ; float chamDirUp = Opaque_fs_IN . extra3 [ 2 ] ; float chamDirRight = Opaque_fs_IN . extra3 [ 3 ] ; float chamDirOmni = 1 - max ( chamDirUp , chamDirRight ) ; float chamEdgeMult = Opaque_fs_IN . extra4 [ 0 ] ; float innerSpec = Opaque_fs_IN . extra4 [ 1 ] ; float frozen = Opaque_fs_IN . extra4 [ 2 ] ; float dirty = Opaque_fs_IN . extra4 [ 3 ] ; float hue = Opaque_fs_IN . color [ 0 ] ; float saturation = Opaque_fs_IN . color [ 1 ] ; float value = Opaque_fs_IN . color [ 2 ] ; float4 uv = Opaque_fs_IN . uv ; #line 668 #line 673 #line 680 dirty = max ( dirty , saturate ( 2.0 * ( 1.0 - uvBlend ) * frozen ) ) ; float2 uvOffSrc = float2 ( uv [ 2 ] , vOffset ) ; float2 uvOffDst = float2 ( uv [ 3 ] , vOffset ) ; #line 694 float3 Ln = normalize ( l_d . xyz ) ; float3 Nn = normalize ( Opaque_fs_IN . normal . xyz * face ) ; float3 Vn = normalize ( Opaque_fs_IN . eye . xyz ) ; float3 Hn = normalize ( Vn + Ln ) ; #line 703 float4 maskColor = float4 ( 1 , 1 , 1 , 1 ) ; #line 708 #line 714 float channels = 4.0 ; #line 717 maskColor = pow ( textureMask . Sample ( AnisoClampSampler , float2 ( uv . x * channels , uv . y + vOffset ) ) , kSRGB ) ; #line 723 float detUvMult = 9.0 ; #line 726 detUvMult = 4.0 ; float2 detUv = Opaque_fs_IN . uv . xy * detUvMult * float2 ( uScaleMult , vScaleMult ) ; float4 detailColor = 0.25 * ( textureDetail . Sample ( LinearWrapSampler , 17.0 * detUv ) + textureDetail . Sample ( LinearWrapSampler , 3 * 17.0 * detUv . yx ) + textureDetail . Sample ( LinearWrapSampler , 237.0 * detUv ) + textureDetail . Sample ( LinearWrapSampler , 3.0 * 237.0 * detUv . yx ) ) ; float4 detailColorLow = 0.5 * ( textureDetail . Sample ( LinearWrapSampler , 0.5 * detUv ) + textureDetail . Sample ( LinearWrapSampler , 1.5 * detUv . yx ) ) ; #line 735 uv . xy += 0.004 * ( detailColor . rg - 0.5 ) ; #line 740 float noise = noise3dTexture . Sample ( LinearWrapSampler , 0.1 * Opaque_fs_IN . worldPos . xyz ) . xy . r ; Opaque_fs_IN . color . a = ClothStep ( noise , Opaque_fs_IN . color . a ) ; #line 746 uvOffDst = uvBlend == 0.0 ? uvOffSrc : uvOffDst ; uvOffSrc = uvBlend == 1.0 ? uvOffDst : uvOffSrc ; float2 aColor1Uv = uv . xy + uvOffSrc ; float2 aColor2Uv = uv . xy + uvOffDst ; float2 bColor1Uv = uv . xy + uvOffSrc ; float2 bColor2Uv = uv . xy + uvOffDst ; bColor1Uv = abBlend == 0.0 ? 0.0 : bColor1Uv ; bColor2Uv = abBlend == 0.0 ? 0.0 : bColor2Uv ; aColor1Uv = abBlend == 1.0 ? 0.0 : aColor1Uv ; aColor2Uv = abBlend == 1.0 ? 0.0 : aColor2Uv ; #line 758 float4 aColor1 = pow ( textureAtlasA . Sample ( AnisoClampSampler , aColor1Uv ) , kSRGB ) ; float4 aColor2 = pow ( textureAtlasA . Sample ( AnisoClampSampler , aColor2Uv ) , kSRGB ) ; float4 bColor1 = pow ( textureAtlasB . Sample ( AnisoClampSampler , bColor1Uv ) , kSRGB ) ; float4 bColor2 = pow ( textureAtlasB . Sample ( AnisoClampSampler , bColor2Uv ) , kSRGB ) ; aColor1 . a *= invisFrom ; aColor2 . a *= invisTo ; bColor1 . a *= invisFrom ; bColor2 . a *= invisTo ; #line 773 float chamMask = 0.5 * detailColor . a + 0.5 * detailColorLow . a ; chamMask = saturate ( ( chamMask - 0.25 ) * 2 ) * 0.125 ; #line 782 float stepAmount = GetChamStepAmount ( frozen ) ; float chamMaskAmount = lerp ( chamMask , maskColor . a , frozen ) ; float2 chamVals = uv . xy ; #line 791 float chamAmount = ComputeCham ( chamVals , uvBlend , vMin , vMax , chamMaskAmount , chamDirUp , chamDirRight , chamDirOmni , stepAmount ) ; chamAmount = saturate ( ( chamAmount - 0.75 ) * 4 ) ; #line 798 float2 neckUV = float2 ( uv . x , vMax - uv . y ) ; float chamBack = ComputeCham ( neckUV , max ( uvBlend , 0.7 ) , vMin , vMax , chamMaskAmount , chamDirUp , chamDirRight , chamDirOmni , stepAmount ) ; chamBack = saturate ( ( chamBack - 0.75 ) * 4 ) ; chamAmount = lerp ( chamAmount , min ( chamAmount , chamBack ) , frozen ) ; float4 aColor = lerp ( aColor1 , aColor2 , chamAmount ) ; float4 bColor = lerp ( bColor1 , bColor2 , chamAmount ) ; #line 808 #line 811 float4 aFilledColor1 = float4 ( pow ( textureFilledA . Sample ( LinearClampSampler , uv . xy + uvOffSrc ) . xyz , 2.2f ) , textureFilledA . Sample ( LinearClampSampler , uv . xy + uvOffSrc ) . a ) ; float4 aFilledColor2 = float4 ( pow ( textureFilledA . Sample ( LinearClampSampler , uv . xy + uvOffDst ) . xyz , 2.2f ) , textureFilledA . Sample ( LinearClampSampler , uv . xy + uvOffDst ) . a ) ; float4 bFilledColor1 = float4 ( pow ( textureFilledB . Sample ( LinearClampSampler , uv . xy + uvOffSrc ) . xyz , 2.2f ) , textureFilledB . Sample ( LinearClampSampler , uv . xy + uvOffSrc ) . a ) ; float4 bFilledColor2 = float4 ( pow ( textureFilledB . Sample ( LinearClampSampler , uv . xy + uvOffDst ) . xyz , 2.2f ) , textureFilledB . Sample ( LinearClampSampler , uv . xy + uvOffDst ) . a ) ; float4 aFilledColor = lerp ( aFilledColor1 , aFilledColor2 , chamAmount ) ; float4 bFilledColor = lerp ( bFilledColor1 , bFilledColor2 , chamAmount ) ; float filledStepAmount = GetChamStepAmount ( 0 ) ; float filledMaskAmount = chamMask ; float2 filledVals = uv . xy ; float filledAmount = ComputeCham ( filledVals , scarfMeter , vMin , vMax , filledMaskAmount , chamDirUp , chamDirRight , chamDirOmni , filledStepAmount ) ; filledAmount = saturate ( ( filledAmount - 0.75 ) * 4 ) ; aColor = lerp ( aColor , aFilledColor , filledAmount ) ; bColor = lerp ( bColor , bFilledColor , filledAmount ) ; #line 831 float scarfEdgeAmount = pow ( 1 - 2 * abs ( filledAmount - 0.5 ) , 2 ) ; #line 835 float vOffsetGlowAmt = saturate ( ( ( 2 * uv [ 1 ] ) - ( 1 - vOffset ) ) / ( 1 - vOffset ) ) ; float scarfGrowAmount = pow ( saturate ( vOffsetGlowAmt - 0.75 ) * 8 , 3 ) * vOffsetGlow ; aColor = lerp ( aColor , float4 ( 1 , 1 , 0.5 , aColor . a ) * 15 , max ( scarfEdgeAmount * ChamStep ( 0.05 , 0.06 , scarfMeter ) , scarfGrowAmount ) ) ; bColor = lerp ( bColor , float4 ( 1 , 1 , 0.5 , bColor . a ) * 15 , max ( scarfEdgeAmount * ChamStep ( 0.05 , 0.06 , scarfMeter ) , scarfGrowAmount ) ) ; #line 847 float4 mask1 = pow ( textureMask . Sample ( AnisoClampSampler , float2 ( uv . x * 2.0 , uv . y + uvOffSrc [ 1 ] ) ) , kSRGB ) ; float4 mask2 = pow ( textureMask . Sample ( AnisoClampSampler , float2 ( uv . x * 2.0 + 0.5 , uv . y + uvOffSrc [ 1 ] ) ) , kSRGB ) ; maskColor = lerp ( mask1 , mask2 , ( float ) ( 1.0 - filledAmount ) ) ; #line 852 if ( uv . y > 1.0 - vOffset ) { clip ( - 1.f ) ; #line 860 } float colorDiff = 1.0 ; #line 875 #line 878 float chamEdgeAmount = pow ( 1 - 2 * abs ( chamAmount - 0.5 ) , 2 ) * ( float ) colorDiff ; #line 881 aColor = lerp ( aColor , float4 ( 1 , 1 , 0.5 , aColor . a ) * 75 , chamEdgeAmount * chamEdgeMult ) ; bColor = lerp ( bColor , float4 ( 1 , 1 , 0.5 , bColor . a ) * 75 , chamEdgeAmount * chamEdgeMult ) ; #line 885 #line 888 color = lerp ( aColor , bColor , abBlend ) * ( 1.0 + max ( abBlend - 1.0 , 0.0 ) ) ; #line 895 #line 899 float glowMask = saturate ( 2.0 * maskColor . g ) ; float eyeMask = saturate ( 2.0 * maskColor . g - 1.0 ) ; color . rgb = lerp ( color . rgb , color . rgb * 15 , saturate ( max ( eyeMask , abBlend * glowMask ) ) * lerp ( 1.0 , 0.0 , frozen * ( 1.0 - chamAmount ) ) ) ; #line 914 #line 918 float3 scarfBaseColor1 = pow ( textureAtlasA . Sample ( AnisoClampSampler , float2 ( uvOffSrc . x + 80.0 / 512.0 , 1.0 / 2048.0 ) ) , kSRGB ) . xyz ; float3 scarfBaseColor2 = pow ( textureAtlasA . Sample ( AnisoClampSampler , float2 ( uvOffDst . x + 80.0 / 512.0 , 1.0 / 2048.0 ) ) , kSRGB ) . xyz ; float3 scarfBaseColor = lerp ( scarfBaseColor1 , scarfBaseColor2 , ( float ) chamAmount ) ; float scarfBaseBlend = saturate ( 400 * uv . y - 11.5 ) ; color . rgb = lerp ( scarfBaseColor , color . rgb , scarfBaseBlend ) ; #line 927 color . rgb *= 0.5 + detailColor . rgb ; #line 930 color . rgb *= 1.25 ; #line 934 float bright_irradience = 1.0 ; float dark_irradience = 1.0 ; #line 950 #line 954 float sideIntensity = 0 ; float shadow = 1 ; float3 duneLitColor = 0 ; float2 heightUV = ( float2 ( Opaque_fs_IN . worldPos . x , Opaque_fs_IN . worldPos . z ) + heightBiasUv . xy ) * heightScaleUv . xy ; float heightTap = heightTexture . Sample ( LinearClampSampler , heightUV ) . r ; float aboveDunes = Opaque_fs_IN . worldPos . y - ( heightBiasY + ( float ) heightTap ) ; sideIntensity = saturate ( 1.25 - 10.0 * aboveDunes ) ; sideIntensity *= sideIntensity ; #line 965 float2 sandUV = 16 * float2 ( uv . x * uScaleMult , uv . y * vScaleMult ) ; float3 sandNoiseTap = 2.0 * ( noiseSandTex . Sample ( PointWrapAnisoSampler , sandUV ) . xyz - 0.5 ) ; float sandNoise = sandNoiseTap . x ; Nn = normalize ( 3.5 * Nn + dirty * sandNoiseTap ) ; #line 972 const float terrainScale = 0.5 ; float2 duneUvBias = float2 ( ( 1 - 0.5 / 256.0 ) , 0.5 / 512.0 ) ; float2 duneUvScale = float2 ( - terrainScale / 256.0 , terrainScale / 512 ) ; float2 duneUv = duneUvBias + duneUvScale * Opaque_fs_IN . worldPos . xz ; float4 duneTap = pow ( duneTexture . Sample ( LinearWrapAnisoSampler , duneUv ) , kSRGB ) ; #line 981 float2 shadowBackPos = Opaque_fs_IN . worldPos . xz - ( Ln * aboveDunes / Ln . y ) . xz ; float4 shadowBackTap = pow ( duneTexture . Sample ( LinearWrapAnisoSampler , duneUvBias + duneUvScale * shadowBackPos ) , kSRGB ) ; float2 shadowFrontPos = Opaque_fs_IN . worldPos . xz + ( Ln * aboveDunes / Ln . y ) . xz ; float4 shadowFrontTap = pow ( duneTexture . Sample ( LinearWrapAnisoSampler , duneUvBias + duneUvScale * shadowFrontPos ) , kSRGB ) ; shadow = saturate ( 10 * ( max ( shadowBackTap . a , shadowFrontTap . a ) - ( 0.04 * sandNoise + 0.23 ) ) ) ; shadow = max ( shadow , saturate ( 4.0 * duneTap . a ) ) ; shadow = max ( shadow , saturate ( 0.5 * ( aboveDunes - duneMaxShadowY ) ) ) ; #line 994 float2 litUV = heightUV ; float4 litTap = duneColorTexture . Sample ( LinearClampSampler , litUV ) ; float3 litColor = 4.0 * litTap . rgb * litTap . rgb ; float velvDune = litTap . a ; float velvMesh = saturate ( 1.12 - abs ( dot ( Vn , 4.0 * Nn ) ) ) ; velvDune *= 0.333 * sandNoise ; velvMesh *= 0.333 + 0.333 * sandNoise ; float3 duneColor = ( 1.0 + velvMesh ) * duneTap . rgb ; duneLitColor = ( 1.0 + velvDune ) * litColor ; #line 1006 dirty *= saturate ( 1.3 * detailColor . b * detailColorLow . g ) ; #line 1009 color . rgb = lerp ( color . rgb , duneColor , ( 0.5 + 0.2 * frozen ) * dirty ) ; #line 1015 Nn = normalize ( Nn + 0.5 * ( detailColor . rgb - 0.5 ) ) ; #line 1018 float diffuse = OrenNayarDiffuse ( Ln , Vn , Nn , 0.5 ) ; float subSurface = OrenNayarDiffuse ( - Ln , Vn , Nn , 0.5 ) ; float fresnel = Opaque_fs_IN . fresSsL . x ; float a = sqrt ( 2.0 / 3.14159268 ) ; float schlickSmithShadow = 0.8 * 1.0 / ( ( diffuse * ( 1.0 - a ) + a ) * ( dot ( Nn , Vn ) * ( 1.0 - a ) + a ) ) ; float specPow = 0.0 ; float specLight = pow ( max ( saturate ( dot ( Nn , Hn ) ) , 0.00000000000001 ) , specPow ) ; float _specular = ( 8.0 + specPow ) / 25.0 * fresnel * schlickSmithShadow * specLight * diffuse ; #line 1029 float3 envOcc = 1.0 ; float3 specEnvOcc = 1.0 ; float3 lightEnvOcc = 1.0 ; envOcc = 8.0 * pow ( envOccCube . Sample ( LinearClampSampler , Nn ) . xyz , 2.2f ) ; float3 Rn2 = 2.0 * dot ( Nn , Vn ) * Nn - Vn ; specEnvOcc = 8.0 * pow ( envOccCube . Sample ( LinearClampSampler , Rn2 ) . xyz , 2.2f ) ; lightEnvOcc = float4 ( pow ( envOccCube . Sample ( LinearClampSampler , Ln ) . xyz , 2.2f ) , envOccCube . Sample ( LinearClampSampler , Ln ) . a ) . a ; float selfOcclusion = 1.0 ; selfOcclusion *= maskColor . b ; float subSurfaceOcc = Opaque_fs_IN . fresSsL . y ; float specOcc = 1.0 ; specOcc *= saturate ( 2.0 * ( detailColor . r - 0.5 ) + 0.5 ) ; specOcc *= saturate ( 1.0 + innerSpec + face ) ; specOcc *= selfOcclusion ; float3 albedo = color . rgb ; float3 lightInt = shadow * l_c . rgb ; float3 specInt = shadow * l_s . rgb ; #line 1057 float3 fillColor = pow ( sandHiIrrCube . Sample ( LinearClampSampler , Nn ) . xyz , 2.2f ) ; #line 1060 float3 Rn = 2.0 * dot ( Nn , Vn ) * Nn - Vn ; float ambSpecRough = 0.0 ; float ambSpecInt = pow ( sandSpecLut . Sample ( LinearClampSampler , float2 ( dot ( Nn , Vn ) , ambSpecRough ) ) . x , 2.2f ) ; float3 ambSpecColor = pow ( sandSpecTexture . Sample ( LinearClampSampler , float2 ( Rn . y , ambSpecRough ) ) . xyz , 2.2f ) ; float3 ambSpec = 0.1 * ambSpecInt * ambSpecColor ; float3 result = 0 ; #line 1069 float slight = Opaque_fs_IN . fresSsL . z ; result += albedo * lightInt * slight * lightEnvOcc ; #line 1074 #line 1077 result += albedo * fillColor * envOcc ; #line 1080 float ss = saturate ( dot ( Nn , Vn ) * subSurface ) * dot ( l_c . rgb , float3 ( 0.3 , 0.59 , 0.11 ) ) * 0.55 ; float3 ssAlbedo = lerp ( dot ( albedo , float3 ( 0.3 , 0.59 , 0.11 ) ) . xxx , albedo , 1.0 + ss ) ; result += ssAlbedo * ( lightInt * subSurfaceOcc * lightEnvOcc * ss * ss ) ; #line 1085 result += specInt * _specular * lightEnvOcc * specOcc ; result += ambSpec * specEnvOcc * specOcc ; #line 1090 result += albedo * lightInt * diffuse * lightEnvOcc * selfOcclusion * saturate ( 1.0 - abs ( dot ( Vn , Ln ) - 0.2 ) ) * ambSpecInt ; result += albedo * fillColor * envOcc * selfOcclusion * ambSpecInt ; #line 1096 float3 Nns = normalize ( 1.5 * Nn + sandNoiseTap ) ; float sparkle = 2.0 * pow ( saturate ( 1.0 - abs ( dot ( Vn , normalize ( Nns + 0.25 * Vn ) ) ) ) , 8.0 ) ; result += dirty * sparkle * ambSpecColor * shadow * specOcc ; #line 1103 result *= bright_irradience * dark_irradience ; #line 1106 result = lerp ( result , duneLitColor , sideIntensity ) ; #line 1109 result = lerp ( result , float3 ( 500 , 350 , 100 ) * .3 , ( float ) dudeSuperGlow ) ; #line 1114 #line 1118 float snapT = Opaque_fs_IN . uv . y ; float snapLevelMin = - 0.2f ; float snapLevelMax = 0.2f ; float snapLevelInput = snapT - dudeSnapLevel + 0.2 * ( detailColor . r - 0.5 ) ; float snapCham = ChamStep ( snapLevelMin , snapLevelMax , snapLevelInput ) ; #line 1128 snapCham = snapCham * snapCham * snapCham ; result = lerp ( result , float3 ( 6 , 3 , 2 ) , ( float ) ( snapCham * dudeSnapGlow ) ) ; #line 1135 float halfDudeHeight = .40 ; float alpha = lerp ( 1 , 0 , saturate ( 2 * dudeDissolve - ( 1 - saturate ( Opaque_fs_IN . worldPos . y - dudeCenter . y + halfDudeHeight ) ) ) - chamMask ) ; float bottomOfDude = dudeCenter . y - halfDudeHeight ; float distFromBottom = ( Opaque_fs_IN . worldPos . y - bottomOfDude ) ; float sandFade = lerp ( 0 , 1 , clamp ( distFromBottom - ( 1 - dudeDissolve ) , 0 , .10 ) * 10 ) ; #line 1147 sandFade = lerp ( 0 , 1 , clamp ( 2 * dudeDissolve - ( 1 - uv . y ) , 0 , 1 ) ) * 0.7 ; result . rgb = lerp ( result . rgb , duneLitColor , ( float ) sandFade ) ; color . a *= ChamStep ( 0.80 , 0.82 , alpha + .1 ) ; #line 1158 Opaque_fs_OUT . color = float4 ( result . rgb , Opaque_fs_IN . color . a * saturate ( 5 * ( color . a - 0.5 ) + 0.5 ) ) ; #line 1163 Opaque_fs_OUT . color . a = Opaque_fs_OUT . color . a > 0.5 ? 2.0 + sideIntensity : Opaque_fs_OUT . color . a ; #line 1177 #line 1181 clip ( Opaque_fs_OUT . color . a - 0.5f ) ; } technique11 Opaque { pass pass0 { SetVertexShader ( CompileShader ( vs_5_0 , Opaque_vs_main ( ) ) ) ; SetPixelShader ( CompileShader ( ps_5_0 , Opaque_fs_main ( ) ) ) ; SetBlendState ( ourBlendState , float4 ( 0.0f , 0.0f , 0.0f , 0.0f ) , 0xFFFFFFFF ) ; SetDepthStencilState ( ourDepthStencilState , 0 ) ; SetRasterizerState ( ourRasterState ) ; } } #line 1217 þïþï ˆD:\Dev\TGC\Journey\head\Journey\shaderd:\dev\tgc\journey\head\journey\shader#line 1 "D:\\Dev\\TGC\\Journey\\head\\Journey\\Data\\Shaders\\S_Cloth_vs__Cloth_fs__16143.fx" #line 0 "D:/Dev/TGC/Journey/head/Journey/Data/Shaders/S_Cloth_vs__Cloth_fs__16143.fx" #line 10 BlendState ourBlendState { BlendEnable [ 0 ] = FALSE ; BlendEnable [ 1 ] = FALSE ; SrcBlend [ 0 ] = Src_Alpha ; DestBlend [ 0 ] = Inv_Src_Alpha ; BlendOp [ 0 ] = ADD ; SrcBlendAâ0€ç‹¾ÊÕ)(â0w'*§†()B< ºG ºGMicrosoft (R) HLSL Shader Compiler 10.1®=hlslFlags0x4005hlslTargetps_5_0hlslEntryOpaque_fs_mainhlslDefines /DALPHATESTENABLE=1 /DSAND=1 /DSKINNING_ENABLED=1 /DSCARF=1 /DPHYRE_D3DFX=1 /DAO=1 /DREMOTE=16@Šˆˆä Opaque_fs_main2> Opaque_fs_INPäˆPäˆPäˆP äˆ PäˆPäˆPäˆPäˆP äˆ P$äˆ$P(äˆ(P,äˆ0P0äˆ4P4äˆ8P8äˆ<P<äˆ@P@äˆDPDäˆHPHäˆLPLäˆPPPäˆTPTäˆXPXäˆ\P\äˆ`P`äˆdPdäˆhPhäˆlPläˆpPpäˆtPtäˆxPxäˆ|P|䈀P€äˆ„P„䈈PˆäˆŒPŒäˆ�P�䈔P”䈘P˜äˆœPœäˆ P äˆ¤P¤äˆ¨P¨äˆ°Px „~\6> Opaque_fs_OUTPäˆPäˆPäˆP äˆ P ‰p P p‰ˆ*>@faceP,p.>colorPI2<8 PI2<8$PI2<8(P I?,P 0ˆD .>@abBlendP0H.>@uvBlendPD .>@vOffsetPXÔA2>@scarfMeterPlp>*>@vMinP€¸-*>@vMaxP”@- 2>@uScaleMultP¨dN42>@vScaleMultP¼PN02>@invisFromPÐD $.>@invisToPä@(2>@chamDirUpPøx6,2>@chamDirRightP 8782>@chamDirOmniPpè6<2>@chamEdgeMultP„�P@2>@innerSpecP˜”nD.>@frozenP¬Ä@H.>@dirtyPÀ VLP`ZÔ#*>uvPÔœ@PPÔ(†T.> uvOffSrcP¨dP¼<Pø È7ÄP p@À.> uvOffDstPÐÈG`Päl*d*>LnP<œupP<œutP<œux*>NnP¤HV4L„€P¤HV4L„„P¤HV4L„ˆPì[Ø@Pì[ØHPì[.L*>VnPð „�Pð „”P𠄘*>HnPXŒi PXŒi¤PXŒi¨2>maskColorP ° XPDtPD-.>@channelsPldX2>@detUvMultP(Ä\.> detUvP`HhP`Hl2>detailColorP, Ѐ°P, °W´P, °W¸P , p ¼6>detailColorLowP ŒRhP  Àl.>@noiseP d\2> aColor1UvP( ÄÈP( , Ì2> aColor2UvPD tÐPD tÔ2> bColor1UvP` XØP` XÜ2> bColor2UvP| ¬àP| ¬ä.>aColor1P¼ðP¼ôP¼øP ¼ü.>aColor2PŒPŒPŒP Œ .>bColor1PüHÐPüHÔPüHØP üHÜ.>bColor2Pl àPl äPl èP l ì.>@chamMaskP0,t0„2>@stepAmountP �$6>@chamMaskAmountP  (2>@chamAmountPtø 0hXPl(`% .> neckUVP@ l.>@chamBackPL'´0h .>aColorPØ(ìðPØ(ìôPØ(ìøP Ø(ìüPÄ9Ð PÄ9Ð$PÄ9Ð(P Ä9Ð,.>bColorPD)ÐPD)ÔPD)ØP D)Ü6>aFilledColor1PÜ)¤àPÜ)¤äPÜ)¤èP 8*Hì6>aFilledColor2PÐ*xPÐ*xPÐ*xP ,+À 6>bFilledColor1PÄ+ÔIPÄ+ÔIPÄ+ÔIP  ,Ü]6>bFilledColor2P¸,I P¸,I$P¸,I(P -è\,2>aFilledColorP€-\ àP€-\ äP€-\ èP €-\ ì2>bFilledColorPì-@FPì-TFPì-ŒGP ì-\ 6>@filledStepAmountP¨.ü$6>@filledMaskAmountP¼. U2>@filledAmountPÀ88 0h6>@scarfEdgeAmountPX;86>@vOffsetGlowAmtP <0<6>@scarfGrowAmountPÀ=¬<.>mask1P°B08P°BD<.>mask2PtChdPtChl2>@colorDiffPÌDD6>@chamEdgeAmountPF¬.>@glowMaskPlIH.>@eyeMaskPðI6>scarfBaseColor1P|L¼ÀP|L¼ÄP|L¼È6>scarfBaseColor2PM4`PM4dPM4l6>scarfBaseColorPˆM,`PˆM,dPˆM,l6>@scarfBaseBlendP Nì:>@bright_irradienceP OÐ/6>@dark_irradienceP O¸0 6>@sideIntensityP|P€9<.>@shadowPDV|(2>duneLitColorPÔY(00PÔY(04PÔY(08.> heightUVP`OØP`Oð2>@heightTapP OT82>@aboveDunesPôOÐ8.> sandUVP Q 0P Qp42>sandNoiseTapPœQ¸*`PœQ¸*dPœQ`8l2>@sandNoiseP°Q¤*`2> duneUvBiasP|Rh0P|Rh42> duneUvScalePœR,PPœR,X.> duneUvPÔR,ÀPÔR,Ä.>duneTapPDSXÀPDSXÄPDSXÈP DS¸6Ì6> shadowBackPosP°SÐP°SÔ6>shadowBackTapP XTÔ@6> shadowFrontPosP¬TðÐP¬TðÔ6>shadowFrontTapP TU0.> litUVPpWÈPpWà.>litTapPœW€ÔPœW€ØPœW€ÜP œWpÐ.>litColorPàWô0PàWô4PàWô8.>@velvDunePôWÐPYl.>@velvMeshPØX¨2>duneColorPœYLÀPœYLÄPœYLÈ.>@diffusePdÐ2>@subSurfaceP(l€ P.>@fresnelP@aPPlôh:>@schlickSmithShadowP|m0h.>@specPowP�mÐ|2>@specLightPDnÔ€2>@_specularPìnX.>envOccP�ol€P�ol„P�olˆ2>specEnvOccP¼pl P¼pl¤P¼pl¨2>lightEnvOccPüp¸´Püp¸¸Püp¸¼*>Rn2Pp, Pp,¤Pp,¨6>@selfOcclusionPqhP,qÄ 6>@subSurfaceOccP@q h.>@specOccPTqH|Pœr@ .>albedoPÌr` PÌr`$PÌr`(.>lightIntPìr�ÀPìr�ÄPìr�È.>specIntP s¬ÐP s¬ÔP s¬Ø2>fillColorPˆstàPˆstäPˆstè*>RnPtàð2>@ambSpecIntP°tD2>ambSpecColorP@u¼ðP@u¼ôP@u¼ø.>ambSpecPxu„Pxu„Pxu„.>resultP˜utP˜utP˜utP yTÐP yTÔP yTØP`y° P`y°¤P`y°¨P{ŒpP{ŒtP{ŒxPœ{ Pœ{$Pœ{(P¤~8P¤~8P¤~8PÜ~T PÜ~p PÜ~ .>@slightP¬uà|*>@ssPDw¼P.>ssAlbedoPôwŒ PôwŒ$PôwŒ(*>NnsP,|D@P,|DDP,|DH.>@sparkleP~8.>@snapTPØ` 2>@snapLevelMinPì@2>@snapLevelMaxP€6>@snapLevelInputP €t .>@snapChamP°�x 6>@halfDudeHeightP¨‚Ä .>@alphaPä„t .>@sandFadeP¤†P.> kSRGBPøHS.Mø˜<  ! 8‰H  ‹,  >> €Pd \*>@tP, 8\*>@xP, L|NBMø >  � <  h �ü  :   hF> €PŒ$.>@frozenPü¤H2>@frozenStepP0$2>@stepAmountPx($N¦MøÀP  �Ì  _ aƒ [‚è t €Œƒ ’°   ] ‚ü  _ ‚Ô  Y = F@  Y0 ‚€  / 3 P  R V p r B> €P`X.>@uvChamP°Ä *>@vMinP°Ä *>@vMaxP°Ä .>@uvMaskP°Ä (2>@dirUpMultP°Ä ,2>@dirRightMultP°Ä 82>@dirOmniMultP°Ä <6>@chamStepAmountP°Ä $.>@sideUVPÄ,X*>@upUVPØ0l2>@chamAmountUpPèl6>@chamAmountRightPÐ<X6>@chamAmountAllPÔ |rM$>lG  #‘p t4 9 ��<  !“T P % 64 # A0 I W G c4 # e ! p4  r4 78  9 €üB> €PÔl.>@uvValuePT´l.>@uvChamPT”|.>@uvMinPT”.>@uvMaxPT” .>@uvMaskPT”Œ6>@chamStepAmountPT”œ.>@uvRangePˆè¬.>@chamBasePÄtl:MìBhG  9 €¼“   #• + 34  54 7 8>> €PÀl*>@minPL¬*>@maxPМ.>@inputP4lNNrM$> L  #”X t4 9 ��<  !–< P % 64 # A0 I W G c4 # e ! p4  r4 78  9 €üB> €P<€lP¼X.>@uvValueP<´X.>@uvChamP<”|.>@uvMinP<˜¬.>@uvMaxP<4¼.>@uvMaskP<”Œ6>@chamStepAmountP<”È.>@uvRangePp”¼.>@chamBaseP¬tX:MpGL  9 €¼–  #—ì + 34  54 7 8>> €Pì¼lP¨X*>@minPìL¬*>@maxPìÐÈ.>@inputPì4XNNrM$>¼P  #—\ t4 9 ��<  !™@ P % 64 # A0 I W G c4 # e ! p4  r4 78  9 €üB> €P@€XPÀ|.>@uvValueP@´¬.>@uvChamP@€|.>@uvMinP@˜¼.>@uvMaxP@4È.>@uvMaskP@Œ6>@chamStepAmount.>@uvRangePt`È.>@chamBaseP°t|:M$L¸P  9 €¼™   #šð + 34  54 7 8>> €Pð¼XP¬|*>@minPðLŒ*>@maxPðМ.>@inputPð4|NNN¦Møxc  ›¤  _ aƒ [‚è t €Œƒ �ˆ   ] ‚ü  _ ‚Ô  Y = F@  Y0 ‚€  / 3 P  R V p r B> €P8' .>@uvChamPˆ *>@vMinPˆ<|*>@vMaxPˆØŒ.>@uvMaskPˆ�(2>@dirUpMultPˆÄ ,2>@dirRightMultPˆÄ 82>@dirOmniMultPˆÄ <6>@chamStepAmountPˆ¨$.>@sideUVPœ@œ*>@upUVP°0l2>@chamAmountUpPÀ Œl6>@chamAmountRightP¨#¤|6>@chamAmountAllP¬&p rMÄP$Z  #œH t4 9 ��<  !ž, P % 64 # A0 I W G c4 # e ! p4  r4 78  9 €üB> €P¬ l.>@uvValueP,´l.>@uvChamP,” .>@uvMinP,˜|.>@uvMaxP,4Œ.>@uvMaskP,”(6>@chamStepAmountP,”$.>@uvRangeP,4ÈP`”Œ.>@chamBasePœtl:MŒU Z  9 €¼�ø  #ŸÜ + 34  54 7 8>> €P˜ l*>@minPÜL|*>@maxPÜÐ$.>@inputPÜ4lNNrMÄPØ^  #Ÿ0 t4 9 ��<  !¡ P % 64 # A0 I W G c4 # e ! p4  r4 78  9 €üB> €P!€lP”#|.>@uvValueP!Èœ.>@uvChamP!” .>@uvMinP!˜|.>@uvMaxP!4Œ.>@uvMaskP!”(6>@chamStepAmountP!”¬.>@uvRangePH!èŒ.>@chamBaseP„"t|:M(ZÔ^  9 €¼ à  #¢Ä + 34  54 7 8>> €PÄ"¼lP€#|*>@minPÄ"LŒ*>@maxPÄ"Ь.>@inputPÄ"4|NNrMÄPtc  #¢4 t4 9 ��<  !¤ P % 64 # A0 I W G c4 # e ! p4  r4 78  9 €üB> €P$€|P˜& .>@uvValueP$´Œ.>@uvChamP$€ .>@uvMinP$˜œ.>@uvMaxP$4¬.>@uvMaskP$(6>@chamStepAmount.>@uvRangePL$`¬.>@chamBasePˆ%t :MÜ^pc  9 €¼£ä  #¥È + 34  54 7 8>> €PÈ%¼|P„& *>@minPÈ%L(*>@maxPÈ%h$.>@inputPÈ%4 NNNBMøe  ¬ <  h ®  :   hF> €P”.$.>@frozenP.`$2>@frozenStepP.0(2>@stepAmountP€.($N¦Mø¸w  ­  _ aƒ [‚è t €Œƒ ®ü   ] ‚ü  _ ‚Ô  Y = F@  Y0 ‚€  / 3 P  R V p r B> €P¬8.>@uvChamPü.Ä *>@vMin*>@vMax.>@uvMaskPü.�(2>@dirUpMultPü.Ä ,2>@dirRightMultPü.Ä 82>@dirOmniMultPü.Ä <6>@chamStepAmountPü.¨$.>@sideUVP/° P*>@upUVP$/DX2>@chamAmountUpPü.¼lP426>@chamAmountRightPü.¤|P5< 6>@chamAmountAllP 8 $rMedn  #­¼ t4 9 ��<  !¯  P % 64 # A0 I W G c4 # e ! p4  r4 78  9 €üB> €P 2.>@uvValueP /ÈX.>@uvChamP /”d.>@uvMinP /˜.>@uvMaxP /4 .>@uvMaskP /”(6>@chamStepAmountP /”$.>@uvRangeP /4¬PÔ/è .>@chamBaseP1t:MÌi`n  9 €¼¯l  #±P + 34  54 7 8>> €P 2*>@minPP1L *>@maxPP1Ð$.>@inputPP14NNrMes  #°¤ t4 9 ��<  !²ˆ P % 64 # A0 I W G c4 # e ! p4  r4 78  9 €üB> €Pˆ2€P5 .>@uvValuePˆ2”P.>@uvChamPˆ2”d.>@uvMinPˆ2˜ .>@uvMaxPˆ24X.>@uvMaskPˆ2”(6>@chamStepAmountPˆ2”l.>@uvRangeP¼2èX.>@chamBasePø3t :Mhns  9 €¼²T  #´8 + 34  54 7 8>> €P84¼Pô4 *>@minP84LX*>@maxP84Ðl.>@inputP844 NNrMe´w  #³¨ t4 9 ��<  !µŒ P % 64 # A0 I W G c4 # e ! p4  r4 78  9 €üB> €PŒ5€ P 8$.>@uvValuePŒ5´X.>@uvChamPŒ5€d.>@uvMinPŒ5˜l.>@uvMaxPŒ54|.>@uvMaskPŒ5(6>@chamStepAmount.>@uvRangePÀ5`|.>@chamBasePü6t(:Ms°w  9 €¼µX  #·< + 34  54 7 8>> €P<7¼ Pø7$*>@minP<7LX*>@maxP<7h$.>@inputP<74(NNN:Mø y  9 €¼¼   #¾„ + 34  54 7 8>> €P@?X*>@minP„>LX*>@maxP„>Ød.>@inputP„>ØN>MøŒz  9 €¼¾Ä  #À@¨ + 34  54 7 8>> €PdA*>@minP¨@LX*>@maxP¨@Ød.>@inputP¨@4N.Møà€  'ÀZ\ (  $ *�Ì i�Ì -�T , * 6 1€ˆ p �`T  %À\@ &   " (�Ì 3 >�Ì , @4 X cL P D e4  gL  +  *  (   & 2  4  4 ! -  / # 3 K8 /8 O [ / _ j /L ) l n F> €Pd.> lightP@\ÜpP@\ÜtP@\Üx*> viewP@\Ü�P@\Ü”P@\ܘ*> normP@\Ü@P@\ÜHP@\ÜL2>@roughnessP@\Œ.>@VdotNP\\4P.>@LdotNPx\LX2>@cos_theta_iPŒ\8X.>@theta_rPX^Xh.>@theta_iP$`Ä|2>@cos_phi_diffPxa„P.>@alphaP”aˆ€*>@betaP°aèh.>@sigma2PÌaÀ*>@APTbÈ|*>@BP¨bŒN.Mød‡  'Àbh (  $ *�Ì i�Ì -�T , * 6 1€ˆ p �`T  %ÀdL &   " (�Ì 3 >�Ì , @4 X cL P D e4  gL  +  *  (   & 2  4  4 ! -  / # 3 K8 /8 O [ / _ j /L ) l n F> €PLdÈPlP.> lightPLdЀPLdЄPLdЈ*> viewPLdÜ�PLdÜ”PLdܘ*> normPLdÜ@PLdÜHPLdÜL2>@roughnessPLdŒP.>@VdotNPhd4X.>@LdotNP„dLh2>@cos_theta_iP˜d8h.>@theta_rPdfX|.>@theta_iP0høŒ2>@cos_phi_diffP„i„X.>@alphaP iˆ€*>@betaP¼iè|.>@sigma2PØiÀP*>@APLdd|P`jÈ„*>@BP´jŒPN>MøÐˆ  9 €¼À~ü  #À€à + 34  54 7 8>> €Pœ� *>@minPà€L*>@maxPà€Ð.>@inputPà€4 N>Mø<Š  9 €¼À…t  #À‡X + 34  54 7 8>> €Pˆ *>@minPX‡L*>@maxPX‡Ø.>@inputPX‡4 NR ÿÿÿÿÿÿkSRGBô8œáî³Ôš±~,ÔÑk…I÷†K‡—‡Ñ‡ò ~ü‰($ä[€ä[ | Ü}øU€øU_€_0`€0`Da€DaXb€Xblc€lc€d€€d”e€”e¨f€¨f¼g€¼gÐh€Ðhäi€äiøj€øj k€ k k€ k<k€<kTk€Tkpl€pl„m€„m˜n€˜n¬o€¬oÀu€ÀuÔ¬€Ô¬ì¬€ì¬¬€¬$¬€$¬@¬€@¬\¬€\¬x¬€x¬”¯€”¯¨¯€¨¯¼°€¼°Ð°€Ð°ä¸€ä¸¸€¸¸€¸<¹€<¹X¹€X¹t¹€t¹ˆ¹€ˆ¹¤º€¤ºÀº€ÀºÔº€Ôºð»€ð» »€ »(»€(»<»€<»XÊ€XÊl΀lΈ΀ˆÎ¤Î€¤ÎÐ΀ÐÎä΀äÎÎ€ÎØ€Ø(Ú€(ÚDÚ€DÚ`Û€`ÛˆÛ€ˆÛ´Û€´ÛÜÛ€ÜÛÛ€Û$Û€$ÛLÛ€LÛxÛ€xÛ”Û€”Û¼Û€¼ÛèÛ€èÛ Û€ Û, Ü€, ÜT Ü€T Ü€ Ü€€ ܨ Ü€¨ ÜÔ Ü€Ô Üð Ü€ð Ü ß€ ß8 ߀8 ßT ߀T ß| ߀| ߘ 倘 åÀ å€À åì å€ì å ç€ ç ç€ ç ç€ ç, ç€, çH ç€H çd ç€d çx ê€x ê” ê€” ê¸ ë€¸ ëÔ ë€Ô ëø ë€ø ë ì€ ì( í€( íD î€D î` ï€` ï| ð€| ð˜ ð€˜ ðÈ ñ€È ñä ñ€ä ñ ò€ ò0 ò€0 ò` ó€` ó| ó€| ó¬ ö€¬ öØ ö€Ø öì ö€ì öö€ö÷€÷H÷€H÷\÷€\÷x÷€x÷Œø€Œø¸ø€¸øÌø€Ìøèø€èøüù€üù(ù€(ù<ù€<ùXù€Xùlû€lûˆü€ˆü¤ý€¤ýÀþ€Àþ܀ܸ€ø€0€0D€D`€`t€t�€�¬€¬È€Èä€äè€èü€ü€$€$@€@\€\x€xŒ€Œ € ¸€¸Ô€Ôð€ð € €$€$8€8L€L`€`t€tˆ€ˆœ€œ°€°Ä€ÄØ€ØÜ€Üð€ð€€,€,@€@T€Tl€lˆ€ˆœ€œ¸€¸Ô€Ôì€ì€$€$<€<X€Xp€pŒ€Œ¨€¨Ä€ÄÈ€ÈÜ€Üð€ð€€8€8P€Pl€lˆ€ˆ¤€¤À€ÀÔ€Ôè€èì€ì€€(€(<€<T€Tp€p„€„ € ¼€¼Ô€Ôð€ð € $€$@€@X€Xt€t�€�¬€¬°€°Ä€ÄØ€Øì€ì€ € 8€8T€Tp€pŒ€Œ¨€¨¼€¼Ð€ÐÔ€Ôè€èü€ü€$€$@€@X€Xt€tˆ€ˆ¤€¤À€ÀØ€Øô€ô€(€(D€D\€\x€x”€”°€°´€´È€ÈÜ€Üð€ð€$€$<€<X€Xt€t�€�¬€¬À€ÀÔ€Ôð€ð € (€(D€D`€`t€tˆ€ˆ¤€¤¸€¸Ô€Ôð€ð € $€$@€@D€D`€`t€tˆ€ˆœ€œ°€°´€´È€ÈÜ€Üð€ð€€,€,D€D`€`t€t�€�¬€¬Ä€Äà€àü€ü€0€0H€Hd€d€€€œ€œ € ´€´È€ÈÜ€Üô€ô € ( €( D €D ` €` | €| ˜ €˜ ¬ €¬ À €À Ä €Ä Ø €Ø ì €ì !€!!€!,!€,!H!€H!\!€\!x!€x!”!€”!¬!€¬!È!€È!ä!€ä!ü!€ü!"€"0"€0"L"€L"h"€h"„"€„"ˆ"€ˆ"œ"€œ"°"€°"Ä"€Ä"Ü"€Ü"ø"€ø"#€#,#€,#H#€H#d#€d#€#€€#”#€”#¨#€¨#¬#€¬#À#€À#Ô#€Ô#è#€è#ü#€ü#$€$0$€0$L$€L$`$€`$|$€|$˜$€˜$°$€°$Ì$€Ì$è$€è$%€%%€%4%€4%P%€P%l%€l%ˆ%€ˆ%Œ%€Œ% %€ %´%€´%È%€È%à%€à%ü%€ü%&€&0&€0&L&€L&h&€h&„&€„&˜&€˜&¬&€¬&È&€È&ä&€ä&'€''€'8'€8'L' €L' `' €`' |' €|' �' €�' ¬' €¬' È' €È' ä'!€ä'!(!€(!(!€(!4(!€4(!P(!€P(!l($€l($„($€„($ ($€ ($¼($€¼($Ø(%€Ø(%ð(%€ð(% )%€ )%()%€()%D)+€D)+`)+€`)+Œ)+€Œ)+ )+€ )+È)+€È)+Ü)+€Ü)+ø)+€ø)+$*+€$*+8*,€8*,T*,€T*,€*,€€*,”*,€”*,¼*,€¼*,Ð*,€Ð*,ì*,€ì*,+,€+,,+-€,+-H+-€H+-t+-€t+-ˆ+-€ˆ+-°+-€°+-Ä+-€Ä+-à+-€à+- ,-€ ,- ,.€ ,.<,.€<,.h,.€h,.|,.€|,.¤,.€¤,.¸,.€¸,.Ô,.€Ô,.-.€-.-0€-0,-0€,-0H-0€H-0d-0€d-0€-1€€-1˜-1€˜-1´-1€´-1Ð-1€Ð-1ì-3€ì-3ð-3€ð-3.3€.3.3€.3,.3€,.3H.3€H.3d.3€d.3€.3€€.3”.3€”.3¨.4€¨.4¼.6€¼.6À.6€À.6Ô.6€Ô.6è.6€è.6ü.6€ü.6/6€/6$/6€$/6(/6€(/6F€>F>F€>F(>F€(>FD>F€D>FH>F€H>F\>F€\>Fp>F€p>F„>F€„>Fœ>F€œ>F¸>F€¸>FÐ>F€Ð>Fì>F€ì>F?F€?F$?F€$?F@?F€@?F\?F€\?Fx?F€x?F�?F€�?F¬?F€¬?FÈ?F€È?Fä?G€ä?G@G€@G$@G€$@G8@G€8@GL@G€L@Gh@G€h@Gl@G€l@G€@G€€@G”@G€”@G¨@G€¨@GÀ@G€À@GÜ@G€Ü@Gô@G€ô@GAG€AG,AG€,AGHAG€HAGdAG€dAG€AG€€AGœAG€œAG´AG€´AGÐAG€ÐAGìAG€ìAGBO€BO$BO€$BO@BO€@BOlBO€lBO€BO€€BOœBO€œBO°BP€°BPÌBP€ÌBPèBP€èBPCP€CP0CP€0CPDCP€DCP`CP€`CPtCQ€tCQŒCQ€ŒCQ¨CQ€¨CQÀCQ€ÀCQÜCQ€ÜCQøCQ€øCQDT€DT,DT€,DTHDT€HDTdDT€dDTpDW€pDWŒDW€ŒDW¨DW€¨DW´D]€´D]¸D`€¸D`ÌDn€ÌDnàDn€àDnôDn€ôDnEn€En$En€$En<><><><6 43 10 ./ -# !K.:K.:K&<K&EKGKGK I5 35 35 35 3)')')'B>B@B@B@868686'#'%'%'% ~K[~_n~r~|~|~|\5\Z1P[1#]1Ž¢1a¤1#¤1Õá1¨ã1#ã1+1ç-1#-1/¤R\¤%^¤�ž¤b ¤% ¤¢3/3/3131pAcpep nO MO MO MO MO MOM55355353+)+)+)+)220220220220_S_]_]_]_S_]_]_]_S_]_]_]_S_]_]_]G*G.EGE=+=+=1=1=3=3=;53535353535353535 3GEGEGEGE�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž�Ž� Ž9/9/959597977'37'3š˜š-Aš˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š˜š ˜5+5+51515353O&BOMOMOMOM=;=;=;=;=;=;=;=;ÊZkÊ+mÊ%|Ê%|Ê%|ʯÀÊ€ÂÊ ÈÊZkÊ+mÊ%|Ê%|Ê%|ʯÀÊ€ÂÊ ÈÊZkÊ+mÊ%|Ê%|Ê%|ʯÀÊ€ÂÊ ÈÊZkÊ+mÊ%|Ê%|Ê%|ʯÀÊ€ÂÊ ÈOMOMOMOMOMOMOMOM64646464646464646 4' %Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ�Ÿ �=!3=!3=9=9=;=;<:<:<:<:<:<:<:<:L#DL'DL1BL1BL+DL+DL'DL#DL#DLJLJLJb+6b+6b>Hb>Hb>Hb)Jb)JbR\bR\bR\b'^b`b`^.B^.B^#D^#D^#H^#H^N^N^N^N^\�@�E�E�E�E�a…�a…�a…�a…�a…�a…�a…�a…�a…�a…�a…�O…�I™�›�›�›�›�@�E�E�E�E�a…�a…�a…�a…�a…�a…�a…�a…�a…�a…�a…�O…�I™�›�›�›�›ƒNYƒ]sƒwƒ�ƒ�ƒ�‰NY‰N_‰cy‰}‰‡‰‡‰‡K4EK4EKIKIKIKI!!! !!       _"A_&A_0?_0?_*A_*A_&A_"A_"A_G_G_G_]i@iEiEiEiEiIeigigigigi@iEiEiEiEiIeigigigigX .X .X .X .X@LX@LX:TX4TX V7!37575< 2< 8< 8<:<:¤(7¤(7¤Vg¤Fi¤;k¤;k¤�œ¤�œ¤‚ž¤o ¤o ¤o ¤o ¤; ¤¢¤¢¤¢¤¢™Zt™$‡™$‡™‘™‘™‘™Zt™$‡™$‡™‘™‘™‘_]_]_]_]='2='2='9='9=;=;JHJHJHJH,*,*# !! ‰p‰‡TNT R\8X\Z\Z;'7; 7; 7;9;9$"OMO#5O9KOMj#Zj#fj#fjh( &88!4848 68 68 6F DQ OM"KMK_S_]_]_]]=K]=T][][‡_y‡Ry‡"{‡…‡…‡…^>L^>U^\‰`{‰S{‰#}‰‡‰‡‰‡qmq MqSbqSiq kq kqmqoqo>(8>:>:><R0JR0JR(LRNRNRP NL9(97! H9@H.BH(DH(DH!DH!DHFHF#!#!+)+)+);';92#20F-FBFDFDFDU<GU6GU4QUSUSUSUS?#9?#9?;?;? =? =? ==;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;=;= ;B@B+.B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B@B @0 .) 'v<Bv<Bv0Dv0HvP^vdjvdjvPlvPpv.rv t a.<a#>a#>aSa_a_a_e%e.e8eMeYecYHYWYWYWYW2&2&2+2020^M^\^\^\^\�c‘�› $"6 4 C#7C#7C9C?CACACA4)40424242! *()'`O`^`^`^1%1%1*1/1/ƒSaƒtƒtƒ�ƒ�ƒ�ƒ!rƒ!rƒ�ƒ�ƒ�6%64 / -88(8686+ +)+)t)t6t8t8t<ktktrhJh]dhfhfhfhfO3OAOFOKOMOM;!;/;9;9.".,.,‰‰)‰7‰G‰bp‰bv‰bv‰\x‰\x‰Vx‰Vx‰Kz‰Kz‰z‰‡‰‡H H)H9HFHF8%84868686oU]oO]oC_oC_oC_o8ao2co2co,co,co!eo!eomomomomomomAA,A5A?A?3131=;=;=;=;ZXZXZXZX) '!  T0T0T<PT<PT4RTRPNPNPNPNPNPNPNPNPNPNPNP N/"/-]1]AW][][][][ ¢ ¢ ¢-<¢-<¢B�¢Q|¢Q|¢Q�¢F�¢F�¢B�¢B�¢-‘¢-‘¢"“¢"“¢"ž¢"ž¢ ¢ ¢ ¢ [S[S['6['6[<E[<E[<E['G['G[Q[Q[Q[Q[S[S[S[S[YNLNLNLNL8686868+48686868686868686}[q}ao}ao}[q}[w}Py}Py}5y}{s!?sCUs!q/ +/ +/-/-/-öä Þ   ì ç ì ç ì ç  ì ç ì ç ì ç   ì ç ì ç ì ç ç ç ô ô ç çŒ Hp˜Äð $H`xœÀà(Lp”¸Üü@d„¨Ìð4T| @@   @  * @@@@@@@@  @@@@@@ @@@ @  òñ    ¨òñ  ¨òñ     ¨òñ # $ Ê18&| ÿÿÿÿ˜˜ @float4óòñ@ float3óòñæ positionñ color  normalóòñ ,uvóòñ <worldPosñ Leyeòñ \extra lextra2óòñ |extra3óòñ Œextra4óòñ œfresSsLòñ b¨isFrontFaceòñ" ¬Opaque_fs_v2f color"Opaque_fs_f2f @float2óòñ @†°t%øœ½O_ã8 #line 0 "D:/Dev/TGC/Journey/head/Journey/Data/Shaders/Migratory.sh" #line 8 #line 16 #line 20 #line 135 #line 140 #line 147 BlendState NoBlend_BlendState { BlendEnable [ 0 ] = FALSE ; } ; BlendState Alpha_BlendState { BlendEnable [ 0 ] = TRUE ; SrcBlend [ 0 ] = Src_Alpha ; DestBlend [ 0 ] = Inv_Src_Alpha ; BlendOp [ 0 ] = ADD ; SrcBlendAlpha [ 0 ] = Src_Alpha ; DestBlendAlpha [ 0 ] = Inv_Src_Alpha ; BlendOpAlpha [ 0 ] = ADD ; BlendEnable [ 1 ] = FALSE ; } ; BlendState Additive_BlendState { BlendEnable [ 0 ] = TRUE ; SrcBlend [ 0 ] = Src_Alpha ; DestBlend [ 0 ] = ONE ; BlendOp [ 0 ] = ADD ; SrcBlendAlpha [ 0 ] = Src_Alpha ; DestBlendAlpha [ 0 ] = ONE ; BlendOpAlpha [ 0 ] = ADD ; BlendEnable [ 1 ] = FALSE ; } ; #line 180 BlendState ParticleBlended_BlendState { BlendEnable [ 0 ] = TRUE ; SrcBlend [ 0 ] = ONE ; DestBlend [ 0 ] = Inv_Src_Alpha ; BlendOp [ 0 ] = ADD ; SrcBlendAlpha [ 0 ] = ONE ; DestBlendAlpha [ 0 ] = Inv_Src_Alpha ; BlendOpAlpha [ 0 ] = ADD ; BlendEnable [ 1 ] = FALSE ; } ; DepthStencilState NoDepthTest_NoDepthWrite_DepthState { DepthEnable = FALSE ; DepthWriteMask = Zero ; DepthFunc = Less ; StencilEnable = FALSE ; } ; DepthStencilState NoDepthTest_DepthWrite_DepthState { DepthEnable = FALSE ; DepthWriteMask = All ; DepthFunc = Less ; StencilEnable = FALSE ; } ; DepthStencilState DepthTest_NoDepthWrite_DepthState { DepthEnable = TRUE ; DepthWriteMask = Zero ; DepthFunc = Less ; StencilEnable = FALSE ; } ; DepthStencilState DepthTest_DepthWrite_DepthState { DepthEnable = TRUE ; DepthWriteMask = All ; DepthFunc = Less ; StencilEnable = FALSE ; } ; RasterizerState NoCull_RasterizerState { CullMode = None ; } ; RasterizerState BackFaceCull_RasterizerState { CullMode = Back ; FrontCounterClockwise = TRUE ; } ; RasterizerState FrontFaceCull_RasterizerState { CullMode = Front ; FrontCounterClockwise = TRUE ; } ; #line 243 #line 246 #line 264 #line 269 sampler PointClampSampler : register ( s8 ) { Filter = Min_Mag_Mip_Point ; AddressU = Clamp ; AddressV = Clamp ; AddressW = Clamp ; } ; sampler LinearClampSampler : register ( s9 ) { Filter = Min_Mag_Mip_Linear ; AddressU = Clamp ; AddressV = Clamp ; AddressW = Clamp ; } ; sampler LinearWrapTSampler : register ( s10 ) { Filter = Min_Mag_Mip_Linear ; AddressU = Clamp ; AddressV = Wrap ; AddressW = Clamp ; } ; sampler LinearWrapSampler : register ( s11 ) { Filter = Min_Mag_Mip_Linear ; AddressU = Wrap ; AddressV = Wrap ; AddressW = Wrap ; } ; sampler PointWrapSampler : register ( s12 ) { Filter = Min_Mag_Mip_Point ; AddressU = Wrap ; AddressV = Wrap ; AddressW = Wrap ; } ; sampler AnisoClampSampler : register ( s13 ) { Filter = ANISOTROPIC ; AddressU = Clamp ; AddressV = Clamp ; AddressW = Clamp ; MaxAnisotropy = 16 ; } ; sampler LinearWrapAnisoSampler : register ( s14 ) { Filter = ANISOTROPIC ; AddressU = Wrap ; AddressV = Wrap ; AddressW = Wrap ; MaxAnisotropy = 16 ; } ; sampler PointWrapAnisoSampler : register ( s15 ) { Filter = Min_Mag_Point_Mip_Linear ; AddressU = Wrap ; AddressV = Wrap ; AddressW = Wrap ; MaxAnisotropy = 16 ; } ; static const float kSRGB = 2.2f ; #line 358 #line 373 #line 408 #line 427 #line 435 #line 498 #line 516 #line 521 float cameraNearTimesFar ; float cameraFarMinusNear ; float4 cameraNearFar ; #line 527 float ConvertDepth ( float depth ) { #line 532 float viewSpaceZ = - ( cameraNearTimesFar / ( depth * cameraFarMinusNear - cameraNearFar . y ) ) ; return viewSpaceZ ; } #line 542 #line 563 struct PSkinTransforms { float4x4 Mtxs [ 32 ] ; } ; cbuffer BoneTransformConstantBuffer { PSkinTransforms SkinTransforms ; } float4x4 GenerateBoneMatrix ( uint4 SkinIndices , float4 SkinWeights ) { return SkinTransforms . Mtxs [ SkinIndices [ 0 ] ] * SkinWeights [ 0 ] + SkinTransforms . Mtxs [ SkinIndices [ 1 ] ] * SkinWeights [ 1 ] + SkinTransforms . Mtxs [ SkinIndices [ 2 ] ] * SkinWeights [ 2 ] + SkinTransforms . Mtxs [ SkinIndices [ 3 ] ] * SkinWeights [ 3 ] ; } #line 592 static const float4x4 SCALE_BIAS = float4x4 ( float4 ( 0.5 , 0.0 , 0.0 , 0.5 ) , float4 ( 0.0 , - 0.5 , 0.0 , 0.5 ) , #line 598 float4 ( 0.0 , 0.0 , 0.5 , 0.5 ) , float4 ( 0.0 , 0.0 , 0.0 , 1.0 ) ) ; #line 613 #line 635 #line 642 #line 59 "D:/Dev/TGC/Journey/head/Journey/Data/Shaders/S_Cloth_vs__Cloth_fs__16143.fx" float4 eyePositionWS : eyePositionWS ; float4x4 viewprojection : viewprojection ; #line 68 #line 73 #line 80 float4 l_d ; #line 83 float4x4 dudeInvTorso ; #line 100 struct Opaque_vs_a2v { #line 111 float3 SkinnableVertex : POSITION ; float3 SkinnableNormal : NORMAL ; float2 uv : TEXCOORD0 ; float4 extraF32 : TEXCOORD1 ; float4 extraU8 : TEXCOORD2 ; float4 extra2U8 : TEXCOORD3 ; float4 Color : COLOR ; float4 SkinWeights : BLENDWEIGHTS ; #line 123 uint4 SkinIndices : BLENDINDICES ; } ; struct a2v_noSkin #line 131 { #line 135 float3 position : POSITION ; float3 normal : NORMAL ; float2 uv : TEXCOORD0 ; float4 extraF32 : TEXCOORD1 ; float4 extraU8 : TEXCOORD2 ; float4 extra2U8 : TEXCOORD3 ; float4 color : COLOR0 ; } ; a2v_noSkin ProcessSkInput ( Opaque_vs_a2v skIn ) { float4x4 transformMatrix = GenerateBoneMatrix ( skIn . SkinIndices , skIn . SkinWeights ) ; a2v_noSkin ret ; ret . position . xyz = mul ( float4 ( skIn . SkinnableVertex . xyz , 1 ) , transformMatrix ) . xyz ; #line 156 ret . normal = mul ( skIn . SkinnableNormal , ( float3x3 ) transformMatrix ) ; ret . uv = skIn . uv ; ret . extraF32 = skIn . extraF32 ; ret . extraU8 = skIn . extraU8 ; ret . extra2U8 = skIn . extra2U8 ; ret . color = skIn . Color ; return ret ; } #line 169 struct Opaque_vs_v2f { float4 position : SV_POSITION ; float4 color : COLOR0 ; float3 normal : TEXCOORD0 ; float4 uv : TEXCOORD1 ; float4 worldPos : TEXCOORD2 ; float4 eye : TEXCOORD3 ; float4 extra : TEXCOORD4 ; float4 extra2 : TEXCOORD5 ; float4 extra3 : TEXCOORD6 ; float4 extra4 : COLOR1 ; float3 fresSsL : TEXCOORD7 ; } ; void Opaque_vs_main ( in Opaque_vs_a2v IN_VAL , #line 189 out Opaque_vs_v2f Opaque_vs_OUT ) { a2v_noSkin Opaque_vs_IN = ProcessSkInput ( IN_VAL ) ; Opaque_vs_OUT . position = mul ( float4 ( Opaque_vs_IN . position . xyz , 1 ) , viewprojection ) ; Opaque_vs_OUT . worldPos = float4 ( Opaque_vs_IN . position . xyz , 1 ) ; Opaque_vs_OUT . normal = normalize ( Opaque_vs_IN . normal ) ; #line 201 Opaque_vs_OUT . uv . xy = Opaque_vs_IN . uv ; Opaque_vs_OUT . eye = float4 ( eyePositionWS . xyz - Opaque_vs_OUT . worldPos . xyz , Opaque_vs_OUT . worldPos . y ) ; #line 206 float3 Ln = normalize ( l_d . xyz ) ; float3 Vn = normalize ( Opaque_vs_OUT . eye . xyz ) ; float3 Hn = normalize ( Vn + Ln ) ; float F0 = 0.005 ; float fresnel = lerp ( F0 , 1.0 , pow ( max ( saturate ( 1.0 - dot ( Vn , Hn ) ) , 0.00000000000001 ) , 5.0 ) ) ; Opaque_vs_OUT . fresSsL . x = fresnel ; float ssOcc = 1.0 ; float3 torsoPos = mul ( float4 ( Opaque_vs_OUT . worldPos . xyz , 1.0 ) , dudeInvTorso ) . xyz ; float3 torsoNorm = normalize ( float3 ( 1 , 3 , 3 ) * torsoPos ) ; #line 219 float3 torsoEye = normalize ( mul ( Opaque_vs_OUT . eye . xyz , ( float3x3 ) dudeInvTorso ) ) ; ssOcc = 1.0 - saturate ( dot ( torsoEye , torsoNorm ) ) ; ssOcc *= saturate ( 0.1 - 0.1 * torsoPos . x ) ; ssOcc = max ( ssOcc , saturate ( 0.1 * length ( torsoPos ) - 0.333 ) ) ; #line 227 float3 torsoLight = normalize ( mul ( l_d . xyz , ( float3x3 ) dudeInvTorso ) ) ; float slight = 0.5 * ( 1.0 + sin ( 0.5 * 3.1415926 * dot ( torsoLight , torsoNorm ) ) ) ; Opaque_vs_OUT . fresSsL . z = slight ; #line 236 Opaque_vs_OUT . fresSsL . y = ssOcc ; #line 240 float MAX_CHANNELS = 4.0 ; int compressed = ( int ) floor ( 255.1 * Opaque_vs_IN . extraU8 . x ) ; int topBits = compressed / 16 ; int botBits = ( ( int ) floor ( compressed ) % 16 ) ; int invis = ( ( int ) floor ( topBits ) % 4 ) ; int iFrom = invis / 2 ; int iTo = ( ( int ) floor ( invis ) % 2 ) ; int chamDir = topBits / 4 ; int chamDirUp = ( ( int ) floor ( chamDir ) % 2 ) ; int chamDirRight = chamDir / 2 ; int u0 = botBits / 4 ; int u1 = ( ( int ) floor ( botBits ) % 4 ) ; #line 258 float abBlend = Opaque_vs_IN . extraF32 [ 0 ] ; float uvBlend = Opaque_vs_IN . extraF32 [ 1 ] ; float vOffset = Opaque_vs_IN . extraF32 [ 2 ] ; float scarfMeter = Opaque_vs_IN . extraF32 [ 3 ] ; float compressedVals = Opaque_vs_IN . extraU8 [ 0 ] ; float chamEdgeMult = Opaque_vs_IN . extraU8 [ 1 ] ; float vMin = Opaque_vs_IN . extraU8 [ 2 ] ; float vMax = Opaque_vs_IN . extraU8 [ 3 ] ; float uScaleMult = Opaque_vs_IN . extra2U8 [ 0 ] ; float vScaleMult = Opaque_vs_IN . extra2U8 [ 1 ] ; int iextra = ( int ) floor ( 255.1 * Opaque_vs_IN . extra2U8 [ 2 ] ) ; float innerSpec = ( ( int ) floor ( iextra ) % 2 ) ? 1.0 : 0.0 ; float frozen = ( ( int ) floor ( ( iextra / 2 ) ) % 2 ) ? 1.0 : 0.0 ; float dirty = Opaque_vs_IN . extra2U8 [ 3 ] * 2.f ; #line 276 #line 297 #line 300 float hueShift = Opaque_vs_IN . color [ 0 ] ; float saturation = Opaque_vs_IN . color [ 1 ] ; float value = Opaque_vs_IN . color [ 2 ] ; float alpha = Opaque_vs_IN . color [ 3 ] ; Opaque_vs_OUT . uv [ 2 ] = ( float ) u0 / MAX_CHANNELS ; Opaque_vs_OUT . uv [ 3 ] = ( float ) u1 / MAX_CHANNELS ; Opaque_vs_OUT . extra = float4 ( abBlend , uvBlend , vOffset , scarfMeter ) ; Opaque_vs_OUT . extra2 = float4 ( vMin , vMax , uScaleMult , vScaleMult ) ; Opaque_vs_OUT . extra3 = float4 ( ( float ) iFrom , ( float ) iTo , ( float ) chamDirUp , ( float ) chamDirRight ) ; Opaque_vs_OUT . extra4 = float4 ( chamEdgeMult , innerSpec , frozen , dirty ) ; Opaque_vs_OUT . color = float4 ( hueShift , saturation , value , alpha ) ; #line 317 } #line 0 "D:/Dev/TGC/Journey/head/Journey/Data/Shaders/migratory.sh" #line 642 #line 333 "D:/Dev/TGC/Journey/head/Journey/Data/Shaders/S_Cloth_vs__Cloth_fs__16143.fx" #line 337 #line 355 #line 361 #line 364 #line 371 Texture3D < float4 > noise3dTexture ; #line 376 float4 l_c , l_s , l_a ; #line 379 float velvetInt , velvetRatio ; #line 383 float4 localDudePos ; float4 remoteDudePos ; float localDudeGlow ; float remoteDudeGlow ; float4 specular ; float alphaHardness ; Texture2D < float4 > textureAtlasA ; Texture2D < float4 > textureAtlasB ; Texture2D < float4 > textureMask ; Texture2D < float4 > textureDetail ; Texture2D < float4 > textureFilledA ; Texture2D < float4 > textureFilledB ; #line 404 #line 408 float inShadow ; #line 411 float hsvHue ; float hsvSaturation ; float hsvValue ; #line 417 float dudeDissolve ; float dudeSuperGlow ; float dudeSnapGlow ; float dudeSnapLevel ; float4 dudeScarfRoot ; float4 dudeCenter ; #line 427 float dudeColdness ; #line 433 float vOffsetGlow ; #line 437 float dudeDecoGlow ; #line 441 TextureCube < float4 > sandHiIrrCube ; Texture2D < float4 > sandSpecTexture ; Texture2D < float4 > sandSpecLut ; Texture2D < float4 > noiseSandTex ; Texture2D < float4 > heightTexture ; float4 heightBiasUv ; float4 heightScaleUv ; float heightBiasY ; Texture2D < float4 > duneTexture ; Texture2D < float4 > duneColorTexture ; float duneMaxShadowY ; #line 457 TextureCube < float4 > envOccCube ; #line 465 float Luminance ( float3 color ) { float3 luminance = float3 ( 0.3 , 0.59 , 0.11 ) ; return dot ( luminance , color ) ; } float3 Saturation ( float3 color , float satLevel ) { float intensity = Luminance ( color ) ; return lerp ( float3 ( intensity , intensity , intensity ) , color , satLevel ) ; } float ClothStep ( float t , float x ) { #line 481 return ( float ) ( x >= t ) ; } float ChamStep ( float min , float max , float input ) { return saturate ( ( input - min ) / ( max - min ) ) ; } float ChamAmount ( float uvValue , float uvCham , float uvMin , float uvMax , float uvMask , float chamStepAmount ) { float uvRange = uvMax - uvMin ; float chamBase = saturate ( ( ( 2 + chamStepAmount ) * uvCham - ( ( uvValue - uvMin ) / uvRange ) ) - uvMask ) ; return ChamStep ( 0.0 , chamStepAmount , chamBase ) ; } #line 499 float OrenNayarDiffuse ( float3 light , float3 view , float3 norm , float roughness ) { float VdotN = dot ( view , norm ) ; float LdotN = dot ( light , norm ) ; float cos_theta_i = LdotN ; float theta_r = acos ( VdotN ) ; float theta_i = acos ( cos_theta_i ) ; float cos_phi_diff = dot ( normalize ( view - norm * VdotN ) , normalize ( light - norm * LdotN ) ) ; float alpha = max ( theta_i , theta_r ) ; float beta = min ( theta_i , theta_r ) ; float sigma2 = roughness * roughness ; float A = 1.0 - 0.5 * sigma2 / ( sigma2 + 0.33 ) ; float B = 0.45 * sigma2 / ( sigma2 + 0.09 ) ; return saturate ( cos_theta_i ) * ( A + ( B * saturate ( cos_phi_diff ) * sin ( alpha ) * tan ( beta ) ) ) ; } #line 522 float GetChamStepAmount ( float frozen ) { float frozenStep = 0.5 ; frozenStep = 0.5 ; float stepAmount = lerp ( 0.05 , frozenStep , frozen ) ; #line 534 #line 537 return stepAmount ; } #line 542 float ComputeCham ( float2 uv , float uvCham , float vMin , float vMax , float uvMask , float dirUpMult , float dirRightMult , float dirOmniMult , float chamStepAmount ) { float sideUV = uv [ 0 ] ; float upUV = uv [ 1 ] ; #line 552 float chamAmountUp = ChamAmount ( upUV , uvCham , vMin , vMax , uvMask , chamStepAmount ) ; float chamAmountRight = ChamAmount ( sideUV , uvCham , 0 , 0.25 , uvMask , chamStepAmount ) ; float chamAmountAll = ChamAmount ( 0 , uvCham , 0 , 1 , uvMask * 2 , chamStepAmount ) ; return max ( max ( chamAmountUp * dirUpMult , chamAmountRight * dirRightMult ) , chamAmountAll * dirOmniMult ) ; } #line 562 struct Opaque_fs_v2f { float4 position : SV_POSITION ; float4 color : COLOR0 ; float3 normal : TEXCOORD0 ; float4 uv : TEXCOORD1 ; float4 worldPos : TEXCOORD2 ; float4 eye : TEXCOORD3 ; float4 extra : TEXCOORD4 ; float4 extra2 : TEXCOORD5 ; float4 extra3 : TEXCOORD6 ; float4 extra4 : COLOR1 ; float3 fresSsL : TEXCOORD7 ; bool isFrontFace : SV_IsFrontFace ; #line 579 #line 582 } ; struct Opaque_fs_f2f { float4 color : SV_TARGET0 ; } ; #line 592 void Opaque_fs_main ( in Opaque_fs_v2f Opaque_fs_IN , out Opaque_fs_f2f Opaque_fs_OUT ) { #line 596 float face = Opaque_fs_IN . isFrontFace ? - 1.f : 1.f ; #line 602 #line 605 float4 color = float4 ( 1 , 1 , 1 , 1 ) ; float abBlend = Opaque_fs_IN . extra [ 0 ] ; float uvBlend = Opaque_fs_IN . extra [ 1 ] ; float vOffset = Opaque_fs_IN . extra [ 2 ] ; float scarfMeter = Opaque_fs_IN . extra [ 3 ] ; float vMin = Opaque_fs_IN . extra2 [ 0 ] ; float vMax = Opaque_fs_IN . extra2 [ 1 ] ; float uScaleMult = Opaque_fs_IN . extra2 [ 2 ] ; float vScaleMult = Opaque_fs_IN . extra2 [ 3 ] ; float invisFrom = Opaque_fs_IN . extra3 [ 0 ] ; float invisTo = Opaque_fs_IN . extra3 [ 1 ] ; float chamDirUp = Opaque_fs_IN . extra3 [ 2 ] ; float chamDirRight = Opaque_fs_IN . extra3 [ 3 ] ; float chamDirOmni = 1 - max ( chamDirUp , chamDirRight ) ; float chamEdgeMult = Opaque_fs_IN . extra4 [ 0 ] ; float innerSpec = Opaque_fs_IN . extra4 [ 1 ] ; float frozen = Opaque_fs_IN . extra4 [ 2 ] ; float dirty = Opaque_fs_IN . extra4 [ 3 ] ; float hue = Opaque_fs_IN . color [ 0 ] ; float saturation = Opaque_fs_IN . color [ 1 ] ; float value = Opaque_fs_IN . color [ 2 ] ; float4 uv = Opaque_fs_IN . uv ; #line 668 #line 673 #line 680 dirty = max ( dirty , saturate ( 2.0 * ( 1.0 - uvBlend ) * frozen ) ) ; float2 uvOffSrc = float2 ( uv [ 2 ] , vOffset ) ; float2 uvOffDst = float2 ( uv [ 3 ] , vOffset ) ; #line 694 float3 Ln = normalize ( l_d . xyz ) ; float3 Nn = normalize ( Opaque_fs_IN . normal . xyz * face ) ; float3 Vn = normalize ( Opaque_fs_IN . eye . xyz ) ; float3 Hn = normalize ( Vn + Ln ) ; #line 703 float4 maskColor = float4 ( 1 , 1 , 1 , 1 ) ; #line 708 #line 714 float channels = 4.0 ; #line 717 maskColor = pow ( textureMask . Sample ( AnisoClampSampler , float2 ( uv . x * channels , uv . y + vOffset ) ) , kSRGB ) ; #line 723 float detUvMult = 9.0 ; #line 726 detUvMult = 4.0 ; float2 detUv = Opaque_fs_IN . uv . xy * detUvMult * float2 ( uScaleMult , vScaleMult ) ; float4 detailColor = 0.25 * ( textureDetail . Sample ( LinearWrapSampler , 17.0 * detUv ) + textureDetail . Sample ( LinearWrapSampler , 3 * 17.0 * detUv . yx ) + textureDetail . Sample ( LinearWrapSampler , 237.0 * detUv ) + textureDetail . Sample ( LinearWrapSampler , 3.0 * 237.0 * detUv . yx ) ) ; float4 detailColorLow = 0.5 * ( textureDetail . Sample ( LinearWrapSampler , 0.5 * detUv ) + textureDetail . Sample ( LinearWrapSampler , 1.5 * detUv . yx ) ) ; #line 735 uv . xy += 0.004 * ( detailColor . rg - 0.5 ) ; #line 740 float noise = noise3dTexture . Sample ( LinearWrapSampler , 0.1 * Opaque_fs_IN . worldPos . xyz ) . xy . r ; Opaque_fs_IN . color . a = ClothStep ( noise , Opaque_fs_IN . color . a ) ; #line 746 uvOffDst = uvBlend == 0.0 ? uvOffSrc : uvOffDst ; uvOffSrc = uvBlend == 1.0 ? uvOffDst : uvOffSrc ; float2 aColor1Uv = uv . xy + uvOffSrc ; float2 aColor2Uv = uv . xy + uvOffDst ; float2 bColor1Uv = uv . xy + uvOffSrc ; float2 bColor2Uv = uv . xy + uvOffDst ; bColor1Uv = abBlend == 0.0 ? 0.0 : bColor1Uv ; bColor2Uv = abBlend == 0.0 ? 0.0 : bColor2Uv ; aColor1Uv = abBlend == 1.0 ? 0.0 : aColor1Uv ; aColor2Uv = abBlend == 1.0 ? 0.0 : aColor2Uv ; #line 758 float4 aColor1 = pow ( textureAtlasA . Sample ( AnisoClampSampler , aColor1Uv ) , kSRGB ) ; float4 aColor2 = pow ( textureAtlasA . Sample ( AnisoClampSampler , aColor2Uv ) , kSRGB ) ; float4 bColor1 = pow ( textureAtlasB . Sample ( AnisoClampSampler , bColor1Uv ) , kSRGB ) ; float4 bColor2 = pow ( textureAtlasB . Sample ( AnisoClampSampler , bColor2Uv ) , kSRGB ) ; aColor1 . a *= invisFrom ; aColor2 . a *= invisTo ; bColor1 . a *= invisFrom ; bColor2 . a *= invisTo ; #line 773 float chamMask = 0.5 * detailColor . a + 0.5 * detailColorLow . a ; chamMask = saturate ( ( chamMask - 0.25 ) * 2 ) * 0.125 ; #line 782 float stepAmount = GetChamStepAmount ( frozen ) ; float chamMaskAmount = lerp ( chamMask , maskColor . a , frozen ) ; float2 chamVals = uv . xy ; #line 791 float chamAmount = ComputeCham ( chamVals , uvBlend , vMin , vMax , chamMaskAmount , chamDirUp , chamDirRight , chamDirOmni , stepAmount ) ; chamAmount = saturate ( ( chamAmount - 0.75 ) * 4 ) ; #line 798 float2 neckUV = float2 ( uv . x , vMax - uv . y ) ; float chamBack = ComputeCham ( neckUV , max ( uvBlend , 0.7 ) , vMin , vMax , chamMaskAmount , chamDirUp , chamDirRight , chamDirOmni , stepAmount ) ; chamBack = saturate ( ( chamBack - 0.75 ) * 4 ) ; chamAmount = lerp ( chamAmount , min ( chamAmount , chamBack ) , frozen ) ; float4 aColor = lerp ( aColor1 , aColor2 , chamAmount ) ; float4 bColor = lerp ( bColor1 , bColor2 , chamAmount ) ; #line 808 #line 811 float4 aFilledColor1 = float4 ( pow ( textureFilledA . Sample ( LinearClampSampler , uv . xy + uvOffSrc ) . xyz , 2.2f ) , textureFilledA . Sample ( LinearClampSampler , uv . xy + uvOffSrc ) . a ) ; float4 aFilledColor2 = float4 ( pow ( textureFilledA . Sample ( LinearClampSampler , uv . xy + uvOffDst ) . xyz , 2.2f ) , textureFilledA . Sample ( LinearClampSampler , uv . xy + uvOffDst ) . a ) ; float4 bFilledColor1 = float4 ( pow ( textureFilledB . Sample ( LinearClampSampler , uv . xy + uvOffSrc ) . xyz , 2.2f ) , textureFilledB . Sample ( LinearClampSampler , uv . xy + uvOffSrc ) . a ) ; float4 bFilledColor2 = float4 ( pow ( textureFilledB . Sample ( LinearClampSampler , uv . xy + uvOffDst ) . xyz , 2.2f ) , textureFilledB . Sample ( LinearClampSampler , uv . xy + uvOffDst ) . a ) ; float4 aFilledColor = lerp ( aFilledColor1 , aFilledColor2 , chamAmount ) ; float4 bFilledColor = lerp ( bFilledColor1 , bFilledColor2 , chamAmount ) ; float filledStepAmount = GetChamStepAmount ( 0 ) ; float filledMaskAmount = chamMask ; float2 filledVals = uv . xy ; float filledAmount = ComputeCham ( filledVals , scarfMeter , vMin , vMax , filledMaskAmount , chamDirUp , chamDirRight , chamDirOmni , filledStepAmount ) ; filledAmount = saturate ( ( filledAmount - 0.75 ) * 4 ) ; aColor = lerp ( aColor , aFilledColor , filledAmount ) ; bColor = lerp ( bColor , bFilledColor , filledAmount ) ; #line 831 float scarfEdgeAmount = pow ( 1 - 2 * abs ( filledAmount - 0.5 ) , 2 ) ; #line 835 float vOffsetGlowAmt = saturate ( ( ( 2 * uv [ 1 ] ) - ( 1 - vOffset ) ) / ( 1 - vOffset ) ) ; float scarfGrowAmount = pow ( saturate ( vOffsetGlowAmt - 0.75 ) * 8 , 3 ) * vOffsetGlow ; aColor = lerp ( aColor , float4 ( 1 , 1 , 0.5 , aColor . a ) * 15 , max ( scarfEdgeAmount * ChamStep ( 0.05 , 0.06 , scarfMeter ) , scarfGrowAmount ) ) ; bColor = lerp ( bColor , float4 ( 1 , 1 , 0.5 , bColor . a ) * 15 , max ( scarfEdgeAmount * ChamStep ( 0.05 , 0.06 , scarfMeter ) , scarfGrowAmount ) ) ; #line 847 float4 mask1 = pow ( textureMask . Sample ( AnisoClampSampler , float2 ( uv . x * 2.0 , uv . y + uvOffSrc [ 1 ] ) ) , kSRGB ) ; float4 mask2 = pow ( textureMask . Sample ( AnisoClampSampler , float2 ( uv . x * 2.0 + 0.5 , uv . y + uvOffSrc [ 1 ] ) ) , kSRGB ) ; maskColor = lerp ( mask1 , mask2 , ( float ) ( 1.0 - filledAmount ) ) ; #line 852 if ( uv . y > 1.0 - vOffset ) { clip ( - 1.f ) ; #line 860 } float colorDiff = 1.0 ; #line 875 #line 878 float chamEdgeAmount = pow ( 1 - 2 * abs ( chamAmount - 0.5 ) , 2 ) * ( float ) colorDiff ; #line 881 aColor = lerp ( aColor , float4 ( 1 , 1 , 0.5 , aColor . a ) * 75 , chamEdgeAmount * chamEdgeMult ) ; bColor = lerp ( bColor , float4 ( 1 , 1 , 0.5 , bColor . a ) * 75 , chamEdgeAmount * chamEdgeMult ) ; #line 885 #line 888 color = lerp ( aColor , bColor , abBlend ) * ( 1.0 + max ( abBlend - 1.0 , 0.0 ) ) ; #line 895 #line 899 float glowMask = saturate ( 2.0 * maskColor . g ) ; float eyeMask = saturate ( 2.0 * maskColor . g - 1.0 ) ; color . rgb = lerp ( color . rgb , color . rgb * 15 , saturate ( max ( eyeMask , abBlend * glowMask ) ) * lerp ( 1.0 , 0.0 , frozen * ( 1.0 - chamAmount ) ) ) ; #line 914 #line 918 float3 scarfBaseColor1 = pow ( textureAtlasA . Sample ( AnisoClampSampler , float2 ( uvOffSrc . x + 80.0 / 512.0 , 1.0 / 2048.0 ) ) , kSRGB ) . xyz ; float3 scarfBaseColor2 = pow ( textureAtlasA . Sample ( AnisoClampSampler , float2 ( uvOffDst . x + 80.0 / 512.0 , 1.0 / 2048.0 ) ) , kSRGB ) . xyz ; float3 scarfBaseColor = lerp ( scarfBaseColor1 , scarfBaseColor2 , ( float ) chamAmount ) ; float scarfBaseBlend = saturate ( 400 * uv . y - 11.5 ) ; color . rgb = lerp ( scarfBaseColor , color . rgb , scarfBaseBlend ) ; #line 927 color . rgb *= 0.5 + detailColor . rgb ; #line 930 color . rgb *= 1.25 ; #line 934 float bright_irradience = 1.0 ; float dark_irradience = 1.0 ; #line 950 #line 954 float sideIntensity = 0 ; float shadow = 1 ; float3 duneLitColor = 0 ; float2 heightUV = ( float2 ( Opaque_fs_IN . worldPos . x , Opaque_fs_IN . worldPos . z ) + heightBiasUv . xy ) * heightScaleUv . xy ; float heightTap = heightTexture . Sample ( LinearClampSampler , heightUV ) . r ; float aboveDunes = Opaque_fs_IN . worldPos . y - ( heightBiasY + ( float ) heightTap ) ; sideIntensity = saturate ( 1.25 - 10.0 * aboveDunes ) ; sideIntensity *= sideIntensity ; #line 965 float2 sandUV = 16 * float2 ( uv . x * uScaleMult , uv . y * vScaleMult ) ; float3 sandNoiseTap = 2.0 * ( noiseSandTex . Sample ( PointWrapAnisoSampler , sandUV ) . xyz - 0.5 ) ; float sandNoise = sandNoiseTap . x ; Nn = normalize ( 3.5 * Nn + dirty * sandNoiseTap ) ; #line 972 const float terrainScale = 0.5 ; float2 duneUvBias = float2 ( ( 1 - 0.5 / 256.0 ) , 0.5 / 512.0 ) ; float2 duneUvScale = float2 ( - terrainScale / 256.0 , terrainScale / 512 ) ; float2 duneUv = duneUvBias + duneUvScale * Opaque_fs_IN . worldPos . xz ; float4 duneTap = pow ( duneTexture . Sample ( LinearWrapAnisoSampler , duneUv ) , kSRGB ) ; #line 981 float2 shadowBackPos = Opaque_fs_IN . worldPos . xz - ( Ln * aboveDunes / Ln . y ) . xz ; float4 shadowBackTap = pow ( duneTexture . Sample ( LinearWrapAnisoSampler , duneUvBias + duneUvScale * shadowBackPos ) , kSRGB ) ; float2 shadowFrontPos = Opaque_fs_IN . worldPos . xz + ( Ln * aboveDunes / Ln . y ) . xz ; float4 shadowFrontTap = pow ( duneTexture . Sample ( LinearWrapAnisoSampler , duneUvBias + duneUvScale * shadowFrontPos ) , kSRGB ) ; shadow = saturate ( 10 * ( max ( shadowBackTap . a , shadowFrontTap . a ) - ( 0.04 * sandNoise + 0.23 ) ) ) ; shadow = max ( shadow , saturate ( 4.0 * duneTap . a ) ) ; shadow = max ( shadow , saturate ( 0.5 * ( aboveDunes - duneMaxShadowY ) ) ) ; #line 994 float2 litUV = heightUV ; float4 litTap = duneColorTexture . Sample ( LinearClampSampler , litUV ) ; float3 litColor = 4.0 * litTap . rgb * litTap . rgb ; float velvDune = litTap . a ; float velvMesh = saturate ( 1.12 - abs ( dot ( Vn , 4.0 * Nn ) ) ) ; velvDune *= 0.333 * sandNoise ; velvMesh *= 0.333 + 0.333 * sandNoise ; float3 duneColor = ( 1.0 + velvMesh ) * duneTap . rgb ; duneLitColor = ( 1.0 + velvDune ) * litColor ; #line 1006 dirty *= saturate ( 1.3 * detailColor . b * detailColorLow . g ) ; #line 1009 color . rgb = lerp ( color . rgb , duneColor , ( 0.5 + 0.2 * frozen ) * dirty ) ; #line 1015 Nn = normalize ( Nn + 0.5 * ( detailColor . rgb - 0.5 ) ) ; #line 1018 float diffuse = OrenNayarDiffuse ( Ln , Vn , Nn , 0.5 ) ; float subSurface = OrenNayarDiffuse ( - Ln , Vn , Nn , 0.5 ) ; float fresnel = Opaque_fs_IN . fresSsL . x ; float a = sqrt ( 2.0 / 3.14159268 ) ; float schlickSmithShadow = 0.8 * 1.0 / ( ( diffuse * ( 1.0 - a ) + a ) * ( dot ( Nn , Vn ) * ( 1.0 - a ) + a ) ) ; float specPow = 0.0 ; float specLight = pow ( max ( saturate ( dot ( Nn , Hn ) ) , 0.00000000000001 ) , specPow ) ; float _specular = ( 8.0 + specPow ) / 25.0 * fresnel * schlickSmithShadow * specLight * diffuse ; #line 1029 float3 envOcc = 1.0 ; float3 specEnvOcc = 1.0 ; float3 lightEnvOcc = 1.0 ; envOcc = 8.0 * pow ( envOccCube . Sample ( LinearClampSampler , Nn ) . xyz , 2.2f ) ; float3 Rn2 = 2.0 * dot ( Nn , Vn ) * Nn - Vn ; specEnvOcc = 8.0 * pow ( envOccCube . Sample ( LinearClampSampler , Rn2 ) . xyz , 2.2f ) ; lightEnvOcc = float4 ( pow ( envOccCube . Sample ( LinearClampSampler , Ln ) . xyz , 2.2f ) , envOccCube . Sample ( LinearClampSampler , Ln ) . a ) . a ; float selfOcclusion = 1.0 ; selfOcclusion *= maskColor . b ; float subSurfaceOcc = Opaque_fs_IN . fresSsL . y ; float specOcc = 1.0 ; specOcc *= saturate ( 2.0 * ( detailColor . r - 0.5 ) + 0.5 ) ; specOcc *= saturate ( 1.0 + innerSpec + face ) ; specOcc *= selfOcclusion ; float3 albedo = color . rgb ; float3 lightInt = shadow * l_c . rgb ; float3 specInt = shadow * l_s . rgb ; #line 1057 float3 fillColor = pow ( sandHiIrrCube . Sample ( LinearClampSampler , Nn ) . xyz , 2.2f ) ; #line 1060 float3 Rn = 2.0 * dot ( Nn , Vn ) * Nn - Vn ; float ambSpecRough = 0.0 ; float ambSpecInt = pow ( sandSpecLut . Sample ( LinearClampSampler , float2 ( dot ( Nn , Vn ) , ambSpecRough ) ) . x , 2.2f ) ; float3 ambSpecColor = pow ( sandSpecTexture . Sample ( LinearClampSampler , float2 ( Rn . y , ambSpecRough ) ) . xyz , 2.2f ) ; float3 ambSpec = 0.1 * ambSpecInt * ambSpecColor ; float3 result = 0 ; #line 1069 float slight = Opaque_fs_IN . fresSsL . z ; result += albedo * lightInt * slight * lightEnvOcc ; #line 1074 #line 1077 result += albedo * fillColor * envOcc ; #line 1080 float ss = saturate ( dot ( Nn , Vn ) * subSurface ) * dot ( l_c . rgb , float3 ( 0.3 , 0.59 , 0.11 ) ) * 0.55 ; float3 ssAlbedo = lerp ( dot ( albedo , float3 ( 0.3 , 0.59 , 0.11 ) ) . xxx , albedo , 1.0 + ss ) ; result += ssAlbedo * ( lightInt * subSurfaceOcc * lightEnvOcc * ss * ss ) ; #line 1085 result += specInt * _specular * lightEnvOcc * specOcc ; result += ambSpec * specEnvOcc * specOcc ; #line 1090 result += albedo * lightInt * diffuse * lightEnvOcc * selfOcclusion * saturate ( 1.0 - abs ( dot ( Vn , Ln ) - 0.2 ) ) * ambSpecInt ; result += albedo * fillColor * envOcc * selfOcclusion * ambSpecInt ; #line 1096 float3 Nns = normalize ( 1.5 * Nn + sandNoiseTap ) ; float sparkle = 2.0 * pow ( saturate ( 1.0 - abs ( dot ( Vn , normalize ( Nns + 0.25 * Vn ) ) ) ) , 8.0 ) ; result += dirty * sparkle * ambSpecColor * shadow * specOcc ; #line 1103 result *= bright_irradience * dark_irradience ; #line 1106 result = lerp ( result , duneLitColor , sideIntensity ) ; #line 1109 result = lerp ( result , float3 ( 500 , 350 , 100 ) * .3 , ( float ) dudeSuperGlow ) ; #line 1114 #line 1118 float snapT = Opaque_fs_IN . uv . y ; float snapLevelMin = - 0.2f ; float snapLevelMax = 0.2f ; float snapLevelInput = snapT - dudeSnapLevel + 0.2 * ( detailColor . r - 0.5 ) ; float snapCham = ChamStep ( snapLevelMin , snapLevelMax , snapLevelInput ) ; #line 1128 snapCham = snapCham * snapCham * snapCham ; result = lerp ( result , float3 ( 6 , 3 , 2 ) , ( float ) ( snapCham * dudeSnapGlow ) ) ; #line 1135 float halfDudeHeight = .40 ; float alpha = lerp ( 1 , 0 , saturate ( 2 * dudeDissolve - ( 1 - saturate ( Opaque_fs_IN . worldPos . y - dudeCenter . y + halfDudeHeight ) ) ) - chamMask ) ; float bottomOfDude = dudeCenter . y - halfDudeHeight ; float distFromBottom = ( Opaque_fs_IN . worldPos . y - bottomOfDude ) ; float sandFade = lerp ( 0 , 1 , clamp ( distFromBottom - ( 1 - dudeDissolve ) , 0 , .10 ) * 10 ) ; #line 1147 sandFade = lerp ( 0 , 1 , clamp ( 2 * dudeDissolve - ( 1 - uv . y ) , 0 , 1 ) ) * 0.7 ; result . rgb = lerp ( result . rgb , duneLitColor , ( float ) sandFade ) ; color . a *= ChamStep ( 0.80 , 0.82 , alpha + .1 ) ; #line 1158 Opaque_fs_OUT . color = float4 ( result . rgb , Opaque_fs_IN . color . a * saturate ( 5 * ( color . a - 0.5 ) + 0.5 ) ) ; #line 1163 Opaque_fs_OUT . color . a = Opaque_fs_OUT . color . a > 0.5 ? 2.0 + sideIntensity : Opaque_fs_OUT . color . a ; #line 1177 #line 1181 clip ( Opaque_fs_OUT . color . a - 0.5f ) ; } technique11 Opaque { pass pass0 { SetVertexShader ( CompileShader ( vs_5_0 , Opaque_vs_main ( ) ) ) ; SetPixelShader ( CompileShader ( ps_5_0 , Opaque_fs_main ( ) ) ) ; SetBlendState ( ourBlendState , float4 ( 0.0f , 0.0f , 0.0f , 0.0f ) , 0xFFFFFFFF ) ; SetDepthStencilState ( ourDepthStencilState , 0 ) ; SetRasterizerState ( ourRasterState ) ; } } #line 1217 D:\\Dev\\TGC\\Journey\\head\\Journey\\Data\\Shaders\\S_Cloth_vs__Cloth_fs__16143.fxD:/Dev/TGC/Journey/head/Journey/Data/Shaders/S_Cloth_vs__Cloth_fs__16143.fxD:/Dev/TGC/Journey/head/Journey/Data/Shaders/Migratory.shD:/Dev/TGC/Journey/head/Journey/Data/Shaders/migratory.sh ÷†(P—‡)K‡Ñ‡ Ê18  ÿÿÿÿ  ClothStepòñGetChamStepAmountòñComputeChamChamAmountñChamStepóòñOrenNayarDiffuseóòñD3DSHDRü‰ `  ClothStepòñGetChamStepAmountòñComputeChamChamAmountñChamStepóòñOrenNayarDiffuseóòñÿÿÿÿ /ñŒ¹)…ý�yñ¡á5ÍÝeq©•ÅñUÁ! I}aAq%I™M   €€ @@ €@@ $0<HT`lx„œ¨´ÀÌØäðü ,8DP\ht€Œ˜%øOpaque_fs_main&Qÿÿÿÿÿÿ ÿÿLinearClampSampler&Qÿÿÿÿÿÿ ÿÿLinearWrapSampler&Qÿÿÿÿÿÿ ÿÿAnisoClampSampler*QÿÿÿÿÿÿÿÿLinearWrapAnisoSampler*QÿÿÿÿÿÿÿÿPointWrapAnisoSamplerR ÿÿÿÿÿÿkSRGBQpÿÿÿÿÿÿl_d"Qÿÿÿÿÿÿÿÿnoise3dTextureQÀÿÿÿÿÿÿl_cQÐÿÿÿÿÿÿl_s"Q!ÿÿÿÿÿÿÿÿtextureAtlasA"Q!ÿÿÿÿÿÿÿÿtextureAtlasBQ!ÿÿÿÿÿÿÿÿtextureMask"Q!ÿÿÿÿÿÿÿÿtextureDetai€ÿÿÿÿ /ñl"Q!ÿÿÿÿÿÿÿÿtextureFilledA"Q!ÿÿÿÿÿÿÿÿtextureFilledB"Q"TÿÿÿÿÿÿdudeDissolve"Q"XÿÿÿÿÿÿdudeSuperGlow"Q"\ÿÿÿÿÿÿdudeSnapGlow"Q"`ÿÿÿÿÿÿdudeSnapLevelQ€ÿÿÿÿÿÿdudeCenterQ"”ÿÿÿÿÿÿvOffsetGlow"Q%ÿÿÿÿÿÿÿÿsandHiIrrCube"Q!ÿÿÿÿÿÿÿÿsandSpecTextureQ!ÿÿÿÿ ÿÿÿÿsandSpecLut"Q!ÿÿÿÿ ÿÿÿÿnoiseSandTex"Q!ÿÿÿÿ ÿÿÿÿheightTexture"Q ÿÿÿÿÿÿheightBiasUv"Q°ÿÿÿÿÿÿheightScaleUvQ"ÀÿÿÿÿÿÿheightBiasYQ!ÿÿÿÿ ÿÿÿÿduneTexture&Q!ÿÿÿÿ ÿÿÿÿduneColorTexture"Q"ÄÿÿÿÿÿÿduneMaxShadowYQ%ÿÿÿÿÿÿÿÿenvOccCubeDev/TGC/Journey/head/Journey/Data/Shaders/migratory.shþïþïÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿ@€Opaque_fs_mainnoneÿÿÿÿw 1 Ž?\T ,Xü‰ ` `Š@€Opaque_fs_mainnone-º.ñü‰ `ÿÿÿÿü‰ÿÿÿÿÿÿÿÿ'{ÇD:\Dev\TGC\Journey\head\Journey\shaderD:\\Dev\\TGC\\Journey\\head\\Journey\\Data\\Shaders\\S_Cloth_vs__Cloth_fs__16143.fxD:/Dev/TGC/Journey/head/Journey/Data/Shaders/S_Cloth_vs__Cloth_fs__16143.fxD:/Dev/TGC/Journey/head/Journey/Data/Shaders/Migratory.shD:/”.1\Œ^›,£:¸%ƒN€ Ÿ�йÇT/LinkInfo/names/src/headerblock/src/files/d:\dev\tgc\journey\head\journey\shader" ÜQ3 °´gØKˆ€§†0   (´,À$ÕÔ#"LרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ     M  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÖ !%&' 8Ph€˜°Èà  0@1àôðH�0p €@1 ÀÐà|ðxôðàt p$ˆÄl@hDdH`L\PXTTXP\L`Àp°€ŒÀD”@˜  �°Ð0  0@1àôðH�0p €@1 ÀÐà|ðxôðàt p$ˆÄl@hDdH`L\PXTTXP\L`Àp°€ŒÀD”@˜  �°Ð08ÿÿÿÿ4xÿÿÿÿ4�ÿÿÿÿ4¨ÿÿÿÿ4Àÿÿÿÿ4Øÿÿÿÿ4ðÿÿÿÿ4hÿÿÿÿ4 ÿÿÿÿ4€ÿÿÿÿ4˜ÿÿÿÿ4Pÿÿÿÿ4°ÿÿÿÿ4ÿÿÿÿ4`ÿÿÿÿ4Èÿÿÿÿ4àÿÿÿÿ4øÿÿÿÿ4ÿÿÿÿ4(ÿÿÿÿ4@ÿÿÿÿ4Xÿÿÿÿ4pÿÿÿÿ4 484x 4� 4¨ 4À 4Ø 4ð4h4 4€4˜4P4°44`4È4à4ø 4ÿÿÿÿ4( 4@ÿÿÿÿ4X 4pÿÿÿÿ4 ÿÿÿÿ4@0p@1 @€@ À@Ð@à@|ð@xô@ð@à@t @p$AÐ0@l@@hD@dH@`L@\P@XT@TX@P\@L`@Àp@°€@H�@D”@@˜@  @�°@ŒÀ@ˆÄG4pÿÿÿÿG4XÿÿÿÿG4@ÿÿÿÿG4(ÿÿÿÿG4ÿÿÿÿG4øÿÿÿÿG4àÿÿÿÿG4ÈÿÿÿÿC4°ÿÿÿÿB4˜ÿÿÿÿB4€ÿÿÿÿB4hÿÿÿÿB4PÿÿÿÿB48ÿÿÿÿB4 ÿÿÿÿD4ÿÿÿÿB4ðÿÿÿÿB4ØÿÿÿÿB4ÀÿÿÿÿB4¨ÿÿÿÿB4�ÿÿÿÿB4xÿÿÿÿD4`ÿÿÿÿ�4 AnisoClampSamplerBoneTransformConstantBufferLinearClampSamplerLinearWrapAnisoSamplerLinearWrapSamplerLinearWrapTSamplerPointClampSamplerPointWrapAnisoSamplerPointWrapSampleralphaHardnessdudeCenterdudeColdnessdudeDecoGlowdudeDissolvedudeInvTorsodudeScarfRootdudeSnapGlowdudeSnapLeveldudeSuperGlowduneColorTextureduneMaxShadowYduneTextureenvOccCubeheightBiasUvheightBiasYheightScaleUvheightTexturehsvHuehsvSaturationhsvValueinShadowl_al_cl_dl_slocalDudeGlowlocalDudePosnoise3dTexturenoiseSandTexremoteDudeGlowremoteDudePossandHiIrrCubesandSpecLutsandSpecTexturespeculartextureAtlasAtextureAtlasBtextureDetailtextureFilledAtextureFilledBtextureMaskvOffsetGlowvelvetIntvelvetRatio ÝÁÿÿ¥¥##¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥05sv05spOpaque_fs_mainOpaque_vs_main jÊ8úP}Rh}R€}R˜}R°ÙÈ•è๊ BLENDINDICESBLENDWEIGHTSCOLORNORMALPOSITIONTEXCOORDÀµÐ05sv DXBCöL!D©i�|oR*óžn<Àµ8€ ¤ Ø /¸/RDEF@ ¤<þÿA RD11< ($ |…$GlobalsBoneTransformConstantBuffer«««|#ÔÐ…xLhÿÿÿÿÿÿÿÿŒhÿÿÿÿÿÿÿÿŸ´ÿÿÿÿÿÿÿÿØ ´ÿÿÿÿÿÿÿÿæ0@ÿÿÿÿÿÿÿÿ$p´ÿÿÿÿÿÿÿÿ(€@ÿÿÿÿÿÿÿÿ5À´ÿÿÿÿÿÿÿÿ9дÿÿÿÿÿÿÿÿ=à´ÿÿÿÿÿÿÿÿAðhÿÿÿÿÿÿÿÿKôhÿÿÿÿÿÿÿÿW´ÿÿÿÿÿÿÿÿd´ÿÿÿÿÿÿÿÿr hÿÿÿÿÿÿÿÿ€$hÿÿÿÿÿÿÿÿ�0´ÿÿÿÿÿÿÿÿ˜@hÿÿÿÿÿÿÿÿ¦Dhÿÿÿÿÿÿÿÿ¯Hhÿÿÿÿÿÿÿÿ¶LhÿÿÿÿÿÿÿÿÄPhÿÿÿÿÿÿÿÿÍThÿÿÿÿÿÿÿÿÚXhÿÿÿÿÿÿÿÿè\hÿÿÿÿÿÿÿÿõ`hÿÿÿÿÿÿÿÿp´ÿÿÿÿÿÿÿÿ€´ÿÿÿÿÿÿÿÿ�hÿÿÿÿÿÿÿÿ)”hÿÿÿÿÿÿÿÿ5˜hÿÿÿÿÿÿÿÿB ´ÿÿÿÿÿÿÿÿO°´ÿÿÿÿÿÿÿÿ]ÀhÿÿÿÿÿÿÿÿiÄhÿÿÿÿÿÿÿÿcameraNearTimesFarfloat«««_cameraFarMinusNearcameraNearFarfloat4­eyePositionWSviewprojectionfloat4x4««õl_ddudeInvTorsol_cl_sl_avelvetIntvelvetRatiolocalDudePosremoteDudePoslocalDudeGlowremoteDudeGlowspecularalphaHardnessinShadowhsvHuehsvSaturationhsvValuedudeDissolvedudeSuperGlowdudeSnapGlowdudeSnapLeveldudeScarfRootdudeCenterdudeColdnessvOffsetGlowdudeDecoGlowheightBiasUvheightScaleUvheightBiasYduneMaxShadowY ôÿÿÿÿÿÿÿÿSkinTransformsPSkinTransformsMtxs õ¿Äè¯Microsoft (R) HLSL Shader Compiler 10.1ISGN àéððððùÿ POSITIONNORMALTEXCOORDCOLORBLENDWEIGHTSBLENDINDICES«««OSGN, """"""" " SV_POSITIONCOLORTEXCOORD«SHEX<#PÏjˆYFŽ YFŽ _r_r_2_ò_ò_ò_ò_ò_ògò eò er eò eò eò eò eò eò eò  er  h :6rF6rF62F6B :&Ђ @8 òFŽ :8 òFŽ :8 òFŽ :&Ђ@8 òVFŽ :8 òVFŽ :8 òVFŽ :òFFòFFòFF&Ђ*@8 ò¦FŽ :8 ò¦FŽ :8 ò¦FŽ :òFFòFFòFF&Ђ:@8 òöFŽ :8 òöFŽ :8 òöFŽ :òFFòFFòFF6òF6òF6òF+‚@FF"FFBFFFF"FFBFF62F6B*6rF6rF62F6B*6rF6rF6rF+‚@ FFŽ " FFŽ B FFŽ ‚ FFŽ +‚ @6rF‚FFD‚:8r öF62 F6rF€ArFF‚ 6‚  ‚F‚ F‚ D‚:8röF‚ ‚FFD‚:8²öFrFF‚FFD‚:8röF6‚@ ×£;FF6 €A @€?4 @3 @€?4 @Ü$4(6"@€?8" 8  8  8 6":€A"@€?8 ‚: 6  :6‚@€?FFŽ "FFŽ BFFŽ +²@8²FF ‚FFD‚:8²öF FF‚ "FF‚ BFF‚ ‚FFD‚:8röF‚FF4‚:@3‚:@€?6‚:€A‚:@€?8‚ @ÍÌÌ=6‚:€A‚:@ÍÌÌ=4‚:@3‚:@€?8‚::FFK 8 @ÍÌÌ=6"@ú~ª¾ 4 @3 @€?4‚:  F‚ F‚  "F‚ F‚  BF‚ F‚ ‚FFD‚:8röFFF8 @ÚÉ?MÐ  @€?8 @?6B  6"  :6‚@€@8*@šCA  (" (B@W‚ @$" $B*@N"Ð*(B‚:@€' ‚@:7 ":*+ A  (B (‚@ @€$ *$B:@NÐ *(B ' ‚@ 7 :* +BAB*B*(‚*(@"*@€$B*:$‚ @NÐB*:(‚*' @7 B :*(‚*(@W"*@$‚*:$ @N‚Ð: (:"@€' "@7 ‚ :+B*AB*B*(*("@B*@€$B* $@NÐB* (*' "@*7 B *(("@WB@$" $@N"Ð ("*@€' "@7 " +A  (" (B@‚ @€$ $"*@NÐ (" ' B@:7 * ("(B@W‚@$"$"*@N"Ð("B:@€' B@*7 "*(" (B@W‚ @$" $B*@N"Ð*(B‚:@€' ‚@:7 ":*+ A  (B (‚@ @€$ *$B:@NÐ *(B ' ‚@ 7 :* 6B 6‚6*6":6B6‚*6:6" 6B8‚*@šCA‚:‚:+:A  (" (B@‚ @€$ $"*@NÐ (" ' B@:7 * ' @ 7  @€?@(":(B@W‚:@$‚:$"*@N‚Ð:(":B:@€' B@*7 ‚*:+‚:A‚:‚:(":(B@‚:@€$‚:$"*@NЂ:(":' B@:7 ‚*:' ‚@:7 ‚:@€?@8":@@6B 6‚6‚*6:+"B :+ ‚  :6 *6" :6B  6‚ 6 :6"  6B 6‚ *+ :+" *+B  +‚ 6  *6"  6B  :6‚  6 *6" :6B :6‚  6r F6r F>STAT”N uE 92SPDB†Microsoft C/C++ MSF 7.00 DSÃ$¿Àÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ <ÿÿÿÿ”.1\Œ^F4™�…§G¸ž¼ 0(eÜQ3lpha [ 0 ] = ONE ; DestBlendAlpha [ 0 ] = ONE ; BlendOpAlpha [ 0 ] = ADD ; RenderTargetWriteMask [ 0 ] = 15 ; AlphaToCoverageEnable = false ; } ; DepthStencilState ourDepthStencilState { DepthEnable = true ; DepthFunc = less ; StencilEnable = false ; } ; RasterizerState ourRasterState { CullMode = None ; DepthBias = 0.0f ; ScissorEnable = false ; MultiSampleEnable = false ; DepthClipEnable = false ; AntialiasedLineEnable = false ; } ; LèuƒÆZ©èc þ‡V§ÿxžP…dÀŸë�˜ÒZ…ögŸ© 8öëüA§©ÁË2í¸¬åd¹Œ�#line 1 "D:\\Dev\\TGC\\Journey\\head\\Journey\\Data\\Shaders\\S_Cloth_vs__Cloth_fs__16143.fx" #line 0 "D:/Dev/TGC/Journey/head/Journey/Data/Shaders/S_Cloth_vs__Cloth_fs__16143.fx" #line 10 BlendState ourBlendState { BlendEnable [ 0 ] = FALSE ; BlendEnable [ 1 ] = FALSE ; SrcBlend [ 0 ] = Src_Alpha ; DestBlend [ 0 ] = Inv_Src_Alpha ; BlendOp [ 0 ] = ADD ; SrcBlendAlpha [ 0 ] = ONE ; DestBlendAlpha [ 0 ] = ONE ; BlendOpAlpha [ 0 ] = ADD ; RenderTargetWriteMask [ 0 ] = 15 ; AlphaToCoverageEnable = false ; } ; DepthStencilState ourDepthStencilState { DepthEnable = true ; DepthFunc = less ; StencilEnable = false ; } ; RasterizerState ourRasterState { CullMode = None ; DepthBias = 0.0f ; ScissorEnable = false ; MultiSampleEnable = false ; DepthClipEnable = false ; AntialiasedLineEnable = false ; } ; #line 0 "D:/Dev/TGC/Journey/head/Journey/Data/Shaders/Migratory.sh" #line 8 #line 16 #line 20 #line 135 #line 140 #line 147 BlendState NoBlend_BlendState { BlendEnable [ 0 ] = FALSE ; } ; BlendState Alpha_BlendState { BlendEnable [ 0 ] = TRUE ; SrcBlend [ 0 ] = Src_Alpha ; DestBlend [ 0 ] = Inv_Src_Alpha ; BlendOp [ 0 ] = ADD ; SrcBlendAlpha [ 0 ] = Src_Alpha ; DestBlendAlpha [ 0 ] = Inv_Src_Alpha ; BlendOpAlpha [ 0 ] = ADD ; BlendEnable [ 1 ] = FALSE ; } ; BlendState Additive_BlendState { BlendEnable [ 0 ] = TRUE ; SrcBlend [ 0 ] = Src_Alpha ; DestBlend [ 0 ] = ONE ; BlendOp [ 0 ] = ADD ; SrcBlendAlpha [ 0 ] = Src_Alpha ; DestBlendAlpha [ 0 ] = ONE ; BlendOpAlpha [ 0 ] = ADD ; BlendEnable [ 1 ] = FALSE ; } ; #line 180 BlendState ParticleBlended_BlendState { BlendEnable [ 0 ] = TRUE ; SrcBlend [ 0 ] = ONE ; DestBlend [ 0 ] = Inv_Src_Alpha ; BlendOp [ 0 ] = ADD ; SrcBlendAlpha [ 0 ] = ONE ; DestBlendAlpha [ 0 ] = Inv_Src_Alpha ; BlendOpAlpha [ 0 ] = ADD ; BlendEnable [ 1 ] = FALSE ; } ; DepthStencilState NoDepthTest_NoDepthWrite_DepthState { DepthEnable = FALSE ; DepthWriteMask = Zero ; DepthFunc = Less ; StencilEnable = FALSE ; } ; DepthStencilState NoDepthTest_DepthWrite_DepthState { DepthEnable = FALSE ; DepthWriteMask = All ; DepthFunc = Less ; StencilEnable = FALSE ; } ; DepthStencilState DepthTest_NoDepthWrite_DepthState { DepthEnable = TRUE ; DepthWriteMask = Zero ; DepthFunc = Less ; StencilEnable = FALSE ; } ; DepthStencilState DepthTest_DepthWrite_DepthState { DepthEnable = TRUE ; DepthWriteMask = All ; DepthFunc = Less ; StencilEnable = FALSE ; } ; RasterizerState NoCull_RasterizerState { CullMode = None ; } ; RasterizerState BackFaceCull_RasterizerState { CullMode = Back ; FrontCounterClockwise = TRUE ; } ; RasterizerState FrontFaceCull_RasterizerState { CullMode = Front ; FrontCounterClockwise = TRUE ; } ; #line 243 #line 246 #line 264 #line 269 sampler PointClampSampler : register ( s8 ) { Filter = Min_Mag_Mip_Point ; AddressU = Clamp ; AddressV = Clamp ; AddressW = Clamp ; } ; sampler LinearClampSampler : register ( s9 ) { Filter = Min_Mag_Mip_Linear ; AddressU = Clamp ; AddressV = Clamp ; AddressW = Clamp ; } ; sampler LinearWrapTSampler : register ( s10 ) { Filter = Min_Mag_Mip_Linear ; AddressU = Clamp ; AddressV = Wrap ; AddressW = Clamp ; } ; sampler LinearWrapSampler : register ( s11 ) { Filter = Min_Mag_Mip_Linear ; AddressU = Wrap ; AddressV = Wrap ; AddressW = Wrap ; } ; sampler PointWrapSampler : register ( s12 ) { Filter = Min_Mag_Mip_Point ; AddressU = Wrap ; AddressV = Wrap ; AddressW = Wrap ; } ; sampler AnisoClampSampler : register ( s13 ) { Filter = ANISOTROPIC ; AddressU = Clamp ; AddressV = Clamp ; AddressW = Clamp ; MaxAnisotropy = 16 ; } ; sampler LinearWrapAnisoSampler : register ( s14 ) { Filter = ANISOTROPIC ; AddressU = Wrap ; AddressV = Wrap ; AddressW = Wrap ; MaxAnisotropy = 16 ; } ; sampler PointWrapAnisoSampler : register ( s15 ) { Filter = Min_Mag_Point_Mip_Linear ; AddressU = Wrap ; AddressV = Wrap ; AddressW = Wrap ; MaxAnisotropy = 16 ; } ; static const float kSRGB = 2.2f ; #line 358 #line 373 #line 408 #line 427 #line 435 #line 498 #line 516 #line 521 float cameraNearTimesFar ; float cameraFarMinusNear ; float4 cameraNearFar ; #line 527 float ConvertDepth ( float depth ) { #line 532 float viewSpaceZ = - ( cameraNearTimesFar / ( depth * cameraFarMinusNear - cameraNearFar . y ) ) ; return viewSpaceZ ; } #line 542 #line 563 struct PSkinTransforms { float4x4 Mtxs [ 32 ] ; } ; cbuffer BoneTransformConstantBuffer { PSkinTransforms SkinTransforms ; } float4x4 GenerateBoneMatrix ( uint4 SkinIndices , float4 SkinWeights ) { return SkinTransforms . Mtxs [ SkinIndices [ 0 ] ] * SkinWeights [ 0 ] + SkinTransforms . Mtxs [ SkinIndices [ 1 ] ] * SkinWeights [ 1 ] + SkinTransforms . Mtxs [ SkinIndices [ 2 ] ] * SkinWeights [ 2 ] + SkinTransforms . Mtxs [ SkinIndices [ 3 ] ] * SkinWeights [ 3 ] ; } #line 592 static const float4x4 SCALE_BIAS = float4x4 ( float4 ( 0.5 , 0.0 , 0.0 , 0.5 ) , float4 ( 0.0 , - 0.5 , 0.0 , 0.5 ) , #line 598 float4 ( 0.0 , 0.0 , 0.5 , 0.5 ) , float4 ( 0.0 , 0.0 , 0.0 , 1.0 ) ) ; #line 613 #line 635 #line 642 #line 59 "D:/Dev/TGC/Journey/head/Journey/Data/Shaders/S_Cloth_vs__Cloth_fs__16143.fx" float4 eyePositionWS : eyePositionWS ; float4x4 viewprojection : viewprojection ; #line 68 #line 73 #line 80 float4 l_d ; #line 83 float4x4 dudeInvTorso ; #line 100 struct Opaque_vs_a2v { #line 111 float3 SkinnableVertex : POSITION ; float3 SkinnableNormal : NORMAL ; float2 uv : TEXCOORD0 ; float4 extraF32 : TEXCOORD1 ; float4 extraU8 : TEXCOORD2 ; float4 extra2U8 : TEXCOORD3 ; float4 Color : COLOR ; float4 SkinWeights : BLENDWEIGHTS ; #line 123 uint4 SkinIndices : BLENDINDICES ; } ; struct a2v_noSkin #line 131 { #line 135 float3 position : POSITION ; float3 normal : NORMAL ; float2 uv : TEXCOORD0 ; float4 extraF32 : TEXCOORD1 ; float4 extraU8 : TEXCOORD2 ; float4 extra2U8 : TEXCOORD3 ; float4 color : COLOR0 ; } ; a2v_noSkin ProcessSkInput ( Opaque_vs_a2v skIn ) { float4x4 transformMatrix = GenerateBoneMatrix ( skIn . SkinIndices , skIn . SkinWeights ) ; a2v_noSkin ret ; ret . position . xyz = mul ( float4 ( skIn . SkinnableVertex . xyz , 1 ) , transformMatrix ) . xyz ; #line 156 ret . normal = mul ( skIn . SkinnableNormal , ( float3x3 ) transformMatrix ) ; ret . uv = skIn . uv ; ret . extraF32 = skIn . extraF32 ; ret . extraU8 = skIn . extraU8 ; ret . extra2U8 = skIn . extra2U8 ; ret . color = skIn . Color ; return ret ; } #line 169 struct Opaque_vs_v2f { float4 position : SV_POSITION ; float4 color : COLOR0 ; float3 normal : TEXCOORD0 ; float4 uv : TEXCOORD1 ; float4 worldPos : TEXCOORD2 ; float4 eye : TEXCOORD3 ; float4 extra : TEXCOORD4 ; float4 extra2 : TEXCOORD5 ; float4 extra3 : TEXCOORD6 ; float4 extra4 : COLOR1 ; float3 fresSsL : TEXCOORD7 ; } ; void Opaque_vs_main ( in Opaque_vs_a2v IN_VAL , #line 189 out Opaque_vs_v2f Opaque_vs_OUT ) { a2v_noSkin Opaque_vs_IN = ProcessSkInput ( IN_VAL ) ; Opaque_vs_OUT . position = mul ( float4 ( Opaque_vs_IN . position . xyz , 1 ) , viewprojection ) ; Opaque_vs_OUT . worldPos = float4 ( Opaque_vs_IN . position . xyz , 1 ) ; Opaque_vs_OUT . normal = normalize ( Opaque_vs_IN . normal ) ; #line 201 Opaque_vs_OUT . uv . xy = Opaque_vs_IN . uv ; Opaque_vs_OUT . eye = float4 ( eyePositionWS . xyz - Opaque_vs_OUT . worldPos . xyz , Opaque_vs_OUT . worldPos . y ) ; #line 206 float3 Ln = normalize ( l_d . xyz ) ; float3 Vn = normalize ( Opaque_vs_OUT . eye . xyz ) ; float3 Hn = normalize ( Vn + Ln ) ; float F0 = 0.005 ; float fresnel = lerp ( F0 , 1.0 , pow ( max ( saturate ( 1.0 - dot ( Vn , Hn ) ) , 0.00000000000001 ) , 5.0 ) ) ; Opaque_vs_OUT . fresSsL . x = fresnel ; float ssOcc = 1.0 ; float3 torsoPos = mul ( float4 ( Opaque_vs_OUT . worldPos . xyz , 1.0 ) , dudeInvTorso ) . xyz ; float3 torsoNorm = normalize ( float3 ( 1 , 3 , 3 ) * torsoPos ) ; #line 219 float3 torsoEye = normalize ( mul ( Opaque_vs_OUT . eye . xyz , ( float3x3 ) dudeInvTorso ) ) ; ssOcc = 1.0 - saturate ( dot ( torsoEye , torsoNorm ) ) ; ssOcc *= saturate ( 0.1 - 0.1 * torsoPos . x ) ; ssOcc = max ( ssOcc , saturate ( 0.1 * length ( torsoPos ) - 0.333 ) ) ; #line 227 float3 torsoLight = normalize ( mul ( l_d . xyz , ( float3x3 ) dudeInvTorso ) ) ; float slight = 0.5 * ( 1.0 + sin ( 0.5 * 3.1415926 * dot ( torsoLight , torsoNorm ) ) ) ; Opaque_vs_OUT . fresSsL . z = slight ; #line 236 Opaque_vs_OUT . fresSsL . y = ssOcc ; #line 240 float MAX_CHANNELS = 4.0 ; int compressed = ( int ) floor ( 255.1 * Opaque_vs_IN . extraU8 . x ) ; int topBits = compressed / 16 ; int botBits = ( ( int ) floor ( compressed ) % 16 ) ; int invis = ( ( int ) floor ( topBits ) % 4 ) ; int iFrom = invis / 2 ; int iTo = ( ( int ) floor ( invis ) % 2 ) ; int chamDir = topBits / 4 ; int chamDirUp = ( ( int ) floor ( chamDir ) % 2 ) ; int chamDirRight = chamDir / 2 ; int u0 = botBits / 4 ; int u1 = ( ( int ) floor ( botBits ) % 4 ) ; #line 258 float abBlend = Opaque_vs_IN . extraF32 [ 0 ] ; float uvBlend = Opaque_vs_IN . extraF32 [ 1 ] ; float vOffset = Opaque_vs_IN . extraF32 [ 2 ] ; float scarfMeter = Opaque_vs_IN . extraF32 [ 3 ] ; float compressedVals = Opaque_vs_IN . extraU8 [ 0 ] ; float chamEdgeMult = Opaque_vs_IN . extraU8 [ 1 ] ; float vMin = Opaque_vs_IN . extraU8 [ 2 ] ; float vMax = Opaque_vs_IN . extraU8 [ 3 ] ; float uScaleMult = Opaque_vs_IN . extra2U8 [ 0 ] ; float vScaleMult = Opaque_vs_IN . extra2U8 [ 1 ] ; int iextra = ( int ) floor ( 255.1 * Opaque_vs_IN . extra2U8 [ 2 ] ) ; float innerSpec = ( ( int ) floor ( iextra ) % 2 ) ? 1.0 : 0.0 ; float frozen = ( ( int ) floor ( ( iextra / 2 ) ) % 2 ) ? 1.0 : 0.0 ; float dirty = Opaque_vs_IN . extra2U8 [ 3 ] * 2.f ; #line 276 #line 297 #line 300 float hueShift = Opaque_vs_IN . color [ 0 ] ; float saturation = Opaque_vs_IN . color [ 1 ] ; float value = Opaque_vs_IN . color [ 2 ] ; float alpha = Opaque_vs_IN . color [ 3 ] ; Opaque_vs_OUT . uv [ 2 ] = ( float ) u0 / MAX_CHANNELS ; Opaque_vs_OUT . uv [ 3 ] = ( float ) u1 / MAX_CHANNELS ; Opaque_vs_OUT . extra = float4 ( abBlend , uvBlend , vOffset , scarfMeter ) ; Opaque_vs_OUT . extra2 = float4 ( vMin , vMax , uScaleMult , vScaleMult ) ; Opaque_vs_OUT . extra3 = float4 ( ( float ) iFrom , ( float ) iTo , ( float ) chamDirUp , ( float ) chamDirRight ) ; Opaque_vs_OUT . extra4 = float4 ( chamEdgeMult , innerSpec , frozen , dirty ) ; Opaque_vs_OUT . color = float4 ( hueShift , saturation , value , alpha ) ; #line 317 } #line 0 "D:/Dev/TGC/Journey/head/Journey/Data/Shaders/migratory.sh" #line 642 #line 333 "D:/Dev/TGC/Journey/head/Journey/Data/Shaders/S_Cloth_vs__Cloth_fs__16143.fx" #line 337 #line 355 #line 361 #line 364 #line 371 Texture3D < float4 > noise3dTexture ; #line 376 float4 l_c , l_s , l_a ; #line 379 float velvetInt , velvetRatio ; #line 383 float4 localDudePos ; float4 remoteDudePos ; float localDudeGlow ; float remoteDudeGlow ; float4 specular ; float alphaHardness ; Texture2D < float4 > textureAtlasA ; Texture2D < float4 > textureAtlasB ; Texture2D < float4 > textureMask ; Texture2D < float4 > textureDetail ; Texture2D < float4 > textureFilledA ; Texture2D < float4 > textureFilledB ; #line 404 #line 408 float inShadow ; #line 411 float hsvHue ; float hsvSaturation ; float hsvValue ; #line 417 float dudeDissolve ; float dudeSuperGlow ; float dudeSnapGlow ; float dudeSnapLevel ; float4 dudeScarfRoot ; float4 dudeCenter ; #line 427 float dudeColdness ; #line 433 float vOffsetGlow ; #line 437 float dudeDecoGlow ; #line 441 TextureCube < float4 > sandHiIrrCube ; Texture2D < float4 > sandSpecTexture ; Texture2D < float4 > sandSpecLut ; Texture2D < float4 > noiseSandTex ; Texture2D < float4 > heightTexture ; float4 heightBiasUv ; float4 heightScaleUv ; float heightBiasY ; Texture2D < float4 > duneTexture ; Texture2D < float4 > duneColorTexture ; float duneMaxShadowY ; #line 457 TextureCube < float4 > envOccCube ; #line 465 float Luminance ( float3 color ) { float3 luminance = float3 ( 0.3 , 0.59 , 0.11 ) ; return dot ( luminance , color ) ; } float3 Saturation ( float3 color , float satLevel ) { float intensity = Luminance ( color ) ; return lerp ( float3 ( intensity , intensity , intensity ) , color , satLevel ) ; } float ClothStep ( float t , float x ) { #line 481 return ( float ) ( x >= t ) ; } float ChamStep ( float min , float max , float input ) { return saturate ( ( input - min ) / ( max - min ) ) ; } float ChamAmount ( float uvValue , float uvCham , float uvMin , float uvMax , float uvMask , float chamStepAmount ) { float uvRange = uvMax - uvMin ; float chamBase = saturate ( ( ( 2 + chamStepAmount ) * uvCham - ( ( uvValue - uvMin ) / uvRange ) ) - uvMask ) ; return ChamStep ( 0.0 , chamStepAmount , chamBase ) ; } #line 499 float OrenNayarDiffuse ( float3 light , float3 view , float3 norm , float roughness ) { float VdotN = dot ( view , norm ) ; float LdotN = dot ( light , norm ) ; float cos_theta_i = LdotN ; float theta_r = acos ( VdotN ) ; float theta_i = acos ( cos_theta_i ) ; float cos_phi_diff = dot ( normalize ( view - norm * VdotN ) , normalize ( light - norm * LdotN ) ) ; float alpha = max ( theta_i , theta_r ) ; float beta = min ( theta_i , theta_r ) ; float sigma2 = roughness * roughness ; float A = 1.0 - 0.5 * sigma2 / ( sigma2 + 0.33 ) ; float B = 0.45 * sigma2 / ( sigma2 + 0.09 ) ; return saturate ( cos_theta_i ) * ( A + ( B * saturate ( cos_phi_diff ) * sin ( alpha ) * tan ( beta ) ) ) ; } #line 522 float GetChamStepAmount ( float frozen ) { float frozenStep = 0.5 ; frozenStep = 0.5 ; float stepAmount = lerp ( 0.05 , frozenStep , frozen ) ; #line 534 #line 537 return stepAmount ; } #line 542 float ComputeCham ( float2 uv , float uvCham , float vMin , float vMax , float uvMask , float dirUpMult , float dirRightMult , float dirOmniMult , float chamStepAmount ) { float sideUV = uv [ 0 ] ; float upUV = uv [ 1 ] ; #line 552 float chamAmountUp = ChamAmount ( upUV , uvCham , vMin , vMax , uvMask , chamStepAmount ) ; float chamAmountRight = ChamAmount ( sideUV , uvCham , 0 , 0.25 , uvMask , chamStepAmount ) ; float chamAmountAll = ChamAmount ( 0 , uvCham , 0 , 1 , uvMask * 2 , chamStepAmount ) ; return max ( max ( chamAmountUp * dirUpMult , chamAmountRight * dirRightMult ) , chamAmountAll * dirOmniMult ) ; } #line 562 struct Opaque_fs_v2f { float4 position : SV_POSITION ; float4 color : COLOR0 ; float3 normal : TEXCOORD0 ; float4 uv : TEXCOORD1 ; float4 worldPos : TEXCOORD2 ; float4 eye : TEXCOORD3 ; float4 extra : TEXCOORD4 ; float4 extra2 : TEXCOORD5 ; float4 extra3 : TEXCOORD6 ; float4 extra4 : COLOR1 ; float3 fresSsL : TEXCOORD7 ; bool isFrontFace : SV_IsFrontFace ; #line 579 #line 582 } ; struct Opaque_fs_f2f { float4 color : SV_TARGET0 ; } ; #line 592 void Opaque_fs_main ( in Opaque_fs_v2f Opaque_fs_IN , out Opaque_fs_f2f Opaque_fs_OUT ) { #line 596 float face = Opaque_fs_IN . isFrontFace ? - 1.f : 1.f ; #line 602 #line 605 float4 color = float4 ( 1 , 1 , 1 , 1 ) ; float abBlend = Opaque_fs_IN . extra [ 0 ] ; float uvBlend = Opaque_fs_IN . extra [ 1 ] ; float vOffset = Opaque_fs_IN . extra [ 2 ] ; float scarfMeter = Opaque_fs_IN . extra [ 3 ] ; float vMin = Opaque_fs_IN . extra2 [ 0 ] ; float vMax = Opaque_fs_IN . extra2 [ 1 ] ; float uScaleMult = Opaque_fs_IN . extra2 [ 2 ] ; float vScaleMult = Opaque_fs_IN . extra2 [ 3 ] ; float invisFrom = Opaque_fs_IN . extra3 [ 0 ] ; float invisTo = Opaque_fs_IN . extra3 [ 1 ] ; float chamDirUp = Opaque_fs_IN . extra3 [ 2 ] ; float chamDirRight = Opaque_fs_IN . extra3 [ 3 ] ; float chamDirOmni = 1 - max ( chamDirUp , chamDirRight ) ; float chamEdgeMult = Opaque_fs_IN . extra4 [ 0 ] ; float innerSpec = Opaque_fs_IN . extra4 [ 1 ] ; float frozen = Opaque_fs_IN . extra4 [ 2 ] ; float dirty = Opaque_fs_IN . extra4 [ 3 ] ; float hue = Opaque_fs_IN . color [ 0 ] ; float saturation = Opaque_fs_IN . color [ 1 ] ; float value = Opaque_fs_IN . color [ 2 ] ; float4 uv = Opaque_fs_IN . uv ; #line 668 #line 673 #line 680 dirty = max ( dirty , saturate ( 2.0 * ( 1.0 - uvBlend ) * frozen ) ) ; float2 uvOffSrc = float2 ( uv [ 2 ] , vOffset ) ; float2 uvOffDst = float2 ( uv [ 3 ] , vOffset ) ; #line 694 float3 Ln = normalize ( l_d . xyz ) ; float3 Nn = normalize ( Opaque_fs_IN . normal . xyz * face ) ; float3 Vn = normalize ( Opaque_fs_IN . eye . xyz ) ; float3 Hn = normalize ( Vn + Ln ) ; #line 703 float4 maskColor = float4 ( 1 , 1 , 1 , 1 ) ; #line 708 #line 714 float channels = 4.0 ; #line 717 maskColor = pow ( textureMask . Sample ( AnisoClampSampler , float2 ( uv . x * channels , uv . y + vOffset ) ) , kSRGB ) ; #line 723 float detUvMult = 9.0 ; #line 726 detUvMult = 4.0 ; float2 detUv = Opaque_fs_IN . uv . xy * detUvMult * float2 ( uScaleMult , vScaleMult ) ; float4 detailColor = 0.25 * ( textureDetail . Sample ( LinearWrapSampler , 17.0 * detUv ) + textureDetail . Sample ( LinearWrapSampler , 3 * 17.0 * detUv . yx ) + textureDetail . Sample ( LinearWrapSampler , 237.0 * detUv ) + textureDetail . Sample ( LinearWrapSampler , 3.0 * 237.0 * detUv . yx ) ) ; float4 detailColorLow = 0.5 * ( textureDetail . Sample ( LinearWrapSampler , 0.5 * detUv ) + textureDetail . Sample ( LinearWrapSampler , 1.5 * detUv . yx ) ) ; #line 735 uv . xy += 0.004 * ( detailColor . rg - 0.5 ) ; #line 740 float noise = noise3dTexture . Sample ( LinearWrapSampler , 0.1 * Opaque_fs_IN . worldPos . xyz ) . xy . r ; Opaque_fs_IN . color . a = ClothStep ( noise , Opaque_fs_IN . color . a ) ; #line 746 uvOffDst = uvBlend == 0.0 ? uvOffSrc : uvOffDst ; uvOffSrc = uvBlend == 1.0 ? uvOffDst : uvOffSrc ; float2 aColor1Uv = uv . xy + uvOffSrc ; float2 aColor2Uv = uv . xy + uvOffDst ; float2 bColor1Uv = uv . xy + uvOffSrc ; float2 bColor2Uv = uv . xy + uvOffDst ; bColor1Uv = abBlend == 0.0 ? 0.0 : bColor1Uv ; bColor2Uv = abBlend == 0.0 ? 0.0 : bColor2Uv ; aColor1Uv = abBlend == 1.0 ? 0.0 : aColor1Uv ; aColor2Uv = abBlend == 1.0 ? 0.0 : aColor2Uv ; #line 758 float4 aColor1 = pow ( textureAtlasA . Sample ( AnisoClampSampler , aColor1Uv ) , kSRGB ) ; float4 aColor2 = pow ( textureAtlasA . Sample ( AnisoClampSampler , aColor2Uv ) , kSRGB ) ; float4 bColor1 = pow ( textureAtlasB . Sample ( AnisoClampSampler , bColor1Uv ) , kSRGB ) ; float4 bColor2 = pow ( textureAtlasB . Sample ( AnisoClampSampler , bColor2Uv ) , kSRGB ) ; aColor1 . a *= invisFrom ; aColor2 . a *= invisTo ; bColor1 . a *= invisFrom ; bColor2 . a *= invisTo ; #line 773 float chamMask = 0.5 * detailColor . a + 0.5 * detailColorLow . a ; chamMask = saturate ( ( chamMask - 0.25 ) * 2 ) * 0.125 ; #line 782 float stepAmount = GetChamStepAmount ( frozen ) ; float chamMaskAmount = lerp ( chamMask , maskColor . a , frozen ) ; float2 chamVals = uv . xy ; #line 791 float chamAmount = ComputeCham ( chamVals , uvBlend , vMin , vMax , chamMaskAmount , chamDirUp , chamDirRight , chamDirOmni , stepAmount ) ; chamAmount = saturate ( ( chamAmount - 0.75 ) * 4 ) ; #line 798 float2 neckUV = float2 ( uv . x , vMax - uv . y ) ; float chamBack = ComputeCham ( neckUV , max ( uvBlend , 0.7 ) , vMin , vMax , chamMaskAmount , chamDirUp , chamDirRight , chamDirOmni , stepAmount ) ; chamBack = saturate ( ( chamBack - 0.75 ) * 4 ) ; chamAmount = lerp ( chamAmount , min ( chamAmount , chamBack ) , frozen ) ; float4 aColor = lerp ( aColor1 , aColor2 , chamAmount ) ; float4 bColor = lerp ( bColor1 , bColor2 , chamAmount ) ; #line 808 #line 811 float4 aFilledColor1 = float4 ( pow ( textureFilledA . Sample ( LinearClampSampler , uv . xy + uvOffSrc ) . xyz , 2.2f ) , textureFilledA . Sample ( LinearClampSampler , uv . xy + uvOffSrc ) . a ) ; float4 aFilledColor2 = float4 ( pow ( textureFilledA . Sample ( LinearClampSampler , uv . xy + uvOffDst ) . xyz , 2.2f ) , textureFilledA . Sample ( LinearClampSampler , uv . xy + uvOffDst ) . a ) ; float4 bFilledColor1 = float4 ( pow ( textureFilledB . Sample ( LinearClampSampler , uv . xy + uvOffSrc ) . xyz , 2.2f ) , textureFilledB . Sample ( LinearClampSampler , uv . xy + uvOffSrc ) . a ) ; float4 bFilledColor2 = float4 ( pow ( textureFilledB . Sample ( LinearClampSampler , uv . xy + uvOffDst ) . xyz , 2.2f ) , textureFilledB . Sample ( LinearClampSampler , uv . xy + uvOffDst ) . a ) ; float4 aFilledColor = lerp ( aFilledColor1 , aFilledColor2 , chamAmount ) ; float4 bFilledColor = lerp ( bFilledColor1 , bFilledColor2 , chamAmount ) ; float filledStepAmount = GetChamStepAmount ( 0 ) ; float filledMaskAmount = chamMask ; float2 filledVals = uv . xy ; float filledAmount = ComputeCham ( filledVals , scarfMeter , vMin , vMax , filledMaskAmount , chamDirUp , chamDirRight , chamDirOmni , filledStepAmount ) ; filledAmount = saturate ( ( filledAmount - 0.75 ) * 4 ) ; aColor = lerp ( aColor , aFilledColor , filledAmount ) ; bColor = lerp ( bColor , bFilledColor , filledAmount ) ; #line 831 float scarfEdgeAmount = pow ( 1 - 2 * abs ( filledAmount - 0.5 ) , 2 ) ; #line 835 float vOffsetGlowAmt = saturate ( ( ( 2 * uv [ 1 ] ) - ( 1 - vOffset ) ) / ( 1 - vOffset ) ) ; float scarfGrowAmount = pow ( saturate ( vOffsetGlowAmt - 0.75 ) * 8 , 3 ) * vOffsetGlow ; aColor = lerp ( aColor , float4 ( 1 , 1 , 0.5 , aColor . a ) * 15 , max ( scarfEdgeAmount * ChamStep ( 0.05 , 0.06 , scarfMeter ) , scarfGrowAmount ) ) ; bColor = lerp ( bColor , float4 ( 1 , 1 , 0.5 , bColor . a ) * 15 , max ( scarfEdgeAmount * ChamStep ( 0.05 , 0.06 , scarfMeter ) , scarfGrowAmount ) ) ; #line 847 float4 mask1 = pow ( textureMask . Sample ( AnisoClampSampler , float2 ( uv . x * 2.0 , uv . y + uvOffSrc [ 1 ] ) ) , kSRGB ) ; float4 mask2 = pow ( textureMask . Sample ( AnisoClampSampler , float2 ( uv . x * 2.0 + 0.5 , uv . y + uvOffSrc [ 1 ] ) ) , kSRGB ) ; maskColor = lerp ( mask1 , mask2 , ( float ) ( 1.0 - filledAmount ) ) ; #line 852 if ( uv . y > 1.0 - vOffset ) { clip ( - 1.f ) ; #line 860 } float colorDiff = 1.0 ; #line 875 #line 878 float chamEdgeAmount = pow ( 1 - 2 * abs ( chamAmount - 0.5 ) , 2 ) * ( float ) colorDiff ; #line 881 aColor = lerp ( aColor , float4 ( 1 , 1 , 0.5 , aColor . a ) * 75 , chamEdgeAmount * chamEdgeMult ) ; bColor = lerp ( bColor , float4 ( 1 , 1 , 0.5 , bColor . a ) * 75 , chamEdgeAmount * chamEdgeMult ) ; #line 885 #line 888 color = lerp ( aColor , bColor , abBlend ) * ( 1.0 + max ( abBlend - 1.0 , 0.0 ) ) ; #line 895 #line 899 float glowMask = saturate ( 2.0 * maskColor . g ) ; float eyeMask = saturate ( 2.0 * maskColor . g - 1.0 ) ; color . rgb = lerp ( color . rgb , color . rgb * 15 , saturate ( max ( eyeMask , abBlend * glowMask ) ) * lerp ( 1.0 , 0.0 , frozen * ( 1.0 - chamAmount ) ) ) ; #line 914 #line 918 float3 scarfBaseColor1 = pow ( textureAtlasA . Sample ( AnisoClampSampler , float2 ( uvOffSrc . x + 80.0 / 512.0 , 1.0 / 2048.0 ) ) , kSRGB ) . xyz ; float3 scarfBaseColor2 = pow ( textureAtlasA . Sample ( AnisoClampSampler , float2 ( uvOffDst . x + 80.0 / 512.0 , 1.0 / 2048.0 ) ) , kSRGB ) . xyz ; float3 scarfBaseColor = lerp ( scarfBaseColor1 , scarfBaseColor2 , ( float ) chamAmount ) ; float scarfBaseBlend = saturate ( 400 * uv . y - 11.5 ) ; color . rgb = lerp ( scarfBaseColor , color . rgb , scarfBaseBlend ) ; #line 927 color . rgb *= 0.5 + detailColor . rgb ; #line 930 color . rgb *= 1.25 ; #line 934 float bright_irradience = 1.0 ; float dark_irradience = 1.0 ; #line 950 #line 954 float sideIntensity = 0 ; float shadow = 1 ; float3 duneLitColor = 0 ; float2 heightUV = ( float2 ( Opaque_fs_IN . worldPos . x , Opaque_fs_IN . worldPos . z ) + heightBiasUv . xy ) * heightScaleUv . xy ; float heightTap = heightTexture . Sample ( LinearClampSampler , heightUV ) . r ; float aboveDunes = Opaque_fs_IN . worldPos . y - ( heightBiasY + ( float ) heightTap ) ; sideIntensity = saturate ( 1.25 - 10.0 * aboveDunes ) ; sideIntensity *= sideIntensity ; #line 965 float2 sandUV = 16 * float2 ( uv . x * uScaleMult , uv . y * vScaleMult ) ; float3 sandNoiseTap = 2.0 * ( noiseSandTex . Sample ( PointWrapAnisoSampler , sandUV ) . xyz - 0.5 ) ; float sandNoise = sandNoiseTap . x ; Nn = normalize ( 3.5 * Nn + dirty * sandNoiseTap ) ; #line 972 const float terrainScale = 0.5 ; float2 duneUvBias = float2 ( ( 1 - 0.5 / 256.0 ) , 0.5 / 512.0 ) ; float2 duneUvScale = float2 ( - terrainScale / 256.0 , terrainScale / 512 ) ; float2 duneUv = duneUvBias + duneUvScale * Opaque_fs_IN . worldPos . xz ; float4 duneTap = pow ( duneTexture . Sample ( LinearWrapAnisoSampler , duneUv ) , kSRGB ) ; #line 981 float2 shadowBackPos = Opaque_fs_IN . worldPos . xz - ( Ln * aboveDunes / Ln . y ) . xz ; float4 shadowBackTap = pow ( duneTexture . Sample ( LinearWrapAnisoSampler , duneUvBias + duneUvScale * shadowBackPos ) , kSRGB ) ; float2 shadowFrontPos = Opaque_fs_IN . worldPos . xz + ( Ln * aboveDunes / Ln . y ) . xz ; float4 shadowFrontTap = pow ( duneTexture . Sample ( LinearWrapAnisoSampler , duneUvBias + duneUvScale * shadowFrontPos ) , kSRGB ) ; shadow = saturate ( 10 * ( max ( shadowBackTap . a , shadowFrontTap . a ) - ( 0.04 * sandNoise + 0.23 ) ) ) ; shadow = max ( shadow , saturate ( 4.0 * duneTap . a ) ) ; shadow = max ( shadow , saturate ( 0.5 * ( aboveDunes - duneMaxShadowY ) ) ) ; #line 994 float2 litUV = heightUV ; float4 litTap = duneColorTexture . Sample ( LinearClampSampler , litUV ) ; float3 litColor = 4.0 * litTap . rgb * litTap . rgb ; float velvDune = litTap . a ; float velvMesh = saturate ( 1.12 - abs ( dot ( Vn , 4.0 * Nn ) ) ) ; velvDune *= 0.333 * sandNoise ; velvMesh *= 0.333 + 0.333 * sandNoise ; float3 duneColor = ( 1.0 + velvMesh ) * duneTap . rgb ; duneLitColor = ( 1.0 + velvDune ) * litColor ; #line 1006 dirty *= saturate ( 1.3 * detailColor . b * detailColorLow . g ) ; #line 1009 color . rgb = lerp ( color . rgb , duneColor , ( 0.5 + 0.2 * frozen ) * dirty ) ; #line 1015 Nn = normalize ( Nn + 0.5 * ( detailColor . rgb - 0.5 ) ) ; #line 1018 float diffuse = OrenNayarDiffuse ( Ln , Vn , Nn , 0.5 ) ; float subSurface = OrenNayarDiffuse ( - Ln , Vn , Nn , 0.5 ) ; float fresnel = Opaque_fs_IN . fresSsL . x ; float a = sqrt ( 2.0 / 3.14159268 ) ; float schlickSmithShadow = 0.8 * 1.0 / ( ( diffuse * ( 1.0 - a ) + a ) * ( dot ( Nn , Vn ) * ( 1.0 - a ) + a ) ) ; float specPow = 0.0 ; float specLight = pow ( max ( saturate ( dot ( Nn , Hn ) ) , 0.00000000000001 ) , specPow ) ; float _specular = ( 8.0 + specPow ) / 25.0 * fresnel * schlickSmithShadow * specLight * diffuse ; #line 1029 float3 envOcc = 1.0 ; float3 specEnvOcc = 1.0 ; float3 lightEnvOcc = 1.0 ; envOcc = 8.0 * pow ( envOccCube . Sample ( LinearClampSampler , Nn ) . xyz , 2.2f ) ; float3 Rn2 = 2.0 * dot ( Nn , Vn ) * Nn - Vn ; specEnvOcc = 8.0 * pow ( envOccCube . Sample ( LinearClampSampler , Rn2 ) . xyz , 2.2f ) ; lightEnvOcc = float4 ( pow ( envOccCube . Sample ( LinearClampSampler , Ln ) . xyz , 2.2f ) , envOccCube . Sample ( LinearClampSampler , Ln ) . a ) . a ; float selfOcclusion = 1.0 ; selfOcclusion *= maskColor . b ; float subSurfaceOcc = Opaque_fs_IN . fresSsL . y ; float specOcc = 1.0 ; specOcc *= saturate ( 2.0 * ( detailColor . r - 0.5 ) + 0.5 ) ; specOcc *= saturate ( 1.0 + innerSpec + face ) ; specOcc *= selfOcclusion ; float3 albedo = color . rgb ; float3 lightInt = shadow * l_c . rgb ; float3 specInt = shadow * l_s . rgb ; #line 1057 float3 fillColor = pow ( sandHiIrrCube . Sample ( LinearClampSampler , Nn ) . xyz , 2.2f ) ; #line 1060 float3 Rn = 2.0 * dot ( Nn , Vn ) * Nn - Vn ; float ambSpecRough = 0.0 ; float ambSpecInt = pow ( sandSpecLut . Sample ( LinearClampSampler , float2 ( dot ( Nn , Vn ) , ambSpecRough ) ) . x , 2.2f ) ; float3 ambSpecColor = pow ( sandSpecTexture . Sample ( LinearClampSampler , float2 ( Rn . y , ambSpecRough ) ) . xyz , 2.2f ) ; float3 ambSpec = 0.1 * ambSpecInt * ambSpecColor ; float3 result = 0 ; #line 1069 float slight = Opaque_fs_IN . fresSsL . z ; result += albedo * lightInt * slight * lightEnvOcc ; #line 1074 #line 1077 result += albedo * fillColor * envOcc ; #line 1080 float ss = saturate ( dot ( Nn , Vn ) * subSurface ) * dot ( l_c . rgb , float3 ( 0.3 , 0.59 , 0.11 ) ) * 0.55 ; float3 ssAlbedo = lerp ( dot ( albedo , float3 ( 0.3 , 0.59 , 0.11 ) ) . xxx , albedo , 1.0 + ss ) ; result += ssAlbedo * ( lightInt * subSurfaceOcc * lightEnvOcc * ss * ss ) ; #line 1085 result += specInt * _specular * lightEnvOcc * specOcc ; result += ambSpec * specEnvOcc * specOcc ; #line 1090 result += albedo * lightInt * diffuse * lightEnvOcc * selfOcclusion * saturate ( 1.0 - abs ( dot ( Vn , Ln ) - 0.2 ) ) * ambSpecInt ; result += albedo * fillColor * envOcc * selfOcclusion * ambSpecInt ; #line 1096 float3 Nns = normalize ( 1.5 * Nn + sandNoiseTap ) ; float sparkle = 2.0 * pow ( saturate ( 1.0 - abs ( dot ( Vn , normalize ( Nns + 0.25 * Vn ) ) ) ) , 8.0 ) ; result += dirty * sparkle * ambSpecColor * shadow * specOcc ; #line 1103 result *= bright_irradience * dark_irradience ; #line 1106 result = lerp ( result , duneLitColor , sideIntensity ) ; #line 1109 result = lerp ( result , float3 ( 500 , 350 , 100 ) * .3 , ( float ) dudeSuperGlow ) ; #line 1114 #line 1118 float snapT = Opaque_fs_IN . uv . y ; float snapLevelMin = - 0.2f ; float snapLevelMax = 0.2f ; float snapLevelInput = snapT - dudeSnapLevel + 0.2 * ( detailColor . r - 0.5 ) ; float snapCham = ChamStep ( snapLevelMin , snapLevelMax , snapLevelInput ) ; #line 1128 snapCham = snapCham * snapCham * snapCham ; result = lerp ( result , float3 ( 6 , 3 , 2 ) , ( float ) ( snapCham * dudeSnapGlow ) ) ; #line 1135 float halfDudeHeight = .40 ; float alpha = lerp ( 1 , 0 , saturate ( 2 * dudeDissolve - ( 1 - saturate ( Opaque_fs_IN . worldPos . y - dudeCenter . y + halfDudeHeight ) ) ) - chamMask ) ; float bottomOfDude = dudeCenter . y - halfDudeHeight ; float distFromBottom = ( Opaque_fs_IN . worldPos . y - bottomOfDude ) ; float sandFade = lerp ( 0 , 1 , clamp ( distFromBottom - ( 1 - dudeDissolve ) , 0 , .10 ) * 10 ) ; #line 1147 sandFade = lerp ( 0 , 1 , clamp ( 2 * dudeDissolve - ( 1 - uv . y ) , 0 , 1 ) ) * 0.7 ; result . rgb = lerp ( result . rgb , duneLitColor , ( float ) sandFade ) ; color . a *= ChamStep ( 0.80 , 0.82 , alpha + .1 ) ; #line 1158 Opaque_fs_OUT . color = float4 ( result . rgb , Opaque_fs_IN . color . a * saturate ( 5 * ( color . a - 0.5 ) + 0.5 ) ) ; #line 1163 Opaque_fs_OUT . color . a = Opaque_fs_OUT . color . a > 0.5 ? 2.0 + sideIntensity : Opaque_fs_OUT . color . a ; #line 1177 #line 1181 clip ( Opaque_fs_OUT . color . a - 0.5f ) ; } technique11 Opaque { pass pass0 { SetVertexShader ( CompileShader ( vs_5_0 , Opaque_vs_main ( ) ) ) ; SetPixelShader ( CompileShader ( ps_5_0 , Opaque_fs_main ( ) ) ) ; SetBlendState ( ourBlendState , float4 ( 0.0f , 0.0f , 0.0f , 0.0f ) , 0xFFFFFFFF ) ; SetDepthStencilState ( ourDepthStencilState , 0 ) ; SetRasterizerState ( ourRasterState ) ; } } #line 1217 þïþï ˆD:\Dev\TGC\Journey\head\Journey\shaderd:\dev\tgc\journey\head\journey\shader#line 1 "D:\\Dev\\TGC\\Journey\\head\\Journey\\Data\\Shaders\\S_Cloth_vs__Cloth_fs__16143.fx" #line 0 "D:/Dev/TGC/Journey/head/Journey/Data/Shaders/S_Cloth_vs__Cloth_fs__16143.fx" #line 10 BlendState ourBlendState { BlendEnable [ 0 ] = FALSE ; BlendEnable [ 1 ] = FALSE ; SrcBlend [ 0 ] = Src_Alpha ; DestBlend [ 0 ] = Inv_Src_Alpha ; BlendOp [ 0 ] = ADD ; SrcBlendAâ0€,# ‹¾ÊÕ)(â0w'*§†()B< ºG ºGMicrosoft (R) HLSL Shader Compiler 10.1®=hlslFlags0x4005hlslTargetvs_5_0hlslEntryOpaque_vs_mainhlslDefines /DALPHATESTENABLE=1 /DSAND=1 /DSKINNING_ENABLED=1 /DSCARF=1 /DPHYRE_D3DFX=1 /DAO=1 /DREMOTE=16œ"" ( Opaque_vs_main.> IN_VALP("P("P("P ("P("P("P(" P("$P ("0P$("4P(("8P,("<P0("@P4("DP8("HP<("LP@("PPD("TPH("XPL("\PP("`PT("dPX("hP\("lP`("pPd("tPh("xPl("|Pp("€Pt("„Px("ˆP|("Œ6> Opaque_vs_OUTPœ(" P ("¤P¤("¨PŒ("�P�("”P”("˜P˜("œP|("€P€("„P„("ˆPˆ("ŒPl("pPp("tPt("xPx("|P\("`P`("dPd("hPh("lPL("PPP("TPT("XPX("\P<("@P@("DPD("HPH("LP,("0P0("4P4("8P8("<P (" P$("$P(("(P("P("P("P("P("P("P("P (" P<4ð`P@4ðdPD4ðhPLÌlPPÌlPTÌl2> Opaque_vs_INPPì`PPìdPPìhP dHPdHPdHPx  Px $P0x´(*>LnP8hP8hP8h*>VnP„¸ P„¸$P„¸,*>HnPì0PìÌPì0*>@F0P ” .>@fresnelP” à .>@ssOccPØ ð .>torsoPosPÜ ¼Pü àP œ2>torsoNormP¤  P¤ 8$P¤ Ø ,.>torsoEyePP ”0PP œ4PP °82>torsoLightPPP0.>@slightPŒX2>@MAX_CHANNELSPÈt 2>tcompressedP ,.>ttopBitsP$ .>tbotBitsP\.>tinvisP”,.>tiFromP¬�*>tiToPäX .>tchamDirPü˜2>tchamDirUpP4 2>tchamDirRightPLð *>tu0PdÐ$*>tu1PœÈ.>@abBlendP°Œ(.>@uvBlendPÄx,.>@vOffsetPØd02>@scarfMeterPìP42>@chamEdgeMultP<8*>@vMinP(<*>@vMaxP(@2>@uScaleMultP<D2>@vScaleMultPPìH.>tiextraP”äL2>@innerSpecP$P.>@frozenP´ ˆL.>@dirtyPÐ lT.>@hueShiftPä XX2>@saturationPø D\.>@valueP !0l.>@alphaP !pvMø˜  _T hƒŒ Rh T $  P ]�| ƒP " L<  `  PT  T "  PF>ˆPP`PPdPPhP <P<P<P(( P(($P0<(*> skInP|P|,P|HP |ÔP|ÔP|ÔP|Ô P|Ô$P0|Ô(6>transformMatrixPàp0Pàp4Pàp8P àp<Pô\@Pô\DPô\HPô\LP HPP$HTP(HXP,H\*> retP8`PTüdPpàhP ŒÄP¨¨PÄŒPØx PØx$P0ìd(nMÀ”  G ƒLX 6�€ J  1t E  t  1T E  t  1T E   TtJ>ˆP”L0P”L4P”L8P ”L<P°0@P°0DP°0HP°0LP ÌPP$ÌTP(ÌXP,Ì\NNô8œáî³Ôš±~,ÔÑk…I÷†K‡—‡Ñ‡òh<# œ\(Á€(Á,Á€,Á@Á€@ÁTÁ€TÁhÁ€hÁ|Á€|Á€Á€€Á Á€ ÁÄÁ€ÄÁìÁ€ìÁÁ€Á4Á€4ÁXÁ€XÁ€Á€€Á¨Á€¨ÁÄÁ€ÄÁàÁ€àÁüÁ€üÁÁ€Á@Á€@ÁhÁ€hÁ�Á€�Á¬Á€¬ÁÈÁ€ÈÁäÁ€äÁÁ€Á(Á€(ÁPÁ€PÁxÁ€xÁ”Á€”Á°Á€°ÁÌÁ€ÌÁàÁ€àÁôÁ€ôÁÁ€ÁÁ€Á8Á€8ÁTÁ€TÁpÁ€pÁŒÁ€ŒÁ¨Á€¨ÁÄÁ€ÄÁØÁ€ØÁìÁ€ìÁÁ€ÁÁ€Á(Á€(Á<Á€<ÁPÁ€PÁdÁ€dÁx€xÂŒ€Œ¬€¬ÂÌ€ÌÂì€ì À à À Ã4Ä€4ÄPÄ€PÄdÄ€dĀʀ€Ê”Ë€”ˬË€¬ËÌË€ÌËà΀àÎ΀Î΀Î8Ï€8ÏTÏ€TÏhÏ€hÏ„Ѐ„РЀ мЀ¼ÐÐЀÐÐìÑ€ìÑ Ò€ Ò Ò€ Ò4 Ò€4 ÒP Ò€P Òl Ò€l Òˆ Ò€ˆ Ò¤ Ò€¤ Ò¸ Ò€¸ ÒÔ Ò€Ô Òð Ò€ð Ò Ò€ Ò( Ò€( Ò@ Ò€@ Ò\ Ò€\ Òx Ò€x Ò” Ó€” Ó¨ ×€¨ ×¼ ×€¼ ×Ü ×€Ü ×ü ×€ü × Ø€ Ø< Ø€< ØX Ø€X Øt Ø€t ؈ Ø€ˆ ؤ Ü€¤ ÜÄ Ü€Ä Üä Ü€ä Ü Ü€ Ü Ü€ Ü4 Ü€4 ÜP Ý€P Ýl Ý€l ݈ Ý€ˆ ݤ Ý€¤ ݼ Ý€¼ ÝØ Þ€Ø Þô Þ€ô Þ Þ€ Þ( Þ€( ÞD Þ€D Þ` Þ€` Þ| ߀| ߘ ߀˜ ߬ ߀¬ ßÈ ß€È ßÜ ß€Ü ßø ߀ø ß߀ß0߀0ßLç€Lçpç€pç”瀔ç¸瀸çÔç€Ôçèç€èçè€è è€ è<è€<èTè€Tèpè€pèŒ逌é 퀠í´ð€´ðÈñ€Èñäñ€äñøñ€øñ ó€ ó ó€ ó4ó€4óPó€Póló€lóˆó€ˆó¨ó€¨ó¼ó€¼óØó€Øóó€ó$ô€$ô8ô€8ôLô€Lô`ô€`ôtô€tôˆô€ˆô¤ô€¤ôÀô€ÀôÜô€Üôüô€üôô€ô8ô€8ô\ö€\öpö€pö„ö€„ö˜ö€˜ö¬ö€¬öÀö€ÀöÜö€Üöøö€øöö€ö4ö€4öHö€Höpö€pö”÷€”÷¨÷€¨÷¼÷€¼÷Ø÷€Ø÷ô÷€ô÷÷€÷0÷€0÷D÷€D÷`÷€`÷ˆ÷€ˆ÷¬ø€¬øÀø€ÀøÔø€Ôøèø€èøüø€üøø€ø,ø€,øHø€Hødø€dø„ø€„ø˜ø€˜øÀø€Àøäú€äúøú€øú ú€ ú(ú€(úDú€Dú`ú€`ú€ú€€ú”ú€”ú°ú€°úØú€Øúüû€üûû€û$û€$û8û€8ûLû€Lû`û€`û|û€|û˜û€˜û´û€´ûÔû€Ôûèû€èûû€û4ü€4üHü€Hü\ü€\üxü€xü”ü€”ü°ü€°üÐü€Ðüäü€äüü€ü(ü€(üLþ€Lþ`þ€`þtþ€tþ�þ€�þ¬þ€¬þÈþ€Èþèþ€èþüþ€üþþ€þ@þ€@þdÿ€dÿxÿ€xÿŒÿ€Œÿ ÿ€ ÿ´ÿ€´ÿÈÿ€Èÿäÿ€äÿÿ€ÿÿ€ÿ<ÿ€<ÿPÿ€Pÿxÿ€xÿœ€œ°€°Ä€ÄØ€Øì€ì €  € ( €( < €< P€Pl€l€€€”€”¨€¨¼€¼Ð€Ðä€äø€ø€0€0L€Ll€l€€€¨€¨Ì€Ìô€ô€,€,@€@\€\x€x”€”´€´È€Èä€ä € 0€0D€DX€Xl€l€€€”€”°€°Ì€Ìè€è €  € D €D h €h � €� ´ €´ Ð .€Ð .ä /€ä /ø 0€ø 0 !1€ !1 !3€ !34!3€4!3P!4€P!4d!4€d!4€!5€€!5”!5€”!5¨!5€¨!5¼!5€¼!5Ð!6€Ð!6ä!6€ä!6ø!6€ø!6 "6€ "6 "7€ "74"7€4"7H"7€H"7\"7€\"7p"8€p"8„"8€„"8˜"8€˜"8¬"8€¬"8À"9€À"9Ô"9€Ô"9è"9€è"9ü"9€ü"9#>€#>$#>€$#>8#>€8#>9797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797f&Qf df df df dM KMKB@B@B@1/z$Wz$Wzx)')')'979797'#'%'%'% uDRu>Ru>Ru3Tu3Tu-iu'qu'qu'qu'qu'qusususus+)d\d\d\d\F$7F$BFDFDFDc#_c#_c#_cacaca=9=;=;= ;= ;404040424242L,>L,>L&>L&FL&FLHLHL JU%QU%QU%QUSUSUS]:W](W]"Y]Y][*()' K&GKIKI#!#!#!#!#!#!#!#!#!#!9090909595959595959595953+3+3+3/3/3/3/3/3/3/3/3//'/'/'/+/+/+/+/+/+/+/+/+7/7/7/737373737373737373$"$"$"$"$"$"$"$"$"$"0(0(0(0,0,0,0,0,0,0,0,0,3 13 13 16 47 5/ -/ -6 46 4J"FJHJHD!0D!0D0D4D4D4D4D4D4D4D4D4DBDBI(1I(1I(1I(1I(1I(1I(1I(1I(1I(1I5I5I5I9I9I9I9I9I9I9I9I9IGIG751 /3 1. ,. ,< +< :< +< :QOQOQOQOOMOMOMOMx'5x9ExI[x_tSQSQSQSQNLNLNLNLö( ”((B DhŒ¤ lextra2óòñ |extra3óòñ Œextra4óòñ œfresSsLòñ" ¨Opaque_vs_v2f  † positionñ  normalóòñ uvóòñ  extraF32ñ 0extraU8òñ @extra2U8ñ Pcolor" `a2v_noSkinóòñ    @@float4x4 "@ñ Mtxsñ&PSkinTransformsòñ      Ê18 ÿÿÿÿppx@ float3óòñ@float2óòñ@float4óòñuuint4Æ SkinnableVertexòñ  SkinnableNormalòñ uvóòñ  extraF32ñ 0extraU8òñ @extra2U8ñ PColor `SkinWeightsòñ pSkinIndicesòñ" €Opaque_vs_a2vÎ positionñ color  normalóòñ ,uvóòñ <worldPosñ Leyeòñ \extraB”«A #line 0 "D:/Dev/TGC/Journey/head/Journey/Data/Shaders/Migratory.sh" #line 8 #line 16 #line 20 #line 135 #line 140 #line 147 BlendState NoBlend_BlendState { BlendEnable [ 0 ] = FALSE ; } ; BlendState Alpha_BlendState { BlendEnable [ 0 ] = TRUE ; SrcBlend [ 0 ] = Src_Alpha ; DestBlend [ 0 ] = Inv_Src_Alpha ; BlendOp [ 0 ] = ADD ; SrcBlendAlpha [ 0 ] = Src_Alpha ; DestBlendAlpha [ 0 ] = Inv_Src_Alpha ; BlendOpAlpha [ 0 ] = ADD ; BlendEnable [ 1 ] = FALSE ; } ; BlendState Additive_BlendState { BlendEnable [ 0 ] = TRUE ; SrcBlend [ 0 ] = Src_Alpha ; DestBlend [ 0 ] = ONE ; BlendOp [ 0 ] = ADD ; SrcBlendAlpha [ 0 ] = Src_Alpha ; DestBlendAlpha [ 0 ] = ONE ; BlendOpAlpha [ 0 ] = ADD ; BlendEnable [ 1 ] = FALSE ; } ; #line 180 BlendState ParticleBlended_BlendState { BlendEnable [ 0 ] = TRUE ; SrcBlend [ 0 ] = ONE ; DestBlend [ 0 ] = Inv_Src_Alpha ; BlendOp [ 0 ] = ADD ; SrcBlendAlpha [ 0 ] = ONE ; DestBlendAlpha [ 0 ] = Inv_Src_Alpha ; BlendOpAlpha [ 0 ] = ADD ; BlendEnable [ 1 ] = FALSE ; } ; DepthStencilState NoDepthTest_NoDepthWrite_DepthState { DepthEnable = FALSE ; DepthWriteMask = Zero ; DepthFunc = Less ; StencilEnable = FALSE ; } ; DepthStencilState NoDepthTest_DepthWrite_DepthState { DepthEnable = FALSE ; DepthWriteMask = All ; DepthFunc = Less ; StencilEnable = FALSE ; } ; DepthStencilState DepthTest_NoDepthWrite_DepthState { DepthEnable = TRUE ; DepthWriteMask = Zero ; DepthFunc = Less ; StencilEnable = FALSE ; } ; DepthStencilState DepthTest_DepthWrite_DepthState { DepthEnable = TRUE ; DepthWriteMask = All ; DepthFunc = Less ; StencilEnable = FALSE ; } ; RasterizerState NoCull_RasterizerState { CullMode = None ; } ; RasterizerState BackFaceCull_RasterizerState { CullMode = Back ; FrontCounterClockwise = TRUE ; } ; RasterizerState FrontFaceCull_RasterizerState { CullMode = Front ; FrontCounterClockwise = TRUE ; } ; #line 243 #line 246 #line 264 #line 269 sampler PointClampSampler : register ( s8 ) { Filter = Min_Mag_Mip_Point ; AddressU = Clamp ; AddressV = Clamp ; AddressW = Clamp ; } ; sampler LinearClampSampler : register ( s9 ) { Filter = Min_Mag_Mip_Linear ; AddressU = Clamp ; AddressV = Clamp ; AddressW = Clamp ; } ; sampler LinearWrapTSampler : register ( s10 ) { Filter = Min_Mag_Mip_Linear ; AddressU = Clamp ; AddressV = Wrap ; AddressW = Clamp ; } ; sampler LinearWrapSampler : register ( s11 ) { Filter = Min_Mag_Mip_Linear ; AddressU = Wrap ; AddressV = Wrap ; AddressW = Wrap ; } ; sampler PointWrapSampler : register ( s12 ) { Filter = Min_Mag_Mip_Point ; AddressU = Wrap ; AddressV = Wrap ; AddressW = Wrap ; } ; sampler AnisoClampSampler : register ( s13 ) { Filter = ANISOTROPIC ; AddressU = Clamp ; AddressV = Clamp ; AddressW = Clamp ; MaxAnisotropy = 16 ; } ; sampler LinearWrapAnisoSampler : register ( s14 ) { Filter = ANISOTROPIC ; AddressU = Wrap ; AddressV = Wrap ; AddressW = Wrap ; MaxAnisotropy = 16 ; } ; sampler PointWrapAnisoSampler : register ( s15 ) { Filter = Min_Mag_Point_Mip_Linear ; AddressU = Wrap ; AddressV = Wrap ; AddressW = Wrap ; MaxAnisotropy = 16 ; } ; static const float kSRGB = 2.2f ; #line 358 #line 373 #line 408 #line 427 #line 435 #line 498 #line 516 #line 521 float cameraNearTimesFar ; float cameraFarMinusNear ; float4 cameraNearFar ; #line 527 float ConvertDepth ( float depth ) { #line 532 float viewSpaceZ = - ( cameraNearTimesFar / ( depth * cameraFarMinusNear - cameraNearFar . y ) ) ; return viewSpaceZ ; } #line 542 #line 563 struct PSkinTransforms { float4x4 Mtxs [ 32 ] ; } ; cbuffer BoneTransformConstantBuffer { PSkinTransforms SkinTransforms ; } float4x4 GenerateBoneMatrix ( uint4 SkinIndices , float4 SkinWeights ) { return SkinTransforms . Mtxs [ SkinIndices [ 0 ] ] * SkinWeights [ 0 ] + SkinTransforms . Mtxs [ SkinIndices [ 1 ] ] * SkinWeights [ 1 ] + SkinTransforms . Mtxs [ SkinIndices [ 2 ] ] * SkinWeights [ 2 ] + SkinTransforms . Mtxs [ SkinIndices [ 3 ] ] * SkinWeights [ 3 ] ; } #line 592 static const float4x4 SCALE_BIAS = float4x4 ( float4 ( 0.5 , 0.0 , 0.0 , 0.5 ) , float4 ( 0.0 , - 0.5 , 0.0 , 0.5 ) , #line 598 float4 ( 0.0 , 0.0 , 0.5 , 0.5 ) , float4 ( 0.0 , 0.0 , 0.0 , 1.0 ) ) ; #line 613 #line 635 #line 642 #line 59 "D:/Dev/TGC/Journey/head/Journey/Data/Shaders/S_Cloth_vs__Cloth_fs__16143.fx" float4 eyePositionWS : eyePositionWS ; float4x4 viewprojection : viewprojection ; #line 68 #line 73 #line 80 float4 l_d ; #line 83 float4x4 dudeInvTorso ; #line 100 struct Opaque_vs_a2v { #line 111 float3 SkinnableVertex : POSITION ; float3 SkinnableNormal : NORMAL ; float2 uv : TEXCOORD0 ; float4 extraF32 : TEXCOORD1 ; float4 extraU8 : TEXCOORD2 ; float4 extra2U8 : TEXCOORD3 ; float4 Color : COLOR ; float4 SkinWeights : BLENDWEIGHTS ; #line 123 uint4 SkinIndices : BLENDINDICES ; } ; struct a2v_noSkin #line 131 { #line 135 float3 position : POSITION ; float3 normal : NORMAL ; float2 uv : TEXCOORD0 ; float4 extraF32 : TEXCOORD1 ; float4 extraU8 : TEXCOORD2 ; float4 extra2U8 : TEXCOORD3 ; float4 color : COLOR0 ; } ; a2v_noSkin ProcessSkInput ( Opaque_vs_a2v skIn ) { float4x4 transformMatrix = GenerateBoneMatrix ( skIn . SkinIndices , skIn . SkinWeights ) ; a2v_noSkin ret ; ret . position . xyz = mul ( float4 ( skIn . SkinnableVertex . xyz , 1 ) , transformMatrix ) . xyz ; #line 156 ret . normal = mul ( skIn . SkinnableNormal , ( float3x3 ) transformMatrix ) ; ret . uv = skIn . uv ; ret . extraF32 = skIn . extraF32 ; ret . extraU8 = skIn . extraU8 ; ret . extra2U8 = skIn . extra2U8 ; ret . color = skIn . Color ; return ret ; } #line 169 struct Opaque_vs_v2f { float4 position : SV_POSITION ; float4 color : COLOR0 ; float3 normal : TEXCOORD0 ; float4 uv : TEXCOORD1 ; float4 worldPos : TEXCOORD2 ; float4 eye : TEXCOORD3 ; float4 extra : TEXCOORD4 ; float4 extra2 : TEXCOORD5 ; float4 extra3 : TEXCOORD6 ; float4 extra4 : COLOR1 ; float3 fresSsL : TEXCOORD7 ; } ; void Opaque_vs_main ( in Opaque_vs_a2v IN_VAL , #line 189 out Opaque_vs_v2f Opaque_vs_OUT ) { a2v_noSkin Opaque_vs_IN = ProcessSkInput ( IN_VAL ) ; Opaque_vs_OUT . position = mul ( float4 ( Opaque_vs_IN . position . xyz , 1 ) , viewprojection ) ; Opaque_vs_OUT . worldPos = float4 ( Opaque_vs_IN . position . xyz , 1 ) ; Opaque_vs_OUT . normal = normalize ( Opaque_vs_IN . normal ) ; #line 201 Opaque_vs_OUT . uv . xy = Opaque_vs_IN . uv ; Opaque_vs_OUT . eye = float4 ( eyePositionWS . xyz - Opaque_vs_OUT . worldPos . xyz , Opaque_vs_OUT . worldPos . y ) ; #line 206 float3 Ln = normalize ( l_d . xyz ) ; float3 Vn = normalize ( Opaque_vs_OUT . eye . xyz ) ; float3 Hn = normalize ( Vn + Ln ) ; float F0 = 0.005 ; float fresnel = lerp ( F0 , 1.0 , pow ( max ( saturate ( 1.0 - dot ( Vn , Hn ) ) , 0.00000000000001 ) , 5.0 ) ) ; Opaque_vs_OUT . fresSsL . x = fresnel ; float ssOcc = 1.0 ; float3 torsoPos = mul ( float4 ( Opaque_vs_OUT . worldPos . xyz , 1.0 ) , dudeInvTorso ) . xyz ; float3 torsoNorm = normalize ( float3 ( 1 , 3 , 3 ) * torsoPos ) ; #line 219 float3 torsoEye = normalize ( mul ( Opaque_vs_OUT . eye . xyz , ( float3x3 ) dudeInvTorso ) ) ; ssOcc = 1.0 - saturate ( dot ( torsoEye , torsoNorm ) ) ; ssOcc *= saturate ( 0.1 - 0.1 * torsoPos . x ) ; ssOcc = max ( ssOcc , saturate ( 0.1 * length ( torsoPos ) - 0.333 ) ) ; #line 227 float3 torsoLight = normalize ( mul ( l_d . xyz , ( float3x3 ) dudeInvTorso ) ) ; float slight = 0.5 * ( 1.0 + sin ( 0.5 * 3.1415926 * dot ( torsoLight , torsoNorm ) ) ) ; Opaque_vs_OUT . fresSsL . z = slight ; #line 236 Opaque_vs_OUT . fresSsL . y = ssOcc ; #line 240 float MAX_CHANNELS = 4.0 ; int compressed = ( int ) floor ( 255.1 * Opaque_vs_IN . extraU8 . x ) ; int topBits = compressed / 16 ; int botBits = ( ( int ) floor ( compressed ) % 16 ) ; int invis = ( ( int ) floor ( topBits ) % 4 ) ; int iFrom = invis / 2 ; int iTo = ( ( int ) floor ( invis ) % 2 ) ; int chamDir = topBits / 4 ; int chamDirUp = ( ( int ) floor ( chamDir ) % 2 ) ; int chamDirRight = chamDir / 2 ; int u0 = botBits / 4 ; int u1 = ( ( int ) floor ( botBits ) % 4 ) ; #line 258 float abBlend = Opaque_vs_IN . extraF32 [ 0 ] ; float uvBlend = Opaque_vs_IN . extraF32 [ 1 ] ; float vOffset = Opaque_vs_IN . extraF32 [ 2 ] ; float scarfMeter = Opaque_vs_IN . extraF32 [ 3 ] ; float compressedVals = Opaque_vs_IN . extraU8 [ 0 ] ; float chamEdgeMult = Opaque_vs_IN . extraU8 [ 1 ] ; float vMin = Opaque_vs_IN . extraU8 [ 2 ] ; float vMax = Opaque_vs_IN . extraU8 [ 3 ] ; float uScaleMult = Opaque_vs_IN . extra2U8 [ 0 ] ; float vScaleMult = Opaque_vs_IN . extra2U8 [ 1 ] ; int iextra = ( int ) floor ( 255.1 * Opaque_vs_IN . extra2U8 [ 2 ] ) ; float innerSpec = ( ( int ) floor ( iextra ) % 2 ) ? 1.0 : 0.0 ; float frozen = ( ( int ) floor ( ( iextra / 2 ) ) % 2 ) ? 1.0 : 0.0 ; float dirty = Opaque_vs_IN . extra2U8 [ 3 ] * 2.f ; #line 276 #line 297 #line 300 float hueShift = Opaque_vs_IN . color [ 0 ] ; float saturation = Opaque_vs_IN . color [ 1 ] ; float value = Opaque_vs_IN . color [ 2 ] ; float alpha = Opaque_vs_IN . color [ 3 ] ; Opaque_vs_OUT . uv [ 2 ] = ( float ) u0 / MAX_CHANNELS ; Opaque_vs_OUT . uv [ 3 ] = ( float ) u1 / MAX_CHANNELS ; Opaque_vs_OUT . extra = float4 ( abBlend , uvBlend , vOffset , scarfMeter ) ; Opaque_vs_OUT . extra2 = float4 ( vMin , vMax , uScaleMult , vScaleMult ) ; Opaque_vs_OUT . extra3 = float4 ( ( float ) iFrom , ( float ) iTo , ( float ) chamDirUp , ( float ) chamDirRight ) ; Opaque_vs_OUT . extra4 = float4 ( chamEdgeMult , innerSpec , frozen , dirty ) ; Opaque_vs_OUT . color = float4 ( hueShift , saturation , value , alpha ) ; #line 317 } #line 0 "D:/Dev/TGC/Journey/head/Journey/Data/Shaders/migratory.sh" #line 642 #line 333 "D:/Dev/TGC/Journey/head/Journey/Data/Shaders/S_Cloth_vs__Cloth_fs__16143.fx" #line 337 #line 355 #line 361 #line 364 #line 371 Texture3D < float4 > noise3dTexture ; #line 376 float4 l_c , l_s , l_a ; #line 379 float velvetInt , velvetRatio ; #line 383 float4 localDudePos ; float4 remoteDudePos ; float localDudeGlow ; float remoteDudeGlow ; float4 specular ; float alphaHardness ; Texture2D < float4 > textureAtlasA ; Texture2D < float4 > textureAtlasB ; Texture2D < float4 > textureMask ; Texture2D < float4 > textureDetail ; Texture2D < float4 > textureFilledA ; Texture2D < float4 > textureFilledB ; #line 404 #line 408 float inShadow ; #line 411 float hsvHue ; float hsvSaturation ; float hsvValue ; #line 417 float dudeDissolve ; float dudeSuperGlow ; float dudeSnapGlow ; float dudeSnapLevel ; float4 dudeScarfRoot ; float4 dudeCenter ; #line 427 float dudeColdness ; #line 433 float vOffsetGlow ; #line 437 float dudeDecoGlow ; #line 441 TextureCube < float4 > sandHiIrrCube ; Texture2D < float4 > sandSpecTexture ; Texture2D < float4 > sandSpecLut ; Texture2D < float4 > noiseSandTex ; Texture2D < float4 > heightTexture ; float4 heightBiasUv ; float4 heightScaleUv ; float heightBiasY ; Texture2D < float4 > duneTexture ; Texture2D < float4 > duneColorTexture ; float duneMaxShadowY ; #line 457 TextureCube < float4 > envOccCube ; #line 465 float Luminance ( float3 color ) { float3 luminance = float3 ( 0.3 , 0.59 , 0.11 ) ; return dot ( luminance , color ) ; } float3 Saturation ( float3 color , float satLevel ) { float intensity = Luminance ( color ) ; return lerp ( float3 ( intensity , intensity , intensity ) , color , satLevel ) ; } float ClothStep ( float t , float x ) { #line 481 return ( float ) ( x >= t ) ; } float ChamStep ( float min , float max , float input ) { return saturate ( ( input - min ) / ( max - min ) ) ; } float ChamAmount ( float uvValue , float uvCham , float uvMin , float uvMax , float uvMask , float chamStepAmount ) { float uvRange = uvMax - uvMin ; float chamBase = saturate ( ( ( 2 + chamStepAmount ) * uvCham - ( ( uvValue - uvMin ) / uvRange ) ) - uvMask ) ; return ChamStep ( 0.0 , chamStepAmount , chamBase ) ; } #line 499 float OrenNayarDiffuse ( float3 light , float3 view , float3 norm , float roughness ) { float VdotN = dot ( view , norm ) ; float LdotN = dot ( light , norm ) ; float cos_theta_i = LdotN ; float theta_r = acos ( VdotN ) ; float theta_i = acos ( cos_theta_i ) ; float cos_phi_diff = dot ( normalize ( view - norm * VdotN ) , normalize ( light - norm * LdotN ) ) ; float alpha = max ( theta_i , theta_r ) ; float beta = min ( theta_i , theta_r ) ; float sigma2 = roughness * roughness ; float A = 1.0 - 0.5 * sigma2 / ( sigma2 + 0.33 ) ; float B = 0.45 * sigma2 / ( sigma2 + 0.09 ) ; return saturate ( cos_theta_i ) * ( A + ( B * saturate ( cos_phi_diff ) * sin ( alpha ) * tan ( beta ) ) ) ; } #line 522 float GetChamStepAmount ( float frozen ) { float frozenStep = 0.5 ; frozenStep = 0.5 ; float stepAmount = lerp ( 0.05 , frozenStep , frozen ) ; #line 534 #line 537 return stepAmount ; } #line 542 float ComputeCham ( float2 uv , float uvCham , float vMin , float vMax , float uvMask , float dirUpMult , float dirRightMult , float dirOmniMult , float chamStepAmount ) { float sideUV = uv [ 0 ] ; float upUV = uv [ 1 ] ; #line 552 float chamAmountUp = ChamAmount ( upUV , uvCham , vMin , vMax , uvMask , chamStepAmount ) ; float chamAmountRight = ChamAmount ( sideUV , uvCham , 0 , 0.25 , uvMask , chamStepAmount ) ; float chamAmountAll = ChamAmount ( 0 , uvCham , 0 , 1 , uvMask * 2 , chamStepAmount ) ; return max ( max ( chamAmountUp * dirUpMult , chamAmountRight * dirRightMult ) , chamAmountAll * dirOmniMult ) ; } #line 562 struct Opaque_fs_v2f { float4 position : SV_POSITION ; float4 color : COLOR0 ; float3 normal : TEXCOORD0 ; float4 uv : TEXCOORD1 ; float4 worldPos : TEXCOORD2 ; float4 eye : TEXCOORD3 ; float4 extra : TEXCOORD4 ; float4 extra2 : TEXCOORD5 ; float4 extra3 : TEXCOORD6 ; float4 extra4 : COLOR1 ; float3 fresSsL : TEXCOORD7 ; bool isFrontFace : SV_IsFrontFace ; #line 579 #line 582 } ; struct Opaque_fs_f2f { float4 color : SV_TARGET0 ; } ; #line 592 void Opaque_fs_main ( in Opaque_fs_v2f Opaque_fs_IN , out Opaque_fs_f2f Opaque_fs_OUT ) { #line 596 float face = Opaque_fs_IN . isFrontFace ? - 1.f : 1.f ; #line 602 #line 605 float4 color = float4 ( 1 , 1 , 1 , 1 ) ; float abBlend = Opaque_fs_IN . extra [ 0 ] ; float uvBlend = Opaque_fs_IN . extra [ 1 ] ; float vOffset = Opaque_fs_IN . extra [ 2 ] ; float scarfMeter = Opaque_fs_IN . extra [ 3 ] ; float vMin = Opaque_fs_IN . extra2 [ 0 ] ; float vMax = Opaque_fs_IN . extra2 [ 1 ] ; float uScaleMult = Opaque_fs_IN . extra2 [ 2 ] ; float vScaleMult = Opaque_fs_IN . extra2 [ 3 ] ; float invisFrom = Opaque_fs_IN . extra3 [ 0 ] ; float invisTo = Opaque_fs_IN . extra3 [ 1 ] ; float chamDirUp = Opaque_fs_IN . extra3 [ 2 ] ; float chamDirRight = Opaque_fs_IN . extra3 [ 3 ] ; float chamDirOmni = 1 - max ( chamDirUp , chamDirRight ) ; float chamEdgeMult = Opaque_fs_IN . extra4 [ 0 ] ; float innerSpec = Opaque_fs_IN . extra4 [ 1 ] ; float frozen = Opaque_fs_IN . extra4 [ 2 ] ; float dirty = Opaque_fs_IN . extra4 [ 3 ] ; float hue = Opaque_fs_IN . color [ 0 ] ; float saturation = Opaque_fs_IN . color [ 1 ] ; float value = Opaque_fs_IN . color [ 2 ] ; float4 uv = Opaque_fs_IN . uv ; #line 668 #line 673 #line 680 dirty = max ( dirty , saturate ( 2.0 * ( 1.0 - uvBlend ) * frozen ) ) ; float2 uvOffSrc = float2 ( uv [ 2 ] , vOffset ) ; float2 uvOffDst = float2 ( uv [ 3 ] , vOffset ) ; #line 694 float3 Ln = normalize ( l_d . xyz ) ; float3 Nn = normalize ( Opaque_fs_IN . normal . xyz * face ) ; float3 Vn = normalize ( Opaque_fs_IN . eye . xyz ) ; float3 Hn = normalize ( Vn + Ln ) ; #line 703 float4 maskColor = float4 ( 1 , 1 , 1 , 1 ) ; #line 708 #line 714 float channels = 4.0 ; #line 717 maskColor = pow ( textureMask . Sample ( AnisoClampSampler , float2 ( uv . x * channels , uv . y + vOffset ) ) , kSRGB ) ; #line 723 float detUvMult = 9.0 ; #line 726 detUvMult = 4.0 ; float2 detUv = Opaque_fs_IN . uv . xy * detUvMult * float2 ( uScaleMult , vScaleMult ) ; float4 detailColor = 0.25 * ( textureDetail . Sample ( LinearWrapSampler , 17.0 * detUv ) + textureDetail . Sample ( LinearWrapSampler , 3 * 17.0 * detUv . yx ) + textureDetail . Sample ( LinearWrapSampler , 237.0 * detUv ) + textureDetail . Sample ( LinearWrapSampler , 3.0 * 237.0 * detUv . yx ) ) ; float4 detailColorLow = 0.5 * ( textureDetail . Sample ( LinearWrapSampler , 0.5 * detUv ) + textureDetail . Sample ( LinearWrapSampler , 1.5 * detUv . yx ) ) ; #line 735 uv . xy += 0.004 * ( detailColor . rg - 0.5 ) ; #line 740 float noise = noise3dTexture . Sample ( LinearWrapSampler , 0.1 * Opaque_fs_IN . worldPos . xyz ) . xy . r ; Opaque_fs_IN . color . a = ClothStep ( noise , Opaque_fs_IN . color . a ) ; #line 746 uvOffDst = uvBlend == 0.0 ? uvOffSrc : uvOffDst ; uvOffSrc = uvBlend == 1.0 ? uvOffDst : uvOffSrc ; float2 aColor1Uv = uv . xy + uvOffSrc ; float2 aColor2Uv = uv . xy + uvOffDst ; float2 bColor1Uv = uv . xy + uvOffSrc ; float2 bColor2Uv = uv . xy + uvOffDst ; bColor1Uv = abBlend == 0.0 ? 0.0 : bColor1Uv ; bColor2Uv = abBlend == 0.0 ? 0.0 : bColor2Uv ; aColor1Uv = abBlend == 1.0 ? 0.0 : aColor1Uv ; aColor2Uv = abBlend == 1.0 ? 0.0 : aColor2Uv ; #line 758 float4 aColor1 = pow ( textureAtlasA . Sample ( AnisoClampSampler , aColor1Uv ) , kSRGB ) ; float4 aColor2 = pow ( textureAtlasA . Sample ( AnisoClampSampler , aColor2Uv ) , kSRGB ) ; float4 bColor1 = pow ( textureAtlasB . Sample ( AnisoClampSampler , bColor1Uv ) , kSRGB ) ; float4 bColor2 = pow ( textureAtlasB . Sample ( AnisoClampSampler , bColor2Uv ) , kSRGB ) ; aColor1 . a *= invisFrom ; aColor2 . a *= invisTo ; bColor1 . a *= invisFrom ; bColor2 . a *= invisTo ; #line 773 float chamMask = 0.5 * detailColor . a + 0.5 * detailColorLow . a ; chamMask = saturate ( ( chamMask - 0.25 ) * 2 ) * 0.125 ; #line 782 float stepAmount = GetChamStepAmount ( frozen ) ; float chamMaskAmount = lerp ( chamMask , maskColor . a , frozen ) ; float2 chamVals = uv . xy ; #line 791 float chamAmount = ComputeCham ( chamVals , uvBlend , vMin , vMax , chamMaskAmount , chamDirUp , chamDirRight , chamDirOmni , stepAmount ) ; chamAmount = saturate ( ( chamAmount - 0.75 ) * 4 ) ; #line 798 float2 neckUV = float2 ( uv . x , vMax - uv . y ) ; float chamBack = ComputeCham ( neckUV , max ( uvBlend , 0.7 ) , vMin , vMax , chamMaskAmount , chamDirUp , chamDirRight , chamDirOmni , stepAmount ) ; chamBack = saturate ( ( chamBack - 0.75 ) * 4 ) ; chamAmount = lerp ( chamAmount , min ( chamAmount , chamBack ) , frozen ) ; float4 aColor = lerp ( aColor1 , aColor2 , chamAmount ) ; float4 bColor = lerp ( bColor1 , bColor2 , chamAmount ) ; #line 808 #line 811 float4 aFilledColor1 = float4 ( pow ( textureFilledA . Sample ( LinearClampSampler , uv . xy + uvOffSrc ) . xyz , 2.2f ) , textureFilledA . Sample ( LinearClampSampler , uv . xy + uvOffSrc ) . a ) ; float4 aFilledColor2 = float4 ( pow ( textureFilledA . Sample ( LinearClampSampler , uv . xy + uvOffDst ) . xyz , 2.2f ) , textureFilledA . Sample ( LinearClampSampler , uv . xy + uvOffDst ) . a ) ; float4 bFilledColor1 = float4 ( pow ( textureFilledB . Sample ( LinearClampSampler , uv . xy + uvOffSrc ) . xyz , 2.2f ) , textureFilledB . Sample ( LinearClampSampler , uv . xy + uvOffSrc ) . a ) ; float4 bFilledColor2 = float4 ( pow ( textureFilledB . Sample ( LinearClampSampler , uv . xy + uvOffDst ) . xyz , 2.2f ) , textureFilledB . Sample ( LinearClampSampler , uv . xy + uvOffDst ) . a ) ; float4 aFilledColor = lerp ( aFilledColor1 , aFilledColor2 , chamAmount ) ; float4 bFilledColor = lerp ( bFilledColor1 , bFilledColor2 , chamAmount ) ; float filledStepAmount = GetChamStepAmount ( 0 ) ; float filledMaskAmount = chamMask ; float2 filledVals = uv . xy ; float filledAmount = ComputeCham ( filledVals , scarfMeter , vMin , vMax , filledMaskAmount , chamDirUp , chamDirRight , chamDirOmni , filledStepAmount ) ; filledAmount = saturate ( ( filledAmount - 0.75 ) * 4 ) ; aColor = lerp ( aColor , aFilledColor , filledAmount ) ; bColor = lerp ( bColor , bFilledColor , filledAmount ) ; #line 831 float scarfEdgeAmount = pow ( 1 - 2 * abs ( filledAmount - 0.5 ) , 2 ) ; #line 835 float vOffsetGlowAmt = saturate ( ( ( 2 * uv [ 1 ] ) - ( 1 - vOffset ) ) / ( 1 - vOffset ) ) ; float scarfGrowAmount = pow ( saturate ( vOffsetGlowAmt - 0.75 ) * 8 , 3 ) * vOffsetGlow ; aColor = lerp ( aColor , float4 ( 1 , 1 , 0.5 , aColor . a ) * 15 , max ( scarfEdgeAmount * ChamStep ( 0.05 , 0.06 , scarfMeter ) , scarfGrowAmount ) ) ; bColor = lerp ( bColor , float4 ( 1 , 1 , 0.5 , bColor . a ) * 15 , max ( scarfEdgeAmount * ChamStep ( 0.05 , 0.06 , scarfMeter ) , scarfGrowAmount ) ) ; #line 847 float4 mask1 = pow ( textureMask . Sample ( AnisoClampSampler , float2 ( uv . x * 2.0 , uv . y + uvOffSrc [ 1 ] ) ) , kSRGB ) ; float4 mask2 = pow ( textureMask . Sample ( AnisoClampSampler , float2 ( uv . x * 2.0 + 0.5 , uv . y + uvOffSrc [ 1 ] ) ) , kSRGB ) ; maskColor = lerp ( mask1 , mask2 , ( float ) ( 1.0 - filledAmount ) ) ; #line 852 if ( uv . y > 1.0 - vOffset ) { clip ( - 1.f ) ; #line 860 } float colorDiff = 1.0 ; #line 875 #line 878 float chamEdgeAmount = pow ( 1 - 2 * abs ( chamAmount - 0.5 ) , 2 ) * ( float ) colorDiff ; #line 881 aColor = lerp ( aColor , float4 ( 1 , 1 , 0.5 , aColor . a ) * 75 , chamEdgeAmount * chamEdgeMult ) ; bColor = lerp ( bColor , float4 ( 1 , 1 , 0.5 , bColor . a ) * 75 , chamEdgeAmount * chamEdgeMult ) ; #line 885 #line 888 color = lerp ( aColor , bColor , abBlend ) * ( 1.0 + max ( abBlend - 1.0 , 0.0 ) ) ; #line 895 #line 899 float glowMask = saturate ( 2.0 * maskColor . g ) ; float eyeMask = saturate ( 2.0 * maskColor . g - 1.0 ) ; color . rgb = lerp ( color . rgb , color . rgb * 15 , saturate ( max ( eyeMask , abBlend * glowMask ) ) * lerp ( 1.0 , 0.0 , frozen * ( 1.0 - chamAmount ) ) ) ; #line 914 #line 918 float3 scarfBaseColor1 = pow ( textureAtlasA . Sample ( AnisoClampSampler , float2 ( uvOffSrc . x + 80.0 / 512.0 , 1.0 / 2048.0 ) ) , kSRGB ) . xyz ; float3 scarfBaseColor2 = pow ( textureAtlasA . Sample ( AnisoClampSampler , float2 ( uvOffDst . x + 80.0 / 512.0 , 1.0 / 2048.0 ) ) , kSRGB ) . xyz ; float3 scarfBaseColor = lerp ( scarfBaseColor1 , scarfBaseColor2 , ( float ) chamAmount ) ; float scarfBaseBlend = saturate ( 400 * uv . y - 11.5 ) ; color . rgb = lerp ( scarfBaseColor , color . rgb , scarfBaseBlend ) ; #line 927 color . rgb *= 0.5 + detailColor . rgb ; #line 930 color . rgb *= 1.25 ; #line 934 float bright_irradience = 1.0 ; float dark_irradience = 1.0 ; #line 950 #line 954 float sideIntensity = 0 ; float shadow = 1 ; float3 duneLitColor = 0 ; float2 heightUV = ( float2 ( Opaque_fs_IN . worldPos . x , Opaque_fs_IN . worldPos . z ) + heightBiasUv . xy ) * heightScaleUv . xy ; float heightTap = heightTexture . Sample ( LinearClampSampler , heightUV ) . r ; float aboveDunes = Opaque_fs_IN . worldPos . y - ( heightBiasY + ( float ) heightTap ) ; sideIntensity = saturate ( 1.25 - 10.0 * aboveDunes ) ; sideIntensity *= sideIntensity ; #line 965 float2 sandUV = 16 * float2 ( uv . x * uScaleMult , uv . y * vScaleMult ) ; float3 sandNoiseTap = 2.0 * ( noiseSandTex . Sample ( PointWrapAnisoSampler , sandUV ) . xyz - 0.5 ) ; float sandNoise = sandNoiseTap . x ; Nn = normalize ( 3.5 * Nn + dirty * sandNoiseTap ) ; #line 972 const float terrainScale = 0.5 ; float2 duneUvBias = float2 ( ( 1 - 0.5 / 256.0 ) , 0.5 / 512.0 ) ; float2 duneUvScale = float2 ( - terrainScale / 256.0 , terrainScale / 512 ) ; float2 duneUv = duneUvBias + duneUvScale * Opaque_fs_IN . worldPos . xz ; float4 duneTap = pow ( duneTexture . Sample ( LinearWrapAnisoSampler , duneUv ) , kSRGB ) ; #line 981 float2 shadowBackPos = Opaque_fs_IN . worldPos . xz - ( Ln * aboveDunes / Ln . y ) . xz ; float4 shadowBackTap = pow ( duneTexture . Sample ( LinearWrapAnisoSampler , duneUvBias + duneUvScale * shadowBackPos ) , kSRGB ) ; float2 shadowFrontPos = Opaque_fs_IN . worldPos . xz + ( Ln * aboveDunes / Ln . y ) . xz ; float4 shadowFrontTap = pow ( duneTexture . Sample ( LinearWrapAnisoSampler , duneUvBias + duneUvScale * shadowFrontPos ) , kSRGB ) ; shadow = saturate ( 10 * ( max ( shadowBackTap . a , shadowFrontTap . a ) - ( 0.04 * sandNoise + 0.23 ) ) ) ; shadow = max ( shadow , saturate ( 4.0 * duneTap . a ) ) ; shadow = max ( shadow , saturate ( 0.5 * ( aboveDunes - duneMaxShadowY ) ) ) ; #line 994 float2 litUV = heightUV ; float4 litTap = duneColorTexture . Sample ( LinearClampSampler , litUV ) ; float3 litColor = 4.0 * litTap . rgb * litTap . rgb ; float velvDune = litTap . a ; float velvMesh = saturate ( 1.12 - abs ( dot ( Vn , 4.0 * Nn ) ) ) ; velvDune *= 0.333 * sandNoise ; velvMesh *= 0.333 + 0.333 * sandNoise ; float3 duneColor = ( 1.0 + velvMesh ) * duneTap . rgb ; duneLitColor = ( 1.0 + velvDune ) * litColor ; #line 1006 dirty *= saturate ( 1.3 * detailColor . b * detailColorLow . g ) ; #line 1009 color . rgb = lerp ( color . rgb , duneColor , ( 0.5 + 0.2 * frozen ) * dirty ) ; #line 1015 Nn = normalize ( Nn + 0.5 * ( detailColor . rgb - 0.5 ) ) ; #line 1018 float diffuse = OrenNayarDiffuse ( Ln , Vn , Nn , 0.5 ) ; float subSurface = OrenNayarDiffuse ( - Ln , Vn , Nn , 0.5 ) ; float fresnel = Opaque_fs_IN . fresSsL . x ; float a = sqrt ( 2.0 / 3.14159268 ) ; float schlickSmithShadow = 0.8 * 1.0 / ( ( diffuse * ( 1.0 - a ) + a ) * ( dot ( Nn , Vn ) * ( 1.0 - a ) + a ) ) ; float specPow = 0.0 ; float specLight = pow ( max ( saturate ( dot ( Nn , Hn ) ) , 0.00000000000001 ) , specPow ) ; float _specular = ( 8.0 + specPow ) / 25.0 * fresnel * schlickSmithShadow * specLight * diffuse ; #line 1029 float3 envOcc = 1.0 ; float3 specEnvOcc = 1.0 ; float3 lightEnvOcc = 1.0 ; envOcc = 8.0 * pow ( envOccCube . Sample ( LinearClampSampler , Nn ) . xyz , 2.2f ) ; float3 Rn2 = 2.0 * dot ( Nn , Vn ) * Nn - Vn ; specEnvOcc = 8.0 * pow ( envOccCube . Sample ( LinearClampSampler , Rn2 ) . xyz , 2.2f ) ; lightEnvOcc = float4 ( pow ( envOccCube . Sample ( LinearClampSampler , Ln ) . xyz , 2.2f ) , envOccCube . Sample ( LinearClampSampler , Ln ) . a ) . a ; float selfOcclusion = 1.0 ; selfOcclusion *= maskColor . b ; float subSurfaceOcc = Opaque_fs_IN . fresSsL . y ; float specOcc = 1.0 ; specOcc *= saturate ( 2.0 * ( detailColor . r - 0.5 ) + 0.5 ) ; specOcc *= saturate ( 1.0 + innerSpec + face ) ; specOcc *= selfOcclusion ; float3 albedo = color . rgb ; float3 lightInt = shadow * l_c . rgb ; float3 specInt = shadow * l_s . rgb ; #line 1057 float3 fillColor = pow ( sandHiIrrCube . Sample ( LinearClampSampler , Nn ) . xyz , 2.2f ) ; #line 1060 float3 Rn = 2.0 * dot ( Nn , Vn ) * Nn - Vn ; float ambSpecRough = 0.0 ; float ambSpecInt = pow ( sandSpecLut . Sample ( LinearClampSampler , float2 ( dot ( Nn , Vn ) , ambSpecRough ) ) . x , 2.2f ) ; float3 ambSpecColor = pow ( sandSpecTexture . Sample ( LinearClampSampler , float2 ( Rn . y , ambSpecRough ) ) . xyz , 2.2f ) ; float3 ambSpec = 0.1 * ambSpecInt * ambSpecColor ; float3 result = 0 ; #line 1069 float slight = Opaque_fs_IN . fresSsL . z ; result += albedo * lightInt * slight * lightEnvOcc ; #line 1074 #line 1077 result += albedo * fillColor * envOcc ; #line 1080 float ss = saturate ( dot ( Nn , Vn ) * subSurface ) * dot ( l_c . rgb , float3 ( 0.3 , 0.59 , 0.11 ) ) * 0.55 ; float3 ssAlbedo = lerp ( dot ( albedo , float3 ( 0.3 , 0.59 , 0.11 ) ) . xxx , albedo , 1.0 + ss ) ; result += ssAlbedo * ( lightInt * subSurfaceOcc * lightEnvOcc * ss * ss ) ; #line 1085 result += specInt * _specular * lightEnvOcc * specOcc ; result += ambSpec * specEnvOcc * specOcc ; #line 1090 result += albedo * lightInt * diffuse * lightEnvOcc * selfOcclusion * saturate ( 1.0 - abs ( dot ( Vn , Ln ) - 0.2 ) ) * ambSpecInt ; result += albedo * fillColor * envOcc * selfOcclusion * ambSpecInt ; #line 1096 float3 Nns = normalize ( 1.5 * Nn + sandNoiseTap ) ; float sparkle = 2.0 * pow ( saturate ( 1.0 - abs ( dot ( Vn , normalize ( Nns + 0.25 * Vn ) ) ) ) , 8.0 ) ; result += dirty * sparkle * ambSpecColor * shadow * specOcc ; #line 1103 result *= bright_irradience * dark_irradience ; #line 1106 result = lerp ( result , duneLitColor , sideIntensity ) ; #line 1109 result = lerp ( result , float3 ( 500 , 350 , 100 ) * .3 , ( float ) dudeSuperGlow ) ; #line 1114 #line 1118 float snapT = Opaque_fs_IN . uv . y ; float snapLevelMin = - 0.2f ; float snapLevelMax = 0.2f ; float snapLevelInput = snapT - dudeSnapLevel + 0.2 * ( detailColor . r - 0.5 ) ; float snapCham = ChamStep ( snapLevelMin , snapLevelMax , snapLevelInput ) ; #line 1128 snapCham = snapCham * snapCham * snapCham ; result = lerp ( result , float3 ( 6 , 3 , 2 ) , ( float ) ( snapCham * dudeSnapGlow ) ) ; #line 1135 float halfDudeHeight = .40 ; float alpha = lerp ( 1 , 0 , saturate ( 2 * dudeDissolve - ( 1 - saturate ( Opaque_fs_IN . worldPos . y - dudeCenter . y + halfDudeHeight ) ) ) - chamMask ) ; float bottomOfDude = dudeCenter . y - halfDudeHeight ; float distFromBottom = ( Opaque_fs_IN . worldPos . y - bottomOfDude ) ; float sandFade = lerp ( 0 , 1 , clamp ( distFromBottom - ( 1 - dudeDissolve ) , 0 , .10 ) * 10 ) ; #line 1147 sandFade = lerp ( 0 , 1 , clamp ( 2 * dudeDissolve - ( 1 - uv . y ) , 0 , 1 ) ) * 0.7 ; result . rgb = lerp ( result . rgb , duneLitColor , ( float ) sandFade ) ; color . a *= ChamStep ( 0.80 , 0.82 , alpha + .1 ) ; #line 1158 Opaque_fs_OUT . color = float4 ( result . rgb , Opaque_fs_IN . color . a * saturate ( 5 * ( color . a - 0.5 ) + 0.5 ) ) ; #line 1163 Opaque_fs_OUT . color . a = Opaque_fs_OUT . color . a > 0.5 ? 2.0 + sideIntensity : Opaque_fs_OUT . color . a ; #line 1177 #line 1181 clip ( Opaque_fs_OUT . color . a - 0.5f ) ; } technique11 Opaque { pass pass0 { SetVertexShader ( CompileShader ( vs_5_0 , Opaque_vs_main ( ) ) ) ; SetPixelShader ( CompileShader ( ps_5_0 , Opaque_fs_main ( ) ) ) ; SetBlendState ( ourBlendState , float4 ( 0.0f , 0.0f , 0.0f , 0.0f ) , 0xFFFFFFFF ) ; SetDepthStencilState ( ourDepthStencilState , 0 ) ; SetRasterizerState ( ourRasterState ) ; } } #line 1217 D:\\Dev\\TGC\\Journey\\head\\Journey\\Data\\Shaders\\S_Cloth_vs__Cloth_fs__16143.fxD:/Dev/TGC/Journey/head/Journey/Data/Shaders/S_Cloth_vs__Cloth_fs__16143.fxD:/Dev/TGC/Journey/head/Journey/Data/Shaders/Migratory.shD:/Dev/TGC/Journey/head/Journey/Data/Shaders/migratory.sh ÷†(P—‡)K‡Ñ‡ Ê18< ÿÿÿÿProcessSkInputñGenerateBoneMatrixñD3DSHDR<# `ProcessSkInputñGenerateBoneMatrixñÿÿÿÿ /ñ0!E�¥i  $0<%øOpaque_vs_main"QÿÿÿÿÿÿSkinTransforms"Q ÿÿÿÿÿÿeyePositionWS"Q0ÿÿÿÿÿÿviewprojectionQpÿÿÿÿÿÿl_d"Q€ÿÿÿÿÿÿdudeInvTorso€ÿÿÿÿ /ñDev/TGC/Journey/head/Journey/Data/Shaders/migratory.shþïþïÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿàOpaque_vs_mainnoneÿÿÿÿw 1 Ž?\T ,X<# `  àOpaque_vs_mainnone-º.ñ<# `ÿÿÿÿ<#ÿÿÿÿÿÿÿÿ'{ÇD:\Dev\TGC\Journey\head\Journey\shaderD:\\Dev\\TGC\\Journey\\head\\Journey\\Data\\Shaders\\S_Cloth_vs__Cloth_fs__16143.fxD:/Dev/TGC/Journey/head/Journey/Data/Shaders/S_Cloth_vs__Cloth_fs__16143.fxD:/Dev/TGC/Journey/head/Journey/Data/Shaders/Migratory.shD:/”.1\Œ^F4™�…§G¸ž¼ 0(eT/LinkInfo/names/src/headerblock/src/files/d:\dev\tgc\journey\head\journey\shader" ÜQ3 °LgtKˆ€§†œ=x(\,ȼomn»º´Lqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³M  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKNOPQRSTUVWXYZ[\]^_`abcdefghijklpµ¶·¹¸½¾BLENDINDICESBLENDWEIGHTSCOLORNORMALPOSITIONTEXCOORDPEffectVariantPMaterialOpaqueSkinnableVertexSkinnableNormalSTColorSkinWeightsSkinIndices   0 @ C I U50  |xðàtpÐlhd`\XTPLÀ°HD@ �Œˆ5p5X5@5(55ø5à5È7°6˜6€6h6P686 96ð6Ø6À6¨6�6x9`1XhX1P±XZP!PAP‘ 5P±5 XŽX�XœP1 5X¡XÑX�X±XáX‘ XÁ Xñ H¸P! PAP!Pa X¦X¨ PQ P± #Pñ# #P± F Pñ ^ hª P� hº aXÀ²Á$* ?AøÜ æþâêÞÜæü¸î¨ðºÔ´¼Ê𶚨ŒÈÔÐâþ˜ŒÖ€.lZ¨B’ŠúˆÄ–¤´ÆàÔš¦æÄò*"4444AÀë*"4444