Skrivet av Octo:
@Patan77: Klart det är skillnad. Enligt min erfarenhet tar en 4k textur upp bra mycket mindre utrymme än en mesh på flera miljoner trianglar som kan ligga på flera hundra mb. Dessutom kan man komprimera texturer effektivt, något som verkar vara svårare med 3d modeller.
En RGB 8bit 4k textur okomprimerad är ca 50MB, (4096x*4096y*8bit*3rgb).Men som du påpekar kan man komprimera texturen så den tar mindre utrymme, eftersom med färger så har inte komprimering artefakter samt reducerad precision särskilt stor påverkan. Om man använder samma textur och istället använder RGB för att lagra XYZ position som 8bit, vilket redan är mindre precision än vad man brukar använd så tar den texturen också 50MB, dock om man försöker komprimera den texturen kommer alla XYZ positioner ändra sig vilket har väldigt stor påverkan på resultatet, exempel om man har en XYZ position som är x:145.596 y:53.167 z:252.981 så kan man "komprimera / runda" det till 146, 53, 253 med färger så ser man inte direkt nån skillnad mellan Röd 145.596 och 146, men med en position så är det väldigt stor skillnad, om enheten är cm så är position +- 0.5cm om enheten representerar meter är positionen +-50cm från original positionen.
Man kan föröka vara smart och använda en geometrisk boll (sphere) sen "unwrappa" den så att den är platt, sen använda de "normals" från bollen och representerar positionerna som 1D displacement, eftersom då måste man inte lagra XY, i texturen kan man ha RGBD, men fortfarande samma problem med precision och om man bara lagra Z, så kan man inte ha convex geotermi.
Ett enkel test för att se problemet med komprimera textur som representerar position, ta en 3D plane sen använd en komplex 32bit float exr svartvit displacment map och rendera, sen i PS sänk den till 8bit och använd jpg för komprimering och nu använd jpg bilden som displacment och rendera sen jämför resultaten så är problemet bli ganska uppenbart.
Vilket jag gjort här som som exempel:
Eftersom ej convex geometri representeras som 1D displacment så har den vissa artifakter, men precisions skillnaden är gaska uppenbar mellan 8bit jpg and 32bit float, och det här är ett ganska enkelt scenario eftersom det inte är mycket höjd skillnaden mellan lägsta punkt.
32bit float displacment
http://patan77.com/download/exr_displacment.jpg
4k 32bit float displacment närbild (64MB exr mono okomprimerad):
http://patan77.com/download/32bit_float_displacment.jpg
4k 8bit jpg displacment närbild (800KB, 8/12 kvalite ):
http://patan77.com/download/jpg_displacment.jpg
4K jpg displacment , ser bra ut för ögat men för lite data för att representera position korrekt.
http://www.patan77.com/download/depth_01.jpg
Exempel här är en shader jag har programmerat som använder lagrar "geometri" i textur istället för trianglar jag lagrar Z i alpha med RGBA 11:17 unity modellerna på vänster viewport är bara som referens i högra viewport är all "gemerti" renderat i min shader med en textur för att lagra data.
Här är min Texture2D class som jag har programmerat till mitt 3D program som jag håller på utvecklar,det är en väldigt "basic" texture class som är okomprimerad, men som man kan se är en "textur" i grund och botten är bara en array i det här fallet av bytes.
http://patan77.com/download/texture2D.png
En annan video på nått jag programmerade för ett antal år sedan där jag lagrar geometri data i from av en textur. (4k video)