2 namespace UnityEngine.Experimental.Rendering.HDPipeline
4 [GenerateHLSL(needAccessors = false, omitStructDeclaration = true)]
5 public unsafe struct ShaderVariablesSubsurfaceScattering
7 // Use float4 to avoid any packing issue between compute and pixel shaders
8 [HLSLArray(DiffusionProfileConstants.DIFFUSION_PROFILE_COUNT, typeof(Vector4))]
9 public fixed float _ThicknessRemaps[DiffusionProfileConstants.DIFFUSION_PROFILE_COUNT * 4]; // R: start, G = end - start, BA unused
10 [HLSLArray(DiffusionProfileConstants.DIFFUSION_PROFILE_COUNT, typeof(Vector4))]
11 public fixed float _ShapeParams[DiffusionProfileConstants.DIFFUSION_PROFILE_COUNT * 4]; // RGB = S = 1 / D, A = filter radius
12 [HLSLArray(DiffusionProfileConstants.DIFFUSION_PROFILE_COUNT, typeof(Vector4))]
13 public fixed float _TransmissionTintsAndFresnel0[DiffusionProfileConstants.DIFFUSION_PROFILE_COUNT * 4]; // RGB = 1/4 * color, A = fresnel0
14 [HLSLArray(DiffusionProfileConstants.DIFFUSION_PROFILE_COUNT, typeof(Vector4))]
15 public fixed float _WorldScales[DiffusionProfileConstants.DIFFUSION_PROFILE_COUNT * 4]; // X = meters per world unit; Y = world units per meter
16 [HLSLArray(DiffusionProfileConstants.DIFFUSION_PROFILE_COUNT, typeof(float))]
17 public fixed uint _DiffusionProfileHashTable[DiffusionProfileConstants.DIFFUSION_PROFILE_COUNT]; // TODO: constant
19 // Warning: Unity is not able to losslessly transfer integers larger than 2^24 to the shader system.
20 // Therefore, we bitcast uint to float in C#, and bitcast back to uint in the shader.
21 public uint _EnableSubsurfaceScattering; // Globally toggles subsurface and transmission scattering on/off
22 public float _TexturingModeFlags; // 1 bit/profile; 0 = PreAndPostScatter, 1 = PostScatter
23 public float _TransmissionFlags; // 1 bit/profile; 0 = regular, 1 = thin
24 public uint _DiffusionProfileCount;