#include "macros.hlsl" COMMON { cbuffer CameraInfo { float4x4 g_matViewProjection; float4 g_vViewPosition; }; struct PerModelData { float4x4 m_matTranslation; float4x4 m_matRotation; } StructuredBuffer g_modelData; struct PS_INPUT { float4 m_vScreenPosition: SV_POSITION; float4 m_vWorldPosition: POSITION; float4 m_vTexCoord: TEXCOORD0; float4 m_vNormal: NORMAL0; } } VS { struct VS_INPUT { float3 m_vPosition: POSITION; float2 m_vTexCoord: TEXCOORD0; float3 m_vNormal: NORMAL0; } PS_INPUT vsMain( VS_INPUT input ) { PS_INPUT output = {}; output.m_vScreenPosition = float4(input.m_vPosition, 1); output.m_vScreenPosition = mul( output.m_vScreenPosition, g_modelData[0].m_matTranslation ); output.m_vScreenPosition = mul( output.m_vScreenPosition, g_matViewProjection ); output.m_vWorldPosition = mul( float4(input.m_vPosition, 1), g_modelData[0].m_matTranslation ); output.m_vNormal = mul( float4(input.m_vNormal, 1), g_modelData[0].m_matRotation ); output.m_vTexCoord = float4(input.m_vTexCoord, 0, 0); return output; } } PS { #include "brdf.hlsl" float4 psMain( PS_INPUT input ) { float4 vWorldSpacePosition = input.m_vNormal; BRDF_t brdf = {}; brdf.m_vRayIn = normalize(g_vViewPosition.xyz-input.m_vWorldPosition.xyz); brdf.m_vRayOut = normalize(-input.m_vWorldPosition.xyz); brdf.m_vNormal = input.m_vNormal.xyz; brdf.m_fRoughness = 1; brdf.m_fMetalness = 1; return float4(brdf.BurleyDiffuse(), 1); } }