当前位置: 首页 > article >正文

Unity图形学之着色器之间传递参数

1.初始化 struct:

UNITY_INITIALIZE_OUTPUT(type,name)

Type: struct  名字

Name :变量的名字

 struct Input
        {
            float2 uv_MainTex;
            float3 myColor;
        };
        half _Glossiness;
        half _Metallic;
        fixed4 _Color;
        void MyVertx(inout appdata_base v,out Input o){
            //宏定义 初始化struct
            UNITY_INITIALIZE_OUTPUT(Input,o);
            o.myColor = _Color.rgb;
        }

2.顶点着色器 和片段着色器 的运算次数不是一个量级的,能放在顶点着色器里面运算的,尽量放在顶点里面运算

3.abs(v.naormal) : 法线取值是 -1到 1 ,所以abs是取绝对值 (0-1)

Shader "Custom/TestParameter"
{
    Properties
    {
        _Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 200
        CGPROGRAM
        // Physically based Standard lighting model, and enable shadows on all  light types
        #pragma surface surf Lambert vertex:MyVertx
        // Use shader model 3.0 target, to get nicer looking lighting
        #pragma target 3.0
        sampler2D _MainTex;
        struct Input
        {
            float2 uv_MainTex;
            float3 myColor;
        };
        half _Glossiness;
        half _Metallic;
        fixed4 _Color;
        void MyVertx(inout appdata_base v,out Input o){
            //宏定义 初始化struct
            UNITY_INITIALIZE_OUTPUT(Input,o);
            o.myColor = _Color.rgb * abs(v.normal);
        }
        void surf (Input IN, inout SurfaceOutput o)
        {
            // Albedo comes from a texture tinted by color
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
            o.Albedo = c.rgb * IN.myColor;
            o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}


http://www.kler.cn/a/408640.html

相关文章:

  • Java---反射机制
  • 云计算-华为HCIA-学习笔记
  • Go语言反射(Reflection)详解:探索reflect包中的Type和Value
  • c++ unordered_set和unordered_map
  • 真实网络安全面试场景题
  • 09 —— Webpack搭建开发环境
  • 《AI大模型开发笔记》——LangChain快速入门
  • 数据结构 【带环链表2】
  • spf算法、三类LSA、区间防环路机制/规则、虚连接
  • 实时数据研发|Flink关键概念,什么是无界、有界数据集,流、批?
  • 设计模式之 解释器模式
  • 什么是ROS参数服务器
  • 用Python“拍立淘”:在1688的海洋里寻找宝藏
  • 第 31 章 - Go语言安全性实践
  • 河道水位流量一体化自动监测系统:航运安全的护航使者
  • Git Clone大文件+子模块的方式
  • ES八股相关知识
  • React(六)——Redux
  • 核心差异:知识VS文档管理(+工具软件安利)
  • USRP:B205mini-i
  • 单片机入门
  • 【WRF-Urban】多层建筑能源参数化模型概述:原理
  • 信创改造 - TongRDS 安装方式之控制台安装【Window】
  • OmniDiskSweeper :一款专为 macOS 设计的磁盘使用分析工具
  • Go 语言开发工具
  • 图像处理实验报告