Unity中Shader自定义cginc文件

news2024/11/30 8:31:59

文章目录

  • 前言
  • 我们在使用如下场景中的小球来进行自己的 GI Shader测试
  • 一、先找到Unity自带的 cginc 库
  • 二、仿照 Unity 的 cginc 文件,写一个我们自己的 cginc 文件
    • 1、我们新建一个文件,在资源管理器中把 文件后缀名修改成 .cginc
    • 2、我们打开Unity自己的cginc文件,仿写其中的格式
    • 3、在我们的文件中按照上面格式书写
    • 4、在我们的 GI Shader 中,include该文件来测试一下效果


前言

Unity中Shader自定义cginc文件。我们使用自定义的cginc文件来实现 Global Illumination


我们在使用如下场景中的小球来进行自己的 GI Shader测试

在这里插入图片描述
我们使用 Subtractive 来进行烘培,看看此时的 GI 效果
然后,在之后测试 GI Shader 时,就可以这样来看 Shader 效果了
在这里插入图片描述


一、先找到Unity自带的 cginc 库

在 Unity 安装目录下的 Editor > Data > CGInclude 文件夹下

在这里插入图片描述


二、仿照 Unity 的 cginc 文件,写一个我们自己的 cginc 文件

可以只把我们用到的功能 统一放到 自己的 cginc 文件中,方便管理

1、我们新建一个文件,在资源管理器中把 文件后缀名修改成 .cginc

在这里插入图片描述

修改后在Unity会变成这样的
在这里插入图片描述

2、我们打开Unity自己的cginc文件,仿写其中的格式

文件的开头有这个
(意思是,若没有预定义这个 XXX 则 预定义这个 XXX, XXX_INCLUDED 是书写规范。但是,不是必须这样写)

在这里插入图片描述
文件结尾 endif
在这里插入图片描述

3、在我们的文件中按照上面格式书写

在这里插入图片描述

4、在我们的 GI Shader 中,include该文件来测试一下效果

我们在 cginc 文件中定义一个黑色

#ifndef MYGLOBALILLUMINATION_INCLUDE
#define MYGLOBALILLUMINATION_INCLUDE

fixed4 Test()
{
    return fixed4(0,0,0,0);
}

#endif

在我们的 GI Shader 中,使用导入该文件后,在片元着色器处直接 返回这个黑色变量

//在这里里面使用 自定义的 cginc 来实现全局GI
Shader "MyShader/P1_8_2"
{
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "CGIncludes/MyGlobalIllumination.cginc"
            
            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
            };
            
            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                return Test();
            }
            ENDCG
        }
    }
}


我们发现效果是成功的:(这样就是一个简单使用自定义 cginc 的例子)
在这里插入图片描述

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

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

相关文章

【Linux】安装使用Nginx负载均衡,并且部署前端项目

目录 一、Nginx概述 1. 什么 2. 背景 3. 作用 二、Nginx负载均衡 1. 讲述 2. 使用 1. 下载 2. 安装 3. 负载均衡 三、前端部署 1. 准备 2. 部署 一、Nginx概述 1. 什么 Nginx是一个高性能的开源Web服务器和反向代理服务器。它具有轻量级、高并发、低内存消耗的…

让你笑到不行的笑话短视频接口,快来试试!

11在当今这个快节奏的社会中,笑话成为了许多人调节情绪的有效方法。如今,短视频平台已经成为了最受欢迎的娱乐方式之一,因此,将笑话和短视频结合起来,成为了一种很有趣的方式来带给我们欢乐。今天我们要介绍的是挖数据…

【电路笔记】-正弦波形

正弦波 文章目录 正弦波1、概述2、波形产生3、总结 在 19 世纪末的 10 年间,许多技术成就使得交流电的使用得以扩展,并克服了直流电向公众供电的局限性。 1882 年,法国发明了变压器,它简化了交流电的分配,正如我们将在…

【免费活动】11月4日敏捷武林上海站 | Scrum.org CEO 亲临现场

活动介绍 过去的几年里,外界的风云变幻为我们的生活增添了一些不一样的色彩。在VUCA世界的浪潮里,每一个人都成为自己生活里的冒险家。面对每一次的变化,勇于探索未知,迎接挑战,努力追逐更好的自己。 七月&#xff0…

gcc/g++使用格式+各种选项,预处理/编译(分析树,编译优化,生成目标代码)/汇编/链接过程(函数库,动态链接)

目录 gcc/g--编译器 介绍 使用格式 通用选项 编译选项 链接选项 程序编译过程 预处理(宏替换) 编译 (生成汇编) 分析树(parse tree) 编译优化 删除死代码 寄存器分配和调度 强度削弱 内联函数 生成目标代码 汇编 (生成二进制代码) 链接(生成可执行文件) 函…

跨境电商怎么做?欲善其事,先利其器!

当前,跨境电商正在以飞速的发展趋势推进,在未来将会朝向成熟系统化的方向发展,对于跨境电商从业者来说既是机遇,也是挑战。不少想转行的朋友对于跨境行业早已“跃跃欲试”,但是不了解跨境电商却又久久不敢冒险......那…

Javassist讲解1(介绍,读写字节码)

Javassist讲解1(介绍,读写字节码) 介绍一、读写字节码1.如何创建新的类2.类冻结 介绍 javassist 使Java字节码操作变得简单,它是一个用于在Java中编辑字节码的类库; 它使Java程序能够在运行时定义一个新类,…

JS(JavaScript) 实现延迟等待(sleep方法)

起因: 只使用 setTimeout 会产生嵌套等方面的问题,达不到想要的效果。 解决方法: 使用 async/await 还有 Promise 相结合的方式来解决问题。 直接上代码: function sleep(time) {return new Promise((resolve) > setTimeout…

基于深度学习的植物识别算法 - cnn opencv python 计算机竞赛

文章目录 0 前言1 课题背景2 具体实现3 数据收集和处理3 MobileNetV2网络4 损失函数softmax 交叉熵4.1 softmax函数4.2 交叉熵损失函数 5 优化器SGD6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的植物识别算法 ** …

交叉编译tslib

交叉编译tslib 环境: ubuntu16.04(虚拟机) tslib 版本:1.4.0 交叉编译器:gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf 目标架构:ARM 野火imx6ull pro开发板 tslib的下载 tslib的下载地址 https://github.com/Mic…

Python数据分析(四)-- 操作Excel文件

1 操作Excel文件-多种实现方式 在实际生产中,经常会用到excel来处理数据,虽然excel有强大的公式,但是很多工作也只能半自动化,配合Python使用可以自动化部分日常工作,大大提升工作效率。 openpyxl:只允许读…

第一章 引言 【数据结构与算法】【精致版】

第一章 引言 【数据结构与算法】【精致版】 前言版权第一章 引言三个问题超市商品问题人机对弈问题多岔路口交通灯的管理问题 1.1 数据结构的概念1.2 数据结构的内容1.2.1 数据的逻辑结构1.2.2 数据的存储结构 1.3 算法1.3.1 算法的概念1.3.2 算法的评价标准1.3.3 算法的描述1.…

GAMP源码阅读:卫星位置钟差计算

原始 Markdown文档、Visio流程图、XMind思维导图见:https://github.com/LiZhengXiao99/Navigation-Learning 文章目录 1、satposs_rtklib()2、ephclk()1. eph2clk():时钟校正参数( a f 0 、 a f 1 、 a f 2 a_{f0}、a_{f1}、a_{f2} af0​、af…

【编程语言发展史】C语言的诞生及其影响

目录 一、C语言的历史背景 二、C语言的设计思想 三、C语言的语法特点 四、C语言的应用领域 五、C语言的影响 六、总结 C语言是一种高级计算机编程语言,它的诞生和发展对计算机科学和软件工程领域产生了深远的影响。本文将详细介绍C语言的诞生及其影响&#xf…

【原创】java+swing+mysql个人理财管理系统设计与实现

摘要: 个人理财管理系统是一款帮助用户有效管理个人财务的软件,本文将详细介绍该系统的设计过程,包括功能模块、数据库设计、界面设计等,系统采用javaswingmysql技术组合。 功能分析: 系统主要提供给管理员、用户使…

C++数据结构算法篇Ⅰ

C数据结构算法篇Ⅰ 📟作者主页:慢热的陕西人 🌴专栏链接:C算法 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 主要内容讲解数据结构中的链表结构 文章目录 C数据…

项目管理之项目质量管理MoSCoW(莫斯科)优先级排序法

项目质量管理是项目管理中至关重要的一环,它贯穿于项目的整个生命周期,包括项目启动、规划、执行、监控和控制。为了确保项目工作的质量,我们需要从多个方面入手,以下是一些关于如何保障项目工作质量管理的内容。 项目产品质量检…

基于SSM的毕业设计项目管理系统的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

历年网规上午真题笔记(2016年)

解析:B 嵌入式系统的存储结构采用分级的方法设计,即寄存器组、高速缓冲存储器(Cache)、内存(包括Flash)和外存,它们在存取速度上依次递减,而在存储容量上逐级增加。 解析:C/A ERP是一种面向制作行业进行物质资源、资金资源和信息资源集成一体化管理的企业信息管理系…

poi兴趣点推荐数据集介绍

介绍 foursquare数据集包含2153471个用户,1143092个场所,1021970个签到,27098490个社交关系以及用户分配给场所的2809581评级,我们常用的是根据NYC和TKY都是从该数据集中抽取出来的。 下载地址:https://sites.google.…