您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
60 行
2.6 KiB
60 行
2.6 KiB
#pragma kernel ShadeOpaque_Fptl SHADE_OPAQUE_ENTRY=ShadeOpaque_Fptl USE_FPTL_LIGHTLIST=1
|
|
#pragma kernel ShadeOpaque_Clustered SHADE_OPAQUE_ENTRY=ShadeOpaque_Clustered USE_CLUSTERED_LIGHTLIST=1
|
|
|
|
|
|
#define LIGHTLOOP_TILE_PASS 1
|
|
#define LIGHTLOOP_TILE_DIRECT 1
|
|
#define LIGHTLOOP_TILE_INDIRECT 1
|
|
#define LIGHTLOOP_TILE_ALL 1
|
|
#define USE_FPTL_LIGHTLIST 1
|
|
|
|
|
|
//-------------------------------------------------------------------------------------
|
|
// Include
|
|
//-------------------------------------------------------------------------------------
|
|
|
|
#include "Common.hlsl"
|
|
|
|
// Note: We have fix as guidelines that we have only one deferred material (with control of GBuffer enabled). Mean a users that add a new
|
|
// deferred material must replace the old one here. If in the future we want to support multiple layout (cause a lot of consistency problem),
|
|
// the deferred shader will require to use multicompile.
|
|
#define UNITY_MATERIAL_LIT // Need to be define before including Material.hlsl
|
|
#include "Assets/ScriptableRenderLoop/HDRenderPipeline/ShaderConfig.cs.hlsl"
|
|
#include "Assets/ScriptableRenderLoop/HDRenderPipeline/ShaderVariables.hlsl"
|
|
#include "Assets/ScriptableRenderLoop/HDRenderPipeline/Lighting/Lighting.hlsl" // This include Material.hlsl
|
|
|
|
//-------------------------------------------------------------------------------------
|
|
// variable declaration
|
|
//-------------------------------------------------------------------------------------
|
|
|
|
DECLARE_GBUFFER_TEXTURE(_GBufferTexture);
|
|
|
|
TEXTURE2D(_CameraDepthTexture);
|
|
SAMPLER2D(sampler_CameraDepthTexture);
|
|
|
|
RWTexture2D<float4> uavOutput;
|
|
|
|
[numthreads(TILE_SIZE, TILE_SIZE, 1)]
|
|
void SHADE_OPAQUE_ENTRY(uint2 dispatchThreadId : SV_DispatchThreadID, uint2 groupId : SV_GroupID)
|
|
{
|
|
// input.positionCS is SV_Position
|
|
uint2 pixelCoord = dispatchThreadId;
|
|
PositionInputs posInput = GetPositionInput(pixelCoord.xy, _ScreenSize.zw);
|
|
float depth = LOAD_TEXTURE2D(_CameraDepthTexture, posInput.unPositionSS).x;
|
|
UpdatePositionInput(depth, _InvViewProjMatrix, _ViewProjMatrix, posInput);
|
|
float3 V = GetWorldSpaceNormalizeViewDir(posInput.positionWS);
|
|
|
|
FETCH_GBUFFER(gbuffer, _GBufferTexture, posInput.unPositionSS);
|
|
BSDFData bsdfData;
|
|
float3 bakeDiffuseLighting;
|
|
DECODE_FROM_GBUFFER(gbuffer, bsdfData, bakeDiffuseLighting);
|
|
|
|
PreLightData preLightData = GetPreLightData(V, posInput, bsdfData);
|
|
|
|
float3 diffuseLighting;
|
|
float3 specularLighting;
|
|
LightLoop(V, posInput, preLightData, bsdfData, bakeDiffuseLighting, diffuseLighting, specularLighting);
|
|
|
|
uavOutput[pixelCoord] = float4(diffuseLighting + specularLighting, 1.0);
|
|
}
|
|
|