unity shader TRANSFER_VERTEX_TO_FRAGMENT 宏的一个小细节
来源:互联网 发布:单片机软件工程师招聘 编辑:程序博客网 时间:2024/05/16 12:33
最近项目中需要优化模型的显示效果,所以就忙着编写合用效果的 shader 了,然后就遇到了各种各样的小问题,其中有个只在 pc 平台会报错,但是在 android 平台下没毛病的小 bug 卡了我一下,后来才发现又叫 unity 给坑了。
ps:这里不得不吐槽一下 unity 提供的这些内部着色器方法,虽然是极大的方便了 shader 的编写,但是这个文档呀。。。它有好多在内部写死了的实现,死到甚至要求我们的顶点,片段输入输出结构体中的语义
变量都必须是死名,2333,这你妹的没有文档可是叫人看死了。。。
我遇到的就是这个宏的问题TRANSFER_VERTEX_TO_FRAGMENT
,它定义在AutoLight.cginc
文件中,它会与宏LIGHTING_COORDS
协同工作,它会根据该pass处理的光源类型( spot 或 point 或 directional )来计算光源坐标的具体值,以及进行和 shadow 相关的计算等。
在pc平台的时候,它会去调用一个在UnityCG.cginc
文件中的ComputeScreenPos
方法,有问题的就是它了。
假如我们的顶点输出结构是这么定义的:
struct v2f { half4 vertex : SV_POSITION; half2 uv : TEXCOORD0; half3 normal : TEXCOORD1; half3 viewDir : TEXCOORD2; half3 lightDir : TEXCOORD3; LIGHTING_COORDS(4, 5) };
看着没有什么问题哈,但是在pc平台下就会报错,错误为:
现在让我们看看正确的写法是什么样的:
struct v2f { half4 pos : SV_POSITION; half2 uv : TEXCOORD0; half3 normal : TEXCOORD1; half3 viewDir : TEXCOORD2; half3 lightDir : TEXCOORD3; LIGHTING_COORDS(4, 5) };
现在,聪明的你看出来了吧,区别就在SV_POSITION
语义的变量名上,之前我们取的是vertex
,后来改成了pos
,那这是为什么呢?
然后我在unity的内置方法里一通搜,这里推荐一下 vscode 这个编辑器,真的是脚本开发的利器,可以以文件夹为单位打开代码,然后在里面全局搜索你要找的内容,特别的适合进行这种调用过程不明确,目标也不明确情况下的代码搜索。
结果在这里:
看到了没,上面我们提到过的TRANSFER_VERTEX_TO_FRAGMENT
会辅助我们进行阴影相关的计算,然后这里它在进行阴影坐标计算的时候,传入了一个a.pos
,所以这也就是为什么我们的顶点输出结构里,必须将变量定义为pos
的原因了,然鹅并没有文档来说明这个宏的正确使用方法,2333。。。。。。
- unity shader TRANSFER_VERTEX_TO_FRAGMENT 宏的一个小细节
- 一个示例性的Unity Shader例子
- 【Unity Shader】一个简单的着色器
- 推荐一个博客,说Unity Shader的
- Unity shader 写一个垃圾的 黄金shader
- 【Unity Shader】一个用于手游的次世代角色Shader
- cin的一个小细节
- 一个有意思的小细节
- @protocol的一个小细节
- URLClassLoader 的一个小细节
- UNITY贝塞尔曲线Bezier的一个细节
- 【Unity Shader】自定义材质面板的小技巧
- 【Unity Shader】自定义材质面板的小技巧
- 【Unity Shader】自定义材质面板的小技巧
- 【Unity Shader】摇摆的小草——顶点动画
- Unity的shader
- 基本的unity shader
- unity shader的组织形式
- DATA URL简介及DATA URL利弊
- 杭电2039
- Python机器学习(二):Logistic回归建模分类实例——信用卡欺诈监测(上)
- LDA(线性判别分析)算法入门
- Mysql数据库(二)登录、退出、创建、修改、删除
- unity shader TRANSFER_VERTEX_TO_FRAGMENT 宏的一个小细节
- 坐标移动
- 解决Eclipse中.properties文件中文乱码问题
- iOS 8 Xcode6 设置Launch Image 启动图片
- [leetcode: Python]507. Perfect Number
- Android Binder库结构
- #比特币病毒#来袭,教你如何保护好电脑
- cloudera部分产品高可用配置-hdfs、hivermatestore、hue、impala
- js弹出框、对话框、提示框、弹窗总结