您当前的位置: 首页 >  ar

开发游戏的老王

暂无认证

  • 2浏览

    0关注

    803博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Q&A:Godot Shader中的uniform和varying有什么关系和区别?

开发游戏的老王 发布时间:2020-03-31 20:56:58 ,浏览量:2

刚有朋友问我一个问题,在此解答一下,希望能够帮助更多人,如有错误敬请指正!

Q&A 问:“Godot Shader中的uniformvarying有什么关系和区别?” 答: 相同的地方是:它们都是用来传递数据的。 不同的地方是: uniform用于逻辑语言(GDScript/C#等)和着色器之间传递数据。注意:这个传递是单向的,即只能由逻辑语言传给着色器,反之不行。

范例:《[手把手带你Godot游戏开发]FlappyBird:9.1 天下没有不OVER的GAME(上)》一文中就有一个典型使用范例

#Floor.gd
extends Sprite

func _ready():
	add_to_group("GAME_STATE")

func on_game_over():
	material.set_shader_param("speed",0)
varying用于顶点着色器(Vertex Shader)和片元着色器(Fragment Shader)之间传递数据。当然,由于顶点着色器和片元着色器的处理顺序不同,这种传递也是单向的。

范例:《Godot Shader :在一个面片上让鼠标滑过的地方凸起》

shader_type spatial;
render_mode cull_disabled;

uniform sampler2D  stamp : hint_albedo;
uniform vec2 position;
uniform float bob_scale = 1.0;
uniform vec4 color : hint_color;

varying vec2 vertex_position;

void vertex(){
	vertex_position = UV - position;
	VERTEX.y += texture(stamp,vertex_position).r*bob_scale;
}

void fragment(){
	ALBEDO = color.rgb;
	NORMALMAP = texture(stamp,vertex_position).rgb;
}

关注
打赏
1656935939
查看更多评论
立即登录/注册

微信扫码登录

0.0827s