找回密码
 立即注册

本文来自

电脑/上网

电脑/上网

订阅|关注

致力于提供软件新闻发布,和软件知识学习,包括常用软件应用技巧及评测,创意设计相关的图文及视频教程

Unity5.0 Shader 极简入门 (五)

[复制链接]
310 l751156 发表于 2017-9-13 17:25:28
屏幕叠贴图特效

准备文件:
一个名为asd的贴图一张,
一个C#特效脚本,
一个简单的特效shader。

C#代码,挂给摄影机的
using UnityEngine;
using System.Collections;
public class E_Screen_001 : MonoBehaviour {
private Material tempMat;
private Texture2D ttt;
public Shader eee;
Material TeXiaoMat
{//先检测有木有生成这个屏幕特效的材质
//如果没有生成,就先生一个
if (tempMat == null)
//生一个临时材质
tempMat = new Material(eee);
//生完不用拿出来看,隐藏在内存里面就行
tempMat.hideFlags = HideFlags.HideAndDontSave;
//返回临时材质,以后调用材质就是指的这个临时材质了
return tempMat;
// Use this for initialization
void Start () {
//初始化时候先载入我们需要的贴图 记住要作为 Texture2D 类型载入,把贴图放在resources文件夹里
ttt = Resources.Load ("asd") as Texture2D;
//将图像贴给材质球的_Tex1通道。 可以在shader中找到这个通道,注意千万不要贴在 _MainTex 通道等专有名词通道上,否则会被覆盖
TeXiaoMat.SetTexture("_Tex1",ttt);
//做一个判断,屏幕特效是否被支持(固定用法,死记硬背)
if (!SystemInfo.supportsImageEffects)
enabled = false;
return;
//做一个判断,特效shader是否被支持(固定用法,死记硬背)
if (!eee !eee.isSupported)
enabled = false;
//屏幕渲染 yuantu可以是Texture类型,也可以是RenderTexture,类型。
void OnRenderImage(Texture yuantu, RenderTexture xiaoguotu)
//如果特效材质不等于没有(就是正常存在的意思)
if (TeXiaoMat != null)
// 输入的原始屏幕图像yuantu,使用TeXiaoMat材质加工完成后,输出xiaoguotu到屏幕
Graphics.Blit(yuantu, xiaoguotu, TeXiaoMat);
else
//如果没有texiao材质,就什么样来的什么样送出去。
Graphics.Blit(yuantu, xiaoguotu);
//如果不可见,则销毁临时材质。
void OnDisable()
if (tempMat)
DestroyImmediate(tempMat);
}
shader代码:
Shader "LiShader/ScreenEffect_Tex"
Properties
_MainTex ("MainTex", 2D) = "white" {}
//记住这个名字 _Tex
_Tex1("Texture1", 2D) = "white" {}
SubShader
Tags { "RenderType"="Opaque" }
LOD 100
Pass
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;
uniform sampler2D _MainTex;
uniform float4 _MainTex_ST;
//在这里声明一下,C#就可以往shader里面传贴图了
uniform sampler2D _Tex1;
v2f vert (appdata v)
v2f o;
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
return o;
fixed4 frag (v2f i) : SV_Target
//将屏幕特效与贴图进行乘法融合
fixed4 col = tex2D(_MainTex, i.uv) * tex2D(_Tex1, i.uv);
return col;
ENDCG
然后把C#挂给摄影机,把shader仍在Eee一栏里面。

这时候运行游戏吧,就可以看到效果了

Unity5.0 Shader 极简入门(一)
这篇文章比较浅显,适合美术人员初学shader阅读,文章为追求通俗易懂,有意避开严谨的学术字眼。在学成后,需学者忘掉该文章的不严谨,切莫追究。
硬件显卡是加工厂,shader是图纸方案,贴图jpg文件...
Unity5.0 Shader 极简入门 (四)
很久没写shader笔记了,最近一直在啃,刚刚有点新进度
这次来编写一个拥有两层UV通道的shader,通常第一层UV通道贴漫反射贴图,而第二层UV通道贴灯光贴图。
这里我制作了两种UV方案进行对...
如何成为一名机器学习的大咖? 对于机器学习,很多人的观点是:机器学习技术是今后所有技术人员都绕不过的一个门槛。 那么,普通程序员该学习机器学作为一名对机器学习心有向往的程序员,我该以什么样的姿势开始呢?
unity-Shader入门介绍
本文转载自http://blog.csdn.net/ring0hx/article/details/46440037
什么是ShaderShader(着色器)是一段能够针对3D对象进行...
Unity5.0内置Shader解析
Shader Mobile/Bumped Specular {
Properties {
_Shininess ( Shininess , Range (0.03, 1)) = 0.07812...
Unity Shader入门教程(三)自制光照模型
光照模型的概念目前还不明晰,因为笔者也是一个初学者,所以请小心对待笔者介绍的内容。笔者认为光照模型是规定光照算法的模型,比如说前面提到的Lambert光照模型,规定了材质表面的光线的表达式为
环境光...

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
温馨提示:
1、在论坛里发表的文章仅代表作者本人的观点,与本网站立场无关。
2、论坛的所有内容都不保证其准确性,有效性,时间性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
3、若因线路及非本站所能控制范围的故障导致暂停服务期间造成的一切不便与损失,论坛不负任何责任。
4,本网站内容均摘自其他网站,如涉及侵权定当第一时间删除
5、如侵犯您的权益请联系936144721@qq.com



上一篇:(深圳中企智业)饲料级磷酸氢钙研究结论及发展建议
下一篇:那一种鸭蛋,不能吃,煮不熟,打得破
转载请说明出处,本文地址:http://bbs.imicun.com/thread-15463862-1-1.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表