1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #ifndef SCENEPLUGIN_INTF_POSTPROCESS_H
16 #define SCENEPLUGIN_INTF_POSTPROCESS_H
17 
18 #include <scene_plugin/interface/intf_node.h>
19 #include <scene_plugin/interface/intf_bitmap.h>
20 
21 #include <base/containers/vector.h>
22 
23 #include <meta/api/animation/animation.h>
24 #include <meta/base/types.h>
25 #include <meta/interface/intf_container.h>
26 
27 SCENE_BEGIN_NAMESPACE()
28 
29 enum class SharpnessType : uint32_t {
30     /** Produces soft effect */
31     SOFT = 0,
32     /** Produces normal effect */
33     MEDIUM = 1,
34     /** Produces sharp effect */
35     SHARP = 2
36 };
37 
38 enum QualityType : uint32_t {
39     /** Low quality */
40     LOW = 0,
41     /** Normal quality */
42     NORMAL = 1,
43     /** High quality */
44     HIGH = 2,
45 };
46 
47 SCENE_END_NAMESPACE()
48 
49 META_TYPE(SCENE_NS::SharpnessType);
50 META_TYPE(SCENE_NS::QualityType);
51 
52 SCENE_BEGIN_NAMESPACE()
53 
54 REGISTER_INTERFACE(IPostProcessEffect, "6655ac7d-9c42-48fb-ac54-5bff1f049077")
55 class IPostProcessEffect : public META_NS::INamed {
56     META_INTERFACE(META_NS::INamed, IPostProcessEffect, InterfaceId::IPostProcessEffect)
57 public:
58     /**
59      * @brief Sets whether the effect is enabled or disabled.
60      * @return True if effect is enabled, otherwise false.
61      */
62     META_PROPERTY(bool, Enabled);
63 };
64 
65 REGISTER_INTERFACE(ITonemap, "6942c567-3cbd-47c7-8380-c516f529f6ef")
66 class ITonemap : public IPostProcessEffect {
67     META_INTERFACE(IPostProcessEffect, ITonemap, InterfaceId::ITonemap)
68 public:
69     enum TonemapType : uint32_t {
70         /** Aces */
71         ACES = 0,
72         /** Aces 2020 */
73         ACES_2020 = 1,
74         /** Filmic */
75         FILMIC = 2,
76     };
77 
78     /**
79      * @brief Camera postprocessing settings, tonemap type
80      * @return
81      */
82     META_PROPERTY(TonemapType, Type)
83 
84     /**
85      * @brief Camera postprocessing settings, tonemap exposure
86      * @return
87      */
88     META_PROPERTY(float, Exposure)
89 };
90 
91 SCENE_END_NAMESPACE()
92 
93 META_TYPE(SCENE_NS::ITonemap::TonemapType)
94 META_TYPE(SCENE_NS::ITonemap::WeakPtr);
95 META_TYPE(SCENE_NS::ITonemap::Ptr);
96 
97 SCENE_BEGIN_NAMESPACE()
98 
99 REGISTER_INTERFACE(IBloom, "77f38aa6-300c-496f-9401-97b483be5d16")
100 class IBloom : public IPostProcessEffect {
101     META_INTERFACE(IPostProcessEffect, IBloom, InterfaceId::IBloom)
102 public:
103 
104     /** Bloom type enum */
105     enum BloomType : uint32_t {
106         /** Normal, smooth to every direction */
107         NORMAL = 0,
108         /** Blurred/Blooms more in horizontal direction */
109         HORIZONTAL = 1,
110         /** Blurred/Blooms more in vertical direction */
111         VERTICAL = 2,
112         /** Bilateral filter, uses depth if available */
113         BILATERAL = 3,
114     };
115 
116     /**
117      * @brief Camera postprocessing settings, bloom type
118      * @return
119      */
120     META_PROPERTY(BloomType, Type)
121     /**
122      * @brief Camera postprocessing settings, bloom quality type
123      * @return
124      */
125     META_PROPERTY(QualityType, Quality)
126     /**
127      * @brief Camera postprocessing settings, bloom threshold hard
128      * @return
129      */
130     META_PROPERTY(float, ThresholdHard)
131     /**
132      * @brief Camera postprocessing settings, bloom threshold soft
133      * @return
134      */
135     META_PROPERTY(float, ThresholdSoft)
136     /**
137      * @brief Camera postprocessing settings, bloom amount coefficient
138      * @return
139      */
140     META_PROPERTY(float, AmountCoefficient)
141     /**
142      * @brief Camera postprocessing settings
143      * @return
144      */
145     META_PROPERTY(float, DirtMaskCoefficient)
146     /**
147      * @brief Camera postprocessing settings
148      * @return
149      */
150     META_PROPERTY(IBitmap::Ptr, DirtMaskImage)
151     /**
152      * @brief Camera postprocessing settings
153      * @return
154      */
155     META_PROPERTY(bool, UseCompute)
156     /**
157      * @brief Camera postprocessing settings
158      * @return
159      */
160 };
161 
162 SCENE_END_NAMESPACE()
163 
164 META_TYPE(SCENE_NS::IBloom::BloomType)
165 META_TYPE(SCENE_NS::IBloom::WeakPtr);
166 META_TYPE(SCENE_NS::IBloom::Ptr);
167 
168 SCENE_BEGIN_NAMESPACE()
169 
170 REGISTER_INTERFACE(IVignette, "bf3a09bd-cc53-48c7-8e5d-0a6e7bf327fd")
171 class IVignette : public IPostProcessEffect {
172     META_INTERFACE(IPostProcessEffect, IVignette, InterfaceId::IVignette)
173 public:
174     /**
175      * @brief Camera postprocessing settings, vignette coefficient
176      * @return
177      */
178     META_PROPERTY(float, Coefficient)
179     /**
180      * @brief Camera postprocessing settings, vignette power
181      * @return
182      */
183     META_PROPERTY(float, Power)
184 };
185 
186 SCENE_END_NAMESPACE()
187 
188 META_TYPE(SCENE_NS::IVignette::WeakPtr);
189 META_TYPE(SCENE_NS::IVignette::Ptr);
190 
191 SCENE_BEGIN_NAMESPACE()
192 
193 REGISTER_INTERFACE(IColorFringe, "8b95f17a-6c31-4fc5-b63e-f0034c1ecc7e")
194 class IColorFringe : public IPostProcessEffect {
195     META_INTERFACE(IPostProcessEffect, IColorFringe, InterfaceId::IColorFringe)
196 public:
197     /**
198      * @brief Camera postprocessing settings, ColorFringe Coefficient
199      * @return
200      */
201     META_PROPERTY(float, Coefficient)
202     /**
203      * @brief Camera postprocessing settings, ColorFringe DistanceCoefficient
204      * @return
205      */
206     META_PROPERTY(float, DistanceCoefficient)
207 };
208 
209 SCENE_END_NAMESPACE()
210 
211 META_TYPE(SCENE_NS::IColorFringe::WeakPtr);
212 META_TYPE(SCENE_NS::IColorFringe::Ptr);
213 
214 SCENE_BEGIN_NAMESPACE()
215 
216 REGISTER_INTERFACE(IDither, "93a5ff50-ab54-49f8-9f80-623918f7ec0a")
217 class IDither : public IPostProcessEffect {
218     META_INTERFACE(IPostProcessEffect, IDither, InterfaceId::IDither)
219 public:
220     /** Dither type enum */
221     enum DitherType : uint32_t {
222         /** Interleaved noise */
223         INTERLEAVED_NOISE = 0,
224         /** Interleaved noise */
225         TRIANGLE_NOISE = 0,
226         /** Interleaved noise */
227         TRIANGLE_NOISE_RGB = 0,
228     };
229 
230     /**
231      * @brief Camera postprocessing settings, Dither type
232      * @return
233      */
234     META_PROPERTY(DitherType, Type)
235     /**
236      * @brief Camera postprocessing settings, Dither coefficient
237      * @return
238      */
239     META_PROPERTY(float, Coefficient)
240 };
241 
242 SCENE_END_NAMESPACE()
243 
244 META_TYPE(SCENE_NS::IDither::DitherType);
245 META_TYPE(SCENE_NS::IDither::WeakPtr);
246 META_TYPE(SCENE_NS::IDither::Ptr);
247 
248 SCENE_BEGIN_NAMESPACE()
249 
250 REGISTER_INTERFACE(IBlur, "282c0b68-ce16-4e66-9ec1-02fd935a4c4d")
251 class IBlur : public IPostProcessEffect {
252     META_INTERFACE(IPostProcessEffect, IBlur, InterfaceId::IBlur)
253 public:
254     /** Blur type enum */
255     enum BlurType : uint32_t {
256         /** Normal, smooth to every direction */
257         NORMAL = 0,
258         /** Blurred more in horizontal direction */
259         HORIZONTAL = 1,
260         /** Blurred more in vertical direction */
261         VERTICAL = 2,
262     };
263 
264     /**
265      * @brief Camera postprocessing settings, Blur type
266      * @return
267      */
268     META_PROPERTY(BlurType, Type)
269     /**
270      * @brief Camera postprocessing settings, Blur quality type
271      * @return
272      */
273     META_PROPERTY(QualityType, Quality)
274     /**
275      * @brief Camera postprocessing settings, Blur fliter size
276      * @return
277      */
278     META_PROPERTY(float, FilterSize)
279     /**
280      * @brief Camera postprocessing settings, Blur maximum mipmap level
281      * @return
282      */
283     META_PROPERTY(uint32_t, MaxMipmapLevel)
284 };
285 
286 SCENE_END_NAMESPACE()
287 
288 META_TYPE(SCENE_NS::IBlur::BlurType);
289 META_TYPE(SCENE_NS::IBlur::WeakPtr);
290 META_TYPE(SCENE_NS::IBlur::Ptr);
291 
292 SCENE_BEGIN_NAMESPACE()
293 
294 REGISTER_INTERFACE(IColorConversion, "ef36e89e-2379-4297-9cac-10943f1c605c")
295 class IColorConversion : public IPostProcessEffect {
296     META_INTERFACE(IPostProcessEffect, IColorConversion, InterfaceId::IColorConversion)
297 public:
298     /** Tonemap type */
299     enum ConversionFunctionType : uint32_t {
300         /** Linear -> no conversion in normal situation. */
301         LINEAR = 0,
302         /** Linear to sRGB conversion */
303         LINEAR_TO_SRGB = 1,
304     };
305 
306     /**
307      * @brief Camera postprocessing settings, Blur color conversion function
308      * @return
309      */
310     META_PROPERTY(ConversionFunctionType, Function)
311 };
312 
313 SCENE_END_NAMESPACE()
314 META_TYPE(SCENE_NS::IColorConversion::ConversionFunctionType);
315 META_TYPE(SCENE_NS::IColorConversion::WeakPtr);
316 META_TYPE(SCENE_NS::IColorConversion::Ptr);
317 
318 SCENE_BEGIN_NAMESPACE()
319 
320 REGISTER_INTERFACE(IFxaa, "9a270f3f-f3d6-4bb2-b005-9ee33c74a726")
321 class IFxaa : public IPostProcessEffect {
322     META_INTERFACE(IPostProcessEffect, IFxaa, InterfaceId::IFxaa)
323 public:
324     /**
325      * @brief Camera postprocessing settings, FXAA Quality type
326      * @return
327      */
328     META_PROPERTY(QualityType, Quality)
329     /**
330      * @brief Camera postprocessing settings, FXAA Sharpness type
331      * @return
332      */
333     META_PROPERTY(SharpnessType, Sharpness)
334 };
335 
336 SCENE_END_NAMESPACE()
337 
338 META_TYPE(SCENE_NS::IFxaa::WeakPtr);
339 META_TYPE(SCENE_NS::IFxaa::Ptr);
340 
341 SCENE_BEGIN_NAMESPACE()
342 
343 REGISTER_INTERFACE(ITaa, "5265155f-d679-4478-923c-1af3503a1d2a")
344 class ITaa : public IPostProcessEffect {
345     META_INTERFACE(IPostProcessEffect, ITaa, InterfaceId::ITaa)
346 public:
347     /**
348      * @brief Camera postprocessing settings, FXAA Quality type
349      * @return
350      */
351     META_PROPERTY(QualityType, Quality)
352     /**
353      * @brief Camera postprocessing settings, FXAA Sharpness type
354      * @return
355      */
356     META_PROPERTY(SharpnessType, Sharpness)
357 };
358 
359 SCENE_END_NAMESPACE()
360 
361 META_TYPE(SCENE_NS::ITaa::WeakPtr);
362 META_TYPE(SCENE_NS::ITaa::Ptr);
363 
364 SCENE_BEGIN_NAMESPACE()
365 
366 REGISTER_INTERFACE(IDepthOfField, "c578779f-7f70-466b-8a61-92d90cb284e5")
367 class IDepthOfField : public IPostProcessEffect {
368     META_INTERFACE(IPostProcessEffect, IDepthOfField, InterfaceId::IDepthOfField)
369 public:
370     /**
371      * @brief Camera postprocessing settings
372      * @return
373      */
374     META_PROPERTY(float, FocusPoint)
375     /**
376      * @brief Camera postprocessing settings
377      * @return
378      */
379     META_PROPERTY(float, FocusRange)
380     /**
381      * @brief Camera postprocessing settings
382      * @return
383      */
384     META_PROPERTY(float, NearTransitionRange)
385     /**
386      * @brief Camera postprocessing settings
387      * @return
388      */
389     META_PROPERTY(float, FarTransitionRange)
390     /**
391      * @brief Camera postprocessing settings
392      * @return
393      */
394     META_PROPERTY(float, NearBlur)
395     /**
396      * @brief Camera postprocessing settings
397      * @return
398      */
399     META_PROPERTY(float, FarBlur)
400     /**
401      * @brief Camera postprocessing settings
402      * @return
403      */
404     META_PROPERTY(float, NearPlane)
405     /**
406      * @brief Camera postprocessing settings
407      * @return
408      */
409     META_PROPERTY(float, FarPlane)
410 };
411 
412 SCENE_END_NAMESPACE()
413 
414 META_TYPE(SCENE_NS::IDepthOfField::WeakPtr);
415 META_TYPE(SCENE_NS::IDepthOfField::Ptr);
416 
417 SCENE_BEGIN_NAMESPACE()
418 
419 REGISTER_INTERFACE(IMotionBlur, "6fbeb47d-6a33-47d5-945e-9bc8088b321c")
420 class IMotionBlur : public IPostProcessEffect {
421     META_INTERFACE(IPostProcessEffect, IMotionBlur, InterfaceId::IMotionBlur)
422 public:
423     /**
424      * @brief Camera postprocessing settings
425      * @return
426      */
427     META_PROPERTY(float, Alpha)
428     /**
429      * @brief Camera postprocessing settings
430      * @return
431      */
432     META_PROPERTY(float, Velocity)
433     /**
434      * @brief Camera postprocessing settings
435      * @return
436      */
437     META_PROPERTY(QualityType, Quality)
438     /**
439      * @brief Camera postprocessing settings
440      * @return
441      */
442     META_PROPERTY(SharpnessType, Sharpness)
443 };
444 
445 SCENE_END_NAMESPACE()
446 
447 META_TYPE(SCENE_NS::IMotionBlur::WeakPtr);
448 META_TYPE(SCENE_NS::IMotionBlur::Ptr);
449 
450 SCENE_BEGIN_NAMESPACE()
451 
452 // Implemented by SCENE_NS::ClassId::PostProcess
453 REGISTER_INTERFACE(IPostProcess, "e3f3a72e-dca8-40f3-8cae-feba8dc235ba")
454 class IPostProcess : public META_NS::INamed {
455     META_INTERFACE(META_NS::INamed, IPostProcess, InterfaceId::IPostProcess)
456 public:
457     /**
458      * @brief Camera postprocessing settings, tonemap
459      * @return
460      */
461     META_PROPERTY(ITonemap::Ptr, Tonemap)
462     /**
463      * @brief Camera postprocessing settings, bloom
464      * @return
465      */
466     META_PROPERTY(IBloom::Ptr, Bloom)
467     /**
468      * @brief Camera postprocessing settings, vignette
469      * @return
470      */
471     META_PROPERTY(IVignette::Ptr, Vignette)
472     /**
473      * @brief Camera postprocessing settings, color fringe
474      * @return
475      */
476     META_PROPERTY(IColorFringe::Ptr, ColorFringe)
477     /**
478      * @brief Camera postprocessing settings, dither
479      * @return
480      */
481     META_PROPERTY(IDither::Ptr, Dither)
482     /**
483      * @brief Camera postprocessing settings, blur
484      * @return
485      */
486     META_PROPERTY(IBlur::Ptr, Blur)
487     /**
488      * @brief Camera postprocessing settings
489      * @return
490      */
491     META_PROPERTY(IColorConversion::Ptr, ColorConversion)
492     /**
493      * @brief Camera postprocessing settings
494      * @return
495      */
496     META_PROPERTY(IFxaa::Ptr, Fxaa)
497     /**
498      * @brief Camera postprocessing settings
499      * @return
500      */
501     META_PROPERTY(ITaa::Ptr, Taa)
502     /**
503      * @brief Camera postprocessing settings
504      * @return
505      */
506     META_PROPERTY(IDepthOfField::Ptr, DepthOfField)
507     /**
508      * @brief Camera postprocessing settings
509      * @return
510      */
511     META_PROPERTY(IMotionBlur::Ptr, MotionBlur)
512 };
513 
514 SCENE_END_NAMESPACE()
515 
516 META_TYPE(SCENE_NS::IPostProcess::WeakPtr);
517 META_TYPE(SCENE_NS::IPostProcess::Ptr);
518 
519 #endif // SCENEPLUGIN_INTF_POSTPROCESS_H
520