public bool SetPass (int pass);

Parameters

pass 要设置的着色器通道编号。

Returns

bool 如果返回 false,则不应进行任何渲染。

Description

激活给定的 pass 以进行渲染。

通道索引从零开始并递增到(但是不包含)passCount

This is mostly used in direct drawing code using GL class. For example, Image Effects use materials for implementing screen post-processing. For each pass in the material they activate the pass and draw a fullscreen quad.

如果 SetPass 返回 false,则不应渲染任何内容。对于不打算用于 渲染的特殊通道类型(如 GrabPass),通常是这种情况。

using UnityEngine;

// A script that when attached to the camera, makes the resulting // colors inverted. See its effect in play mode. public class ExampleClass : MonoBehaviour { private Material mat;

// Will be called from camera after regular rendering is done. public void OnPostRender () { if (!mat) { // Unity has a built-in shader that is useful for drawing // simple colored things. In this case, we just want to use // a blend mode that inverts destination colors. Shader shader = Shader.Find ("Hidden/Internal-Colored"); mat = new Material (shader); mat.hideFlags = HideFlags.HideAndDontSave; // Set blend mode to invert destination colors. mat.SetInt ("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusDstColor); mat.SetInt ("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); // Turn off backface culling, depth writes, depth test. mat.SetInt ("_Cull", (int)UnityEngine.Rendering.CullMode.Off); mat.SetInt ("_ZWrite", 0); mat.SetInt ("_ZTest", (int)UnityEngine.Rendering.CompareFunction.Always); }

GL.PushMatrix (); GL.LoadOrtho ();

// activate the first shader pass (in this case we know it is the only pass) mat.SetPass (0); // draw a quad over whole screen GL.Begin (GL.QUADS); GL.Vertex3 (0, 0, 0); GL.Vertex3 (1, 0, 0); GL.Vertex3 (1, 1, 0); GL.Vertex3 (0, 1, 0); GL.End ();

GL.PopMatrix (); } }

另请参阅:passCount 属性、GL 类、ShaderLab documentation