Проблема стакана и бесконечной воды
        09-12-2008 03:24
        к комментариям - к полной версии 
	- понравилось!
	
	
        
Проблема которую нужно решить всем разработчикам игр,видеокарт,процессоров.
Представьте себе компьютерную игру, вот вы зашли допустим в смоделированную уборную. Там есть высокополигональный весьма реалистичный унитаз и всё выглядит как фотографии. Современные видеокарты делают это без особых проблем в компании Direct X 10.
Вот в раковине стоит стакан, причём стоит он прямо под краном. Вы нажимаете использовать на кране и из крана льётся реалистичная вода.
Тут то начинается вся охинея.
Для реалистичности вода должна подчиняться примитивным законам физики. А значит, что стакан должен заполниться водой, после чего вода должна выливаться из стакана вымещая уже существующую в нём воду.
Как это решить? Кажется такая задача достойна диплома по математике. 
Но тут ПОКА ЧТО не всё так сложно.
Что есть вода в данном случае? вода тут представляет из себя партикл (particle). На русский переводят сие достижение техники как "Частица". Ну тут я приврал...для симуляции воды нужно МНОГО, ОЧЕНЬ много таких частиц. Для примера сравните что частица в данном случае это капелька.
Так вот партикл грубо говоря это точка, на которую можно натянуть шейдер. Что такое шейдер мне объяснять влом ибо сам не до конца понимаю всю низкоуровневость тех процессов для присвоения шейдера частице. 
Шейдер грубо говоря это отдельная программа отвечающая за какие то эффекты. Например взрыв в играх последнего поколения сделан с использованием партиклов и шейдеров.
При взрыве шейдер рассчитывает свою траекторию полёта и вид. Т.Е. каждая отдельная частица летит отдельно (допустив в эффекте взрыва 600 партиклов) видео карта без труда делает всю "грязную" работу и практически не вызывает тормозов, а если вызывает то владельцы СОВРЕМЕННЫХ видеокарт их не замечают. Шейдер оставляет за собой след в виде дыма и после некоторого определённого промежутка времени исчезает (т.е. выгружается из памяти) В данном случае взрыв это цветочки.
Вернёмся к стакану.
Давайте представим что капелька это маленький кубик. Вот из крана падают мелкие кубики и подчиняются физическим законам (гравитация,столкновения,ветер)
Ветра в помещении нет и на кубики действуют только сила тяжести кубиков которые идут пряма за ними и сама гравитация.
Вот стакан заполняется кубиками после чего новые кубики вымещают старые и старые "выплёскиваются" из стакана. а теперь представим что если оставить так на полчаса например?
раковина заполнится кубиками и они будут уже "выплёскиваться" на пол. а объём используемой памяти всё растёт и растёт, нагрузка на процессор увеличивается, ведь нужно рассчитывать траекторию КАЖДОГО кубика в отдельности.
И через эти пол часа игра будет дико дико тормозить даже на новейших видеокартах.
А теперь представим что кубики невидимые. а на их структуру "надели" шейдер. Теперь помимо траекторий каждого кубика, компьютеру приходится рассчитывать и различные эффекты .
Например когда 2 кубика сталкиваются то сначала шейдер воды притягивает к себе другой кубик, соединяясь с ним а потом они летят дальше кто куда и вновь разъединяются.
Объём работ для компьютера увеличился в разы.
А теперь вспомним что кубиков уже миллионы.
Память компьютера не выдерживает и всё. Игра вылетает, операционная система рушится и компьютер перезагружается.
Так как же решить проблему стакана и бесконечной воды на современных компах?
Ведь пока не будет реализован сей эффект мы не сможем шагнуть в будущее игр, индетичных нашей иллюзии.
	
	
		вверх^
		к полной версии
		понравилось!
                в evernote