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

本文主要是介绍Unity | Shader基础知识(第三集:案例<对材质颜色进行干预>),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、本节介绍

上一集,我们学到,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 vertENDCG}}
}

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 fragfloat4 vert(float4 v :POSITION):SV_POSITION{return UnityObjectToClipPos(v);}float4 frag():SV_TARGET{return float4(1,1,1,1);}ENDCG}}
}

五、下集预告

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

这篇关于Unity | Shader基础知识(第三集:案例<对材质颜色进行干预>)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/491756

相关文章

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地

通过Spring层面进行事务回滚的实现

《通过Spring层面进行事务回滚的实现》本文主要介绍了通过Spring层面进行事务回滚的实现,包括声明式事务和编程式事务,具有一定的参考价值,感兴趣的可以了解一下... 目录声明式事务回滚:1. 基础注解配置2. 指定回滚异常类型3. ​不回滚特殊场景编程式事务回滚:1. ​使用 TransactionT

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

Java中使用Hutool进行AES加密解密的方法举例

《Java中使用Hutool进行AES加密解密的方法举例》AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个,下面:本文主要介绍Java中使用Hutool进行AES加密解密的相关资料... 目录前言一、Hutool简介与引入1.1 Hutool简介1.2 引入Hutool二、AES加密解密基础

SpringSecurity6.0 如何通过JWTtoken进行认证授权

《SpringSecurity6.0如何通过JWTtoken进行认证授权》:本文主要介绍SpringSecurity6.0通过JWTtoken进行认证授权的过程,本文给大家介绍的非常详细,感兴趣... 目录项目依赖认证UserDetailService生成JWT token权限控制小结之前写过一个文章,从S

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意