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