Unity Shader 图形学【笔记一】

游戏图形学

源自:计算机图形学

涵盖:图形、动画的创建渲染展示

目标:性能优化、提高视觉质量,增强用户体验

技术:三维模型、纹理、光照、阴影、特效、动画、物理模拟、碰撞检测等

Unity Shader

是:unity引擎创建图形效果的特殊编程语言

在:GPU上运行,控制渲染管线,实现各种视觉效果,比如:镜像、光照、阴影等

简单来说,unity shader就是告诉计算机显卡如何去渲染目标物体达到想要的效果

UnityShader与数学

一些基本的数学函数,比如正弦函数、余弦函数,这种波动曲线往往可以实现一些我们想要的浮动效果,那么我们应该如何去实现呢?

直接上shader吧,回头有空再仔细讲解下面的shader,我们今天先来看看效果

Shader "Learn/ShaderAnim/ori"
{Properties{_MainTex ("Texture", 2D) = "white" {}_MaskTex("anim mask", 2D) = "white" {}_SinMax("SinMax", float) = 0.2_DisFactor("DisFactor", float) = 0.2_TimeFactor("TimeFactor", float) = 0.2}SubShader{Tags { "RenderType" = "Opaque"}Pass{Tags{ "LightMode" = "ForwardBase" }CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;};sampler2D _MainTex;sampler2D _MaskTex;float4 _MainTex_ST;float4 _MaskTex_ST;float _SinMax;float _DisFactor;float _TimeFactor;float Remap(float old1 ,float old2,float new1,float new2,float x){return new1 + (x - old1) * ( new2 - new1) / (old2 - old1) ;}v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = TRANSFORM_TEX(v.uv, _MainTex);return o;}fixed4 frag (v2f i) : SV_Target{float2 mid;fixed4 mask = tex2D(_MaskTex, i.uv);float R = Remap(0.3 , 0.9, 0, 1, mask.r);float centerX = (1 - R) * i.uv.x + R;float centerY = clamp(R - 0.3, 0, 0.6);float2 mid = float2(centerX, centerY);float2 fragDir = normalize(i.uv - mid);   //片段和uv波动中心的方向float dis = distance(mid, i.uv);          //片段与uv波动中心的距离i.uv += _SinMax * sin(_Time.y * _TimeFactor + dis * _DisFactor) * fragDir * mask.r * mask.r ;fixed4 col = tex2D(_MainTex, i.uv);return col;}ENDCG}}
}

shader有了,我们还需要两张图片,一张是底图,一张是遮罩图,这边选择图片:

下面拿出我们的PS工具随便处理一下塞进unity:

效果有点丑,主要是图片没做好,大家可以自己用工具好好做一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/827712.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Vue+ElementPlus自定义带历史记录的搜索框组件

前言 基于Vue2.5ElementPlus实现的一个自定义带历史记录的搜索框组件 效果如图: 基本样式: 获取焦点后: 这里的历史记录默认最大存储10条,同时右侧的清空按钮可以清空所有历史记录。 同时搜索记录也支持点击搜索,按…

c++ reinterpret_cast类型转换简单实验

1.概要 c提供如下几种转换,具体如下。 static_cast:用于非多态类型的转换。 dynamic_cast:用于多态类型的转换,主要用于向下类型转换(从基类指向派生类的指针/引用),会检查转换的有效性,如果转…

371D - Vessels

思路&#xff1a;用并查集维护&#xff0c;如果当前容器没有满&#xff0c;就指向自己&#xff0c;否则指向下一个容器。 这样就可以快速 find 到下一个没有满的容器&#xff0c;从而模拟询问 1。 代码&#xff1a; void solve(){int n;cin >> n;vector<int>p(n …

leetcode:滑动窗口----3. 无重复字符的最长子串

给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。示例 2: 输入: s "bbbbb" 输出: 1 解释: 因为…

算法竞赛相关问题总结记录

前言 日常在校生或者是工作之余的同学或多或少都会参加一些竞赛,参加竞赛一方面可以锻炼自己的理解与实践能力&#xff0c;也能够增加自己的生活费&#xff0c;竞赛中的一些方案也可以后续作为自己论文的base,甚至是横向课题的框架。在算法竞赛中算法的差别个人感觉差距都不大&…

CUDA流与异步

CUDA流与异步 基于流的异步的内核启动和数据传输支持以下类型的粗粒度并发&#xff1a; 1.重叠主机计算和设备计算&#xff1b; 2.重叠主机计算和主机与设备间的数据传输&#xff1b; 3.重叠主机与设备间的数据传输和设备计算&#xff1b; 4.并发设备计算。 理解一个CUDA程序&…

安卓手机APP开发__媒体开发部分__播放器的接口

安卓手机APP开发__媒体开发部分__播放器的接口 目录 概述 组件之间的共同的接口 媒体3的播放的架构 播放器的状态 对改变的监听 当前的播放 定制的播放器实现 概述 一个播放器是你的APP中完成媒体项的播放的组件. 媒体3的播放器接口提供了一个关于播放器处理的功能的总…

一招搞定“找不到xinput1_3.dll,无法继续执行代码”问题

在我们日常使用电脑进行各类工作的过程中&#xff0c;特别是在运行一些关键性软件以完成特定任务时&#xff0c;电脑屏幕上突然弹出一条醒目的错误提示信息&#xff1a;“由于找不到xinput1_3.dll,无法继续执行代码”。这个错误通常发生在使用DirectInput库时&#xff0c;而xin…

Java Spring框架的核心优势是什么?

Spring框架是Java企业应用开发中广泛使用的开源框架&#xff0c;它旨在简化企业级应用的开发。Spring框架的核心优势主要体现在以下几个方面&#xff1a; 轻量级和松耦合&#xff1a;Spring框架设计得非常轻量级&#xff0c;它的大小和复杂性都相对较低&#xff0c;这使得开发者…

BFS解决FloodFill算法:(Leetcode:733. 图像渲染)

题目链接&#xff1a;733. 图像渲染 - 力扣&#xff08;LeetCode&#xff09; 使用广度优先遍历算法解决该问题&#xff1a; 从初始位置开始搜索&#xff0c;初始位置符合条件就入栈&#xff0c;并修改初始位置值。初始位置出栈。 再从初始位置开始广度优先搜索&#xff08;…

代码随想录算法训练营第三十四天|1005.K次取反后最大化的数组和,134. 加油站,135. 分发糖果

目录 1005.K次取反后最大化的数组和思路代码 134. 加油站思路代码 135. 分发糖果思路代码 1005.K次取反后最大化的数组和 题目链接&#xff1a;1005.K次取反后最大化的数组和 文档讲解&#xff1a;代码随想录 视频讲解&#xff1a;贪心算法&#xff0c;这不就是常识&#xff1f…

阿赵UE学习笔记——30、HUD简单介绍

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。   继续学习虚幻引擎&#xff0c;这次来学习一下HUD的基础使用。 一、 什么是HUD HUD(Head-Up Display)&#xff0c;也就是俗称的抬头显示。很多其他领域里面有用到这个术语&#xff0c;比如开车的朋友可能会接触过&#xf…

【Camera Sensor Driver笔记】一、Sensor基本概念

时钟 sensor clock sensor的输入时钟 MCLK 输出时钟&#xff1a; 1. VTPixelClock&#xff1a;会影响sensor内部的帧率、曝光 VTPixelClock(vt_clk)Video Timing Clock, From sensor PLL VTPixelClock Framelengthlines x LinelengthPixelClock x FPS Framelengthlines L…

页面加载事件

2.1窗口加载事件 1.window.οnlοadfuction(){} 或者 window.addEventListerner(‘load’,function(){}) doucument.addEventListner(DOMContentLoaded,fuction(){})这个反应更快些

是德软件89600 RFID使用笔记

文章目录 1、进入RFID软件&#xff1a;2、RFID软件解调设置项3、如何查看一段指令数据 本文是日常工作的笔记分享。 lauch VSA&#xff08;矢量频谱分析&#xff09;后会出现以下界面&#xff1a; 当然这是因为频谱仪的输入有信号才显示如下&#xff1a; 否则就显示频谱仪的噪…

初识C++ · 类和对象(中)(2)

前言&#xff1a;上篇文章已经介绍了6个默认成员函数中的3个函数&#xff0c;分别是构造函数&#xff0c;析构函数&#xff0c;拷贝构造函数&#xff0c;本文介绍的是后三个&#xff0c;赋值运算符重载&#xff0c;const成员函数&#xff0c;取地址操纵符重载。 目录​​​​​…

通过使用XShell工具、Nginx环境实现服务器项目构建与发布

前言&#xff1a; 在信息化和数字化的今天&#xff0c;网站和应用的构建与发布已成为企业发展的重要一环。为了确保项目的顺利上线和稳定运行&#xff0c;选择合适的工具和环境至关重要。本文将详细介绍如何通过XShell工具以及Nginx环境来实现服务器项目的构建与发布&#xff0…

vue 实现级联选择器功能

vue开发中&#xff0c;通过使用 Element UI 的 el-cascader 组件来实现级联选择器功能,下面是一个示例代码&#xff0c;演示如何使用 el-cascader 组件初始化级联选择器&#xff0c;并设置默认值为单位 测试1 和部门 测试11 <template><div><el-cascaderv-mode…

transformer中,多头注意力机制

在Transformer模型中&#xff0c;多头注意力机制通常在自注意力机制&#xff08;Self-Attention&#xff09;的步骤中使用。自注意力机制是Transformer中的核心组件之一&#xff0c;用于在输入序列中建立全局依赖关系&#xff0c;并为每个位置生成一个上下文相关的表示。 具体…

datax介绍和用法

Datax 简介 DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台&#xff0c;实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。 DataX本身作为数据同步框架&…