Unity Shader渲染时需要注意的几点

本文探讨了Unity Shader在渲染时应注意的几点问题,包括渲染平台的差异,如OpenGL与DirectX屏幕空间坐标的处理,开启抗锯齿时的渲染纹理翻转。还提到了Shader语法差异,例如DirectX对Shader语义的严格要求。此外,文章讨论了如何规范Shader代码,如使用适当精度的数值类型以优化性能,并给出了避免过度运算和慎用分支、循环语句的建议。最后,提醒开发者注意避免除以0的操作。
摘要由CSDN通过智能技术生成

        第一点就是之前也提到过的渲染平台的差异,OpenGL和DirectX的屏幕空间坐标的差异,虽然大多数情况下,这样的差异并不会造成影响,因为Unity在背后为我们处理了这些问题,但是当我们开启了抗锯齿(Edit>Project Setting>Quality>Anti Aliasing)并且在此时使用了渲染到纹理技术。

        此时Unity首先渲染得到屏幕图像,再由硬件进行抗锯齿处理后,得到一张渲染纹理给我们进行后续处理,当我们只需要处理一张渲染图像时,也不需要处理翻转的问题,但是如果我们需要同时处理多张渲染图像且开启了抗锯齿,就需要在顶点着色器中翻转某些渲染纹理的纵坐标。

//判断是否是DirectX类型的平台
#if UNITY_UV_STARTS_AT_TOP
//判断是否开启了抗锯齿
if(_MainTex_TexelSize.y<0)
    nv.y = 1-uv.y;
#endif

        shader的语法差异,如果看到以下的报错信息,都是因为DirectX9/11对Shader的语义更加严格造成的。 

        float4 v = float4(0.0);

        就比如这行代码,在OpenGL平台上是合法的,它会得到一个4个分量都是0.0的float4类型的变量,但是在directX 11平台上,我们必须提供和变量类型相匹配的参数数目。</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值