少し気になった程度の事ですが質問させて下さい。
Unityでディスプレイスマッピングを使う場合はどの様な形で
実装しているのでしょうか?1例の概略といった所でも良いのですが
分かる方が居らっしゃいましたらお教え頂けませんでしょうか
特に気になっている所はディスプレイスマップのアニメーションです。
イメージとしてはマップをアニメーションさせて波のような動きを作る等です。
よろしくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
UnityのStandardAssetsのTessellationSampleシーンが参考になります。
シェーダーのサンプルもあるので、それを元にシェーダーを作れば望まれているものが作れると思います。
以下のシェーダーはBumpedSpecularDisplacementのシェーダーの頂点シェーダーをサインカーブと使って波っぽくしたものです。
ご参考になればと思います。
Shader "Wave Tessellation" { Properties { _Color("Main Color", Color) = (1,1,1,1) _SpecColor("Specular Color", Color) = (0.5, 0.5, 0.5, 1) _Shininess("Shininess", Range(0.03, 1)) = 0.078125 _Parallax("Height", Range(0.0, 1.0)) = 0.5 _MainTex("Base (RGB) Gloss (A)", 2D) = "white" {} _BumpMap("Normalmap", 2D) = "bump" {} _ParallaxMap("Heightmap (A)", 2D) = "black" {} _EdgeLength("Edge length", Range(3,50)) = 10 _WavePhase("WavePhase", Range(0, 300.0)) = 30 _WaveHeight("WaveHeight", Range(0, 10.0)) = 0.1 } SubShader { Tags { "RenderType" = "Opaque" } LOD 800 CGPROGRAM #pragma surface surf BlinnPhong addshadow vertex:disp tessellate:tessEdge #include "Tessellation.cginc" struct appdata { float4 vertex : POSITION; float4 tangent : TANGENT; float3 normal : NORMAL; float2 texcoord : TEXCOORD0; float2 texcoord1 : TEXCOORD1; float2 texcoord2 : TEXCOORD2; }; float _EdgeLength; float _Parallax; float4 tessEdge(appdata v0, appdata v1, appdata v2) { return UnityEdgeLengthBasedTessCull(v0.vertex, v1.vertex, v2.vertex, _EdgeLength, _Parallax * 1.5f); } sampler2D _ParallaxMap; fixed _WavePhase; fixed _WaveHeight; void disp(inout appdata v) { float phase = _Time * _WavePhase; float4 wpos = mul(_Object2World, v.vertex); float offset = (wpos.x + (wpos.z * 0.2)) * 0.5; wpos.y = sin(phase + offset) * _WaveHeight; v.vertex = mul(_World2Object, wpos); float d = tex2Dlod(_ParallaxMap, float4(v.texcoord.xy,0,0)).a * _Parallax; v.vertex.xyz += v.normal * d; } sampler2D _MainTex; sampler2D _BumpMap; fixed4 _Color; half _Shininess; struct Input { float2 uv_MainTex; float2 uv_BumpMap; }; void surf(Input IN, inout SurfaceOutput o) { fixed4 tex = tex2D(_MainTex, IN.uv_MainTex); o.Albedo = tex.rgb * _Color.rgb; o.Gloss = tex.a; o.Alpha = tex.a * _Color.a; o.Specular = _Shininess; o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap)); } ENDCG } FallBack "Bumped Specular" }
投稿2016/06/11 01:09
総合スコア714
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。