12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- using System;
- using System.Runtime.InteropServices;
-
- #if UNITY_EDITOR
- using UnityEditor;
- #endif
-
- namespace UnityEngine.Rendering.Sampling
- {
-
- internal class SamplingResources : IDisposable
- {
- internal enum ResourceType
- {
- BlueNoiseTextures = 1,
- SobolMatrices = 2,
- All = BlueNoiseTextures | SobolMatrices
- };
-
- private Texture2D m_SobolScramblingTile;
- private Texture2D m_SobolRankingTile;
- private Texture2D m_SobolOwenScrambled256Samples;
- private GraphicsBuffer m_SobolBuffer;
-
- static public uint[] sobolMatrices = SobolData.SobolMatrices;
-
- #if UNITY_EDITOR
- public void Load(uint resourceBitmask = (uint)ResourceType.BlueNoiseTextures)
- {
- if ((resourceBitmask & (uint)ResourceType.BlueNoiseTextures) != 0)
- {
- const string path = "Packages/com.unity.rendering.light-transport/Runtime/";
-
- m_SobolScramblingTile = AssetDatabase.LoadAssetAtPath<Texture2D>(path + "Sampling/Textures/SobolBlueNoise/ScramblingTile256SPP.png");
- m_SobolRankingTile = AssetDatabase.LoadAssetAtPath<Texture2D>(path + "Sampling/Textures/SobolBlueNoise/RankingTile256SPP.png");
- m_SobolOwenScrambled256Samples = AssetDatabase.LoadAssetAtPath<Texture2D>(path + "Sampling/Textures/SobolBlueNoise/SobolOwenScrambled256.png");
- }
-
- if ((resourceBitmask & (uint)ResourceType.SobolMatrices) != 0)
- {
- int sobolBufferSize = (int)(SobolData.SobolDims * SobolData.SobolSize);
- m_SobolBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, sobolBufferSize, Marshal.SizeOf<uint>());
- m_SobolBuffer.SetData(SobolData.SobolMatrices);
- }
- }
- #endif
-
- public static void BindSobolBlueNoiseTextures(CommandBuffer cmd, SamplingResources resources)
- {
- if (resources.m_SobolScramblingTile != null)
- {
- cmd.SetGlobalTexture(Shader.PropertyToID("_SobolScramblingTile"), resources.m_SobolScramblingTile);
- cmd.SetGlobalTexture(Shader.PropertyToID("_SobolRankingTile"), resources.m_SobolRankingTile);
- cmd.SetGlobalTexture(Shader.PropertyToID("_SobolOwenScrambledSequence"), resources.m_SobolOwenScrambled256Samples);
- }
-
- if (resources.m_SobolBuffer != null)
- cmd.SetGlobalBuffer("_SobolMatricesBuffer", resources.m_SobolBuffer);
-
- }
-
- public void Dispose()
- {
- m_SobolBuffer?.Dispose();
- }
-
- }
- }
-
|