庄懂课L03

SV_POSITION vs POSITION解释

以前需要得到顶点位置信息,vertex shader或者fragment shader中输入输出语义绑定用的都是POSITION,和SV_POSITION的区别是什么呢?

SV_POSITION : SV_前缀的变量代表system value,在DX10以后的语义绑定中被使用代表特殊的意义,和POSITION用法并无不同。

其次:在DX10版本之前没有引入SV_的预定义语义,POSITION被用作vertex shader的输入,输出,fragment shader的输入参数。但是DX10之后就推荐使用SV_POSITION作为vertex shader的输出和fragment shader的输入了,注意vertex shader的输入还是使用POSITION!

总结:

两个的用法大致相同,都是存储坐标信息,但是一个是转换前的,一个是转换后的。

POSITION:用来存储,模型在本地坐标下,模型空间中(objcet space)的顶点坐标,转换为剪裁空间坐标前的坐标,unity告诉我们的模型顶点坐标,没经过转换的。可用作定点着色器(vertex shader)的输入、输出;片元着色器(frag)的输入。

SV_POSITION:用来存储,模型在剪裁空间,投影空间中的位置信息,即把模型空间的定点坐标,转化为剪裁空间的坐标,可用作定点着色器(vertex shader)的输出;片元着色器(frag)的输入。

原文地址Shader中的SV_POSITION vs POSITION解释_Sevol_Y的博客-CSDN博客

写一个Lambert光照模型

输入模型的顶点信息和法线信息

 struct VertexInput {
                float4 vertex : POSITION;   //将模型顶点信息输入进来
                float3 normal : NORMAL;  //将模型法线信息输入进来
            };

将顶点信息和法线信息做一个变换后输出

 struct VertexOutput {
                float4 pos : SV_POSITION;   // 由模型顶点信息换算来的顶点屏幕位置
                float3 nDirWS : TEXCOORD0;  //由模型法线信息换算来的世界空间法线信息
            };

顶点着色器中将:顶点位置由模型空间转换到相机裁剪空间,法线信息转换到世界空间下

 VertexOutput vert (VertexInput v) {
                VertexOutput o = (VertexOutput)0;  //新建一个输出结构
                o.pos = UnityObjectToClipPos( v.vertex );  //变换顶点信息 并将其塞给输出结构  模型空间转换到相机裁剪空间
                o.nDirWS = UnityObjectToWorldNormal(v.normal); //变换法线信息 并将其塞给输出结构 模型空间下的法线信息转换到世界空间法线信息 这里需要注意大小写
                return o;   //将输出结构输出 
            }

片元作色器中获取到顶点着色器中的法线方向和光方向并进行点积,然后返回

  float4 frag(VertexOutput i) : COLOR {
                float3 nDir = i.nDirWS;
                float3 lDir = normalize(_WorldSpaceLightPos0.xyz);//获取光方向并归一化

                float nDotI = dot(nDir,lDir); //点乘法线方向和光方向
                float lambert = max(0.0,nDotI); //对点积结果进行截断处理

                return lambert;
            }

认识一些连连看节点(以Properties为例)

有用到Fake light

Vector4 :四维向量

Normalize:归一化

Dot:点积

Remap(Simple):映射节点(例如将点积结果从-1到1映射到0到1)

Color:颜色(可以理解为材质面板中的Tint)

Multiply:乘 (常用于混合某些效果)

Slider:数值滑块(限定一个参数范围并可以用滑块的形式调整)

UV Coord:获取模型的uv,需要连在Texture2D之前(就是在DDC软件中制作的那一套)

Switch:开关(类似于True or false)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值