【Shader】应用 ShaderToy 代码的 ShaderLab 模板
来源:互联网 发布:中国国库有多少钱知乎 编辑:程序博客网 时间:2024/06/06 12:43
参考自:冯乐乐的博客 http://blog.csdn.net/candycat1992/article/details/44039077
(1)CG 头文件 ShaderToyDefines.cginc
/* ------------------------ Shader Toy 着色器输入 -----------------------------------uniform vec3 iResolution; // viewport resolution (in pixels)uniform float iGlobalTime; // shader playback time (in seconds)uniform float iTimeDelta; // render time (in seconds)uniform int iFrame; // shader playback frameuniform float iChannelTime[4]; // channel playback time (in seconds)uniform vec3 iChannelResolution[4]; // channel resolution (in pixels)uniform vec4 iMouse; // mouse pixel coords. xy: current (if MLB down), zw: clickuniform samplerXX iChannel0..3; // input channel. XX = 2D/Cubeuniform vec4 iDate; // (year, month, day, time in seconds)uniform float iSampleRate; // sound sample rate (i.e., 44100)-------------------------------------------------------------------------------------*/// 定义一系列宏和 Shader Toy 中的 GLSL 衔接#define vec2 float2#define vec3 float3#define vec4 float4#define mat2 float2x2#define mat3 float3x3#define mat4 float4x4#define iGlobalTime _Time.y#define mod fmod#define mix lerp#define fract frac#define texture2D tex2D#define iResolution _ScreenParams#define gl_FragCoord ((_iParam.scrPos.xy / _iParam.scrPos.w) * _ScreenParams.xy)#define PI2 6.28318530718#define pi 3.14159265358979#define halfpi (pi * 0.5)#define oneoverpi (1.0 / pi)
(1)Shader 文件如下:
Shader "Shader/Template" { Properties { } CGINCLUDE #include "UnityCG.cginc" #include "ShaderToyDefines.cginc" #pragma target 3.0 // Properties struct v2f { float4 pos : SV_POSITION; float4 scrPos : TEXCOORD0; }; v2f vert(appdata_base v) { v2f o; o.pos = mul (UNITY_MATRIX_MVP, v.vertex); o.scrPos = ComputeScreenPos(o.pos); return o; } vec4 main(vec2 fragCoord); fixed4 frag(v2f _iParam) : COLOR0 { return main(gl_FragCoord); } // 函数 main 对应了 ShaderToy 的 mainImage 函数 vec4 main(vec2 fragCoord) { return vec4(1, 1, 1, 1); } ENDCG SubShader { Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma fragmentoption ARB_precision_hint_fastest ENDCG } } FallBack Off}
(2)如果要使用到鼠标点击行为,使用的脚本
using UnityEngine;using System.Collections;/// <summary>/// 把该脚本拖拽到材质所在的物体上,同时保证该物体上绑定了 Collider /// </summary>public class ShaderToyHelper : MonoBehaviour{ private Material _material = null; private bool _isDragging = false; void Start() { Renderer render = GetComponent<Renderer>(); if (render != null) _material = render.material; _isDragging = false; } void Update() { Vector3 mousePosition = Vector3.zero; // 在有鼠标拖拽时,mousePosition 的 Z 分量为 1, 否则为 0,与 ShaderToy 中判断鼠标的方式一致 if (_isDragging) mousePosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 1.0f); else mousePosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0.0f); if (_material != null) _material.SetVector("iMouse", mousePosition); } void OnMouseDown() { _isDragging = true; } void OnMouseUp() { _isDragging = false; }}
阅读全文
0 0
- 【Shader】应用 ShaderToy 代码的 ShaderLab 模板
- 【Shader】ShaderToy通用模板
- 把Shadertoy上的shader应用到UE4和Maya
- Unity模拟ShaderToy的默认Shader
- 在ShaderToy上研究水波的Shader
- 我的shaderToy之用shader画球(1)
- Shader特效——“Distance 2D”的实现【ShaderToy】
- Shader特效——“Cell Merge”的实现【ShaderToy】
- unity shader:初探shaderlab
- Unity ShaderLab(二) 支持透明的边缘发光Shader
- Shader编程学习笔记(四)—— Unity Shader的组织形式(ShaderLab)
- Shader编程学习笔记(四)—— Unity Shader的组织形式(ShaderLab)
- Shader编程学习笔记(四)—— Unity Shader的组织形式(ShaderLab)
- Shader编程学习笔记(四)—— Unity Shader的组织形式(ShaderLab)
- Unity3D ShaderLab<二>Shader属性
- Unity3D ShaderLab<二>Shader属性
- ShaderLab - 第一天 - Shader基础知识
- Shader Learing(ShaderLab syntax篇)
- 一切都是对象
- HDU 4828 Grids(卡特兰数)
- android快速仿花椒,映客直播上下滑动切换直播间
- 实习笔记:实作第一天工作总结
- LogCat详解、工具类
- 【Shader】应用 ShaderToy 代码的 ShaderLab 模板
- codeforces——268A——Games
- 使用sql生成流水号格式YYYYMMDD0001-YYYYMMDD9999
- 面试(五) JVM
- bzoj 2276: [Poi2011]Temperature 单调队列
- PageAdapter
- 如何在Linux中查看所有正在运行的用户进程
- 日期格式的转化
- iOS下Html页面中input获取焦点弹出键盘时挡问题