Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Unity jiné úpravy bodů modelu

Dobrý den, chtěl bych se zeptat zdali jde v Unity model rozložit na body, které bych potom dále upravoval. Vím že v blendru to takhle jde, jenomže v něm se mi špatně pracuje. Vysvětlím to tak nějak trochu bláznivě snad mě pochopíte:

Mám model, který se skládá třeba čtverec ten má 8 hlavních bodů, potřeboval bych přidat další a upravit je do svojí polohy, tak kdybych chtěl udělat ze čtverce trojúhelník, ale jen z praktických bodů s tím, že bych velikost a napozicování udělal pouze z daných bodů. A proto bych se chtěl i dotázat jestli tahle varianta vůbec v Unity existuje a zdali není v plné verzi protože já to ve volné verzi nenašel, učím se sním začal jsem přímo u úprav modelů,pohybu,animací, různých efektů apod ... s tím, že scripty ještě položím k ledu. Potřebuji se prvně naučit v programu, což se mi zdá docela daří i já se divím, ale zasekl jsem se právě u tohohle a v blendru nechci dělat modely abych je potom mohl postupem dávat do Unity.

Problém je v tom že tam nemám žádný nastroj na to abych ty body označil a potom je třeba posunul, mám tam jen posunutí celého objektu či modelu.

Unity 5.0.1f1

Děkuji za pomoct a vstřícnost Přeji hezký den :)

Předmět Autor Datum
• Nevím jestli je nejlepsí napad to dēlat v unity, nakou dobu jsem jiz nēco dēlal (na časti) kde ano… nový
CoCoChanel 13.05.2015 07:53
CoCoChanel
Pokud "bod" je vertex, tak manipulovat s vertexy můžeš. Záleží kde s nimi budeš manipulovat? Na CPU… poslední
martin.developer 13.05.2015 10:23
martin.developer

• Nevím jestli je nejlepsí napad to dēlat v unity, nakou dobu jsem jiz nēco dēlal (na časti) kde ano 5.0 je velmi dobrá a vykoná, jestli uvadís ze se jen učís tak bych ti spís doporučil 4.x která je stabilnējsí.
• Bohuzel nerozumím tvé otázce, na co rozdelovat nēco na body v unity nebo mēnit čtverec na trojúhelník, mohl by jsi uvés jiny príklad?

TiP~ Jestli teprve začínás, začni kupríkladu s gravitací a její manipulací, colidery, od začátku pouzívat u ukladat objekty do prefab jinak i maly level bude rychle neprehledny a podobnē. Samozrejmē dēlej jak je libo, ale bez základu rychle príjdou komplikace. :)
(Blind není jediny, i kdyz populární SW na tuto manipulaci)

Pokud "bod" je vertex, tak manipulovat s vertexy můžeš. Záleží kde s nimi budeš manipulovat?

Na CPU (C# script) to v případě častých úprav (každý frame) bude pomalé (upravit v CPU paměti, přesun z RAM do VRAM, rendering).
Na GPU to zase můžeš být složitější - pomocí vertex shaderu, ale bude to rychlé a výkonné.

Ukázka CPU varianty:

Mesh mesh = GetComponent<MeshFilter>().mesh; // Get mesh reference
Vector3[] vertices = mesh.vertices; // Get all verticies as Vector3 array, its copy not reference

for (int i = 0; i < vertices.Length; i++) {
  vertices[i] += Vector3.right * Time.deltaTime; // Move every vertex to right in time
}

mesh.vertices = vertices; // Override verticies
mesh.RecalculateBounds(); // This is important step, Unity have to recalculate bounds with new verticies

Unity běžně používá surface shadery, ale lze si šáhnout i přímo na Vertex a Fragment shadery.

Ukázka GPU varianty (vertex a surface shader):

  Shader "MoveVerticiesToRight" {
    Properties {
      _MainTex ("Texture", 2D) = "white" {} // Texture input of object
    }
    SubShader {
      Tags { "RenderType" = "Opaque" }
      CGPROGRAM
      #pragma vertex vert
      #pragma surface surf Lambert
      
      struct Input {
          float2 uv_MainTex;
      };
      struct v2f {
	  float4 pos : SV_POSITION;
      };
      
      // Vertex shader
      v2f vert (inout appdata_full v)
      {
	      v2f o;
	      v.vertex.xyz += float3(1, 0, 0) * _Time; // Move to right
	      o.pos = mul (UNITY_MATRIX_MVP, v.vertex); // Align position to MVP matrix
	      return o;
      }
      
      sampler2D _MainTex;

      // Surface shader
      // You must write fragment or surface shader or your object will not be rendered to render target color buffer
      void surf (Input IN, inout SurfaceOutput o) {
          o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb; // Sample texture color into albedo channel
      }
      ENDCG
    }
    
    Fallback "Diffuse"
  }

Problém GPU varianty je taky to, že když pohneš vertexy v GPU tak fyzikální collider se nepohne s nimi.

BTW: Dal jsem tam menší komentáře k tomu kódu, tak snad to nějak půjde pochopit.

Zpět do poradny Odpovědět na původní otázku Nahoru