You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.0 KiB
71 lines
2.0 KiB
namespace UnityEngine.PostProcessing |
|
{ |
|
public sealed class DitheringComponent : PostProcessingComponentRenderTexture<DitheringModel> |
|
{ |
|
static class Uniforms |
|
{ |
|
internal static readonly int _DitheringTex = Shader.PropertyToID("_DitheringTex"); |
|
internal static readonly int _DitheringCoords = Shader.PropertyToID("_DitheringCoords"); |
|
} |
|
|
|
public override bool active |
|
{ |
|
get |
|
{ |
|
return model.enabled |
|
&& !context.interrupted; |
|
} |
|
} |
|
|
|
// Holds 64 64x64 Alpha8 textures (256kb total) |
|
Texture2D[] noiseTextures; |
|
int textureIndex = 0; |
|
|
|
const int k_TextureCount = 64; |
|
|
|
public override void OnDisable() |
|
{ |
|
noiseTextures = null; |
|
} |
|
|
|
void LoadNoiseTextures() |
|
{ |
|
noiseTextures = new Texture2D[k_TextureCount]; |
|
|
|
for (int i = 0; i < k_TextureCount; i++) |
|
noiseTextures[i] = Resources.Load<Texture2D>("Bluenoise64/LDR_LLL1_" + i); |
|
} |
|
|
|
public override void Prepare(Material uberMaterial) |
|
{ |
|
float rndOffsetX; |
|
float rndOffsetY; |
|
|
|
#if POSTFX_DEBUG_STATIC_DITHERING |
|
textureIndex = 0; |
|
rndOffsetX = 0f; |
|
rndOffsetY = 0f; |
|
#else |
|
if (++textureIndex >= k_TextureCount) |
|
textureIndex = 0; |
|
|
|
rndOffsetX = Random.value; |
|
rndOffsetY = Random.value; |
|
#endif |
|
|
|
if (noiseTextures == null) |
|
LoadNoiseTextures(); |
|
|
|
var noiseTex = noiseTextures[textureIndex]; |
|
|
|
uberMaterial.EnableKeyword("DITHERING"); |
|
uberMaterial.SetTexture(Uniforms._DitheringTex, noiseTex); |
|
uberMaterial.SetVector(Uniforms._DitheringCoords, new Vector4( |
|
(float)context.width / (float)noiseTex.width, |
|
(float)context.height / (float)noiseTex.height, |
|
rndOffsetX, |
|
rndOffsetY |
|
)); |
|
} |
|
} |
|
}
|
|
|