Import L1 (celery) as l1/
This commit is contained in:
34
l1/sexp_effects/effects/xector_grain.sexp
Normal file
34
l1/sexp_effects/effects/xector_grain.sexp
Normal file
@@ -0,0 +1,34 @@
|
||||
;; Film grain effect using xector operations
|
||||
;; Demonstrates random xectors and mixing scalar/xector math
|
||||
|
||||
(require-primitives "xector")
|
||||
|
||||
(define-effect xector_grain
|
||||
:params (
|
||||
(intensity :type float :default 0.2 :range [0 1] :desc "Grain intensity")
|
||||
(colored :type bool :default false :desc "Use colored grain")
|
||||
)
|
||||
(let* (
|
||||
;; Extract channels
|
||||
(r (red frame))
|
||||
(g (green frame))
|
||||
(b (blue frame))
|
||||
|
||||
;; Generate noise xector(s)
|
||||
;; randn-x generates normal distribution noise
|
||||
(grain-amount (* intensity 50)))
|
||||
|
||||
(if colored
|
||||
;; Colored grain: different noise per channel
|
||||
(let* ((nr (randn-x frame 0 grain-amount))
|
||||
(ng (randn-x frame 0 grain-amount))
|
||||
(nb (randn-x frame 0 grain-amount)))
|
||||
(rgb (αclamp (α+ r nr) 0 255)
|
||||
(αclamp (α+ g ng) 0 255)
|
||||
(αclamp (α+ b nb) 0 255)))
|
||||
|
||||
;; Monochrome grain: same noise for all channels
|
||||
(let ((n (randn-x frame 0 grain-amount)))
|
||||
(rgb (αclamp (α+ r n) 0 255)
|
||||
(αclamp (α+ g n) 0 255)
|
||||
(αclamp (α+ b n) 0 255))))))
|
||||
Reference in New Issue
Block a user