Unity | Shader基础知识(第三集:案例<对材质颜色进行干预>)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

一、本节介绍

上一集我们学到shader的语法格式这一集我们要学习第二简单的shader案例对shader颜色的简单干预。

二、理论介绍

1.获取位置信息

Unity | Shader基础知识什么是shader_unity shader-CSDN博客

在这一文章中我们可以看出最初决定位置的叫顶点着色器因为确定位置后才可以上色。

结论我们可以在顶点着色器中干预上色的位置

2.改变颜色

上色的最后一步是在片元着色器也叫像素着色器那我们可以不管它中间怎么运行的我们在最后给他改颜色显示出来的肯定会改。

 三、对材质颜色进行干预的案例

本案例用到的语义

:POSITION               获取到模型的顶点坐标

:SV_POSITION        输出给像素着色器的屏幕坐标

:SV_TARGET           输出值直接用于渲染了

1.获取位置信息

a.上文说过我们需要在顶点着色器中获取模型的顶点位置信息所以我们一上来就先引入一下

Shader "Custom/001"
{
SubShader
    {
        pass
        {
            CGPROGRAM
            //引入vertex //起名叫vert
            #pragma vertex vert

            ENDCG
        }
    }
}

b.获取模型顶点位置

根据上文语义讲解部分我们已经知道如何拿到模型顶点了。

c.坐标转换

模型的顶点位置肯定是世界坐标下的我们屏幕不一定能显示全面我们的shader只需要管屏幕看得到的东西就够了所以我们需要知道屏幕坐标下的位置信息。

结论我们需要把世界坐标下的顶点位置转换成屏幕坐标下的位置

方法unity已经给我弄好了直接用就可以

//最后会得到模型的屏幕坐标
UnityObjectToClipPos(这里输入模型的顶点世界坐标)

d.把转换好的坐标输出给像素着色器的屏幕坐标

综合上面内容我们的代码是

Shader "Custom/001"
{
SubShader
    {
        pass
        {
            CGPROGRAM
            //引入vertex //起名叫vert
            #pragma vertex vert
            
                        //引入模型顶点坐标    //return的值直接给到片元着色器的屏幕坐标
            float4 vert(float4 v :POSITION):SV_POSITION
            {
            //返回处理过的坐标数据
            return UnityObjectToClipPos(v);
            }
            ENDCG
        }
    }
}
2.处理颜色

a.引入片元着色器信息

//引入fragment //起名叫frag
#pragma fragment frag

b.修改颜色

因为片元着色器输出的直接是颜色了我们假设想输出一个白色

//白色的写法原因略
fixed4(1,1,1,1)

片元着色器输出白色代码段

//片元着色器方法  //直接输出渲染
float4 frag():SV_TARGET
{
    //输出白色
   return float4(1,1,1,1);
}

四、本节全部代码

Shader "Custom/001"
{
SubShader
    {
        pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            float4 vert(float4 v :POSITION):SV_POSITION
            {
            return UnityObjectToClipPos(v);
            }

            float4 frag():SV_TARGET
            {
            return float4(1,1,1,1);
            }

            ENDCG
        }
    }
}

五、下集预告

下集会讲解shader语法用结构体获取数据

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

“Unity | Shader基础知识(第三集:案例<对材质颜色进行干预>)” 的相关文章

基本语法

#表示注释 换行(\n)是标准的行分隔符 反斜线(\)继续上一行 分号(;)将两个语句连接在一行中 冒号(:)将代码块的头和体分开 语句(代码块)用缩进块的方式体现 不同的缩进深度分隔不同的代码块 Python文件以模块的形式组织...

php如何实现边输入边显示查询结果功能 - 编程语言

这篇文章主要介绍了php如何实现边输入边显示查询结果功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php如何实现边输入边显示查询结果功能文章都会有所收获,下面我们一起来看看吧。 PHP是一种常用的服务器端脚...

微信小程序中怎么使用store数据共享 - 开发技术

这篇文章主要介绍“微信小程序中怎么使用store数据共享”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序中怎么使用store数据共享”文章能帮助大家解决问题。全局数据共享 全局数据共享(状态管理)是为了解决组件之间数据...

UVa 160 Factors and Factorials (数论)

160 - Factors and FactorialsTime limit: 3.000 secondshttp://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a...

uniApp常见面试题-CSDN博客

 一句话总的形容- -下uniapp与vue和微信小程序的异同点 Uniapp 中配置tabbar的方式  Uniapp 中常见的组件(说几个即可) Uniapp 中常用的指令语句 Uniapp 应用的生命周期、页面的生命周期、组件的生命周期. 注意下拉刷新和触底加载的使用 uni.re...

「SQL面试题库」 No

1、专栏介绍 「SQL面试题库」是由 不是西红柿 发起全员免费参与的SQL学习活动。我每天发布1道SQL面试真题从简单到困难涵盖所有SQL知识点我敢保证只要做完这100道题不仅能轻松搞定面试代码能力和工作效率也会有明显提升。 1.1 活动流程 整理题目西红柿每天无论刮风下雨保证...