Care sunt modalitățile de reducere a conturului

bine, în general, principiul prin care se face un shader contur este aproximativ același.
ele fac doar compensarea punctului normal, și o fac sub geometria obișnuită.
și un astfel de defect pe care l-ați imaginat apare numai când grupurile de netezire din obiect sunt diferite.






în general, pentru a se asigura că conturul este normal, ar trebui să fie aruncat pe plasă, în cazul în care toate edgies sunt moi.
Nu cunosc alte modalități de a ocoli astfel de jamburi. și într-adevăr pentru mine, ei nu sunt)

magoga a scris: Ei bine, în general, principiul prin care se face un shader contur este aproximativ același.
ele fac doar compensarea punctului normal, și o fac sub geometria obișnuită.
și un astfel de defect pe care l-ați imaginat apare numai când grupurile de netezire din obiect sunt diferite.
în general, pentru a se asigura că conturul este normal, ar trebui să fie aruncat pe plasă, în cazul în care toate edgies sunt moi.
Nu cunosc alte modalități de a ocoli astfel de jamburi. și într-adevăr pentru mine, ei nu sunt)


Nu am pus această expresie aici

ele fac doar compensarea punctului normal, și o fac sub geometria obișnuită.


normalul este doar un vector care este perpendicular pe punct și același tip de valoare este de la 0 la 1 sau nu-i așa? Cum poate o schimbare normală să arate o linie?

normalul este doar un vector care este perpendicular pe punct și același tip de valoare este de la 0 la 1 sau nu-i așa? Cum poate o schimbare normală să arate o linie?


nu exact. da normalizat are o valoare de la 0 la 1 și sunt utilizate doar pentru direcție.

float3 norm = mul ((float3x3) UNITY_MATRIX_IT_MV, v.normal);
float2 offset = TransformViewToProjecție (norm.xy);
o.pos.xy + = offset * _Outline;

karoch. float3 norm = mul ((float3x3) UNITY_MATRIX_IT_MV, v.normal); - direcția normală a fiecărui punct, TransformViewToProjection (norm.xy) - este convertită în coordonatele ecranului,
o.pos.xy + = compensate - și prablyayutsya și o.pos (punctele pozii ..) (o.pos.xy - coordonatele ecran ale fiecărui punct + offset (fiecare direcție normală a ecranului))
Ei bine, atunci puteți multiplica _Outline. Problema este că dacă aveți o margine dificilă. fiecare punct are 2 puncte normale, indicând direcții diferite. și din acest motiv cu adăugarea de offset și se dovedește că cubul pe care l-ați împrăștiat, tk fiecare parte a acestuia compensate unde punctele indică punctele







bliiin, che nu ați spus despre biblioteca suplimentară și appdata_base, o jumătate de oră petrecută pe ea. Ascultă, îmi place asta

Shader "începători / 1 culoare plină" # 123;
Proprietăți # 123;
_Color # 40; "_Color". culoare # 41; = # 40; 1.0. 1.0. 1.0. 1.0 # 41;
_Outline # 40; „Schiță“. gamă # 40; 0. 1 # 41; # 41; = 0,5
# 125;
SubShader # 123;
Pass # 123;
CGPROGRAM
#pragma vertex vert
Fragment #pragma fragment
#include "UnityCG.cginc"


float4 _Color;
float _Outline;

struct vertexInput # 123;
float4 vertex. POZIȚIA;
float4 normal. NORMAL;
# 125; ;
struct vertexOutput # 123;
float4 pos. SV_POSITION;
float4 col. COLOR;
# 125; ;

vertexOutput vert # 40; appdata_base v # 41;
# 123;
vertexOutput o;
o. pos = mul # 40; UNITY_MATRIX_MVP. v. zenit # 41; ;
float3 norm = mul # 40; # 40; float3x3 # 41; UNITY_MATRIX_IT_MV. v. normal # 41; ;
float2 offset = TransformViewToProjecție # 40; normă. xy # 41; ;
o. pos. xy + = offset * _Outline;
retur o;
# 125;

float4 frag # 40; vertexOutput i # 41;. COLOR
# 123;
retur _Color;
# 125;


xs Th nu este corect, dar obiectele mele cresc doar în toate direcțiile, nu sunt expuse linii

magoga a scris (a) :. Ei bine, nu este opțională, dar cel mai mult că fie există un standard, appdata_base, appdata_full și deci este doar un set de standard de intrare pentru shadere vertek ..
Apropo, dacă o folosești pentru tine
struct vertexInput
float4 vertex. POZIȚIA;
float4 normal. NORMAL;
>;
Ei bine, ai nevoie de ..


Da, cred că nu este necesar. Da, nu-ți creați propriile structuri, dacă puteți folosi cele standard? De asemenea, nu am înțeles de ce, cu codul pe care l-am aruncat, obiectul este lărgit în toate cele trei direcții, din acest motiv nu există nicio schiță, ci un întreg autoobiect. Apropo, acest shader are două treceri? În primul rând, o schiță este trasată, iar în al doilea, un obiect obișnuit?

Doar un cub nu este un obiect care arată bine cu schița. Reduceți distanța pentru contur ("grosimea" liniei).


Da, nu, nu am deloc așa ceva, trebuie să-i fac chimie cu profunzime, mă zgârie. Iată cum arată cubul fără contur, cu cea mai mică schiță și cu aceeași contur, dar pe de altă parte
P.S. urmăriți de jos în sus!


Pentru iluminare, avem nevoie de normale direcționate ca în imaginea din stânga, dar pentru extrudarea conturului, ca normalele din dreapta. Faceți 2 seturi de normale, 1-le să fie stocate în normale, iar cele de-a doua în culorile vertexelor.
Oricum, trebuie sa faci 2 treceri: 1-Cull Front, 2-Cull Back, t.ch. IMHO mai rapid decât 2 obiecte separate, va fi numai pentru ochiuri de piele.
-------------
Schiță, puteți desena și crea un efect, în proiectul de înlocuire a shader-ului. există un exemplu de contur, pentru diferențele de adâncime și normale.

post procesare nazhorist IMHO.
ci pentru a face 2 pachete de normale, unul în culoarea celui de-al doilea în normalul normal, aceasta este norma. culoare pentru cheltuieli, normale normale pentru iluminat.







Articole similare

Trimiteți-le prietenilor: