本文整理汇总了C#中UnityEngine.Rendering.CommandBuffer.SetGlobalMatrix方法的典型用法代码示例。如果您正苦于以下问题:C# CommandBuffer.SetGlobalMatrix方法的具体用法?C# CommandBuffer.SetGlobalMatrix怎么用?C# CommandBuffer.SetGlobalMatrix使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类UnityEngine.Rendering.CommandBuffer
的用法示例。
在下文中一共展示了CommandBuffer.SetGlobalMatrix方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: RenderVectors
internal override void RenderVectors(Camera camera, CommandBuffer renderCB, float scale, Quality quality)
{
if (this.m_initialized && !this.m_error && this.m_meshRenderer.isVisible)
{
bool flag = (this.m_owner.Instance.CullingMask & 1 << this.m_obj.gameObject.layer) != 0;
if (!flag || (flag && this.m_moved))
{
int num = (!flag) ? 255 : this.m_owner.Instance.GenerateObjectId(this.m_obj.gameObject);
Matrix4x4 value;
if (this.m_obj.FixedStep)
{
value = this.m_owner.PrevViewProjMatrixRT * this.m_currLocalToWorld;
}
else
{
value = this.m_owner.PrevViewProjMatrixRT * this.m_prevLocalToWorld;
}
renderCB.SetGlobalMatrix("_AM_MATRIX_PREV_MVP", value);
renderCB.SetGlobalFloat("_AM_OBJECT_ID", (float)num * 0.003921569f);
renderCB.SetGlobalFloat("_AM_MOTION_SCALE", (!flag) ? 0f : scale);
int num2 = (quality != Quality.Mobile) ? 2 : 0;
for (int i = 0; i < this.m_sharedMaterials.Length; i++)
{
MotionState.MaterialDesc materialDesc = this.m_sharedMaterials[i];
int shaderPass = num2 + ((!materialDesc.coverage) ? 0 : 1);
if (materialDesc.coverage)
{
Texture mainTexture = materialDesc.material.mainTexture;
if (mainTexture != null)
{
materialDesc.propertyBlock.SetTexture("_MainTex", mainTexture);
}
if (materialDesc.cutoff)
{
materialDesc.propertyBlock.SetFloat("_Cutoff", materialDesc.material.GetFloat("_Cutoff"));
}
}
renderCB.DrawMesh(this.m_mesh, this.m_transform.localToWorldMatrix, this.m_owner.Instance.SolidVectorsMaterial, i, shaderPass, materialDesc.propertyBlock);
}
}
}
}
示例2: RenderVectors
internal override void RenderVectors(Camera camera, CommandBuffer renderCB, float scale, Quality quality)
{
if (this.m_initialized && !this.m_error && this.m_renderer.isVisible)
{
bool flag = (this.m_owner.Instance.CullingMask & 1 << this.m_obj.gameObject.layer) != 0;
int num = (!flag) ? 255 : this.m_owner.Instance.GenerateObjectId(this.m_obj.gameObject);
Vector3[] vertices = this.m_cloth.vertices;
for (int i = 0; i < this.m_targetVertexCount; i++)
{
this.m_currVertices[i] = vertices[this.m_targetRemap[i]];
}
if (this.m_starting || !this.m_wasVisible)
{
Array.Copy(this.m_currVertices, this.m_prevVertices, this.m_targetVertexCount);
}
this.m_clonedMesh.vertices = this.m_currVertices;
this.m_clonedMesh.normals = this.m_prevVertices;
Matrix4x4 value;
if (this.m_obj.FixedStep)
{
value = this.m_owner.PrevViewProjMatrixRT * this.m_currLocalToWorld;
}
else
{
value = this.m_owner.PrevViewProjMatrixRT * this.m_prevLocalToWorld;
}
renderCB.SetGlobalMatrix("_AM_MATRIX_PREV_MVP", value);
renderCB.SetGlobalFloat("_AM_OBJECT_ID", (float)num * 0.003921569f);
renderCB.SetGlobalFloat("_AM_MOTION_SCALE", (!flag) ? 0f : scale);
int num2 = (quality != Quality.Mobile) ? 2 : 0;
for (int j = 0; j < this.m_sharedMaterials.Length; j++)
{
MotionState.MaterialDesc materialDesc = this.m_sharedMaterials[j];
int shaderPass = num2 + ((!materialDesc.coverage) ? 0 : 1);
if (materialDesc.coverage)
{
Texture mainTexture = materialDesc.material.mainTexture;
if (mainTexture != null)
{
materialDesc.propertyBlock.SetTexture("_MainTex", mainTexture);
}
if (materialDesc.cutoff)
{
materialDesc.propertyBlock.SetFloat("_Cutoff", materialDesc.material.GetFloat("_Cutoff"));
}
}
renderCB.DrawMesh(this.m_clonedMesh, this.m_currLocalToWorld, this.m_owner.Instance.ClothVectorsMaterial, j, shaderPass, materialDesc.propertyBlock);
}
}
}
示例3: CloneToBuffer
private void CloneToBuffer(Material mat, CommandBuffer buf)
{
foreach (KeyValuePair<object, object> field in cache)
{
object obj = field.Value;
//float
int id = (int)field.Key;
if (obj.GetType() == typeof(float))
{
float value = mat.GetFloat(id);
buf.SetGlobalFloat(id, value);
}
//Color
else if (obj.GetType() == typeof(Color))
{
Color value = mat.GetColor(id);
buf.SetGlobalColor(id, value);
}
//Color32
else if (obj.GetType() == typeof(Color32))
{
Color value = mat.GetColor(id);
buf.SetGlobalColor(id, value);
}//Vector2
else if (obj.GetType() == typeof(Vector2))
{
Vector4 value = mat.GetVector(id);
buf.SetGlobalVector(id, value);
}
//Vector3
else if (obj.GetType() == typeof(Vector3))
{
Vector4 value = mat.GetVector(id);
buf.SetGlobalVector(id, value);
}
//Vector4
else if (obj.GetType() == typeof(Vector4))
{
Vector4 value = mat.GetVector(id);
buf.SetGlobalVector(id, value);
}
//Matrix
else if (obj.GetType() == typeof(Matrix4x4))
{
Matrix4x4 value = mat.GetMatrix(id);
buf.SetGlobalMatrix(id, value);
}
}
}
示例4: RenderReprojectionVectors
void RenderReprojectionVectors( CommandBuffer commandBuffer, RenderTexture destination, float scale )
{
commandBuffer.SetGlobalMatrix( "_AM_MATRIX_CURR_REPROJ", m_baseCamera.PrevViewProjMatrix * m_baseCamera.InvViewProjMatrix );
commandBuffer.SetGlobalFloat( "_AM_MOTION_SCALE", scale );
RenderTexture dummy = null;
commandBuffer.Blit( new RenderTargetIdentifier( dummy ), destination, m_reprojectionMaterial );
}
示例5: RenderVectors
internal override void RenderVectors( Camera camera, CommandBuffer renderCB, float scale, AmplifyMotion.Quality quality )
{
if ( m_initialized && !m_error && m_renderer.isVisible )
{
Profiler.BeginSample( "Skinned.Update" );
if ( !m_useFallback )
{
if ( !m_useGPU )
WaitForAsyncUpdate();
}
Profiler.EndSample();
Profiler.BeginSample( "Skinned.Render" );
if ( !m_useGPU )
{
if ( !m_useFallback )
m_clonedMesh.vertices = m_currVertices;
m_clonedMesh.normals = m_prevVertices;
}
const float rcp255 = 1 / 255.0f;
bool mask = ( m_owner.Instance.CullingMask & ( 1 << m_obj.gameObject.layer ) ) != 0;
int objectId = mask ? m_owner.Instance.GenerateObjectId( m_obj.gameObject ) : 255;
Matrix4x4 prevModelViewProj;
if ( m_obj.FixedStep )
prevModelViewProj = m_owner.PrevViewProjMatrixRT * m_currLocalToWorld;
else
prevModelViewProj = m_owner.PrevViewProjMatrixRT * m_prevLocalToWorld;
renderCB.SetGlobalMatrix( "_AM_MATRIX_PREV_MVP", prevModelViewProj );
renderCB.SetGlobalFloat( "_AM_OBJECT_ID", objectId * rcp255 );
renderCB.SetGlobalFloat( "_AM_MOTION_SCALE", mask ? scale : 0 );
if ( m_useGPU )
{
#if !UNITY_4
Vector4 vertexTexelSize = new Vector4( 1.0f / m_gpuVertexTexWidth, 1.0f / m_gpuVertexTexHeight, m_gpuVertexTexWidth, m_gpuVertexTexHeight );
renderCB.SetGlobalVector( "_AM_VERTEX_TEXEL_SIZE", vertexTexelSize );
renderCB.SetGlobalVector( "_AM_VERTEX_TEXEL_HALFSIZE", vertexTexelSize * 0.5f );
renderCB.SetGlobalTexture( "_AM_PREV_VERTEX_TEX", m_gpuPrevVertices );
renderCB.SetGlobalTexture( "_AM_CURR_VERTEX_TEX", m_gpuCurrVertices );
#endif
}
int hardwarePass = m_useGPU ? 4 : 0;
int qualityPass = ( quality == AmplifyMotion.Quality.Mobile ) ? 0 : 2;
int basePass = hardwarePass + qualityPass;
for ( int i = 0; i < m_sharedMaterials.Length; i++ )
{
MaterialDesc matDesc = m_sharedMaterials[ i ];
int pass = basePass + ( matDesc.coverage ? 1 : 0 );
if ( matDesc.coverage )
{
Texture mainTex = matDesc.material.mainTexture;
if ( mainTex != null )
matDesc.propertyBlock.SetTexture( "_MainTex", mainTex );
if ( matDesc.cutoff )
matDesc.propertyBlock.SetFloat( "_Cutoff", matDesc.material.GetFloat( "_Cutoff" ) );
}
renderCB.DrawMesh( m_clonedMesh, m_currLocalToWorld, m_owner.Instance.SkinnedVectorsMaterial, i, pass, matDesc.propertyBlock );
}
Profiler.EndSample();
}
}
示例6: UpdateVerticesGPU
private void UpdateVerticesGPU( CommandBuffer updateCB, bool starting )
{
if ( !starting && m_wasVisible )
{
AmplifyMotionEffectBase.DiscardContents( m_gpuPrevVertices );
updateCB.Blit( new RenderTargetIdentifier( m_gpuCurrVertices ), m_gpuPrevVertices );
}
updateCB.SetGlobalMatrix( "_AM_WORLD_TO_LOCAL_MATRIX", m_worldToLocalMatrix );
AmplifyMotionEffectBase.DiscardContents( m_gpuCurrVertices );
RenderTexture dummy = null;
updateCB.Blit( new RenderTargetIdentifier( dummy ), m_gpuCurrVertices, m_gpuSkinDeformMat, Mathf.Min( m_weightCount - 1, 2 ) );
if ( starting || !m_wasVisible )
{
AmplifyMotionEffectBase.DiscardContents( m_gpuPrevVertices );
updateCB.Blit( new RenderTargetIdentifier( m_gpuCurrVertices ), m_gpuPrevVertices );
}
}
示例7: RenderVectors
internal override void RenderVectors( Camera camera, CommandBuffer renderCB, float scale, AmplifyMotion.Quality quality )
{
if ( m_initialized && !m_error && m_meshRenderer.isVisible )
{
Profiler.BeginSample( "Solid.Render" );
bool mask = ( m_owner.Instance.CullingMask & ( 1 << m_obj.gameObject.layer ) ) != 0;
if ( !mask || ( mask && m_moved ) )
{
const float rcp255 = 1 / 255.0f;
int objectId = mask ? m_owner.Instance.GenerateObjectId( m_obj.gameObject ) : 255;
Matrix4x4 prevModelViewProj;
if ( m_obj.FixedStep )
prevModelViewProj = m_owner.PrevViewProjMatrixRT * m_currLocalToWorld;
else
prevModelViewProj = m_owner.PrevViewProjMatrixRT * m_prevLocalToWorld;
renderCB.SetGlobalMatrix( "_AM_MATRIX_PREV_MVP", prevModelViewProj );
renderCB.SetGlobalFloat( "_AM_OBJECT_ID", objectId * rcp255 );
renderCB.SetGlobalFloat( "_AM_MOTION_SCALE", mask ? scale : 0 );
// TODO: cache property blocks
int qualityPass = ( quality == AmplifyMotion.Quality.Mobile ) ? 0 : 2;
for ( int i = 0; i < m_sharedMaterials.Length; i++ )
{
MaterialDesc matDesc = m_sharedMaterials[ i ];
int pass = qualityPass + ( matDesc.coverage ? 1 : 0 );
if ( matDesc.coverage )
{
Texture mainTex = matDesc.material.mainTexture;
if ( mainTex != null )
matDesc.propertyBlock.SetTexture( "_MainTex", mainTex );
if ( matDesc.cutoff )
matDesc.propertyBlock.SetFloat( "_Cutoff", matDesc.material.GetFloat( "_Cutoff" ) );
}
renderCB.DrawMesh( m_mesh, m_transform.localToWorldMatrix, m_owner.Instance.SolidVectorsMaterial, i, pass, matDesc.propertyBlock );
}
}
Profiler.EndSample();
}
}
示例8: RenderVectors
internal override void RenderVectors( Camera camera, CommandBuffer renderCB, float scale, AmplifyMotion.Quality quality )
{
Profiler.BeginSample( "Particle.Render" );
// TODO: batch
if ( m_initialized && !m_error && m_renderer.isVisible )
{
bool mask = ( m_owner.Instance.CullingMask & ( 1 << m_obj.gameObject.layer ) ) != 0;
if ( !mask || ( mask && m_moved ) )
{
const float rcp255 = 1 / 255.0f;
int objectId = mask ? m_owner.Instance.GenerateObjectId( m_obj.gameObject ) : 255;
renderCB.SetGlobalFloat( "_AM_OBJECT_ID", objectId * rcp255 );
renderCB.SetGlobalFloat( "_AM_MOTION_SCALE", mask ? scale : 0 );
int qualityPass = ( quality == AmplifyMotion.Quality.Mobile ) ? 0 : 2;
for ( int i = 0; i < m_sharedMaterials.Length; i++ )
{
MaterialDesc matDesc = m_sharedMaterials[ i ];
int pass = qualityPass + ( matDesc.coverage ? 1 : 0 );
if ( matDesc.coverage )
{
Texture mainTex = matDesc.material.mainTexture;
if ( mainTex != null )
matDesc.propertyBlock.SetTexture( "_MainTex", mainTex );
if ( matDesc.cutoff )
matDesc.propertyBlock.SetFloat( "_Cutoff", matDesc.material.GetFloat( "_Cutoff" ) );
}
var enumerator = m_particleDict.GetEnumerator();
while ( enumerator.MoveNext() )
{
KeyValuePair<uint, Particle> pair = enumerator.Current;
Matrix4x4 prevModelViewProj = m_owner.PrevViewProjMatrixRT * pair.Value.prevLocalToWorld;
renderCB.SetGlobalMatrix( "_AM_MATRIX_PREV_MVP", prevModelViewProj );
renderCB.DrawMesh( m_mesh, pair.Value.currLocalToWorld, m_owner.Instance.SolidVectorsMaterial, i, pass, matDesc.propertyBlock );
}
}
}
}
Profiler.EndSample();
}