blob: fb1ce55c0aa1fd0aba5c5a04bc1a7c63e82585d9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
//TEST_IGNORE_FILE:
__exported import IMaterialInstance;
__exported import IBSDF;
public struct GlossyBSDF : IBSDF
{
public float3 albedo;
public float3 getAlbedo()
{
return albedo;
}
[ForwardDerivativeOf(getAlbedo)]
[TreatAsDifferentiable]
public DifferentialPair<float3> __fwd_d_getAlbedo()
{
return diffPair(albedo, float3(1.f));
}
[BackwardDerivativeOf(getAlbedo)]
[TreatAsDifferentiable]
public void __bwd_d_getAlbedo(float3 dOut)
{
[unroll]
for (int j = 0; j < 3; j++) outputBuffer[j + 3] += dOut[j];
}
[BackwardDifferentiable]
public float3 eval(const float3 wiLocal, const float3 woLocal)
{
float3 a = getAlbedo();
return a * a;
}
};
public struct GlossyMaterialInstance : IMaterialInstance
{
public GlossyBSDF bsdf;
[BackwardDifferentiable]
public float3 eval(const float3 wi, const float3 wo)
{
return bsdf.eval(wi, wo);
}
};
|