You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

33 lines
2.0 KiB

void BuildSurfaceData(FragInputs fragInputs, inout SurfaceDescription surfaceDescription, float3 V, PositionInputs posInput, out SurfaceData surfaceData, out float3 bentNormalWS)
{
ZERO_INITIALIZE(SurfaceData, surfaceData);
$SurfaceDescription.BaseColor: surfaceData.baseColor.rgb = surfaceDescription.BaseColor;
$SurfaceDescription.Alpha: surfaceData.baseColor.a = surfaceDescription.Alpha;
$SurfaceDescription.RightTopBack: surfaceData.rightTopBack = surfaceDescription.RightTopBack * INV_PI;
$SurfaceDescription.LeftBottomFront: surfaceData.leftBottomFront = surfaceDescription.LeftBottomFront * INV_PI;
$SurfaceDescription.AbsorptionStrength: surfaceData.absorptionRange = INV_PI + saturate(surfaceDescription.AbsorptionStrength) * (1 - INV_PI);
$SurfaceDescription.Occlusion: surfaceData.ambientOcclusion = surfaceDescription.Occlusion;
$FragInputs.diffuseGIData0: surfaceData.bakeDiffuseLighting0 = fragInputs.diffuseGIData[0];
$FragInputs.diffuseGIData1: surfaceData.bakeDiffuseLighting1 = fragInputs.diffuseGIData[1];
$FragInputs.diffuseGIData2: surfaceData.bakeDiffuseLighting2 = fragInputs.diffuseGIData[2];
float frontFaceSign = fragInputs.isFrontFace ? 1.0f : -1.0f;
surfaceData.tangentWS = float4(normalize(fragInputs.tangentToWorld[0].xyz), 1);
surfaceData.bitangentWS = fragInputs.tangentToWorld[1].xyz;
surfaceData.normalWS = frontFaceSign * fragInputs.tangentToWorld[2].xyz;
surfaceData.bakeDiffuseLighting2.xyz *= frontFaceSign;
bentNormalWS = surfaceData.normalWS; //Not used
#ifdef DEBUG_DISPLAY
// We need to call ApplyDebugToSurfaceData after filling the surfarcedata and before filling builtinData
// as it can modify attribute use for static lighting
ApplyDebugToSurfaceData(fragInputs.tangentToWorld, surfaceData);
#endif
}