-
Notifications
You must be signed in to change notification settings - Fork 78
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
里的Camera
game object上面有CompositeSpriteRenderer
component,它会找到所有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上- 然后在
overlay
game 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
和PostUICamera
game object上面有CameraRenderTarget
,每个CameraRenderTarget
里有一个RenderTarget
-
GameCamera
拍下3D场景中的所有东西,显示到UI/MainUI/GameView/GamePanel/Game
game 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(黑边),显示到窗口上