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));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Ubuntu 22.01 版本中,目前截屏功能可能会出现闪退的问题。与原生的 Linux 版本 2.1.1 相比,这个版本使用起来更加方便,但仍然存在一些功能缺失的问题,比如无法@某人,无法引用消息,无法搜索联系人和会话。 如果你希望解决截屏功能闪退的问题,可以尝试以下方法: 1. 打开终端,并输入以下命令: sudo apt-get install -f -y ./ukylin-wine_70.6.3.25_amd64.deb sudo apt-get install -f -y ./ukylin-wechat_3.0.0_amd64.deb 这些命令将安装所需的软件包,可能会修复截屏功能的问题。 此外,根据引用,Ubuntu 22.01 使用的是 GNU C Library 版本 2.35。这个版本的 C Library 提供了与操作系统交互的基本功能,包括文件操作、内存管理等。在使用 Ubuntu 22.01 进行开发或者运行程序时,可以参考这个版本的 C Library 文档,以便更好地理解和使用系统提供的功能。 请注意,这些方法仅供参考,具体解决问题的方式可能因个人环境和系统配置而有所不同。建议在尝试之前备份重要数据,并确保对系统进行适当的更新和维护。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【ubuntu22.04 安装优麒麟wine封装版微信】](https://blog.csdn.net/riyueyi/article/details/124848366)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [WSL和双系统Ubuntu的CPU性能差异](https://blog.csdn.net/ZhangRelay/article/details/126004498)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值