Fat*_*tie 2 shader unity-game-engine
在 Unity 中,是 WaitForEndOfFrame
void Update()
{
StartCoroutine(_c());
}
IEnumerator _c()
{
yield return new WaitForEndOfFrame();
BuildTexturesForExample();
}
Run Code Online (Sandbox Code Playgroud)
等同于OnRenderImage?
void OnRenderImage()
{
BuildTexturesForExample();
}
Run Code Online (Sandbox Code Playgroud)
(不言而喻,两个调用中最小/无用的统一 doco 没有帮助。)
如果不是,什么是“之后”OnRenderImage直到WaitForEndOfFrame被调用?
有没有人有比较使用两者的经验?
你能一直安全地更换一个WaitForEndOfFrame与模式OnRenderImage?1
这是怎么回事?
1 (当然,gizmos/ongui 无关紧要。)
我想我刚刚找到了真正的答案 OnPostRender
OnPostRender在相机渲染其所有对象后调用。如果你想在所有摄像头和 GUI 渲染后做一些事情,使用WaitForEndOfFrame协程。
所以(除了我的想法和ExecutionOrder使它看起来/听起来像)Render 块中的所有方法(除了OnGUIand OnDrawGizmos)都是在每个 Camera 的基础上调用的,并且还要注意
OnPostRender:仅当脚本附加到相机并启用时才会调用此函数。
或者
OnRenderImage:此消息发送到所有附加到相机的脚本。
它的目的是后处理(我只通过查看示例了解它们的工作方式。),因此它实际上需要 2 个参数!
OnRenderImage(RenderTexture src, RenderTexture dest)
Run Code Online (Sandbox Code Playgroud)
所以你可以dest在接收输入(src)后用一些渲染效果覆盖输出纹理(),如他们的例子
Material material;
private void OnRenderImage(RenderTexture source, RenderTexture destination)
{
// Copy the source Render Texture to the destination,
// applying the material along the way.
Graphics.Blit(source, destination, material);
}
Run Code Online (Sandbox Code Playgroud)
还有例如OnRenderObject被称为上所有GameObjects(MonoBehaviourS)不仅是Camera。再次,直到我看到这个例子,我才真正理解它的作用(或者是什么使它与 不同OnRenderImage)。但这里的例子有帮助:
void OnRenderObject()
{
// Render different meshes for the object depending on whether
// the main camera or minimap camera is viewing.
if (Camera.current.name == "MiniMapcam")
{
Graphics.DrawMeshNow(miniMapMesh, transform.position, transform.rotation);
}
else
{
Graphics.DrawMeshNow(mainMesh, transform.position, transform.rotation);
}
}
Run Code Online (Sandbox Code Playgroud)
奖励:我终于明白了真正的目的Camera.current!:D
WaitForEndOfFrame另一方面,在所有相机完成渲染后调用,不仅在Camera游戏对象上无处不在。
在渲染所有摄像机和 GUI之后,就在屏幕上显示帧之前等待,直到帧结束。
所以我会说不,你可以/不应该WaitForEndOfFrame使用OnRenderImage!
| 归档时间: |
|
| 查看次数: |
1221 次 |
| 最近记录: |