您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
71 行
2.0 KiB
71 行
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
|
|
));
|
|
}
|
|
}
|
|
}
|