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 16 #ifndef API_3D_RENDER_DEFAULT_MATERIAL_CONSTANTS_H 17 #define API_3D_RENDER_DEFAULT_MATERIAL_CONSTANTS_H 18 19 #include <cstdint> 20 21 #include <3d/namespace.h> 22 #include <3d/shaders/common/3d_dm_structures_common.h> 23 24 CORE3D_BEGIN_NAMESPACE() 25 /** \addtogroup group_render_defaultmaterialconstants 26 * @{ 27 */ 28 /** Render node created resources will add the name of the render graph to the name presented here. 29 */ 30 /** Default material lighting constants 31 * Scene constants -> prefix with unique scene render data store name when using 32 * Default render data store for scene can be found: 33 * renderNodeGraphData.renderNodeGraphDataStoreName.empty() ? 34 "RenderDataStoreDefaultScene" : 35 renderNodeGraphData.renderNodeGraphDataStoreName; 36 */ 37 struct DefaultMaterialLightingConstants { 38 /** Max directional light count */ 39 static constexpr uint32_t MAX_LIGHT_COUNT { 64 }; 40 /** Max shadow count */ 41 static constexpr uint32_t MAX_SHADOW_COUNT { 8u }; 42 43 /** Light data buffer name. Default material pipelines uses per camera ligh buffers */ 44 static constexpr const BASE_NS::string_view LIGHT_DATA_BUFFER_NAME { "CORE3D_DM_LIGHT_DATA_BUFFER" }; 45 /** Light cluster data buffer name. Default material pipelines uses per camera ligh buffers */ 46 static constexpr const BASE_NS::string_view LIGHT_CLUSTER_DATA_BUFFER_NAME { 47 "CORE3D_DM_LIGHT_CLUSTER_DATA_BUFFER" 48 }; 49 50 /** Shadow atlas depth buffer name */ 51 static constexpr const BASE_NS::string_view SHADOW_DEPTH_BUFFER_NAME { "CORE3D_DM_SHADOW_DEPTH_BUFFER" }; 52 /** VSM shadow atlas color buffer name (VSM) */ 53 static constexpr const BASE_NS::string_view SHADOW_VSM_COLOR_BUFFER_NAME { "CORE3D_DM_VSM_SHADOW_COLOR_BUFFER" }; 54 }; 55 56 /** Default material constants 57 * Scene constants -> prefix with unique scene render data store name when using 58 */ 59 struct DefaultMaterialMaterialConstants { 60 /** Material buffer name */ 61 static constexpr const BASE_NS::string_view MATERIAL_DATA_BUFFER_NAME { "CORE3D_DM_DATA_BUFFER" }; 62 /** Material transform buffer name */ 63 static constexpr const BASE_NS::string_view MATERIAL_TRANSFORM_DATA_BUFFER_NAME { 64 "CORE3D_DM_TRANSFORM_DATA_BUFFER" 65 }; 66 /** Material user data buffer name */ 67 static constexpr const BASE_NS::string_view MATERIAL_USER_DATA_BUFFER_NAME { "CORE3D_DM_USER_DATA_BUFFER" }; 68 /** Mesh buffer name */ 69 static constexpr const BASE_NS::string_view MESH_DATA_BUFFER_NAME { "CORE3D_DM_MESH_DATA_BUFFER" }; 70 /** Skin buffer name */ 71 static constexpr const BASE_NS::string_view SKIN_DATA_BUFFER_NAME { "CORE3D_DM_SKIN_DATA_BUFFER" }; 72 }; 73 74 /** Default material shader related constants. (Must be matched in relevant json and c-code files) */ 75 struct DefaultMaterialShaderConstants { 76 /** Default opaque render slots. Forward opaque. */ 77 static constexpr const BASE_NS::string_view RENDER_SLOT_FORWARD_OPAQUE { "CORE3D_RS_DM_FW_OPAQUE" }; 78 /** Default translucent render slot. Forward translucent. */ 79 static constexpr const BASE_NS::string_view RENDER_SLOT_FORWARD_TRANSLUCENT { "CORE3D_RS_DM_FW_TRANSLUCENT" }; 80 /** Default deferred opaque render slot */ 81 static constexpr const BASE_NS::string_view RENDER_SLOT_DEFERRED_OPAQUE { "CORE3D_RS_DM_DF_OPAQUE" }; 82 /** Default render slot for depth-only rendering. Handles PCF shadows and states */ 83 static constexpr const BASE_NS::string_view RENDER_SLOT_DEPTH { "CORE3D_RS_DM_DEPTH" }; 84 /** VSM shadow render slot with color buffer target. Handles VSM shadows and states */ 85 static constexpr const BASE_NS::string_view RENDER_SLOT_DEPTH_VSM { "CORE3D_RS_DM_DEPTH_VSM" }; 86 87 /** Default forward vertex input declaration */ 88 static constexpr const BASE_NS::string_view VERTEX_INPUT_DECLARATION_FORWARD { 89 "3dvertexinputdeclarations://core3d_dm_fw.shadervid" 90 }; 91 /** Default forward pipeline layout */ 92 static constexpr const BASE_NS::string_view PIPELINE_LAYOUT_FORWARD { "3dpipelinelayouts://core3d_dm_fw.shaderpl" }; 93 94 /** Default depth vertex input declaration */ 95 static constexpr const BASE_NS::string_view VERTEX_INPUT_DECLARATION_DEPTH { 96 "3dvertexinputdeclarations://core3d_dm_depth.shadervid" 97 }; 98 /** Default depth pipeline layout */ 99 static constexpr const BASE_NS::string_view PIPELINE_LAYOUT_DEPTH { 100 "3dpipelinelayouts://core3d_dm_depth.shaderpl" 101 }; 102 103 /** Default environment pipeline layout */ 104 static constexpr const BASE_NS::string_view PIPELINE_LAYOUT_ENV { "3dpipelinelayouts://core3d_dm_env.shaderpl" }; 105 106 /** Default material forward shader with automatic render slot and graphics state setup */ 107 static constexpr const BASE_NS::string_view OPAQUE_SHADER_NAME { "3dshaders://shader/core3d_dm_fw.shader" }; 108 /** Default material forward shader graphics state with automatic render slot and graphics state setup */ 109 static constexpr const BASE_NS::string_view SHADER_STATE_NAME { "3dshaderstates://core3d_dm.shadergs" }; 110 /** Default material depth shader */ 111 static constexpr const BASE_NS::string_view DEPTH_SHADER_NAME { "3dshaders://shader/core3d_dm_depth.shader" }; 112 /** Default material forward env shader */ 113 static constexpr const BASE_NS::string_view ENV_SHADER_NAME { 114 "3dshaders://shader/core3d_dm_fullscreen_env.shader" 115 }; 116 }; 117 118 /** Default camera constants 119 * Scene constants -> prefix with unique scene render data store name when using 120 */ 121 struct DefaultMaterialCameraConstants { 122 /** Max camera count. This includes scene and shadow cameras. */ 123 static constexpr const uint32_t MAX_CAMERA_COUNT { CORE_DEFAULT_MATERIAL_MAX_CAMERA_COUNT }; 124 /** Max environment count. */ 125 static constexpr const uint32_t MAX_ENVIRONMENT_COUNT { CORE_DEFAULT_MATERIAL_MAX_ENVIRONMENT_COUNT }; 126 127 /** Camera data buffer name (this is usable in the whole pipeline / scene) */ 128 static constexpr const BASE_NS::string_view CAMERA_DATA_BUFFER_NAME { "CORE3D_DM_CAM_DATA_BUF" }; 129 /** Camera prefix for per camera data buffers */ 130 static constexpr const BASE_NS::string_view CAMERA_GENERAL_BUFFER_PREFIX_NAME { "CORE3D_DM_CAM_GENERAL_BUF_" }; 131 /** Camera prefix for per camera data buffers */ 132 static constexpr const BASE_NS::string_view CAMERA_ENVIRONMENT_BUFFER_PREFIX_NAME { "CORE3D_DM_CAM_ENV_BUF_" }; 133 /** Camera prefix for per camera data buffers */ 134 static constexpr const BASE_NS::string_view CAMERA_FOG_BUFFER_PREFIX_NAME { "CORE3D_DM_CAM_FOG_BUF_" }; 135 /** Camera prefix for per camera data buffers */ 136 static constexpr const BASE_NS::string_view CAMERA_POST_PROCESS_BUFFER_PREFIX_NAME { 137 "CORE3D_DM_CAM_POST_PROCESS_BUF_" 138 }; 139 /** Camera prefix for per light buffers */ 140 static constexpr const BASE_NS::string_view CAMERA_LIGHT_BUFFER_PREFIX_NAME { "CORE3D_DM_CAM_LIGHT_BUF_" }; 141 /** Camera prefix for per light cluster buffers */ 142 static constexpr const BASE_NS::string_view CAMERA_LIGHT_CLUSTER_BUFFER_PREFIX_NAME { 143 "CORE3D_DM_CAM_LIGHT_CLUSTER_BUF_" 144 }; 145 146 /** Camera color buffer prefix (often combined with scene name + prefix name + to_hex(camera id)) 147 * For example: RenderDataStoreDefaultSceneCORE3D_CAMERA_DEPTH_40000000D 148 */ 149 static constexpr const BASE_NS::string_view CAMERA_COLOR_PREFIX_NAME { "CORE3D_CAMERA_COLOR_" }; 150 /** Camera depth buffer prefix (often combined with scene name + to_hex(camera id)) */ 151 static constexpr const BASE_NS::string_view CAMERA_DEPTH_PREFIX_NAME { "CORE3D_CAMERA_DEPTH_" }; 152 153 /** Default camera post process name (often combined with default name + post process id) */ 154 static constexpr const BASE_NS::string_view CAMERA_POST_PROCESS_PREFIX_NAME { "CORE3D_POST_PROCESS_CAM" }; 155 /** Default pre-pass camera post process name (often combined with default name + post process id) */ 156 static constexpr const BASE_NS::string_view CAMERA_PRE_PASS_POST_PROCESS_PREFIX_NAME { 157 "CORE3D_POST_PROCESS_PRE_PASS_CAM" 158 }; 159 /** Default reflection camera post process name (often combined with default name + post process id) */ 160 static constexpr const BASE_NS::string_view CAMERA_REFLECTION_POST_PROCESS_PREFIX_NAME { 161 "CORE3D_POST_PROCESS_REFLECTION_CAM" 162 }; 163 164 /** Default mip count for reflection plane */ 165 static constexpr const uint32_t REFLECTION_PLANE_MIP_COUNT { 6u }; 166 }; 167 168 /** Default material GPU resource constants */ 169 struct DefaultMaterialGpuResourceConstants { 170 /** Default material base color, white srgb */ 171 static constexpr const BASE_NS::string_view CORE_DEFAULT_MATERIAL_BASE_COLOR { "CORE_DEFAULT_GPU_IMAGE_WHITE" }; 172 /** Default material emissive, white srgb */ 173 static constexpr const BASE_NS::string_view CORE_DEFAULT_MATERIAL_EMISSIVE { "CORE_DEFAULT_GPU_IMAGE_WHITE" }; 174 /** Default material normal */ 175 static constexpr const BASE_NS::string_view CORE_DEFAULT_MATERIAL_NORMAL { "CORE3D_DM_NORMAL" }; 176 /** Default material material map, white linear */ 177 static constexpr const BASE_NS::string_view CORE_DEFAULT_MATERIAL_MATERIAL { "CORE_DEFAULT_GPU_IMAGE_WHITE" }; 178 /** Default material ambient occlusion, white */ 179 static constexpr const BASE_NS::string_view CORE_DEFAULT_MATERIAL_AO { "CORE3D_DM_AO" }; 180 181 /** Default material clearcoat intensity, white */ 182 static constexpr const BASE_NS::string_view CORE_DEFAULT_MATERIAL_CLEARCOAT { "CORE_DEFAULT_GPU_IMAGE_WHITE" }; 183 /** Default material clearcoat roughness, white */ 184 static constexpr const BASE_NS::string_view CORE_DEFAULT_MATERIAL_CLEARCOAT_ROUGHNESS { 185 "CORE_DEFAULT_GPU_IMAGE_WHITE" 186 }; 187 /** Default material clearcoat normal */ 188 static constexpr const BASE_NS::string_view CORE_DEFAULT_MATERIAL_CLEARCOAT_NORMAL { "CORE3D_DM_NORMAL" }; 189 190 /** Default material clearcoat intensity, white */ 191 static constexpr const BASE_NS::string_view CORE_DEFAULT_MATERIAL_SHEEN { "CORE_DEFAULT_GPU_IMAGE_WHITE" }; 192 193 /** Default material specular, white srgb */ 194 static constexpr const BASE_NS::string_view CORE_DEFAULT_MATERIAL_SPECULAR { "CORE_DEFAULT_GPU_IMAGE_WHITE" }; 195 196 /** Default material transmission, white */ 197 static constexpr const BASE_NS::string_view CORE_DEFAULT_MATERIAL_TRANSMISSION { "CORE3D_DM_AO" }; 198 199 /** Default material radiance cubemap */ 200 static constexpr const BASE_NS::string_view CORE_DEFAULT_RADIANCE_CUBEMAP { "CORE3D_DM_RADIANCE_CUBEMAP" }; 201 202 /** Default skybox */ 203 static constexpr const BASE_NS::string_view CORE_DEFAULT_SKYBOX_CUBEMAP { "CORE3D_DM_SKYBOX_CUBEMAP" }; 204 205 /** Default radiance cubemap sampler */ 206 static constexpr const BASE_NS::string_view CORE_DEFAULT_RADIANCE_CUBEMAP_SAMPLER { 207 "CORE3D_DM_RADIANCE_CUBEMAP_SAMPLER" 208 }; 209 /** Default VSM shadow sampler */ 210 static constexpr const BASE_NS::string_view CORE_DEFAULT_VSM_SHADOW_SAMPLER { "CORE3D_DM_VSM_SHADOW_SAMPLER" }; 211 /** Default PCF shadow sampler */ 212 static constexpr const BASE_NS::string_view CORE_DEFAULT_PCF_SHADOW_SAMPLER { "CORE3D_DM_PCF_SHADOW_SAMPLER" }; 213 }; 214 215 /** Default material render node share constants */ 216 struct DefaultMaterialRenderNodeConstants { 217 /** Render node default camera controller output name for depth */ 218 static constexpr const BASE_NS::string_view CORE_DM_CAMERA_OUTPUT { "output" }; 219 220 /** Render node default camera controller output name for depth */ 221 static constexpr const BASE_NS::string_view CORE_DM_CAMERA_DEPTH { "depth" }; 222 /** Render node default camera controller output name for color */ 223 static constexpr const BASE_NS::string_view CORE_DM_CAMERA_COLOR { "color" }; 224 /** Render node default camera controller output name for depth msaa */ 225 static constexpr const BASE_NS::string_view CORE_DM_CAMERA_DEPTH_MSAA { "depth_msaa" }; 226 /** Render node default camera controller output name for color msaa */ 227 static constexpr const BASE_NS::string_view CORE_DM_CAMERA_COLOR_MSAA { "color_msaa" }; 228 /** Render node default camera controller output name for history */ 229 static constexpr const BASE_NS::string_view CORE_DM_CAMERA_HISTORY { "history" }; 230 /** Render node default camera controller output name for history to be outputted for next frame */ 231 static constexpr const BASE_NS::string_view CORE_DM_CAMERA_HISTORY_NEXT { "history_next" }; 232 233 /** Render node default camera controller output name for deferred packed velocity and normal */ 234 static constexpr const BASE_NS::string_view CORE_DM_CAMERA_VELOCITY_NORMAL { "velocity_normal" }; 235 /** Render node default camera controller output name for deferred base color */ 236 static constexpr const BASE_NS::string_view CORE_DM_CAMERA_BASE_COLOR { "base_color" }; 237 /** Render node default camera controller output name for deferred material */ 238 static constexpr const BASE_NS::string_view CORE_DM_CAMERA_MATERIAL { "material" }; 239 /** Render node default camera controller output name for camera dynamic radiance cubemap */ 240 static constexpr const BASE_NS::string_view CORE_DM_CAMERA_RADIANCE_CUBEMAP { "radiance_cubemap" }; 241 242 /** Render node default camera controller output name for deferred custom buffers 243 * Is a prefix for the final name. 244 * With deferred targets the name is deferred_0 and so on. 245 */ 246 static constexpr const BASE_NS::string_view CORE_DM_CAMERA_DEFERRED_PREFIX { "deferred_" }; 247 }; 248 /** @} */ 249 CORE3D_END_NAMESPACE() 250 251 #endif // API_3D_RENDER_DEFAULT_MATERIAL_CONSTANTS_H 252