源战役客户端
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

69 rader
1.8 KiB

1 månad sedan
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. [RequireComponent(typeof(Camera))]
  5. public class RadiusBlur : MonoBehaviour
  6. {
  7. static int radius_blur_dataId = Shader.PropertyToID("_RadiusData") ;
  8. static int radius_blur_iterationId = Shader.PropertyToID("_RadiusIterationData") ;
  9. [SerializeField]
  10. public Material radius_material;
  11. [SerializeField]
  12. public int iteration{
  13. get{
  14. if(radius_material != null)
  15. {
  16. return (int)radius_material.GetVector(radius_blur_iterationId).x;
  17. }
  18. return 1;
  19. }
  20. set{
  21. if(radius_material != null)
  22. {
  23. float invIteration = 1.0f / value;
  24. radius_material.SetVector(radius_blur_iterationId, new Vector2(value, invIteration));
  25. }
  26. }
  27. }
  28. [SerializeField]
  29. public Vector3 radius_data{
  30. get{
  31. if(radius_material != null)
  32. {
  33. return radius_material.GetVector(radius_blur_dataId);
  34. }
  35. return new Vector3(0.5f, 0.5f, 0.01f);
  36. }
  37. set{
  38. if(radius_material != null)
  39. {
  40. radius_material.SetVector(radius_blur_dataId, value);
  41. }
  42. }
  43. }
  44. static int RADIUS_BLUR_PASS = 0;
  45. private void Awake() {
  46. if(radius_material != null)
  47. {
  48. radius_data = radius_material.GetVector(radius_blur_dataId);
  49. iteration = (int)radius_material.GetVector(radius_blur_iterationId).x;
  50. }
  51. }
  52. private void OnRenderImage(RenderTexture src, RenderTexture dest) {
  53. if(radius_material)
  54. {
  55. Graphics.Blit(src, dest, radius_material, RADIUS_BLUR_PASS);
  56. }
  57. else
  58. {
  59. Graphics.Blit(src, dest);
  60. }
  61. }
  62. }