着色器 在蛮牛教育上看的Shader Cg语言输入输出课程,摄像机看不到使用了课程上写的Shader的图像

5
回复
213
查看
打印 上一主题 下一主题
[ 复制链接 ]
排名
39863
昨日变化

2

主题

8

帖子

28

积分

Rank: 1

UID
180825
好友
0
蛮牛币
78
威望
0
注册时间
2016-11-4
在线时间
12 小时
最后登录
2019-9-19
5蛮牛币
本帖最后由 574780830 于 2019-9-2 23:08 编辑

视频里面的shader的代码是这样的
Shader "Lesson/vertex&fragment"{
    SubShader{
        pass{
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            void vert(in float2 objPos:POSITION, out float4 col:COLOR, out float4 pos:POSITION){
                pos = float4(objPos,0,1);
                col = pos;
            }

            void frag(inout float4 col:COLOR){
                // col = float4(0,1,0,1);
            }
            ENDCG



因为发现不知道为什么不用结构体保存,顶点颜色就无法传递到片段颜色函数输入和输出,就是直接全黑的状态,所以的自己改成了这样,我的版本的2017.3.1f1,有知道是为什么的人也可以帮忙解答下,由衷感谢
        SubShader{
                //LOD 200
                Pass{
                CGPROGRAM

#pragma vertex vert
#pragma fragment frag

        struct v2f {
                // SV_POSITION 语义告诉 Unity , pos 里包括了顶点在裁剪空间的位置信息
                float4 pos : POSITION;
                // COLOR0 语义告诉 Unity 用于存储颜色信息
                float4 color : COLOR;
        };

        v2f vert(in float2 pos:POSITION) {
                // 生命输出结构
                v2f o;
                o.pos = float4(pos,0,1);
                o.clor = o.pos;
                //color = float4(1, 0.5, 0.5, 1);
                return o;
        }

        float4 frag(v2f i) : SV_Target{
                // 将插值后的 i.color 显示到屏幕上
                return i.color;
        }

                ENDCG
        }
        }

。这是第一个问题:就是Game视图里面没有图像。第二个问题:为什么Scene视图里面的图像颜色和视屏中Game视图对应矩形位置的颜色不一样,比如Game的左上角绿,左下角黑,而Scene是左上角黑,左下角绿



2f23b5ab316186e24ae36b0c6f503150_726911-20160530155440242-1707741516.png (61.47 KB, 下载次数: 4)

Game视图的效果是这样的

Game视图的效果是这样的

(185.74 KB, 下载次数: 4)

但是我的Game视图什么都看不到

但是我的Game视图什么都看不到

G6H6ICBSSU25L398PBMVKI9.png (51.05 KB, 下载次数: 4)

这是我相机的设置

这是我相机的设置

shaderTest.zip

5.73 KB, 下载次数: 12

这是我的工程,有兴趣的可以帮忙看看

5熟悉之中
666/1000
排名
4884
昨日变化

8

主题

199

帖子

666

积分

Rank: 5Rank: 5

UID
8758
好友
3
蛮牛币
917
威望
0
注册时间
2013-11-23
在线时间
141 小时
最后登录
2019-9-16
沙发
2019-9-6 14:38:29 只看该作者
你看看是不是相机位置的问题,适当调整一下 相机需要照到你的目标物体
6蛮牛粉丝
1148/1500
排名
3287
昨日变化

2

主题

227

帖子

1148

积分

Rank: 6Rank: 6Rank: 6

UID
55491
好友
1
蛮牛币
1614
威望
0
注册时间
2014-11-14
在线时间
451 小时
最后登录
2019-9-22
板凳
2019-9-9 09:33:22 只看该作者
本帖最后由 z534605060 于 2019-9-9 09:36 编辑

第一个shader 中 片段函数 里面的col 被你注释了,没有返回结果当然黑了,
第二个shader中,顶点函数中的结构体.pos:POSITION,o.pos最终需要转换到裁剪坐标才可以o.pos = UnityObjectToClipPos(pos);因为片段函数是在裁剪空间中进行的.   
颜色不一样是因为POSITION 获得的数据并不是世界空间的坐标位置,而是模型空间中的坐标,你的模型和视频中的模型不一样!顶点的世界空间位置一样,不代表在模型空间中的坐标点一样
排名
39863
昨日变化

2

主题

8

帖子

28

积分

Rank: 1

UID
180825
好友
0
蛮牛币
78
威望
0
注册时间
2016-11-4
在线时间
12 小时
最后登录
2019-9-19
地板
楼主 2019-9-13 13:50:31 来自Mobile--- 只看该作者
z534605060 发表于 2019-9-9 09:33
第一个shader 中 片段函数 里面的col 被你注释了,没有返回结果当然黑了,
第二个shader中,顶点函数中的结构 ...

我看视频里面的col就是注释的,视频里面是正常的。但是为什么game视图里面会没有显示,我看视频里面也是有显示的。
排名
39863
昨日变化

2

主题

8

帖子

28

积分

Rank: 1

UID
180825
好友
0
蛮牛币
78
威望
0
注册时间
2016-11-4
在线时间
12 小时
最后登录
2019-9-19
5#
楼主 2019-9-13 13:54:51 来自Mobile--- 只看该作者
z534605060 发表于 2019-9-9 09:33
第一个shader 中 片段函数 里面的col 被你注释了,没有返回结果当然黑了,
第二个shader中,顶点函数中的结构 ...

然后第一个shader都是复制视频里面的,他说输入参数是inout就可以直接按照顶点着色器修改后的颜色输出,但是就算把col注释去掉,不把修改后的颜色放在结构体中,就还是黑色的
6蛮牛粉丝
1148/1500
排名
3287
昨日变化

2

主题

227

帖子

1148

积分

Rank: 6Rank: 6Rank: 6

UID
55491
好友
1
蛮牛币
1614
威望
0
注册时间
2014-11-14
在线时间
451 小时
最后登录
2019-9-22
6#
7 天前 只看该作者
574780830 发表于 2019-9-13 13:54
然后第一个shader都是复制视频里面的,他说输入参数是inout就可以直接按照顶点着色器修改后的颜色输出, ...

看漏了,另外里面怎么会好使,我很怀疑,因为最后out float4 pos:POSITION  这段,输出的pos 必须是经过转换到裁剪空间,所以我改了一下
亲测
objpos 是模型空间点,输入改成float3类型,如果你创建的plane 那么应该计算objPos.xz, 如果是Quad 则是objPos.xy,
Shader "Lesson/vertex&fragment"{
    SubShader{
        pass{
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            void vert(in float3 objPos:POSITION, out float4 col:COLOR, out float4 pos:POSITION){
                col  = float4(objPos.xy,0,1);              
                pos = UnityObjectToClipPos(objPos);
            }

            void frag(inout float4 col:COLOR){
                 //col = float4(0,1,0,1);
            }
            ENDCG
        }
        }
}
您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则