Posts

Showing posts from February, 2022

Godot UI

Button按钮 set_pressed_no_signal(仅toggle mode下有效),设置button状态且不触发信号

Godot信号

 信号可以在代码中声明 signal node_ready signal weapon_shooted(damage) 第二种带有变量的声明除了可以在编辑器中看到之外,我没有发现有什么不同,信号发射时默认不带参数。 信号发射时,链接到的函数参数如果比信号参数少,则不能触发。但是函数参数更多且未传入的参数有默认值则可以触发 emit_signal("test_signal", "hello") func _ _on_test_signal_triggered(a, b = " world"):     print(a + b) 自带参数和bind的参数不同,bind参数自动发送,优先度在自带参数之后 注意bind的参数在绑定之后就不可更改了,即使参数已经发生了变化,仍旧发送最初的数值 自带参数可以用一个信号达成不同效果 bind可以同时绑定多个参数。 func _ready():      self.connect("test_signal", self, "_on_test_signal_triggered", ["default bind var"])      emit_signal("test_signal", "button pressed") func _on_test_signal_triggered(var1, var2): print(str(var1) + str(var2)) 输出button presseddefault bind var

从blender导出模型到Godot

Image
1) 导出格式为 gltf packed 2) shape keys 和 modifiers可能不能同时使用(冲突) 3) check modifiers if you have used them and turn off shape keys during export. 4) Uncheck keep materials in godot on consecutive reimports. Click on the button until it reimports properly or restart godot. 5) materials can be imported on per node level or model level

godot editor plugin入门

Image
新建插件 主要方法 ● bool handles(object: Object) virtual 如果插件编辑了一个特定类型的对象(资源或节点),就执行这个函数。 如果返回true,则编辑器请求时将调用edit()和make_visible()函数。 如果您已经声明了方法forward_canvas_gui_input()和forward_spatial_gui_input(),它们也将被调用。 使用plugin更改节点的export var后,可以手动调用edited_node.property_list_changed_notify()方法来更新编辑器的查看器。 生成节点 使用plugin生成节点并添加到当前编辑的场景中,需要将新node的owner设为get_tree().edited_scene_root或其他为packedscenen的父节点(owner即是其跟随保存的packedscene节点)。即否则不能保存到文件中,且在场景树查看器中无法看到。(但仍然可以在canvas editor或spatial editor中查看,但是不能选中,并且不能保存到文件内)

Godot 资源管理

Owner与PackedScene  owner 节点的所有者。 一个节点可以有任何其他节点作为owner(只要它是树中有效的父节点、以及父节点的上层)。 当保存一个节点(使用PackedScene)时,它拥有的所有节点都会被保存。 这允许创建复杂的SceneTrees,包括实例化和子实例化。 set_owner要在add_child()后使用 注意pack方法并不会保存子节点拥有的节点,即owner效果不能向上传递。如果将节点owner设为非父级的packedScene,则此节点及其所有子节点均不能保存到packedscene   将当前节点保存为场景文件 var pack = PackedScene.new() pack.pack(self) ResourceSaver.save("res://SceneTree/TestPack.tscn", pack)

Godot Autoload

Autoload(singleton)必须是基础自node的script或者是packedscene func add_autoload(name, resource):     var node     if resource is Script:         node = resource.new()     elif resource is PackedScene:         node = resource.instance()     else:         return     node.name = name     get_tree().get_root().add_child(node)     # node now exists at $/root/DialogueSystem

godot _set() _get()方法

What are the differences in using set and get vs just setting the variables straight - Godot Engine - Q&A GDScript's  _get() and  _set(): How and When to Use Them (jwestman.net) set(), get(), _set(), _get() 获取或更改变量 例如如果health变量并未声明,则 var new_health = health 语句会出错 而使用get("health")则会返回null。set()同理设置并不存在的属性则什么都不会发生 _get()和_set()则是覆盖方法,类似于setget,只不过写在一起,处理某些情况更为方便。比如更新player的属性: var health var energy var power func _set(property, value):     emit_signal("player_status_updated", {property:value}) _set(), _get()默认执行默认的数值设置和获取代码,所以 func _set(property, value):     print("do nothing!) 也是可以正常运行的。_set,_get内的代码只有在使用set(),get()时才会触发

Blogger自定义

免费主题: Free Blogger templates - BTemplates   Latest Free Templates (gooyaabitemplates.com) 可选的主题定制器 Blogger Editor - Customize your Blogger layouts! - Pimp-My-Profile.com

Godot get_property_list

enum PropertyHint {     PROPERTY_HINT_NONE, ///< no hint provided.     PROPERTY_HINT_RANGE, ///< hint_text = "min,max,step,slider; //slider is optional"     PROPERTY_HINT_EXP_RANGE, ///< hint_text = "min,max,step", exponential edit     PROPERTY_HINT_ENUM, ///< hint_text= "val1,val2,val3,etc"     PROPERTY_HINT_EXP_EASING, /// exponential easing function (Math::ease) use "attenuation" hint string to revert (flip h), "full" to also include in/out. (ie: "attenuation,inout")     PROPERTY_HINT_LENGTH, ///< hint_text= "length" (as integer)     PROPERTY_HINT_SPRITE_FRAME, // FIXME: Obsolete: drop whenever we can break compat. Keeping now for GDNative compat.     PROPERTY_HINT_KEY_ACCEL, ///< hint_text= "length" (as integer)     PROPERTY_HINT_FLAGS, ///< hint_text= "flag1,flag2,etc" (as bit flags)     PROPERTY_HINT_LAYERS_2D_RENDER,     PROPERTY_HINT_LAYERS_2D_PHYSIC...

Krita更改lineart线宽

Image
  Thickness of stroke - Support and Advice / Beginner's Questions - Krita Artists (krita-artists.org) 添加白色背景 -> blur/gaussian blur(模糊) -> Threshold (更改线宽)-> Blur(再次模糊以减少锯齿) ->Mean Removal(抵消上步的模糊)-> Color to Alpha(透明化线条)

Krita笔刷设置

 Opacity 和 Flow: Opacity在连续绘制内(不抬笔)时叠加不会超过透明度(最大透明度为此时的opacity,如果设置了跟随笔压,则最大透明度是笔压-透明度曲线设置的最大值) Flow在连续绘制内可以无限叠加透明度到100% 自定义笔刷icon: 打开笔刷kpp文件,直接绘制更改即可,或自己绘制笔刷icon库使用(200x200px) 传感器sensor Sensors — Krita Manual 5.0.0 documentation 压力 Pressure 压感笔的压力变化,包括压力的增大和减小 压力 (仅增大) PressureIn 只感应压感笔的压力增大数值,无视压力减小数值。这意味着在绘制一道笔画的过程中,压力只能增大,不能减小,直至压感笔离开数位板为止。 X 轴倾斜 X-tilt 压感笔笔身的倾斜角度。不是所有压感笔都有此传感器。 Y 轴倾斜 感应压感笔笔身的倾斜角度。不是所有压感笔都有此传感器。 笔身指向 Tilt-direction 感应压感笔的笔身指向。笔身向 12 点钟方向倾斜时 (笔尖指向执笔者) 为 0°,笔身顺时针旋转 90° 时为 +90°,笔身逆时针旋转 90° 时为 -90°,角度在 -180° 到 +180° 的区间变化。 笔身倾角 Tilt-elevation 感应压感笔的笔身倾角。0° 为笔身平放,90° 为笔身直立。 速度 Speed 感应压感笔的绘制速度。 笔画方向 Drawing Angle 感应笔画的方向。勾选 锁定角度Lock 后,笔画方向将被锁定为每笔开始时的角度。勾选 转角平滑Fan Corners 后,传感器将尝试在笔画转弯对转角处的角度进行平滑。它的滑动条可以控制平滑的阈值角度。 角度偏移 Angle Offset 滑动条可以为当前角度附加一定的偏移量。 笔身旋转 Rotation 感应压感笔笔身的旋转。不是所有压感笔都有此传感器。 距离 Distance 感应笔刷移动的距离。距离以像素为单位计算。默认勾选“循环”选项,会在到达设定最大值后重新开始计算距离。 时间 Time 感应笔刷开始绘制后的时间长度。 随机度 (笔尖印迹) Fuzzy (Dab) 输出一定的随机度,此项对一条笔画内部的每个笔尖印迹生效。此传感器就是一般意义上的“随机”。 随机度 (笔画) Fuzzy Stroke ...

blender shader node入门

Data types Cycles - (Shader) Nodes - inputs outputs - What are the exact data types? - Blender Stack Exchange ‎浅绿色‎‎插座代表‎‎closure‎‎闭包。它们不具有任何特定值,它们用于指示渲染应如何处理光线。可以添加和混合‎‎瓶盖‎‎(这是混合瓶盖颜色的"添加"操作)。‎‎闭包‎‎是‎‎确定从周围环境到入射矢量方向的反射光量的函数,它们通常乘以颜色。它们还可以使用 OSL 转换为字符串。‎ ‎紫色‎‎套接字表示‎‎矢量‎‎。它们有三个分量,分别用于 X、Y 和 Z。它们可以用作矢量、点、法线或可由 3 个分量表示的任何类型的数据(它们甚至可以表示颜色)。‎ ‎黄色‎‎插座代表‎‎颜色‎‎。它们类似于紫色插座,它们也有3个组件(红色,绿色和蓝色),但它们被视为颜色,通常,转换是在色彩空间中完成的。例如,将颜色插入值套接字时,颜色将转换为灰度,并用作单个值(val=R*0.2989 + G*0.5870 + B*0.1140);但是,如果我们用相同的值(val= (X + Y + Z)/3)填充矢量而不是颜色,则此值将有所不同。‎ ‎浅灰色‎‎插座表示‎‎单个值‎‎。就像0.0,1.0,0.5,-5.5,3.1415等。‎ ‎深绿色‎‎插座表示‎‎整数‎‎ (-2, -1, 0, 1, 2,...)‎ ‎白色‎‎(在新版本中为深灰色)套接字虽然不常见,但通常代表 ‎‎String。‎‎它们并不常见,只能与 OSL 一起使用。‎ ‎除‎‎闭包‎‎、‎‎整数‎‎和‎‎字符串外‎‎,所有其他套接字组件都是‎‎浮点‎‎值(甚至整数也转换为浮点值,因为 SVM 仅使用这些值)。‎ ‎现在,套接字表示信息的输入/输出。人们如何使用这些信息远远超出了在一个简单的答案中给出的可能性,因为每个值都可以根据它们使用的上下文具有不同的含义。例如,值 0.8 可以表示任何值(粗糙度值、IOR 值、角度等)。由用户为这些值提供上下文。‎ ‎另一点是:不要以为值真的从一个套接字传递到另一个套接字。节点树在发生任何更改后都会被分析,SVM 会在后台编译工作版本。您在节点中拥有的只是一个接口。‎

Blender node材质合集

Image
 伪各项异性(eevee)

Blender tips

Image
 UV 26 Essential Blender Tips for UV Unwrapping Subdivision Surfaces - YouTube 第一原则--更少的island,合适的texture desity比例(主面占有更大的空间),更少的uv扭曲 基本流程---live unwrap,pin island,fix uv,turn off live unwrap,adjust island size,pack island 按住ctrl选择---shortest path---切换tag为mark seam---可快速进行uv分割 u-Follow Active Quads(需要在face select模式,否则返回no active faces。且不能是三角面。在uv editor窗口按w也可以找到)--讲面按照实际比例展开 L--select linked--切换tab为seam--可按seam分割选择 新建图片选择uvgrid以帮助检查uv展开 展开具有subdivision surface的物体,将subdivision modifier--advanced--uv smooth改为keep corners可以修复一些uv扭曲。 展开具有subdivision surface的物体,seam边缘出现uv拉伸可将此seam改为旁边的loop,或添加额外loop以修复拉伸。 U-minimize stretch减少uv拉伸变形 更好的uv addon: UV-Packer for Blender | UV-Packer Node shift+A---add frame---ctrl+P(或使用内置node wrangler插件下shift+P)添加frame来更好的组织node,alt+P取消和frame的连接(或x删除frame) ctrl+G---打组,tab--进入或退出node group home--回到节点视图中央 使用内置node presets插件建立node group库 Resources 使用auto-pack绑定资源到blender源文件 unpack- use files in current directory--解绑文件并自动创建文件至blender源文件目录

godot export vars 列表

  List of export hints - Godot Engine - Q&A Godot exports hints If the exported value assigns a constant or constant expression, the type will be inferred and used in the editor.export var number = 5 Export can take a basic data type as an argument, which will be used in the editor.export(int) var number Export can also take a resource type to use as a hint.export(Texture) var character_face export(PackedScene) var scene_file There are many resource types that can be used this way, try e.g. the following to list them:export(Resource) var resource Integers and strings hint enumerated values. Editor will enumerate as 0, 1 and 2.export(int, "Warrior", "Magician", "Thief") var character_class Editor will enumerate with string names.export(String, "Rebecca", "Mary", "Leah") var character_name Named enum values Editor will enumerate as THING1, THING2, ANOTHER_THING.enum NamedEnum {THING_1, THING_2, ANOTHER_THING = -1} export (Na...

godot _set()和_get()

  GDScript's  _get() and  _set(): How and When to Use Them 27 December 2020 I recently found myself writing this monstrosity of a line of code in Godot Engine: var owner : = Client . db . get_subobject ( "players" ) . get_subobject ( str ( value . owner )) And immediately thought there must be a better way. It turns out, there is: the  _get ,  _set , and  _get_property_list  methods. They allow you to define properties of your GDScript object at runtime, not just at compile time, which is a very powerful technique when used appropriately. Now that code looks like this: var owner : = Client . db . players [ str ( value . owner )] Getters and setters, but for everything _get()  is a virtual method that acts sort of like the  get  half of  setget , but for any property that isn’t already defined by your class. You can do whatever you want in that function, and you return the value of the requested property (or  null  ...

神与你同在

  神与你同在。你在神在,你不在神亦不在。只有在--isness,而无人与神