Unity Shader 图形学【笔记一】

news2024/11/15 23:28:57

游戏图形学

源自:计算机图形学

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

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

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

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.coloradmin.cn/o/1616882.html

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

相关文章

力扣-1844.将所有数字用字符替换

思路: 1. class Solution::定义了一个名为 Solution 的类,用于包装解决问题的方法。 2. def replaceDigits(self, s: str) -> str::定义了一个名为 replaceDigits 的方法,该方法接受一个字符串 s 作为参数&#x…

gitee / github 配置git, 实现免密码登录

文章目录 怎么配置公钥和私钥验证配置成功问题 怎么配置公钥和私钥 以下内容参考自 github ssh 配置,gitee的配置也是一样的; 粘贴以下文本,将示例中使用的电子邮件替换为 GitHub 电子邮件地址。 ssh-keygen -t ed25519 -C "your_emai…

Kotlin语法快速入门--条件控制和循环语句(2)

Kotlin语法入门–条件控制和循环语句(2) 文章目录 Kotlin语法入门--条件控制和循环语句(2)二、条件控制和循环语句1、if...else2、when2.1、常规用法2.2、特殊用法--并列:2.3、特殊用法--类型判断:2.4、特殊…

OLED透明屏的寿命如何?

OLED透明屏的寿命一般在20年左右,但如果是旧款,其寿命可能会缩短至15年左右。然而,这个数字并不是绝对的,因为不同用户的使用和保养方法会导致OLED透明屏的寿命出现延长或缩短。例如,长时间使用或在强光、高对比度高亮…

力扣刷题学习python(跟随视频学着刷)

使用入门 视频链接 【手把手带你刷Leetcode力扣|各个击破数据结构和算法|大厂面试必备技能【已完结】-哔哩哔哩】 https://b23.tv/vIcRT61 时空复杂度 时间: 空间:主要有O(1)和O(n)两种 数组 特点:适合读多写少 操作…

Leetcode 118 杨辉三角

目录 一、问题描述二、示例及约束三、代码方法一:数学 四、总结 一、问题描述 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。   在「杨辉三角」中,每个数是它左上方和右上方的数的和。 二、示例及约束 示例 1&#xff1a…

SQL的基础语句

1、select语句 select colums from table_name 2、条件语句 #查询出查询出用户id为1和3的用户记录 IN 操作符允许我们在 WHERE 子句中规定多个值。 select * from student where id in (1,3) #查询出所有姓王的同学 模糊查询 like 通配符(% 任意多个字符 _单个字符) #下例…

AR HUD_VSLAM+显示技术

智能座舱的一个重要技术方向是表达与展示。HUD可以将驾驶相关的信息,如车速、导航等投射到驾驶员的视线上方,避免驾驶员的目光离开前方道路。这种显示方式可以提供关键信息的实时展示,减少驾驶员的分心。 HUD的技术原理就是通过光学系统将信息…

突破文化壁垒:海外社交媒体营销的内容创新与个性化策略

随着全球化的加速和互联网的普及,海外社交媒体营销已成为企业拓展国际市场、提升品牌影响力的重要手段。然而,如何在众多品牌中脱颖而出,吸引海外用户的关注,却是一个值得深入探讨的问题。本文Nox聚星将和大家从内容创新和个性化策…

考研日常记录(upd 24.4.22)

由于实在太无聊了 , 所以记录以下考研备考日常 , 增加一点成就感 , 获得一点前进动力。 文章目录 2024.4.18 周四课程情况:时间规划: 2024.4.19 周五课程情况:时间规划: 2024.4.20 周六2024.4.2…

GaussianEditor:快速可控的3D编辑与高斯飞溅

GaussianEditor: Swift and Controllable 3D Editing with Gaussian Splatting GaussianEditor:快速可控的3D编辑与高斯飞溅 Yiwen Chen*​1,2   Zilong Chen*​3,5   Chi Zhang2   Feng Wang3   Xiaofeng Yang2 陈怡雯 *​1,2 陈子龙 *​3,5 张驰 2 王峰 3 杨晓…

k8s集群资源编排清单文件解读

1、YAML 文件概述 k8s集群中对资源管理和资源对象编排部署都可以通过声明样式(YAML)文件来解决,也就是可以把需要对资源对象操作编辑到 YAML 格式文件中,我们把这种文件叫做资源清单文件,通过 kubectl 命令直接使用资源…

LTD271次升级 | 网站/小程序可设访问IP的黑白名单 • 官微中心支持PDF等办公文件预览与并分享 • 订单退款显示更详尽明细

1、新增IP访问限制功能; 2、订单新增交易号显示与退款明细显示; 3、自定义地址增加四级地区; 4、Android版App优化文件功能; 5、已知问题修复与优化; 01 官微中心 1) 新增IP限制访问功能 允许或者禁止某些 IP 或…

vue快速入门(四十)非父子组件通信

注释很详细&#xff0c;直接上代码 上一篇 新增内容 媒介js的创建发送组件发送事件示例接收组件接收事件示例 源码 App.vue <template><div id"app"><TessFirst></TessFirst><TestSecond></TestSecond></div> </templ…

Linux 引导过程与服务控制

Linux操作系统引导过程 完整启动过程 简化紧要关键步骤&#xff08;重点&#xff09; Linux系统开机引导过程&#xff1a; 1&#xff09;开机自检 检测硬件设备&#xff0c;找到能够引导系统的设备&#xff0c;比如硬盘 2&#xff09;MBR引导 运行MBR扇区里的主…

【STM32+HAL+Proteus】系列学习教程---RS485总线(收发仿真实现)

实现目标 1、掌握UART/USART/RS485等几个常见概念的区别 2、掌握RS485的逻辑电平、硬件接线等基础知识 3、具体实现目标&#xff1a;1、利用两个单片机组成RS485通信网络&#xff1b;2、两个单片机之间能实现正常收发数据。 一、串口、RS485等之间的关系 串口&#xff1a;是…

使用 Docker 部署 Draw.io 在线流程图系统

1&#xff09;介绍 Draw.io GitHub&#xff1a;https://github.com/jgraph/drawio Draw.io 是一款开源的绘制流程图的工具&#xff0c;拥有大量免费素材和模板。程序本身支持中文在内的多国语言&#xff0c;创建的文档可以导出到多种网盘或本地。无论是创建流程图、组织结构图…

vscode 解决无法创建临时文件。

报错&#xff1a; Fatal error: cant create C:\Users???y\AppData\Local\Temp\ccqkCS9j.o: No such file or directory 右击此 电脑 -> 属性 打开 系统信息 -> 高级系统设置 系统属性 -> 高级 -> 环境变量 将temp 和 tmp 改为其它英文路径 只更改用户变量…

Opencv_2_ 图像色彩空间转换

ColorInvert.h 内容如下&#xff1a; #pragma once #include <opencv.hpp> using namespace std; #include <opencv.hpp> using namespace cv; using namespace std; class ColorInvert{ public : void colorSpaceInvert(Mat&image); }; ColorInvert.cpp…

kubernetes中的副本控制器rc(replicationcontrollers)和rs(replicasets)

一、rc控制器replicationcontrollers rc控制器就是控制相同pod副本数量 使用rc控制器资源创建pod&#xff0c;设定创建pod资源的数量 1.1 案例 1.1.1、创建资源清单 [rootmaster rc-demo]# cat rc.yaml apiVersion: v1 kind: ReplicationController metadata: name: rc01 …