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

Unity图形学之Shader顶点变化

1.Unity3D 5.0 以后:Pass被隐藏起来,通过调节SurfaceOutputStandard 和 SurfaceOutputStandardSpecular的参数 就能出现比较好的效果

#pragma surface surf Standard fullforwardshadows

void surf (Input IN, inout SurfaceOutputStandard o)
#pragma surface surf StandardSpecular  fullforwardshadows

void surf (Input IN, inout SurfaceOutputStandardSpecular o)

2.自定义灯光渲染接口:

#pragma surface surf Lambert finalcolor:mycolor vertex:myvert

(1)Vertex:定义 顶点着色器的入口函数

(2)Surf:Surface 入口函数 可以看成是 片段着色器

(3)Lambert:定义 灯光作用的入口函数

(4)Finalcolor: 计算雾  最后一次计算像素 的入口函数

(5)Surface vertex:

3.Inout:表示即是 输入也是 输出

Float:精度是32

Half:精度是16

Fixed:精度是12

Shader "Custom/TestVertex"
{
    Properties
    {
        _Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _Glossiness ("Smoothness", Range(0,1)) = 0.5
        _Metallic ("Metallic", Range(0,1)) = 0.0
        
        _ChangeRange ("Position",float) = 2.0
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 200
        CGPROGRAM
        // Physically based Standard lighting model, and enable shadows on all  light types
        #pragma surface surf Lambert  vertex:myvert
        // Use shader model 3.0 target, to get nicer looking lighting
        #pragma target 3.0
        sampler2D _MainTex;
        struct Input
        {
            float2 uv_MainTex;
        };
        half _Glossiness;
        half _Metallic;
        fixed4 _Color;
        // Add instancing support for this shader. You need to check 'Enable  Instancing' on materials that use the shader.
        // See https://docs.unity3d.com/Manual/GPUInstancing.html for more  information about instancing.
        // #pragma instancing_options assumeuniformscaling
        UNITY_INSTANCING_BUFFER_START(Props)
            // put more per-instance properties here
        UNITY_INSTANCING_BUFFER_END(Props)
        half _ChangeRange;
        //顶点着色器  一般是改变位置大小
        void myvert(inout appdata_base v){
            
            //v.vertex.xyz *=2;
            //v.vertex.xyz +=2;
            //v.vertex.xyz *=_ChangeRange;
            v.vertex.xyz += v.normal *_ChangeRange;
        }
        //SurfaceOutput 作为下一个流程的输入 传递给灯光Lambert
        void surf (Input IN, inout SurfaceOutput o)
        {
            //从_MainTex进行纹理采样
            o.Albedo = tex2D(_MainTex,IN.uv_MainTex).rgb;
            
        }
        ENDCG
    }
    FallBack "Diffuse"
}

4.渲染流程:

Vertex——>Surf——> Lambert——>Finalcolor


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

相关文章:

  • Oracle - 多区间按权重取值逻辑 ,分时区-多层级-取配置方案(二)
  • 2022 年中高职组“网络安全”赛项-海南省省竞赛任务书-1-B模块B-1-Windows操作系统渗透测试
  • Python操作neo4j库py2neo使用之创建和查询(二)
  • 速盾:CDN服务器和双线服务器哪个更好?
  • 百度主动推送可以提升抓取,它能提升索引量吗?
  • nvm和nrm的安装与使用
  • 在使用 TypeORM 的项目中,如果不希望查询返回 password 字段,可以通过以下几种方式实现
  • 说说数字化的误区
  • MongoDB进阶篇-索引(索引概述、索引的类型、索引相关操作、索引的使用)
  • 数据建模-业务分类、数据域、主题
  • 【Linux课程学习】:对操作系统(Operator System)的理解
  • 李春葆《数据结构》——图相关代码
  • JVM垃圾回收算法详解
  • C语言内存:我家大门常打开
  • 手机ip地址异常怎么解决
  • tcn 对比 cnn-attension-gru联合模型,时间序列预测,深度神经网络
  • C# 数据结构之【链表】C#链表
  • PN、VFC、PNC局部网络管理
  • django西西家居全屋定制系统的设计与实现
  • Conda环境Git Pull报错
  • Nmap识别MongoDB 6.0指纹
  • Node.js windows版本 下载和安装(详细步骤)
  • C++:探索AVL树旋转的奥秘
  • RBTree--红黑树
  • MySQL 架构概览
  • 开源一个练手的项目,就叫新闻助手吧