type
status
date
slug
summary
tags
category
icon
password
fullWidth
fullWidth

Unity的VideoPlayer在编辑时指定到某帧

问题描述

做舞蹈视频时需要将歌曲PV视频作为背景板,在编辑时希望视频停留在某一帧(为了好看!),然而,VideoPlayer组件的Inspector面板没有直接提供设置属性的选项。

主要原因

  • 帧是运行时状态值,而非配置参数,Inspector面板主要用于编辑静态配置属性(如视频路径、播放速度等)。
  • 设置帧需要视频已加载并解码(isPrepared == true),在编辑模式下,视频资源可能尚未加载。
  • 跳转到特定帧需要解码前面的所有帧,在编辑器频繁更新会卡顿。

解决方法

扩展VideoPlayer的Inspector面板,增加编辑时跳转到指定帧的功能;把这个脚本放在Assets/Editor文件目录,会自动应用于场景中所有的VideoPlayer组件。

使用效果

notion image

Unity内置管线保存渲染中间结果到RenderTexture

问题描述

在内置管线的卡通渲染中,有一步屏幕后处理效果为“暗部晕染”,需要拿到卡通渲染ForwardPass通道中根据diffuse值计算出来的暗部遮罩,模糊后叠入原暗部;也即在对diffuseColor色阶离散化之前的计算结果要预存下来,为后处理的Pass通道所用。
💡
内置管线的限制
  • Pass之间无法共享数据:内置管线的Pass是独立执行的,Pass 0的SV_Target输出(如Diffuse值)无法直接传递给Pass 1。
  • 无法动态插入渲染步骤:内置管线没有可编程的渲染管线逻辑,无法在运行时插入自定义的渲染操作(如先渲染Diffuse到 RT,再使用RT做后续计算)。
  • 缺少原生的Multi-Pass数据传递机制:Built-in 管线没有类似URP的_CameraColorTexture或HDRP的Render Graph资源管理,无法自动保存中间结果(如Diffuse值)。

解决方法

RenderTexture作为显式的数据中转站:手动创建RT,用CommandBuffer渲染到RT,再传给后续Pass。

使用案例

多Pass的Shader

这是一个卡渲Shader,包含Diffuse值计算、主渲染和描边三个Pass;其中Diffuse值计算Pass的输出结果需要保存到RenderTexture

挂在摄像机上的Csharp脚本

创建一个挂在摄像机上的Csharp脚本,作用是:
  1. 动态创建RenderTexture,保存渲染中间数据。
  1. 通过CommandBuffer在特定时机(如CameraEvent.BeforeForwardOpaque)插入到渲染流程。
  1. 传递RT数据给Shader的属性。
💡
针对角色有多个MeshRenderer,且每个Renderer有多个Material的情况,需要遍历每个Material并在DrawRenderer命令中指定submeshId
OnRenderImage中可将中间结果的RenderTexture输出到窗口进行调试查看。

编辑器扩展脚本

由于将CommandBuffer插入到流程中一般在OnEnable中进行(因为OnEnable是最早的可控初始化点之一,且可配合OnDisable清理旧CommandBufferRenderTexture以避免内存泄漏),修改了Shader的属性后需要重新激活脚本才能生效,可创建一个编辑器扩展脚本,用于点击按钮刷新渲染。

实现效果

亮部Mask输出测试

ShadowThreshold = 0.2
ShadowThreshold = 0.2
notion image
ShadowThreshold = 0.8
调节ShadowThreshold
调节ShadowThreshold

叠加渲染效果

ShadowThreshold = 0.2
ShadowThreshold = 0.2
ShadowThreshold = 0.8
ShadowThreshold = 0.8
调节ShadowThreshold
调节ShadowThreshold
工作笔记:一些乱七八糟的踩坑记录同人插画存档
Loading...
Latest posts
工作笔记:一些乱七八糟的踩坑记录
2025-5-15
游戏AI行为决策-分层任务网络(HTN)的简单应用
2025-5-7
自卷笔记:一些乱七八糟的踩坑记录和小知识小技巧
2025-5-7
捣鼓记录:【Unity内置管线】绘画色彩理论在卡渲后处理中的应用
2025-4-26
游戏算法-Floyd搜索算法知识梳理和通用框架
2025-4-24
捣鼓记录:【Unity内置管线】角色NPR渲染的简单实践
2025-4-23