浏览代码

Filling out HTile mask in DBuffer, fix for material foldout update on decal material change

/main
Paul Melamed 7 年前
当前提交
8c9541db
共有 6 个文件被更改,包括 47 次插入6 次删除
  1. 6
      ScriptableRenderPipeline/Core/CoreRP/CoreUtils.cs
  2. 11
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Decal/DecalProjectorComponent.cs
  3. 15
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/Material/Decal/DecalProjectorComponentEditor.cs
  4. 2
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/HDRenderPipeline.cs
  5. 2
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Material/SubsurfaceScattering/SubsurfaceScatteringManager.cs
  6. 17
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/ShaderPass/ShaderPassDBuffer.hlsl

6
ScriptableRenderPipeline/Core/CoreRP/CoreUtils.cs


return mesh;
}
public static void ResizeHTile(RenderTexture hTile, ref RenderTargetIdentifier hTileRT, RenderTextureDescriptor desc)
public static void ResizeHTile(ref RenderTexture hTile, ref RenderTargetIdentifier hTileRT, RenderTextureDescriptor desc)
hTile = CreateRenderTexture(desc, 0, RenderTextureFormat.R8, RenderTextureReadWrite.Linear); // DXGI_FORMAT_R8_UINT is not supported by Unity
hTile = CreateRenderTexture(desc, 0, RenderTextureFormat.R8, RenderTextureReadWrite.Linear); // DXGI_FORMAT_R8_UINT is not supported by Unity
hTileRT = new RenderTargetIdentifier(hTile);
hTileRT = new RenderTargetIdentifier(hTile);
}
}
}

11
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Decal/DecalProjectorComponent.cs


DecalSystem.instance.RemoveDecal(this);
}
// Declare the method signature of the delegate to call.
public delegate void OnMaterialChangeDelegate();
// Declare the event to which editor code will hook itself.
public event OnMaterialChangeDelegate OnMaterialChange;
public void OnValidate()
{
// handle material changes

m_Material = tempMaterial;
DecalSystem.instance.AddDecal(this);
m_OldMaterial = m_Material;
if (OnMaterialChange != null)
{
OnMaterialChange();
}
}
if (m_Material != null)

15
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/Material/Decal/DecalProjectorComponentEditor.cs


// Create an instance of the MaterialEditor
m_DecalProjectorComponent = (DecalProjectorComponent)target;
m_MaterialEditor = (MaterialEditor)CreateEditor(m_DecalProjectorComponent.Mat);
m_DecalProjectorComponent.OnMaterialChange += new DecalProjectorComponent.OnMaterialChangeDelegate(this.OnMaterialChange);
private void OnDisable()
{
m_DecalProjectorComponent.OnMaterialChange -= new DecalProjectorComponent.OnMaterialChangeDelegate(this.OnMaterialChange);
}
public void OnMaterialChange()
{
if (m_MaterialEditor != null)
{
// Draw the material's foldout and the material shader field
m_MaterialEditor = (MaterialEditor)CreateEditor(m_DecalProjectorComponent.Mat);
}
}
public override void OnInspectorGUI()
{

2
ScriptableRenderPipeline/HDRenderPipeline/HDRP/HDRenderPipeline.cs


public void Resize(HDCamera camera)
{
CoreUtils.ResizeHTile(m_HTile, ref m_HTileRT, camera.renderTextureDesc);
CoreUtils.ResizeHTile(ref m_HTile, ref m_HTileRT, camera.renderTextureDesc);
}
}

2
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Material/SubsurfaceScattering/SubsurfaceScatteringManager.cs


public void Resize(HDCamera hdCamera)
{
CoreUtils.ResizeHTile(m_HTile, ref m_HTileRT, hdCamera.renderTextureDesc);
CoreUtils.ResizeHTile(ref m_HTile, ref m_HTileRT, hdCamera.renderTextureDesc);
}
public void PushGlobalParams(CommandBuffer cmd, DiffusionProfileSettings sssParameters, FrameSettings frameSettings)

17
ScriptableRenderPipeline/HDRenderPipeline/HDRP/ShaderPass/ShaderPassDBuffer.hlsl


DecalSurfaceData surfaceData;
float3x3 decalToWorld = (float3x3)UNITY_ACCESS_INSTANCED_PROP(matrix, normalToWorld);
GetSurfaceData(positionDS.xz, decalToWorld, surfaceData);
_DecalHTile[posInput.positionSS / 8] = 1.0f;
if((all(positionDS.xyz > 0.0f) && all(1.0f - positionDS.xyz > 0.0f)))
{
uint mask = 0;
#if _COLORMAP
mask = 1;
#endif
#if _NORMALMAP
mask |= 2;
#endif
#if _MASKMAP
mask |= 4;
#endif
uint oldVal = UnpackByte(_DecalHTile[posInput.positionSS.xy / 8]);
oldVal |= mask;
_DecalHTile[posInput.positionSS.xy / 8] = PackByte(oldVal);
}
ENCODE_INTO_DBUFFER(surfaceData, outDBuffer);
}
正在加载...
取消
保存