shader Category
阅读原文时间:2023年07月13日阅读:2

Category:是渲染命令的逻辑组,着色器可以多个子着色器,他们需要共同的效果

// Copyright 2014 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Original code by Nora
// http://stereoarts.jp
//
// Retrieved from:
// https://developer.oculusvr.com/forums/viewtopic.php?f=37&t=844#p28982

Shader "Panorama/2dSphere" {
Properties {
_Color ("Main Color", Color) = (1,1,1,1)
_MainTex ("Texture", 2D) = "white" {}
}
Category {
Tags { "Queue"="Background" }
ZWrite Off
Lighting Off
Fog {Mode Off}
BindChannels {
Bind "Color", color
Bind "Vertex", vertex
Bind "TexCoord", texcoord
}
SubShader {
cull off
Pass {
SetTexture [_MainTex] {
Combine texture
}
SetTexture [_MainTex] {
constantColor [_Color]
combine previous * constant
}
}
}
}
}

ShaderLab 语法:绑定通道 (BindChannels)        

绑定通道 (BindChannels) 命令让您可以指定顶点数据如何绘制到图形硬件中。

使用可编程的顶点着色器时,绑定通道无效,因为这种情况下,捆绑由顶点着色器输入控制

默认情况下,Unity 为您进行绑定,但是在有些情况下,您需要自定义使用的绑定。

例如:您可以绘制在第一个纹理阶段使用的主要 UV 集和第二个纹理阶段使用的辅助 UV 集

;或者通知硬件要考虑顶点颜色。

语法

BindChannels { Bind "source", target }

指定顶点数据源 (source) 映射到硬件目标 (target)。

源 (Source)  可以是:

顶点 (Vertex):顶点位置

法线 (Normal):顶点法线

切线 (Tangent):顶点切线

纹理坐标 (Texcoord):主要 UV 坐标

纹理坐标 1 (Texcoord1):次要 UV 坐标

颜色 (Color):逐顶点颜色

目标 (Target) 可以是:

顶点 (Vertex):顶点位置

法线 (Normal:顶点法线

切线 (Tangent):顶点切线

Texcoord0, Texcoord1, …:相应纹理阶段的纹理坐标

纹理坐标 (Texcoord):所有纹理阶段的纹理坐标

颜色 (Color):顶点颜色

详细信息

Unity 在哪些源可绘制到哪些目标上有一些限制。源和目标在 顶点 (Vertex)、法线 

(Normal)、切线 (Tangent) 和 颜色 (Color) 上必须是相匹配的。网格的纹理坐标

(Texcoord 和 Texcoord1)可绘制到纹理坐标目标(对于所有的纹理阶段为 Texcoord 或者

对于特定阶段为 TexcoordN)。

BindChannels 的两个经典使用案例:

考虑顶点颜色的着色器。

使用两个 UV 集的着色器。

示例

// 将第一个 UV 集绘制到第一个纹理阶段// 并将第二个 UV 集绘制到第二个纹理阶段

BindChannels {   Bind "Vertex", vertex   Bind "texcoord", texcoord0   Bind 

"texcoord1", texcoord1} 

// 将第一个 UV 集绘制到所有纹理阶段// 并使用顶点颜色BindChannels {   Bind 

"Vertex", vertex   Bind "texcoord", texcoord   Bind "Color", color}

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器