IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 22.01.23 《Unity 2018 Shaders and Effects Cookbook》笔记Chapter7 -> 正文阅读

[游戏开发]22.01.23 《Unity 2018 Shaders and Effects Cookbook》笔记Chapter7

7.Fragment Shaders and Grab Passes

  1. vertex and fragment shader

    1. 对光照如何影响物体表面不感兴趣,不受物理限制,对非真实感的效果很好

    2. 使用#pragma指令来关联两个函数

      #pragma vertex vert

      #pragma fragment frag

    3. 往往使用vertInput和vertOutput结构体做参数传递,Unity负责初始化输入,我们负责初始化输出(结构体的每个字段都使用绑定语义)

  2. 绑定语义

    1. 允许我们用绑定语义来标记变量,于是这些变量会自动的被某些数据初始化,如法向量、顶点位置等
    2. Input 语义:POSITION/SV_POSITON、NORMAL、COLOR/COLOR0/DIFFUSE、COLOR1/SPECULAR、SV_TARGET、TEXCOORD0/TEXCOORD1/TEXCOORDi
    3. Output语义:POSITION/SV_POSITON/HPOS、COLOR/COLOR0/COL0/SV_TARGET、COLOR1/COL1、TEXCOORD0/TEXCOORD1/TEXCOORDi/TEXi、WPOS
    4. 举例:float4 vertex : POSITION;
  3. 抓取通道Grab Pass

    1. 在一个着色器中使用两个通道1-GrabPass 2-Pass

    2. Grab Pass会自动创建一个纹理 (访问到目前为止在屏幕上绘制的内容)

      GrabPass{ }

    3. 在vert中,计算出GrabPass的UV

      o.uvgrab = ComputeGrabScreenPos(o.vertex);

    4. 在frag中对纹理进行取样

      fixed4 col = tex2Dproj(_GrabTexture, UNITY_PROJ_COORD(i.uvgrab));

    5. GrabPass是非常昂贵的操作,在游戏中该实例的数量需要受到限制

      优化:使用GrabPass{ “_GrabTexture” }

      为纹理命名,并可以对用到该名称的所有GrabPass共享该纹理(不允许叠加效果)

  4. 制作窗户材质

    1. 实现透过窗户时的扭曲变形效果:使用带GrabPass的着色器,对抓取纹理进行取样,并对UV数据做一定的改变

    2. 使用一张法线贴图,把它加到UV数据上即可

      half2 distortion = UnpackNormal(bump).rg;

      i.uvgrab.xy += distortion * _Magnitude;

      fixed4 col = tex2Dproj(_GrabTexture, UNITY_PROJ_COORD(i.uvgrab));

  5. 制作2D水材质

    1. 与窗户材质对比,只是将UV的偏移从固定的法线贴图获取改为用正弦波、时间和噪声纹理来生成

    2. float sinT = sin(_Time.w / _Period);

      float distX = tex2D(_NoiseTex, i.worldPos.xy / _Scale + float2(sinT, 0) ).r - 0.5;

      float distY = tex2D(_NoiseTex, i.worldPos.xy / _Scale + float2(0, sinT) ).r - 0.5;

      float2 distortion = float2(distX, distY);

      i.uvgrab.xy += distortion * _Magnitude;

      fixed4 col = tex2Dproj( _GrabTexture, UNITY_PROJ_COORD(i.uvgrab));

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-01-25 10:54:26  更:2022-01-25 10:56:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 18:25:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码