浏览代码

Mesh decals working

/main
Paul Melamed 6 年前
当前提交
ee12a498
共有 2 个文件被更改,包括 11 次插入6 次删除
  1. 15
      com.unity.render-pipelines.high-definition/HDRP/Material/Decal/DecalData.hlsl
  2. 2
      com.unity.render-pipelines.high-definition/HDRP/ShaderPass/ShaderPassDBuffer.hlsl

15
com.unity.render-pipelines.high-definition/HDRP/Material/Decal/DecalData.hlsl


//-------------------------------------------------------------------------------------
#include "CoreRP/ShaderLibrary/Packing.hlsl"
#include "CoreRP/ShaderLibrary/Sampling/SampleUVMapping.hlsl"
#include "CoreRP/ShaderLibrary/EntityLighting.hlsl"
#include "../MaterialUtilities.hlsl"
#if (SHADERPASS == SHADERPASS_DBUFFER)
void GetSurfaceData(float2 texCoordDS, float4x4 normalToWorld, out DecalSurfaceData surfaceData)

}
#endif
#if (SHADERPASS == SHADERPASS_MESHDECALS)
void GetSurfaceData(float2 texCoordDS, out DecalSurfaceData surfaceData)
void GetSurfaceData(FragInputs input, out DecalSurfaceData surfaceData)
float totalBlend = 1.0f;
float totalBlend = _DecalBlend;
surfaceData.baseColor = SAMPLE_TEXTURE2D(_BaseColorMap, sampler_BaseColorMap, texCoordDS.xy);
surfaceData.baseColor = SAMPLE_TEXTURE2D(_BaseColorMap, sampler_BaseColorMap, input.texCoord0);
surfaceData.normalWS.xyz = UnpackNormalmapRGorAG(SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, texCoordDS)) * 0.5f + 0.5f;
float3 normalTS = UnpackNormalmapRGorAG(SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, input.texCoord0));
float3 normalWS;
GetNormalWS(input, 0, normalTS, normalWS);
surfaceData.normalWS.xyz = normalWS * 0.5f + 0.5f;
surfaceData.mask = SAMPLE_TEXTURE2D(_MaskMap, sampler_MaskMap, texCoordDS.xy);
surfaceData.mask = SAMPLE_TEXTURE2D(_MaskMap, sampler_MaskMap, input.texCoord0);
surfaceData.mask.z = surfaceData.mask.w;
surfaceData.mask.w = totalBlend;
surfaceData.HTileMask |= DBUFFERHTILEBIT_MASK;

2
com.unity.render-pipelines.high-definition/HDRP/ShaderPass/ShaderPassDBuffer.hlsl


}
#endif
#if (SHADERPASS == SHADERPASS_MESHDECALS)
GetSurfaceData(input.texCoord0, surfaceData);
GetSurfaceData(input, surfaceData);
uint oldVal = UnpackByte(_DecalHTile[input.positionSS.xy / 8]);
oldVal |= surfaceData.HTileMask;
_DecalHTile[input.positionSS.xy / 8] = PackByte(oldVal);

正在加载...
取消
保存