最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Creator 最新3D shader UV動畫的實現(xiàn)

2019-09-02 20:41 作者:博毅創(chuàng)為  | 我要投稿

Cocos 的3D捕魚達(dá)人里面有魚背上的波光(圖一),今天就給大家講解一下,這種技術(shù)細(xì)節(jié)的實現(xiàn)---》UV動畫。

1: 什么是uv動畫?

??就是將兩個紋理合成以后,不斷改變一個紋理的uv坐標(biāo),讓這個紋理的貼圖位置不斷改變而形成UV動畫。比如火焰,河流,都可以采用這樣的技術(shù)來實現(xiàn)。

?

2: cocos creator shader 為什么要重點學(xué)習(xí)?

??未來毫無疑問,微信小游戲會越來越大,越來越精美,shader開發(fā)也是未來的一個核心,因為它能定制精美的畫面,和完成精美的特效。

?

3: cocos creator Shader要使用那個版本?

??cocos creator Shader要使用2.1.x這個版本,目前使用最新的2.1.2這個版本會比較好一些。Cocos creator 2.0以下的版本都不支持 材質(zhì) +?shader

?

4: cocos creator 材質(zhì)和shader

??Shader 是一種給GPU執(zhí)行的代碼,GPU的渲染流水線,為了方便開發(fā)人員定制效果,開放出接口給程序員編寫代碼來控制,這種程序叫作shader, shader開發(fā)語言,cocos采用的是GLSL編程語言。開發(fā)人員可以在下圖頂點Shader和著色Shader來插入代碼。

材質(zhì)是一種配置文件,選擇好一個Shader(算法), 并給這個Shader提供必要的參數(shù),?材質(zhì)被關(guān)聯(lián)到Sprite, MeshRenderer等組件里面,當(dāng)游戲引擎繪制物體的時候,先讀取材質(zhì),根據(jù)材質(zhì),?給GPU配置shader和shader要的參數(shù),?這樣管道流水線就可以完成的繪制出來這個物體。

5: creator 3D Shader的模板結(jié)構(gòu)詳解:

??%{

??techniques: [

????{

??????passes: [

????????{

??????????vert: vs ?// 頂點shader代碼模塊

??????????frag: fs ?// 著色shader代碼模塊

??????????cullMode: none

??????????depthTest: true

??????????depthWrite: true

??????????blend: true

????????}

??????]

??????layer: 0

????}

??]

??

??properties: { // 材質(zhì)上的屬性變量,可以在材質(zhì)屬性編輯器上看到變量作可視化編輯

????diffuseTexture: {

??????type: sampler2D

??????value: null

????}

??}

%}

?

%% vs { // 頂點shader

precision highp float;

attribute vec3 a_position; // 從渲染管道獲取的頂點坐標(biāo)

attribute mediump vec2 a_uv0; // 從渲染管道獲取的紋理坐標(biāo);

attribute lowp vec4 a_color; // 從渲染管道獲取的頂點顏色

?

?

uniform mat4 cc_matWorld; ?//引擎繪制物體時設(shè)置當(dāng)前物體模型到世界的變換矩陣

uniform mat4 cc_matViewProj; // 引擎繪制物體時設(shè)置世界坐標(biāo)到投影坐標(biāo)系的變換

?

varying lowp vec4 v_color; // 頂點shader傳遞給著色shader的頂點顏色

varying mediump vec2 v_uv0; // 頂點shader傳遞給著色shader的頂點紋理坐標(biāo)

?

?

void main () {

??vec4 position = vec4(a_position, 1);

??v_uv0 = a_uv0;

??v_color = a_color;

??// 將模型坐標(biāo)變換到透視投影坐標(biāo),返回給渲染管道;

??gl_Position = cc_matViewProj * cc_matWorld * position;

}

}

?

%% fs { // 著色shader

precision highp float;

uniform sampler2D diffuseTexture; // 用戶指定的模型貼圖

varying lowp vec4 v_color; // 頂點shader傳遞過來的顏色

varying mediump vec2 v_uv0; // 頂點shader傳遞過來的紋理坐標(biāo)

?

void main () {

??// 根據(jù)紋理坐標(biāo)獲取顏色

??vec4 col = texture2D(diffuseTexture, v_uv0);

??gl_FragColor = col; // 將著色返回給渲染管道

}

}

?

6: uv動畫shader的實現(xiàn):

?%{

??techniques: [

????{

??????passes: [

????????{

??????????vert: vs ?

??????????frag: fs

??????????cullMode: none

??????????depthTest: true

??????????depthWrite: true

??????????blend: true

????????}

??????]

??????layer: 0

????}

??]

??

??properties: {

????diffuseTexture: {

??????type: sampler2D

??????value: null

????}

//?sub_tex, 存放第二個紋理

sub_tex: {

??type: sampler2D

??????value: null

}

// 程序設(shè)置給shader當(dāng)前運行時間;

run_time: {

??type: number

??value: 0

}

??}

%}

?

%% vs {

precision highp float;

attribute vec3 a_position;

attribute mediump vec2 a_uv0;

attribute lowp vec4 a_color;

?

?

uniform mat4 cc_matWorld;

uniform mat4 cc_matViewProj;

?

varying lowp vec4 v_color;

varying mediump vec2 v_uv0;

?

?

void main () {

??vec4 position = vec4(a_position, 1);

??v_uv0 = a_uv0;

??v_color = a_color;

??gl_Position = cc_matViewProj * cc_matWorld * position;

}

}

?

%% fs {

precision highp float;

uniform sampler2D diffuseTexture;

uniform sampler2D sub_tex;

uniform float run_time;

?

varying lowp vec4 v_color;

varying mediump vec2 v_uv0;

?

void main () {

??// 根據(jù)時間來生成坐標(biāo)偏移,時間不斷變化,坐標(biāo)也就變化,形成了uv動畫

??vec2 offset = vec2(run_time, run_time);

??// 第二章貼圖的顏色采樣

??vec4 light = texture2D(sub_tex, v_uv0 + offset);

??vec4 col = texture2D(diffuseTexture, v_uv0);

??gl_FragColor = col + light;

}

}


6: 程序如何控制Shader代碼

cc.Class({

????extends: cc.Component,

?

????properties: {

????????

????},

?

????// LIFE-CYCLE CALLBACKS:

?

????// onLoad () {},

?

????start () {

????????this.now_time = 0;

????????// 獲取MeshRenderer組件,去找到材質(zhì)對象;

????????this.mr = this.getComponent(cc.MeshRenderer);

????},

?

????update (dt) {

????????this.now_time += dt;

????????

????????// 獲取材質(zhì)對象;

????????let material = this.mr.sharedMaterials[0];

????????// 通過材質(zhì)來修改shader里面的變量值run_time,

????????// shader里面的run_time跟著改變了;

????????material.setProperty('run_time', this.now_time);

????????// 將材質(zhì)更新到MeshRenderer的材質(zhì)對象上

????????this.mr.setMaterial(0, material);

????},

});

?

?

UV shader動畫,的視頻詳細(xì)講解,和項目工程,可以加3039440832,今天的分享都到這里結(jié)束了,謝謝大家。


Creator 最新3D shader UV動畫的實現(xiàn)的評論 (共 條)

分享到微博請遵守國家法律
易门县| 鲁甸县| 伊通| 湘潭县| 梨树县| 和田县| 永寿县| 武定县| 濮阳县| 界首市| 阜城县| 板桥市| 汉寿县| 九龙坡区| 阿克陶县| 来宾市| 承德市| 宜阳县| 上蔡县| 龙川县| 宁海县| 肇东市| 克山县| 辽宁省| 定州市| 黎平县| 富裕县| 洪泽县| 中阳县| 灵山县| 克东县| 利辛县| 乌拉特中旗| 崇左市| 法库县| 古蔺县| 固安县| 高青县| 文安县| 马边| 阿城市|