标签: unity3d-shaders

将XNA Shader传递,混合和剔除模式移植到Unity shaderlab中

我不得不将XNA着色器移植到Unity的着色器中,并想验证我是否正确执行了此操作.

Pass1使用alpha混合的部分SrcBlend,DestBlend并将set的cull设置为none是我唯一想要确保正确的地方.

这是XNA着色器版本:

pass Pass1
{
    AlphaBlendEnable = true;
    SrcBlend = SRCALPHA;
    DestBlend = INVSRCALPHA;
    CullMode = None;

    VertexShader = compile vs_2_0 TheVertexShader();
    PixelShader = compile ps_2_0 ThePixelShader();
}
Run Code Online (Sandbox Code Playgroud)

这是我制作的Unity Shaderlab端口:

Tags{ "Queue" = "Transparent" "RenderType" = "Transparent" }
LOD 100
Blend SrcAlpha One
Blend DstAlpha OneMinusSrcAlpha
ZWrite Off
Cull Off 
Run Code Online (Sandbox Code Playgroud)

它似乎在Unity中工作正常,但这是Unity中完全相同的传递设置吗?如果没有,则需要进行哪些更改以获得确切的等效性.

shader xna unity-game-engine shaderlab unity3d-shaders

5
推荐指数
1
解决办法
122
查看次数

只需在 Cg 着色器中获取对象的缩放比例

假设您有一个简单的 Unity 着色器。它根本不使用任何纹理。它只是抓住了位置..

void vert (inout appdata_full v, out Input o) 
{
    UNITY_INITIALIZE_OUTPUT(Input,o);
    o.localPos = v.vertex.xyz;
}
Run Code Online (Sandbox Code Playgroud)

然后画一个正方形..

在此处输入图片说明

示例中的四边形已使用变换拉伸约 3:1。

如果在着色器中我们只知道缩放比例(或者只是比率),我们就可以很容易地绘制“正方形”

在此处输入图片说明

对于广告牌、2D 图像和背景等,这显然是一种常见的日常技术。

在当前的统一 (2018) 中,您如何简单地获得对象的当前缩放比例,在 Cg 中?

这是 Unity 那些疯狂的事情之一,它 (1) 完全没有记录 (2) 唯一可用的关于它的信息长达 13 年,我的意思是其中一些人可能已经去世 (3) 它已经发生了巨大变化在不同的 Unity 版本中,经常讨论它是完全错误的。叹。

怎么做?你是否可以?

目前我只有一个简单的脚本传递值,这还可以,但有点以次充好。

shader cg hlsl unity-game-engine unity3d-shaders

2
推荐指数
1
解决办法
3251
查看次数

Unity 的 YUV 着色器?

我在 Unity 中有一些(适当的、平面的)YUV 纹理,我只想看看它们供开发使用。

Unity(他们的着色器语言变体)实际上有一个可用的 YUV 着色器吗?

从概念上讲,从 YUV 转换为 RGB 很简单……但有点繁琐。

yuv unity-game-engine unity3d-shaders

2
推荐指数
1
解决办法
3191
查看次数

Unity Shader Graph - 如何更改参数 --- 如何同时更改所有对象上的网格的参数?

我按照这个视频创建了我的第一个着色器。溶解着色器视频链接

在协程中,我从对象中获取了材质的组件:

PalaceMaterial = palaceInstance.GetComponent <Renderer> () .material;
Run Code Online (Sandbox Code Playgroud)

我将参数设置为0:

PalaceMaterial.SetFloat ("_ CutoffHeight", 0);
Run Code Online (Sandbox Code Playgroud)

为了达到这个效果,我不得不修改参数“CuttoffHeight”,逐渐将其放入Update()中

 PalaceMaterial.SetFloat("_CutoffHeight", Mathf.MoveTowards(PalaceMaterial.GetFloat("_CutoffHeight"), CutoffHeight, 100 * Time.deltaTime));
Run Code Online (Sandbox Code Playgroud)

我将其应用于所有对象。每 2 秒我实例化一个“不可见对象”(CutoffHeight 设置为 0),并在 Update() 中逐渐更改值。现在我想将此参数更改为同时使用此着色器的所有对象。我希望我说清楚了。

我的项目视频: 项目Dissolve_Effect

我想同时更改第一个平台中的所有立方体中的“_CutoffHeight”参数,然后更改第二个平台中的所有立方体,等等。您有什么想法吗?

c# unity-game-engine unity3d-shaders

1
推荐指数
1
解决办法
8070
查看次数

标签 统计

unity-game-engine ×4

unity3d-shaders ×4

shader ×2

c# ×1

cg ×1

hlsl ×1

shaderlab ×1

xna ×1

yuv ×1