Unity | Shader基础知识(第二十二集:两次渲染)
目录
一、前言
二、“渲染两次”
三、本次成品介绍
四、第一次渲染代码
五、第二次渲染代码
六、截止目前的所有代码
七、调整代码
八、总结
一、前言
之前一直讲的shader文件中,都只写了一次CG代码。
为了大家对这部分的整体理解,我们这次渲染两次。
二、“渲染两次”
这个词是我造的~不是定义。
什么叫渲染两次?
渲染就是画画的意思,渲染两次就是画两次。这里用画画举例。
第一次画画。(如图1所示)
![](https://i-blog.csdnimg.cn/direct/7e84f9059e4d4383a2d966386d6121f7.png)
这里如果用文字描述一下,就是画了一个绿色的三角形。
第二次画画。(如图2所示)
![](https://i-blog.csdnimg.cn/direct/f7c292b9aaab4e60a0f22c8505201754.png)
如果用语言形容就是,在中间画了一个橘黄色的圆形。
所以我们一套结构CG结构就是画了一幅画。(如图3所示)
不用太在意具体写的什么代码,主要注意一些标志
CGPROGRAM前面是一些准备工作,像之前的模版写入,深度写入之类的。
ENDCG就是结束了绘制
中间就是一些绘制过程,引入一些材料。
这个全过程就是一次画画的全过程。
![](https://i-blog.csdnimg.cn/direct/cd3dbf0becc742f38442dd7cf59b5db4.png)
渲染两次的意思是,我可以在一个shader文件中写两套这个东西。
三、本次成品介绍
我们这次先画一个模型的黑影,但是这个黑影要比模型本身大一点。这个做法参考上节课的代码。
Unity | Shader基础知识(第二十一集:应用-怪兽膨胀、顶点着色器和表面着色器合并)_unity 顶点膨胀shader-CSDN博客
然后再正常把模型渲染上去,就可以给模型做一个阴影或者说边框。(如图4所示)
![](https://i-blog.csdnimg.cn/direct/a0f42e1c53ab405bb22d85960b716b0e.png)
四、第一次渲染代码
我们第一次先画一个模型的黑影(如图4所示),
备注:模型还是用上节课的模型。代码还是用的上节课的思路。
![](https://i-blog.csdnimg.cn/direct/6f44a7cc761b496d850f8b7b08f7febf.png)
Properties{//模型的贴图_MainTex ("Texture", 2D) = "white" {}//边框的大小(膨胀的大了,边框就大,反之就小)_Outline ("Outline Width", Range(0.002,0.1)) = 0.005//边框的颜色,我们要做黑影,所以就先来个黑色_OutlineColor ("Outline Color", Color) = (0,0,0,1)}SubShader{CGPROGRAM//引用,同上一集#pragma surface surf Lambert vertex:vert//承接上面素材,略sampler2D _MainTex;float4 _OutlineColor;float _Outline;void vert(inout appdata_full v){//让原本的顶点在法线的方向上增加一点位置,这样影子就会变大v.vertex.xyz += v.normal * _Outline;}//其实目前代码里都没用到,但因为用了表面着色器,必须写struct Input{float2 uv_MainTex;};void surf(Input IN,inout SurfaceOutput o){//我们把颜色直接给到自发光//备注:这里给到贴图也是可以的,但自发光要更亮一点,可以自己试o.Emission = _OutlineColor.rgb;}ENDCG}
这样我们第一次渲染就画好了。
五、第二次渲染代码
到了ENDCG以后,就是这次画已经画完了,接下来我们再画模型真正的样子。
第二次不需要膨胀,所以顶点那部分就不用加了,直接把颜色上上去。这部分讲太多遍了,就不详解了。
CGPROGRAM#pragma surface surf Lambert struct Input{float2 uv_MainTex;};sampler2D _MainTex;void surf(Input IN, inout SurfaceOutput o){o.Albedo = tex2D(_MainTex, IN.uv_MainTex).rgb;}ENDCG}
六、截止目前的所有代码
Shader "Unlit/019"
{Properties{_MainTex ("Texture", 2D) = "white" {}_Outline ("Outline Width", Range(0.002,0.1)) = 0.005_OutlineColor ("Outline Color", Color) = (0,0,0,1)}SubShader{//第一套渲染-------------------------------------CGPROGRAM#pragma surface surf Lambert vertex:vertstruct Input{float2 uv_MainTex;};sampler2D _MainTex;float4 _OutlineColor;float _Outline;void vert(inout appdata_full v){v.vertex.xyz += v.normal * _Outline;}void surf(Input IN,inout SurfaceOutput o){o.Emission = _OutlineColor.rgb;}ENDCG//第二套渲染--------------------------------------CGPROGRAM#pragma surface surf Lambert struct Input{float2 uv_MainTex;};sampler2D _MainTex;void surf(Input IN, inout SurfaceOutput o){o.Albedo = tex2D(_MainTex, IN.uv_MainTex).rgb;}ENDCG}
}
到这里我只是想证明给你们,渲染可以在后面加的,并不是只能写在那一个里面。
七、调整代码
到现在为止,我们渲染出来的结果。(如图5所示)
![](https://i-blog.csdnimg.cn/direct/6d9e273751304fbebd083f70c9607522.png)
这并不是我们想要的样子,为什么会都是黑色,因为黑色部分是膨胀的,比彩色的大,所以被藏在里面了。(如图6所示)你可以通过增加膨胀的系数在缝隙里面看见。
![](https://i-blog.csdnimg.cn/direct/b2d16dbb3567474f934296906e00aece.png)
解决方案:把深度写入关掉。
不管是你在外面还是里面,都画出来。
代码如下。(如图7所示)
![](https://i-blog.csdnimg.cn/direct/a27e7faf6e6342999616d47c3f6abc07.png)
到这里一步我们就可以得到(如图8所示)
![](https://i-blog.csdnimg.cn/direct/e7d6670f503547d885dbe25253ba57a1.png)
但是下一步的麻烦就是,我把模型背面也渲染出来了。
解决方案:在渲染黑色自发光时,关掉深度写入,在渲染模型时(第二次画画时),打开深度写入。(如图9所示)
这样我们就可以得到我们想要的结果了。
八、总结
本节想表达的重点:
1.渲染可以写好几次
2.每次渲染之前,可以去调节后面渲染的一些方式。本次案例用深度写入为例子。
相关文章:
![](https://i-blog.csdnimg.cn/direct/5fbb52cb8c4b435b920339dc22d27543.png)
Unity | Shader基础知识(第二十二集:两次渲染)
目录 一、前言 二、“渲染两次” 三、本次成品介绍 四、第一次渲染代码 五、第二次渲染代码 六、截止目前的所有代码 七、调整代码 八、总结 一、前言 之前一直讲的shader文件中,都只写了一次CG代码。 为了大家对这部分的整体理解,我们这次渲…...
![](https://i-blog.csdnimg.cn/direct/b9faa7874e1a4e1e8ca9a6f365464f17.jpeg)
鸿蒙Harmony实战开发:Arkts构造函数
构造函数 类声明可以包含用于初始化对象状态的构造函数。 构造函数定义如下: constructor ([parameters]) {// ... } typescript 如果未定义构造函数,则会自动创建具有空参数列表的默认构造函数,例如: class Point {x: numbe…...
![](https://www.ngui.cc/images/no-images.jpg)
@vueuse/core使用useColorMode实现主题颜色切换
useColorMode 是一个在前端开发中常用的自定义钩子(Hook),尤其在需要支持深色模式和浅色模式切换的场景下。这个钩子可以根据用户的选择或系统设置动态调整页面样式。 一、安装和引入 npm install vueuse/core # 或者 yarn add vueuse/…...
![](https://img-blog.csdnimg.cn/img_convert/48f28c25bf4d86cb2f746fe8e3e69d3b.png)
生信分析入门:从基础知识到实践操作的全方位指南
随着生物学研究的数字化转型,生物信息学(简称生信)分析已经成为现代生命科学研究中的关键工具。对于刚开始接触生信分析的初学者来说,这个领域可能看起来复杂而陌生。然而,通过系统的学习和实践,生信分析可…...
![](https://www.ngui.cc/images/no-images.jpg)
【STM32 FreeRTOS】内存管理
除了FreeRTOS提供的动态内存管理方法,标准的C库也提供了函数malloc()和函数free()来实现动态的申请和释放内存。 为啥不用标准的C库自带的内存管理算法?因为标准C库的动态管理方法有如下缺点: 占用大量的代码空间,不适合用在资源…...
![](https://www.ngui.cc/images/no-images.jpg)
vue3+vite+cesium配置参考
在vite项目中使用Cesium的配置 关键: 资源目录的复制;CESIUM_BASE_URL的正确配置 //vite.config.js // ... // 安装打包复制资源插件,手动复制不需要 // npm i vite-plugin-static-copy import { viteStaticCopy } from vite-plugin-static-c…...
![](https://i-blog.csdnimg.cn/direct/c128934d3c654401aec911ef64410558.png)
WEB应用服务器TOMCAT
知识点 一 、WEB技术 1、前端三大核心技术 1.1 HTML HTML ( HyperText Markup Language )超文本标记语言,它不同于一般的编程语言。超文本 即超出纯文本的范畴,例如:描述文本颜色、大小、字体等信息,或使…...
![](https://www.ngui.cc/images/no-images.jpg)
maven打包jar后运行提示“没有主清单属性”问题的几种解决方案
常用的几种maven项目打包后,jar运行提示“没有主清单属性”问题的解决方案,大部分都是要修改pom.xml文件,同时有几种自己常用的配置文件,主要供自用,勿喷。 第一种: <build><plugins><plug…...
![](https://i-blog.csdnimg.cn/direct/06e9982331f441a19440d0c8380aecbb.png)
计算机毕业设计选题推荐-民宿可视化分析-Python爬虫-随机森林算法
✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...
![](https://i-blog.csdnimg.cn/direct/141a6a8e7c53479e987bec68e56fbe28.png)
WKWebView加载项目中网页的资源图片路径异常
问题原因,将含有html的文件通过如下方式引入到工程中: 这种处理方式,当应用程序变以后,引入的文件会被全部放在Resources目录下,而忽略你原本的文件路径信息。因此导致出问题。 解决方案: 采用如下方式引…...
![](https://i-blog.csdnimg.cn/direct/67952b2813134a2c81c1e658981d7a29.jpeg#pic_center)
算法全面剖析
算法 查找算法: 顺序查找: 基本思想: 顺序查找也称为线形查找,属于无序查找算法。从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功&am…...
![](https://i-blog.csdnimg.cn/direct/08a6464445934e758c3228e5092b95c0.png)
tp5php7.4配置sqlserver问题汇总
先修改database.php文件 查看php版本选择sqlserver扩展 通过百度网盘分享的文件:sqlserver 链接:https://pan.baidu.com/s/1zrIV8VWQZM9miLpyH01Aww?pwdxdgx 提取码:xdgx 通过我的分享链接复制自己需要的dll到php的ext下 在php.ini里添加扩…...
![](https://www.ngui.cc/images/no-images.jpg)
C语言随笔:字面量
字面量(Literal)是指程序源代码中直接写出的固定值。字面量用于表示数据常量,它们在程序编译时被直接解析并用于程序运行。 常见的字面量类型 整数字面量(Integer Literals) 描述:表示整数值。示例&#x…...
![](https://i-blog.csdnimg.cn/direct/964b2e9fe12f4962897392e8ccad0eec.png)
chainlit的基本概念聊天对话中的元素
文本消息是聊天机器人的组成部分,但我们通常希望向用户发送的不仅仅是文本,还包括图像、视频等。 这就是元素出现的地方。每个元素都是一段内容,可以附加到Message或Step 并显示在用户界面上。 chainlit支持的元素如下: 文本元…...
![](https://www.ngui.cc/images/no-images.jpg)
【LeetCode:3】无重复字符串的最长子串(Java)
题目链接 3. 无重复字符串的最长子串 题目描述 给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s “bbb…...
![](https://www.ngui.cc/images/no-images.jpg)
C#对字典使用Linq查询
Dictionary<int, int> dic new Dictionary<int, int>();dic.Add(1, 2);dic.Add(2, 3);dic.Add(3, 4);dic.Add(4, 5);dic.Add(5, 6);//筛选键var keys dic.Where(item > item.Key > 2).Select(item > item.Key);foreach (var item in keys){Console.Writ…...
![](https://www.ngui.cc/images/no-images.jpg)
【Vue】Vue基础
系列文章目录 第二章 Vue基础(1) 文章目录 系列文章目录第一节:Vue介绍一、Vue介绍二、Vue项目创建三、项目结构介绍 第二节:组合式API一、基本介绍二、setup介绍三、setup上指定组件名称 第三节:响应式变量一、使用r…...
![](https://i-blog.csdnimg.cn/direct/3f97dea913744a5fba2d7bcea8714f0a.png)
贪心 + 分层图bfs,newcoder 76652/B
目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 https://ac.nowcoder.com/acm/contest/76652/B 二、解题报告 1、思路分析…...
![](https://www.ngui.cc/images/no-images.jpg)
如何在Linux上部署Java Web应用程序
在Linux上部署Java Web应用程序是一个常见的任务,本文将介绍一种常用的方法,分为以下几个步骤: 准备服务器 首先,你需要准备一台运行Linux操作系统的服务器。你可以选择使用各种不同的Linux发行版,如Ubuntu、CentOS等…...
![](https://img-blog.csdnimg.cn/img_convert/ecc42894101295da612341650d086576.jpeg)
SpringBoot 整合 Excel 轻松实现数据自由导入导出
01、背景介绍 在实际的业务系统开发过程中,操作 Excel 实现数据的导入导出基本上是个非常常见的需求。 之前,我们有介绍一款非常好用的工具:EasyPoi,有读者提出在数据量大的情况下,EasyPoi 会占用内存大,…...
![](https://www.ngui.cc/images/no-images.jpg)
PyTorch 基础学习(13)- 混合精度训练
系列文章: 《PyTorch 基础学习》文章索引 基本概念 混合精度训练是深度学习中一种优化技术,旨在通过结合高精度(torch.float32)和低精度(如 torch.float16 或 torch.bfloat16)数据类型的优势,…...
![](https://i-blog.csdnimg.cn/direct/7772a09176354393abf15e7ae5aef7fd.png)
Mycat分片-垂直拆分
目录 场景 配置 测试 全局表配置 续接上篇:MySQ分库分表与MyCat安装配置-CSDN博客 续接下篇:Mycat分片-水平拆分-CSDN博客 场景 在业务系统中, 涉及以下表结构 ,但是由于用户与订单每天都会产生大量的数据, 单台服务器的数据 存储及处理能力是有限…...
![](https://i-blog.csdnimg.cn/direct/f6d42cdeec9f4d0692ee7c486df15037.png)
一元四次方程求解-【附MATLAB代码】
目录 前言 求解方法 编辑 MATLAB验证 附:一元四次方程的故事 前言 最近在研究机器人的干涉(碰撞)检测,遇到了一个问题,就是在求椭圆到原点的最短距离时,构建的方程是一个一元四次方程。无论是高中的…...
![](https://i-blog.csdnimg.cn/direct/43fba4a78076488a84ec9e76acade4f1.jpeg)
【极限性能,尽在掌控】ROG NUC:游戏与创作的微型巨擘
初见ROG NUC,你或许会为它的小巧体型惊讶。然而,这看似不起眼的机身内,蕴藏着游戏、创意的强大能量。 掌中风暴,性能无界 ROG NUC搭载英特尔高性能处理器,配合高速NVMe SSD固态硬盘以及可选的高端独立显卡(…...
![](https://img-blog.csdnimg.cn/img_convert/b83baf3eb62b41661cadde23cec592f9.png)
Ecosmos开启公测,将深度赋能CIOE中国光博会元宇宙参会新体验
如今,生成式AI技术的发展,极大地降低了3D数字资产的制作成本,元宇宙作为一种可以无缝将物理和数字资产进行融合的技术,在推动电子产业数字化进程、助力产业高质量发展的方面展现出了巨大的潜力。 当前,发展新质生产力是…...
![](https://i-blog.csdnimg.cn/direct/0b3cd40dc86f43208fc1ec70d1a3e99d.png)
【Kubernetes】k8s集群之包管理器Helm
目录 一.Helm概述 1.Helm的简介 2.Helm的三个重要概念 3.Helm2与Helm3的的区别 二.Helm 部署 1.安装 helm 2.使用 helm 安装 Chart 3.Helm 自定义模板 4.Helm 仓库 每个成功的软件平台都有一个优秀的打包系统,比如Debian、Ubuntu 的 apt,RedH…...
![](https://www.ngui.cc/images/no-images.jpg)
嵌入式linux系统镜像制作day3(构建镜像)
点击上方"蓝字"关注我们 01、上节回顾 嵌入式linux系统镜像制作day1嵌入式linux系统镜像制作day2提前下载好准备工具,不然失败了大眼瞪小眼。 02、构建 Poky 的 Sato 镜像1 环境: ubuntu18.04poky版本:Dizzy 工具git 在开始之前,针对不同的发行版,需要先执行…...
![](https://i-blog.csdnimg.cn/direct/dea8591ebee64a10b2b78f6d10080244.jpeg#pic_center)
【生日视频制作】教师节中秋节国庆节车模特美女举牌AE模板修改文字软件生成器教程特效素材【AE模板】
教师节中秋节国庆节车模特美女举牌生日视频制作教程AE模板改文字软件生成器素材 怎么如何做的【生日视频制作】教师节中秋节国庆节车模特美女举牌AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤: 安装AE软件下载AE模板把AE模板导入AE软件修改图…...
![](https://img-blog.csdnimg.cn/img_convert/999233961b173ea8adca885e6710c509.png)
RongCallKit iOS 端本地私有 pod 方案
RongCallKit iOS 端本地私有 pod 方案 需求背景 适用于源码集成 CallKit 时,使用 pod 管理 RTC framework 以及源码。集成 CallKit 时,需要定制化修改 CallKit 的样式以及部分 UI 功能。适用于 CallKit 源码 Debug 调试便于定位相关问题。 解决方案 从…...
![](https://i-blog.csdnimg.cn/direct/c06cba2b8b84495797502472ff846b72.png)
C++11:可变参数模板
目录 一、概述 二、场景 1.深拷贝的类 2.浅拷贝的类 C使用指南 一、概述 // Args是一个模板参数包,args是一个函数形参参数包 // 声明一个参数包Args...args,这个参数包中可以包含0到任意个模板参数。 template <class ...Args> void ShowList(…...
![](https://img-blog.csdnimg.cn/img_convert/63f7073e5b7c8053c1abcbf1765ed73e.gif)
潍坊市网站制作/短视频优化
1上期答案揭晓首先给大家看看上一篇文章C语言经典100题(12)中第三部分编程题的答案:#include int main(){ int i,j; int count0; for (i101; i<200; i) { for (j2; j { // 如果j能被i整出在跳出循环 if (i%j0) …...
![](https://oss-wp-picture.oss-cn-shanghai.aliyuncs.com/2020/04/image-20.png)
使用阿里云 香港服务器 的网站吗/网站优化检测工具
刚开始安装这个wordpress,在发表文章时候想要在其中加上图片,不想一个个手动上传媒体库,耽误时间,然后就去下了个imagepaste这个复制粘贴的插件,当我打开安装插件搜索到的时候准备安装,尼玛出现“安装失败&…...
![](/images/no-images.jpg)
购物商城外贸网站建设/网址域名注册
C文件源码如下 #include <stdio.h> #include <string.h> typedef struct{char name[8];long card;int age; } Student...
![](https://img-blog.csdnimg.cn/img_convert/7dc37547de520758ce8ab6a5e1fd6fa5.png)
网站开发2008/百度知道官网首页登录入口
各位商家,大家好!有赞DSP全新广告投放系统于1月6日发布,提供从流量到转化交易全流程广告效果监测。【产品简介】有赞广告投放系统,依托有赞电商大数据优势,为有赞商家提供精准投放的一体化解决方案。系统整合了腾讯广告…...
![](https://img-blog.csdnimg.cn/img_convert/f622c0b99f9f8173b7a709ac26c15b42.png)
陕西最新消息/广州网站设计专注乐云seo
无论是处在青春期的学生,还是走向社会的成年人,随着生活水平的提高,纵欲的人越来越多。多数人都是从初中开始有不良习惯,那么我来分析情绪暴躁焦虑和容貌变丑两个方面。暴躁易怒1.情绪暴躁易怒不知从何时起,本来脾气很…...
网站如何做淘客/在线crm网站
1. 实现天空盒的方式 1.1 给Camera增加Skybox组件 1) 增加Skybox组件:Add Component->Rendering->Skybox 2) 在下图中增加Skybox Material: 1.2 给Scene增加Skybox 1) Window->Lighting 2. 创建天空盒(Material) 1) 创建Material 首先在P…...