You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
340 lines
14 KiB
Plaintext
340 lines
14 KiB
Plaintext
{
|
|
"Type": "JsonSerialization",
|
|
"Version": 1,
|
|
"ClassName": "PassAsset",
|
|
"ClassData": {
|
|
"PassTemplate": {
|
|
"Name": "HairParentPassTemplate",
|
|
"PassClass": "ParentPass",
|
|
"Slots": [
|
|
{
|
|
"Name": "RenderTargetInputOutput",
|
|
"SlotType": "InputOutput",
|
|
"ScopeAttachmentUsage": "RenderTarget"
|
|
},
|
|
{
|
|
"Name": "RenderTargetInputOnly",
|
|
"SlotType": "Input",
|
|
"ScopeAttachmentUsage": "Shader"
|
|
},
|
|
// This is the depth stencil buffer that is to be used by the fill pass
|
|
// to early reject pixels by depth and in the resolve pass to write the
|
|
// the hair depth
|
|
{
|
|
"Name": "Depth",
|
|
"SlotType": "InputOutput",
|
|
"ScopeAttachmentUsage": "DepthStencil"
|
|
},
|
|
// used to set the size of the Head PPLL image buffer.
|
|
{
|
|
"Name": "DepthLinear",
|
|
"SlotType": "InputOutput"
|
|
},
|
|
// Lights & Shadows resources
|
|
{
|
|
"Name": "DirectionalShadowmap",
|
|
"SlotType": "Input"
|
|
},
|
|
{
|
|
"Name": "DirectionalESM",
|
|
"SlotType": "Input"
|
|
},
|
|
{
|
|
"Name": "ProjectedShadowmap",
|
|
"SlotType": "Input"
|
|
},
|
|
{
|
|
"Name": "ProjectedESM",
|
|
"SlotType": "Input"
|
|
},
|
|
{
|
|
"Name": "TileLightData",
|
|
"SlotType": "Input"
|
|
},
|
|
{
|
|
"Name": "LightListRemapped",
|
|
"SlotType": "Input"
|
|
}
|
|
],
|
|
"PassRequests": [
|
|
{
|
|
"Name": "HairGlobalShapeConstraintsComputePass",
|
|
"TemplateName": "HairGlobalShapeConstraintsComputePassTemplate",
|
|
"Enabled": true
|
|
},
|
|
{
|
|
"Name": "HairCalculateStrandLevelDataComputePass",
|
|
"TemplateName": "HairCalculateStrandLevelDataComputePassTemplate",
|
|
"Enabled": true,
|
|
"Connections": [
|
|
{
|
|
"LocalSlot": "SkinnedHairSharedBuffer",
|
|
"AttachmentRef": {
|
|
"Pass": "HairGlobalShapeConstraintsComputePass",
|
|
"Attachment": "SkinnedHairSharedBuffer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"Name": "HairVelocityShockPropagationComputePass",
|
|
"TemplateName": "HairVelocityShockPropagationComputePassTemplate",
|
|
"Enabled": true,
|
|
"Connections": [
|
|
{
|
|
"LocalSlot": "SkinnedHairSharedBuffer",
|
|
"AttachmentRef": {
|
|
"Pass": "HairCalculateStrandLevelDataComputePass",
|
|
"Attachment": "SkinnedHairSharedBuffer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"Name": "HairLocalShapeConstraintsComputePass",
|
|
"TemplateName": "HairLocalShapeConstraintsComputePassTemplate",
|
|
"Enabled": true,
|
|
"Connections": [
|
|
{
|
|
"LocalSlot": "SkinnedHairSharedBuffer",
|
|
"AttachmentRef": {
|
|
"Pass": "HairVelocityShockPropagationComputePass",
|
|
"Attachment": "SkinnedHairSharedBuffer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"Name": "HairLengthConstraintsWindAndCollisionComputePass",
|
|
"TemplateName": "HairLengthConstraintsWindAndCollisionComputePassTemplate",
|
|
"Enabled": true,
|
|
"Connections": [
|
|
{
|
|
"LocalSlot": "SkinnedHairSharedBuffer",
|
|
"AttachmentRef": {
|
|
"Pass": "HairLocalShapeConstraintsComputePass",
|
|
"Attachment": "SkinnedHairSharedBuffer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"Name": "HairUpdateFollowHairComputePass",
|
|
"TemplateName": "HairUpdateFollowHairComputePassTemplate",
|
|
"Enabled": true,
|
|
"Connections": [
|
|
{
|
|
"LocalSlot": "SkinnedHairSharedBuffer",
|
|
"AttachmentRef": {
|
|
"Pass": "HairLengthConstraintsWindAndCollisionComputePass",
|
|
"Attachment": "SkinnedHairSharedBuffer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
|
|
{
|
|
"Name": "HairPPLLRasterPass",
|
|
"TemplateName": "HairPPLLRasterPassTemplate",
|
|
"Enabled": true,
|
|
"Connections": [
|
|
{
|
|
"LocalSlot": "SkinnedHairSharedBuffer",
|
|
"AttachmentRef": {
|
|
"Pass": "HairUpdateFollowHairComputePass",
|
|
"Attachment": "SkinnedHairSharedBuffer"
|
|
}
|
|
},
|
|
// Keep DepthLinear as input - used to set the size of the Head PPLL image buffer.
|
|
// If DepthLinear is not availbale - connect to another viewport (non MSAA) image.
|
|
{
|
|
"LocalSlot": "DepthLinear",
|
|
"AttachmentRef": {
|
|
"Pass": "Parent",
|
|
"Attachment": "DepthLinear"
|
|
}
|
|
},
|
|
{
|
|
"LocalSlot": "Depth",
|
|
"AttachmentRef": {
|
|
"Pass": "Parent",
|
|
"Attachment": "Depth"
|
|
}
|
|
},
|
|
{
|
|
"LocalSlot": "RenderTargetInputOutput",
|
|
"AttachmentRef": {
|
|
"Pass": "Parent",
|
|
"Attachment": "RenderTargetInputOutput"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
|
|
{
|
|
"Name": "RenderTargetCopyPass",
|
|
"TemplateName": "FullscreenCopyTemplate",
|
|
"Connections": [
|
|
{
|
|
"LocalSlot": "Input",
|
|
"AttachmentRef": {
|
|
"Pass": "Parent",
|
|
"Attachment": "RenderTargetInputOnly"
|
|
}
|
|
},
|
|
{
|
|
"LocalSlot": "Output",
|
|
"AttachmentRef": {
|
|
"Pass": "This",
|
|
"Attachment": "Output"
|
|
}
|
|
}
|
|
],
|
|
"ImageAttachments": [
|
|
{
|
|
"Name": "Output",
|
|
"SizeSource": {
|
|
"Source": {
|
|
"Pass": "This",
|
|
"Attachment": "Input"
|
|
}
|
|
},
|
|
"FormatSource": {
|
|
"Pass": "This",
|
|
"Attachment": "Input"
|
|
},
|
|
"GenerateFullMipChain": false
|
|
}
|
|
]
|
|
},
|
|
|
|
{
|
|
"Name": "HairPPLLResolvePass",
|
|
"TemplateName": "HairPPLLResolvePassTemplate",
|
|
"Enabled": true,
|
|
"Connections": [
|
|
// General + Render Target resources
|
|
{
|
|
"LocalSlot": "RenderTargetInputOutput",
|
|
"AttachmentRef": {
|
|
"Pass": "Parent",
|
|
"Attachment": "RenderTargetInputOutput"
|
|
}
|
|
},
|
|
{
|
|
"LocalSlot": "RenderTargetCopy",
|
|
"AttachmentRef": {
|
|
"Pass": "RenderTargetCopyPass",
|
|
"Attachment": "Output"
|
|
}
|
|
},
|
|
{
|
|
"LocalSlot": "Depth",
|
|
"AttachmentRef": {
|
|
"Pass": "Parent",
|
|
"Attachment": "Depth"
|
|
}
|
|
},
|
|
{
|
|
"LocalSlot": "DepthLinear",
|
|
"AttachmentRef": {
|
|
"Pass": "Parent",
|
|
"Attachment": "DepthLinear"
|
|
}
|
|
},
|
|
|
|
// Shadows resources
|
|
{
|
|
"LocalSlot": "DirectionalShadowmap",
|
|
"AttachmentRef": {
|
|
"Pass": "Parent",
|
|
"Attachment": "DirectionalShadowmap"
|
|
}
|
|
},
|
|
{
|
|
"LocalSlot": "DirectionalESM",
|
|
"AttachmentRef": {
|
|
"Pass": "Parent",
|
|
"Attachment": "DirectionalESM"
|
|
}
|
|
},
|
|
{
|
|
"LocalSlot": "ProjectedShadowmap",
|
|
"AttachmentRef": {
|
|
"Pass": "Parent",
|
|
"Attachment": "ProjectedShadowmap"
|
|
}
|
|
},
|
|
{
|
|
"LocalSlot": "ProjectedESM",
|
|
"AttachmentRef": {
|
|
"Pass": "Parent",
|
|
"Attachment": "ProjectedESM"
|
|
}
|
|
},
|
|
|
|
// Lights Resources
|
|
{
|
|
"LocalSlot": "TileLightData",
|
|
"AttachmentRef": {
|
|
"Pass": "Parent",
|
|
"Attachment": "TileLightData"
|
|
}
|
|
},
|
|
{
|
|
"LocalSlot": "LightListRemapped",
|
|
"AttachmentRef": {
|
|
"Pass": "Parent",
|
|
"Attachment": "LightListRemapped"
|
|
}
|
|
},
|
|
|
|
|
|
// PPLL Resources
|
|
{
|
|
"LocalSlot": "PerPixelListHead",
|
|
"AttachmentRef": {
|
|
"Pass": "HairPPLLRasterPass",
|
|
"Attachment": "PerPixelListHead"
|
|
}
|
|
},
|
|
{
|
|
"LocalSlot": "PerPixelLinkedList",
|
|
"AttachmentRef": {
|
|
"Pass": "HairPPLLRasterPass",
|
|
"Attachment": "PerPixelLinkedList"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
// This pass copies the updated depth buffer (now contains hair depth) to linear depth texture
|
|
// for downstream passes to use. This can be optimized even further by writing into the stencil
|
|
// buffer pixels that were touched by HairPPLLResolvePass hence preventing depth update unless
|
|
// it is hair.
|
|
"Name": "DepthToDepthLinearPass",
|
|
"TemplateName": "HairDepthToLinearTemplate",
|
|
"Enabled": true,
|
|
"Connections": [
|
|
{
|
|
"LocalSlot": "Input",
|
|
"AttachmentRef": {
|
|
"Pass": "HairPPLLResolvePass",
|
|
"Attachment": "Depth"
|
|
}
|
|
},
|
|
{
|
|
"LocalSlot": "Output",
|
|
"AttachmentRef": {
|
|
"Pass": "Parent",
|
|
"Attachment": "DepthLinear"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
|