Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[HDRP][Path Tracing] Replaced recursive continuation rays with loop in ray generation #7090

Closed
wants to merge 50 commits into from
Closed
Show file tree
Hide file tree
Changes from 38 commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
b1ed6a4
Moved path tracing forward integrator to its own file.
eturquin Jan 25, 2022
e3f7aa8
Moved files for better consistency.
eturquin Jan 25, 2022
19fb5d9
Ray generation refactor.
eturquin Jan 25, 2022
5911aac
WIP
eturquin Jan 26, 2022
75bfb46
WIP
eturquin Feb 1, 2022
7ea3411
WIP
eturquin Feb 3, 2022
ffcb7c2
Mult by throughput on misses.
eturquin Feb 6, 2022
ffaf44d
WIP
eturquin Feb 6, 2022
9d3ae2a
WIP
eturquin Feb 7, 2022
a4dc385
Reached mostly functional state (still needs to reactivate volumes).
eturquin Feb 7, 2022
a067e31
Moved intensity clamping to raygen.
eturquin Feb 8, 2022
66dbf21
Reproduced former clamping scheme.
eturquin Feb 8, 2022
34f5d37
Removed sensor files.
eturquin Feb 8, 2022
708871e
More comments on Segment ID.
eturquin Feb 8, 2022
a6d81eb
Cleaned up PathIntersection aliasing.
eturquin Feb 8, 2022
86f2d83
Reactivated unlit shadow matte.
eturquin Feb 8, 2022
d216264
Added support for transparent Unlit continuation ray.
eturquin Feb 8, 2022
554d5ed
Adding volumes back (WIP)
eturquin Feb 8, 2022
49260fb
Fixed volume absorption and scattering.
eturquin Feb 8, 2022
f576a88
Minor code refactor for fog absorption.
eturquin Feb 8, 2022
5b956b0
Replaced *intersection variable names with payload.
eturquin Feb 8, 2022
7cc5149
Renamed PathIntersection to PathPayload.
eturquin Feb 8, 2022
5a7a244
Fixed bug with continuation rays hitting transparent surfaces.
eturquin Feb 8, 2022
bbb7375
Rework of the Miss system, support for non-sampled skies.
eturquin Feb 9, 2022
a8176bc
Simplified clamping.
eturquin Feb 9, 2022
f204ac8
Fixed fog absorption on sky values.
eturquin Feb 9, 2022
37c742a
Trying more aggressive clamping (will need to be further tested).
eturquin Feb 9, 2022
8be7544
Fixed with continuation ray init.
eturquin Feb 10, 2022
5f383b0
Removed clamping on throughput (was too strong).
eturquin Feb 10, 2022
ed20eb8
Merge branch 'master' into hd/pt_no_recursion
eturquin Feb 10, 2022
1e64195
...
eturquin Feb 10, 2022
8bd1493
Reached working state (still things to be double-checked)
eturquin Feb 10, 2022
c60a32c
Fixed issue with segmentID aliasing.
eturquin Feb 10, 2022
a11d407
Get AOV data straight form BSDF data.
eturquin Feb 10, 2022
13f692f
Fixed motion vector computation in AOV of the same name.
eturquin Feb 11, 2022
4a6772f
Merge branch 'master' into hd/pt_no_recursion
eturquin Feb 11, 2022
9b4c94a
Updated changelog.
eturquin Feb 11, 2022
95656d0
Updated reference images.
eturquin Feb 11, 2022
9564749
Merge branch 'master' into hd/pt_no_recursion
eturquin Feb 21, 2022
c638223
remove RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH Flag
remi-chapelain Feb 21, 2022
ff4d00b
Cleaned up corner cases with bad init and payload aliasing.
eturquin Feb 21, 2022
c4eda27
Set right payload instance for shadow computation on volumetric
eturquin Feb 22, 2022
770f28c
Simplified anyhit().
eturquin Feb 22, 2022
5fa4107
Skip closestHit as much as possible.
eturquin Feb 22, 2022
7ffbe6c
Cosmetic.
eturquin Feb 22, 2022
82e3d8e
Added roughness-based intensity clamp.
eturquin Feb 23, 2022
0cf403c
Reverted to previous clamping method.
eturquin Feb 23, 2022
13a42df
Merge branch 'master' into hd/pt_no_recursion
eturquin Feb 23, 2022
5a6e362
Merge branch 'master' into hd/pt_no_recursion
eturquin Feb 28, 2022
5cb5a89
Merge branch 'master' into hd/pt_no_recursion
eturquin Mar 1, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions com.unity.render-pipelines.high-definition/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
- Make Vertical gate fit the default for physical camera.
- Changed how the ambient probe is sent to the volumetric clouds trace pass (case 1381761).
- Moved custom Sensor Lidar path tracing code to the SensorSDK package.
- Path Tracing has moved from a recursive to an iterative implementation.

### Fixed
- Fixed build warnings due to the exception in burst code (case 1382827).
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/Shaders/PathTracingIntersection.hlsl"
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/Shaders/PathTracingPayload.hlsl"
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/Shaders/PathTracingMaterial.hlsl"
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/Shaders/PathTracingBSDF.hlsl"
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/Shaders/PathTracingAOV.hlsl"
Expand All @@ -21,13 +21,13 @@ float GetSpecularCoeffSum(MaterialData mtlData)
}
#endif

void ProcessBSDFData(PathIntersection pathIntersection, BuiltinData builtinData, MaterialData mtlData, inout BSDFData bsdfData)
void ProcessBSDFData(PathPayload payload, BuiltinData builtinData, MaterialData mtlData, inout BSDFData bsdfData)
{
// Adjust roughness to reduce fireflies
bsdfData.roughness.x = max(pathIntersection.maxRoughness, bsdfData.roughness.x);
bsdfData.roughness.y = max(pathIntersection.maxRoughness, bsdfData.roughness.y);
bsdfData.roughness.x = max(payload.maxRoughness, bsdfData.roughness.x);
bsdfData.roughness.y = max(payload.maxRoughness, bsdfData.roughness.y);
#ifdef _AXF_BRDF_TYPE_CAR_PAINT
bsdfData.roughness.z = max(pathIntersection.maxRoughness, bsdfData.roughness.z);
bsdfData.roughness.z = max(payload.maxRoughness, bsdfData.roughness.z);
#endif

// One of the killer features of AxF, optional specular Fresnel...
Expand All @@ -47,13 +47,13 @@ void ProcessBSDFData(PathIntersection pathIntersection, BuiltinData builtinData,
#endif
}

bool CreateMaterialData(PathIntersection pathIntersection, BuiltinData builtinData, BSDFData bsdfData, inout float3 shadingPosition, inout float theSample, out MaterialData mtlData)
bool CreateMaterialData(PathPayload payload, BuiltinData builtinData, BSDFData bsdfData, inout float3 shadingPosition, inout float theSample, out MaterialData mtlData)
{
// Alter values in the material's bsdfData struct, to better suit path tracing
mtlData.V = -WorldRayDirection();
mtlData.Nv = ComputeConsistentShadingNormal(mtlData.V, bsdfData.geomNormalWS, bsdfData.normalWS);
mtlData.bsdfData = bsdfData;
ProcessBSDFData(pathIntersection, builtinData, mtlData, mtlData.bsdfData);
ProcessBSDFData(payload, builtinData, mtlData, mtlData.bsdfData);

mtlData.bsdfWeight = 0.0;

Expand Down Expand Up @@ -109,13 +109,14 @@ float AdjustPathRoughness(MaterialData mtlData, MaterialResult mtlResult, bool i
return adjustedPathRoughness;
}

float3 ApplyAbsorption(MaterialData mtlData, SurfaceData surfaceData, float dist, bool isSampleBelow, float3 value)
float3 GetMaterialAbsorption(MaterialData mtlData, SurfaceData surfaceData, float dist, bool isSampleBelow)
{
return value;
// No absorption here
return 1.0;
}

void GetAOVData(MaterialData mtlData, out AOVData aovData)
void GetAOVData(BSDFData bsdfData, out AOVData aovData)
{
aovData.albedo = mtlData.bsdfData.diffuseColor;
aovData.normal = mtlData.bsdfData.normalWS;
aovData.albedo = bsdfData.diffuseColor;
aovData.normal = bsdfData.normalWS;
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/Shaders/PathTracingIntersection.hlsl"
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/Shaders/PathTracingPayload.hlsl"
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/Shaders/PathTracingMaterial.hlsl"
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/Shaders/PathTracingBSDF.hlsl"
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/Shaders/PathTracingAOV.hlsl"
Expand All @@ -15,11 +15,11 @@
// bsdfWeight1 Spec GGX BRDF
// bsdfWeight2 Diffuse BTDF

void ProcessBSDFData(PathIntersection pathIntersection, BuiltinData builtinData, inout BSDFData bsdfData)
void ProcessBSDFData(PathPayload payload, BuiltinData builtinData, inout BSDFData bsdfData)
{
// Adjust roughness to reduce fireflies
bsdfData.roughnessT = max(pathIntersection.maxRoughness, bsdfData.roughnessT);
bsdfData.roughnessB = max(pathIntersection.maxRoughness, bsdfData.roughnessB);
bsdfData.roughnessT = max(payload.maxRoughness, bsdfData.roughnessT);
bsdfData.roughnessB = max(payload.maxRoughness, bsdfData.roughnessB);

if (HasFlag(bsdfData.materialFeatures, MATERIALFEATUREFLAGS_FABRIC_COTTON_WOOL))
{
Expand All @@ -28,11 +28,11 @@ void ProcessBSDFData(PathIntersection pathIntersection, BuiltinData builtinData,
}
}

bool CreateMaterialData(PathIntersection pathIntersection, BuiltinData builtinData, BSDFData bsdfData, inout float3 shadingPosition, inout float theSample, out MaterialData mtlData)
bool CreateMaterialData(PathPayload payload, BuiltinData builtinData, BSDFData bsdfData, inout float3 shadingPosition, inout float theSample, out MaterialData mtlData)
{
// Alter values in the material's bsdfData struct, to better suit path tracing
mtlData.bsdfData = bsdfData;
ProcessBSDFData(pathIntersection, builtinData, mtlData.bsdfData);
ProcessBSDFData(payload, builtinData, mtlData.bsdfData);

mtlData.bsdfWeight = 0.0;
mtlData.V = -WorldRayDirection();
Expand Down Expand Up @@ -67,7 +67,7 @@ bool CreateMaterialData(PathIntersection pathIntersection, BuiltinData builtinDa

if (HasFlag(mtlData.bsdfData.materialFeatures, MATERIALFEATUREFLAGS_FABRIC_SUBSURFACE_SCATTERING))
{
float subsurfaceWeight = mtlData.bsdfWeight[0] * mtlData.bsdfData.subsurfaceMask * (1.0 - pathIntersection.maxRoughness);
float subsurfaceWeight = mtlData.bsdfWeight[0] * mtlData.bsdfData.subsurfaceMask * (1.0 - payload.maxRoughness);

mtlData.isSubsurface = theSample < subsurfaceWeight;
if (mtlData.isSubsurface)
Expand All @@ -79,7 +79,7 @@ bool CreateMaterialData(PathIntersection pathIntersection, BuiltinData builtinDa
SSS::Result subsurfaceResult;
float3 meanFreePath = 0.001 / (_ShapeParamsAndMaxScatterDists[mtlData.bsdfData.diffusionProfileIndex].rgb * _WorldScalesAndFilterRadiiAndThicknessRemaps[mtlData.bsdfData.diffusionProfileIndex].x);

if (!SSS::RandomWalk(shadingPosition, GetDiffuseNormal(mtlData), mtlData.bsdfData.diffuseColor, meanFreePath, pathIntersection.pixelCoord, subsurfaceResult, hasTransmission))
if (!SSS::RandomWalk(shadingPosition, GetDiffuseNormal(mtlData), mtlData.bsdfData.diffuseColor, meanFreePath, payload.pixelCoord, subsurfaceResult, hasTransmission))
return false;

shadingPosition = subsurfaceResult.exitPosition;
Expand Down Expand Up @@ -280,14 +280,14 @@ float AdjustPathRoughness(MaterialData mtlData, MaterialResult mtlResult, bool i
return (mtlResult.specPdf * max(mtlData.bsdfData.roughnessT, mtlData.bsdfData.roughnessB) + mtlResult.diffPdf) / (mtlResult.diffPdf + mtlResult.specPdf);
}

float3 ApplyAbsorption(MaterialData mtlData, SurfaceData surfaceData, float dist, bool isSampleBelow, float3 value)
float3 GetMaterialAbsorption(MaterialData mtlData, SurfaceData surfaceData, float dist, bool isSampleBelow)
{
// No absorption here
return value;
return 1.0;
}

void GetAOVData(MaterialData mtlData, out AOVData aovData)
void GetAOVData(BSDFData bsdfData, out AOVData aovData)
{
aovData.albedo = mtlData.bsdfData.diffuseColor;
aovData.normal = mtlData.bsdfData.normalWS;
aovData.albedo = bsdfData.diffuseColor;
aovData.normal = bsdfData.normalWS;
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/Shaders/PathTracingIntersection.hlsl"
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/Shaders/PathTracingPayload.hlsl"
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/Shaders/PathTracingMaterial.hlsl"
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/Shaders/PathTracingBSDF.hlsl"
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/Shaders/PathTracingAOV.hlsl"
Expand All @@ -19,26 +19,26 @@ float2 DemuxFloat(float x)

// --------------------------------------------------------------------------------------

void ProcessBSDFData(PathIntersection pathIntersection, BuiltinData builtinData, inout BSDFData bsdfData)
void ProcessBSDFData(PathPayload payload, BuiltinData builtinData, inout BSDFData bsdfData)
{
// NOTE: Currently we don't support ray-aligned ribbons in the acceleration structure, so our only H-calculation routines
// are either stochastic or derived from a tube intersection.
#if 0
bsdfData.h = GetHFromTube(-WorldRayDirection(), bsdfData.normalWS, bsdfData.hairStrandDirectionWS);
#else
bsdfData.h = -1 + 2 * InterleavedGradientNoise(pathIntersection.pixelCoord, _RaytracingSampleIndex);
bsdfData.h = -1 + 2 * InterleavedGradientNoise(payload.pixelCoord, _RaytracingSampleIndex);
#endif
}

bool CreateMaterialData(PathIntersection pathIntersection, BuiltinData builtinData, BSDFData bsdfData, inout float3 shadingPosition, inout float theSample, out MaterialData mtlData)
bool CreateMaterialData(PathPayload payload, BuiltinData builtinData, BSDFData bsdfData, inout float3 shadingPosition, inout float theSample, out MaterialData mtlData)
{
// Kajiya not supported.
if (HasFlag(bsdfData.materialFeatures, MATERIALFEATUREFLAGS_HAIR_KAJIYA_KAY))
return false;

// Alter values in the material's bsdfData struct, to better suit path tracing
mtlData.bsdfData = bsdfData;
ProcessBSDFData(pathIntersection, builtinData, mtlData.bsdfData);
ProcessBSDFData(payload, builtinData, mtlData.bsdfData);

mtlData.bsdfWeight = 0.0;
mtlData.V = -WorldRayDirection();
Expand Down Expand Up @@ -104,19 +104,17 @@ float3 GetLightNormal(MaterialData mtlData)
float AdjustPathRoughness(MaterialData mtlData, MaterialResult mtlResult, bool isSampleBelow, float pathRoughness)
{
// TODO

return pathRoughness;
}

float3 ApplyAbsorption(MaterialData mtlData, SurfaceData surfaceData, float dist, bool isSampleBelow, float3 value)
float3 GetMaterialAbsorption(MaterialData mtlData, SurfaceData surfaceData, float dist, bool isSampleBelow)
{
// TODO

return value;
return 1.0;
}

void GetAOVData(MaterialData mtlData, out AOVData aovData)
void GetAOVData(BSDFData bsdfData, out AOVData aovData)
{
aovData.albedo = mtlData.bsdfData.diffuseColor;
aovData.normal = mtlData.bsdfData.normalWS;
aovData.albedo = bsdfData.diffuseColor;
aovData.normal = bsdfData.normalWS;
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/Shaders/PathTracingIntersection.hlsl"
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/Shaders/PathTracingPayload.hlsl"
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/Shaders/PathTracingMaterial.hlsl"
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/Shaders/PathTracingBSDF.hlsl"
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/Shaders/PathTracingAOV.hlsl"
Expand All @@ -15,11 +15,11 @@ float3 GetSpecularCompensation(MaterialData mtlData)
return 1.0 + mtlData.bsdfData.specularOcclusion * mtlData.bsdfData.fresnel0;
}

void ProcessBSDFData(PathIntersection pathIntersection, BuiltinData builtinData, MaterialData mtlData, inout BSDFData bsdfData)
void ProcessBSDFData(PathPayload payload, BuiltinData builtinData, MaterialData mtlData, inout BSDFData bsdfData)
{
// Adjust roughness to reduce fireflies
bsdfData.roughnessT = max(pathIntersection.maxRoughness, bsdfData.roughnessT);
bsdfData.roughnessB = max(pathIntersection.maxRoughness, bsdfData.roughnessB);
bsdfData.roughnessT = max(payload.maxRoughness, bsdfData.roughnessT);
bsdfData.roughnessB = max(payload.maxRoughness, bsdfData.roughnessB);

float NdotV = abs(dot(GetSpecularNormal(mtlData), mtlData.V));

Expand All @@ -46,13 +46,13 @@ void ProcessBSDFData(PathIntersection pathIntersection, BuiltinData builtinData,
#endif
}

bool CreateMaterialData(PathIntersection pathIntersection, BuiltinData builtinData, BSDFData bsdfData, inout float3 shadingPosition, inout float theSample, out MaterialData mtlData)
bool CreateMaterialData(PathPayload payload, BuiltinData builtinData, BSDFData bsdfData, inout float3 shadingPosition, inout float theSample, out MaterialData mtlData)
{
// Alter values in the material's bsdfData struct, to better suit path tracing
mtlData.V = -WorldRayDirection();
mtlData.Nv = ComputeConsistentShadingNormal(mtlData.V, bsdfData.geomNormalWS, bsdfData.normalWS);
mtlData.bsdfData = bsdfData;
ProcessBSDFData(pathIntersection, builtinData, mtlData, mtlData.bsdfData);
ProcessBSDFData(payload, builtinData, mtlData, mtlData.bsdfData);

mtlData.bsdfWeight = 0.0;

Expand Down Expand Up @@ -92,7 +92,7 @@ bool CreateMaterialData(PathIntersection pathIntersection, BuiltinData builtinDa
mtlData.bsdfWeight /= wSum;

#ifdef _MATERIAL_FEATURE_SUBSURFACE_SCATTERING
float subsurfaceWeight = mtlData.bsdfWeight[0] * mtlData.bsdfData.subsurfaceMask * (1.0 - pathIntersection.maxRoughness);
float subsurfaceWeight = mtlData.bsdfWeight[0] * mtlData.bsdfData.subsurfaceMask * (1.0 - payload.maxRoughness);

mtlData.isSubsurface = theSample < subsurfaceWeight;
if (mtlData.isSubsurface)
Expand All @@ -109,7 +109,7 @@ bool CreateMaterialData(PathIntersection pathIntersection, BuiltinData builtinDa
#else
bool isThin = false;
#endif
if (!SSS::RandomWalk(shadingPosition, GetDiffuseNormal(mtlData), mtlData.bsdfData.diffuseColor, meanFreePath, pathIntersection.pixelCoord, subsurfaceResult, isThin))
if (!SSS::RandomWalk(shadingPosition, GetDiffuseNormal(mtlData), mtlData.bsdfData.diffuseColor, meanFreePath, payload.pixelCoord, subsurfaceResult, isThin))
return false;

shadingPosition = subsurfaceResult.exitPosition;
Expand Down Expand Up @@ -353,26 +353,26 @@ float AdjustPathRoughness(MaterialData mtlData, MaterialResult mtlResult, bool i
return adjustedPathRoughness;
}

float3 ApplyAbsorption(MaterialData mtlData, SurfaceData surfaceData, float dist, bool isSampleBelow, float3 value)
float3 GetMaterialAbsorption(MaterialData mtlData, SurfaceData surfaceData, float dist, bool isSampleBelow)
{
#if defined(_SURFACE_TYPE_TRANSPARENT) && HAS_REFRACTION
// Apply absorption on rays below the interface, using Beer-Lambert's law
if (isSampleBelow)
{
#ifdef _REFRACTION_THIN
value *= exp(-mtlData.bsdfData.absorptionCoefficient * REFRACTION_THIN_DISTANCE);
return exp(-mtlData.bsdfData.absorptionCoefficient * REFRACTION_THIN_DISTANCE);
#else
// We allow a reasonable max distance of 10 times the "atDistance" (so that objects do not end up appearing black)
value *= exp(-mtlData.bsdfData.absorptionCoefficient * min(dist, surfaceData.atDistance * 10.0));
return exp(-mtlData.bsdfData.absorptionCoefficient * min(dist, surfaceData.atDistance * 10.0));
#endif
}
#endif

return value;
return 1.0;
}

void GetAOVData(MaterialData mtlData, out AOVData aovData)
void GetAOVData(BSDFData bsdfData, out AOVData aovData)
{
aovData.albedo = mtlData.bsdfData.diffuseColor;
aovData.normal = mtlData.bsdfData.normalWS;
aovData.albedo = bsdfData.diffuseColor;
aovData.normal = bsdfData.normalWS;
}
Loading