-
Notifications
You must be signed in to change notification settings - Fork 89
Render
woctordho edited this page Jun 5, 2024
·
3 revisions
-
OnRenderImage.cs中定义了IOnRenderImage,用于添加自定义的render pass -
RenderManager.cs中定义了IRenderTargetConfig,用于在渲染流程中创建动态尺寸的render texture- 这些render texture的尺寸与游戏画面(在加margin之前)相同,当玩家缩放窗口时,
RenderManager会重新创建这些render texture
- 这些render texture的尺寸与游戏画面(在加margin之前)相同,当玩家缩放窗口时,
-
GameCamera和Avatar里的Cameragame object上面有CompositeSpriteRenderercomponent,它会找到所有CompositeSpriteController并将其渲染-
CompositeSpriteRenderer的mergerTag和CompositeSpriteController的tag需要保持一致,Nova提供的立绘和CG使用的tag为Character,头像为Avatar - 如果
CompositeSpriteController上面有PostProcessing,也会在此时处理 - 这个render pass在渲染透明物体之前
-
-
CompositeSpriteController里有两个CompositeSpriteMerger,用于实现立绘淡入淡出的动画-
CompositeSpriteController继承自FadeController,用于提供一个shader来在两个texture之间渐变 - 这个shader的混合方式是
Premul,详见关于shader的说明
-
-
CompositeSpriteMerger会把立绘的各个部件分别作为sprite创建出来,然后用一个摄像机拍下它们-
CompositeSpriteMerger所在的game object的layer要与CompositeSpriteMerger.MergerLayer保持一致 - 建议在Unity Editor右上角的Layers中取消显示这个layer
-
- 立绘使用的
GameCharacterController、CG使用的OverlaySpriteController、头像使用的AvatarController都继承自CompositeSpriteController -
OverlaySpriteController里有一个RenderTarget,把合成后的立绘渲染到动态尺寸的render texture上- 然后在
overlaygame object上创建一个特殊的MeshRenderer,把这个render texture显示到clip space中对应的位置 - 在接下来渲染透明物体的render pass中,
GameCamera会拍下overlay -
overlay处于一个特殊的layer,建议在Unity Editor右上角的Layers中取消显示这个layer
- 然后在
-
AvatarController没有RenderTarget,而是把合成后的头像渲染到一个固定尺寸的render texture上,再把render texture显示到image上
-
GameCamera、UICamera和PostUICameragame object上面有CameraRenderTarget,每个CameraRenderTarget里有一个RenderTarget-
GameCamera拍下3D场景中的所有东西,显示到UI/MainUI/GameView/GamePanel/Gamegame object上的RawImage上 -
UICamera拍下Layer为UI的所有东西(priority在GameCamera之后),显示到UI/PostUI/AfterMainUI- 同时显示到
UI/PostUI/ButtonRing/BackgroundBlur,用于实现环形菜单背景模糊效果
- 同时显示到
-
PostUICamera拍下Layer为PostUI的所有东西(priority在UICamera之后),它的RenderTarget.isFinal为true,所以RenderTarget会作为RenderManager.finalTarget
-
- 在
RenderManager.ExecuteOnRenderImageFeature中,通过Nova/VFX/Final Blit这个shader,在游戏画面周围添加margin(黑边),显示到窗口上