当前位置:   article > 正文

UE4阴影【类说明】_fshadowmaprendertargetsrefcounted

fshadowmaprendertargetsrefcounted

 

 

 

  1. struct FSortedShadowMapAtlas
  2. {
  3. FShadowMapRenderTargetsRefCounted RenderTargets;
  4. TArray<FProjectedShadowInfo*, SceneRenderingAllocator> Shadows;
  5. };
  6. struct FSortedShadowMaps
  7. {
  8. /** Visible shadows sorted by their shadow depth map render target. */
  9. TArray<FSortedShadowMapAtlas,SceneRenderingAllocator> ShadowMapAtlases;
  10. TArray<FSortedShadowMapAtlas,SceneRenderingAllocator> RSMAtlases;
  11. TArray<FSortedShadowMapAtlas,SceneRenderingAllocator> ShadowMapCubemaps;
  12. FSortedShadowMapAtlas PreshadowCache;
  13. TArray<FSortedShadowMapAtlas,SceneRenderingAllocator> TranslucencyShadowMapAtlases;
  14. void Release();
  15. int64 ComputeMemorySize() const
  16. {
  17. int64 MemorySize = 0;
  18. for (int i = 0; i < ShadowMapAtlases.Num(); i++)
  19. {
  20. MemorySize += ShadowMapAtlases[i].RenderTargets.ComputeMemorySize();
  21. }
  22. for (int i = 0; i < RSMAtlases.Num(); i++)
  23. {
  24. MemorySize += RSMAtlases[i].RenderTargets.ComputeMemorySize();
  25. }
  26. for (int i = 0; i < ShadowMapCubemaps.Num(); i++)
  27. {
  28. MemorySize += ShadowMapCubemaps[i].RenderTargets.ComputeMemorySize();
  29. }
  30. MemorySize += PreshadowCache.RenderTargets.ComputeMemorySize();
  31. for (int i = 0; i < TranslucencyShadowMapAtlases.Num(); i++)
  32. {
  33. MemorySize += TranslucencyShadowMapAtlases[i].RenderTargets.ComputeMemorySize();
  34. }
  35. return MemorySize;
  36. }
  37. };
  1. /**
  2. * Information about a projected shadow.
  3. */
  4. class FProjectedShadowInfo : public FRefCountedObject
  5. {
  6. public:
  7. typedef TArray<const FPrimitiveSceneInfo*,SceneRenderingAllocator> PrimitiveArrayType;
  8. /** The view to be used when rendering this shadow's depths. */
  9. FViewInfo* ShadowDepthView;
  10. TUniformBufferRef<FShadowDepthPassUniformParameters> ShadowDepthPassUniformBuffer;
  11. TUniformBufferRef<FMobileShadowDepthPassUniformParameters> MobileShadowDepthPassUniformBuffer;
  12. /** The depth or color targets this shadow was rendered to. */
  13. FShadowMapRenderTargets RenderTargets;
  14. EShadowDepthCacheMode CacheMode;
  15. /** The main view this shadow must be rendered in, or NULL for a view independent shadow. */
  16. FViewInfo* DependentView;
  17. /** Index of the shadow into FVisibleLightInfo::AllProjectedShadows. */
  18. int32 ShadowId;
  19. /** A translation that is applied to world-space before transforming by one of the shadow matrices. */
  20. FVector PreShadowTranslation;
  21. /** The effective view matrix of the shadow, used as an override to the main view's view matrix when rendering the shadow depth pass. */
  22. FMatrix ShadowViewMatrix;
  23. /**
  24. * Matrix used for rendering the shadow depth buffer.
  25. * Note that this does not necessarily contain all of the shadow casters with CSM, since the vertex shader flattens them onto the near plane of the projection.
  26. */
  27. FMatrix SubjectAndReceiverMatrix;
  28. FMatrix ReceiverMatrix;
  29. FMatrix InvReceiverMatrix;
  30. float InvMaxSubjectDepth;
  31. /**
  32. * Subject depth extents, in world space units.
  33. * These can be used to convert shadow depth buffer values back into world space units.
  34. */
  35. float MaxSubjectZ;
  36. float MinSubjectZ;
  37. /** Frustum containing all potential shadow casters. */
  38. FConvexVolume CasterFrustum;
  39. FConvexVolume ReceiverFrustum;
  40. float MinPreSubjectZ;
  41. FSphere ShadowBounds;
  42. FShadowCascadeSettings CascadeSettings;
  43. /**
  44. * X and Y position of the shadow in the appropriate depth buffer. These are only initialized after the shadow has been allocated.
  45. * The actual contents of the shadowmap are at X + BorderSize, Y + BorderSize.
  46. */
  47. uint32 X;
  48. uint32 Y;
  49. /**
  50. * Resolution of the shadow, excluding the border.
  51. * The full size of the region allocated to this shadow is therefore ResolutionX + 2 * BorderSize, ResolutionY + 2 * BorderSize.
  52. */
  53. uint32 ResolutionX;
  54. uint32 ResolutionY;
  55. /** Size of the border, if any, used to allow filtering without clamping for shadows stored in an atlas. */
  56. uint32 BorderSize;
  57. /** The largest percent of either the width or height of any view. */
  58. float MaxScreenPercent;
  59. /** Fade Alpha per view. */
  60. TArray<float, TInlineAllocator<2> > FadeAlphas;
  61. /** Whether the shadow has been allocated in the shadow depth buffer, and its X and Y properties have been initialized. */
  62. uint32 bAllocated : 1;
  63. /** Whether the shadow's projection has been rendered. */
  64. uint32 bRendered : 1;
  65. /** Whether the shadow has been allocated in the preshadow cache, so its X and Y properties offset into the preshadow cache depth buffer. */
  66. uint32 bAllocatedInPreshadowCache : 1;
  67. /** Whether the shadow is in the preshadow cache and its depths are up to date. */
  68. uint32 bDepthsCached : 1;
  69. // redundant to LightSceneInfo->Proxy->GetLightType() == LightType_Directional, could be made ELightComponentType LightType
  70. uint32 bDirectionalLight : 1;
  71. /** Whether the shadow is a point light shadow that renders all faces of a cubemap in one pass. */
  72. uint32 bOnePassPointLightShadow : 1;
  73. /** Whether this shadow affects the whole scene or only a group of objects. */
  74. uint32 bWholeSceneShadow : 1;
  75. /** Whether the shadow needs to render reflective shadow maps. */
  76. uint32 bReflectiveShadowmap : 1;
  77. /** Whether this shadow should support casting shadows from translucent surfaces. */
  78. uint32 bTranslucentShadow : 1;
  79. /** Whether the shadow will be computed by ray tracing the distance field. */
  80. uint32 bRayTracedDistanceField : 1;
  81. /** Whether this is a per-object shadow that should use capsule shapes to shadow instead of the mesh's triangles. */
  82. uint32 bCapsuleShadow : 1;
  83. /** Whether the shadow is a preshadow or not. A preshadow is a per object shadow that handles the static environment casting on a dynamic receiver. */
  84. uint32 bPreShadow : 1;
  85. /** To not cast a shadow on the ground outside the object and having higher quality (useful for first person weapon). */
  86. uint32 bSelfShadowOnly : 1;
  87. /** Whether the shadow is a per object shadow or not. */
  88. uint32 bPerObjectOpaqueShadow : 1;
  89. /** Whether turn on back-lighting transmission. */
  90. uint32 bTransmission : 1;
  91. /** Whether turn on hair strands deep shadow. */
  92. uint32 bHairStrandsDeepShadow : 1;
  93. /** View projection matrices for each cubemap face, used by one pass point light shadows. */
  94. TArray<FMatrix> OnePassShadowViewProjectionMatrices;
  95. /** View matrices for each cubemap face, used by one pass point light shadows. */
  96. TArray<FMatrix> OnePassShadowViewMatrices;
  97. /** Controls fading out of per-object shadows in the distance to avoid casting super-sharp shadows far away. */
  98. float PerObjectShadowFadeStart;
  99. float InvPerObjectShadowFadeLength;
  100. public:
  101. // default constructor
  102. FProjectedShadowInfo();
  103. /**
  104. * for a per-object shadow. e.g. translucent particle system or a dynamic object in a precomputed shadow situation
  105. * @param InParentSceneInfo must not be 0
  106. * @return success, if false the shadow project is invalid and the projection should nto be created
  107. */
  108. bool SetupPerObjectProjection(
  109. FLightSceneInfo* InLightSceneInfo,
  110. const FPrimitiveSceneInfo* InParentSceneInfo,
  111. const FPerObjectProjectedShadowInitializer& Initializer,
  112. bool bInPreShadow,
  113. uint32 InResolutionX,
  114. uint32 MaxShadowResolutionY,
  115. uint32 InBorderSize,
  116. float InMaxScreenPercent,
  117. bool bInTranslucentShadow
  118. );
  119. /** for a whole-scene shadow. */
  120. void SetupWholeSceneProjection(
  121. FLightSceneInfo* InLightSceneInfo,
  122. FViewInfo* InDependentView,
  123. const FWholeSceneProjectedShadowInitializer& Initializer,
  124. uint32 InResolutionX,
  125. uint32 InResolutionY,
  126. uint32 InBorderSize,
  127. bool bInReflectiveShadowMap
  128. );
  129. float GetShaderDepthBias() const { return ShaderDepthBias; }
  130. float GetShaderSlopeDepthBias() const { return ShaderSlopeDepthBias; }
  131. float GetShaderMaxSlopeDepthBias() const { return ShaderMaxSlopeDepthBias; }
  132. float GetShaderReceiverDepthBias() const;
  133. /**
  134. * Renders the shadow subject depth.
  135. */
  136. void RenderDepth(FRHICommandListImmediate& RHICmdList, class FSceneRenderer* SceneRenderer, FBeginShadowRenderPassFunction BeginShadowRenderPass, bool bDoParallelDispatch);
  137. void SetStateForView(FRHICommandList& RHICmdList) const;
  138. /** Set state for depth rendering */
  139. void SetStateForDepth(FMeshPassProcessorRenderState& DrawRenderState) const;
  140. void ClearDepth(FRHICommandList& RHICmdList, class FSceneRenderer* SceneRenderer, int32 NumColorTextures, FRHITexture** ColorTextures, FRHITexture* DepthTexture, bool bPerformClear);
  141. /** Renders shadow maps for translucent primitives. */
  142. void RenderTranslucencyDepths(FRHICommandList& RHICmdList, class FSceneRenderer* SceneRenderer);
  143. static FRHIBlendState* GetBlendStateForProjection(
  144. int32 ShadowMapChannel,
  145. bool bIsWholeSceneDirectionalShadow,
  146. bool bUseFadePlane,
  147. bool bProjectingForForwardShading,
  148. bool bMobileModulatedProjections);
  149. FRHIBlendState* GetBlendStateForProjection(bool bProjectingForForwardShading, bool bMobileModulatedProjections) const;
  150. /**
  151. * Projects the shadow onto the scene for a particular view.
  152. */
  153. void RenderProjection(FRHICommandListImmediate& RHICmdList, int32 ViewIndex, const class FViewInfo* View, const class FSceneRenderer* SceneRender, bool bProjectingForForwardShading, bool bMobile, const struct FHairStrandsVisibilityData* HairVisibilityData, const struct FHairStrandsMacroGroupDatas* HairMacroGroupData) const;
  154. FRDGTextureRef BeginRenderRayTracedDistanceFieldProjection(
  155. FRDGBuilder& GraphBuilder,
  156. TRDGUniformBufferRef<FSceneTextureUniformParameters> SceneTexturesUniformBuffer,
  157. const FViewInfo& View) const;
  158. /** Renders ray traced distance field shadows. */
  159. void RenderRayTracedDistanceFieldProjection(
  160. FRDGBuilder& GraphBuilder,
  161. TRDGUniformBufferRef<FSceneTextureUniformParameters> SceneTexturesUniformBuffer,
  162. FRDGTextureRef ScreenShadowMaskTexture,
  163. FRDGTextureRef SceneDepthTexture,
  164. const FViewInfo& View,
  165. FIntRect ScissorRect,
  166. bool bProjectingForForwardShading) const;
  167. /** Render one pass point light shadow projections. */
  168. void RenderOnePassPointLightProjection(FRHICommandListImmediate& RHICmdList, int32 ViewIndex, const FViewInfo& View, bool bProjectingForForwardShading, const FHairStrandsVisibilityData* HairVisibilityData, const struct FHairStrandsMacroGroupDatas* HairMacroGroupData) const;
  169. /**
  170. * Renders the projected shadow's frustum wireframe with the given FPrimitiveDrawInterface.
  171. */
  172. void RenderFrustumWireframe(FPrimitiveDrawInterface* PDI) const;
  173. /**
  174. * Adds a primitive to the shadow's subject list.
  175. */
  176. void AddSubjectPrimitive(FPrimitiveSceneInfo* PrimitiveSceneInfo, TArray<FViewInfo>* ViewArray, ERHIFeatureLevel::Type FeatureLevel, bool bRecordShadowSubjectForMobileShading);
  177. uint64 AddSubjectPrimitive_AnyThread(
  178. const FPrimitiveSceneInfoCompact& PrimitiveSceneInfoCompact,
  179. TArray<FViewInfo>* ViewArray,
  180. ERHIFeatureLevel::Type FeatureLevel,
  181. struct FAddSubjectPrimitiveStats& OutStats,
  182. struct FAddSubjectPrimitiveOverflowedIndices& OverflowBuffer) const;
  183. void PresizeSubjectPrimitiveArrays(struct FAddSubjectPrimitiveStats const& Stats);
  184. void FinalizeAddSubjectPrimitive(
  185. struct FAddSubjectPrimitiveOp const& Op,
  186. TArray<FViewInfo>* ViewArray,
  187. ERHIFeatureLevel::Type FeatureLevel,
  188. struct FFinalizeAddSubjectPrimitiveContext& Context);
  189. /**
  190. * @return TRUE if this shadow info has any casting subject prims to render
  191. */
  192. bool HasSubjectPrims() const;
  193. /**
  194. * Adds a primitive to the shadow's receiver list.
  195. */
  196. void AddReceiverPrimitive(FPrimitiveSceneInfo* PrimitiveSceneInfo);
  197. /** Gathers dynamic mesh elements for all the shadow's primitives arrays. */
  198. void GatherDynamicMeshElements(FSceneRenderer& Renderer, class FVisibleLightInfo& VisibleLightInfo, TArray<const FSceneView*>& ReusedViewsArray,
  199. FGlobalDynamicIndexBuffer& DynamicIndexBuffer, FGlobalDynamicVertexBuffer& DynamicVertexBuffer, FGlobalDynamicReadBuffer& DynamicReadBuffer);
  200. void SetupMeshDrawCommandsForShadowDepth(FSceneRenderer& Renderer, FRHIUniformBuffer* PassUniformBuffer);
  201. void SetupMeshDrawCommandsForProjectionStenciling(FSceneRenderer& Renderer);
  202. /**
  203. * @param View view to check visibility in
  204. * @return true if this shadow info has any subject prims visible in the view
  205. */
  206. bool SubjectsVisible(const FViewInfo& View) const;
  207. /** Clears arrays allocated with the scene rendering allocator. */
  208. void ClearTransientArrays();
  209. /** Hash function. */
  210. friend uint32 GetTypeHash(const FProjectedShadowInfo* ProjectedShadowInfo)
  211. {
  212. return PointerHash(ProjectedShadowInfo);
  213. }
  214. /** Returns a matrix that transforms a screen space position into shadow space. */
  215. FMatrix GetScreenToShadowMatrix(const FSceneView& View) const
  216. {
  217. return GetScreenToShadowMatrix(View, X, Y, ResolutionX, ResolutionY);
  218. }
  219. /** Returns a matrix that transforms a screen space position into shadow space.
  220. Additional parameters allow overriding of shadow's tile location.
  221. Used with modulated shadows to reduce precision problems when calculating ScreenToShadow in pixel shader.
  222. */
  223. FMatrix GetScreenToShadowMatrix(const FSceneView& View, uint32 TileOffsetX, uint32 TileOffsetY, uint32 TileResolutionX, uint32 TileResolutionY) const;
  224. /** Returns a matrix that transforms a world space position into shadow space. */
  225. FMatrix GetWorldToShadowMatrix(FVector4& ShadowmapMinMax, const FIntPoint* ShadowBufferResolutionOverride = nullptr) const;
  226. /** Returns the resolution of the shadow buffer used for this shadow, based on the shadow's type. */
  227. FIntPoint GetShadowBufferResolution() const
  228. {
  229. return RenderTargets.GetSize();
  230. }
  231. /** Computes and updates ShaderDepthBias and ShaderSlopeDepthBias */
  232. void UpdateShaderDepthBias();
  233. /** How large the soft PCF comparison should be, similar to DepthBias, before this was called TransitionScale and 1/Size */
  234. float ComputeTransitionSize() const;
  235. inline bool IsWholeSceneDirectionalShadow() const
  236. {
  237. return bWholeSceneShadow && CascadeSettings.ShadowSplitIndex >= 0 && bDirectionalLight;
  238. }
  239. inline bool IsWholeScenePointLightShadow() const
  240. {
  241. return bWholeSceneShadow && ( LightSceneInfo->Proxy->GetLightType() == LightType_Point || LightSceneInfo->Proxy->GetLightType() == LightType_Rect );
  242. }
  243. // 0 if Setup...() wasn't called yet
  244. const FLightSceneInfo& GetLightSceneInfo() const { return *LightSceneInfo; }
  245. const FLightSceneInfoCompact& GetLightSceneInfoCompact() const { return LightSceneInfoCompact; }
  246. /**
  247. * Parent primitive of the shadow group that created this shadow, if not a bWholeSceneShadow.
  248. * 0 if Setup...() wasn't called yet
  249. */
  250. const FPrimitiveSceneInfo* GetParentSceneInfo() const { return ParentSceneInfo; }
  251. /** Creates a new view from the pool and caches it in ShadowDepthView for depth rendering. */
  252. void SetupShadowDepthView(FRHICommandListImmediate& RHICmdList, FSceneRenderer* SceneRenderer);
  253. FShadowDepthType GetShadowDepthType() const
  254. {
  255. return FShadowDepthType(bDirectionalLight, bOnePassPointLightShadow, bReflectiveShadowmap);
  256. }
  257. /**
  258. * Setup uniformbuffers and update Primitive Shader Data
  259. */
  260. void SetupShadowUniformBuffers(FRHICommandListImmediate& RHICmdList, FScene* Scene, FLightPropagationVolume* LPV = nullptr);
  261. /**
  262. * Ensure Cached Shadowmap is in EReadable state
  263. */
  264. void TransitionCachedShadowmap(FRHICommandListImmediate& RHICmdList, FScene* Scene);
  265. private:
  266. // 0 if Setup...() wasn't called yet
  267. const FLightSceneInfo* LightSceneInfo;
  268. FLightSceneInfoCompact LightSceneInfoCompact;
  269. /**
  270. * Parent primitive of the shadow group that created this shadow, if not a bWholeSceneShadow.
  271. * 0 if Setup...() wasn't called yet or for whole scene shadows
  272. */
  273. const FPrimitiveSceneInfo* ParentSceneInfo;
  274. /** dynamic shadow casting elements */
  275. PrimitiveArrayType DynamicSubjectPrimitives;
  276. /** For preshadows, this contains the receiver primitives to mask the projection to. */
  277. PrimitiveArrayType ReceiverPrimitives;
  278. /** Subject primitives with translucent relevance. */
  279. PrimitiveArrayType SubjectTranslucentPrimitives;
  280. /** Dynamic mesh elements for subject primitives. */
  281. TArray<FMeshBatchAndRelevance,SceneRenderingAllocator> DynamicSubjectMeshElements;
  282. /** Dynamic mesh elements for translucent subject primitives. */
  283. TArray<FMeshBatchAndRelevance,SceneRenderingAllocator> DynamicSubjectTranslucentMeshElements;
  284. TArray<const FStaticMeshBatch*, SceneRenderingAllocator> SubjectMeshCommandBuildRequests;
  285. /** Number of elements of DynamicSubjectMeshElements meshes. */
  286. int32 NumDynamicSubjectMeshElements;
  287. /** Number of elements of SubjectMeshCommandBuildRequests meshes. */
  288. int32 NumSubjectMeshCommandBuildRequestElements;
  289. FMeshCommandOneFrameArray ShadowDepthPassVisibleCommands;
  290. FParallelMeshDrawCommandPass ShadowDepthPass;
  291. TArray<FShadowMeshDrawCommandPass, TInlineAllocator<2>> ProjectionStencilingPasses;
  292. FDynamicMeshDrawCommandStorage DynamicMeshDrawCommandStorage;
  293. FGraphicsMinimalPipelineStateSet GraphicsMinimalPipelineStateSet;
  294. bool NeedsShaderInitialisation;
  295. /**
  296. * Bias during in shadowmap rendering, stored redundantly for better performance
  297. * Set by UpdateShaderDepthBias(), get with GetShaderDepthBias(), -1 if not set
  298. */
  299. float ShaderDepthBias;
  300. float ShaderSlopeDepthBias;
  301. float ShaderMaxSlopeDepthBias;
  302. void CopyCachedShadowMap(FRHICommandList& RHICmdList, const FMeshPassProcessorRenderState& DrawRenderState, FSceneRenderer* SceneRenderer, const FViewInfo& View);
  303. /**
  304. * Renders the shadow subject depth, to a particular hacked view
  305. */
  306. void RenderDepthInner(FRHICommandListImmediate& RHICmdList, class FSceneRenderer* SceneRenderer, FBeginShadowRenderPassFunction BeginShadowRenderPass, bool bDoParallelDispatch);
  307. /**
  308. * Modifies the passed in view for this shadow
  309. */
  310. void ModifyViewForShadow(FRHICommandList& RHICmdList, FViewInfo* FoundView) const;
  311. /**
  312. * Finds a relevant view for a shadow
  313. */
  314. FViewInfo* FindViewForShadow(FSceneRenderer* SceneRenderer) const;
  315. void AddCachedMeshDrawCommandsForPass(
  316. int32 PrimitiveIndex,
  317. const FPrimitiveSceneInfo* InPrimitiveSceneInfo,
  318. const FStaticMeshBatchRelevance& RESTRICT StaticMeshRelevance,
  319. const FStaticMeshBatch& StaticMesh,
  320. const FScene* Scene,
  321. EMeshPass::Type PassType,
  322. FMeshCommandOneFrameArray& VisibleMeshCommands,
  323. TArray<const FStaticMeshBatch*, SceneRenderingAllocator>& MeshCommandBuildRequests,
  324. int32& NumMeshCommandBuildRequestElements);
  325. void AddCachedMeshDrawCommands_AnyThread(
  326. const FScene* Scene,
  327. const FStaticMeshBatchRelevance& RESTRICT StaticMeshRelevance,
  328. int32 StaticMeshIdx,
  329. int32& NumAcceptedStaticMeshes,
  330. struct FAddSubjectPrimitiveResult& OutResult,
  331. struct FAddSubjectPrimitiveStats& OutStats,
  332. struct FAddSubjectPrimitiveOverflowedIndices& OverflowBuffer) const;
  333. /** Will return if we should draw the static mesh for the shadow, and will perform lazy init of primitive if it wasn't visible */
  334. bool ShouldDrawStaticMeshes(FViewInfo& InCurrentView, FPrimitiveSceneInfo* InPrimitiveSceneInfo);
  335. bool ShouldDrawStaticMeshes_AnyThread(
  336. FViewInfo& InCurrentView,
  337. const FPrimitiveSceneInfoCompact& PrimitiveSceneInfoCompact,
  338. bool bMayBeFading,
  339. bool bNeedUpdateStaticMeshes,
  340. struct FAddSubjectPrimitiveResult& OutResult,
  341. struct FAddSubjectPrimitiveStats& OutStats,
  342. struct FAddSubjectPrimitiveOverflowedIndices& OverflowBuffer) const;
  343. void GetShadowTypeNameForDrawEvent(FString& TypeName) const;
  344. /** Updates object buffers needed by ray traced distance field shadows. */
  345. int32 UpdateShadowCastingObjectBuffers() const;
  346. /** Gathers dynamic mesh elements for the given primitive array. */
  347. void GatherDynamicMeshElementsArray(
  348. FViewInfo* FoundView,
  349. FSceneRenderer& Renderer,
  350. FGlobalDynamicIndexBuffer& DynamicIndexBuffer,
  351. FGlobalDynamicVertexBuffer& DynamicVertexBuffer,
  352. FGlobalDynamicReadBuffer& DynamicReadBuffer,
  353. const PrimitiveArrayType& PrimitiveArray,
  354. const TArray<const FSceneView*>& ReusedViewsArray,
  355. TArray<FMeshBatchAndRelevance,SceneRenderingAllocator>& OutDynamicMeshElements,
  356. int32& OutNumDynamicSubjectMeshElements);
  357. void SetupFrustumForProjection(const FViewInfo* View, TArray<FVector4, TInlineAllocator<8>>& OutFrustumVertices, bool& bOutCameraInsideShadowFrustum, FPlane* OutPlanes) const;
  358. void SetupProjectionStencilMask(
  359. FRHICommandListImmediate& RHICmdList,
  360. const FViewInfo* View,
  361. int32 ViewIndex,
  362. const class FSceneRenderer* SceneRender,
  363. const TArray<FVector4, TInlineAllocator<8>>& FrustumVertices,
  364. bool bMobileModulatedProjections,
  365. bool bCameraInsideShadowFrustum) const;
  366. friend class FShadowDepthVS;
  367. friend class FShadowDepthBasePS;
  368. friend class FShadowVolumeBoundProjectionVS;
  369. friend class FShadowProjectionPS;
  370. };

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/91472
推荐阅读
相关标签
  

闽ICP备14008679号